您的位置:首页 > 编程语言 > PHP开发

CI框架源码阅读---------Lang.php

2013-03-12 09:36 465 查看
<?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 */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: