【发布时间】:2018-08-06 00:59:11
【问题描述】:
我有一个大型数据库 (pouchDB),其中包含各种翻译,每种语言的翻译都保存在自己的数据库中。我如何使用 ngx-translate 直接从数据库中获取翻译?
【问题讨论】:
-
我认为您需要使用 API 调用将所有 db 条目传递给您的应用程序,然后您应该能够读取它们。看看一些代码就好了,只是为了知道你想要实现什么
标签: angular pouchdb ngx-translate
我有一个大型数据库 (pouchDB),其中包含各种翻译,每种语言的翻译都保存在自己的数据库中。我如何使用 ngx-translate 直接从数据库中获取翻译?
【问题讨论】:
标签: angular pouchdb ngx-translate
是的,你可以做到这一点:
GEThttp://yourhost/rest/translation/en;P。 S:如果你还在使用 Angular
【讨论】:
您需要做的第一件事是覆盖应用模块中的 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> {
...
}
}
【讨论】: