无法使用 ngx-translate 的 service-translate.get 翻译文本

pan*_*kaj 1 internationalization rxjs ngx-translate angular

我能够使用翻译管道翻译文本,但目前正在努力使用翻译服务的 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);

          });
}

}  
Run Code Online (Sandbox Code Playgroud)

我正在控制台中打印事件。我希望每当用户改变语言时它的翻译也会改变。我的其余翻译(使用管道)工作正常,但我看不到控制台中语言变化的变化。我缺少什么?

Jot*_*edo 6

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

this.translate.onLangChange
.mergeMap(() => this.translate.get('ALL_LOCATIONS_TREEVIEW'))
.subscribe(v => console.log(v));
Run Code Online (Sandbox Code Playgroud)

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

 this.translate
.stream('ALL_LOCATIONS_TREEVIEW')
.subscribe(v => console.log(v));
Run Code Online (Sandbox Code Playgroud)

这与 基本相同get,但支持语言更改(每次更改所选语言时都会发出新值)。

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