thinkphp5 语言切换

目前在TP5.0.10版本仍然有无法从Cookie中读取语言标识,在5.0.7之前的版本没这个问题,这里需要修复到TP5中Lang.php的代码,具体文件位于thinkphp/library/think/Lang.php,修改第155行的detect方法,修改为:

public static function detect()
{
	// 自动侦测设置获取语言选择
	$langSet = '';

	if (isset($_GET[self::$langDetectVar])) {
		// url中设置了语言变量
		$langSet = strtolower($_GET[self::$langDetectVar]);
		Cookie::set(self::$langCookieVar, $langSet, self::$langCookieExpire);
	} elseif (isset($_COOKIE[self::$langCookieVar])) {
		// Cookie中设置了语言变量
		$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;
}

保存后,再尝试切换语言即可生效!


你可能感兴趣的:(PHP)