如何编辑.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版本: