「WordPress」- 完善插件语言包

问题背景

在 WordPress 中,经常会出现语言包不完整的情况。比如我设置语言为简体中文(zh-CN),但是有些内容还是显示为中文,这主要的因为主题或者插件中的语言包不完整。

本文介绍了处理这种问题的办法。但是在开始介绍处理办法之前,要先介绍以下.pot、.po、.mo文件。

关于 .pot / .po / .mo 文件

.pot

模板文件,其实质与 .po 文件类似,其中包含从源代码中提取所有的翻译字符串的列表,主要提供给翻译人员使用。

.po – Portable Object

1)用程序 msginit 来分析 pot 文件,生成各语言对应的 po 文件。比如,中文就是 zh_CN.po 文件,法语就是 fr.po 文件
2)PO是Portable Object(可移植对象)的缩写形式,它是面向翻译人员的、提取于源代码的一种资源文件。
3).po文件可以用任何编辑器如poEdit,vi,Emacs,editplus打开,交给翻译人员来将其中的文字翻译成本国语言。

.mo – Machine Object

1)使用 msgfmt 将 .po 文件编译成 .mo 文件。注意 .mo 是二进制文件,不能直接编辑。
2)是面向计算机的、由 .po 文件通过gettext工具包编译而成的二进制文件,应用程序通过读取.mo文件使自身的界面转换成用户使用的语言,如简体中文。

提示

可以用工具如msgunfmt命令将.mo文件反编译为.po文件。

回到WordPress中

在WordPress中的语言包也是使用的po、mo文件。这里以我正在使用的主题weblog为例。

主题插件weblog的主目录为wp-content/themes/weblog,你需要使用wp-content/themes/weblog/languages/weblog.pot文件生成weblog-zh_CN.mo文件,并将weblog-zh_CN.mo文件放在wp-content/languages/themes目录中。接下来,我们就开始操作了。

首先,你需要编辑wp-content/themes/weblog/languages/weblog.pot文件进行汉化处理。.pot文件的结构类似于:

#: template-parts/content-page.php:20 template-parts/content-single.php:53

#: template-parts/content.php:66

msgid “Pages:”

msgstr “”

其中,msgid对应程序中的字符串;井号(#)开始的行是注释,记录了程序中使用字符串的地方。而你需要将msgstr设置为对应的语言。比如:

#: template-parts/content-page.php:20 template-parts/content-single.php:53

#: template-parts/content.php:66

msgid “Pages:”

msgstr “页:”

上面的只是一个示例,你可能需要修改多个地方。然后保存修改并退出,再按照顺序执行下面的SHELL命令来生成.mo文件:

# msginit -i weblog.pot -o weblog.po

# msgfmt -o weblog.mo weblog.po

# cp weblog.mo /path/to/wordpress/wp-content/languages/themes/weblog-zh_CN.mo

现在就完成了,之前在简体中文环境下显示英文的地方就可以显示为中文内容了。

参考文献

语言文件.po .pot和.mo简介及汉化