Locale: 多语言支持

locale 模块允许你用自己的语言来表现你的 Drupal 站点,而不是默认的英语, 你可以用它来建立一个多语言的站点或者替换 内建 的文本达到定制站点的目的。当 locale 模块遇到需要显示的文本时,会尝试将它翻译为当前选定的语言,如果没有可用的翻译,这个字符串会被记录下来,然后你就可以轻易地检索尚未翻译的字串了。

locale 模块提供两种不同的翻译方式。 第一种集成到了 web 界面中,通过这个界面你可以搜索尚未翻译的字串,然后自行翻译。 当然更简易并且节省时间的方法是通过导入翻译好的语言文件,这些语言文件一般是 GNU gettext Portable Object files (简单说是 .po 文件)。在翻译页面有许多翻译好的语言文件可供下载使用。

如果一个翻译好的语言文件不能适应你的需求,.po 还可以通过特殊的编辑工具方便地再次修改。locale 模块的导入特性允许你从这些文件将字串导入到站点数据库中,而输出功能则允许你通过生成 Portable Object file 的方式与他人分享你的翻译。

你可以

  • 通过 管理 >> 本地化 来管理本地化。
  • 管理本地化字符串: 管理 >> 本地化 >> 管理字符串
  • 添加本地语言: 管理 >> 本地化 >> 添加语言
  • Drupal 翻译页面 下载翻译好的文件。

翻译文本

通过 Drupal 界面翻译文本可以说是相当乏味的,这不能说是因为 Drupal,而是每次字符串更新都要重新载入页面。 更好的翻译方法是通过 PO 编辑器编辑 PO 文件,然后导入到 Drupal。

关于 Drupal 核心和模块的翻译,有完整的指南,请参考 此处

如何安装其他语言

要安装一个本地语言,只要启用 locale 模块,然后到 admin/localization 导入从 http://drupal.org/project/Transla​tions 下载的 .po 文件就可以了。 你应该在弹出的菜单中选择了正确的语言了吧?就这么简单!

现在你可以选择是否让用户自己切换语言了,同时你还会发现本地化模块的 "翻译字符串" 标签。

更多信息请参考 本地化或国际化支持

如何建立定制语言集来替代 Drupal 术语

  1. 管理 >> 模块 页面启用 locale 模块。
    • 管理 >> 访问控制
    • 给自己 (以及其他应该拥有的) 访问本地化的权限
  2. 来到 管理 >> 本地化 页面。
  3. 选择 添加语言 标签。
  4. 假设是英语,在语言代码文本字段输入 en-US 就可以建立一个定制的语言。
  5. 为你的语言命名,例如 定制的英语 (注意不能使用空格),然后添加该语言。
  6. 此时将返回到本地化主页面,启用你的新语言并设置为默认。
  7. 保存配置。
  8. 禁用原来的 English 语言集 (就是说,你不希望用户在在自己的账号中有选择语言的权利)。

现在当你浏览页面,那些 Drupal 硬编码的内容将加入到你的语言集数据库中。

当你访问过你希望修改的内容后:

  1. 转到本地化的管理字符串页面 (admin/locale/string/search)。
  2. 输入你要搜索的字符串。
  3. 编辑结果,输入你的替代文本。

如何使用定制语言集来改变 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 模块替换为任何字串。