我正在使用带有插件The Events Calendar的法语WordPress。
这个插件附带一个捆绑的法语翻译,但它有一些错误。我想修复它们但更换原始文件是一个坏主意,因为它将被下一次更新所取代。我联系了开发人员提交修复程序但可能需要一些时间。
与此同时,我想从我的模板目录加载一个副本。我已经尝试过多种方式:
load_plugin_textdomain( 'tribe-events-calendar', get_template_directory() . '/languages' );
或者
add_filter('override_load_textdomain', …)
在我的functions.php中,但它似乎不起作用。我唯一能做的就是禁用原始翻译文件的加载。
有没有办法在加载时替换插件转换文件?我也使用WPML,但在“Translate with .mo files”模式中没有“Translate with WPML”,所以我无法动态更改插件翻译。也许WPML可以加载我自己的事件日历翻译?
答案 0 :(得分:4)
您可以在functions.php主题文件中添加这几行
$text_domain = 'the-events-calendar';
$original_language_file = ABSPATH . DIRECTORY_SEPARATOR . 'wp-content' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'the-events-calendar' . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'the-events-calendar-fr_FR.mo';
$override_language_file = ABSPATH . DIRECTORY_SEPARATOR . 'wp-content' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . 'your-own-theme' . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'the-events-calendar-fr_FR.override.mo';
// Unload the translation for the text domain of the plugin
unload_textdomain($text_domain);
// Load first the override file
load_textdomain($text_domain, $override_language_file );
// Then load the original translation file
load_textdomain($text_domain, $original_language_file );
您必须将两个文件变量替换为实际的语言文件。
但是我们假设法语文件位于插件语言文件夹中,而覆盖语言文件位于语言主题文件夹中。
这个想法是:
这仅适用于已编译的mo文件。
您只能将覆盖的几个字符串添加到覆盖文件中。
答案 1 :(得分:2)
我是Transposh插件的作者,
您的回答实际上在以下四个过滤器中:
add_filter('gettext', ......, 3);
add_filter('gettext_with_context', ......, 3);
add_filter('ngettext', ......, 4);
add_filter('ngettext_with_context', ....., 4);
(当然,你需要添加函数和优先级而不是.....)
这些函数将获取字符串和域,您可以使用它们执行以下函数:
function gettext_filter($translation, $orig, $domain) {
if ($domain == 'plugin_domain') {
if ($orig == 'some text') {
return "some translation";
}
}
return $translation;
}
答案 2 :(得分:1)
此解决方案使用wordpress的自动加载程序来覆盖插件,并且不需要其他编程逻辑,而是让CMS进行覆盖。
假设您要翻译一个名为my-plugin
的插件。一个正确构建的插件将在目录wp-content/languages/plugins/
中有两个翻译的文件,分别称为my-plugin-fr_FR.po
和my-plugin-fr_FR.mo
。
如果您的插件具有此结构,则以下步骤将覆盖翻译,如果没有,您仍然可以尝试查看:
wp-content/languages/my-plugin
中。如果该目录不存在,请创建它。