什么是国际化?
国际化是开发主题的过程,因此可以轻松将其翻译成其他语言。国际化通常缩写为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-theme
text 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/