开启多语言检测,设置默认语言:
然后你会发现在app.php里设置默认语言不起作用,需要修改 /thinkphp/library/think/Lang.php 里面的detect()这个方法,因为这个方法只检测里浏览器Accept-Language,只要这个值在你允许对列表里,它就直接默认了。所以app.php里设置了也不起作用,希望官方修正一下这个bug。
/**
* 自动侦测设置获取语言选择
* @access public
* @return string
*/
public function detect()
{
// 自动侦测设置获取语言选择
$langSet = config('app.default_lang');//这里读取app.php设置的默认值
if (isset($_GET[$this->langDetectVar])) {
// url中设置了语言变量
$langSet = strtolower($_GET[$this->langDetectVar]);
} elseif (isset($_COOKIE[$this->langCookieVar])) {
// Cookie中设置了语言变量
$langSet = strtolower($_COOKIE[$this->langCookieVar]);
} elseif($langSet){//这一步判断,一定要在isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])之前判断
cookie($this->langCookieVar, $langSet);
} elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
// 自动侦测浏览器语言
preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
$langSet = strtolower($matches[1]);
if (isset($this->acceptLanguage[$langSet])) {
$langSet = $this->acceptLanguage[$langSet];
}
}
if (empty($this->allowLangList) || in_array($langSet, $this->allowLangList)) {
// 合法的语言
$this->range = $langSet ?: $this->range;
}
return $this->range;
}
注意加粗部分