This is a small introduction to multi language support in angular by npm package ngx-translate.
First install ngx-translate in your project:
npm install @ngx-translate/core --save
use in your package.json this entries: works at test-time with versions below
"dependencies": { "@ngx-translate/core": "^11.0.1", "@ngx-translate/http-loader": "^4.0.0" },
Now you need to add and configure the TranslateModule to your app.module.ts to load the i18n files. Add Import Statments:
import {NgModule} from '@angular/core'; import {BrowserModule} from '@angular/platform-browser'; import {HttpClientModule, HttpClient} from '@angular/common/http'; import { TranslateModule, TranslateLoader, TranslatePipe } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import {TranslateService} from "@ngx-translate/core"; import {AppComponent} from './app'; // Translation Loader Factory export function createTranslateLoader(http: HttpClient) { return new TranslateHttpLoader(http, '../assets/i18n/', '.json'); } @NgModule({ declarations: [AppComponent], imports: [BrowserModule, MatIconModule, HttpClientModule, HttpClientModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: createTranslateLoader, deps: [HttpClient], } })], exports: [ TranslateModule, TranslatePipe], bootstrap: [AppComponent] }) // >>> add TranslateService to constructor export class AppComponent { constructor(translate: TranslateService) { translate.setDefaultLang('en'); translate.use('en'); } }
You can use the TranslateService in this way in your component and set the default language:
In app.component.ts add this
import { Component } from '@angular/core'; import {TranslateService} from "@ngx-translate/core"; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { constructor(private translate: TranslateService) { translate.setDefaultLang('en'); translate.use('en'); } }
It make sense to get the default language from your device. Replace the code in constructor with this:
const _defLang = window.navigator.language; translate.setDefaultLang(_defLang); translate.use(_defLang);
In your code use TrasnlateService like this:
translate.get('demo.title').subscribe((res: string) => { ... });
In your HTML-view use pipe:
{{ 'demo.title' | translate }}
Create your JSON translation file in assets-folder.
Each language is stored in a separate JSON file.
Add the English translation to file:
assets/i18n/en-EN.json
Use a translation ID for each text.
{ "demo.title": "Translation demo", "demo.text": "This is a simple demonstration app for ngx-translate" }
Also add a file for german language:
assets/i18n/de-DE.json
{ "demo.title": "Übersetzungs demo", "demo.text": "Das ist eine einfache Beispiel App für ngx-translate." }
Use this Translation IDs in your components to get the text for the set default language.
I hope this short documentation helps to get in ngx-translate within angular a little bit faster.
refer to:
https://phrase.com/blog/posts/angular-localization-i18n/
https://www.codeandweb.com/babeledit/tutorials/how-to-translate-your-angular-app-with-ngx-translate
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language
https://simpleen.io/translate-angular-i18n
Top comments (0)