TP5中的多语言,我们可以通过lang_switch_on这个来配置是否开启语言包切换,如果设置成false,按官方的意思是不启用语言包自动检测,加载配置文件中设置的默认语言包,不过最近在使用fastadmin时发现即便关闭了语言包切换检测,系统仍然会去检测语言包,直接导致的后果就是,如果浏览器的语言是英文,你的FA系统中默认语言是中文,就会出现无法正常读取语言包的问题,如果浏览器是中文,而默认语言设置成英文,则也会出现同样的问题。百思不得其解,首先我就去看了下是不是我的fa版本太低的问题,于是又去下载了一个新版本的fa,发现也存在这个问题。
后来我就找到了:thinkphplibrarythinkLang.php
这个文件 看了一下detect()
这个方法。
发现detect
方法中似乎没有对配置文件中的lang_switch_on
开关做判断,然后尝试加了一个上去,问题就解决了。下面贴下代码,希望能帮助有这个需求的童鞋少走弯路。
public static function detect() { // 自动侦测设置获取语言选择 $langSet = ''; //语言切换开关没有打开时,不自动进行语言检测 if(Config::get('lang_switch_on') === true) { 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-zd-]+)/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; } }else{ // 合法的语言 self::$range = Config::get('default_lang'); } return self::$range; }
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。