You are here

Drupal专业开发指南 第18章 用户界面翻译

g089h515r806 的头像
Submitted by g089h515r806 on 星期二, 2009-08-25 16:02

 

Drupal的界面是由字儿、短语、和句子组成的,用来向用户传递信息。在接下来的部分中,你将看到如何修改它们。我们的例子将集中于字符串替换,同时我们需要理解----翻译就是建立在字符串替换的基础之上的。
 
字符串
    从一个编程的观点来看,一个字符串就是一系列的字符,比如5位字符的字符串Hello。在Drupal中,字符串的翻译构成了用户界面翻译的基础。当Drupal准备一个用来输出的字符串时,它将检查这个字符串是否需要被翻译一下,如果启用了英语,那么将显示“Hello”;如果启用了法语,那么将显示“Bonjour”。让我们看一下这是怎么实现的。
 
使用t()翻译字符串
    在Drupal中显示给终端用户的所有字符串,都须经过t()函数的处理;这个就是Drupal的翻译函数,由于经常使用,为了方便起见,所以将它简写为“t”。
 
注意Drupal中,有些地方隐含的使用了t(),比如传递给watchdog()的字符串,或者菜单钩子中的标题和描述。复数形式使用format_plural()来翻译,该函数负责调用t()(参看http://api.drupal.org/api/function/format_plural/6)。
 
    t()函数中特定于本地的部分,如下所示:
 
function t($string, $args = array(), $langcode = NULL) {
    global $language;
    static $custom_strings;
 
    $langcode = isset($langcode) ? $langcode : $language->language;
 
    // First, check for an array of customized strings. If present, use the array
    // *instead of* database lookups. This is a high performance way to provide a
    // handful of string replacements. See settings.php for examples.
    // Cache the $custom_strings variable to improve performance.
    if (!isset($custom_strings[$langcode])) {
        $custom_strings[$langcode] = variable_get('locale_custom_strings_'.
            $langcode, array());
    }
    // Custom strings work for English too, even if locale module is disabled.
    if (isset($custom_strings[$langcode][$string])) {
        $string = $custom_strings[$langcode][$string];
    }
    // Translate with locale module if enabled.
    elseif (function_exists('locale') && $langcode != 'en') {
        $string = locale($string, $langcode);
    }
    if (empty($args)) {
        return $string;
    }
    ...
}
 
    除了负责翻译以外,t()函数还负责向字符串中的占位符插入相应的值。这些值通常是用户提供的输入,它们在显示以前,必须经过文本转换处理。
 
t('Hello, my name is %name.', array('%name' => 'John');
Hello, my name is John.
 
    文本中待插入的位置是由占位符指示的,而待插入的文本是一个键值数组。这个文本转换处理对Drupal的安全性非常重要(更多信息,可参看第20章)。图18-1向你展示了t()函数是如何处理翻译的;图20-1向你展示了t()函数是如何处理占位符的。
18-1. t()函数是如何处理翻译和占位符插入的,这里假定当前语言为法语。
 
使用自定义字符串替换内置的字符串
    用户界面的翻译,主要就是将一个字符串替换为另一个。让我们从简单的开始,仅仅选择修改几个字符串。对于翻译问题,有多种解决方案。我们将从最简单的入手,然后逐步深入。第一种方案涉及到编辑你的设置文件,而第2种方案则涉及到本地模块。让我们首先在面包屑中实现一个简单的字符串替换,然后再将Blog 替换为Journal
 

老葛的Drupal培训班 Think in Drupal

Drupal版本:

评论

biglazy 的头像

这个节点是重复的,跟1304内容一样,前后两页的导航也有问题;