【问题标题】:ng2-translate customLoader & multiple files per languageng2-translate customLoader & 每种语言的多个文件
【发布时间】:2017-04-29 15:58:43
【问题描述】:

在 Ionic2 应用中,我使用 ng2-translate 我的应用中的字符串。

现在我需要将翻译文件拆分为每种语言的多个文件,例如“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)。更改代码中可观察对象的顺序会导致加载另一个文件。 我认为“合并”应该将可观察对象合并在一起,创建一个包含所有数据的“大”可观察流。

有人可以帮忙吗?

谢谢

【问题讨论】:

    标签: ionic2 rxjs observable ng2-translate


    【解决方案1】:

    您需要的是 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())
      }
    

    【讨论】:

    • 太棒了!那就是做这项工作!谢谢
    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 2013-10-09
    • 2017-04-14
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    相关资源
    最近更新 更多