WordPress插件翻译不起作用

时间:2018-05-09 作者:MEAT

我不知道这里出了什么问题。首先,我想分享所有可能需要的信息。

插件树:

$ tree
.
├── classes
│   ├── database
│   │   ├── plugin-auth.php
│   │   ├── plugin-user.php
│   │   └── wp-user-x.php
│   ├── main
│   │   └── plugin.php
│   └── woocommerce
│       └── plugin-order.php
├── config.php
├── plugin.php
├── languages
│   ├── plugin-shop-en_US.mo
│   ├── plugin-shop-en_US.po
│   ├── plugin-shop-pl_PL.mo
│   └── plugin-shop-pl_PL.po
└── templates
    └── register.php
plugin.php 包含文本域:plugin-shop

.po.mo 文件是用Poedit生成的

插件包含与第一个插件执行的代码类似的代码:

class Plugin
{
    const TEXT_DOMAIN = \'plugin-shop\';

    public function initHooks()
    {
        add_action(\'plugins_loaded\', array($this, \'load_textdomain\'));
    }

    public function load_textdomain() {
        load_plugin_textdomain( self::TEXT_DOMAIN, false, basename( dirname( __FILE__ ) ) . \'/languages\' ); 
    }
    ...
}
classses/woocommerce/plugin-order.php 通过示例包含

function order_status_completed()
{
     wp_mail( $to, __(\'Something bought\', $this->_textdomain ), $body, $headers );
}
Poedit成功索引了“购买的物品”

当我试图向用户发送有关此类操作的邮件时,就会出现问题。

add_action( \'woocommerce_order_status_completed\', array($this, \'order_status_completed\'), 10, 1 );
邮件已发送,但带有英文文本。

WordPress的语言环境设置为pl\\U pl-通过发送邮件主题进行测试locale() 后果为什么要发送原始文本get_user_locale() 方法如何应对

1 个回复
SO网友:cjbj

这个问题看起来有点过于复杂和本地化,无法给出明确的答案,但它看起来像是一个执行顺序问题。以下是您可以查看的一些建议:

您正在转换函数中使用变量。Do not do this.before WP gets to 这个load_textdomain 钩不太可能,但如果插件加载后立即尝试发送邮件,也不是不可能add_action 使用默认优先级。提高或降低可能会有所帮助$wp_filter 某些插件的变量正在与区域设置发生冲突

结束