汉化手记

我打算汉化drupal的网店购物车模块Ubercart,版本为drupal5.首先,我先通读了drupal手册的译者指南部分.对汉化大致有了一个印象.在以前的工作中,很少与中文打交道,唯一的一次是给香港的客户做项目,遇到过汉化,不过那时仅仅用到了drupal5内核的汉化包,直接导入就可以了.现在想要做的是汉化drupal第3方模块.

除了阅读译者指南以外,我还到drupal中国论坛的汉化栏目里面转过,里面重要的文章差不多都读了个遍.从昨天开始,汉化Ubercart模块的子模块uc_store.由于是5.x,所以翻译包所在的目录为modules\ubercart\uc_store\po,目录名为po,而在drupal6.x中,这个目录名改为了translations. uc_store\po目录下面有两个文件,一个是uc_store.pot,一个是es.po,后者为另一语言的翻译包.我要使用的就是uc_store.pot.为了怕出乱子,我先给uc_store.pot做了个备份.

汉化需要一个专门用来编辑的编辑器,我用的是POedit,这个可以在windows下面使用,我的操作系统为vista,所以就选用了POedit,版本为1.4.2.使用Poedit打开uc_store.pot, 默认是po文件,不过也可以打开pot文件。然后就开始逐条翻译,这个文件还挺大的,翻译了3个多小时,才基本搞定。在开始的时候,不知道怎么操作,乱点了一通,学会了怎么使用Poedit,不过里面报了一个错误,到现在还没有解决,我当时也没有准备解决它,错误信息如下:

13:21:35: F:\xampp\htdocs\ubercart-5\sites\all\modules\ubercart\uc_store\po\zh-hans.po:8: invalid nplurals value

13:21:35: F:\xampp\htdocs\ubercart-5\sites\all\modules\ubercart\uc_store\po\zh-hans.po:8: field `Language-Team' still has initial default value

13:21:35: msgfmt: found 2 fatal errors

 

“invalid nplurals value”非法的复数值,这个我见过,http://drupal.org/node/17564一文提到过这个问题,我看编辑器,可以工作,就继续翻译了。第一次保存后,除了报错以外,uc_store\po目录下面多出了一个uc_store.mo文件,随着编辑的进行,以及不断的点击保存按钮,uc_store.mo和uc_store.pot文件不断增大。直到翻译结束。我将mo这个后缀名改为po,然后用Zend studio打开,发现里面都是乱码。把它重命名后,备份有保存了,我又把uc_store.pot重命名为了po文件,打开以后,里面带有我翻译的东西。从中摘录了部分内容:

# $Id: uc_store.pot,v 1.6.2.1 2008/01/07 20:56:46 rszrama Exp $

#

# LANGUAGE translation of Drupal (general)

# Copyright YEAR NAME <EMAIL@ADDRESS>

# Generated from file: n/a

#

msgid ""

msgstr ""

"Project-Id-Version: PROJECT VERSION\n"

"POT-Creation-Date: 2008-01-04 16:03-0500\n"

"PO-Revision-Date: 2008-10-05 13:21+0800\n"

"Last-Translator: zhupou.cn<g089h515r806 at gmail.com>\n"

"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"

"MIME-Version: 1.0\n"

"Content-Type: text/plain; charset=utf-8\n"

"Content-Transfer-Encoding: 8bit\n"

"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

 

#: uc_store.module:60

msgid "Store administration"

msgstr "网店管理"

 

#: uc_store.module:61

msgid "Administer store settings, products, orders, and more."

msgstr "管理网店设置,包括产品,订单等等"

 

#: uc_store.module:68

msgid "Customers"

msgstr "客户"

。。。。。。

上面的那一大段,都是一些自动生成的信息,算是元数据吧,最上面是注释,下面的就是英汉对照的译文了。Msgid后面跟的是英文字符串,msgstr后面跟的是简体中文字符串。

翻译的过程就是体力活,多亏了google的帮忙,很多都是直接从那里拷贝的。再往后就是文件命名了,我看看es.po的命名方式是采用的语言代码+后缀po的方式,所以我觉得uc_store.po这个名字不地道,然后查出来简体汉字的代码为zh-Hans,就将文件名改为了zh-Hans.po,又参考了drupal中国里面的命名,将其改名为zh-hans.po,把原来的uc_store.pot的备份还原成uc_store.pot文件,又把mo文件移了出去,这样po文件夹下面与原来相比,仅仅多了一个zh-hans.po文件。

启用本地化模块(Locale),在这个模块的管理界面admin/settings/locale上,点击import,admin/settings/locale/language/import,在这个导入页面,我先把drupal5.x内核的汉化包导入了进来,我觉得在导入的过程中,可能就把uc_store\po目录下面zh-hans.po也捎带了。成功导入以后,启用简体中文zh-hans,并将其设为默认语言,这样,drupal后台就被我汉化了。不过点击网店管理页面,里面并没有我的汉化成果,还都是英文呢。我又在页面admin/settings/locale/language/import单独的导入了一次uc_store\po\zh-hans.po文件,这次报了一个错,“The translation file zh-hans.po contains an error: the plural formula could not be parsed.”不过在错误信息下面,还看到了导入成功的信息,而简体中文的汉化程度也由100%变为了88.33%。这次我又进入网店管理页面admin/store,终于看到了我翻译的成功了,不过像Orders,这样的复数形式,还没有汉化,我觉得应该与中间遇到的复数形式错误有关。不管怎样,总算看到结果了,也学会了汉化drupal第3方模块的流程了。

   流程总结,使用poedit编辑uc_store.pot文件,完成后,将后缀名改为po,文件名叫什么好象都无所谓,只要找得到就可以了,然后进入翻译文件的导入页面admin/settings/locale/language/import,导入翻译的成果。

相关链接:  Think in Drupal

Drupal版本: