默认语言设不生效,八成是lang_switch_on未开启或default_lang未正确配置在config/app.php中;它必须是字符串如'zh-cn',且需与lang_switch_on=>true共存,否则无效。

默认语言设不生效,八成是 lang_switch_on 没开,或者 default_lang 放错了配置文件位置。ThinkPHP 不会自动读取你随手写的配置项,必须在正确入口、正确时机加载。
default_lang 配置必须写在 app.php 里
ThinkPHP 6+ 的多语言主配置统一收口在 config/app.php 中。其他地方(比如自建的 lang.php 或旧版的 config.php)写的 default_lang 基本无效。
-
default_lang是字符串,不是数组,值必须是语言代码,如'zh-cn'或'en-us' - 必须和
lang_switch_on => true同时存在,否则框架压根不走多语言逻辑分支 - 如果项目用了多应用模式(
app/multi),每个应用需单独配自己的app.php
lang_switch_on 为 false 时 default_lang 形同虚设
当 lang_switch_on 关闭,框架跳过所有语言检测流程,直接用内置硬编码语言(通常是 en-us),此时无论 default_lang 写啥都没用。
- 开启后,
default_lang才真正成为 fallback 值:URL、Cookie、Accept-Language 都没匹配到允许语言时,才兜底用它 - 若
lang_list未显式声明支持该语言(比如写了['en-us']却设default_lang为'zh-cn'),default_lang会被忽略 - 检查是否生效:打印
Lang::getLang(),返回值应与你设的default_lang一致
浏览器 Accept-Language 优先级高于 default_lang
即使开了 lang_switch_on,只要用户浏览器发来的 HTTP_ACCEPT_LANGUAGE 包含你允许的语言(比如 zh-CN,zh;q=0.9),框架就会直接选第一个匹配项,跳过 default_lang。
- 想强制走默认语言?删掉
lang_switch_on,或把lang_list设为空数组(但会禁用全部切换) - 更稳妥的做法是:在中间件或控制器开头手动调用
Lang::setLang('zh-cn'),覆盖自动检测结果 - 调试时可用
curl -H "Accept-Language: en-US,en;q=0.9" http://your-site/模拟不同浏览器请求
最容易被忽略的是语言包路径和键名一致性——default_lang 设了 zh-cn,但 lang/zh-cn.php 文件不存在,或里面没定义对应 key,那页面照样显示英文原词。别只盯配置,语言包文件本身才是翻译落地的最后一环。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











