|
|
|
如果您希望加入 Open Source Software Internationalization 简体中文化计划,请阅读下面的说明。在您阅读本文档之前, 请您谨记:几乎没有人能一次记住这么多内容。在翻译工作中如果遇到问题,请首先到这里寻找答案。如果您看不懂,或者没有 找到您满意的答案,请在邮件列表里提问,那里有很多高手,相信总能令您满意。不过请记住,您应该首先在文档里寻找答案。 1.加入我们您需要首先加入我们。 2.准备工作 如果条件允许,您最好有个 GNU/Linux,这样可以一边翻译一边测试您正在翻译的程序。如果您在 Windows 下工作,可以去 RedHat 的网站下载并安装 CygWin 这个 Linux 仿真环境。强烈推荐使用 Windows 2000,不仅体积相对小巧,打补丁后稳定性和兼容性都很好。目前 RedHat 已经完整地移植了几乎整个 Linux 到 Windows 下,而且更新非常快,请看屏幕截图。GNOME/KDE 也移植到了 CygWin 环境下,称为 Cygnome 和 KDE on Cygwin, 不过它们安装后运行速度很慢(因为 Windows 本身已经消耗了过多的资源),最新版本也难以快速移植过来,而且在其上构建中文环境也绝非易事。 建议完全安装 CygWin,大约需要 730 多兆空间。如果采用默认安装,至少还要指定安装 devel 分支下的 gettext 软件包,它是测试翻译必需的软件包。有时安装程序会出现问题,报告找不到 cygwin1.dll ,您可以在这里下载 1.5.10-3 版,然后拷贝到系统搜索路径(如:C:\WINNT\system32 或 C:\cygwin\bin\)下,重新运行一遍安装程序即可。其实,它位于下载的压缩包 release\cygwin\cygwin-1.5.10-3.tar.bz2 里。 在 Linux 下您要用到 kwrite 和 gedit 文本编辑器,它们都有良好的 UTF-8 支持,而且整个 PO 文件可以一目了然,还可以使用 VIM 或 EMACS (后者目前仅支持 gb2312 编码)文本编辑器。 KBabel、gtranslator、以及 poEdit 是专用翻译工具,推荐使用。但是请注意,如果 gettext 软件升级伴随 PO 文件格式的变化, 这些专用翻译工具可能无法兼容最新的 PO 文件格式,所以使用它们要慎重,最好使用支持 UTF-8 编码的纯文本编辑器。 在 Windows 下,推荐使用 EmEditor,还可以 使用 EditPlus。不建议使用 UltraEdit 或 Notepad。由于配置较复杂,这里提供它的 po/pot 设置文件,下载后双击将键值导入注册表,即可得到符合要求的配置,请看屏幕截图。 另外,还有可能用到十六进制编辑器,如 WinHex,因为有时 Windows 下的文本编辑器会在 UTF-8 编码的文件前方添加三个字节(即所谓 Unicode 署名),以标明其为 UTF-8 编码。这种文件是无法通过编译的,必须用十六进制编辑器去除这三个字节! 注意:在 使用 EmEditor 保存文件为 UTF-8 编码的时候(文件->另存为),请取消“加入 Unicode 署名”前面的对勾,以避免发生上述情况! 在 Linux 下您可能需要英汉词典 IBMDICT 或 StarDict 及其词典,而在 Windows 下推荐使用金山词霸。 3.认领任务目前,我们的工作主要集中在 KDE 和 GNOME 的界面翻译上。 KDE 的进度页面 以及 GNOME 的进度页面 中是我们目前的工作进度(注意:请不要直接从这两个页面 下载文件进行翻译)。首先您必须登陆到这里:http://i18n.ricetons.com 如果是第一次登陆,您需要首先注册。登陆后,点击左侧的“Translation Statistics”,您可以从 KDE 或 GNOME 的进度页面中挑选还没有人负责的文件(状态为“A”),点击后弹出一个信息页面,点击下方的“Occupy”链接,从弹出的“占据”操作页面 选择“With a prefilled PO Head”或者右键点击“Orginal File”选择“另存为”,下载它们的翻译文件(*.po)或翻译模版文件(*.pot)进行翻译。“With a prefilled PO Head”表示下载的文件预先填充好了 PO 头部信息,“Orginal File”则是原始文件。 此时在“Translation Pool”以及“Task”页面就可以找到您占据的文件。 通常进度页面中相应的翻译文件(*.po)都是经过预填充的,也就是说已经翻译了一部分,可以直接拿来接着翻译。对于较大或从未有人翻译过的文件, 您可以在开始工作之前先在邮件列表里声明一下,会有网友给您提供一个基于辞典的预翻译的文件, 可以减少重复劳动。当然,所有预翻译的内容您都需要仔细校对。对于 GNU 软件的翻译,也请您在开始工作之前先在邮件列表里声明一下,邮件的标题可以是“申请 xxx.pot”、“占据 xxx.pot”、“Occupy xxx.po”或者“正在更新 xxx.po”。 这样做是为了避免和其他人冲突,因为我们的状态页并不包含 GNU 软件,无法显示到底谁正在翻译某个文件。 如果您希望申请其它工作,可以跟王剑(我们的网络协调员) 联系。 请不要一次占据多个文件,以免影响整体进度。除非您确信您在短期内能完成所有工作。一般的原则是: 认领一个-->完成一个-->提交一个。 KDE 下的 kdeextragear 和 koffice 组的软件是单独发布的,各自有自己的发布时间表。请将 kdenonbeta 组的翻译放在最后进行,这个包里的软件都处于早期开发阶段,通常不会被加入最终的发行包里,请尽量优先翻译其他内容! GNOME 下的 extras、fifth-toe、和 office 组的软件是单独发布的,各自有自己的发布时间表。desktop、developer-libs 和 proposed 三个组是由官方统一发布的软件包集合,最为重要,应优先翻译。 4.如何翻译下载了 .pot 文件以后,请把它重命名为 .po 文件。第一步是修改文件头, 如果您不知道该怎么改,可以参考其它已翻译的 po 文件。这是一个例子(绿色的是修改的部分):
修改完文件头以后接着就是实质性的翻译了,po 文件的格式是一句 msgid 跟着一句 msgstr,以“#”开头的行是注释。您需要做的是把 msgid 中的英文翻译成中文写到 msgstr 中。例如:
测试您的翻译的方法是:首先用 msgfmt 命令把 po 文件编译成 mo 文件,然后把 mo 文件复制到正确的 locale 目录下,重新启动程序即可。locale 目录一般是: /usr/share/locale/zh_CN/LC_MESSAGES/ 或者 /usr/locale/share/locale/zh_CN/LC_MESSAGES/ 如果两者都不行,请在您软件的安装路径下找一找有没有相似的目录。通常一个 po 文件只要通过编译,就没有语法错误了。另外,可以用 msgfmt -cvv file.po 命令检查 po 文件是否有格式错误;用 msgfmt --statistics file.po 命令查看翻译统计信息。举个例子(输入文件为 gimp.po,输出文件为 gimp.mo):
如果您的翻译没有正常地在程序中显示出来,可能是由于编码原因。请试试把您的 po 文件中文件头的 charset 改为 UTF-8,再用下面提到的 iconv 或 msgconv 命令把文件转换成 UTF-8 编码,然后重新生成 mo 文件。 6.提交任务文件完成翻译后,您需要再次登陆这里:http://i18n.ricetons.com。 提交文件有三种方法:
对于不能自己提交的 GNU 软件翻译文件,可以通过“Submit a File Not IN KDE/GNOME”链接提交,等待校对人员检查,然后由网络协调员提交到相应的 CVS 服务器上,请耐心等待。对于其他不属于 KDE/GNOME/GNU 工程的软件翻译文件, 也可以通过这种方法提交,然后将其 PO 文件在“Translation Pool”里的下载链接邮寄给软件的开发者。GNU 软件的提交方法参见这里。 翻译后的 PO 文件一旦被提交到 CVS 服务器上,那么它们将从“Task”或“Translation Pool”中消失。以后如果需要更新您所负责的翻译,请登陆后到进度页面中重新 下载翻译文件(*.po),步骤同前,而不要在您旧的翻译文件基础上继续修改。因为进度页面中的文件才是 CVS 服务器中最新的待翻译内容。如果翻译后的 PO 文件尚未被提交到 CVS 服务器上, 您应该可以按照上述方法,在“Task”或“Translation Pool”中找到您要重新翻译的文件,翻译后再按照上述方法选择“[Submit/Resubmit]”,重新提交一遍。因为“Translation Pool”中 的 PO 文件会与最新的 POT 文件动态合并,而“Task”中的文件实际就是“Translation Pool”中的文件。 7.注意事项目前的翻译文件一般使用 UTF-8 编码。如果您的文本编辑器不支持 UTF-8,那么您需要在编辑文件之前和之后转换编码。在 Linux 下您可以用以下命令把文件从 UTF-8 转换成 GB2312。转换之后请务必将文件头部的 charset=utf-8 改为 charset=gb2312。在 Windows 下也有相应的软件,不过没有必要使用它,可以直接使用支持 UTF-8 编码的编辑器,或者干脆把 GB2312 编码的 po 文件直接提交到 http://i18n.ricetons.com 或邮件列表,由校对人员去处理。 转换 utf-8 --> gb2312
转换 gb2312 --> utf-8
如果您安装了 gettext 0.11.x 或者更新的版本,还可用“msgconv -t 目标编码 源文件 -o 目标文件”实现转换。 msgconv 会自动修改文件头部,避免错误。
注意:如果您的 gettext 软件包版本号小于 0.10.40,很多工具它都没有,更严重的是它不能正确处理 po/pot 文件头部的信息!那么,您需要到这里下载最新版,编译安装: ftp://ftp.gnu.org/gnu/gettext/ 也可在这里下载 gettext 0.12.1 和 libiconv 1.9.1 的 windows 版,后者为必需的依赖包。 判断版别,请输入:
(2) 关于标点的使用问题。 一般的原则是:除了小括号、省略号和破折号保留不变以外,都应该使用中文(全角)标点符号。英文标点符号后方 常常跟随有一个半角空格,请在翻译成中文标点符号时将其去除。
(3) 关于菜单项中快捷字符的翻译问题。 快捷字符一律使用大写字母,用小括号括起来放到菜单文字的后面(如果有标点符号则放在标点符号的前面)。在 KDE 中,菜单快捷字符的前缀是“&”; 在 GNOME 中,菜单快捷字符的前缀是“_”。这里举几个例子:
(4) 关于翻译中参数的位置问题。 有时候原来的参数顺序不符合中文的语法,一方面, 翻译可以通过调整副词、语序等手法来符合中文习惯,另外一方面,在必要的情况下,需要改变参数的位置,例如在 KDE 中:
如果是在 GNOME 中则应该这样写:
也即当要调整参数在译文中的位置时,用 1$、2$、3$ 等符号标明参数在原文里出现的位置。 (5) 关于空格问题。 为了美观,通常建议在中文与英文、中文与阿拉伯数字、英文与阿拉伯数字之间加入一个半角空格。例如:
但对于小括号和全角双引号,其两侧不加空格。
包含 XML/HTML 标签的条目,如要在标签中的内容两侧添加空格,请把空格置于标签外侧,否则空格可能显示不出来。
(6) 关于注释语句和署名问题。 对于 msgid 中的注释语句(通常以 _: 开头),请不要翻译。它是给译者的一些说明,帮助您理解原文,以便给出正确的译文。例如:
(7) 关于换行问题。 对于很长的译文,就涉及到了换行问题。多数情况下没有限制,因为不影响最终的显示效果,只要阅读起来方便就行。下面几种格式都是正确的:
但是,如果 msgid 前方有 #, c-format 标记,或者原文中有强迫换行标记 \n ,那就要手工调整译文的换行,以便能最终正确地显示在程序界面上。原则是译文长度不大于原文长度,否则可能译文显示超出原有区域,或者译文后面部分被截 去,很难看。对于含有 HTML 标记的长译文还需要在浏览器中预览显示效果(如果您了解 HTML 基本语法的话),酌情调整行宽。例如:
(8) 关于模糊译文问题。 如果看到 #, fuzzy 标记,则表示本段译文是由工具软件(通常是 msgmerge 命令)猜测翻译得到的。有时比较准确,有时却谬之千里。 另一种情况是译者或校对人员主动加上去的,因为他们对该条译文没有把握。因此请对其译文进行修订,然后去除 #, fuzzy 标记, 否则本段译文将不能显示在程序界面上。原则上,所有既往给出的译文,在翻译的时候都应该校对一遍。例如:
正确的译文为:
(9) 关于已淘汰译文的问题。 老版本的程序中总有一些信息会在新版本中淘汰掉,这些译文都以 #~ 开头,并被置于整个 po 文件的后方,可以直接删除。例如:
此问题主要见于 GNU 和部分使用 GTK 开发的软件。由于某些语言的单复数变化极为复杂,为了应对这种局面,符合 i18n (internationalization) 国际化标准,gettext 技术通过读取 PO 文件头部如下一行中的信息来正确显示不同 单复数的译文:
INTEGER 表示单复数变化形式的数量,他是一个正整数。中、日、韩文里没有单复数区分,也就是说单复数变化形式只有一种, 所以 nplurals=1,英文单复数有两种表现形式,所以 nplurals=2; EXPRESSION 表示对第几种单复数变化取相应的第几种译文,他是一个标准的 C 语言表达式。如果有四种单复数变化,这个 表达式的值将包括 0、1、2、3,分别对应于译文 msgstr[0]、msgstr[1]、msgstr[2]、msgstr[3]。所以,有时这个表达式相当复杂。 在汉语里,只需 plural=0,译文只要保留 msgstr[0] 即可。 正确的设置:
原文例如:
正确的译文为:
gettext 是一个国际化的框架工具,面对的是数百种语言,它必须是一个通用的、
广谱适用的工具。有些语言单复数变化极其复杂,如波兰语,有些语言的变格非常复杂,
如俄文,有些语言的人称代词非常复杂,如西班牙语,还有阴阳性、时态等等问题。
gettext 对单复数的支持是最完善的。由于中文没有这么复杂,所以国人体验不到这么做的价值,
进而国人写出来的软件在别的国家的翻译者来看,可能存在严重的语言歧视。
因为他的消息串很可能根本没有体现出这些问题,所以别人可能面临很多种翻译的可能性。
要使您的软件符合国际化规范,请阅读 gettext 的官方文档。
这已经超出了本文讨论的范围,这里不予详述。
(11) 关于时间译法的问题。 国标对日期和时间的规定十分复杂,但它完全等效于 ISO 8601-1988《数据元和交换格式 信息交换日期和时间表示法》。 因为只涉及标准信息交换范畴,所以并未对中文写法给出任何具体规范! 参见:国标 GB/T 7408-94《数据元和交换格式 信息交换日期和时间表示法》 1994-12-06 发布,1995-08-01 实施,国家技术监督局发布 (12) 其他问题。
如果遇到一些您不知道该如何翻译的词语,您可以:
对于一些常见的词语,为了跟其它人的翻译用语基本一致,也应该先参考在线字典。不过目前我们在统一翻译用语方面还做得很不够。:-( 对于 po 文件中一些以前翻译过的或者别人翻译过的翻译项,可以利用程序将其自动填充进模板文件(*.pot),减轻您的工作。 GNU gettext 软件包就是这样的工具,我们已经完成了它的翻译工作,不过暂时还要请您自己看帮助。它们几乎都是以 msg 开头的命令,在 bash 中输入 msg 然后连按两次 Tab 键就可以看到它们。输入命令并使用 --help 选项就可以看到帮助了。我们主页上也有一个自动翻译程序,完成类似的功能,您可以试试,不过它的功能很弱。 最后更新时间 2004-06-08 00:40 |
|