Drupal专业开发指南 第18章 Drrupal的本地化及中文化(2)

来源:互联网 发布:阿里云栖大会ppt 编辑:程序博客网 时间:2024/05/19 00:17

导出你的翻译

当你选择并翻译完你想要修改的所有字符串后,当你要建立下一个Drupal站点时,如果再重复做同样的工作的话,这是不能让人接受的。通过使用“管理语言“标签下的导出函数,你可以将你的翻译成果保存到一个带有后缀.po的特定文件。

 

PO文件

从我们的”English-custom”翻译中导出的文件中的前面若干行如下所示:

# English-custom translation of Drupal

# Copyright (c) 2007 drupalusername <me@example.com>

#

msgid ""

msgstr ""

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

"POT-Creation-Date: 2007-01-05 12:36-0600/n"

"PO-Revision-Date: 2007-01-05 12:36-0600/n"

"Last-Translator: drupalusername <me@example.com>/n"

"Language-Team: English-custom <me@example.com>/n"

"MIME-Version: 1.0/n"

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

"Content-Transfer-Encoding: 8bit/n",jinjiezhe

#: /example.com/?q=admin/build/modules/list/confirm

msgid "blog"

msgstr "journal"

#: /example.com/?q=admin/build/modules/list/confirm

msgid "Blog entry"

msgstr "Journal entry"

#: /example.com/?q=admin/build/modules/list/confirm

msgid ""

"A blog is a regularly updated journal or diary made up of individual "

"posts shown in reversed chronological order. Each member of the site "

"may create and maintain a blog."

msgstr ""

"A journal is a regularly updated journal or diary made up of "

"individual posts shown in reversed chronological order. Each member of "

"the site may create and maintain a journal."

...

.po文件包含两部分,头部为元数据,后面跟着翻译了的字符串。每一个字符串包含3个部分:1个注释说明了字符串第一次出现的位置,一个msgid代表着原始字符串,一个msgstr代表着翻译后的字符串。关于.po文件的更全面的描述,参看http://www.gnu.org/software/gettext/manual/html_node/gettext_7.html

 

使用“管理语言“标签下面的导入功能,现在就可以将en-US.po文件导入到另一个Drupal站点中了。

 

PO模板

一个翻译文件包含了一些元数据和大量的原始的和已翻译的字符串,而一个PO模板文件(后缀为.pot)则包含了所有的待翻译的原始字符串,而不包含任何已翻译的字符串。如果你从头开始一门语言的翻译,或者在你修改你的站点以前想要决定是否为最后的版本中添加一些字符串时(找出这些字符串的另一种方式是,复制你的Drupal站点,并对其更新,然后使用“将内置字符串替换为定制的字符串“一节中讲到的搜索功能搜出所有的未翻译字符串),.pot文件就非常有用。

 

开始一个新的翻译

Drupal已被翻译成了许多语言。如果你想成为一个翻译方面的志愿者的话,社区是非常欢迎你的。每一个已存在的翻译语言都有一个项目页面用来追踪其翻译进度。例如,德文的翻译在http://drupal.org/project/de。对于翻译的一般的帮助可以在翻译的论坛里面找到http://drupal.org/forum/30

 

注意 一些非英文的专业的翻译人员一般不使用本章前面介绍的字符串替换的方法。他们习惯使用.po和.pot文件,并常常借助于一些特殊的软件来帮助他们管理翻译(参看http://drupal.org/node/11131).

 

Drupal获取.pot文件

Drupal权威的.pot文件可以从http://drupal.org/project/drupal-pot下载。当你下载并解压了你所感兴趣的Drupal分支版本的.tar.gz文件后,你将得到一个目录,里面包含了对应于Drupal文件的.pot文件。例如aggregator-module.pot包含了aggregator. Module的可翻译的字符串。

$ gunzip drupal-pot-5.x-1.x-dev.tar.gz

$ tar -xf drupal-pot-5.x-1.x-dev.tar

$ ls drupal-pot

LICENSE.txt             file-inc.pot        search-module.pot

README.txt              filter-module.pot   statistics-module.pot

aggregator-module.pot   form-inc.pot        system-install.pot

block-module.pot        forum-module.pot    system-module.pot

blog-module.pot         general.pot         taxonomy-module.pot

blogapi-module.pot      installer.pot       theme-inc.pot

book-module.pot         locale-inc.pot      throttle-module.pot

comment-module.pot      locale-module.pot   tracker-module.pot

common-inc.pot          menu-module.pot     unicode-inc.pot

contact-module.pot      node-module.pot     upload-module.pot

content_types-inc.pot   path-module.pot     user-module.pot

drupal-module.pot       poll-module.pot     watchdog-module.pot

extractor.php           profile-module.pot

 

你也会在该目录中发现一些其它文件。有一个说明性的文件README.txt文件(一定要读的!),一个名为general.pot的文件,还有一个PHP文件extractor.php。general.pot是当你翻译时开始的地方,它包含了出现多次的字符串。

注意 如果一个Drupal文件包含的字符串少于10个,那么这些字符串将被包含在general.pot中去。例如xmlrpcs.inc的文件仅包含了9个可翻译的字符串,所以就没有了

xmlrpcs-inc.pot文件,而相应的字符串都包含在general.pot里面

 

使用extractor.php生成你自己的.pot文件

 

在目录中包含的extractor.php可以为你生成.pot文件。当你创建了一个你自己手写的模块,或者下载了一个第3方模块而没有相应的翻译文件,,此时extractor.php非常有用。如果你熟悉Unix下面的xgettext程序,你可以将extractor.php想象为它的Drupal版本。

 

为你的模块创建

让我们为我们在第2章创建的注释模块生成一个.pot文件。

 

首先,我们需要复制一份extractor.php,并将其放到模块的目录下面。接下来,我们需要运行它,这样它就可以创建.pot文件。我们可以通过命令行(如果你安装了PHP的命令行程序)php extractor.php,或者在浏览器里面访问http://example.com/sites/all/modules/annotate/extractor.php

 

警告 无论哪种情况,你都向你的Drupal站点添加了一个可执行的PHP脚本,它需要对其运行的目录具有写权限(这样它就可以写入.pot文件)。一定要在开发版本的站点上运行extractor.php,而不是在一个已运行的站点,否则会带来安全隐患。

 

运行提取脚本将生成两个文件:annotate-module.pot,它包含来自annotate.module的字符串,general.pot,它包含了来自annotate.info 和annotate.install里面的字符串。脚本将它们放在了general.pot里面而不是annotate-info.pot和annotate-install.pot里面,这是由于这些文件中的可翻译的字符串个数小于10.如果我们想将这个翻译模板文件与他人分享的话,我们需要在annotate目录下创建一个po子目录,将general.pot里面的字符串简单的移到annotate-module.pot里面,这是为了安装的方便,然后将annotate-module.pot放置到po子目录下面。如果我们打开合并后的annotate-module.pot文件并做一个法语翻译的话,翻译字符串,然后将其保存为fr.po,我们的模块目录如下所示:

annotate.info

annotate.install

annotate.module

po/

annotate-module.pot

fr.po

 

为整个站点创建.pot文件

如果你想为你的站点的所有的可翻译字符串创建.pot文件的话,将extractor.php放到你站点的根目录下,确保你对当前目录拥有写权限,然后运行extractor.php。脚本一般将.pot文件生成在脚本所在的目录下面。例如,aggregator-module.pot将位于你站点的根目录,而不是modules/aggregator/下面。

 

导入一个已存在的翻译

导入一个已存在的翻译可以这样简单的完成:为你的Drupal下载相应版本的.po文件,导航到Administer Site configuration Localization,点击“Import(导入)“链接(参看图18-9)。

18-9. 导入一个翻译

 

 

翻译安装器

Drupal安装器使用st()来代替t(),t()在安装器运行时不可用,这是因为Drupal还没有安装成功安装器翻译文件为安装过程提供了一个选择,它基于installer.pot文件(参看“为Drupal获取.pot文件“一节)。

 

为了实际的检查一下安装器的可翻译性,我们从http://drupal.org/project/Translations下载Drupal的Danish翻译文件。解压缩下载的da-5.x-1.x-dev.tar.gz可以看到一个名为installer.po的文件。将其改名为da.po,然后将其放到profiles/default/da.po,我们就可以在安装器中看到新的选项了,如图18-10所示。

18-10 当安装profile目录存在一个.po文件,Drupal的安装器允许你为安装器选择一个语言

 

额外资源

国际化支持是Drupal的下一版本的主要目标。为了追踪该项的进度或者参与其中,参看

http://groups.drupal.org/i18n.

小结

在本章,你学到了如下内容:

t()函数如何工作

如何定制Drupal内置的字符串

如何导出你的定制

什么是PO文件和POT文件

如何下载POT文件和生成你自己的

如何导入一个已存在的翻译