You are here

9 语言阶段

admin 的头像
Submitted by admin on 星期五, 2015-07-24 09:54

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

我们来看阶段6,也就是语言阶段,对应的代码:

        case DRUPAL_BOOTSTRAP_LANGUAGE:

          drupal_language_initialize();

          break;

在这里,Drupal将这个阶段的工作委托给了drupal_language_initialize函数。我们通过文本查找,很快就找到了这个函数的定义:

/**

 * Initializes all the defined language types.

 */

function drupal_language_initialize() {

  $types = language_types();

 

  // Ensure the language is correctly returned, even without multilanguage

  // support. Also make sure we have a $language fallback, in case a language

  // negotiation callback needs to do a full bootstrap.

  // Useful for eg. XML/HTML 'lang' attributes.

  $default = language_default();

  foreach ($types as $type) {

    $GLOBALS[$type] = $default;

  }

  if (drupal_multilingual()) {

    include_once DRUPAL_ROOT . '/includes/language.inc';

    foreach ($types as $type) {

      $GLOBALS[$type] = language_initialize($type);

    }

    // Allow modules to react on language system initialization in multilingual

    // environments.

    bootstrap_invoke_all('language_init');

  }

}

在这里,language_types函数用来获取所有的语言类型;language_default函数用来获取默认语言。这里的语言类型包括三类:

/**

 * The type of language used to define the content language.

 */

define('LANGUAGE_TYPE_CONTENT', 'language_content');

 

/**

 * The type of language used to select the user interface.

 */

define('LANGUAGE_TYPE_INTERFACE', 'language');

 

/**

 * The type of language used for URLs.

 */

define('LANGUAGE_TYPE_URL', 'language_url');

我刚开始以为,这里是获取所有的语言呢。后来往下细看了一下,原来的想法不对。注意这里是语言类型,它里面包括三种类型,界面、内容、URLdrupal_multilingual用来判断是否是多语言,判断的标准是启用的语言数量是否大于1,对于中文用户来说,我们通常启用简体中文,以及默认的英文,所以这里的判断应该为真。再往下就是加载includes/language.inc,为每种语言类型初始化。最后触发hook_language_init,给第三方模块一个交互的机会。


Drupal版本: