什么是国际化?

国际化是指以易于翻译成其他语言的方式来开发您的应用程序。国际化通常缩写为i18n(因为字母 i 和 n 之间有 18 个字母)。

为什么国际化很重要?

WordPress 被世界各地使用多种不同语言的人们所使用。WordPress 中的字符串需要以特殊方式编码,以便能够轻松地翻译成其他语言。作为开发者,您可能无法为您的所有用户提供本地化;但是,翻译人员可以在无需修改源代码本身的情况下成功地将您的代码进行本地化。

虽然使您的代码可翻译称为国际化,但将其翻译并调整字符串以适应特定位置的行为称为本地化。阅读有关WordPress 中的本地化的更多信息。

基础知识

为了使字符串可翻译,您必须将原始字符串包装在调用一个WordPress i18n 函数中。

例如,PHP 函数_e()会输出一个可翻译的字符串:

 _e('Edit post'); 

您会在 WordPress 核心文件中到处找到这样的代码。但是,如果您正在对主题或插件进行国际化,那么还有一个所有 i18n 函数都接受的参数,称为 Text Domain。

Text Domains 设置您的插件或主题翻译所属的域。这确保了插件、主题和 WordPress 核心之间的字符串不会发生冲突。

有了文本域,调用 i18n 函数输出字符串的最基本形式如下:

 _e('Edit movie', 'my-plugin'); 

设置您的插件和主题以支持国际化

设置 i18n 对于插件和主题略有不同,因此此信息分别详细说明在各自的手册中:

国际化 JavaScript

自 WordPress 5.0 起,可以使用与 PHP 中使用的相同一组 i18n 函数来国际化 JavaScript 文件。

为了能够在 JavaScript 代码中使用 i18n 函数,您在注册或加载脚本时必须将wp-i18n声明为依赖项。例如:

wp_register_script(
     'my-script',
     plugins_url( 'js/my-script.js', FILE ),
     array( 'wp-i18n' ),
     '0.0.1'
 );

现在您已经为脚本添加了依赖项,您可以在其中使用 i18n 函数,但仍然需要告诉 WordPress 加载翻译。

您可以通过调用wp_set_script_translations()来实现这一点。该函数接受三个参数:已注册/加载的脚本句柄、文本域,以及可选的包含翻译文件的目录路径。后者仅在您的插件或主题未托管在 WordPress.org 时才需要,因为 WordPress.org 会自动提供这些翻译文件。

wp_set_script_translations('my-script', 'my-plugin');
为了更好的性能,请始终确保仅在真正使用时才加载脚本及其翻译。

在您的 JavaScript 代码中,您将使用 i18n 函数的方法与在 PHP 代码中几乎相同:

const { __, _x, _n, sprintf } = wp.i18n;

// simple string
__( 'Hello World', 'my-plugin' );

// string with context
_x( 'My Gutenberg block name', 'block name', 'my-plugin' );

您可以在 JS 代码中使用的可用 i18n 函数如下(详见国际化函数):

请注意,wp-i18n 包还包含了sprintf函数。这对于国际化包含变量的字符串非常有用。

现在请参考国际化指南,了解如何使用所有这些函数以及在编写字符串时的最佳实践。

如果您的插件或主题未托管在 WordPress.org 上,则需要自己创建翻译文件。查看这篇文章以了解如何执行此操作。

WP 5.0 之前国际化 JavaScript

另一种国际化 JavaScript 文件的方法是使用wp_localize_script()函数。

使用该函数,您可以注册可翻译的字符串,并在您的 JavaScript 中使其可供使用。

请参阅wp_localize_script()参考文档以了解如何使用它。

国际化指南

现在您已准备好国际化您的应用程序,请阅读国际化指南,了解每个 i18n 函数的用途、使用方法以及编写字符串时的最佳实践。