Core_I18n::setup
File: ./core/classes/i18n.class.php
public static function setup()
{
# 增加回调
Core::import_library_add_callback('I18n::import_lib_callback');
# 获取用户语言
$accept_language = I18n::accept_language();
$lang_key = implode('_', $accept_language);
# 根据类库加载信息获取key
$libs_key = array();
foreach (array_reverse(Core::$include_path) as $nslib=>$libs)
{
$libs = array_reverse($libs);
foreach ($libs as $k=>$path)
{
$libs_key[] = $libs.'.'.$k;
}
}
$libs_key = md5(implode(',', $libs_key));
$key = 'lang_cache_by_' . $libs_key . '_for_' . $lang_key;
# 获取缓存数据
$lang = Cache::instance(I18n::$cache_config)->get($key);
if ($lang)
{
I18n::$lang[Core::$project] = $lang;
I18n::$is_setup[Core::$project] = true;
return;
}
# 逆向排序,调整优先级
$accept_language = array_reverse($accept_language);
# 记录各个类库的解析后的内容
static $static_lib_array = array();
# 获取语言文件
$lang = array();
foreach (array_reverse(Core::$include_path) as $ns=>$libs)
{
$libs = array_reverse($libs);
foreach ($libs as $lib=>$path)
{
$nslib = $ns.'.'.$lib;
foreach($accept_language as $l)
{
if (isset($static_lib_array[$nslib][$l]))
{
$lang = array_merge($lang, $static_lib_array[$nslib][$l]);
}
else
{
$file = $path . 'i18n' . DS . $l . '.lang';
if (is_file($file))
{
$static_lib_array[$nslib][$l] = (array)@parse_ini_file($file);
}
else
{
$static_lib_array[$nslib][$l] = array();
}
# 合并语言包
if ($static_lib_array[$nslib][$l])
{
$lang = array_merge($lang, $static_lib_array[$nslib][$l]);
}
}
}
}
}
I18n::$lang[Core::$project] = $lang;
I18n::$is_setup[Core::$project] = true;
# 写缓存
Cache::instance(I18n::$cache_config)->set($key, $lang, '86400~172800,1/1000', Cache::TYPE_ADV_AGE);
}