Translating
You can implement translation in your Angular application in the following ways.
- Using the translate pipe
- Using the
tattribute - Using the Translations methods
Translate pipe
You can translate a string using the translate pipe. It accepts specific parameters and an optional default value.
<h1>{{'hello_world' | translate}}</h1>
To provide parameters for translation, pass them as the first parameter of the translate pipe.
To enable parameter interpolation, you need to use a message formatter.
<h1>{{'hello' | translate:{ name: 'John Doe' }}}</h1>
You can also provide a default value.
// with params
<h1>{{'hello' | translate:{ name: 'John Doe' }:'Default!'}}</h1>
// or without params
<h1>{{'hello' | translate:'Default!'}}</h1>
To disable wrapping, provide a noWrap option.
<h1>{{ 'hello' | translate:{ noWrap: true } }}</h1>
t attribute
You can also use a t attribute with an element for translation. Angular will render Tolgee component with t attribute selector.
<h1 t key="providing_default_values"></h1>
To provide parameters for translation, pass them via the params attribute.
To enable parameter interpolation, you need to use a message formatter.
<p t key="using_t_with_params" [params]="{ name: 'John Doe' }"></p>
You can also provide a default value using the default attribute.
<p t key="using_t_with_default" default="This is default"></p>
Translation methods
To translate texts in your component code, you can use translate or instant methods.
These methods are part of TranslateService which can be injected using dependency injection as shown in the following example.
import { Component, OnInit } from '@angular/core';
import { TranslateService } from '@tolgee/ngx';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent implements OnInit {
constructor(private translateService: TranslateService) {}
helloWorld: string;
async ngOnInit(): Promise<void> {
this.translateService
.translate('hello_world')
.subscribe((r) => (this.helloWorld = r));
}
}
translate method returns an Observable. As a result, the provided listener is called every time the translation changes due to language changes or other reasons.
this.translateService
.get('hello_world')
.subscribe((r) => (this.helloWorld = r));
If you are unable to use this asynchronous approach for any reason, you can use the
instant method.
Don't overuse the instant method. Whenever possible, use the translate method.
When translations are not loaded, instant method will not provide a valid result.
this.helloWorld = this.translateService.instant('hello_world');
Both the instant and translate methods accept the same parameters as tolgee.t.