目前 Linux 下的本地化(L10n)已经非常方便了。得益于 gettext 的成功,上游作者可以在代码中用
_() 这个符号把需要翻译的内容括起来。比如
printf _("This is a word to be translated\n")
|
这样,在编译程序以后,用 gettext 套件中的程序就能生成合适的 pot 文件了。这个工作由上游作者完成,生成的 pot 文件其实是一个模版,形如:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Eric S. Raymond
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr "" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: fetchmail-devel@lists.berlios.de\n"
"POT-Creation-Date: 2007-03-30 09:56+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: checkalias.c:174
#, c-format
msgid "Checking if %s is really the same node as %s\n"
msgstr ""
|
上面这个 pot 文件是 fetchmail-6.3.8 的开头几行。完全大写的地方,就是要你(翻译者)去正确填写的部分。不同的国家(地区),不同的翻译者,填写的时候都要遵守一定的规则。而翻译工作,在填完了以上这些头部内容以后,就显得非常简单了。只要对应于 msgid"..." 中的内容,把它翻译成你(翻译者)自己的语言,写在 msgstr"" 中就行了。
而本文将只介绍”如何从 pot 中生成正确的 po 文件头部“。
方法其实非常简单,还是用 gettext 提供的程序。在 pot 文件所在的目录,执行
最好选择 utf8 的编码。原因
可能是因为 GB 编码的在英文系统下看来是一些乱码,而 utf8 编码在英文系统下看来是类似于 \x127\x721 之类的东西。这样的人,老外还能认出是些什么东西,呵呵。
下面要说的东西,比较重要!对于绝大多数人来讲,我想你们在装系统时,不太可能主动填上自己的真实姓名。举个例子,我参加了一个翻译计划,而这个计划所翻译的文件中,有相当一部分属于 GNU 的软件。为了避免以后出现法律问题,它要求每个翻译者都要签署一份弃权申明。如果不签的话,凡 GNU 所属软件是不会用你翻译的 po 文件的。为此,我需要签署那份协议,然后在 po 文件中写上我签署协议时所用的名字和邮件地址。而这两点,我想各位在装系统时,基本都不会注意的。
OK!说说我的方法吧。
对于名字,我的方法是,执行
sudo chfn your_login_name
|
然后,在 FULL Name 中填上你签署协议时所用的姓名。当然,如果你对系统比较熟悉的话,也可以在
/etc/passwd 中直接修改。只要改你的全名就行了。
对于邮件地址,我的作法是,改 /usr/lib/gettext/user-email 中最后一句 echo "$addr" 为 echo "your_email_address",这样就能解决以上问题了。
运行 msginit -l zh_CN.utf8 时,系统会出来提示要你选择一个邮件地址。一般情况下,只会有一个选择,就是带有 yourloginname@localhost.localdomain 的这一行。对于某些人来讲,可能还会有其它的行,不过没事的,你就选择带有上面字样的这一行就行。这样生成的 po 文件就是正确的了,不用再自己手工去改文件头了。
还有一个比较重要的事就是,对于某些语言来讲,存在单数和复数名词,比如英语。而中文对于一些词是不分单复数的。因此,你有时候可能需要改
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
为
"Plural-Forms: nplurals=1; plural=0;\n"
|
这样就是告诉软件,这个语言只有一种形式,在取翻译时,只取 msgstr[0] 中的翻译,而 msgstr[1] 中的不要取。而作为翻译者来讲,在翻译时,必须手工删除 msgstr[1] 这一行,只保留要用的 msgstr[0] 这一行。
呵呵,好了,废话太多了。还是第一次为了一个小技巧写这么多废话呢。换了我以前的个性,只会直接放出具体的操作,才不写这么多没用的东西呢!
阅读(3020) | 评论(2) | 转发(0) |