无法使用ngx-translate的service-translate.get

时间:2017-07-21 06:58:43

标签: angular internationalization rxjs ngx-translate

我能够使用翻译管道翻译文本,但目前正在努力使用翻译服务的get和instant方法加载翻译。 以下是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);

          });
}

}  

我在控制台中打印事件。我想在用户更改语言时更改其翻译。我的其余翻译(使用管道)工作正常,但我无法在控制台中看到语言变化的变化。我错过了什么?

2 个答案:

答案 0 :(得分:3)

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基本相同,但语言更改识别(每次更改所选语言时都会发出新值)。

有关详细信息,请查看the documentation

答案 1 :(得分:0)

简单的方法:

this.translate.instant('string_key_from_json');