问题描述

创建一个翻译准备好的插件的最好方法是什么?

它不一定要从一开始就翻译出来,但它必须易于翻译,因此来自不同文化的其他开发人员可以参与插件的本地化过程。

最佳解决方案

写入本地化的想法

不要使用 echoprint()来产生文本输出,而是使用 WordPress 函数__()_e()

/** Not localization friendly */
echo "Welcome to my plugin";
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()__()将提供当前语言的翻译作为第一个参数提供的文本。 _e()将输出文本,而__()将返回。

第二个参数是文本域,您将使用它来告诉 WordPress,作为第一个参数提供的文本属于此插件,您可以使用任何您想要的名称,但我更喜欢使用与我用于插件的名称相同的名称目录文件,我觉得它比较直观。

如何输出动态文本:「Hello< username>」?

__()sprintf()

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. 准备.pot /.po /.mo 文件

定义

  • .pot 文件:由插件开发人员处理,它用作创建新翻译的起点,WordPress 不使用它。

  • .po 文件:您或其他人启动的翻译文件,可能已完成,WordPress 不会使用它。

  • A.mo 文件:当您保存.po 文件时,由 Poedit 自动创建,只要您创建或更新.po 文件,您可以使用这些文件进行上传,即可上传 re-upload 。 WordPress 从.mo 文件获取翻译。

打开 Poedit 并创建一个新的目录 (文件> 新 Catallog …) 与这些设置:

  • 项目信息:使用您 (或您的团队) 信息,语言和国家/地区应符合您的插件默认语言

  • 路径:

    • 基本路径:.

    • 路径:删除所有& 添加..,(我们将把语言文件存储在一个名为 languages 的 plugin 子目录中)

  • 关键字:删除所有& 加入___e

将目录保存为/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot,并通过按更新按钮扫描您的插件文件以进行可翻译的文本。更新完成后关闭该目录,您不需要更新该文件,除非您添加新的可翻译字符串 (即__()_e()) 插入到您的插件。

现在我们来创建第一个翻译 (我将使用 fr_FR):

使用 Podeit,从 POT 文件创建目录 (文件> POT 文件中的新目录…):

  • 项目信息:使用您 (或您的团队) 信息,更改语言和国家,我将使用法国和法国

  • 路径:不要改变

  • 关键词:别开玩笑

将目录保存为/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po 。翻译部分或全部字符串,再次保存.po 文件,同时上传.po 和.mo 文件。

请注意,每当保存.po 文件时,.mo 文件都将使用相同的名称生成,所以.po 文件的文件名至关重要,它由插入文本域 (my-plugin) 和语言区域设置 (fr_FR) 的连接组成, ,总是为你的.po 文件命名这样的插件:[textdomain] – [locale] .po,这里有一些例子:

  • 意大利语/意大利语:wpcf7-it_IT.po

  • 葡萄牙语/巴西:wpcf7-pt_BR.po

  • 阿拉伯语:wpcf7-ar.po … 是的!

每当插件使用新文本更新时,请更新 po 文件,翻译新字符串并重新上传.po 和.mo 文件

3. 指示插件加载当前语言的翻译文本

在插件的某处,您必须告诉 WordPress 使用您的.mo 文件,您可以在插件文件的开头使用此代码:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

load_plugin_textdomain 功能的第 1 和第 3 参数中用插件名替换 my-plugin

4. 测试和排除故障

某些原因可能无法正常工作:

  • 字符串不会导入到.pot 或.po 文件中

    • â†「错误的目录设置 (路径或关键字或两者)

  • 文字未在 WordPress 网站上翻译

    • →.mo 文件丢失或文件名错误

    • →未使用文本域 (用_e('my text', 'my-plugin')替换_e('my text'))

    • →文本域未加载 (使用正确的参数上面的示例,WP 不会警告你有关错误)

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。