I18n not working in plugin

时间:2014-03-28 作者:Dan

我肯定我犯了一个愚蠢的错误,但我一辈子都不知道这可能是什么。

最近,我将我的一个较大的插件转换为使用I18n(我第一次这样做)。由于WP能够生成完整的POT 文件通过我的插件的管理部分。以防万一,以下是我的I18n调用的一些示例:

__(\'Settings\', \'plugin-domain\')
_e(\'Select which one to use.\', \'plugin-domain\')
_n(\'The following ID is invalid: \', \'The following IDs are invalid: \', count($bad), \'plugin-domain\')
我的问题是在一切就绪的情况下,让翻译真正发生。我有plugin-domain-es_ES.[po/mo] 我的插件根目录下的语言目录中的文件define(\'WPLANG\', \'es_ES\'); 给我的wp-config.php.

在主插件文件中,我添加了以下内容来钩住文本域加载:

add_action(\'plugins_loaded\', array(\'PluginName\', \'loadTextDomain\'));
class PluginName {
    public static function loadTextDomain() {
        load_plugin_textdomain(\'plugin-domain\', false, plugin_dir_path(__FILE__) . \'languages/\');
    }
}
有了这个插件,应该在我的插件中的地方就没有翻译了。我还验证了钩子已经被钩住了。我还尝试了其他一些钩子,包括admin_initinit, 但似乎什么都不管用。

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

我遇到的问题是由于没有意识到load_plugin_textdomain 应该是relative 语言目录的路径WP_PLUGIN_DIR. 自从plugin_dir_path 返回一条绝对路径,一切都中断了。

按以下方式更改挂钩函数解决了问题:

add_action(\'plugins_loaded\', array(\'PluginName\', \'loadTextDomain\'));
class PluginName {
    public static function loadTextDomain() {
        load_plugin_textdomain(\'plugin-domain\', false, dirname(plugin_basename(__FILE__ )) . \'/languages/\');
    }
}

SO网友:Pieter Goosen

丹,你为什么不把你的职能转移到class 只需正常注册您的语言文件。我想试试这样的

function loadTextDomain() {
    load_plugin_textdomain( \'plugin-domain\', false, dirname( plugin_basename( __FILE__ ) ) . \'/languages/\' );
}

add_action( \'after_setup_theme\', \'loadTextDomain\' );
除此之外,一切看起来都很好。

结束

相关推荐

Plugin Localization

我刚刚为wp构建了我的第一个插件,即使它不是一个伟大的“代码诗意”;)它正常工作。这是一个使用GalleryView 3.0 jquery插件转换默认wp库的插件(http://spaceforaname.com/galleryview).我唯一不能做的就是本地化。此插件的本地化意味着转换管理界面,在这里可以配置jquery插件选项来更改结果库的外观。我试着关注网络上数百万的教程,在论坛上阅读了很多关于这个问题的帖子,并遵循了codex的指南。。。但仍然没有运气。这就是我所做的:每个文本行都位于gette