В наши дни почти каждый веб-сайт поддерживает несколько языков.
В угловом приложении очень легко реализовать интернационализацию. Есть несколько способов сделать это, я собираюсь написать тот, который я нашел лучше всего. Я поделился ссылкой на исходный код в нижней части этого руководства.
Давайте начнем,
Мы будем использовать модули 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
Спасибо за чтение. Ваше здоровье !