如果你的WordPress主题要提交到WordPress官方主题库,使用者来自世界各地的多种语言,那么,你就要让你的WordPress主题支持语言本地化,方便使用者进行语言翻译和制作语言包。
让WordPress主题支持语言本地化,主要流程为:让主题开启语言本地化功能,然后使用符合WordPress API 规范的写法来撰写需要翻译的内容,接着使用 poedit 生成语言包。下面倡萌将进行详细讲解。
让主题支持语言包
在主题的 functions.php 文件添加下面的代码:
add_action('after_setup_theme', 'my_theme_setup');
function my_theme_setup(){
load_theme_textdomain('wpdaxue', get_template_directory() . '/languages');
}
该代码是通过 load_theme_textdomain() 函数来定义主题的语言路径,其中包含了两个参数,第一个“wpdaxue”是 textdomain ,第二个“get_template_directory() . ‘/languages’ ”则指明主题的语言存放路径为 当前主题的 languages 目录。只要将语言包存放在这个目录,就可以生效。
规范编译要翻译的内容
要让你的主题的文本内容支持自动翻译,需要你做好规范符合 WordPress API 的书写。WordPress常用下面几个函数来包裹需要翻译的内容:
__()
_e()
_x()
_ex()
_n()
倡萌已经介绍过《WordPress翻译中 __()、_e()、_x、_ex 和 _n 的用法及区别》,但是在实际使用中,我们还需要注意以上函数的末位参数 。也就是在上一步中,我们通过 load_theme_textdomain() 函数定义了第一个参数 $domain 为“wpdaxue”,这个参数都需要添加到 __() 等函数中作为末位参数,它是用来检索被翻译字符串的唯一标识符。例如:
<?php
the_content( __( 'Click here to read more','wpdaxue' ) );
?>
如果去掉上面代码 __() 的末位参数‘wpdaxue’,对应的 ‘Click here to read more’ 的翻译内容就没办法正常加载。
使用 POEdit 制作语言包
POEdit 是一款非常有用的语言包制作软件,你可以在 POEdit 官方下载,安装好以后,就是中文界面了。下面就简单演示一下操作过程。
新建编目
点击 文件 > 新建编目,会出现如下界面:
1.在”翻译属性”中按照下面的范例添加信息:
需要注意的是,“语言”就是输出语言的简码,比如简体中文为 zh_CN (注意大小写),然后字符集一般选择 UTF-8,复数形式一般填 nplurals=2; plural=(n!=1); 即可。
2.切换到“源路径”,由于前面我们创建的语言包路径为当前主题的 languages 目录,所以这里我们添加相对路径 ../ 即可,如下图:
3.添加“源关键字”,这个关键字就是要识别上面的几个翻译函数。
需要注意的是,_n、_x 和 _ex 这三个函数要添加对应的参数才能实现其功能,建议对应的写法为
- __
- _e
- _n:1,2
- _x:1,2c
- _ex:1,2c
填写完以后,点击“确认”,就创建好了编目。
导入需要翻译的字符串
点击“更新”按钮,如果你前面的步骤没有出错的话,就会自动搜索主题文件中需要翻译的条目,如下图:
翻译字符串
翻译完以后,将语言包保存到主题的语言目录 languages 中,这里特别要注意语言包的命名。它是使用 Gettext 代码来命名的,比如中文的 Gettext 语言代码为 zh ,国别代码为 CN,所以最终保存的简体中文语言包为 zh_CN.po,POEdit 会自动生成一个名为 zh_CN.mo 的文件。
po 和 mo 的最直接的区别在于:po文件是给人看的,也是可以直接通过 POEdit 编辑的,mo 文件则是给服务器识别的,是用来显示翻译内容所必需的。也就是说,你的主题语言目录中,可以没有po文件,但是必须有mo文件,否则服务器就没办法加载翻译!
你可以通过下面的链接了解更多 Gettext 代码:
让WordPress识别语言包
通过上面的步骤,我们已经创建好了语言包,那么WordPress如何才能识别语言包?打开WordPress根目录下的 wp-config.php 文件,找到 WPLANG,如果这里填入的是 zh_CN ,说明你使用的是简体中文版本的 WordPress,那么主题也会自动调用简体中文语言包 zh_CN.mo 。
/**
* WordPress 语言设置,中文版本默认为中文。
*
* 本项设定能够让 WordPress 显示您需要的语言。
* wp-content/languages 内应放置同名的 .mo 语言文件。
* 要使用 WordPress 简体中文界面,只需填入 zh_CN。
*/
define('WPLANG', 'zh_CN');
小结
在整个过程中,工作量最大的就是 “规范编译要翻译的内容”这个步骤,你必须有耐心,仔细地规范代码。熟悉 __()、_e()、_x、_ex 和 _n 的不同用法是难点所在。
请问大神,我翻译了一个主题,但是该主题自带的后台设置还是英文的,后台设置在哪里翻译呢
我想在我的主题里更改后台的语言如何做?
如:将后台的“添加文章”更改为“添加产品”等这种需求??
这行
我在主题文件functions.php添加了这个
add_action(‘after_setup_theme’, ‘my_theme_setup’);
function my_theme_setup(){
load_theme_textdomain(‘lioit’, get_template_directory() . ‘/languages’);
}
依据的是
_e()的第二个参数,这样做对吗,
还有把翻译好的zh_CN.mo文件放在主题文件下languages,
还是放在wp-content/language
怎么那么多地方要放
放到你主题的 languages 目录
请问倡萌!为什么我下的英文主题包里面的语言文件夹是lang而不是languages呢?
请问如果主题更新后,汉化文件应该如何修改,不可能全部都再重新翻译一边吧
如果你的语言包文件 po 设置了路径,重新扫描一次文件就可以自动添加新的需要汉化的字段,然后只需要翻译新增的几个即可
还要自己翻译啊,好麻烦的感觉
请问,多语言后,后台主题设置有一部分不能实现翻译,这是为什么?
纳尼!这Poedit工具也就是找出可以翻译的词出来而已?然后还得要一个一个自己翻译?
当然了,你不翻译,谁来翻译呢,现在的软件还没有这么智能准确的翻译功能,要不然,世界上就少了做翻译的人了
逛逛,学习了,正打算翻译一个主题。
主题的设置如何汉化呢,比如:<h2>Theme Options</h2> 没有函数输出!想汉化yootheme的那款cloud主题!
你需要将要翻译的词条 使用专门的翻译函数进行处理,才能翻译的。请参阅 http://www.wpdaxue.com/difference-between-__-_e-_x-_ex-and-_n.html。也可以自己查看主题的其他可翻译的词条是如何修改的
我试过添加加 _e (‘Theme Options’); 太麻烦,后台就不搞了!!