Npcink Blog
切换菜单

国际化-Wordpress 官方文档

国际化是开发主题的过程,因此可以轻松地将其翻译成其他语言。

本页目录5 节

什么是国际化?

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

文本域在三个不同的地方使用:

  1. 在style.css主题标题中
  2. 作为本地化功能的一个论点
  3. 使用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 个 234function 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/