Thinkphp5.1多语言(默认English)

Thinkphp5.1多语言 Thinkphp5.1英文 Thinkphp设置语言 thinkphp lang

开启多语言检测,设置默认语言:

5c/47cc6625dd13a73776a65367c72dc1.png

然后你会发现在app.php里设置默认语言不起作用,需要修改 /thinkphp/library/think/Lang.php 里面的detect()这个方法,因为这个方法只检测里浏览器Accept-Language,只要这个值在你允许对列表里,它就直接默认了。所以app.php里设置了也不起作用,希望官方修正一下这个bug。

4c/1490948e74434b60ec115bf6082092.png


/**

     * 自动侦测设置获取语言选择

     * @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;

    }


注意加粗部分