我在文件夹中开发了一个具有以下结构的自定义插件:
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(据我所知,主插件文件必须直接放在要执行的main目录中)。
我现在更正了主插件文件中的所有路径,因为主插件文件的位置略有改变(不再在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_loaded更改为muplugins_loaded/languages更改为/my-muplugin/languages然而,我的mu插件的本地化仍然不起作用。我还重新检查了区域设置,并使用了正确的语言(例如,当我将wp中的用户语言从德语更改为英语(UK)时,我的翻译文件my-plugin-en_GB.mo没有被应用,所有内容仍然以德语出现)。
救命??
发布于 2020-06-17 13:05:11
使用init操作钩子而不是muplugins_loaded操作钩子完成了任务!但我想知道这样做是否合适..?
发布于 2022-06-21 22:07:37
确定区域设置是加载文本域的关键步骤,因为它决定应该加载哪个.mo文件。
如果我们用muplugins_loaded加载插件,那么current_user_id将是0,因此.mo将是default语言
如果我们用init加载插件,那么current_user_id将是logged_in用户id,因此.mo将是用户的语言环境语言
当我们使用load_muplugin_textdomain函数时,情况就是这样
domain-locale.mo文件。my-plugin-en_US.mo和my-plugin-en_US.po那样保存https://wordpress.stackexchange.com/questions/369211
复制相似问题