我有一个充满翻译的大型数据库(pouchDB),每个语言的翻译都保存在自己的数据库中。我如何使用ngx-translate直接从db获取翻译?
您需要做的第一件事是覆盖应用程序模块中的ini函数,因为您需要在应用程序完全显示之前下载翻译。在app.module的providers属性中添加:
{
provide: APP_INITIALIZER, useFactory: (ini), deps: [
HttpClient,
TranslateService,
], multi: true
}
您还需要创建一个自定义翻译加载器,并在声明de translate模块时在app.module中声明
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (createCustomTranslateLoader),
deps: [Http, RegionService]
}),
init函数将返回另一个返回observable的函数。在这里你宣布翻译服务
translate.addLangs(["en", "fr", "es"])
translate.setDefaultLang("en")
let browserLang = translate.getBrowserLang()
moment.locale(browserLang)
translate.use(browserLang.match(/en|fr|es/) ? browserLang : "en")
createCustomTranslateLoader方法将返回一个从TranlasteLoader扩展的类
export function createCustomTranslateLoader(http: Http, regionService: RegionService) {
return new CustomTranslationLoader(http, regionService)
}
该类将重新实现从后端加载转换的方法
export class CustomTranslationLoader extends TranslateLoader {
constructor(private http: Http, private regionService: RegionService) {
super()
}
getTranslation(lang: string): Observable<any> {
...
}
}
是的,你可以为此需要:
GET
http://yourhost/rest/translation/en
;P. S:如果你仍然使用Angular <4.3,请使用@ angular / http中的Http和[email protected]。