我们在前面讲述了,通过在settings.php文件中定义一列自定义的字符串替换,来实现字符串的替换,除了这种方式以外,我们还可以使用本地模块,使用它来查找要被替换的字符串,并定义替换为什么。一个语言翻译就是Drupal的自定义字符串替换集。当Drupal准备显示一个字符串时,它将使用t()函数对字符串进行处理,正如前面所述的那样。如果它在当前语言翻译中找到了一个替换,那么它将使用该替换;如果未找到,那么它将简单的使用原始的字符串。图18-4以一种简单的形式给出了这一流程,这也正是locale()函数的所要做的。使用本地模块的方法,就是创建一个语言代码为en-US的语言,让其仅包含我们想要替换的字符串。

图 18-4.如果本地模块没有在当前语言翻译中找到一个替换,那么它将会退回来使用原始的字符串。
好的,让我们现在开始,将任何包含“blog”的字符串修改为包含“journal”的字符串。因为,如果找不到翻译的话,那么Drupal将会退回来使用原始的字符串,所以我们只需要提供我们想要修改的字符串。我们可以把这些字符串放在一个自定义的语言中,对于我们没有提供的字符串,让Drupal回退到原始的字符串上去就可以了。首先,添加一个自定义语言,来保存我们的自定义字符串。添加语言的界面如图18-5所示。我们把它叫做“English-custom”,并使用“en-US”作为语言代码和路径前缀。

图 18-5.为字符串翻译添加一个自定义语言
老葛的Drupal培训班 Think in Drupal
现在,启用你的新语言,并将其设为默认语言,如图18-6所示。点击“保存配置”,取消对英语的选中,并再次点击“保存配置”,如图18-7所示。这样就只启用了一个语言,当用户编辑它们的帐号时,就看不到让人困惑的如图18-8所示的“语言设置”选项了。

图 18-6. 启用新语言,并将它设为默认语言

图 18-7.禁用英语,这样English-custom就是唯一启用了的语言。

图 18-8. “我的帐号”页面的用户界面,用户可以为站点发送的电子邮件选择一个偏爱语言。
好的,你启用了名为English-custom的单个语言翻译。因为我们还没有添加任何字符串替换,所以它当前还是空的。对于每个字符串,Drupal都将使用如图18-4所示的流程对其进行处理,由于在English-custom中找不到字符串替换,所以最终会回退到原始的英文字符串上。让我们设立一些字符串替换。导航到管理界面“管理➤站点构建➤翻译界面”,如图18-9所示。

图 18-9. “翻译界面”的概览页面
Drupal使用的是即时翻译。当一个页面被加载时,里面的每个字符串将经过t()函数和locale()函数的处理,在这里,如果发现字符串还没有出现在locales_source和locales_target数据库表中,那么它将被添加到这些表中。所以,在图18-9中“内置界面”一列的值,表示有301个字符串经过了t()的处理并可被翻译。继续前进,在Drupal中随便浏览一些其它页面,然后再回到刚才的页面。你会发现字符串的数量增加了,为什么呢?这是因为Drupal遇到了更多的需要翻译的界面。我们将使用本地模块的web界面来翻译一些字符串。
在点击了“搜索”标签以后,我们将看到一个搜索界面,它允许我们查找需要翻译的字符串。让我们对目前可用的这301个或者更多的字符串进行搜索。搜索界面如图18-10所示。

图 18-10.用来显示可翻译字符串的搜索界面
选择我们的语言(English-custom),对所有的字符串进行搜索,把搜索框置为空将显示所有的可翻译的字符串。在每个字符串的后面都紧挨着一个“编辑”链接。在字符串列表的下面,也就是页面的底部,将会再次显示搜索界面。由于字符串列表太长了,让我们限定一下它的范围,改为包含单词“Search”的字符串。在“字符串包括”字段中输入单词“Search”,并点击搜索按钮。结果将会是一列包含单词“Search”的字符串,如图18-11所示。现在让我们把字符串“Search”修改为“Search now”,点击“编辑”链接。

图 18-11.一列包含单词“search”的可翻译字符串,以及它们的状态。
当你编辑了这个字符串以后,你返回到了搜索标签页面。但是,等一下!它现在变成了“Search now”标签!而搜索表单底部的按钮,也由“Search”改为了“Search now”,如图18-12所示。实际上,在单词“Search”单独出现的每个地方,它都被替换为了“Search now”。

图 18-12.字符串“Search”现在被替换为了字符串“Search now”
继续前进,再次搜索字符串“Search”,在字符串的结果列表中,你将会看到,对于该条目,其语言列的删除线不见了,这表示该字符串已经被翻译了,如图18-13所示。

图 18-13.编辑完“Search”后的可翻译字符串列表
注意,这里显示的是原始的字符串。如果你返回到概览标签,你将看到English-custom现在有了一个可用的替换字符串。
现在你学会了如何修改字符串,我们将继续前进,把所有出现“blog”的地方改为“journal”。在启用了博客模块以后,访问博客相关的页面(比如/node/add/blog和blog/1),我们将看到等待我们翻译的字符串。在“管理➤站点构建➤翻译界面”中的搜索,是区分大小写的,所以我们需要搜索两次,一次“blog”,一次“Blog”,这样就得到所有的情况了;然后使用我们喜欢的单词“journal”和“Journal”,将它们分别修改为等价的替换字符串。
警告 我们这里介绍的方法,是用来对Drupal站点进行润色的,它仅针对特定界面元素的字符串替换,而不是全部的。例如,如果一个模块包含了单词“blog”,但是还没有启用,那么我们就没有翻译该模块的字符串。在本章的“开始一个新的翻译”一节中,将会介绍一个更彻底的方法。
该改的都改了,看起来也不错,但是还有一点,那就是创建一个新的journal条目时所用的URL还是http://example.com/?q=node/add/blog,这一点还是有点麻烦的;能不能把它替换为http://example.com/?q=node/add/journal?当然可以。启用路径模块,添加一个别名,把node/add/blog作为已有的系统路径,把node/add/journal作为对应的别名,这样我们就可以快速的解决这个问题了。一转眼!所有的“blog”都消失了,这样在使用站点时,你再也看不到单词“blog”了,这样就顺心了。
提示 有个第3方模块,它使得字符串的翻译更加方便,这就是本地化客户端模块,下载地址为http://drupal.org/project/l10n_client。这个模块提供了一个在线的本地化编辑器界面,并且大量的使用了AJAX。