Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408607
  • 博文数量: 76
  • 博客积分: 3016
  • 博客等级: 中校
  • 技术积分: 782
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-27 12:05
文章分类

全部博文(76)

文章存档

2017年(1)

2015年(1)

2009年(2)

2008年(28)

2007年(44)

我的朋友

分类: LINUX

2008-02-06 23:28:09

目前 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 文件所在的目录,执行

msginit -l zh_CN.utf8


最好选择 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) |
给主人留下些什么吧!~~

chinaunix网友2008-03-03 20:58:41

我知道。跟我一起做这个翻译的还有一个人,他就用这个东西的。不过,我习惯用 vi 的。

杜比环绕声2008-03-03 14:54:53

写的挺好,支持! 顺便提个建议,kde桌面环境里面有个很不错的po翻译工具kbabel,可以一试