【问题标题】:Localising a PWA web manifest本地化 PWA Web 清单
【发布时间】:2019-09-02 23:07:19
【问题描述】:

有没有一种方法可以本地化 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
  • 等等……

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

缺点

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

【问题讨论】:

    标签: localization internationalization single-page-application progressive-web-apps workbox


    【解决方案1】:

    在关于网络清单的W3C document 上,我发现了以下内容:

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

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

    这虽然说应该做什么,但不完全是如何

    目前在 Github 上有一个open requests about it。特别是this link 与 W3C 网站上的建议争论。

    我会在收集到更多信息后立即更新答案并提供更多详细信息。

    Google 提供了一个 more practical guide 来本地化清单文件,也许可以用作网络清单的指南。


    更新

    您能为您的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">
    

    【讨论】:

    • 谢谢 Francesco,但是,我阅读了此文档,但遗憾的是它并没有解决我的问题。我正在构建的 PWA 是静态的,即没有后端(不能使用 PHP),而 W3C 建议的另一种方法实际上被认为是非常糟糕的做法......我很惊讶他们正在建议它......谷歌的解决方案是仅与 Google Play 商店相关,不考虑应用程序可能直接从浏览器安装。生成本地化清单很容易,问题是在加载默认清单之前告诉浏览器要加载哪个清单...
    • 例如,如果访问者访问example.com,我的应用程序会将用户重定向到example.com/en(使用JavaScript)。因此,即使我可以加载相对于 en 的清单,也为时已晚,因为清单在重定向用户时已经加载。 +1 努力:-D
    • 别担心,我发现了一个非常有趣的话题。我更新了答案,我会进一步搜索。
    • 当然,我从头开始构建了整个项目,因此可以控制任何资产。但是,如果 JS 要更新 DOM,那么这意味着页面已经加载,因此清单已经加载,我认为它不能被“更新”。也就是说,我还没有真正尝试过。这是我之前的一个想法,但我认为它不会奏效......
    • 我可能听起来很愚蠢,但是否可以仅在页面加载后链接清单,读取用户的语言设置,然后动态加载正确的manifest.webmanifest
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2018-11-03
    • 2021-10-27
    • 2019-10-12
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多