【发布时间】:2020-08-15 08:55:54
【问题描述】:
我已经准备了具有本地化语言版本的应用程序。为此,我使用了原生 Angular i18n 模块,它准备了两个应用程序包,每个包都使用适当的语言。
应用程序的每个版本都可以在我的 nginx 服务器上的单独位置下获得:
- myapp.com/en/...
- myapp.com/pl/...
我希望我的应用程序安装一次为 PWA,并使用(单个?)服务工作者提供两种语言版本。
不幸的是,我现在使用 @angular/pwa 模块 所能做的就是为每个应用程序提供单独的服务工作者,这会强制我的应用程序的每个语言版本单独安装。
我的问题是:有没有什么方法可以让应用程序按照我使用 @angular/pwa 或 Workbox 描述的方式工作?
// 顺便说一句,Angular 的创建者没有强调 @angular/localize 与 @angular/pwa 的集成,这有点令人惊讶。
【问题讨论】:
-
你使用哪个版本的 angular-cli?
-
我不认为这是真的。问题是你所有的翻译都是 JS 代码的一部分,因此不同的 l18ns 会有不同的代码。因此,您不能使用一名工人“组合”它们。这些实际上是最终不同的应用程序。也许您可以使用
ngx-translate解决此问题,这需要更改翻译架构。但是,它的翻译独立于应用程序,因此您可以在一个应用程序安装中缓存所有翻译 -
@Sergey 感谢您的回答。是的,应用程序有不同的 js 代码,但是 Angular 对文件名进行哈希处理,所以它们在每种语言应用程序中都有不同的名称。理论上,如果可以缓存两个 index.html 中指定的文件,这样就可以解决问题。您知道这是否可以使用任何软件库或本机实现来实现?我知道ngx-translate库,但是这是不得已而为之,因为应用真的很大,所以要改架构需要很长时间。
-
@Jelly 我认为您可以通过两种方式手工制作。要么创建一个包含所有语言及其相应 JS 文件的配置,要么为
index.html创建一个解析器。然后,您需要创建自己的工作程序,它将在页面加载时插入正确的脚本(您不能在运行中执行此操作,因为 JS 代码已经加载)。这将加载适当的应用程序。我猜每个应用程序都有你的工作人员 -
另外,为什么要将这两个应用程序安装在一个地方?您的实际应用程序托管在不同的 url 上,因此要在它们之间切换需要重新加载页面。因此单独安装每个版本是合理的。
标签: angular nginx internationalization progressive-web-apps angular-i18n