聚焦:国际化
至此我们就站点的翻译有了个好的开头,但是不是所有事情都顺畅了。我们能够翻译一些内容和菜单,但是它们却总是同时出现。不管我们以什么语言浏览网 站,多种内容和所有语言的菜单项都显示了出来。你也能看到一些零散的文本还处于英语状态,比如,在“Create Content”菜单下,内容类型的说明文字翻译了,但是内容类型名称没有翻译。为让我们的多语言网站更进一步并真正使它大放光彩,我们将求助于一个名为 “Internationalization (i18n)”的模块包。里面有一个中心国际化模块,还带有好多个其他模块共同拓展核心多语言功能。
这些模块要做的一个重要事情就是帮助我们把原本不存在于核心翻译界面中的文本字符串放入其中。Drupal的核心界面工具只能检测到那些被直接编入 代码的字符串(用Drupal的t()功能);这就是说,那些代码生成的。而所有用户产生的字符串都看不到。认识到那些由国际化模块添加的字符串通过本地 化客户端的“Translate Text”界面是看不到的,这非常重要。要翻译它们,你得用到本章前面在“操作:翻译界面”中谈到的核心界面,位置在Administer→Site building→Translate interface (admin/build/translate)。
这些模块的第二个特征就是为一些项目如菜单、区块或分类词提供一个语言选择的方法,如图8-25。能直接识别某个项的语言,使国际化模块能根据我们想浏览的语言来过滤显示,尽量避免重复和混乱。

图8-25.语言选择器
国际化模块包提供了很多的工具,我们无需为Migratory Patterns网站使用它们的全部。我们将讨论这些工具,然后在我们建立本站的过程中依情况使用其中一些。
内容选择
你翻译完第一篇内容之后你发现的第一个问题可能就是不管你用何种语言浏览网站,翻译出来的内容都同时出现在首页上。国际化模块通过为我们提供一个选择以决定我们的多语言内容如何显示来控制这个问题。有三种方法来识别内容语言:
No language(无语言选择)
内容不专属于任何语言,它如同于站点各种内容发布时语言选择项中的“Language neutral(语言无关)”或“All language(所有语言)”。
Current language(当前语言)
当前语言或者由语言约定设置自动选择(如依据路径中的语言代号,如“en”等决定),或者用户使用语言转换器进行人工选择。
Default language(默认语言)
这是在语言管理下的一项中心设置(Administer→Site configuration→Languages (admin/settings/language)),默认语言只有一个,它在没有约定语言的情况下使用。
决定内容显示的标准有5个不同的选择模式。图8-26显示了后面例子中的模式设置。

图8-26.国际化模块的内容选择模式选项
选中的内容选择模式将根据语言过滤显示内容。我们用个例子来说明不同设置下将出现的结果。我们的站点用了三种语言:英语、荷兰语和法语,默认是英语。在这 个简化的例子中,我们假设是三篇内容在首页的四个节点中,它们分别是:Drupal,Welcome,Welkom和Les mots。Drupal是语言中立的,第二是英语(Welcome)和荷兰语(Welkom),Les mots仅在法语下显示。
在语言切换器区块中选择法语,显示的内容将依下列设置而变化(前面是设置,后面显示内容):
- Only current language and no language:Drupal(与语言无关)和Les mots(法语)
- Only current and default languages and no language:Drupal(语言无关),Welcome(英语),和Les mots(法语)
- Only default language and no language:Drupal(语言无关)和Welcome(英语)
- Only current language:Les mots(法语)
- All content:No language conditions apply:所有四个节点
如果我们在语言切换区块中选择荷兰语的话,则:
- Only current language and no language:Drupal(none)和Welkom(Dutch)
- Only current and default languages and no language:Drupal(none),Welcome(English)和Welkom(Dutch)
- Only default language and no language:Drupal(none)和Welcome(English)
- Only current language:Welkom(Dutch)
- All content:No language conditions apply:全部四个节点
举例用节点来演示是个简化的方法,但是这些设置将应用到站内的所有项目,包括菜单项,区块等等。
字符串
字符串模块为大多数国际化模块所必须。它本身不做什么事,但是当它与其他国际化模块组合使用的时候,它能将站内的各种文本转换成可翻译字符串然后添加到核心翻译界面中去。
全站范围内语言支持变量
Drupal站内有不少的文本与具体的节点没有任何关联。这些全站设置被保存在数据库中被看做变量。例如站点信息页中的站点名称、口号,或者用户设置下的 注册邮件模板。没有很简单的方法能将这一类文本放入普通的可译字符串界面。国际化模块可以专门告诉Drupal你想为这些变量提供翻译。不幸的是,要实现 这个,你需要编辑站点的settings.php文件。你给这些设置添加必要的信息后,你就可以使用通常的翻译界面来翻译了。我们将在下一节”操作:国际 化特征“中详细讲述。
模块助手
国际化模块同时与很多的核心模块共同来完成翻译:
菜单
Multilingual Menu module(多语言菜单模块)可以将你创建的任一菜单项放入翻 译界面的字符串列表中去。你可以指定菜单项的语言,它将依据你给内容显示设置的规则来显示。请你注意,没有这个模块,你也可以为每一个节点创建一个某一语 言下的菜单项,它同样遵循以上显示规则。所以,如果你仅是依据节点来建立菜单项,你就无需启用这个模块。如果你想菜单项不指向特定的节点,那这个模块将可 以让你创建你需要的翻译。
分类
Multilingual taxonomy(多语言分类)为你提供跟踪你的分类翻译的多个选择。当你创建一个新的词汇分类的时候,你可以考虑是否使用通常的翻译界面方式来本地化这 些分类项,是每种语言建立独立的分类项,还是整个分类词汇用一个语言。当你选择每种语言创建分类项的时候,你就可以为每一个分类项选择一种语言。在你创建 好分类项并且指定好语言后,你可以为它们创建关联。比如,分类项”cat“(指定给英语)和”le chat“(指定给法语)可以标记为同一分类项。
区块
多语言区块模块可以让你为每一区块选择语言。将语言分配给区块后,它将根据主要内容的显示设置来显示。对于你创建的区块,你也可以决定是否将其字符串放入翻译界面以实现区块文本的可译化。
用户资料
核心用户信息模块允许你在用户账户内添加字段。多语言用户资料模块将使得你所添加的用户字段属性,诸如名字、介绍等等,可译化。注意,它不会使用户输入的内容,属性值等变得可译。
投票
因为每一个翻译出来的投票实际都是一个新的节点,Drupal因此将单独为每一个节点计算投票数。多语言投票模块可以将多个翻译投票集合在一起以得到准确的投票结果,而不管你浏览的是哪个翻译语言下的投票。
同步化
国际化模块包中最后一个模块就是翻译同步化模块(Translation Synchronization)。这个模块可以让你的分类和节点字段在多个翻译之间实现同步。比如,你用三种语言发布了一篇博客,并且选择了一个分类 项,这个模块将保证如果你修改了其中一篇的分类项的话,其他两个也将同时修改。
如果你的分类词语言设置中选择是是”None“或者”Localize terms“,那分类词将只是从原来的节点中复制过来。如果你选择的是”Per language terms“,那么这个分类项将根据你的翻译恰当变化。

Comments
Post new comment