导出你的翻译

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

PO 文件

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

# English-custom translation of Drupal
# Copyright (c) 2007 drupalusername
#
msgid “”
msgstr “”
“Project-Id-Version: PROJECT VERSIONn”
“POT-Creation-Date: 2007-01-05 12:36-0600n”
“PO-Revision-Date: 2007-01-05 12:36-0600n”
“Last-Translator: drupalusername n”
“Language-Team: English-custom n”
“MIME-Version: 1.0n”
“Content-Type: text/plain; charset=utf-8n”
“Content-Transfer-Encoding: 8bitn”,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 文件和生成你自己的
  • 如何导入一个已存在的翻译

相关文章


没有评论

(*)
(不会公布)