WORDPRESS5.0+支持JAVASCRIPT I18N本地化翻译

我就爱WORDPRESS

前些天看到WORDPRESS官方发布的关于JAVASCRIPT本地化翻译的消息,对于开发者来说,这个或许是一个好消息,在此之前,对于JS里需要翻译的字段,一般是用WP_LOCALIZE_SCRIPT()来实现的,而如果能使用和PHP一样的机制实现,那还真是不错的选择。

以下内容出自:https://make.wordpress.org/core/2018/11/09/new-javascript-i18n-support-in-wordpress/,大多使用Google翻译的,英文好的朋友,可以去官方看看。

多年来,国际化(I18N)在PHP开发方面得到了很好的支持。对于PHP,WORDPRESS已经提供了所有必要的工具,使其尽可能简单地将WORDPRESS核心,主题和插件本地化为任何语言。今天,我们为WORDPRESS的JAVASCRIPT开发带来了相同的功能。

如何实现

注册脚本时,您可以添加WP-I18N作为依赖项,以允许您像在PHP中一样添加可翻译字符串:

wp_register_script( 'my-handle', plugins_url( '/js/my-file.js', MY_PLUGIN ), array( 'wp-i18n' ) );

在脚本中,您将能够使用WP-I18N,如下所示:

const { __, _x, _n, _nx } = wp.i18n;
__( '__', 'my-domain' );
_x( '_x', '_x_context', 'my-domain' );
_n( '_n_single', '_n_plural', number, 'my-domain' );
_nx( '_nx_single', '_nx_plural', number, '_nx_context', 'my-domain' );

这些函数镜像它们的PHP对应字段,并可以以完全相同的方式使用。

最后一步是告诉WORDPRESS你的脚本包含翻译和使用哪个文本域,这是为了让WORDPRESS有选择地只加载必要的翻译,以确保一切尽可能快:

wp_set_script_translations( 'my-handle', 'my-domain' );

还要确保在插件文件的标题中为您的翻译指定了文本域(TEXT DOMAIN)。否则,TRANSLATE.WORDPRESS.ORG将不会提取翻译。

高级用法

现在,已经可以使用LOAD_TEXTDOMAIN函数发送您自己的翻译并传递您自己的MO文件。这也可以使用WP_SET_SCRIPT_TRANSLATIONS接受可选的第三个路径参数,该参数允许您告诉WORDPRESS先查找其他地方的翻译:

wp_set_script_translations( 'my-handle', 'my-domain', plugin_dir_path( MY_PLUGIN ) . 'languages' );

如果通过,WORDPRESS将首先检查格式为${DOMAIN}-${LOCALE}-${HANDLE}.JSON的文件是否存在于给定路径中,如果是,则将其用作翻译源。或者,在默认为WORDPRESS语言目录之前,它还将首先检查MD5文件名的给定路径。

如果您想发送自己的翻译文件,这些文件应该是JED 1.x (.JSON) 格式。GLOTPRESS能够与其他工具(如PO2JSON)一起创建这些工具。理想情况下,这些文件应该只包含在各自的JS文件中出现的翻译。使用PO2JSON,您可以生成以下文件:

这将生成以下格式的JSON:

{ "translation-revision-date": "+0000", "generator": "GlotPress/2.3.0-alpha", "domain": "messages", "locale_data": { "messages": { "": { "domain": "messages", "plural-forms": "n != 1", "lang": "en-gb" }, "This file is too big. Files must be less than %d KB in size.": [ "This file is too big. Files must be less than %d KB in size." ], "%d Theme Update": [ "%d Theme Update", "%d Theme Updates" ], "password strength\u0004Medium": [ "Medium" ], "taxonomy singular name\u0004Category": [ "Category" ], "post type general name\u0004Pages": [ "Pages" ] } }
}
屏幕背后

当您将插件或主题上传到WORDPRESS.ORG时,所有JS文件将自动解析为已经为PHP文件完成的文件。任何检测到的翻译都将添加到TRANSLATE.WORDPRESS.ORG,以允许社区合作以确保WORDPRESS、插件和主题以尽可能多的语言提供。

为了解析所有JS文件,使用了用于WP_CLI的I18N命令。这取代了MAKEPOT.PHP,不仅允许在JS文件中获取翻译,而且还允许审计字符串,仅解析特定文本域的字符串,甚至拾取MAKEPOT.PHP 未检测到的一些字符串。这个命令是免费提供的,并且像MAKEPOT.PHP 那样是开源的,并且建议任何使用MAKEPOT.PHP 的人都可以转换到这个改进的替代品。

基于这些解析的翻译,生成语言包。传统上这些用于仅包含PO和MO文件,每个区域设置一对。为了有选择地仅加载必要的翻译,无论是否使用它们,还要添加更多文件,每个JS文件的一个JSON文件包含每个语言环境的翻译。

在解析JS文件以进行翻译时,我们不知道使用哪个句柄来注册该文件,因此我们必须使用备用机制来查找属于每个文件的翻译。为此,我们使用每个文件的相对路径的MD5。即以 ${DOMAIN}-${LOCALE} 名称格式来命名的 ${DOMAIN}-${LOCALE}-${MD5}.JSON文件。

当您为句柄设置脚本翻译时,WORDPRESS会自动找出源文件的相对MD5哈希值,检查是否存在翻译文件,如果存在,请确保在脚本运行之前将其加载到WP.I18N中。

插件和主题支持

在WORDPRESS官方库的主题和插件的翻译、语言包支持,预计将在未来几周内完成。补丁准备就绪并等待提交。鼓励插件和主题作者在他们的JAVASCRIPT项目中开始使用WP-I18N。

致谢

如果没有@OCEAN90,@SSWSSSPIDY,@RINRAD,@ATIMMER,@SSLESSERA以及最近@HERREGROEN的长期努力,这个API是不可能实现的。非常感谢你们为实现这一目标而付出的令人难以置信的工作!还要感谢@HERREGROEN为本演讲提供必要的文案。

本文由 我就爱WORDPRESS 作者:我就爱WORDPRESS 发表,其版权均为 我就爱WORDPRESS 所有,文章内容系作者个人观点,不代表 我就爱WORDPRESS 对观点赞同或支持。如需转载,请注明文章来源。
1
我就爱WORDPRESS

发表评论