thinkphp框架版本及修改文件
- top-think/framework : 5.0.7
- 修改文件 :https://github.com/top-think/framework/blob/master/library/think/Lang.php
修改内容
- 取消cookie存入语言设置功能
- Lang.php 中增加 private static $acceptLanguage = ['zh-hans-cn'=>'zh-cn'];
- 增加Accept-Language 转义功能
修改理由
1.取消cookie存入语言设置功能
客户端在中文语言环境下调接口,tp将语言设置存入cookie。此后,修改系统语言为英文,再次调接口,因为此时tp是调用的cookie中的语言设置,所以依然是中文,即客户端不能即时的修改语言。
2.增加Accept-Language 转义功能
ios客户端从ios系统中拿到的中文语言环境变量是zh-hans-us,原有的detect()方法不能将其转义为zh-ch。
增加Accept-Language 转义功能,可以手动设置请求头对应的语言包,原有的zh-hans-cn的转义作为默认转义,放置在self::$acceptLanguage变量中
修改后的detect()方法如下
public static function detect()
{
// 自动侦测设置获取语言选择
$langSet = '';
if (isset($_GET[self::$langDetectVar])) {
// url中设置了语言变量
$langSet = strtolower($_GET[self::$langDetectVar]);
}
elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
// 自动侦测浏览器语言
preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
$langSet = strtolower($matches[1]);
$header_accept_lang_config = Config::get('header_accept_lang');
if(isset($header_accept_lang_config[$langSet])){
$langSet =$header_accept_lang_config[$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;
}
不错