ng2-translate customLoader&每种语言多个文件

时间:2017-04-29 15:58:44

标签: ionic2 rxjs observable ng2-translate

在Ionic2应用程序中,我正在使用ng2-翻译我的应用程序中的字符串。

现在我需要将翻译文件拆分为每种语言的几个文件,例如“de.json”和“de_gs1ais.json”。由于ng2-translate仅限于每种语言一个文件,我试图实现自定义加载器:

class CustomLoader implements TranslateLoader {
  private http: Http;
  public getTranslation(lang: String): Observable<any> {
    return this.http.get("assets/i18n" + "/" + lang + ".json").map((res) => res.json());

  }
}

这个类实现了标准的ng2-translate行为,而对于下面的类,我希望加载2个文件de.json和de_gs1ais.json:

class CustomLoader implements TranslateLoader {
  private http: Http;
  public getTranslation(lang: String): Observable<any> {
    return this.http.get("assets/i18n" + "/" + lang + ".json").merge(
    this.http.get("assets/i18n" + "/" + lang + "_gs1ais.json")).map((res) => res.json());

  }
}

问题是再次只加载第一个文件(de.json)。更改代码中的observable的顺序会导致加载另一个文件。 我认为“merge”应该将observable合并在一起,创建一个包含所有数据的“大”可观察流。

有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:3)

你需要的是forkJoin而不是合并。

合并没有合并数据 - https://www.learnrxjs.io/operators/combination/merge.html

forkJoin做 - https://www.learnrxjs.io/operators/combination/forkjoin.html

 public getTranslation(lang: String): Observable<any> {
    let languageObservables = Rx.Observable.forkJoin(              
          this.http.get("assets/i18n" + "/" + lang + ".json"),
          this.http.get("assets/i18n" + "/" + lang + "_gs1ais.json")
    );
    return languageObservables.map((res) => res.json())
  }