一,WordPress 创建语言文件
通常 WordPress 的语言文件在 ./wp-content/languages 下,文件的扩展名,是“mo”和“po”,
po文件
用程序msginit来分析pot文件,生成各语言对应的po文件,比如中文就是zh_CN.po,法语就是fr.po文件。
PO是Portable Object(可移植对象)的缩写形式,它是面向翻译人员的、提取于源代码的一种资源文件。
po文件可以用任何编辑器如poEdit,vi,Emacs,editplus打开,交给翻译人员来将其中的文字翻译成本国语言。
mo文件
用msgfmt将.po文件编译成mo文件,这是一个二进制文件,不能直接编辑。
MO是Machine Object(机器对象)的缩写形式,它是面向计算机的、由.po文件通过GNU gettext工具包编译而成的二进制文件,应用程序通过读取.mo文件使自身的界面转换成用户使用的语言,如简体中文。
创建一个 po 文件:
bash msgid "" msgstr "" #. translators: %s: wp-config.php #: wp-admin/includes/network.php:463 msgid "You should back up your existing %s file." msgstr "您应备份现有的 %s 文件。" #. translators: %s: wp-config.php #: wp-admin/includes/network.php:463 msgid "dada" msgstr "哒哒" msgid "dodo" msgstr "兜兜"
使用命令生成“mo”文件:
msgfmt -o languages/zh_CN.mo languages/zh_CN.po
二,载入本地化语言文件
WordPress 做一个多语言网站,或者让我们的主题支持多种语言,那么就可以使用 load_theme_textdomain() 函数来定义主题的语言路径,只要将语言放到该目录下面且命名正确,就可以生效。 load_theme_textdomain() 位于 wp-includes/l10n.php
在主题的functions.php中加入以下代码:
add_action('after_setup_theme', 'la_theme_setup'); function la_theme_setup(){ load_theme_textdomain('la_theme', get_template_directory() . '/languages'); }
三,使用语言文件
1.字符串翻译 要使字符串在您的插件中可翻译,请将原始字符串包装在__()函数调用中,如下所示:
$text = __( 'Hello, SitePoint Readers!', 'espw-plugin' );
如果要向浏览器回显字符串,而不是echo语言构造,请使用_e函数:
_e( 'Hello, SitePoint Readers!', 'espw-plugin' );
2.使用占位符 作为PHP和WordPress开发人员,我假设您知道什么是placeholders 。 您可以快速浏览sprintf和printf() PHP文档以获得更多信息。 如果要在字符串中使用变量(例如下面的示例),则应使用占位符。
echo 'Your city is $city.'
正确的方法是如下使用printf()函数:
printf( __( 'Your city is %s.', 'espw-plugin' ), $city );
浏览WordPress插件存储库中托管的一些插件的代码,我确实看到了类似这样的信息:
echo __('Your city is $city', 'espw-plugin'); _e('Your city is $city', 'espw-plugin');
尽管字符串现在可以翻译了,但是PHP变量$city也可以翻译。
这是一种不好的做法,因为翻译人员可能会错误地更改变量或将恶意代码注入插件代码库中,这最终会使插件发生故障。
sprintf函数与printf相似,因为它们使用占位符格式化字符串,而printf输出格式化的字符串,而sprintf返回该字符串。
示例:以下代码将格式化的字符串分配给变量$text 。
$text = sprintf( __('Your city is %s.', 'espw-plugin'), $city );