【问题标题】:Unable to translate text using ngx-translate's service-translate.get无法使用 ngx-translate 的 service-translate.get 翻译文本
【发布时间】:2017-07-21 06:58:42
【问题描述】:

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

          });
}

}  

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

【问题讨论】:

    标签: angular internationalization rxjs ngx-translate


    【解决方案1】:

    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

    【讨论】:

    • 就像一个魅力。我想知道除了在 .stream 或 .get 上使用 subscribe 之外,还有其他方法吗,就像在 angular-translate 中一样,它更简单,就像这样。$translate.instant(key)。
    • 即时方法也是 API 的一部分,但我不知道它是否会感知语言变化,因为我没有使用它
    【解决方案2】:

    简单的方法:

    this.translate.instant('string_key_from_json');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-09
      • 2017-08-17
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      相关资源
      最近更新 更多