コードの中にI18nPipe
を使用してください:
transform()
が与えられた
string
パラメータがそれを翻訳することをあなたの
I18nPipe
クラス内のメソッドである
constructor(private translator: I18nPipe) {
let translatedText = this.translator.transform('Hello');
}
。例:
国際化パイプ:
@Pipe({
name: 'i18n',
pure: false
})
export class I18nPipe implements PipeTransform {
constructor(public i18nService: I18nService) {
}
transform(phrase: any, args?: any): any {
return this.i18nService.getTranslation(phrase);
}
}
i18nService:
@Injectable()
export class I18nService {
public state;
public data: {};
getTranslation(phrase: string): string {
return this.data && this.data[phrase] ? this.data[phrase] : phrase;
}
private fetch(locale: any) {
this.jsonApiService.fetch(`/langs/${locale}.json`)
.subscribe((data: any) => {
this.data = data;
this.state.next(data);
this.ref.tick();
});
}
}
ごi18nService
あなたが(にfetch()
方法で現在の言語を取得し、カスタムAPIサービスを介しているに私のケースはjsonApiService
です)あなたはes.json、en.json、de.jsonなどからデータを取得します(yo ur local
パラメータ)およびgetTranslation()
実際には、指定されたパラメータを変換してその変換された値を返します。
更新1:これにより
、あなたはes.json
のようなファイルを持つことができます。
"hello": "Hola",
"sentence1": "This is the sentence 1",
"goodbye": "Adiós"
をそしてこの@Pipe
は私のようなあなたの.component.ts
ファイルに変換を適用するために、コードで使用することができます(これは、AjaxでレンダリングされたDataTableなど)の場合に便利です。。
それとも単に、あなたのテンプレートに適用することができます。
{{ 'hello' | i18n }}
{{ this.goodbyeStringVariable | i18n }}
私はより多くのHTMLなどのためのようないくつかのコンパイル時の交換を考えていました。 翻訳されたテキストを取得するためにすべてのWebAPIサービスを望んでいないと思ったのですが、翻訳されたJSファイルを持っています – PeterFromCologne
これは私が投稿したものです。 'fetch()'メソッドをチェックすると、 'locale'をパラメータとして渡して、変換された.jsファイルをロードします。そこからそれらの翻訳を入手します。この変換を '@ Pipe'をテンプレートのパイプとして使うことができます。 – SrAxi
@PeterFromCologne私は自分の答えを更新しました。より詳細な例が必要な場合は、明日お渡しします。 – SrAxi