В наши дни почти каждый веб-сайт поддерживает несколько языков.

В угловом приложении очень легко реализовать интернационализацию. Есть несколько способов сделать это, я собираюсь написать тот, который я нашел лучше всего. Я поделился ссылкой на исходный код в нижней части этого руководства.

Давайте начнем,

Мы будем использовать модули core и http-loader от @ngx-translate.

бегать

npm install @ngx-translate/core и

npm установить @ngx-перевод/http-загрузчик

Мы все готовы испачкать руки. Теперь давайте создадим службу конфигурации.

import { Injectable } from '@angular/core';
import {TranslateService} from '@ngx-translate/core';

@Injectable({
  providedIn: 'root'
})
export class I18nConfigService {

  currentLang = 'en';
  translateService: TranslateService;

  setSelectedLanguage(language) {
    this.currentLang = language;
    this.applyLanguage(this.currentLang);
  }
  private applyLanguage(language) {
    this.translateService.use(language);
  }
  getLanguages() {
    return this.translateService.getLangs();
  }
  constructor(translateService: TranslateService) {
    this.translateService = translateService;
  }

  setUpConf() {
    this.translateService.addLangs(['en', 'fr']);
    this.translateService.setDefaultLang(this.currentLang);
    this.applyLanguage(this.currentLang);
  }
}

Внутри функции setUpConf() сначала мы предоставляем массив кодов языков, затем во второй строке мы передаем текущий язык в качестве кода языка по умолчанию, а в последней строке мы применяем текущий выбранный язык.

Теперь нам нужен компонент с выпадающим меню для смены языков.

import { Component, OnInit } from '@angular/core';
import {I18nConfigService} from '../service/i18n-config.service';

@Component({
  selector: 'app-language-selector',
  template: '<select class="form-input col-md-2" style="display: block" ' +
  ' #langSelect (change)="i18nConf.setSelectedLanguage(langSelect.value)">\n' +
  '      <option *ngFor="let lang of i18nConf.getLanguages()" [value]="lang" ' +
  ' [selected]="lang === this.i18nConf.currentLang">{{ lang }}</option>\n' +
  '    </select>\n',
  styles: []
})
export class LanguageSelectorComponent implements OnInit {
  i18nConf: I18nConfigService;
  constructor( i18nConf: I18nConfigService) {
    this.i18nConf = i18nConf;
    this.i18nConf.setUpConf();
  }

  ngOnInit() {
  }

}

Я использую строку HTML для отображения раскрывающегося списка языков. При выборе мы меняем текущий язык в I18nConfigService.

Теперь нам нужно настроить провайдера в файле app.module.ts.

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { LanguageSelectorComponent } from './language-selector/language-selector.component';
import { HomeComponent } from './home/home.component';
import {AppRoutingModule} from './app-routing.module';
import {HttpClient, HttpClientModule} from '@angular/common/http';
import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import {TranslateLoader, TranslateModule} from '@ngx-translate/core';

npm install @ngx-translate/core
// AoT requires an exported function for factories
export function HttpLoaderFactory(httpClient: HttpClient) {
  return new TranslateHttpLoader(httpClient);
}

@NgModule({
  declarations: [
    AppComponent,
    LanguageSelectorComponent,
    HomeComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Теперь вам нужно создать файлы Json для другого языка в каталоге assets. Имейте в виду, имена файлов должны быть с кодами языков, которые мы предоставили в службе конфигурации. например, en.json и fr.json.

en.json

{
    "HOME" : {
      "H1" : "Welcome to Angular internationalization!",
      "H2" : "Here are some links to help you start: ",
      "A1_LABEL" : "Tour of Heroes",
      "A2_LABEL" : "CLI Documentation",
      "A3_LABEL" : "Angular blog"
    }
}

fr.json

{
  "HOME" : {
    "H1" : "Bienvenue à l'internationalisation angulaire!",
    "H2" : "Voici quelques liens pour vous aider à démarrer:",
    "A1_LABEL" : "Tour des Héros",
    "A2_LABEL" : "Documentation CLI",
    "A3_LABEL" : "Blog angulaire"
  }
}

Теперь просто добавьте ‹app-language-selector›‹/app-language-selector›к компоненту, в котором вы хотите, чтобы язык раскрывался.

<div>
  Select Language : <app-language-selector></app-language-selector>
</div>

Ну вот. Мы сделали. Просто, не так ли? :-п

Спасибо за чтение. Вы можете скачать исходный код здесь. https://github.com/hemant231/angular-internationalization

Спасибо за чтение. Ваше здоровье !