thinkphp5框架代码中多语言功能的修改

thinkphp框架版本及修改文件

修改内容

  1. 取消cookie存入语言设置功能
  2. Lang.php 中增加 private static $acceptLanguage = ['zh-hans-cn'=>'zh-cn'];
  3. 增加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;
    }
仅有 1 条评论
  1. 百

    不错

添加新评论