将国际化插件转化为国际化MU插件?

时间:2020-06-17 作者:DevelJoe

我在文件夹中开发了一个具有以下结构的自定义插件:

wp-content
--- plugins
------ my-plugin
--------- languages
------------ po and mo files
--------- my-plugin.php
我把它国际化了,翻译都很成功。现在,我需要使用以下结构使该插件成为必须使用的插件:

wp-content
--- mu-plugins
------ my-plugin
--------- languages
------------ po and mo files
------ my-plugin.php
(据我所知,主插件文件必须直接放在要执行的mu plugins目录中)。

由于主插件文件的位置(不在my-plugin 文件夹,但在wp-content/mu-plugins 文件夹),并且我的所有功能都正常工作,除了编程的国际化。我不明白我还缺少什么。以下是我所做的:

主插件文件中的代码,当它仍然是一个普通插件时,本地化工作正常:

// Callback loading the textdomain \'my-plugin\', defined as such in header of main plugin file
public function my_plugin_load_plugin_textdomain() {
      load_plugin_textdomain(
        \'my-plugin\',
        false,
        basename( dirname( __FILE__ ) ).\'//languages/\'
      );
}

// Hook of it
add_action(
        \'plugins_loaded\',
        array( $this, \'my_plugin_load_plugin_textdomain\' )
      );
在这里,一切都正常工作(我将整个主插件文件编码在一个类中,这就是为什么array( $this, callback ) 以上)。切换到mu插件时,我尝试了:

// Callback loading the textdomain \'my-plugin\', defined as such in header of main plugin file
public function my_plugin_load_muplugin_textdomain() {
      load_muplugin_textdomain(
        \'my-plugin\',
        \'my-plugin/languages\'
      );
}

// Hook of it
add_action(
        \'muplugins_loaded\',
        array( $this, \'my_plugin_load_muplugin_textdomain\' )
      );
即:

将回调中调用的函数从load_plugin_textdomain()load_muplugin_textdomain(), 以及如上所述的调整参数。

动作挂钩已从plugins_loadedmuplugins_loaded

已更改主插件文件头中的域路径/languages/my-muplugin/languages

然而,我的mu插件的本地化仍然不起作用。我也重新检查了区域设置,并且使用了正确的区域设置(例如,当我将wp admin中的用户语言从德语更改为英语(UK)时,我的翻译文件名为my-plugin-en_GB.mo 未应用,所有内容仍以德语显示)。

帮助

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

使用init 动作挂钩,而不是muplugins_loaded 动作钩完成了任务!但我想知道这是否是正确的做法。。?

相关推荐

Plugin Localization

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