首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将国际化插件转换为国际化的μ插件?

将国际化插件转换为国际化的μ插件?
EN

WordPress Development用户
提问于 2020-06-17 12:42:16
回答 2查看 114关注 0票数 0

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

代码语言:javascript
复制
wp-content
--- plugins
------ my-plugin
--------- languages
------------ po and mo files
--------- my-plugin.php

我把它国际化了,所有的翻译都很成功。现在,通过使用以下结构,我需要这个插件成为一个必须使用的插件:

代码语言:javascript
复制
wp-content
--- mu-plugins
------ my-plugin
--------- languages
------------ po and mo files
------ my-plugin.php

(据我所知,主插件文件必须直接放在要执行的main目录中)。

我现在更正了主插件文件中的所有路径,因为主插件文件的位置略有改变(不再在my-plugin文件夹中,而是在wp-content/mu-plugins文件夹中,如前所述),除了编程国际化之外,我的所有功能都在工作。我不明白我仍然缺少的东西。以下是我所做的:

当主插件文件仍然是一个普通插件时,在主插件文件中编写代码,本地化工作:

代码语言:javascript
复制
// 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时,我尝试了:

代码语言:javascript
复制
// 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' )
      );

即:

  1. 将回调中调用的函数从load_plugin_textdomain()更改为load_muplugin_textdomain(),并调整上述参数。
  2. 将动作钩子从plugins_loaded更改为muplugins_loaded
  3. 将主插件文件头中的域路径从/languages更改为/my-muplugin/languages

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

救命??

EN

回答 2

WordPress Development用户

回答已采纳

发布于 2020-06-17 13:05:11

使用init操作钩子而不是muplugins_loaded操作钩子完成了任务!但我想知道这样做是否合适..?

票数 0
EN

WordPress Development用户

发布于 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函数时,情况就是这样

  1. 它决定了语言环境。
  2. 然后尝试像.mo一样加载domain-locale.mo文件。
  3. 如果站点的默认语言是en_US,那么默认的.mo和.po文件应该像my-plugin-en_US.momy-plugin-en_US.po那样保存
  4. 如果找不到这一点,那么textdomain就不会加载。
票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/369211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档