什么会导致GetText筛选器不适用于给定的文本域?

时间:2015-08-17 作者:user658182

在插件内部,我使用gettext过滤器更改主题的字符串,这样我就不必将模板文件复制到子主题并编辑它们。此外,这并不总是可能的,因为许多字符串都位于主题设置文件中的类定义内。这是我的代码:

function ctf_filter_gettext($translated, $original, $domain) {

    // This is an array of original strings
    // and what they should be replaced with
    $strings = array(
        \'Howdy, %1$s\' => \'Greetings, %1$s!\', //wordpress core
        \'Apply for Job\' => \'Reply by Email\', //theme specific
            // Add some more strings here
    );

    // See if the current string is in the $strings array
    // If so, replace it\'s translation
    if (isset($strings[$original])) {
        // This accomplishes the same thing as __()
        // but without running it through the filter again
        $translations = &get_translations_for_domain($domain);
        $translated = $translations->translate($strings[$original]);
    }

    return $translated;
}

add_filter(\'gettext\', \'ctf_filter_gettext\', 99, 3);
主题内部有一行,例如:

__(\'Apply for Job\',\'jobify\')

您可以在上面的代码中看到,我想将其更改为“通过电子邮件回复”

但这行不通。

代码中的另一行(你好…)是Wordpress核心的一部分,这确实有效。事实上,我可以用上述代码覆盖任何其他插件的可翻译文本或Wordpress core中的任何内容。

是什么导致此特定主题忽略我的字符串翻译?注意,无论过滤器的优先级是1、99还是9999,它仍然不起作用。

1 个回复
SO网友:Rarst

筛选gettexthorrible 用于性能。我强烈建议您尝试通过任何其他方法来实现这一目标。如果所有其他方法都无法在必要部件周围以极高的精度添加和删除过滤器。

至于它为什么失败,我有根据地猜测是——时机。在流程的早期集中和处理字符串是很常见的。例如,WP自己的帖子类型和分类标签就是这样处理的。

可能是在您添加过滤器时,主题已经生成了字符串a,并将最终副本藏在某处以供使用。

结束

相关推荐

Post types translation

我尝试翻译帖子类型名称(帖子、页面和附件)。我有以下代码:function create_skip_post_types_box () { $post_types = get_post_types(array(\'public\'=>true), \'names\' ); $opt = $this->_get_option(); $skip_types = is_array(@$opt[\'skip_post_types\