thinkphp5 语言切换

本文介绍了解决ThinkPHP 5.0.10版本中无法从Cookie读取语言设置的问题,通过修改Lang.php中的detect方法实现语言选择功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前在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;
}

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值