本地化 PWA Web 清单

Ben*_*rey 7 localization internationalization single-page-application progressive-web-apps workbox

有没有办法本地化 Web 清单?即有多个翻译namedescription等等...

我已经想到了几个潜在的解决方案,但它们每个都有很大的缺点......

潜在解决方案 1(首选但不确定它是否有效)

根据 url ( example.com/en/foo) 中的区域设置,加载相关清单。

例如:

  • 对于example.com/en/foo, 加载example.com/en/manifest.json
  • 对于example.com/jp/foo, 加载example.com/jp/manifest.json

缺点

  • 我不相信这实际上会起作用,因为每个网站只能有一个清单(据我所知),而且我相当确定它需要在根目录中
  • 即使这是可能的,鉴于我的应用程序是一个静态托管的 SPA,我并不完全确定我将如何实施它,即我无法在浏览器加载清单之前动态更新清单的链接。也许我可以加载相对于 URI 的清单,但不能 100% 确定这会起作用

潜在解决方案 2

托管多个版本的 PWA(子域或 TLD)...例如:

  • en.example.com/example.com
  • jp.example.com/example.jp
  • 等等...

鉴于清单是由构建过程生成的,这实际上很容易通过向管道添加多个部署步骤来实现。然后我将使用每个部署的环境变量来确定要插入到清单中的文本。

缺点

  • 无法切换应用程序的语言(这对客户端来说是一个非常关键的功能)
  • 不管它实施起来有多“容易”,它似乎都不对

Fra*_*sco 7

在关于 Web 清单的W3C 文档中,我发现了以下内容:

预计作者将使用以下选项之一本地化清单内容:

  • 动态设置语言: 这可以包括,例如,询问最终用户他们的首选语言是什么,并根据该语言首选项动态添加或替换文档的清单链接关系(例如,使用类似“manifest.php”的 URL) ?lang=fr")。
  • 在服务器上使用内容协商或地理定位等: 托管 Web 应用程序的服务器可以尝试通过使用地理定位或内容协商(例如,使用 [RFC7540] 的“Accept- Language”标头,甚至是自定义 HTTP 标头)。

这虽然说了该做什么,但没有具体说明如何做

目前 Github 上有一个关于它的开放请求。具体来说,此链接与 W3C 网站上的建议存在争议。

一旦收集到更多信息,我将立即更新答案并提供更多详细信息。

Google 提供了更实用的清单文件本地化指南,也许可以用作网络清单的指南。


更新

您能为您的项目创建一个小脚本吗index.html

您不需要 php,只需要 Vanilla JS(如果您可以控制 index.html 文件)并根据用户区域设置加载特定的清单文件。

<!-- If English is detected, the script will load this into the page -->
<link rel="manifest" href="/path.../en.manifest.json">

<!-- If French is detected, the script will load this instead -->
<link rel="manifest" href="/path.../fr.manifest.json">
Run Code Online (Sandbox Code Playgroud)

  • 当然,我从头开始构建了整个项目,因此可以控制任何资产。但是,如果 JS 要更新 DOM,那么这意味着页面已经加载,因此清单也已经加载,我认为它无法“更新”。也就是说,我还没有真正尝试过。这是我之前的想法,但我认为这行不通…… (2认同)