自 Rank Math SEO v1.0.232 版本起,我们就发现 Rank Math SEO 插件不加载语言包的问题,即汉化包安装后并无效果。发现该问题后,第一时间向开发者反馈了,但直至 Rank Math SEO v1.0.241 仍未解决该问题。现在本文将自行修复该错误的方法分享一下,希望能帮助遇到该问题的站长。
错误的 localization_setup 函数导致的问题
public function localization_setup() {
$locale = get_user_locale();
$locale = apply_filters( 'plugin_locale', $locale, 'rank-math' ); // phpcs:ignore
unload_textdomain( 'rank-math' );
if ( false === load_textdomain( 'rank-math', WP_LANG_DIR . '/plugins/seo-by-rank-math-' . $locale . '.mo' ) ) {
load_textdomain( 'rank-math', WP_LANG_DIR . '/seo-by-rank-math/seo-by-rank-math-' . $locale . '.mo' );
}
load_plugin_textdomain( 'rank-math', false, rank_math()->plugin_dir() . 'languages/' );
}
在 rank-math.php 文件中,有如上代码(约503-512行),这段代码是一个典型的 WordPress 插件本地化(Localization)函数,用于加载插件的翻译文件(.mo
文件),以支持多语言功能。
其中 unload_textdomain( 'rank-math' );
这一行是为了确保在重新加载翻译文件时不会出现冲突或重复加载的问题。调用 WordPress 的 unload_textdomain()
函数卸载之前已加载的 rank-math
插件的翻译文件。
但现在的问题是它的这个 Localization 函数写得有问题,语言包没有通过后面钩子加载成功。
解决方法
解决该问题,只需要将 unload_textdomain( 'rank-math' );
这一行注释掉。
修改后的完整代码:
public function localization_setup() {
$locale = get_user_locale();
$locale = apply_filters( 'plugin_locale', $locale, 'rank-math' ); // phpcs:ignore
//unload_textdomain( 'rank-math' );
if ( false === load_textdomain( 'rank-math', WP_LANG_DIR . '/plugins/seo-by-rank-math-' . $locale . '.mo' ) ) {
load_textdomain( 'rank-math', WP_LANG_DIR . '/seo-by-rank-math/seo-by-rank-math-' . $locale . '.mo' );
}
load_plugin_textdomain( 'rank-math', false, rank_math()->plugin_dir() . 'languages/' );
}
提示:rank-math.php 文件位于 /wp-content/plugins/seo-by-rank-math
目录中。
修改后刷新 WordPress 后台设置页面,检查语言包是否正确加载(前提是在 /wp-content/languages/plugins 目录下上传了.mo或.php格式的语言包 )。
如果后续版本开发者修复了该问题(如新版本不用修改也能正常加载语言包),可以不再修改代码。否则版本更新后,该文件会被替换,如发现还有问题,可用上述方法继续修改。
如果 Rank Math SEO Pro 也发现同样的问题,可以在 /wp-content/plugins/seo-by-rank-math-pro/rank-math-pro.php 文件中找到 unload_textdomain( 'rank-math-pro' );
行,并注释掉。
暂无评论内容