牛骨文教育服务平台(让学习变的简单)
<?php  if ( ! defined("BASEPATH")) exit("No direct script access allowed");
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 5.1.6 or newer
 *
 * @package		CodeIgniter
 * @author		ExpressionEngine Dev Team
 * @copyright	Copyright (c) 2008 - 2011, EllisLab, Inc.
 * @license		http://codeigniter.com/user_guide/license.html
 * @link		http://codeigniter.com
 * @since		Version 1.0
 * @filesource
 */

// ------------------------------------------------------------------------

/**
 * Language Class
 * 官方使用手册:http://codeigniter.org.cn/user_guide/libraries/language.html 
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Language
 * @author		ExpressionEngine Dev Team
 * @link		http://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
	 * 
	 * @access	public
	 */
	function __construct()
	{
		log_message("debug", "Language Class Initialized");
	}

	// --------------------------------------------------------------------

	/**
	 * Load a language file
	 * 加载语言包
	 * @access	public
	 * @param	mixed	the name of the language file to be loaded. Can be an array
	 *					要被加载的语言文件。
	 * @param	string	the language (english, etc.) 要使用的语言
	 * @param	bool	return loaded array of translations 直接返回语言包数组
	 *					不加入到$this->is_loaded和$this->language中去	
	 * @param 	bool	add suffix to $langfile 文件是否添加后缀
	 * @param 	string	alternative path to look for language file 语言包文件的自定义路径
	 * @return	mixed
	 */
	function load($langfile = "", $idiom = "", $return = FALSE, $add_suffix = TRUE, $alt_path = "")
	{
		// langfile 文件的.php 后缀去掉
		$langfile = str_replace(".php", "", $langfile);

		// 判断需不需要添加后缀如果需要
		// 将_lang. 去掉并再langfile后面添加_lang
		if ($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
	 * 获取一行文本
	 * @access	public
	 * @param	string	$line	the language line
	 * @return	string
	 */
	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 */