如何使用定制语言集来改变 Drupal 文本和术语

由 holz 于 周五, 2006-11-10 17:49 提交。

由于各类应用的特殊性,你可能发现 Drupal 核心或第三方模块的默认文本或术语不符合你的风格或需求,通过 locale 模块定制这些文本是相当容易的,并且能用于其他站点和 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 模块替换为任何字串。

-----------------------
1、原文: HOWTO: Use a customized language set to change Drupal text and terminology
2、Locale: multi-language support(4)