ngx翻译angular 7如何翻译动态数据来自不同的API

时间:2019-02-06 09:05:28

标签: angular ionic-framework ngx-translate

我正面临ngx-translate的问题!那就是我有2个使用不同语言的sperate API,因此例如类似于此http://example.com/apihttp://example.com/fr/api/

现在在ngx-translate中,我必须使用en/fr.json文件来翻译我的角度应用程序!正如我从文档中看到的!

但是现在我需要使用来自两个API的数据!它已经在服务器上翻译了!

  

http://example.com/api

     

http://example.com/fr/api/

所以我的问题在这里我该怎么做?!并继续使用json files,因为我的应用中有一些静态词,例如the application menu

如果还有其他选择,请不要犹豫!

2 个答案:

答案 0 :(得分:1)

假设:

  • 仅2个可能的lang选项:["en","fr"]
  • 未从本地化的API获取翻译文件。相反,它们位于项目的 assets 文件夹中。
  • 通过ngx-translate进行语言更改时,无需获取数据

您可以创建一个服务,以构造正确的API端点,如下所示:

@Injectable()
export class EnpointLocalizer {
  private readonly tokenMap = {'en': '/', '/fr/'}
  constructor(private readonly translate: TranslateService){}

  localizeJoin(sections: string[]){
   const {currentLang} = this.translate;
   return sections.join(this.tokenMap[currentLang] || '/'); 
  }
}

然后您可以在需要的地方注入它,并按以下方式使用它:

@Injectable()
export class FooService {
 private endpoint = ["http://example.com","api"];

 constructor(private http: HttpClient, private localizer: EnpointLocalizer){}

 fetch(){
   return this.http.get(this.localizer.localizeJoin(this.endpoint),...);
 }
}

当然,您可以采用多种方法来实现“本地化”逻辑(例如,正则表达式模式+替换)。但是对于您的用例,我认为这是一个简单明了的开始。

答案 1 :(得分:0)

仅对(some statics words in my app like the application menu)个单词使用翻译管道

喜欢

  

{{'HOME.NAME'|翻译}}

并从api数据中删除转换过滤器