如何在不改变NGX翻译中的当前语言的情况下检索翻译的值?

时间:2017-10-18 18:15:12

标签: angular typescript ngx-translate

我的问题是在angular2中的ngx翻译。我的项目支持2种语言:英语和阿拉伯语,因此有en.json和ar.json文件。下面的代码将根据我当前的语言给出翻译的密钥值

this.translate.get('key').subscribe((msg: string) => {
    console.log(msg);
  }

问题:如何将特定语言作为输入传递并获取该特定语言的翻译?例如,我当前的语言是英语(并且不想更改当前语言),但是从ts文件中,我需要从ar.json检索键的阿拉伯语翻译,而不更改当前语言。

5 个答案:

答案 0 :(得分:0)

我建议不要将ngx翻译用于此特定要求。 ngx translate的目的是将其绑定到视图并加载当前所选语言的JSON。另一种方法是简单地设置另一个服务,通过传递一个字符串来加载你需要的json文件,例如' en'对于英语和' ar'来自阿拉伯语然后,您可以根据需要在ts中使用该JSON。

答案 1 :(得分:0)

我找不到任何官方解决方案,但我做了解决方法。

const interval = Observable.interval(1000);
const langObservable = Observable.from(['EN', 'PL']);
langObservable.zip(interval, (v1, v2) => {
  return v1;
}).subscribe(lang => {
  this.translate.getTranslation(lang).subscribe(values => {
    const value = values['TRANSALTION_KEY'];
    this.messageProvider.next(value);
  });

});

答案 2 :(得分:0)

此外,我没有找到任何官方解决方案但是这样做了:

this.preferences.languages.forEach((lang) => {
   this.translate.getTranslation(lang).subscribe(values => {
     this.languages.push({ label: values.i18n.LANG, value: lang});
   });
 });

其中lang类似于' en',' pt'等等,必须与{{1}的参数的预期值的名称匹配}。

答案 3 :(得分:0)

您好,请尝试基于ngx-translate的软件包https://www.npmjs.com/package/ngx-translate-in

您可以使用当前语言以外的其他特定语言进行翻译

{{'key' | translateIn : 'fr' | async}}

只需导入tjis模块 NgxTranslateInModule 并使用管道 translateIn

答案 4 :(得分:0)

嗨,我们找到了一种使用 ngx-translate 执行此行为的方法(使用不同语言的翻译而不更改系统语言):

this.translateService.getTranslation(this.languageId).subscribe...

首先我们在 translateService 中加载所需的语言翻译,然后我们可以在服务中查找翻译:

var transaltedValue = this.translateService.getParsedResult(this.translateService.translations[this.languageId], 'resourceKey')

这可以在打字稿中使用,对于 HTML,您可以使用相同的逻辑制作管道