升级到WordPress 6.7,如果使用了多语言主题或插件,会发现语言加载失效。
经查是wp-includes目录中的l10n.php文件,在WordPress 6.7中发生了变化,原来加载语言代码被删除。
不过这个“即时加载机制”具体方法在官网没找到。
暂时解决办法:
对比6.6与6.7的l10n.php文件,把删除和修改的改回来,然后替换。
不修改程序文件,想让主题和插件兼容WordPress 6.7,可以参考下面的方法:
主题如原来加载语言代码类似:
load_theme_textdomain( 'begin', get_template_directory() . '/languages' );
改为:
if ( 'zh_TW' === get_locale() ) { // 繁体 load_textdomain( 'begin', get_template_directory() . '/languages/zh_TW.mo' ); } elseif ( 'en_US' === get_locale() ) { // 英文 load_textdomain( 'begin', get_template_directory() . '/languages/en_US.mo' ); } else { // 其它语言 //load_textdomain( 'begin', get_template_directory() . '/languages/default.mo' ); }
同样,插件原来加载语言的代码如果类似:
load_plugin_textdomain( 'begin', false, basename( dirname( __FILE__ ) ) . '/languages' );
可以改为:
if ( 'zh_CN' === get_locale() ) { load_textdomain( 'begin', plugin_dir_path( __FILE__ ) . 'languages/zh_CN.mo' ); } elseif ( 'en_US' === get_locale() ) { load_textdomain( 'begin', plugin_dir_path( __FILE__ ) . 'languages/en_US.mo' ); } else { // 可选择在其他语言环境下加载默认的翻译文件 // load_textdomain( 'begin', plugin_dir_path( __FILE__ ) . 'languages/default.mo' ); }
上面方法并非新的什么“即时加载机制”,这个加载语言的方法WP很早就有,依据后台的语言加载相应语言包。
WordPress这次改变语言加载方式目的应该是为了提搞网页加载速度,原来的:
load_theme_textdomain( 'begin', get_template_directory() . '/languages' );
会加载全部语言包,之后再根据当前语言加载相应翻译,如果语言包很多文件很大可能会影响加载速度。
这次改变,连著名的WOO商城插件也不能幸免,翻译失效...
大概的解决方法:
主题
function zm_theme_setup() { load_theme_textdomain( 'begin', get_template_directory() . '/languages' ); } add_action( 'after_setup_theme', 'zm_theme_setup' );
插件
function load_zm_plugin_textdomain() { load_plugin_textdomain( 'begin', false, plugin_dir_path( __FILE__ ) . 'languages' ); } add_action( 'init', 'load_zm_plugin_textdomain' );
本站文章大部分为原创,用于个人学习记录,可能对您有所帮助,仅供参考!
我的微信
微信号已复制
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!