| <?php |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| namespace think; |
|
|
| class Lang |
| { |
| |
| |
| |
| private static $lang = []; |
|
|
| |
| |
| |
| private static $range = 'zh-cn'; |
|
|
| |
| |
| |
| protected static $langDetectVar = 'lang'; |
|
|
| |
| |
| |
| protected static $langCookieVar = 'think_var'; |
|
|
| |
| |
| |
| protected static $langCookieExpire = 3600; |
|
|
| |
| |
| |
| protected static $allowLangList = []; |
|
|
| |
| |
| |
| protected static $acceptLanguage = ['zh-hans-cn' => 'zh-cn']; |
|
|
| |
| |
| |
| |
| |
| |
| public static function range($range = '') |
| { |
| if ($range) { |
| self::$range = $range; |
| } |
|
|
| return self::$range; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public static function set($name, $value = null, $range = '') |
| { |
| $range = $range ?: self::$range; |
|
|
| if (!isset(self::$lang[$range])) { |
| self::$lang[$range] = []; |
| } |
|
|
| if (is_array($name)) { |
| return self::$lang[$range] = array_change_key_case($name) + self::$lang[$range]; |
| } |
|
|
| return self::$lang[$range][strtolower($name)] = $value; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public static function load($file, $range = '') |
| { |
| $range = $range ?: self::$range; |
| $file = is_string($file) ? [$file] : $file; |
|
|
| if (!isset(self::$lang[$range])) { |
| self::$lang[$range] = []; |
| } |
|
|
| $lang = []; |
|
|
| foreach ($file as $_file) { |
| if (is_file($_file)) { |
| |
| App::$debug && Log::record('[ LANG ] ' . $_file, 'info'); |
|
|
| $_lang = include $_file; |
|
|
| if (is_array($_lang)) { |
| $lang = array_change_key_case($_lang) + $lang; |
| } |
| } |
| } |
|
|
| if (!empty($lang)) { |
| self::$lang[$range] = $lang + self::$lang[$range]; |
| } |
|
|
| return self::$lang[$range]; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public static function has($name, $range = '') |
| { |
| $range = $range ?: self::$range; |
|
|
| return isset(self::$lang[$range][strtolower($name)]); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public static function get($name = null, $vars = [], $range = '') |
| { |
| $range = $range ?: self::$range; |
|
|
| |
| if (empty($name)) { |
| return self::$lang[$range]; |
| } |
|
|
| $key = strtolower($name); |
| $value = isset(self::$lang[$range][$key]) ? self::$lang[$range][$key] : $name; |
|
|
| |
| if (!empty($vars) && is_array($vars)) { |
| |
| |
| |
| |
| |
| if (key($vars) === 0) { |
| |
| array_unshift($vars, $value); |
| $value = call_user_func_array('sprintf', $vars); |
| } else { |
| |
| $replace = array_keys($vars); |
| foreach ($replace as &$v) { |
| $v = "{:{$v}}"; |
| } |
| $value = str_replace($replace, $vars, $value); |
| } |
|
|
| } |
|
|
| return $value; |
| } |
|
|
| |
| |
| |
| |
| |
| public static function detect() |
| { |
| $langSet = ''; |
|
|
| if (isset($_GET[self::$langDetectVar])) { |
| |
| $langSet = strtolower($_GET[self::$langDetectVar]); |
| } elseif (isset($_COOKIE[self::$langCookieVar])) { |
| |
| $langSet = strtolower($_COOKIE[self::$langCookieVar]); |
| } elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { |
| |
| preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); |
| $langSet = strtolower($matches[1]); |
| $acceptLangs = Config::get('header_accept_lang'); |
|
|
| if (isset($acceptLangs[$langSet])) { |
| $langSet = $acceptLangs[$langSet]; |
| } elseif (isset(self::$acceptLanguage[$langSet])) { |
| $langSet = self::$acceptLanguage[$langSet]; |
| } |
| } |
|
|
| |
| if (empty(self::$allowLangList) || in_array($langSet, self::$allowLangList)) { |
| self::$range = $langSet ?: self::$range; |
| } |
|
|
| return self::$range; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public static function setLangDetectVar($var) |
| { |
| self::$langDetectVar = $var; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public static function setLangCookieVar($var) |
| { |
| self::$langCookieVar = $var; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public static function setLangCookieExpire($expire) |
| { |
| self::$langCookieExpire = $expire; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public static function setAllowLangList($list) |
| { |
| self::$allowLangList = $list; |
| } |
| } |
|
|