按照手册配置,默认语言没有反应,跳转页面之后,也没有检测当前的语言,很尴尬!!!
//最大的bug在这里
1.请用下面代码覆盖 thinkPhp/library/think/Lang.php 里面的detect()自动检测语言方法
/** * 自动侦测设置获取语言选择 * @access public * @return string */ public static function detect() { // 自动侦测设置获取语言选择 $langSet = Config::get('default_lang'); if (isset($_GET[self::$langDetectVar])) { // url中设置了语言变量 $langSet = strtolower($_GET[self::$langDetectVar]); Cookie::set(self::$langCookieVar, $langSet, 3600); } elseif (Cookie::get(self::$langCookieVar)) { // 获取上次用户的选择 $langSet = strtolower(Cookie::get(self::$langCookieVar)); } elseif ($langSet) { // 获取默认语言 Cookie::set(self::$langCookieVar, $langSet, 3600); } elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { // 自动侦测浏览器语言 preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); $langSet = strtolower($matches[1]); Cookie::set(self::$langCookieVar, $langSet, 3600); } if (empty(self::$allowLangList) || in_array($langSet, self::$allowLangList)) { // 合法的语言 self::$range = $langSet; } return self::$range; }
恭喜你,完成这步,你已经成功一大半了.
2. 后面的按照手册配置,基本上就可以了,以下是控制器方法代码
public function lang(){ $lang = input('?get.lang') ? input('get.lang') : 'zh'; switch ($lang) { case 'zh': cookie('think_var', 'zh'); break; case 'en': cookie('think_var', 'en'); break; //其它语言 default: cookie('think_var','zh'); } }
3.当然,还需要配置config.php,如下:
'lang_switch_on' => true, // 默认全局过滤方法 用逗号分隔多个 'default_filter' => '', // 默认语言 'default_lang' => 'zh', //允许的语言列表 'lang_list' => ['zh','cht','en'], 'lang_auto_detect' => true, 'VAR_LANGUAGE' => 'lang', // 默认语言切换变量
4.application下新建Lang文件夹配置好你所需要的语言:
文件名和config配置中的lang_list保持一致
5.语言包内容,是一个return array(所有语种返回数组的键名保持一致,如下是中文和英文):
return array( //------------头部------------------- "HEANDER_LANG"=>"中文简体", "HEANDER_LANG_CHT"=>"中文繁篦", "HEANDER_LANG_EN"=>"English", "HEADER_REG"=>"注册", "HEADER_LOGIN"=>"登录", .....); return array( //------------头部------------------- "HEANDER_LANG"=>"中文简体", "HEANDER_LANG_CHT"=>"中文繁篦", "HEANDER_LANG_EN"=>"English", "HEADER_REG"=>"Register", "HEADER_LOGIN"=>"Login", ......);
6.以上这些都配置好了之后,就可以在视图上通过lang()进行替换操作了
<ul> <li><a href="?lang=zh">{:lang('HEANDER_LANG')}</a></li> //中文 <li><a href="?lang=cht">{:lang('HEANDER_LANG_CHT')}</a></li> //繁体 <li><a href="?lang=en">{:lang('HEANDER_LANG_EN')}</a></li> //英文 </ul>
可以通过ajax去访问控制器中的lang方法(第2步)进行切换语言
大功告成,希望对你有用,告辞!
发表评论: