• WordPress主题自带Widget翻译无效解决方法

    问题描述

    最近在将前些天做的zAlive主题优化,准备向WordPress官方目录提交,优化过程中不可避免的要将主题国际化(翻译,多语言)。问题出来了:语言包制作好之后,前台页面的翻译没问题,但是后台Widget中主题添加的Widget没有翻译过来。

    解决过程

    起初我只注意到Widget没有翻译过来,于是就向谷歌求救,结果一无所获,然后又翻看WordPress国际化方案,当看到I18n for widgets developed on 2.8+ 时以为Widget的翻译需要用load_plugin_textdomain这个函数,而非load_theme_textdomain。但是事实也并非如此,在我尝试了好多次之后翻译依然无效。

    毫无头绪的我着实懵了,后来在无意中点击到了菜单设置页面,发现菜单也没翻译过来,我就在想是不是所有的主题都这样,WordPress本身就这样?于是将主题切换为WordPress自带的Twenty Twelve,而Twenty Twelve中无论Widget还是菜单翻译都没问题,英文环境下Widget和菜单都是英文,中文环境下Widget和菜单都是中文。看来是我的主题哪里不对劲!

    打开Twenty Twelve的functions.php 发现load_theme_textdomain的调用在add_action( ‘after_setup_theme’, ‘twentytwelve_setup’ );中的twentytwelve_setup函数最上方。对比我的zAlive主题中的functions.php发现我用的是add_action( ‘init’, ‘zAlive_theme_setup’ ),看来问题就在这里,我又打开WordPress Action_Reference发现init在after_setup_theme之后。

    WordPress Action

    WordPress Action

    总结

    Widget以及菜单翻译问题在我将init修改为after_setup_theme后解决了,看来问题就是action的执行顺序造成的,大家以后在做主题的时候还是用after_setup_theme好了