国际化

什么是国际化?

国际化是开发主题的过程,因此可以很容易地将其翻译成其他语言。国际化通常缩写为国际18n(因为字母i和n之间有18个字母)。

为什么国际化很重要?

WordPress在世界各地使用,在英语不是主要语言的国家。WordPress插件中的字符串需要以特殊的方式进行编码,以便可以轻松地翻译成其他语言。作为开发人员,您可能无法为所有用户提供本地化;然而,翻译人员可以成功地本地化主题,而无需修改源代码本身。

如何国际化你的主题?

为了使主题中的文本易于翻译,文本不应硬编码在主题中,而应通过WordPress中的一个本地化函数作为参数传递。

除非翻译人员修改了效率不高的源代码,否则无法翻译以下示例。

<h1>设置页面</h1>

通过将字符串传递给本地化函数,可以很容易地对其进行解析以进行翻译。

<h1><?php_e(“设置页”);?></h1>

WordPress使用获取文本库可以在PHP中添加翻译。在WordPress中,您应该使用WordPres本地化函数,而不是与PHP gettext兼容的本地翻译函数。

文本域

文本域是国际化函数中使用的第二个参数。文本域是一个唯一的标识符,允许WordPress区分所有加载的翻译。文本域只需要为主题和插件定义。

WordPress.org上托管的主题文本域必须与主题URL的slug匹配(wordpress.org/themes/<slug>).这是必需的,以便translate.wordpress.org正确工作。

文本域名必须使用破折号而不是下划线,并且必须是小写。例如,如果主题的名称我的主题定义在样式表或包含在名为我的主题文本域应该是我的主题.

文本域用于三个不同的位置:

  1. 样式表主题标题
  2. 作为本地化函数中的参数
  3. 使用加载翻译时作为参数加载主题文本域()load_child_theme_textdomain()

style.css主题标题

文本域将添加到样式表标头,以便即使主题未启用,也可以翻译类似描述的主题元数据。文本域应与在以下情况下使用的域相同加载文本域.

例子:

/**主题名称:我的主题*作者:主题作者*文本域:my-theme*/
域路径

当翻译保存在其他目录中时,需要域路径语言 . 这样WordPress就知道在主题未激活时在何处查找翻译。例如,如果.mo文件位于languages文件夹中,则Domain Path将为/语言并且必须用第一个斜杠书写。默认为语言主题中的文件夹。

例子:

/**主题名称:我的主题*作者:主题作者*文本域:my-theme*域路径:/languages*/

将文本域添加到字符串

应该将文本域作为参数添加到所有本地化函数中,以便翻译正常工作。

示例1:

__(“发布”)

应该变成

__(“帖子”,“我的主题”)

示例2:

_e(“发布”)

应该成为

_e(“帖子”,“我的主题”)

示例3:

_n(“%s帖子”,“%s贴子”,$count)

应该变成

_n(“%s帖子”,“%s贴子”,$count,“我的主题”)
文本域应该作为字符串而不是变量传递给本地化函数。它允许解析工具区分文本域。不可执行操作的示例:
__('翻译我。',$text_domain);

正在加载翻译

WordPress中的翻译保存在.po型.mo(毫米)需要加载的文件。可以使用函数加载load_theme_textdomain()load_child_theme_textdomain()。此负载{地区}.mo从主题的基本目录或{文本域}-{地区}.mo从中的WordPress主题语言文件夹/wp-content/语言/主题/.

从4.6版开始,WordPress会自动检查wp含量对于来自的翻译translate.wordpress.org。这意味着通过translate.wordpress.org翻译的插件不需要load_plugin_textdomain()不再。
如果您不想添加load_plugin_textdomain()调用插件时,应设置至少需要:将readme.txt中的字段设置为4.6。

要了解有关不同语言和国家代码的更多信息,请参阅语言列表.

当心

  • 将MO文件命名为{地区}.mo(例如de_de.po和de_de.mo),如果将翻译添加到主题文件夹。
  • 将MO文件命名为{文本域}-{地区}.mo(例如my-theme-de_de.po&my-theme-de_de.mo),如果您要将翻译添加到WordPress主题语言文件夹。

例子:

函数my_theme_load_theme_textdomain(){load_theme_textdomain('my-theme',get_template_directory()。'/语言);}add_action('after_setup_theme','my_theme_load_theme_textdomain');

理想情况下,此函数应在主题的函数.php.

语言包

如果您对语言包以及如何将导入translate.wordpress.org正在工作,请阅读关于翻译的元手册页面.

国际化您的主题

现在您的翻译已经加载,您可以使用国际化函数开始编写主题中的每个字符串。

检查国际化第页,位于通用API手册以获取更多信息和最佳实践。