Angular 客户端语言切换

标签 angular localization internationalization electron angular-i18n

背景

我们正在使用 Angular 8.2 开发应用程序。这个问题与 AngularJs 无关。

问题

我在这里阅读了 Angular 本地化文档:https://angular.io/guide/i18n

不过好像是在构建过程中进行了本地化。应用程序构建后,无法更改。那么,我们如何构建一个支持在没有互联网的情况下进行语言切换的 Angular 应用程序呢?

内容分发网络

我们的应用部署在 CDN 后面。 CDN 服务器反向代理 HTML、JavaScript 和 CSS 文件,并将缓存所有传递的文件。服务器端应用程序语言切换不可用。

Electron 版

并且我们提供了一个基于electron的客户端应用。我们需要一次交付应用程序,用户可以在没有互联网的情况下在不同语言之间切换。但我没有找到解决办法。

域名

您可能会提到我们可以通过切换域来切换语言。但是因为CORS的原因,我们客户端的app域名是有限制的,不能切换。所以只有一个域名可用。

Google Play 商店

我们已经通过 TWA 构建了我们的应用并将其发布到 Google Play 商店。该域已在该应用程序中注册。切换域也会导致再次从应用商店下载应用。

附加信息

应用程序的源代码在这里:https://github.com/AiursoftWeb/Kahla.App

只是为了可能的附加信息。不必检查它来回答这个问题。

最佳答案

我们过去遇到过类似的要求,这就是为什么我创建了一篇关于将 Angular 中的翻译作为代码(没有库,只有您的代码和项目架构)的博文。

https://medium.com/angular-in-depth/angular-typed-translations-29353f0a60bc

要回答所有的挑战:

CDN:

  • 语言变化在路由级别(不是域)
    • domain.com/language/page
  • domain.com 可能包含一些重定向逻辑
    • 例如,重定向到默认语言或确定它(我们有一个云功能可以根据浏览器请求的语言首选项执行此操作

Electron :

  • 在构建时提供翻译
  • 包含不同 i18n 数据的模块随应用程序一起提供,并在需要时延迟加载(但 Electron 可以立即使用,因为它们捆绑在一起)

:

  • 同样,使用“路由”而不是域来切换语言
    • 示例:domain.com/en/contact 用于英语 domain.com/cs/contact 用于捷克语
  • 它很棒,不仅因为 cors,还因为 SEO 和 Crawlers
    • route 最相关的部分优先(语言)

Google Play 商店:

  • 和electron一样,捆绑在一起
  • 使用路由而不是域

即使您决定不使用基于“路由”的切换,您也可以将翻译存储在状态管理或 package 服务中,并像通过 访问模板中的任何其他“异步”数据一样访问它们异步管道


第 3 方: 涉及第 3 方库的其他一些解决方案是 ngx-translate(已弃用)和 Transloco

关于Angular 客户端语言切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60018146/

相关文章:

angular - github1s.com 是否安全?我们可以将它用于私有(private) repo 吗?

相当于 vbscript setlocale 的 Javascript

java - 用于特定于语言环境的双格式的 String.format 选项,例如 Double.toString()?

django - 获取与 django 1.x 集成的 jinja2 模板的翻译字符串?

c - 单个 C 代码中的 printf 和 wprintf

mysql - Angular 2 待办事项应用程序未在 MySQL 数据库中存储新任务

angular - 与 typescript 、节点和 Angular 共享代码

javascript - 使用 JavaScript 动态变量进行字符串国际化

python - 用于内化和翻译的通用 Python 库

javascript - 停止一个连续被调用的函数