国际化

什么是国际化?

国际化是以一种可以轻松翻译成其他语言的方式开发应用程序的过程。Internationalization 通常缩写为i18n(因为字母 i 和 n 之间有 18 个字母)。

为什么国际化很重要?

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

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

基础

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

例如,PHP 函数_e() 回显一个可翻译的字符串:

 _e('Edit post'); 

你会在整个 WordPress 核心文件中找到这样的代码。但是,如果您正在国际化主题或插件,则所有 i18n 函数都采用另一个参数,称为 Text Domain。

文本域设置您的插件或主题翻译所属的域。这确保了插件、主题和 WordPress 核心中的字符串之间没有冲突。

对于文本域,对将输出字符串的 i18n 函数的最基本调用如下:

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

将你的插件和主题设置为 i18n

插件和主题的 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 上时才需要。

wp_set_script_translations('my-script', 'my-plugin');

笔记:为了获得更好的性能,请始终确保将脚本排入队列并仅在真正使用它们时加载它们的翻译。

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

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 是(有关更多详细信息,请参阅国际化功能):

  • __()
  • _X()
  • _n()
  • _nx()
  • 冲刺()

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

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

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

在 WP 5.0 之前国际化 javascript

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

使用此功能,您可以注册可翻译的字符串,并在您的 javascript 中使用它们。

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

国际化指南

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