欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

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

程序员文章站 2024-01-30 22:18:22
...
[php]

/**

* 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 */