Gallery:本地化

来自站长百科
跳转至: 导航、​ 搜索

Gallery2的本地化[ ]

综述[ ]

Gallery是国际化的。不对特定语言文本消息的包含, 取而代之地,它使用特殊的方法追踪文本 以进行抽取并翻译成其他语言。用户则会看见 文本被翻译成他们使用的语言版本。

为了能够让用户看到Gallery文本的本地化版本, 就需要先将这些Gallery要显示的文本消息进行 翻译。此过程就被称为"本地化"。

这里我们尝试说明一下如何创建并维护G2中本地化 文件的内容。这并不是特别困难的任务, 但要求无论何时基础内容有改变,我们都要保证 各类文件的更新度。我们挺幸运的,因为有这样的工具能 协助我们完成此类操作过程。

要求[ ]

为了能够有效率地进行,你需要在计算机上 安装一些工具。我仅在FreeBSD box中做了测试,但我想如果用在Linux,Solaris或其他Unix类系统 上也不会太麻烦。在Windows上可能会有些难度, 但也是有可能实现的。 以下为必须安装,并在你的路径中:

gettext
http://www.gnu.org/software/gettext/
gmake (或make)
http://www.gnu.org/software/make/make.html
php二进制
http://php.net
perl
http://perl.com

:如果你使用FreeBSD,并希望能取代make而使用gmake,因为FreeBSD的默认不与GNU兼容。

你还需要用当前G2文件创建最新的翻译。就目前的SVN或nightly快照版的运行情况都不错。最新的G2开发者版本也能运行,但某些翻译的字串可能有些过时了。

本地化的新建[ ]

浏览一下Gallery就能发现不少名为"po"的目录。("po"是一gettext术语,即"可移植对象(portable object)")。以下为找到它们的一个方法:

find . -type d -name po			<-- 输入这个

./themes/matrix/po	          	<-- 会看到这个
./lib/tools/po
./modules/core/po
./modules/comment/po
./modules/netpbm/po

** 忽略"lib/tools/po"目录。

这些目录还有翻译源文件。你要 使用合适的语言代码来新建文件,接着在它们之中 添入经过翻译的文本。首先要做的就是从 下面的两个表格中识别出正确的代码:

语言代码
http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC221
(or http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt)
国家代码
http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC222
(or http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html)

在大多数情况下,你只需要语言代码即可,如德语就是"de"。要为多个国家中提供特定国家语言的翻译,你可以使用这样的代码格式,xx_XX,例如"pt_BR"表示葡萄牙语/巴西。如果你确定该用哪一个,包括语言和国家。如果你发现已有你使用语言的翻译的话,请接着看 本地化的维护

一旦选好了代码,就需要为你的代码新建一个.po 文件。假定你选择是的"de"。那么对各po目录, 你需要做的是:

make de.po

这将找到该本地化标记的所有文本(tpl文件中的{g->text},php代码中的translate()或i18n()),并创建一个即将进行翻译的po文件。

有关文本编辑器。

我比较喜欢用XEmacs,因此我会 在下面的例子中拿XEmacs做例子。如果你有其他编辑器 的使用指导,请分享一下。XEmacs的主要模式被称为"po-模式",如果你安装了它,在编辑.po文件时就会 自动转入。我在这里不准备这么做,但 你可以尝试一下。

现在我们来编辑de.po。在其顶部应有Gallery的证书。你需要对以下值做自定义:

Last-Translator
将你的名字及email以此格式输入:"FirstName LastName <email@address>"
Language-Team
输入语言及-翻译邮件列表,如"German <gallery-translations@lists.sourceforge.net>"
Content-Type
将此设置给"Content-Type:text/plain; charset=UTF-8\n"
我们希望你使用UTF-8字符集。因为它允许我们在同一页面上对多个语言进行渲染,这对某一语言站点页面上其他语言的用户评论是有好处的。

这里有modules/core/po/de.po的完整的header样例。注意编写者是如何维护前任翻译者名单的。

# 前任翻译者(迄今所知,如有脱漏,请在此添加):
# - Jens Tkotz <jens@peino.de>
# - Ernesto Baschny <ernst@baschny.de>
...
#
msgid ""
msgstr ""
"Project-Id-Version: Gallery: Core 1.0.32\n"
"POT-Creation-Date: 2003-02-11 03:09-0800\n"
"PO-Revision-Date: 2006-03-05 02:25+0000\n"
"Last-Translator: Frederik Kunz <frederik.kunz@web.de>\n"
"Language-Team: German <gallery-devel@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

如果你的语言中不包含复数词用法,如汉语或土耳其语,就得修改以下语句:

"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -> Change to "Plural-Forms: nplurals=1; plural=0;\n".

这样,你只需翻译msgstr[0]并注释掉或移除msgstr [1].

接着来看看Gallery证书下的语句行:

#, fuzzy
msgid ""
msgstr ""

模糊的关键词告知你区块的翻译 不完整。但一旦更新了administration entry,就 可以移除"#, fuzzy"这一行以允许稍后翻译的 编译。

接下来你会看到一系列区块:

#, c-format		(<-- 在某些语句行中仅能看到这个)
msgid "a message in english, with %d or %s tags in it"
msgstr ""

你需要将英语消息的翻译置入 msgstr区块中,用引号括起来,例如:

#, c-format
msgid "a message in english, with %d or %s tags in it"
msgstr "eine Anzeige auf englisch, mit %d oder %s etikettiert in ihr"

某些msgid值含有有助于进行翻译的提示信息:

#. HINT: Button label for Bold
msgid "B"
msgstr "F"

注意提示内容不应翻译或包括在msgstr文本中。你可以使用翻译追踪器(Translations Tracker)为特殊字串请求额外的提示文本。指定模块/外观主题以及msgid。注意strings.raw文件列出了用到msgid的文件。

在编辑这些消息之前,你确实应当将编辑器设为UTF-8模式, 这样编辑器才能使用正确的字符集。 如果你由于某种原因无法在UTF-8模式中进行编辑, 请考虑使用GNU的"recode"程序,在提交翻译内容给我们之前, 将其转为UTF-8(或者直接发给我们也许,我们会进行重新编码)。

如果你使用XEmacs的MULE(即多语言支持(MULtilanguagE)),你可以将一下内容添加到 ~/.xemacs/init.el中去

; Enable Unicode support (via Mule-UCS)
;
(require 'un-define)
(set-coding-priority-list '(utf-8))
(set-coding-category-system 'utf-8 'utf-8)

当你编辑UTF-8的文件时,会有一些"u" 出现在屏幕底部状态条左侧。使用现有的 .po文件来看一看。

在进行一些翻译之后,来看看效果。运行:

make install PO=de

它会将你的.po文件编译到一个.mo文件中,并将其安装到合适的位置。在修改.po文件之后,对各目录都要重复此步骤。如果你在创建locale目录时发生错误,请在运行make之前建立目录结构(如:modules/mymodule/locale/de/LC_MESSAGES)。

最后,你需要编辑modules/core/classes/GalleryTranslator.class,并在函数getLanguageData中加入如下语句:

/* German */
$this->_supportedLanguages['de']['DE']['description'] = 'Deutsch';
$defaultCountry['de'] = 'DE';

批注应为该语言的英语说法;语言 '描述'则应是该语言的本土说法。

现在登入G2,在用户偏好(你可能需要 通过站点管理对用户进行编辑)中,你应能在下拉列表中看到 German。而如果你选择了它,并以刚才那个用户的身份登入的话, 就能看到消息被翻译为该语言了。你还可以将语言选择器区块 添加到站点中,使用外观主题设定就可以做到。

注: 如果语言修改没有起效,请回顾一下语言设定的优先级(会话语言(Session language) > 用户偏好(user preferences) > 站点范围的默认语言(site wide default language))。如果有疑虑的话,可以使用语言区块或在用户偏好中反复尝试。

本地化的提交[ ]

现在本地化就应创建号了,你需要将其 打包并发送给我们,这样我们就能将其添入存储库。 最好的打包方式如下:

cd gallery2
zip de.zip `find . -name de.po`

or:

cd gallery2
tar czf nl.tar.gz `find . -name nl.po`

你翻译过的文件会被做成zipfile或tarball。当然使用你自己的语言代码取代上面的de或nl。接着浏览SourceForge 的Gallery项目页面上的翻译追踪器并点击"Submit New"按钮。将你的翻译放入"Gallery 2"组中,并将文件加入附件上传。如果你的翻译 过了几天还没有被采用的话,请上IRC(参见帮助部分)告知我们。

本地化的维护[ ]

cd po
make de.po	(using German as an example)

这会从你所在的模块中提取出所有消息 并更新.po文件。浏览.po文件,找到所有具有 空msgstr或被标记为"模糊(fuzzy)"的区块并更新它们。在它们 被修复之后,移除fuzzy标识。你看到的标识会是如下的 样子:

#, fuzzy
#~ msgid "User"
#~ msgstr "Gebruikersnaam"

"#, fuzzy"表示它是模糊的,但"#~"表明该 字串不存在于G2中(我们可能将其删除或修改了 )。你可以删除这些内容.

你应当快速地做一次gettext提供的检查,以验证.po文件:

msgfmt -v -c --stat de.po

当一切都设置好后,运行:

make install PO=de

翻译文件被PHP缓存(这就是其快速的原因) 因此在重启web服务器之前,可能无法看到所作的修改。这是 有点麻烦,但我还没有想出好的解决办法。

参见[[#本地化的新建]|本地化的新建]]部分的测试信息,并向我们提交新文件。

何处寻求帮助?[ ]

如果你需要帮助,有三个地方可以求助:

The Gallery translations forums
http://gallery.menalto.com/forum/74
The gallery-translations mailing list
http://codex.gallery2.org/index.php/Mailing_Lists
The Gallery IRC channel
#gallery on irc://chat.freenode.net

翻译列表[ ]

所有可用的Gallery2翻译,都在此以字母表顺序列出了,带有维护者/作者名单。某些翻译100%保持更新并且完成,某些则仅完成了2%或过期了。参见 本地化报告。如果你有G2的开发者整合包,就可以运行http://www.example.com/gallery/lib/tools/reports/localization.php来查看所有已安装翻译的状态。