国际化-WordPress官方文档

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

什么是国际化?

国际化是开发主题的过程,因此可以轻松将其翻译成其他语言。国际化通常缩写为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的导入的工作方式感兴趣,请阅读有关TranslationsMeta Handbook页面

来源于:

https://developer.wordpress.org/themes/functionality/internationalization/

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新消息 消息中心
有新私信 私信列表
搜索