如何在更新后保留插件翻译?

时间:2011-10-08 作者:Ünsal Korkmaz

bbPress\' 语言文件夹(wp-content/plugins/bbpress/bbp-languages) 有这样的警告:

/**
 * Do not put custom translations here. They will be deleted on bbPress updates.
 *
 * Keep custom bbPress translations in /wp-content/languages/
 */
事实上,这不是一个新问题,是的,他们是对的。如果您使用非英语语言的WordPress插件,这将是一个大问题。

基本上,我翻译了bbPress并创建了.po.mo 文件。如果我把文件放在正常的wp-content/plugins/bbpress/bbp-languages 文件夹但正如上面的警告所说,他们将在更新时删除。但问题是如果我把它们放在wp-content/languages/ bbPress中建议的文件夹。

我想一定有一个钩子或什么我可以激活它,但什么是最好的解决方案呢?我只想保留插件语言文件wp-content/languages/.

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

您必须替换对BBpress语言文件的调用。

一个很好的地方是通用语言目录中的特定语言文件。对于土耳其语,它可能是一个名为tr_TR.php. 这将自动加载,并且仅当它与您博客的语言匹配时才会加载。它不会被覆盖。

BBPress不使用该功能load_plugin_textdomain, 它使用load_textdomain 相反您可以在此处找到筛选器:

$mofile = apply_filters( \'load_textdomain_mofile\', $mofile, $domain );
因此,在您的语言php文件中,只需添加一个过滤器即可更改路径:

function load_bbpress_tr_mofile( $mofile, $domain )
{
    if ( \'bbpress\' == $domain )
    {
        // replace this. :)
        return \'FULL_PATH_TO_YOUR_FILE\';
    }
    return $mofile;
}
add_filter( \'load_textdomain_mofile\', \'load_bbpress_tr_mofile\', 10, 2 );

SO网友:Odys

您需要做的是创建一个简单的插件,用于管理已安装插件的text\\u域。如果不想拥有全局解决方案,可以将代码添加到函数中。主题中的php。

其目的是指导wordpress在哪里找到翻译。在所有插件内部,这是使用类似于

load_plugin_textdomain( \'regenerate-thumbnails\', false, \'/regenerate-thumbnails/localization\' );
这是您将使用的函数。如你所见here, 最后一个参数用于设置相对于插件路径(翻译文件所在的路径)的相对值。

您可以通过为每个要更改其语言文件夹的插件放置一行代码来完成您想要的操作,如下所示。

load_plugin_textdomain(\'bbpress\', false, \'../../languages/bbpress\');
这将指示wordpress从旁边的文件夹加载自定义翻译文件plugins 文件夹名为bbpress 它的翻译文件与每个插件使用的名称完全相同。

为所有插件指示textdomains的方法应在init 阶段如下

function set_myplugins_languages() {
     .... your code here.....
}
add_action(\'init\', \'set_myplugins_languages\');
(如果你觉得这个答案有用,别忘了把它标记为答案)

SO网友:jmarceli

在我的例子中,为插件创建永久自定义翻译需要以下步骤(ACF插件翻译示例):

创建wp-content/languages/plugins/ 目录复制选定的翻译文件.po 从插件lang/ 要创建的文件夹(或任何其他具有翻译的文件夹)wp-content/languages/plugins/ (例如从lang/acf-pl_PL.powp-content/languages/plugins/acf-pl_PL.po).po 文件,然后生成.mo 并保存在wp-content/languages/plugins/ (例如。wp-content/languages/plugins/acf-pl_PL.mo)这样,即使在插件更新之后,也应该保留翻译。

我不确定这种策略是否适用于所有插件,但这绝对值得一试。

SO网友:John James Jacoby

为了实现这一点,您需要在WP\\u LANG\\u DIR中已有WordPress翻译文件,并将全局语言环境设置为该语言。如果您只包含bbPress的翻译,而不更改语言环境或显示WordPress的核心翻译文件,那么即使您加载它们,也不会翻译任何内容。

如果您希望仅覆盖bbPress的区域设置,则需要向“bbPress\\u区域设置”添加一个过滤器,该过滤器允许您覆盖bbPress mo文件。

虽然bbPress 2.0确实使用了load\\u textdomain()函数,但load\\u plugin\\u textdomain()只是load\\u textdomain()的包装器。bbPress 2.0方法更加健壮,允许全局翻译文件放置,因此在插件更新期间不会丢失它们。

结束

相关推荐

函数deactive_plugins不存在

我正在function deactivate_plugins does not exist 调用此函数时出错function deactivateSelf(){ deactivate_plugins(RSD_PLUGIN, true); //gives error: function deactivate_plugins does not exist header(\"Location: plugins.php?deactivate=true\"); //redirect