This is a translation of an original page in English.

GNU 中文翻译组工作流程(草案)

GNU 中文翻译组 (GNU Chinese Translation Team, GNU CTT) 负责 GNU 官方网站的翻译工作。

以下工作流程适用于一般网页翻译工作,有任何特殊情况或不确定,可以通过邮件列表提出。

如何选择一个要翻译的页面

根据 GNU Web 翻译手册 要求,结合 GNU CTT 的实际情况,以下内容应当优先得到翻译:

原则上不要翻译以下页面:

如何开始一个新的翻译

在开始翻译之前,有必要简单了解一下gnu.org网站背后的一些技术细节。

GNU的每个页面都是静态HTML页面,但是翻译工作不是直接编辑HTML文件。而是通过.po(Portable Object)来进行翻译的。这样,在翻译的过程中,翻译人员不必(完全)了解HTML的语法以及各种琐碎细节而是通过.po(Portable Object)来进行翻译的,从而可以更专注于翻译本身。如果你之前不了解.po文件的格式也不必担心,后面我们会有介绍。

GNU的维护者首先发布英文的原文,之后,通过定时运行的GNUN程序生成PO模板文件(文件名通常以.pot结尾)。这个HTML文件和PO模板文件都会出现在GNU网页的CVS版本库中。翻译人员根据PO模板文件,创建PO文件,并将翻译放入PO文件。定时运行的GNUN程序则会自动根据PO文件,生成对应翻译的HTML文件。

任何人都可以通过CVS来把整个页面下载到自己的计算机上。可以使用这个命令来同步下整个GNU网页以及它的版本信息:

export CVS_RSH=ssh
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/web/www co www

下载下整个网站信息后,可以简单浏览一下它的结构(如果只是像浏览一下目录结构,可以访问这个链接)。对于每个目录,都有一个名为po/的子目录,里面包含着po/目录的父目录的所有文章的对应PO文件和PO模板文件。例如,在philosophy/目录下有一篇文章,文件名是open-source-misses-the-point.html,对应的页面URL为http://www.gnu.org/philosophy/open-source-misses-the-point.html。那么,这篇文章对应的PO模板文件则存在philosophy/po/目录下,文件名为open-source-misses-the-point.pot。对应的简体中文翻译存在philosophy/po/目录下的open-source-misses-the-point.zh-cn.po文件中。

从以上描述的目录结构看,就不难理解翻译的流程了(注意:这个不是最终流程!)。首先,选定一篇gnu.org上的文章,根据URL,找到CVS版本库中对应的文件。然后,根据这个文件名,找到对应的PO模板文件。最后,从PO模板文件,翻译成最终的PO文件。

我们继续以open-source-misses-the-point.html这篇文章为例。它的URL是http://www.gnu.org/philosophy/open-source-misses-the-point.html。从这个URL,我知道它在版本库的philosophy/目录下,文件名是open-source-misses-the-point.html(如果没有用cvs下载整个代码库,可以通过浏览器浏览GNU www的版本库。这个文件就在这里)。之后,根据这个文件的文件名,和它所在的目录,我知道它的PO模板文件存在philosophy/po/open-source-misses-the-point.pot中(通过网页浏览版本库的话,是在这里)。假设我希望把这篇文章翻译为简体中文,那么,我先把这个模板文件复制成open-source-misses-the-point.zh-cn.po,同样放在philosophy/po/目录下。对open-source-misses-the-point.zh-cn.po进行编辑(即,翻译)。具体如何通过编辑PO文件来翻译,我们之后会介绍。翻译完,把这个PO文件提交到版本库中。等待一段时间,就会在philosophy/目录下,出现一个名为open-source-misses-the-point.zh-cn.html的文件。这个时候,再使用浏览器打开http://www.gnu.org/philosophy/open-source-misses-the-point.zh-cn.html,就可以看到翻译好的文章了。

以上这个流程虽然简单有效,但是有一个致命的缺陷:任何人都应该有资格贡献自己的翻译,但是并不是所有人都有资格去修改gnu.org的版本库。修改版本库,就意味着修改gnu.org上面的信息。如果谁都可以修改,gnu.org也就不复存在了。因此,只有经过GNU翻译组认证的协调员,才有权限去修改gnu.org网页的版本库。每个语言,都有对应的翻译组,而每个翻译组都会有一个或多个协调员。翻译任何通过把翻译好的PO文件交给协调员,经审核后,由协调员将PO文件提交到gnu.org网页的版本库中,从而更新网页信息

那么,如何与协调员沟通呢?每个翻译小组,都会在savannah上有一个对应的项目。从而又各有一个对应的CVS版本库。以中文翻译组为例,对应的翻译组项目在https://savannah.gnu.org/projects/www-zh-cn/上。在这个项目页面,可以找到对应CVS版本库的信息。

各个语言的翻译小组,都会有各自的邮件列表。中文翻译小组的邮件列表是www-zh-cn-translators@gnu.org。可以通过这个页面来加入邮件列表并与大家交流。

如果你希望翻译某篇文章,可以先加入中文翻译小组的邮件列表,告诉大家你希望翻译哪篇文章。我们也欢迎你在savannah上注册一个帐号,并加入中文翻译小组。之后,把想要翻译的文章的PO模板文件(.pot)翻译称PO文件。如果你已经加入中文翻译组,那么你将可以修改中文翻译组的CVS版本库,你可以提交你的翻译到版本库中的对应位置,然后在邮件列表上通知大家。如果你还没有加入中文翻译小组,可以考虑将PO文件的链接发到邮件列表上,我们会尽快审校并传到中文翻译组的版本库中。一旦文章通过审校,将会由中文翻译组的协调员将对应文件传到GNU网页的版本库中。等待大约一天的时间,你的翻译就会出现在gnu.org上。

当然,如果你熟悉savannah的环境,我们更推荐你使用以下流程来提交翻译:

  1. 确定要翻译的页面,比如foo/bar.html。
  2. 访问 GNU CTT 的 Savannah 上的 Task 列表,检查有没有人正在翻译这个页面。如果有人正在翻译或曾经翻译过,请参考已有的进度做相应的后续工作。
  3. 新建一个 Task,标题为“Translate Bar - foo/bar.zh-cn.po”。把 Status 设为“In Progress”,把 Assigned to 设为自己。
  4. 从www组的CVS中获取最新的pot文件(或zh-cn.po文件,如果存在)。使用命令cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/web/www co www/foo/po/bar.pot。
  5. 把获取的foo/po/bar.pot文件放到 GNU CTT 的 CVS 中,命名为:foo/bar.zh-cn.po。
  6. 翻译foo/bar.zh-cn.po。
  7. 把翻译完的foo/bar.zh-cn.po 提交到 GNU CTT 的 CVS 中。
  8. 更新 Savannah 上的 Task,记录必要的信息,把 Status 设为 “Read For Test”,把 Assigned to 设为审阅人或 None (如果没有审阅人)。
  9. (可选)在邮件列表中通知翻译完成,寻找审阅人或请协调人协调审阅工作。

PO文件,PO模板文件,如何编辑?

PO文件中,记录着原文和对应的翻译。PO模板文件,或者叫POT文件,则只记录着原文和格式信息。翻译的主要工作,是将一个PO模板文件里的原文,翻译好,另存为PO文件。这么说来也许太抽象,以下是一个实际的例子。

我们以Why Open Source misses the point of Free Software这篇文章为例。它的PO模板文件的开头看起来是这个样子的:

# LANGUAGE translation of http://www.gnu.org/philosophy/open-source-misses-the-point.html
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the original article.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: open-source-misses-the-point.html\n"
"POT-Creation-Date: 2013-01-20 21:55-0500\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: ENCODING"

文件开头包含的信息有文件的创建时间,翻译的语言,翻译者的姓名等等。翻译的第一个工作,就是把PO模板文件复制为PO文件,并把PO文件中开头部分填写称正确的信息。以下是一个实例的PO文件开头:

# Chinese translations for PACKAGE package
# Copyright (C) 2011 Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# monnand , 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"POT-Creation-Date: 2013-01-20 21:55-0500\n"
"PO-Revision-Date: 2012-02-15 16:54+0800\n"
"Last-Translator: Nan Deng \n"
"Language-Team: Chinese (simplified)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Outdated-Since: 2012-12-29 18:25-0500\n"

需要注意的是:文件的编码一律要采用UTF-8,而不能使用GB系列或BIG-5系列编码。

再往下看这个信息,可以看到一段一段的原文,翻译者则需要把翻译好的语句放在对应原文的下面。例如,以下是一段还没有翻译的文件:


#. type: Content of: <title>
msgid ""
"Why Open Source Misses the Point of Free Software - GNU Project - Free "
"Software Foundation (FSF)"
msgstr ""

#. type: Content of: <h2>
msgid "Why Open Source misses the point of Free Software"
msgstr ""

#. type: Content of: <p>
msgid "by <strong>Richard Stallman</strong>"
msgstr ""

翻译人员主要关注的,是msgid中的原文信息和msgstr中的翻译。即,将msgid中的原文翻译好后,放在msgstr里。例如,上文中的内容翻译好后将会是:


#. type: Content of: <title>
msgid ""
"Why Open Source Misses the Point of Free Software - GNU Project - Free "
"Software Foundation (FSF)"
msgstr "开源究竟差哪了 - GNU 工程 - 自由软件基金会(FSF)"

#. type: Content of: <h2>
msgid "Why Open Source misses the point of Free Software"
msgstr "开源究竟差哪了"

#. type: Content of: <p>
msgid "by <strong>Richard Stallman</strong>"
msgstr "<strong>Richard Stallman</strong> 著"

这说起来也许容易,但是因为PO文件涉及到很多琐碎的格式细节,我们强烈建议使用一款可以专门针对PO文件格式进行编辑的编辑器。例如,我们推荐使用GNU Emacs配合PO-mode插件来编辑PO文件。这样,可以极大地减少因PO格式问题引起的各种不必要的麻烦。

可以考虑使用

msgfmt -cv filename.zh-cn.po
命令来检查文件格式以及翻译进度。例如:

$ msgfmt -cv free-sw.zh-tw.po 
56 translated messages, 22 untranslated messages.

这就显示,有56条信息已经翻译,还有22条没有翻译。

如何进行审阅

  1. 确定一个页面进行审阅,可能是被翻译人或协调人指定的,也可以是在邮件列表中自己提出要进行审阅的,也可以自行在 Savannah 中寻找 Status 为“Read For Test”的 Task 。
  2. 把 Savannah 中的 Task 的 Assigned to 设为自己(如果原来是 None 的话)。
  3. 从 GNU CTT 的 CVS 中获取最新版本的foo/bar.zh-cn.po文件。
  4. 进行审阅。如有问题可直接与翻译人或通过邮件列表沟通。
  5. 审阅完成后,可以在*GNUN-SLOT: TRANSLATOR'S CREDITS*中加入审阅人信息,提交必要的改动。
  6. 更新 Savannah 上的 Task,记录必要的信息,把 Assigned to 设为提交人(目前为 GNU CTT 的 Co-leader: monnand)

如何进行提交

  1. 提交人收到提交请求后,从 GNU CTT 的 CVS 中获取最新的foo/bar.zh-cn.po文件。
  2. 再次做基本的审阅,确定没有明显的错误。
  3. 在 GNU CTT 的 CVS 中的所有po文件中查找指向foo/bar.html的链接,把它们更新为foo/bar.zh-cn.html。
  4. 更新www组的相关文件,确保在该页面页脚的“其它翻译”中包含“简体中文 [zh-cn]”。
  5. 在 GNU CTT 的 CVS 的根目录中运行“make report”,再次确认文件的状态。
  6. 把所有更新完的po文件提交到www组和GNU CTT的CVS。
  7. 更新 Savannah 上的 Task,记录必要的信息,把 Assigned to 设为 None,把 Status 设为 Done,把 Open/Closed 设为 Closed。

如何更新翻译

  1. 确定要更新的页面,比如foo/bar.zh-cn.html。
  2. 访问 GNU CTT 的 Savannah 上的 Task 列表,找到相应的 Task ,把 Open/Closed 设为 Open,把 Status 设为“In Progress”,把 Assigned to 设为自己。
  3. 从 GNU CTT 的 CVS 中获取最新的foo/bar.zh-cn.po。
  4. 如果 www 组相应的 foo/po/bar.pot 文件发生变化,则从 www 组的 CVS 中获取最新的 pot 文件,在 GNU CTT 的 CVS 根目录中运行“make sync”,更新 foo/bar.zh-cn.po 文件。
  5. 翻译更新foo/bar.zh-cn.po。
  6. 把更新完的foo/bar.zh-cn.po 提交到 GNU CTT 的 CVS 中。
  7. 更新 Savannah 上的 Task,记录必要的信息,把 Status 设为 “Read For Test”,把 Assigned to 设为审阅人或上一次的审阅人。

如何保证翻译质量

翻译工作本身是一个再创作的过程,很多情况下,译者可以根据自身喜好为翻译 的作品赋予不同的风格。但是在为了维护整体的统一性,需要有一些基本的约束:

[FSF logo]“Our mission is to preserve, protect and promote the freedom to use, study, copy, modify, and redistribute computer software, and to defend the rights of Free Software users.”

The Free Software Foundation is the principal organizational sponsor of the GNU Operating System. Support GNU and the FSF by buying manuals and gear, joining the FSF as an associate member, or making a donation, either directly to the FSF or via Flattr.

返回顶部

其它语言