angular - 从服务器加载翻译时,Ionic ngx-translate 存储翻译以供离线访问
问题描述
我正在创建 ionic4 多语言应用程序。所有翻译文件都来自服务器。
从服务器加载翻译时,我希望它们存储,以便在设备离线时可以访问它。
如果第一次启动时没有互联网,它应该从资产文件夹中加载英文,但翻译加载器中的前缀是服务器的 URL,如下所示,
export function HttpLoaderFactory(http: HttpClient, shared: SharedService) {
return new TranslateHttpLoader(http, 'SERVER_URL', '.json');
}
那么如何根据条件添加前缀呢?并存储翻译以供离线使用?我尝试在许多论坛上搜索,但没有找到任何合适的解决方案。
解决方案
当从服务器获取翻译文件失败时,我们可以使用missingTranslationHandler,第二部分是在本地存储中兑现翻译文件
兑现本地存储中的语言文件
export class AppModule {
constructor( translationService: TranslateService) {
['en','tr','de'].forEach(lang => {
translationService.getTranslation(lang).subscribe(res => {
localStorage.setItem(lang,JSON.stringify(res))
})
})
}
}
缺少TranslationHandler 实现
export class MyMissingTranslationHandler implements MissingTranslationHandler {
handle(params: MissingTranslationHandlerParams) {
const currentLang = params.translateService.currentLang;
const langFile = JSON.parse(localStorage.getItem(currentLang)) || {};
return langFile[params.key];
}
}
设置 missingTranslationHandler 提供程序
TranslateModule.forRoot({
missingTranslationHandler: {
provide: MissingTranslationHandler, useClass: MyMissingTranslationHandler
},
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
推荐阅读
- reactjs - docker react 在运行时传递环境变量
- c# - 散列密码和通过 Gmail 发送邮件
- react-native - 如何在按下时测试导航按钮
- node.js - Nodejs,包括来自项目外部的静态 Codegen Protobuf/gRPC 文件
- android - Kotlin ktor jetty 修改响应头
- mysql - 使用 Go 将变量插入 MySQL
- asp.net - 如何以角度发送外键ID和表单数据?
- robot - 如何通过在 webbots 中共享一个机械手来连接两个机械臂
- java - RadioGroup ,再次单击相同的元素不起作用
- swift - 带有 RxSwift 的搜索栏取消按钮