最近研究了下wordpress汉化,将相关结论做整理,以供查阅。
1、wordpress汉化原理
和诸多软件一样,wordpress通过加载.mo文件来实现通一版本的不同语言限制功能,例如,zh_CN.mo一般为中文语言包。.mo文件为二级制文件,供程序读取,不可编辑。
wordpress上没有语言设置项,那是通过怎么样方式来指定定用哪个语言包加载呢?可以看到wordpress主目录的wp-config.php中define ('WPLANG', 'zh_CN'); 即表示当前语言版本为zh_CN(中文版wordpress为该选项),因此在加载主题的时候,只采用对应目录下的zh_CN.mo作为语言包,因此我们在设置的时候一定要注意协调好,避免出现不生效的情况。
因此得到.mo文件后,只要做两个设置:
- 主目录的wp-config.php 里代码修改成:define ('WPLANG', 'zh_CN');
- 将zh_CN.mo文件拷贝到主题路径(/wp-content/themes/主题名)下的languages文件夹即可(如没有则新建)。
2、mo文件怎么得来的?——poEdit编辑器
poEdit官方下载地址(http://www.poedit.net/download.php 中选择Windows version(window版)下载即可),该编辑器有两个主要功能:
- 将.po/.pot文件转为.mo文件。(点保存自动在同目录下生成同名的.mo文件)
- 对.po/.pot文件文件进行编辑(翻译或者二次翻译)。.po 文件,可以从菜单中的"文件->打开" 来打开文件。.pot 文件:使用 "文件->从 POT 文件新建编目" 来打开,语言选择 "Chinese"(由于中文的代码是 zh,所以Chinese在最下面)。实际上直接用记事本打开可直接编辑,只是不太直观。
- 从已有项目代码中提取po模版文件。
poEdit相关教程很多,从3(提取pot)-2(编辑/翻译pot为po)-1(po生成.mo)的流程顺序执行即可,推荐一个教程:poEdit汉化WordPress主题,插件教程
wordpress主题的pot文件一般在/wp-content/themes/主题名 下的languages文件夹中。
3、po和pot文件的区别
说到这里,po和pot文件的区别其实不大(记事本打开即可看到)。一般pot由开发者提供,只有模版,文件中相关翻译的位置为空,而po文件就是在相关翻译为位置填充了翻译语句。通俗说法,pot是汉化模版(开发者提供给各国翻译者),po是翻译稿源文件(翻译者提供给二次翻译者),职责分得比较清楚,一个pot对应多种语言版本的po文件,不过实际上了解这些规则的人不多,因此基本混淆使用,但不造成多大影响。详情参见:wordpress语言文件.po.pot.mo简介及汉化
4、只有.mo怎么办?——软件汉化之路
是的,逆向解析.mo成po。
-
先使用poEdit安装程序bin文件夹中的msgunfmt程序将.mo文件转换成.po文件,windows下cmd命令示例:
cd C:\Program Files\Poedit\bin
msgunfmt d:\demo.mo -o d:\demo.po
注:这里会有一个问题,如pot中有ABC3句模版,但是po中只对AB进行了翻译、C的翻译部分为空,因此得到的mo文件中只有AB的翻译,因为C没有被翻译,为节省字节,mo中不会含有C的任何信息,这样,mo文件逆向解析得到的po文件中也将不会出现C这个模版,由于pot转mo时候信息不是完全等价的(可能存在遗失,比如遗失C模版),因此逆向并不能保证得到所有的模版(也即文件pot不一定能完全还原)
-
再使用poedit汉化,然后生成.mo文件,这样就实现了对无po软件的汉化。
5、poEdit和gettext的关系
所谓gettext实际基于文本替换的一种技术实现,将语言部分非核心代码按照gettext标准编写,这样程序只要发布一个语言版本并且提供pot文件之后就可以让各地爱好者自行翻译汉化,节省在国际沟通上的成本。
poEdit的“从已有项目代码中提取po模版文件”也即是通过这个原理,如wordpress中语言部分通过“_e”或“__”(注意是两条下划线)来统一起来,因此你只要告诉poEdit通过“_e”或“__”这两个关键字去提取模版pot文件,poEdit自然就很容易实现“从已有项目代码中提取po模版文件”这个功能。
参考:
windows的cmd命令行,整理成可执…