WordPress主题国际化

江河/ 03月27日/ WordPress/ 浏览 810

什么是国际化


在开发WordPress主题中,国际化是指WordPress主题很容易翻译成其他语言。国际化通常缩写为i18n(因为字母i和n之间有18个字母)。


为什么说国际化很重要


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


在国内,WordPress在外贸站方面使用较多,既然是做外贸,支持国际化就是必要的功能了。


如何将WordPress主题国际化


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


以下示例无法翻译,除非翻译人员修改了源代码,这不是很有效。


<h1>Settings Page</h1>


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


<h1><?php _e( 'Settings Page' ); ?></h1>


WordPress 使用 gettext 库来添加 PHP 中的翻译。在WordPress中,您应该使用WordPress本地化功能,而不是本地的 PHP gettext 兼容翻译功能。


Text Domain


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


WordPress.org上托管的主题-文本域必须与主题URL的段塞相匹配(wordpress.org/themes/<glug>)。这是必要的,这样translate.wordpress.org的翻译才能正常工作。


文本域名必须使用破折号而不是下划线,并且必须小写。例如,如果主题的名称My theme是在style.css中定义的,或者它包含在名为My theme的文件夹中,那么文本域应该是My theme。


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


1.在style.css主题标头中


2. 作为本地化函数中的自变量


3. 使用 load_theme_textdomain() 或 load_child_theme_textdomain()


style.css theme header - style.css 主题头部声明

文本域被添加到style.css头中,这样即使在主题未启用的情况下,也可以翻译像描述这样的主题元数据。文本域应与加载文本域时使用的域相同。


举个例子:


/*
* Theme Name: My Theme
* Author: Theme Author
* Text Domain: my-theme
*/


Domain Path - 域路径


当翻译保存在语言以外的目录中时,需要域路径。这是为了让WordPress知道在主题未激活时在哪里可以找到翻译。例如,如果.mo文件位于languages文件夹中,则域路径将为/languages,并且必须使用第一个斜杠写入。默认为主题中的语言文件夹。


举个例子:


/*
* Theme Name: My Theme
* Author: Theme Author
* Text Domain: my-theme
* Domain Path: /languages
*/


在 Domain 中添加字符串


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


__( 'Post' )


应当改为:


__( 'Post', 'my-theme' )


例子2:


_e( 'Post' )


应当改为:


_e( 'Post', 'my-theme' )


例子3:


_n( '%s post', '%s posts', $count )


应当改为:


_n( '%s post', '%s posts', $count, 'my-theme' )


文本域应该作为字符串而不是变量传递给本地化函数。它允许解析工具区分文本域。错误的示例:


__( 'Translate me.' , $text_domain );


加载翻译


WordPress中的翻译保存在需要加载的 .po 和 .mo 文件中。可以使用函数 load_theme_textdomain() 或 load_child_theme_textdomain() 这将从主题的基本目录或 {text-domain}-{locale}.mo 来自 /wp-content/languages/themes/ 中的WordPress主题语言文件夹。


注意:


如果将翻译添加到主题文件夹,请将MO文件命名为{locale}.mo(例如de_de.po&de_de.mo)。


将您的MO文件命名为{text-domain}-{locale}.mo(例如 my-theme-de_de.po & my-themede_de.mo ),如果您要将翻译添加到WordPress主题语言文件夹中。


举个例子:


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' );


这段代码一般放在主题的 functions.php 文件中。


发表评论

暂无评论,抢个沙发...

客服 工单