CI框架源码阅读---------Lang.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');/** * CodeIgniter * * An open source application development framework for PHP 5.1.6 or newer * * @packageCodeIgniter * @authorExpressionEngine Dev Team * @copyrightCopyright (c) 2008 - 2011, EllisLab, Inc. * @licensehttp://codeigniter.com/user_guide/license.html * @linkhttp://codeigniter.com * @sinceVersion 1.0 * @filesource */// ------------------------------------/** * Language Class * 官方使用手册:http://codeigniter.org.cn/user_guide/libraries/language.html * @packageCodeIgniter * @subpackageLibraries * @categoryLanguage * @authorExpressionEngine Dev Team * @linkhttp://codeigniter.com/user_guide/libraries/language.html */class CI_Lang {/** * List of translations * 语言包列表 * @var array */var $language= array();/** * List of loaded language files * 已经被加载的语言包列表 * @var array */var $is_loaded= array();/** * Constructor * * @accesspublic */function __construct(){log_message('debug', "Language Class Initialized");}// --------------------------------/** * Load a language file * 加载语言包 * @accesspublic * @parammixedthe name of the language file to be loaded. Can be an array *要被加载的语言文件。 * @paramstringthe language (english, etc.) 要使用的语言 * @paramboolreturn loaded array of translations 直接返回语言包数组 *不加入到$this->is_loaded和$this->language中去 * @param booladd suffix to $langfile 文件是否添加后缀 * @param stringalternative path to look for language file 语言包文件的自定义路径 * @returnmixed */function load($langfile = '', $idiom = '', $return = FALSE, $add_suffix = TRUE, $alt_path = ''){// langfile 文件的.php 后缀去掉$langfile = str_replace('.php', '', $langfile);// 判断需不需要添加后缀如果需要// 将_lang. 去掉并再langfile后面添加_langif ($add_suffix == TRUE){$langfile = str_replace('_lang.', '', $langfile).'_lang';}// 为langfile添加.php后缀$langfile .= '.php';// 判断当前文件是否被加载过if (in_array($langfile, $this->is_loaded, TRUE)){return;}// 获取配置文件的数据$config =& get_config();// 如果要使用的语言为空// 那么 我们将从$config中获取if ($idiom == ''){$deft_lang = ( ! isset($config['language'])) ? 'english' : $config['language'];$idiom = ($deft_lang == '') ? 'english' : $deft_lang;}// Determine where the language file is and load it// 在自定义路径下寻找语言包并加载if ($alt_path != '' && file_exists($alt_path.'language/'.$idiom.'/'.$langfile)){include($alt_path.'language/'.$idiom.'/'.$langfile);}else{// 如果自定义路径下没找到调用get_instance()->load->get_package_paths(TRUE)// 在包路径下寻找// get_package_paths这个函数在loader.php中$found = FALSE;foreach (get_instance()->load->get_package_paths(TRUE) as $package_path){if (file_exists($package_path.'language/'.$idiom.'/'.$langfile)){include($package_path.'language/'.$idiom.'/'.$langfile);$found = TRUE;break;}}// 如果还没找到就只能报错了//if ($found !== TRUE){show_error('Unable to load the requested language file: language/'.$idiom.'/'.$langfile);}}if ( ! isset($lang)){log_message('error', 'Language file contains no data: language/'.$idiom.'/'.$langfile);return;}if ($return == TRUE){return $lang;}$this->is_loaded[] = $langfile;$this->language = array_merge($this->language, $lang);unset($lang);log_message('debug', 'Language file loaded: language/'.$idiom.'/'.$langfile);return TRUE;}// --------------------------------/** * Fetch a single line of text from the language array * 获取一行文本 * @accesspublic * @paramstring$linethe language line * @returnstring */function line($line = ''){/* *$this->language 的样子 *$lang['error_email_missing'] = "You must submit an email address"; *$lang['error_url_missing'] = "You must submit a URL"; *$lang['error_username_missing'] = "You must submit a username"; */$value = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line];// Because killer robots like unicorns!if ($value === FALSE){log_message('error', 'Could not find the language line "'.$line.'"');}return $value;}}// END Language Class/* End of file Lang.php *//* Location: ./system/core/Lang.php */