翻译或者说本地化 WordPress 插件可以让更多的人使用你的插件用,而 WordPress 对 i18n 的支持使这一切都变得非常简单,插件作者(包括主题作者)非常容易就能让人们把他们的插件翻译成各种语言。
这篇日志首先将会详细讲解应该如何修改插件,使得插件能够被翻译。然后将介绍一个叫做 poEdit 的翻译软件,通过它来 本地化 WordPress 插件。
WordPres 插件本地化的好处和 .po 文件
WordPress 插件有越多的语言版本,就会有越多的不同国家的人下载和使用。
如果 WordPress 插件很流行,很多人使用,就会有用户把它翻译成不同的语言以方便其他地区的人能够使用它。当然最麻烦最原始的翻译方法就是逐行逐字的翻译源代码。不过现在采用的是简单轻便的翻译方法:通过 .po 文件。
通过 .po 文件,任何人都能翻译你的插件,只要他对插件的使用的原来语言熟悉。并且 .po 文件还有一个好处就是,如果插件的源代码作了任何修改,翻译者不必查看源代码来重新翻译,因为所有需要翻译的文本都会保存在一个后缀名为 .po 文件中,翻译者所需要做的只是重新更新下 .po 文件,翻译新增或修改的部分。
插件本地化的准备工作
WordPress 使用 GNU gettext 机制来实现本地化。WordPress 有两个可以被插件作者调用的函数:_e 和 __。每次在插件中输出文本,都应该使用这两个函数。
- 这两个函数使用方法是:__($message, $domain) 和 _e($message, $domain)
_e和__的区别是:_e直接输出文本,而__是返回文本,你需要自己输出,所以__一般用在字符串连接当中。- 这两个函数都用
$message作为第一个参数和$domain作为第二个参数。第一个参数就是你要输出的文本,而第二个参数$domain不是可选的,它应该是一个和你插件或者主题对应的唯一的名字,举个例子,如果你开发一个叫做 Related Posts 的插件,这里$domain就是related_posts,$domain一般是在load_plugin_textdomain函数中定义,下面有具体介绍。
导入本地化文件
在确保输出的文本可以被本地化之后,你必须设置你的插件,使得能够导入适当的 .mo 文件。.mo 是编译后的 .po 文件,它是在 poEdit 保存的时候会自动产生的。
在你插件中的代码大致如下所示:
load_plugin_textdomain('your-plugin-domain', "/wp-content/plugins/your-plugin-directory/");
- 函数具体语法:load_plugin_textdomain($domain, $path)
$domain变量和在__和_e中使用的是同一个变量。$path是定义 .mo 文件的路径。可以使用相对于ABSPATH的相对路径。如果插件没有自己的目录,这里也可以设置为空。
这里需要注意的一件事情是,产生的任何 .mo 文件都应该以 $domain 变量的值作为文件名的前缀。如果插件的 $domain 是 related_posts,那么 .mo 文件将会被命名为 related_posts-zh_CN.mo(假设插件翻译成中文)。
使用 poEdit 进行翻译
WordPress Codex 已经有一个非常好的如何使用 poEdit 翻译插件或者主题的 step-by-step 教程,但是我这里将通过一个真实的例子向你展示这些步骤。
第一步:下载 poEdit
到达 poEdit 项目页面,然后下载,安装它就可以。
第二步:找一个插件翻译
这里,我将举个我写的插件 Related Posts 作为例子。
第三步:打开 poEdit 并打开菜单 File -> New catalog…
在弹出的 ‘Settings’ 对话框中,输入你项目的名称,并设置字符集为 UTF-8。

第四步:输入插件的路径
在刚才的 ‘Settings’ 对话框,点击 ‘Paths’ 标签页并点击建立新条目的图标。假设插件在自己的子目录下并且你会把 .po 保存在子目录中,输入”.”(这将告诉 poEdit 去扫描当前目录和所有子目录)。

第五步:设置适当的关键字
因为 WordPress 使用 _e 和 __ 函数来本地化,所以你应该让 poEdit 知道这就是它应该查找的。点击 ‘Keywords’ 标签页并输入 _e 和 __ 作为关键字,你可以通过点击 ‘New Item’ 图标输入关键字。

第六步:点击 OK 并开始翻译
点击 “Okay” 按钮并保存 .po 文件到你的插件目录下。
在你保存 .po 文件之后,会有一个窗口弹出并告诉你所有它找到相匹配的文本。

如果你不准备翻译该插件,你可以保存.po 文件并把它和插件一起分发出去,让别人能够直接使用它进行翻译。
第七步:翻译插件
一旦所有需要翻译的文本都找到了,就该开始翻译插件了。你所做的就是只要简单的找到你想翻译的文本,并增加你自己的语言。

上面的 poEdit 界面就是插件翻译界面。
第八步:保存 Catalog
还记得前面提到的 $domain 吗?举个例子,我想产生一个西班牙文的翻译文件,我将会保存这个文件并以 $domain 作为前缀,然后语言和地区代码作为后缀。在这里,$domain 是 related_posts 并且语言和地区代码是 es_ES。所以文件名应该为: related_posts-es_ES。
通过保存新文件,我将自动生成一个可以让别人使用的 .po的文件,和一个可以被 WordPress 直接读取来本地化插件的 .mo 文件。
现在如果用户已经在他们的 wp-config.php 文件中设置了适当的 WPLANG 的值,他们插件的选项和输出的文本将会使他们当地的语言。
总结
本地化一个 WordPress 插件是让更多地区用户使用你的插件的一个非常好的方法。本地化首先需要插件作者保证插件能够真正本地化,最后翻译者使用 PoEdit 进行翻译。
参考:
- WordPress Localization Repository
- Creating POT Files
- gettext (Wikipedia)
- Localizing Plugins and Themes

21sta | 2007-09-10 14:30:05 | #
我订阅了你的blog!
有空请订阅下我的Blog
http://feed.21sta.com
谢谢
支持 反对
camelwoo | 2008-08-15 14:04:28 | #
3x
支持 反对
popdo | 2008-11-21 00:16:03 | #
水煮鱼你好:我做了一个主题的中文包的.mo文件放在languages目录下并且设置了wp的默认为中文。为什么不能显示呢?而下载了别人的wp中文包却可以显示。。。请教。。。
支持 反对
Denis | 2008-11-21 00:28:44 | #
主题的中文包的.mo好像放在主题文件夹里面,你看看具体放什么位置吧!
支持 反对
老所 | 2008-09-01 02:02:46 | #
博主你好,我也写了一篇关于使用gettext汉化的文章,参见 http://blog.ipattern.org/archives/12
当时写这文章时,好像就参考过你翻译的这篇文章,呵呵。
大致浏览了一下你的博客,很不错,很漂亮,博主在网页设计方面一定很有建树,于是我把你加到了我的友情博客连接里了,你可以去 http://blog.ipattern.org 看。希望博主也能把握加到你的友情连接里,以便以后多交流,谢谢。
支持 反对
wonsore | 2008-09-10 17:17:00 | #
不错。
有空多研究研究。
支持 反对
小牧 | 2008-10-17 23:46:58 | #
OK!不错的插件!
支持 反对
白云山 | 2009-09-09 22:53:03 | #
用poEdit编辑多语言真的很方便,最近在搞yii,打算把wp的多语言模块移植到yii
支持 反对
Denis | 2009-09-09 23:28:07 | #
yii 是什么?
支持 反对
白云山 | 2009-09-09 23:32:17 | #
一个PHP框架
http://www.yiiframework.com/
支持 反对
暗黑邪神剑 | 2009-09-11 20:22:57 | #
好强啊 终于找到po工具了
支持 反对
园子 | 2009-09-12 10:38:45 | #
对于做插件的朋友来说确实是个不错的东东~
支持 反对
uyghurbeg | 2010-08-22 16:56:45 | #
翻译了,但是没有效果…那个翻译文件放在哪里?
支持 反对