语言检查的主要方法
function checkLanguage()
{
$cookie = ModelFactory::M('Cookie');
$lang = '';
if($GLOBALS['CONF']['LANG_SWITCH_ON'] && isset($_GET['lang']) && in_array($_GET['lang'], explode(',', $GLOBALS['CONF']['LANG_LIST']))){
$lang = strtolower($_GET['lang']);
$cookie->set('lang', $_GET['lang'], 3600*12);
} else if($cookie->get('lang')) {
$lang = $cookie->get('lang');
} else if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
if(in_array(strtolower($matches[1]), explode(',',$GLOBALS['CONF']['LANG_LIST']))){
$lang = $matches[1];
} else {
$lang = $GLOBALS['CONF']['DEFAULT_LANG'];
}
$cookie->set('lang', strtolower($lang), 3600*12);
}
if(empty($lang)) $lang = $GLOBALS['CONF']['DEFAULT_LANG'];
define('LANG_SET', strtolower($lang));
$file = '.' . ASSETS . 'lang' . DS . LANG_SET . '.php';
if(is_file($file) && L(include $file)){
L(include $file);
}
}
config.php
return array(
'DEFAULT_CHARSET' => 'utf-8',
'DEFAULT_TIMEZONE' => 'PRC',
'DEBUG' => true,
'DEFAULT_LANG' => 'zh-cn',
'LANG_LIST' => 'zh-cn,zh-hk',
'LANG_SWITCH_ON' => true,
'LANG_AUTO_DETECT' => true,
....
)
简化前端调用方法:
function L($name=null, $value=null)
{
static $_lang = array();
if (empty($name))
return $_lang;
if (is_string($name)) {
$name = strtoupper($name);
if (is_null($value)){
return isset($_lang[$name]) ? $_lang[$name] : $name;
}elseif(is_array($value)){
$replace = array_keys($value);
foreach($replace as &$v){
$v = '{$'.$v.'}';
}
return str_replace($replace,$value,isset($_lang[$name]) ? $_lang[$name] : $name);
}
$_lang[$name] = $value;
return null;
}
if (is_array($name))
$_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));
return null;
}
前端页面使用:
<?php echo L('news')['title']; ?>