1

我能够使用翻译管道翻译文本,但目前正在努力使用翻译服务的 get 和即时方法加载翻译。下面是我在 app.component.ts 中的代码

export class AppComponent {

event : string;
constructor(private translate: TranslateService) {
    translate.addLangs(["en", "fr"]);
    translate.setDefaultLang('en');
    let LangChangeEvent : {}
    let browserLang = translate.getBrowserLang();
    translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');

    this.translate.get('ALL_LOCATIONS_TREEVIEW').subscribe((event: String) => {
              console.log(event);

          });
}

}  

我正在控制台中打印事件。我希望它的翻译在用户改变语言时改变。我的其余翻译(使用管道)工作正常,但我看不到控制台随着语言的变化而变化。我错过了什么?

4

2 回答 2

5

get只会执行一次,并会使用当前使用的语言获取键的值。您需要将控制台日志绑定到语言更改事件,如下所示:

this.translate.onLangChange
.mergeMap(() => this.translate.get('ALL_LOCATIONS_TREEVIEW'))
.subscribe(v => console.log(v));

对于最新版本 (^7.0.0),还有另一种方法可以做到这一点,使用stream方法:

 this.translate
.stream('ALL_LOCATIONS_TREEVIEW')
.subscribe(v => console.log(v));

这与 基本相同get,但可以感知语言变化(每次更改所选语言时都会发出一个新值)。

有关更多信息,请查看文档

于 2017-07-21T09:50:50.897 回答
0

简单的方法:

this.translate.instant('string_key_from_json');
于 2020-09-07T17:38:21.320 回答