drupal汉化

Drupal界面文本,默认使用的是英文(比如“Log in”按钮,和"Add new comment"文本),但是这些界面文本可以翻译成中文。对于中文,简体和正体(繁体),都已经有了drupal内核的完整的汉化包,而对于第3方模块,部分已经汉化了,但是许多还没有汉化(如何使用这些汉化包,可参看本地化模块(locale module)).

对于drupal汉化,我们还有很多的工作要做。比如在drupal内核的汉化包中,个别地方汉化的不彻底,有些地方不是很贴切,还有很多地方需要改进,drupal的中文化还有很长的路要走。不过与其它语言相比,drupal的中文化算是做得比较不错的了,毕竟到目前为止,没有哪个语言把所有的第3方模块完全翻译完了。

 

如何贡献drupal汉化包

你可以在http://drupal.org/project/Translations页面找到简体和繁体的汉化包,以及对应的工程,简体为http://drupal.org/project/zh-hans,正体(繁体)为http://drupal.org/project/zh-hant

 

更多界面汉化信息,可参看

对于内容的翻译以及国际化,可参看翻译,多语言内容,以及国际化

中文化可参看:http://drupalchina.org/forum/8

为drupal6更新翻译。

 

相关链接:  http://drupal.org/contribute/translations , Think in Drupal

Drupal版本:

Drupal内核的翻译模板

译者首先应该下载翻译模板文件的压缩包,然后将这些文件翻译成他们自己的语言.翻译流程方面的更多信息,可参看译者指南(当然这个页面也是里面的一部分).

翻译后的文件应该存放在contrib-cvs/translations/id下面,其中id为一个RFC 4646语言代码.如果你不知道你的代码,可以在翻译的邮件列表中询问.

你只能把翻译后的文件放到这个目录下面.一个脚本将生成一个合成的id.po文件.注意填写每个文件的头部信息,并将这些文件的后缀从.pot改为.po.还有,首先从general.po文件开始,这里面的字符串出现的次数不止一次,因此你只需要翻译一次,就可以在多个地方重复利用了.它还需要创建可下载的文件.除了一个id.po文件以外,还包含一个installer.pot文件.这个是用于drupal安装器的,不会将其中的内容导入到Drupal数据库中.

如果你没有CVS帐号,你的语言项目已经存在的话,你可以在这个项目下面创建一个问题,并把你的文件作为附件传上去.如果不存在相应的语言项目的话.你可以在翻译模板所在的页面,也就是http://drupal.org/project/drupal-pot,创建一个问题,并将你的文件上传上来.

注意,Drupal内核开发小组不会检查翻译的准确性以及正确性的.

如果你对翻译模板提取器,有什么想法或者疑问的话,你可以访问它的项目页面,以及在上面提交问题. http://drupal.org/project/potx

       原文作者: killes@www.drop.org

 

相关链接: http://drupal.org/project/drupal-pot , Think in Drupal

Drupal版本:

如何编辑.po文件

这个页面是用来简洁的讲述如何编辑.po文件的,从而将一个翻译好的项目贡献给社区.更多背景知识可参看#240243:参与进来:翻译部分的工作.

由于我至少需要25个单词,才能发布这篇文章,所以我在这里引用Havamal的一首诗:

你不能承受其重的
生活的艰辛
比智慧更珍贵.
认识不同的人
胜过收获黄金.
智慧仅仅是懒人的安慰剂.

 相关链接: http://drupal.org/node/314231 , htThink in Drupal

Drupal版本:

drupal翻译的状态

本部分是用来讲解如何显示drupal核心界面翻译的状态的.不幸的是,随着drupal的发展,这种方式已经过时了,google的夏季代码项目本地化服务器,提供了一种新的方式.不过在没有采用这种方式以前,你还可以使用这里讲述的方式.

检查你的翻译的状态

为了查看PO文件中有多少字符串已被翻译好了,你可以试试这行代码:

for i in *.po; do echo -n "$i: " ; msgfmt --statistics $i ; done

许多PO编辑器已经包含了这一特性。

 

相关链接: http://drupal.org/translation-statusThink in Drupal

Drupal版本:

在CVS中,根据多个.po文件创建一个单独的po文件

在一个CVS文件夹中,包含了所有的小的po文件,如果你想把它们合并到一个po文件中的话,那么可以使用下面的命令(仅适用于linux/unix)。你需要在这个CVS文件夹下执行这一命令。

$ msgcat --use-first  general.po [^g]*.po | msgattrib  --no-fuzzy -o nl.po

当然,你需要把nl改成你自己语言的代码。汉语为zh-hans.

 

相关链接: http://drupal.org/node/12890Think in Drupal

Drupal版本:

大家共同翻译drupal

为了方便大家一起翻译,可以将Drupal的POT文件切成多个子部分,每个部分之间都不重复.

在drupal核心中,多次出现的字符串都被放到了general.pot文件中了.这样就保证了,这些字符串将被翻译成同样的字符串.如果模块里面包含的可翻译的字符串少于或者等于10个的话,那么这个模块就不能拥有自己独立的POT文件,而它们的字符串将被添加到general.pot文件中.

当然,项目组成员之间还需要密切配合,这样才能保证翻译的质量.

如果一个语言,对某些语句,存在多种译法的话,那么就可以单独创建一个PO文件,来放置这些可被修改的字符串.比如在汉语中,可以将you翻译成你或者您,这个需要根据你站点具体情况来决定。

相关链接 :http://drupal.org/node/11276Think in Drupal

Drupal版本:

常用的drupal PO文件编辑器

推荐的drupal PO文件编辑器有(没有优先顺序这里):

  • XEmacs(po-mode):运行在X Unices上.
  • GNU Emacs (po-mode):运行在Unices上.
  • KBabel:运行在KDE上.
  • KAider:在KDE4上,用于替代Kbabel的
  • poEdit: Linux, MacOSX, 和Windows
    从1.3版开始, poEdit开始支持复数形式.
  • OmegaT是另一个翻译PO的工具.它底层用的是java,所以具有跨平台特性(包括GNU/Linux 和Windows).下载地址SourceForge.
  • AquaEmacs,用于Mac OS X用户,它是从GNU Emacs迁移过来的.更多使用帮助和技巧可参看Emacs维基.里面没有包含po-mode,但是很容易就可以添加上来.
  • GNU Gettext (Linux/Unix)用于GNU翻译项目. Gettext还提供了一个msgmerge,用于合并翻译成果.
  • Vim(具有Linux/Unix 和Windows版本),有一个PO ftplugin插件,用来编辑GNU gettext PO文件.
  • LocFactory Editor (OS X).
  • gted是一个eclipse插件,用作gettext编辑器.由于Eclipse用的是java,所以这个编辑器也具有跨平台性.

注意,一定要下载最新的版本,复数形式是gettext标准最近新加的.

在Windows配置带有po-mode的XEmacs

相关链接: http://drupal.org/node/11131 ,Think in Drupal

Drupal版本:

如何合并翻译

假如你有一个fr.po文件,里面包含了几个drupal模块的翻译.这些drupal模块更新了,有些字符串被修改了.那么现在更新后的module.pot文件里面就是空的.你需要把这些修改,合并到你的翻译中,从而 充分的利用原有的翻译成果.

首先,检查你使用的PO编辑器,看它是不是有一个合并的功能.

没有的话,你可以试试UNIX CLI工具msgmerge,它和GNU gettext是一起的.

 

更好的方式是,你可以使用merge.sh,这个是KDE小组对msgmerge提供的一个封装好的批量处理函数.下载这个文件,把它放到你的bin/ folder(你的$PATH所在的目录).在你的系统上,至少需要安装一个GNU gettext 0.16版,或者更高版本.然后运行以下命令:

merge.sh fr.po module.pot

其中fr.po是已有的翻译, module.pot为该模块更新后的pot文件.然后,使用PO编辑器打开你的fr.po文件.

参看msgmerge文档.

 

相关链接: http://drupal.org/node/205049 , Think in Drupal

 

Drupal版本:

使用poEdit时出现的问题

poEdit的windows版本1.3.1(原作者写作时的最新版本,现在1.4.2了),看起来需要额外的步骤才能识别复数形式(如果你编辑的一个词语是复数形式的话,即便是你翻译了它,当你移到其它词语时,翻译的结果也不会出现在poedit中,同样即便是你保存了,也不会)

复数解决方案#1

如果你找到了一个复数形式的单词,那么关闭poedit,使用一个普通的文本编辑器比如写字板(不能用word)来打开你正在翻译的文件,然后查找复数形式的单词,比如你可以看到类似下面的形式:

#: modules/comment.module:187 modules/node.module:89
msgid "1 comment"
msgid_plural "%count comments"
msgstr[0] "1 commento"
msgstr[1] "%count commenti"

 

这个时候,我们只需要简单得把msgid文本翻译到msgstr[0],把msgid_plural文本翻译到msgstr[1]中,保存文件,然后关闭编辑器,然后再使用poedit打开.这种方案就是,把复数形式的提前用别的编辑器翻译好后,然后再使用poedit编辑器.

 

复数解决方案#2

为了在poedit中使用复数,你可以先在类目里面将语言设为英语,之后再对其修改.

语法是:

nplurals=2; plural=(n != 1);

这样就解决了我在翻译成瑞典语时的问题:

#: modules/aggregator.module:100;711;722
msgid "1 item"
msgid_plural "items"
msgstr[0] "1 inlägg"
msgstr[1] "%count inlägg"

我在PO Edit 1.3.1中这样用,没有报错,即便是保存时也不出错.

 

复数解决方案#2

你可以在类目设置里看到PO edit用到的复数形式:

nplural=INTEGER; plural=EXPRESSION

 

仅有一种形式的情况:

有些语言,单复数同形,就是没有分别.此时PO edit用到的复数形式就应该为:

Plural-Forms: nplurals=1; plural=0;

此类语言包括:

芬兰乌戈尔语系

匈牙利语

亚洲语系

日语,

韩语

汉语

突厥/阿尔泰语系

土耳其语

译者注:

下面所讲的就是其它类别的语言的设置了,我们用不到,我在poedit1.4.2把复数形式设为nplurals=1; plural=0就搞定了。

 相关链接: http://drupal.org/node/17564 , Think in Drupal

Drupal版本:

在Windows上搭建带有po模式的XEmacs

XEmacs很早就支持Windows,你可以在这里下载它http://www.xemacs.org/Download/win3. XEmacs绑定了po模式(po-mode)(无需GNU gettext).

然而如果要编辑UTF-8编码的PO文件的话,还是会遇到一点麻烦的,我是这样设置的:

 

1,使用Netinstall安装XEmacs 21.4.13. http://www.xemacs.org/Download/win32/setup.exe

2,使用文件http://www.suiyokai.org/tomonori/xemacs/xemacs-i586-pc-win32-21.4.13-mul...里的文件来替换C:\Program Files\XEmacs\XEmacs-21.4.13目录下面的对应文件.

3,将MULE包安装到C:\Program Files\XEmacs\mule-packages目录下(可从http://ftp.xemacs.org/xemacs/packages/xemacs-all-mule-packages.tar.gz下载该文件)

4,将环境变量EMACSPACKAGEPATH的值设为:

C:\Program Files\XEmacs\site-packages;C:\Program Files\XEmacs\mule-packages;C:\Program Files\XEmacs\xemacs-packages

5,为了确保在打开文件时能够自动的探测到Unicode,需在你的初始化文件(init.el)添加以下几行:

(require 'un-define)
(set-coding-priority-list '(utf-8))
(set-coding-category-system 'utf-8 'utf-8)

6,最后添加下面这行,以自动启用po-mode:

(require 'po-mode)

 

这可能有点麻烦…,不过XEmacs还是功能很强大的。如果你以前没有用过XEmacs,那么还需要多花点时间学习一下。

另外,你的安装目录不一定是C:\Program Files\XEmacs。我在这里仅仅用来说明问题。

 相关链接:http://drupal.org/node/25117 , Think in Drupal

 

Drupal版本:

如何使用一个本地化服务器

有好几个翻译小组都开始使用本地化服务器(也称作翻译服务器)进行翻译了.可以在服务器的项目页面可以看到有哪些小组使用服务器了.

在进行翻译以前,先阅读翻译站点上的信息,以及该语言项目页面的相关信息,看是不是有该语言的具体指南,流程,或者术语.

 

注册/登陆到站点上.根据站点的配置,译者可能需要加入到他想要翻译的语言所在的小组中去.

每个字符串都可以作为翻译或者建议添加上去.在一些服务器上,所有的用户都可以添加翻译,而在其它服务器上,大多数用户只能添加建议,而建议只有经过授权用户批准以后才能转变为翻译.

当然,还可以从.po文件中导入翻译。注意:服务器现在还不能检查新的字符串是不是和旧的一样。如果有人导入的翻译中,大量字符串已经存在数据库中的话,那么就会造成大量的建议冗余。

 

服务器使用Unicode字体创建基于文本的图标。如果你的图标不能正确显示的话,你可以检查一下你的浏览器与Unicode 'Dingbats'区块 兼容性。注意:可能你需要安装一个支持Unicode ' Dingbats '区块字符的字体。这些字体名单可参看支持Unicode区块' Dingbats '的字体

更多资源:

 

相关链接: http://drupal.org/node/302194Think in Drupal

Drupal版本:

如何搭建一个本地化服务器

在将来,所有的翻译都将使用本地化服务器,这个适用于所有的语言.更多信息,可参看本地化服务器项目页面.在2008年1月份的状态更新中,项目维护者写道:

这个项目可用于上百个模块的翻译了,已经很好用了 ,但是到目前为止,还未成为drupal.org的主流翻译方式,还没有成为官方使用的方式.

所以,在等待官方主流的服务器的同时,一些翻译社区已经建立了自己的本地化服务器了.在项目页面有这方面的一个列表. DrupalChina简体中文汉化工作站的地址为http://www.drupalchina.org/hanhua/.

注意: 这个模块还有很多地方需要改进.有多个已知的问题尚待解决,并且用户接口和功能也可能发生改变.在决定使用这个服务器以前,先看看里面的问题列表,再作决定.

注意:从通常的编辑.po文件的方式,转为使用本地化服务器,这将影响到整个翻译小组。在作出决定以前,需要征得大家的同意。

预备条件:

  • 你安装的PHP应该带有PEAR Archive_Tar包(这个需要zlib PHP扩展—为了检查你的PHP是否装了zlib扩展,你可以检查phpinfo页面的"zlib"部分)。这个需要提取Tar (在 l10n_localpacks 和l10n_drupalorg 模块中)和生成Tar(在l10n_community 模块中).

1,安装和启用模块

安装以下drupal模块:

阅读模块的README文件,看看里面是不是需要其它的安装指示。

访问admin/build/modules并启用以下drupal模块:

  • Locale (core) (本地化 核心)
  • Localization community(本地化服务器包的一部分)
  • Localization community for local packages(本地化服务器包的一部分)("Localization community for drupal.org"这个是最终用于drupal.org的服务器,不能使用这个)
  • Translation template extractor (翻译模板提取器)
  • 可选的:

    • Views
    • Organic groups
    • Localization groups (part of the Localization server package)
    • Localization group(本地化服务器包的一部分)

2,配置权限

导航到Administer > Users > Access control (admin/user/access),设置以下权限:

  • access localization community:匿名和认证用户
  • administer localization community:仅用于管理角色
  • submit suggestions:认证用户
  • submit translations and approve suggestions:你可以将这个权限授予所有的认证用户,也可以仅授予一小部分核心用户。

3,添加要被翻译的语言文件

在你的服务器上创建一个目录用来保存要被翻译的项目。

导航到Administer > Localization server > Local package connector (admin/l10n_server/l10n_localpacks)。在"Local packages directory"下面添加你要创建的目录的名字。

将你要翻译的Drupal对应版本的tarball拷贝到你刚才创建的目录下面。(tarball就是http://drupal.org/download的.tar.gz文件)。对于你想要翻译的第3方模块和主题,也可以采用同样的方式。

4,收尾

删除不想要的语言。(待完善)

导入当前的翻译。(待完善)你可以选择把它们作为批准了的翻译导入,也可以作为翻译建议导入。



注意:如果你将同一文件导入了两次的话,那么就会在里面得到一份建议,与批准的翻译完全相同。

导航到Administer > Site building > Blocks (admin/build/block).激活区块"Translation help",点击"Configure",在"Custom visibility settings"下面选择"Show this block by default, but let individual users hide it"。不过你也可以选择"Show block for specific roles: authenticated user"。

 

里面还有一个"Bookmarked filters"区块。不过当前这个没什么用,就不用管它了。

这个模块的语言页面的信息是最终用于drupal.org官方的。你可以使用本地化模块对其进行适当的修改(可参看,创建一个自定义语言集来代替drupal术语一文)

每个语言都有一个平台页面。如果你需要向这里添加一点内容的话,你需要为创建一个词汇表vocabulary,每个语言对应一个术语"l10n-server-[language code]"。

本地化服务器的列表,可参看项目页面

 

和其它站点一样,记住经常备份。

更多资源:

 相关链接:  http://drupal.org/node/302196 , Think in Drupal

 

Drupal版本:

drupal界面翻译的技术背景

       对于drupal开发者来说,如果想为模块添加多语言支持的话,可以参看手册的多语言支持部分.

       Drupal核心和第3方模块/主题的界面翻译, 是完全独立于这些项目本身的开发流程的. Drupal核心和第3方模块/主题的开发者为代码中要被翻译的文本专门添加了特殊的标记.需要使用一个提取程序来收集这些字符串,并生成一个翻译模板文件.由于在翻译领域已经有了相关的工业标准,我们选择了一个已有的标准,有很多成熟的工具支持这一标准.

        GNU Gettext工具集提供了大多数翻译所需的解决方案.由于Drupal使用自定义的标记来标明所要翻译的文本,所以我们提供了自己的工具来生成Gettext翻译模板,生成Gettext翻译模板模板以后,就可以使用任何支持Gettext的工具来编辑模块和译文了(通常一个简单的文本编辑器就可以了).Drupal可以导入翻译后的Gettext模板。Drupal.org,根据你翻译的文件的不同,语言的不同,将翻译文件放在了独立的地方。

 

翻译流程

下面是翻译的流程(点击查看大图):

Drupal translation processes

Drupal核心和第3方模块/主题的翻译流程基本相似,但是也有重要的区别。

Drupal核心的翻译

      为了保持工作的一致性,我们为每个发布的drupal版本提供一个Drupal核心模板,所以译者可以下载这些预生成的翻译模板,并使用它们的工具来完成翻译。此时你就不需要自己生成模板了。记住,我们只在一个drupal版本将要发布的最后阶段,才生成模板。否则的话,生成的模板就不稳定,随着Drupal的变更,你需要不断的修改。你可以选择使用任何支持po文件的编辑器。通常,你可以找到Drupal以前版本的翻译文件,使用Gettext工具集你可以重用这些已有成果。最后,你将得到一组翻译好的文件。现在,你需要将模板的后缀名.pot改为.po了。一旦你把翻译提交到我们的版本控制系统中后,那么这个翻译就会被打包发布到了drupal.org上,大家就可以下载它了。

 

       如果你的语言在我们的系统中还不存在,你可以在contrib-cvs/translations下面使用你语言的代码添加一个子目录,从而创建一个新的翻译项目,接着,在drupal.org上添加一个项目。如果你没有CVS帐号的话,你可以在该翻译模板项目页面创建一个问题,并将你的翻译文件上传到那里。有些具有权限的开发者可能会帮你把它们提交到CVS中。这样就会为你的翻译创建一个项目,而你也将成为该项目的维护者。最终,你的翻译将出现在下载页面

 

Drupal第3方模块/主题的翻译

      就如图中所展示的一样,drupal第3方模块/主题(下面成为模块)的翻译稍微有点复杂。有些开发者为他们的模块生成了翻译模板,并将其放到了模块的po/目录下面。这确实不错,不过这些模板很快就过时了。所以建议你,当你开始翻译时,先使用翻译模板提取器生成最新的模板。现在,模板的翻译将放在该模块的po子目录下面。如果你有CVS帐号的话,你可以把文件提交到这里,如果没有的话,你可以在该模块下提交一个问题,然后让模块维护者提交你的翻译。

更多资源:

 相关链接:http://drupal.org/translators ,Think in Drupal

 

Drupal版本:

drupal翻译指南

每个语言都有自己的指南.下面是一些基本的指南,你可以依次为起点将Drupal翻译成自己的语言:

 

 “Linux学校:本地化和翻译”里面的建议很值得参考:

你的任务是…表达内容,所以对于原始文本已可以使用意译(当然,首先所讲的内容要表达出来)。阅读原文,理解它的意思,然后再考虑使用自己的语言表述同样的意思(不需要逐字翻译)。

 

如果译者的前后用语能够具有一致性的话,那么人们就更容易理解Drupal了。如果你把Drupal中的一个字,前后翻译成了多个不同的同义词,那么对于同样的功能,读者可能就不知道你在讲什么了。为了在你的整个Drupal站点上保持这种一致性,推荐你使用一个单词对应表,专门记载Drupal中常用术语。英语-挪威语drupal术语对照表为此提供了一个很好的示例。如果你想创建一个自己的对应表的话,那么需要动员自己语言的Drupal社区人员共同讨论相应的标准和对应译法。最好不要自建一个对应表,而是从已有翻译项目中重用已有的译法。

另外重要的一点是,本地化文件的写作风格。如果你的翻译项目已有了一个正式的风格的话,那么就遵守它。如果风格更口语化,那么就采用这种风格。如果你觉得你的翻译比原有的更好,那么就可对其进行重写,不过此时也要采用同样的写作风格。

 

还有,你还要注意drupal中特定文本在的长度。有时候,比较长,你可以多说一点。如果长度比较短的话,你需要长话短说了。

 

尽可能的把网络和技术术语翻译成自己的语言,尽量避免使用英语术语。如果你不确定这个术语的特定译法的话,你可以向相应的权威部分询问。对于那些尚未标准化的术语,不妨引入新的术语。当年“鼠标”一词开始使用时,大多数人都觉得这个词很荒唐可笑,不过现在也被大家接受了。

其它方面,则会由于语言的不同而不同。你可以联系你的语言的翻译项目的维护者,或者联系你的语言的特定社区。

References:

参考:
Drupal挪威的手册页面的翻译部分
Linux学校:本地化和翻译

自由软件的Danish译者指南

 

相关链接:http://drupal.org/node/13220Think in Drupal

Drupal版本:

drupal第3方模块的翻译

第3方模块中的可翻译字符串是独立的,没有包含到Drupal核心翻译模板中.模块作者可以到翻译模板提取器项目中下载potx-cli.php或者potx.module,用来生成他们自己的POT文件.提取器的使用指南可参看该项目的README.txt文件.生成的POT文件应该根据模块名来命名,不过这里使用.pot后缀,例如event.module的翻译模板为event-module.pot.这个文件应该放到translations(drupal6)子目录下面.而对应的翻译,也应该放在同一个目录下面.例如,现在event.module的translations子目录就包含了下面的文件: de.po, es.po, event-module.pot, he.po, hu.po.

 

译者应该首先翻译general.po文件中的文本.这里面放置的是通用的一些文本,这些字符串通常在Drupal中出现多次,对它们进行统一翻译,可以保持前后的一致性.

 

以前,在drupal5及更早的版本中,用于翻译的.pot和.po文件是放在每个模块或者主题目录下面的./po子目录中.尽管这个是通用的习惯,但是只有Autolocale模块涉及到了这一点.而在Drupal6中,为了用户友好性,将这个子目录重命名为了./translations,并且Drupal6自带了Autolocale模块的大多数功能.模块和主题应该将它们的翻译模板和翻译放到./translations目录下面,这样Drupal6可以自动导入它们.

 

相关链接: http://drupal.org/node/11396 ,   Think in Drupal

 

Drupal版本:

翻译Drupal文档

Drupal文档也可以翻译成其它语言。大多数特定语言的Drupal社区都有自己的文档。

如果你想翻译Drupal文档的话,可以与本地的Drupal社区联系。如果你的语言还没有一个本地社区的话,那么你可以联系Drupal核心翻译项目中你的语言的维护者。他们会为你提供帮助的。

如果还是找不到组织的话,你还可以看看groups.drupal.org上的区域小组中,是不是有本地语言的组织。

下面列出来的是一些特定语言社区的drupal手册页面的链接。(如果链接过时了,你可以在文档问题中通过提交问题来通知我们

Drupal版本: