WordPress啦!论坛's Archiver

Zack 发表于 2010-1-20 12:54

【原创】设计国际化的主题: WordPress主题翻译教学

[align=left][font=Arial, helvetica, Georgia, sans-serif][size=12px][url=http://chinese.zacklive.com/wp-content/uploads/2010/01/wordpress-translation.jpg][img=550,250]http://chinese.zacklive.com/wp-content/uploads/2010/01/wordpress-translation.jpg[/img][/url]
[b]WordPress[/b]是以英文为主的网志系统,[b]插件[/b]跟[b]主题[/b]也是英文版为多,但随着WordPress在全球范围地流行,越来越多不同国家,说着不同语言的人加入WordPress的大家庭。会出现这一情况,其中一个原因就是WordPress本身具国际化概念的设计。WordPress本身有[b]多国语言[/b]版本(包括简体及繁体中文),所有的插件及主题亦能轻易地被[b]翻译[/b]成其他语言。插件及主题设计师在设计时亦应该考虑翻译的问题,本篇将讨论如何设计出适合翻译的插件或主题。
首先我们要了解WordPress所使用的翻译系统:[b]GNU gettext[/b]。这应是目前最流行的翻译框架(Framework),尤其在开源软件的世界中,大多数支援国际化的程式都使用GNU gettext。这个系统能让程式员在编写程式时,标示出需要翻译的文字,这些文字能轻易地被提取出来,让翻译员进行翻译,翻译完成后,系统就能直接使用新语言代替程式中的文字。
要标示出需要翻译的文字,主要有以下三种方式:
[list=1][*][color=#999999]__($text)[/color]
: 这句程式表示$text需要翻译,然后[b]返回[/b]翻译结果[*][color=#999999]_e($text)[/color][color=#999999][color=#000]
: 这句程式表示$text需要翻译,然后[b]输出[/b]翻译结果到网页,相当于:[/color][color=#999999]echo __($text)[/color][/color][*][color=#999999]__ngettext($single, $plural, $number)[color=#000]
: 当$number等于1时,使用$single的翻译,当$number大于1时,使用$plural的翻译[/color][/color][/list]很明显,第三项是为了解决单复数的问题。
再来我们要想的是:[b]哪些文字需要被翻译[/b]?答案是[b]直接从主题或插件输出到网页的文字[/b],而不是从数据库(如文章)或后台设定(如网志名称)取得的资料。详细的情况,你只要多试几次就会明白。

现在我们来看看实际的使用情况。最简单的情况是,我们在设计主题时,会写一句,如果找不到任何文章即输出:Not Found,之类的字样,一般的做法是:
[indent]<h2>Not Found</h2>
[/indent]这两个字很明显会直接输出到网页,需要翻译,由于是输出到网页,我们使用_e():
[indent]<h2><?php _e(‘Not Found’); ?></h2>
[/indent]_e()是PHP程式码要用<?php 及 ?>包住。
接着我们来看第二个例子,我们常常需要在主题中显示有多少个回覆,会使用以下程式:
[indent]<?php comments_number(‘No Responses’, ‘One Response’, ‘% Responses’ );?>
[/indent]程式会先判断有多少个回覆,再输出:没有回覆(No Responses),还是一个回覆(One Response)或者多个回覆(% Responses)。这里三个回覆都需要翻译,但不是直接显示到网页,而是返回给程式使用,所以我们使用__():
[indent]<?php comments_number(__( 'No Responses'), __('One Response'), __('% Responses'));?>
[/indent]还有一种情况是,我们需要将整句话翻译,但句子里包含有其他参数。例如,要显示由谁谁谁写的,我们会用:
[indent]by <?php the_author(); ?>
[/indent]如果这里只翻译by的话,可能有些语言的句子会不通顺,就以中文来讲,我们可能想要显示:由谁谁谁撰写,之类的,加了一些文字在the_author()后面。这个时候,我们可以用以下方法:
[indent]<?php printf(__(‘by %s’), the_author()); ?>
[/indent]我们通过__(‘by %s’)标示整句需要翻译,然后用PHP的printf()将the_author()插入句子中并输出到网页。
如果你要留意上面回覆部分的程式码,你发现,其实WordPress在设计就有考虑到一些单复数的问题,所以我们很少会用到__ngettext()。
在这一篇,我们讨论了怎么设计出一个适合翻译的主题或插件,下次我会写一下怎样去实作翻译。
欢迎与我交流,我的WordPress: [url=http://cn.zacklive.com]http://cn.zacklive.com[/url]
[/size][/font][/align]

戴玟 发表于 2010-9-2 16:14

路过,先顶顶再说!!!!!!!!!!!!











[img]http://images.5d6d.net/dz7/templates/default/sigline.gif[/img]



[img]http://www.bjzs.cn/leyu/luntan.gif[/img]


[size=2]据说[/size][url=http://www.australia-edu.com/][size=2][color=black]北京经济研修学院[/color][/size][/url][size=2]里面的[/size][url=http://www.australia-edu.com/][size=2][color=black]北京经济研修学院好吗[/color][/size][/url][size=2]中的[/size][url=http://www.australia-edu.com/][size=2][color=black]北京经济研修学院地址[/color][/size][/url]
[size=2]据说[/size][url=http://www.australia-edu.com/][size=2][color=black]北京经济研修学院招生网[/color][/size][/url][size=2]里面的[/size][url=http://www.australia-edu.com/][size=2][color=black]北京经济研修学院官方网[/color][/size][/url][size=2]中的[/size][url=http://www.australia-edu.com/][size=2][color=black]中国人民大学自考部[/color][/size][/url]
[size=2]据说[/size][url=http://www.australia-edu.com/][size=2][color=black]人大自考[/color][/size][/url][size=2]里面的[/size][url=http://www.australia-edu.com/][size=2][color=black]北京经济研修学院是几本[/color][/size][/url][size=2]中的[/size][url=http://www.australia-edu.com/][size=2][color=black]中国人民大学自考[/color][/size][/url]

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.