通过wordpress的gettext来修改按钮字符串

gettext 是属于i18n的范围,其中i18n表示i和n之间有18个字符,这个单词是internationalization,国际化的意思。关于wordpress中i18n是如何实现的,可以参考这篇文章

这里这是作一个简单的介绍
wordpress是支持多语言的,如果你看过wordpress的代码,你会看到类似这样的代码
_e(‘Your Ad here’) ,
__(‘Blog Options’)

这是worpress中对多语言支持的一种表现,每个这种函数中引用的字符串都会被本地化的字符串来替换,其中所有的本地化字符串定义在wp-content/languages/*.po 中,在po文件中,你可以看到字符串和本地话后的字符(也就是中文)之间的对应关系。如果拿出一部分来看,就是这样的:
#: wp-content/plugins/akismet/legacy.php:176
msgid “Search”
msgstr “搜索”

#: wp-includes/pluggable.php:1035
msgid “New comment on your post \”%s\””
msgstr “您的文章《%s》有新评论”

#: wp-includes/pluggable.php:1037
#: wp-includes/pluggable.php:1150
msgid “Author : %1$s (IP: %2$s , %3$s)”
msgstr “作者:%1$s(IP:%2$s,主机名:%3$s)”

在wrodpress的源码中,__(‘Search’) 最终将会被替换成”搜索” . 其他的复杂替换也类似。
因此,如果你想让你的搜索按钮显示为其他的字符串,最直接的方法就是修改这个.po 文件。当然还有其他的方法,比如添加gettext filter.
其中,每次通过msgid找到msgstr的过程都会调用gettext filter。在不修改.po文件的情况下,根据传入的msgid,选择一个string传回去就可以实现同样的目标。
比如我想把”搜索” 改为“站内搜索”,那么这段代码为:


function  my_search_button($str)

{

    if ($str == “搜索”) {

           return “站内搜索” ;

    }else {

        return $str;

    }

}
add_filter(‘gettext’,my_search_button );

gettext这个filter一共带有三个参数,分别是(翻译过的字串,翻译前的字串,textdomain) , 在上面的例子中,我只用了第一个参数,即翻译以后的字串,因为我知道这个字串是什么,通常好一点的做法应该是去翻以前的字串,这样会比较稳妥。



Wordpress一览无余,源码面前没有秘密,wordpress的函数调用库,展示wordpress页面打开过程中十几万个函数调用,学习WP开发的绝佳资源。点击这里进入

本文地址: http://www.bagualu.net/wordpress/archives/1597 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注