更新后如何保持插件翻译?


9

http://wordpress.org/extend/plugins/bbpress/ 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文件夹中,文件将起作用。但是如上警告说更新时将删除。但是问题是,如果我按照bbpress的建议将它们放在wp-content / languages /文件夹中,则翻译不起作用。

我认为必须有一个钩子或可以激活它的东西,但是什么是最好的解决方案?我只是想将插件语言文件保留在wp-content / languages /中


好..在我检查bbpress代码之后..看来我需要将文件放在/ wp-content / languages / bbpress /中,而不是直接放在/ wp-content / languages /中,现在它适用于bbpress,但问题仍然需要得到答案国际海事组织其他插件
Ünsal科尔克马兹

Answers:


3

您必须替换对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 );


语言目录(WP_LANG_DIR)的路径以及您的mo文件。
fuxia

1
好答案。插件开发人员注意:请load_plugin_textdomain()在“ init”操作期间进行调用,否则我们将无法进入“ load_textdomain_mofile”过滤器。那时已经太晚了。
盖尔特2012年

2

您要做的是创建一个简单的插件,该插件将管理已安装插件的text_domain。如果您不想使用全局解决方案,可以将代码添加到主题中的functions.php中。

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

load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' );

这就是您将要使用的功能。正如你可以看到这里,最后一个参数是用来相对于插件路径,其中翻译文件驻留设置。

您可以按照以下步骤为每个要更改其语言文件夹的插件放置一行来完成所需的操作。

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');

(如果您觉得有用,别忘了将其标记为答案)


0

为了使其正常工作,您需要已经在WP_LANG_DIR中具有WordPress翻译文件,并将全局语言环境设置为该语言。如果您仅包括bbPress的翻译而没有更改语言环境或没有WordPress的核心翻译文件,则即使您加载它们也不会翻译。

如果只想覆盖bbPress的语言环境,则需要在bbpress_locale中添加一个过滤器,以允许您覆盖bbPress mo文件。

虽然bbPress 2.0确实使用了load_textdomain()函数,但是load_plugin_textdomain()仍然只是load_textdomain()的包装。bbPress 2.0方法更强大,并且允许全局翻译文件放置,因此在插件更新期间不会丢失它们。


-1

就我而言,为插件创建永久的自定义翻译需要执行以下步骤(ACF插件翻译的示例):

  1. 创建wp-content/languages/plugins/目录
  2. .po从插件lang/文件夹(或带有翻译的任何其他文件夹)中复制选定的翻译文件以创建wp-content/languages/plugins/(例如,从lang/acf-pl_PL.powp-content/languages/plugins/acf-pl_PL.po
  3. 使用Poedit或其他用于编辑.po文件的程序自定义翻译,然后生成.mo并保存在wp-content/languages/plugins/(例如wp-content/languages/plugins/acf-pl_PL.mo)中

这样,即使在插件更新后也应保留翻译。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.