locale 模块允许你用自己的语言来表现你的 Drupal 站点,而不是默认的英语, 你可以用它来建立一个多语言的站点或者替换 内建 的文本达到定制站点的目的。当 locale 模块遇到需要显示的文本时,会尝试将它翻译为当前选定的语言,如果没有可用的翻译,这个字符串会被记录下来,然后你就可以轻易地检索尚未翻译的字串了。
locale 模块提供两种不同的翻译方式。 第一种集成到了 web 界面中,通过这个界面你可以搜索尚未翻译的字串,然后自行翻译。 当然更简易并且节省时间的方法是通过导入翻译好的语言文件,这些语言文件一般是 GNU gettext Portable Object files (简单说是 .po 文件)。在翻译页面有许多翻译好的语言文件可供下载使用。
如果一个翻译好的语言文件不能适应你的需求,.po 还可以通过特殊的编辑工具方便地再次修改。locale 模块的导入特性允许你从这些文件将字串导入到站点数据库中,而输出功能则允许你通过生成 Portable Object file 的方式与他人分享你的翻译。
你可以
通过 Drupal 界面翻译文本可以说是相当乏味的,这不能说是因为 Drupal,而是每次字符串更新都要重新载入页面。 更好的翻译方法是通过 PO 编辑器编辑 PO 文件,然后导入到 Drupal。
关于 Drupal 核心和模块的翻译,有完整的指南,请参考 此处。
要安装一个本地语言,只要启用 locale 模块,然后到 admin/localization 导入从 http://drupal.org/project/Translations 下载的 .po 文件就可以了。 你应该在弹出的菜单中选择了正确的语言了吧?就这么简单!
现在你可以选择是否让用户自己切换语言了,同时你还会发现本地化模块的 "翻译字符串" 标签。
更多信息请参考 本地化或国际化支持。
现在当你浏览页面,那些 Drupal 硬编码的内容将加入到你的语言集数据库中。
当你访问过你希望修改的内容后:
举个简单的例子,你可能希望将 "Search" 按钮改为 "Find",或者你希望评论显示为 "Posted by" 而不是 "Submitted by"。更进一步,你可能希望将 Drupal 描述为 "forums" 的任何东西替换为 "bulletin boards" 这样的描述,你还可能希望将任何地方出现的单词 "forum" 改为自己喜欢的单词。
locale 模块是一个发展的相当好的系统,可以轻松处理这些情形。尽管我们将它描述为一个翻译系统,它一样能够高效地处理你用自己的术语代替 Drupal 默认术语的问题。 你应该首先阅读 如何建立定制语言集来替代 Drupal 术语,在遵循该文指示建立了你自己的定制语言后,本文试图为 Drupal 新手提供更详细的处理步骤。
再重复一次,在处理前,遵循 如何建立定制语言集来替代 Drupal 术语 的第一部分启用 locale 模块,建立一个定制语言并使之成为默认语言。如果你不是站点的第一个用户,还需要到访问控制页面 管理 >> 访问控制 给你所处的角色赋予 "管理本地化" 的权限。
接下来,你会发现直接在 管理 >> 本地化 中逐个搜索字符串没有通过模板文件导入 "已翻译" 字串来的容易。因此,到 翻译模板 页面下载相应版本 Drupal 的翻译,一些第三方的模块会有一些翻译模板在 "po" 目录下。
在下载得到的模板目录中,你会发现许多扩展名为 ".pot" 的文件,"general.pot" 里面的字串被好几个模块重复利用,用一个文本编辑器打开并浏览下,记得前面我们举的简单的例子吗?我们从文件中找到下面形式的字符串:
#: includes/locale.inc:327;346 modules/search.module:142;996 modules/system.module:1198 modules/user.module:1958
msgid "Search"
msgstr ""编辑这个文件就可以指定替代文本,例如:
#: includes/locale.inc:327;346 modules/search.module:142;996 modules/system.module:1198 modules/user.module:1958
msgid "Search"
msgstr "Find"类似的,我们可以改变这个条目:
#: themes/engines/phptemplate/phptemplate.engine:250;273
msgid "Submitted by %a on %b."
msgstr "Posted by %a on %b."注意 "#:" 后面的文本是一些帮助性质的信息,对翻译结果没有任何影响。
此时你可以将编辑过的文件保存到某处 (你可能希望放在你定制的主题的本地副本边上?)。 现在转到 管理->本地化 并选择 "导入",选择你刚才保存的翻译文件,将它导入到你的定制语言中。瞧! Search 框的名字变成 "Find" 了,以及等等。
要进行更广泛的修改,你还可以打开 "forum-module.pot" 文件,将所有 "forum" 单词改为你自己喜欢的,例如:
#: modules/forum.module:51;110;216
msgid "forum topic"
msgstr "bulletin board subject"更多关于使用 local 模块和生成替代文本的帮助和技巧可以参考 翻译人员指南。
满足你的好奇心
如果你阅读一个模块的 PHP 代码,例如 search.module,你会发现:
<?php
$form['basic']['inline']['submit'] = array('#type' => 'submit', '#value' => t('Search'));
?>这里 'Search' 是一个 t-ified 字串,它意味着你可以使用 locale 模块替换为任何字串。