Ben*_*rey 7 localization internationalization single-page-application progressive-web-apps workbox
有没有办法本地化 Web 清单?即有多个翻译name
,description
等等...
我已经想到了几个潜在的解决方案,但它们每个都有很大的缺点......
根据 url ( example.com/en/foo
) 中的区域设置,加载相关清单。
例如:
example.com/en/foo
, 加载example.com/en/manifest.json
example.com/jp/foo
, 加载example.com/jp/manifest.json
缺点
托管多个版本的 PWA(子域或 TLD)...例如:
en.example.com
/example.com
jp.example.com
/example.jp
鉴于清单是由构建过程生成的,这实际上很容易通过向管道添加多个部署步骤来实现。然后我将使用每个部署的环境变量来确定要插入到清单中的文本。
缺点
在关于 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)