WordPress 6.5 版本对国际化(I18N)多语言翻译的性能进行了改进。

WordPress 6.5 版本进行了多项国际化(i18n)方面的改进,本开发者说明将重点关注这些改进。

性能改进的本地化翻译系统

在过去的一年里,WordPress 的贡献者们认真研究了现有的国际化(i18n)系统的性能,并最终创建了一个名为“Performance Translations”的新功能插件。这个插件提供了一个经过彻底优化的系统,可以显著提高性能。经过数千名Beta测试人员的测试和去年年底的合并公告,这个新的库现在已经包含在 WordPress 6.5 中了!有关所有详细信息,请阅读#59656 

Performant Translations 插件依然非常有用,并且将持续维护,以提供在核心解决方案中无法获得的独特附加功能。目前,如果没有存在 PHP 文件,该插件会自动将任何 .mo 文件转换为 PHP 文件。这对于那些翻译不是来自 translate.wordpress.org 或者只存在于本地服务器的网站非常有帮助。

这个新库让加载二进制 .mo 文件更快,同时减少了内存的使用。它甚至支持同时加载多个语言环境,因此网站语言切换速度更快。此外,它还支持 PHP 文件中的翻译,避免使用二进制文件格式,并且可以利用 OPCache 缓存(如果可用)。

实际上,新库的速度非常快,以至于从 WordPress 6.5 开始,为了默认合并多个语言环境的翻译,它已经成为首选语言功能插件

尽管这主要是一个悄无声息的、向后兼容的底层更改,但仍然有一些需要注意的事项:

新的.l10n.php 翻译文件格式

当您从WordPress.org下载语言包时,除了您熟悉的.mo.po文件之外,您可能会注意到一个新文件,即.l10n.php。如果您的.mo翻译文件有对应的.l10n.php文件,系统将加载后者,从而实现更快的速度和更低的内存消耗。

这是一个渐进式的改进,因此即使只有一个.mo文件而没有对应的PHP文件,翻译仍然会按照预期加载。反之亦然!这意味着理论上您可以只使用.l10n.php翻译文件,而即时翻译加载等功能仍将正常工作。目前,WordPress仍然需要相应的.po文件和.mo文件来执行更新检查等操作。不过,这个限制未来可能会被解决,请参阅#60554了解更多信息。

注意:如果您在wp-content/languages目录中没有看到任何.l10n.php翻译文件,这可能是因为语言包已经有一段时间没有更新,因此没有新的翻译可用。

以下是 WordPress 6.5 支持的 PHP 翻译文件示例:

图片[1]-WordPress 6.5 版本对国际化(I18N)多语言翻译的性能进行了改进。-光子波动网 | 专业WordPress修复服务,全球范围,快速响应

注意:这里的 EOT 代表“传输结束”字符(U+0004,或在 PHP 中表示为“\4”)。它与 gettext 中用于将上下文与单数字符串连接在一起的分隔符相同。

生成 PHP 翻译文件

如果您希望自己生成这些 PHP 翻译文件,现在 GlotPress 的 4.0 版本已经支持新的 .l10n.php 格式,这是一个用于支持 translate.wordpress.org 的插件。

此外,WP-CLI 2.10.0i18n-command 2.6.0)提供了一个新的 wp i18n make-php 命令,可从给定的 .po 文件创建这些 PHP 文件。例如:

图片[2]-WordPress 6.5 版本对国际化(I18N)多语言翻译的性能进行了改进。-光子波动网 | 专业WordPress修复服务,全球范围,快速响应

如果您正在开发处理翻译的 WordPress 插件,现在还可以使用新的 WP_Translation_File 类将 .mo 文件转换为 PHP 文件。例如:

图片[3]-WordPress 6.5 版本对国际化(I18N)多语言翻译的性能进行了改进。-光子波动网 | 专业WordPress修复服务,全球范围,快速响应

用于自定义此行为的新过滤器

如果您因某种原因想要禁用对 PHP 文件的支持,例如,如果您的项目尚未包含任何 PHP 文件,并且希望避免额外的文件查找操作,那么您可以使用新的 translation_file_format 过滤器来更改首选格式(默认为 PHP),示例如下:

图片[4]-WordPress 6.5 版本对国际化(I18N)多语言翻译的性能进行了改进。-光子波动网 | 专业WordPress修复服务,全球范围,快速响应

现有的 load_textdomain_mofile 过滤器仍然可用于过滤 .mo 文件的路径,以加载特定文本域的翻译。但是,这个过滤器仅适用于 .mo 文件。如果您需要过滤翻译文件的路径(无论是 .l10n.php 文件还是 .mo 文件),请使用新的 load_translation_file 过滤器。

使用$l10n全局变量

在以前的 WordPress 版本中,当加载翻译时,WordPress 会将 MO 类的实例存储在 $l10n 全局变量中。然而,在 WordPress 6.5 中,这将被一个新的 WP_Translations 类的实例所取代,它具有类似的功能。如果您的项目在某种方式上直接使用了这个全局变量或者 MO 类,那么您需要关注这个变化。

缓存的语言文件路径列表

这是另一个轻微的性能改进,但与前面介绍的新本地化库无关。

过去,WordPress 在 get_available_languages()WP_Textdomain_Registry 等地方直接使用 glob() 函数来检索特定目录下的所有 .mo 文件。这对于及时加载翻译以及了解安装了哪些翻译非常重要。然而,在具有大量语言文件的站点上,glob() 操作可能会变得非常耗时。

因此,在 #58919 / [57287] 中引入了新的缓存机制。现在,文件查找已经集中处理在 WP_Textdomain_Registry 中,并将结果存储在对象缓存中的 translations 组中。缓存键的格式为 cached_mo_files_<hash>,其中 <hash> 是扫描目录的 MD5 哈希值,例如 wp-content/languages。每当更新语言包时都会清除缓存。

此外,除了 .l10n.php 文件之外,查找现在还会扫描 .mo 文件,以防站点上仅存在前者。

要了解更多信息,请查看官方日志

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容