/** * 初始化多语言包,判断优先级:GET参数 > COOKIE > 浏览器ACCEPT_LANGUAGE > 默认zh_CN * @param Yaf_Dispatcher $dispatcher */ public function _initI18n(Yaf_Dispatcher $dispatcher) { /*{{{*/ if ($this->config['application']['site']['I18n']) { $lang_map = array('zh-cn' => 'zh_CN', 'zh-tw' => 'zh_TW', 'en-us' => 'en_US'); //检查GET参数中的lang if (isset($_GET['lang']) && isset($lang_map[$_GET['lang']])) { $lang = $lang_map[$_GET['lang']]; if (isset($_COOKIE['lang']) && $_GET['lang'] != $_COOKIE['lang'] || !isset($_COOKIE['lang'])) { //若设置了lang,则写入cookie Tools_help::setcookie('lang', $_GET['lang'], 86400 * 365); } } //若没有,检查COOKIE中的lang if (!isset($lang) && isset($_COOKIE['lang'])) { $lang = $lang_map[$_COOKIE['lang']]; } //若没有,检查浏览器传的ACCEPT_LANGUAGE中首选 if (!isset($lang) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { //"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3" $arr = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); foreach ($arr as $item) { $temp = explode(';', $item); if (isset($temp[0]) && isset($lang_map[$temp[0]])) { $lang = $lang_map[$temp[0]]; } break; } } //没有则设置为zh_CN if (!isset($lang) || !in_array($lang, array_values($lang_map))) { $lang = $lang_map['zh-cn']; } // 加载对应语言包 $lang_arr = (require APP_PATH . 'conf/lang/' . $lang . '.php'); Yaf_Registry::set('lang_arr', $lang_arr); // 记录 Yaf_Registry::set('lang', $lang); } }