Пример #1
0
 /**
  * 获取$accept_language
  *
  * @return array
  */
 protected static function accept_language()
 {
     if (null !== self::$accept_language) {
         return self::$accept_language;
     }
     if (self::$core_initialized && ($local_cookie_name = Core::config('local_lang_cookie_name')) && isset($_COOKIE[$local_cookie_name]) && preg_match('#[a-z0-9\\-_]+#i', $_COOKIE[$local_cookie_name])) {
         # 读取COOKIE中的语言包设置
         $accept_language = (string) $_COOKIE[$local_cookie_name];
     } elseif (self::$core_initialized && ($lang_config = Core::config('lang')) && $lang_config !== 'auto') {
         # 系统设置的语言包
         $accept_language = explode(',', $lang_config);
     } else {
         # 客户端语言包
         $language = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : null;
         $accept_language = array();
         # 匹配语言设置
         if ($language && false === strpos($language, ';')) {
             # zh-cn
             if (preg_match('#^([a-z]+(?:\\-[a-z]+)?),#i', $language, $m)) {
                 $accept_language = array(rtrim(strtolower($language), ','));
             } else {
                 $accept_language = array(strtolower($language));
             }
         } elseif ($language) {
             $language = strtolower(trim(str_replace(',', ';', preg_replace('#(,)?q=[0-9\\.]+(,)?#', '', $language)), ';'));
             $accept_language = explode(';', $language);
             $accept_language = array_values(array_slice($accept_language, 0, 4));
             //只取前4个语言设置
         }
         if (self::$core_initialized && ($default_lang = Core::config('default_lang')) && !in_array($default_lang, $accept_language)) {
             $accept_language[] = $default_lang;
         }
         /*
         $accept_language 整理之前
         Array
         (
             [0] => ko-kr
             [1] => en-us
             [2] => zh-cn
         )
         $accept_language 整理之后
         Array
         (
             [0] => ko-kr
             [1] => ko
             [2] => en-us
             [3] => en
             [4] => zh-cn
             [5] => zh
         )
         */
         $renew_accept_language = array();
         foreach ($accept_language as $item) {
             $sub_lang = explode('-', $item);
             $renew_accept_language[] = $item;
             if (count($sub_lang) > 1) {
                 $renew_accept_language[] = $sub_lang[0];
             }
         }
         $accept_language = array_unique($renew_accept_language);
     }
     self::$accept_language = $accept_language;
     if (IS_DEBUG) {
         Core::debug()->info(self::$accept_language, 'language');
     }
     return self::$accept_language;
 }
Пример #2
0
 /**
  * 加载语言包文件
  *
  * @link http://www.php.net/manual/en/function.parse-ini-file.php
  * @return Core_I18n
  */
 public function load()
 {
     $langdata = array();
     $files = Core::find_file('i18n', $this->lang, '.lang');
     if ($files) {
         $ext_len = strlen(EXT);
         if (count($files) > 1) {
             krsort($files);
             //逆向排序
         }
         foreach ($files as $langfile) {
             if (substr($langfile, -$ext_len) === EXT) {
                 $lang = Core_I18n::_include_lang_file($langfile);
             } else {
                 $lang = @parse_ini_file($langfile);
             }
             if (is_array($lang)) {
                 $langdata = array_merge($langdata, $lang);
             }
         }
     }
     Core_I18n::$data[$this->lang] = $langdata;
     return $this;
 }