设计国际化的主题: WordPress主题翻译教学
WordPress是以英文为主的网志系统,插件跟主题也是英文版为多,但随着WordPress在全球范围地流行,越来越多不同国家,说着不同语言的人加入WordPress的大家庭。会出现这一情况,其中一个原因就是WordPress本身具国际化概念的设计。WordPress本身有多国语言版本(包括简体及繁体中文),所有的插件及主题亦能轻易地被翻译成其他语言。插件及主题设计师在设计时亦应该考虑翻译的问题,本篇将讨论如何设计出适合翻译的插件或主题。
首先我们要了解WordPress所使用的翻译系统:GNU gettext。这应是目前最流行的翻译框架(Framework),尤其在开源软件的世界中,大多数支援国际化的程式都使用GNU gettext。这个系统能让程式员在编写程式时,标示出需要翻译的文字,这些文字能轻易地被提取出来,让翻译员进行翻译,翻译完成后,系统就能直接使用新语言代替程式中的文字。
要标示出需要翻译的文字,主要有以下三种方式:
- __($text) : 这句程式表示$text需要翻译,然后返回翻译结果
- _e($text) : 这句程式表示$text需要翻译,然后输出翻译结果到网页,相当于:echo __($text)
- __ngettext($single, $plural, $number) : 当$number等于1时,使用$single的翻译,当$number大于1时,使用$plural的翻译
很明显,第三项是为了解决单复数的问题。
再来我们要想的是:哪些文字需要被翻译?答案是直接从主题或插件输出到网页的文字,而不是从数据库(如文章)或后台设定(如网志名称)取得的资料。详细的情况,你只要多试几次就会明白。
现在我们来看看实际的使用情况。最简单的情况是,我们在设计主题时,会写一句,如果找不到任何文章即输出:Not Found,之类的字样,一般的做法是:
<h2>Not Found</h2>
这两个字很明显会直接输出到网页,需要翻译,由于是输出到网页,我们使用_e():
<h2><?php _e(‘Not Found’); ?></h2>
_e()是PHP程式码要用<?php 及 ?>包住。
接着我们来看第二个例子,我们常常需要在主题中显示有多少个回覆,会使用以下程式:
<?php comments_number(‘No Responses’, ‘One Response’, ‘% Responses’ );?>
程式会先判断有多少个回覆,再输出:没有回覆(No Responses),还是一个回覆(One Response)或者多个回覆(% Responses)。这里三个回覆都需要翻译,但不是直接显示到网页,而是返回给程式使用,所以我们使用__():
<?php comments_number(__( 'No Responses'), __('One Response'), __('% Responses'));?>
还有一种情况是,我们需要将整句话翻译,但句子里包含有其他参数。例如,要显示由谁谁谁写的,我们会用:
by <?php the_author(); ?>
如果这里只翻译by的话,可能有些语言的句子会不通顺,就以中文来讲,我们可能想要显示:由谁谁谁撰写,之类的,加了一些文字在the_author()后面。这个时候,我们可以用以下方法:
<?php printf(__(‘by %s’), the_author()); ?>
我们通过__(‘by %s’)标示整句需要翻译,然后用PHP的printf()将the_author()插入句子中并输出到网页。
如果你要留意上面回覆部分的程式码,你发现,其实WordPress在设计就有考虑到一些单复数的问题,所以我们很少会用到__ngettext()。
在这一篇,我们讨论了怎么设计出一个适合翻译的主题或插件,下次我会写一下怎样去实作翻译。

[...] 上一篇,我们讨论了如何让你的WordPress主题可被翻译成其他语言,今天我讲一下,具体如何去翻译WordPress主题。 [...]
看了不回不礼貌啊
[...] 设计国际化的主题: WordPress主题翻译教学 [...]
谢谢你的回复
[...] 设计国际化的主题: WordPress主题翻译教学 [...]