1. 首页
  2.  » 
  3. 文档
  4.  » 
  5. LP Translate
  6.  » 
  7. JSON 翻译文件

JSON 翻译文件

LP Translate 中的 JavaScript i18n 支持

2.5 版添加了对 WordPress >= 5 中使用的 JSON 翻译文件的支持。

快速介绍

大多数 WordPress 语言包由成对的 PO 和 MO 文件组成。PO 文件是您在 LP Translate 等文件编辑器中编辑的内容。MO 文件是从 PO 文件编译而来的二进制格式。这是 WordPress 实际读取的内容,以便将翻译加载到PHP 中

为了将翻译加载到JavaScript 中,开发人员可以简单地将翻译从 PHP 传递到网页中。从历史上看,这是通过 wp_localize_script 完成的,尽管有很多方法可以实现相同的结果,并且开发人员可以通过多种方法来处理 JavaScript 代码中的字符串。

但是,WordPress 5 添加了 wp_set_script_translations,它为开发人员提供了捆绑到 WordPress 中的通用 JavaScript 本地化库。新方法不是将翻译从 PHP 传递到 JavaScript,而是直接从单独的 JSON 文件加载翻译。

我们不会复制有关此主题的 WordPress 文档,请参阅 WordPress 5.0 中的 JavaScript i18n 支持 并点击相关信息的链接。

编译 JSON 翻译文件

每次在 LP Translate 中保存 PO 文件时,JavaScript 中使用的任何翻译都将根据 WordPress 命名约定提取到 JSON 文件中。此过程依赖于指向有效 JavaScript 文件的 PO 文件中的文件引用。该方法与 wp i18n make-json 使用的方法相同。

您会发现 JSON 文件的名称很奇怪,而且可能有很多。这是因为为每个单独的脚本编译了一个 JSON 文件。例如,以fr_FR.po包含以下消息的 PO 文件 ( )为例:

#: scripts/example.js:21
msgid "Hello World"
msgstr "Bonjour tout le Monde"

将此文件保存在 LP Translate 中将生成一个名为的 JSON 文件my-plugin-fr_FR-72e8c5e24e35642471d54763afbb6a54.json,其中长字符串计算为md5("scripts/example.js"). 它的内容将包含与给定脚本相关联的字符串。这个文件应该像对待 MO 文件一样对待:它必须部署到你的网站才能让 WordPress 读取它,但它不能直接编辑。如果丢失,它总是可以从 PO 文件重新编译。

LP Translate 插件设置中有 两个新选项 来配合此功能。

提取 JavaScript 字符串

LP Translate 具有 从 JavaScript 生成 POT 文件的 一些功能,但建议作者使用wp i18n make-pot并提供有效且最新的 POT 文件及其代码。

无论您使用哪种工具,最好从未缩小的 JavaScript 中提取字符串,因为这会提供更有用的文件引用和行号。但是,请注意 WordPress在计算 JSON 文件名时仅支持.js.min.js文件的基本映射。更复杂的构建系统可能会给您带来问题。请参阅下面的 注释

如果您需要在没有 POT 文件的情况下翻译其他人的 JavaScript 字符串,请尝试遵循我们 关于缺少模板建议。在所有情况下(JavaScript 或其他),我们建议不要让翻译人员生成自己的模板。请参阅有关 使用 POT 文件提取可翻译字符串 的帮助页面。

注意事项和注意事项

  • PO 文件中的源引用必须是有效的相对路径并且存在于部署的代码中。如果.js.min.js文件都丢失,则不会为脚本生成 JSON。这是为了避免将永远不会加载的 JSON 文件填满文件夹。有关更多详细信息,请参阅 字符串提取
  • 从 LP Translate 的 自定义目录 加载脚本翻译与 MO 文件相同,因为它们被合并。这种合并是在 PHP 中完成的,这意味着 JSON 被解码和编码。这种解决方案并不理想,但目前是我们提出的最可靠的方法。
  • 请注意,WordPress 不会验证 JSON 文件,而是将它们直接打印到 JavaScript 中而无需任何卫生。这意味着脚本翻译应该被视为受信任的代码。不要在未检查的情况下安装来自不受信任来源的 JSON 翻译。如果它们包含可执行的 JavaScript,它将在浏览器中运行
  • 不要wp i18n make-json用于将 JSON 文件保存到 LP Translate 的自定义目录中。JSON 文件像 MO 文件那样排除空键对于正确合并至关重要。我们的编译器就是这样做的;WP-CLI 没有。
  • 如果确实使用wp i18n make-json,请始终指定,--no-purge因为默认情况下此命令会清除。JSON 文件不能在 LP Translate 中直接编辑,因此如果您从 PO 文件中删除脚本翻译,那么您将无法再编辑它们。此外,如果您丢失了 JSON 文件,除了从备份中恢复翻译之外,将无法恢复。
  • 如果根据脚本句柄命名,WordPress 会优先考虑作者自己的 JSON 文件,例如myDomain-fr_FR-myScript.json,如果找到,则不会再查找。LP Translate 无法使用此命名约定生成 JSON 文件。作者可以选择他们喜欢的任何独特的句柄,并且无法从 POT 文件中获得它。
  • 请注意,WordPress 安装的语言包将从 PO 和 MO 文件中清除脚本翻译。仅在.js文件中使用的字符串将仅出现在 JSON 文件中。从 LP Translate 2.5.3 开始,您可以选择在 复制 PO 文件 时合并 JSON 字符串,但是 JSON 格式可能会丢失重要的 PO 元数据。
  • LP Translate 在保存 PO 文件时从保存在 PO 文件中的文件引用派生 JSON 文件名。该名称必须与 WordPress 在您的主题或插件加载时从相关脚本派生的名称匹配。这可能失败的原因有很多。
该文章对您有帮助吗?

需要什么帮助?

加入 LitePress 手册资源 ,参与知识分享与交流
登录 注册 进行评论
立即加入