ng2-translate customLoader & 每种语言的多个文件
ng2-translate customLoader & multiple files per language
在 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());
}
}
此 class 实现了标准的 ng2-translate 行为,而对于以下 class 我希望加载 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 合并在一起,创建一个包含所有数据的“大”observable 流。
您需要的是 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())
}
在 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());
}
}
此 class 实现了标准的 ng2-translate 行为,而对于以下 class 我希望加载 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 合并在一起,创建一个包含所有数据的“大”observable 流。
您需要的是 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())
}