129 lines
3.2 KiB
PHP
Executable File
129 lines
3.2 KiB
PHP
Executable File
<?php
|
|
|
|
function LNG($key){
|
|
static $isInit = false;
|
|
if (func_num_args() == 1) {
|
|
return I18n::get($key);
|
|
} else {
|
|
$args = func_get_args();
|
|
array_shift($args);
|
|
return vsprintf(I18n::get($key), $args);
|
|
}
|
|
}
|
|
|
|
class I18n{
|
|
private static $loaded = false;
|
|
private static $lang = NULL;
|
|
public static $langType = NULL;
|
|
public static function load(){}
|
|
public static function defaultLang(){
|
|
if(isset($GLOBALS['config']['settings']['language'])){
|
|
return $GLOBALS['config']['settings']['language'];
|
|
}
|
|
$langDefault = 'zh-CN';//zh-CN en;
|
|
$lang = $langDefault;
|
|
$arr = $GLOBALS['config']['settingAll']['language'];
|
|
$langs = array();
|
|
foreach ($arr as $key => $value) {
|
|
$langs[$key] = $key;
|
|
}
|
|
$langs['zh'] = 'zh-CN'; //增加大小写对应关系
|
|
$langs['zh-tw'] = 'zh-TW';
|
|
|
|
$acceptLanguage = array();
|
|
if(!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
|
|
$httpLang = $langDefault;
|
|
}else{
|
|
$httpLang = str_replace("_","-",strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));
|
|
}
|
|
preg_match_all('~([-a-z]+)(;q=([0-9.]+))?~',$httpLang,$matches,PREG_SET_ORDER);
|
|
foreach ($matches as $match) {
|
|
$acceptLanguage[$match[1]] = (isset($match[3]) ? $match[3] : 1);
|
|
}
|
|
arsort($acceptLanguage);
|
|
foreach ($acceptLanguage as $key => $q) {
|
|
if (isset($langs[$key])) {
|
|
$lang = $langs[$key];break;
|
|
}
|
|
$key = preg_replace('~-.*~','', $key);
|
|
if (!isset($acceptLanguage[$key]) && isset($langs[$key])) {
|
|
$lang = $langs[$key];break;
|
|
}
|
|
}
|
|
return $lang;
|
|
}
|
|
|
|
public static function getAll(){
|
|
self::init();
|
|
return self::$lang;
|
|
}
|
|
public static function getType(){
|
|
self::init();
|
|
return self::$langType;
|
|
}
|
|
|
|
public static function init(){
|
|
if(self::$loaded) return;
|
|
if(isset($GLOBALS['in']['language'])){
|
|
return self::setLanguage($GLOBALS['in']['language']);
|
|
}
|
|
$cookieLang = 'kodUserLanguage';
|
|
if (isset($_COOKIE[$cookieLang])) {
|
|
$lang = $_COOKIE[$cookieLang];
|
|
}else{
|
|
$lang = self::defaultLang();
|
|
}
|
|
//兼容旧版本
|
|
if($lang == 'zh_CN') $lang = 'zh-CN';
|
|
if($lang == 'zh_TW') $lang = 'zh-TW';
|
|
|
|
if(isset($GLOBALS['config']['settings']['language'])){
|
|
$lang = $GLOBALS['config']['settings']['language'];
|
|
}
|
|
self::setLanguage($lang);
|
|
}
|
|
|
|
private static function setLanguage($lang){
|
|
if(!preg_match('/^[0-9a-zA-z_\-]+$/', $lang)){
|
|
$lang = 'zh-CN';
|
|
}
|
|
$langFile = LANGUAGE_PATH.$lang.'/index.php';
|
|
if(!file_exists($langFile)){//allow remove some I18n folder
|
|
$lang = 'zh-CN';
|
|
$langFile = LANGUAGE_PATH.$lang.'/index.php';
|
|
}
|
|
|
|
self::$langType = $lang;
|
|
self::$lang = include($langFile);
|
|
self::$loaded = true;
|
|
$GLOBALS['L'] = &self::$lang;
|
|
}
|
|
|
|
public static function get($key){
|
|
self::init();
|
|
if(!isset(self::$lang[$key])) return $key;
|
|
if (func_num_args() == 1) {
|
|
return self::$lang[$key];
|
|
} else {
|
|
$args = func_get_args();
|
|
array_shift($args);
|
|
return vsprintf(self::$lang[$key], $args);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 添加多语言;
|
|
* @param [type] $args [description]
|
|
*/
|
|
public static function set($array,$value=''){
|
|
self::init();
|
|
if(is_string($array)){
|
|
return self::$lang[$array] = $value;
|
|
}
|
|
if(!is_array($array)) return;
|
|
foreach ($array as $key => $value) {
|
|
self::$lang[$key] = $value;
|
|
}
|
|
}
|
|
}
|