WordPress中的__()和_e()函数无法起作用的奇怪现象

 2016-11-25 20:52

最近一直研究wordpress主题制作。为了更合规,我准备使用了_e()函数来调用相关文字内容,这样,就可以兼容其他语言版本了。但我发现,我主题中使用的_e()和__()都失效了。所以在微博上发出此文求救,希望熟悉该函数的朋友能帮下。

先说说_e()和__()

这两个函数被用来识别php文件中被标示的、需要被翻译成其它语言或本地化的字符串。不同的是_e()返回的值是可显示的(echo)字符串,而__()只是简单的返回字符串。如果你需要在HTML上显示相应文字,就使用前者;不需要显示,只作为函数运用中的一部分的话就可以使用后者。

function _e( $text, $domain = 'default' ) {
	echo translate( $text, $domain );
	}
function __( $text, $domain = 'default' ) {
	return translate( $text, $domain );
	}

这两段代码在wordpress安装路径下的\wp-includes\l10n.php文件里可以查找到。

_e()和__()的使用方法

__()和_e()需要在主题包里的functions.php文件中插入一段代码,通过一个load_theme_textdomain()函数来启用具体位置的字体mo文件。我的主题名称叫paipk1,下面这段代码就是我主题里的,省略了不重要的其他部分:

function paipk1_setup() {
    load_theme_textdomain( 'paipk1' );
    //方法一:直接调用;
    load_theme_textdomain( 'paipk1', get_template_directory() . '/languages' );
    //方法二:在主题下有个languages的文件夹,调用里面的.mo文件;
    //上述两种方法我都尝试过,都无效。
}
add_action('after_setup_theme','paipk1_setup');

然后,在主题PHP文件需要的地方直接引入代码即可:

<?php _e('next','paipk1'); ?>

我使用的是wordpress的中文包,理想状态下,应该是把“next”直接翻译成中文嵌入HTML里。带实际情况上还是输出的英文“next”。

自我问题排查

首先,我的wordpress在使用其他主题(twentyfourteen)时能正常显示中文,这就说明安装wordpress默认位置的中文包“zh_CN.mo”正常。

其次,主题的paipk1_setup()函数正常,因为此函数下我做了其他相关函数的启用,都正常。所以这个应该能排除掉。

最后,在主题模板的header.php文件中,我也在<html>标签上插入相关引用,正常显示:

<html <?php language_attributes(); ?>>
<!-- 查看源代码显示如下: -->
<html lang="zh-CN">


那么,现在问题来了,这到底是什么情况让它无法正常运行出中文汉字呢??

得到的回复

倡萌:自己看下文章 https://www.wpdaxue.com/localize-wordpress-themes.html

紫铜炉:但为什么默认的主题是用的:load_theme_textdomain( ‘twentyfourteen’ )

倡萌:那是因为它是官方主题,语言包可以在后台直接进行独立安装和更新,而我们自己的主题不行。

作者头像

作者:紫铜炉

自由博主,网页设计师。我关注科技产品和个人博客发展,注重用户体验和界面优化。

 发表评论: