本页目录
什么是国际化?
国际化是开发主题的过程,因此可以轻松将其翻译成其他语言。国际化通常缩写为i18n(因为字母 i 和 n 之间有 18 个字母)。
为什么国际化很重要?
在英语不是主要语言的国家/地区中,WordPress 遍及世界各地。WordPress 插件中的字符串需要以特殊方式进行编码,以便可以轻松地翻译成其他语言。作为开发人员,您可能无法为所有用户提供本地化。但是,翻译人员可以成功定位主题,而无需修改源代码本身。
如何使您的主题国际化?
为了使主题中的文本易于翻译,不应在主题中对文本进行硬编码,而应将其作为参数通过 WordPress 中的一种本地化功能传递。
除非翻译者修改了效率不高的源代码,否则以下示例将无法翻译。
| 1 个 | <h1>Settings Page</h1> |
通过将字符串传递给本地化函数,可以很容易地对其进行解析以进行翻译。
| 1 个 | <h1><?php _e( 'Settings Page' ); ?></h1> |
WordPress 使用 gettext 库能够在 PHP 中添加翻译。在 WordPress 中,您应该使用 WordPress 本地化功能,而不是与本机 PHP gettext 兼容的翻译功能。
文字域
文本域是国际化功能中使用的第二个参数。文本域是唯一的标识符,允许 WordPress 区分所有已加载的翻译。仅需要为主题和插件定义文本域。
WordPress.org 文本域上托管的主题必须与主题 URL(wordpress.org/themes/<slug>)的匹配项匹配。这是必需的,以便来自 translate.WordPress.org 的翻译 正常工作。
文本域名必须使用短划线而不是下划线,并且必须小写。例如,如果主题名称My Theme 在中定义,style.css 或者包含在名为 my-themetext domain 的文件夹中,则该名称为my-theme。
文本域在三个不同的地方使用:
- 在
style.css主题标题中 - 作为本地化功能的一个论点
- 使用
load_theme_textdomain()或 加载翻译时作为参数load_child_theme_textdomain()
style.css 主题标头#style.css 主题标头
文本域被添加到style.css标题,以便即使未启用主题也可以翻译主题描述之类的主题元数据。文本域应与加载文本域时使用的域相同。
例:
| 1 个 2345 | /** Theme Name: My Theme* Author: Theme Author* Text Domain: my-theme*/ |
域路径
将翻译保存在以外的目录时,需要使用域路径languages 。这样,当主题未激活时,WordPress 便知道在哪里可以找到译文。例如,如果.mo 文件位于 languages 文件夹中,则“域路径”将/languages且必须以第一个斜杠写入。默认为languages主题中的文件夹。
例:
| 1 个 23456 | /** Theme Name: My Theme* Author: Theme Author* Text Domain: my-theme* Domain Path: /languages*/ |
将文本域添加到字符串
应该将文本域作为自变量添加到所有本地化功能中,以使翻译正常工作。
范例 1:
| 1 个 | __( 'Post' ) |
应该成为
| 1 个 | __( 'Post', 'my-theme' ) |
范例 2:
| 1 个 | _e( 'Post' ) |
应该成为
| 1 个 | _e( 'Post', 'my-theme' ) |
例子 3:
| 1 个 | _n( 'One post', '%s posts', $count ) |
应该成为
| 1 个 | _n( 'One post', '%s posts', $count, 'my-theme' ) |
警告:文本域应作为字符串而不是变量传递给本地化功能。它允许使用解析工具来区分文本域。不做什么的例子:
| 1 个 | __( 'Translate me.' , $text_domain ); |
加载翻译
WordPress 中的翻译已保存在其中,.po并且.mo需要加载文件。可以使用load_theme_textdomain()或加载它们load_child_theme_textdomain()。这{locale}.mo将从主题的基本目录或{text-domain}-{locale}.mo中的 WordPress 主题语言文件夹中加载/wp-content/languages/themes/。
注意:从 4.6 版开始,WordPress 会自动检查语言目录中wp-content 是否有来自 translate.WordPress.org 的翻译。这意味着不再需要通过 translate.WordPress.org 翻译的插件load_plugin_textdomain()。
如果您不想向插件添加load_plugin_textdomain()调用,则应将 Requires at least:readme.txt 中的字段设置为 4.6。
要了解有关不同语言和国家/地区代码的更多信息,请参阅语言列表。
小心
{locale}.mo如果将翻译添加到主题文件夹,则将您的 MO 文件命名为(例如 de_DE.po 和 de_DE.mo)。{text-domain}-{locale}.mo如果要将翻译添加到 WordPress 主题语言文件夹中,则将 MO 文件命名为(例如 my-theme-de_DE.po 和 my-theme-de_DE.mo)。
例:
| 1 个 234 | function my_theme_load_theme_textdomain() {load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );}add_action( 'after_setup_theme', 'my_theme_load_theme_textdomain' ); |
理想情况下,此功能应在主题的范围内运行function.php。
语言包
如果您对语言包以及对 translation.WordPress.org 的导入的工作方式感兴趣,请阅读有关 Translations 的 Meta Handbook 页面。
来源于:
https://developer.WordPress.org/themes/functionality/internationalization/