不止 WordPress ,包括很多桌面应用程序都是是依靠 po 文件或 mo 文件来实现多语言版本。
一般国外的 wordpress 模板,本身包含语言包文件,您可以在 lang 或者language 文件夹中查找是否存在以.po、.pot 的文件,如果模板中存在以.po、.pot 的文件,我们可以使用 Poedit 软件直接打开对其进行翻译。复制其中的 en_US.po 文件,然后粘贴到同一文件夹,并命名为 zh_CN.po,然后使用 Poedit 软件直接打开对其进行翻译。
工具-PoEdit(po文件编辑器)
PoEdit:PoEdit是一款.po文件编辑器,PO即Portable Object,可跨平台对象的意思,PoEdit常用来汉化各种程序,它内置于wxWidgets工具中,可以在所有它支持的平台上运行,如Unix下的GTK+以及Windows。PoEdit提供更方便的办法编辑目录,而不用通过启动VI文本编辑器,手动编辑。
文件简介
.po文件,.mo文件,.pot文件是由gettext程序生成或者使用的源代码和编译结果。其中:
pot文件:是一种模板文件,其实质与.po文件一样,其中包含了从源代码中提取所有的翻译字符串的列表,主要提供给翻译人员使用。
注意:主要读取的是mo文件,po文件可以不拷贝过来。
po文件(zh_CN.po)
(1)用程序msginit来分析pot文件,生成各语言对应的po文件,比如中文就是zh_CN.po,法语就是fr.po文件。(2)PO是Portable Object(可移植对象)的缩写形式,它是面向翻译人员的、提取于源代码的一种资源文件。(3).po文件可以用任何编辑器如poEdit,vi,Emacs,editplus打开,交给翻译人员来将其中的文字翻译成本国语言。
mo文件(zh_CN.mo)
(1)用msgfmt将.po文件编译成mo文件,这是一个二进制文件,不能直接编辑。(2)MO是Machine Object(机器对象)的缩写形式,它是面向计算机的、由.po文件通过GNU gettext工具包编译而成的二进制文件,应用程序通过读取.mo文件使自身的界面转换成用户使用的语言,如简体中文。(3)可以用工具如msgunfmt命令将.mo文件反编译为.po文件。
关于gettext,在文章末尾有介绍。
什么是po文件:PO即Portable Object
mo文件:
default.pot文件:
en.po文件:
【百度】Poedit
【下载地址】https://poedit.net/download
假设主题名为“mywptheme”
在目录mywpthem->languages下,找到如下文件
mywptheme.pot
说明:
多语言支持
定义一个domain(自带2021主题):
/*
* Make theme available for translation.
* Translations can be filed in the /languages/ directory.
* If you're building a theme based on Twenty Twenty-One, use a find and replace
* to change 'twentytwentyone' to the name of your theme in all the template files.
*/
load_theme_textdomain( 'twentytwentyone', get_template_directory() . '/languages' );
说明:
1、如上代码一般放在主题的启动函数中,或如下:
function theme_init() {
load_theme_textdomain($domain, $path);
}
add_action (‘init’, ’theme_init’);
2、$domain:翻译中的唯一标识符,如“twentytwentyone”,对应后面的__( 'Newer Comments →', 'twentytwentyone' );
3、$path:为模板中翻译语言包的路径,一般会放在模板中的 language 或者lang 文件夹中保存。
3、至此网站前台或者后台仍然不显示为中文,那么请检查一下网站根目录下的 wp-config.php 文件,找到“define (‘WPLANG’, ”)”处,并将其改写为“define (‘WPLANG’, ‘zh_CN’);”,那么网站将会显示为您汉化的中文语言了。
内置的语言函数
WordPress 内置的语言函数,__()、_e()、_x(),这里我们可以直接修改这里语言函数内的英文部分,将其翻译为中文,就完成了汉化工作。
举例1:
$slider_default['slider1'] = array(
'onepage_slider_trans' => 'horizontal',
'onepage_slider_image' => ONEPAGE_DIR_URI . "assets/images/1.jpg",
'onepage_slider_heading' => __( 'Best One Page WordPress Theme', 'one-page' ),
'onepage_slider_subheading' => __( 'Give Your Business Website A New Shape.', 'one-page' ),
'onepage_slider_button_link' => '#',
'onepage_slider_button_text' => __( 'Create Your Website!', 'one-page' ),
'onepage_slider_overlay' => 'rgba(29, 105, 165, 0.82)',
);
举例2:
<p class="xxx"><?php _e( '404 ERROR', 'mywptheme' ); ?></p>
<p class="yyy"><?php _e( 'This is somewhat embarrassing, isn’t it?', 'mywptheme' ); ?></p>
“_e” 是wordpress的自定义的内置函数,显示 translate()返回的被翻译过的内容 注意,并非php原生函数,所以你在网络上找不到。
内置翻译的函数设置,一般在【wp-includes目录下110n.php】文件中定义。
若您在欣赏自己的汉化作品时发现某一些地方仍然不是很完美,唯一的原因便是 Poedit 软件没有查找到,或者说需要翻译的部分并没有使用“__”或者“_e”函数来规范。那么您可以使用 Dreamweaver 软件对站点目录下的文件进行查找需要汉化的部分。然后使用函数“__”或者“_e”规范或者直接修改。
关于GUN
【关于GNU,Gettext国别代码:】http://www.gnu.org/software/gettext/manual/gettext.html#Country-Codes
如何使用Poedit将mo文件反编译(转换)为po文件
有些主题和插件的翻译不好,想重新翻译,但是可能原项目不带po文件,这时候需要用Poedit把mo文件反编译为po文件。
1.将需要反编译的mo文件放在某个盘的根目录下,比如F:\a.mo
,备用;
2.Win+R
或者点击开始->运行,然后输入cmd
;
3.假如你的Poedit是安装在D盘的,安装位置是:D:\Program Files (x86)\Poedit
;
4.在DOS窗口输入D: 然后回车
;
5.在DOS窗口输入cd加一个空格
,然后输入或者右键粘贴Program Files (x86)\Poedit\GettextTools\bin\
;
6.
来到F盘根目录下,你会看到a.po文件已经存在了:
【】http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/09/2131908.html
【】http://teliute.laxjyj.com/TeacHtm/TePoedit/index.html
如何有效率的汉化wordpress主题:http://jingyan.baidu.com/article/90bc8fc87b72e3f653640cee.html
wordpress语言文件.po.pot.mo简介及汉化:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/09/2131908.html
在主题中加入本地化编译函数请阅读上一篇教程:
查看wordpress主题语言包系列教程:
wordpress主题语言包(一):前言
wordpress主题语言包(二):在Wordpress主题中加入本地化编译函数
wordpress主题语言包(三):使用POEdit制作wordpress主题语言包
wordpress主题语言包(四):wordpress主题调用语言包