ZenOven's Archivers

From zenoven on 2013-07-30 11:54:23

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之后。

[caption id="attachment_1716" align="alignleft" width="766"]<img class="size-full wp-image-1716 " title="WordPress Action顺序" alt="WordPress Action" src="http://www.zenoven.com/wp-content/2013/07/WordPressAction.jpg" width="766" height="263" /> WordPress Action[/caption]

总结


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

查看完整版本: WordPress主题自带Widget翻译无效解决方法

From ynwi on 2013-07-30 14:08:40

你用你的新主题后,在页面下面没有WordPress了,我以为你已经不用WordPress的模板了呢。

From 自由人 on 2013-07-30 14:50:17

在右边栏上还有的,footer那里我没放了

From pretty双 on 2013-07-31 10:59:35

没看懂。。。。。

From 自由人 on 2013-07-31 21:16:36

好吧,你搞搞WordPress就知道了

Tags: widget, WordPress, 国际化, 翻译


©ZenOven