加载插件翻译后的字符串是谁的工作?

时间:2016-03-05 作者:henrywright

我已经国际化了我的插件,现在正在研究如何最好地加载插件的翻译字符串。我包括myplugin/languages/myplugin。pot与我的插件,但我不打算分发。采购订单或。mo文件。

My question:

作为插件作者,我的工作是使用以下函数吗load_plugin_textdomain() 加载翻译后的字符串,还是这是我的插件的最终用户的工作?

The reason why I\'m asking:

如果我使用load_plugin_textdomain(), 传递第三个参数(如下面的示例所示)将加载myplugin{$locale}。来自myplugin/languages的mo。但是,插件最终用户需要提供这个myplugin{$locale}。当然,当我发布插件更新时,我的插件{$locale}。mo文件将被覆盖。

function myplugin_load_textdomain() {
  load_plugin_textdomain( \'myplugin\', false, plugin_basename( dirname( __FILE__ ) ) . \'/languages\' ); 
}
add_action( \'plugins_loaded\', \'myplugin_load_textdomain\' );
参考号:https://codex.wordpress.org/Function_Reference/load_plugin_textdomain

2 个回复
最合适的回答,由SO网友:Milo 整理而成

EDIT - apparently this is all wrong so please disregard.

您可以使用WP_LANG_DIR 常量,以首先从更新安全语言目录加载翻译,并返回到插件语言目录以获取插件提供的任何翻译。默认位置为wp-content/languages, 并且用户可以设置WP_LANG_DIR 他们自己在wp-config.php. 当您从多个源加载翻译时,将使用第一个找到的实例,因此用户翻译将始终覆盖插件提供的任何翻译,并允许用户在不翻译所有字符串的情况下进行部分翻译。

function your_plugin_load_plugin_textdomain(){

    $domain = \'your-plugin\';
    $locale = apply_filters( \'plugin_locale\', get_locale(), $domain );

    // wp-content/languages/your-plugin/your-plugin-de_DE.mo
    load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . \'/\' . $domain . \'-\' . $locale . \'.mo\' );

    // wp-content/plugins/your-plugin/languages/your-plugin-de_DE.mo
    load_plugin_textdomain( $domain, FALSE, basename( dirname( __FILE__ ) ) . \'/languages/\' );

}
add_action( \'init\', \'your_plugin_load_plugin_textdomain\' );

SO网友:cybmeta

您需要:

呼叫load_plugin_textdomain(). (See How to translate your plugin).gettext filter, 用户不应直接修改翻译文件set any string into a gettext function with a textdomain matching the slug of the plugin. You are not required to include any language file, 特别是如果您将插件提交到插件目录,因为它将在translate中导入GlotPress。wordpress。org,任何人都可以将你的插件翻译成任何语言,系统将生成一个语言包,WordPress将在插件安装时下载该语言包。当语言包升级时,管理员会注意到更新,就像插件和主题的更新一样,但与插件更新分离

  • Do not load languages files from WP_LANG_DIR directly in your plugin 就像其他答案中建议的那样,作为替代系统。它可以打破language packs from translate.wordpress.org 如果mo文件共享下的同一文件夹WP_LANG_DIR. 此外,loading multiple mo files, one overriden another, can slow down your site.