ThinkPHP6.0多语言配置需满足三要素:语言包严格按app/lang/zh-cn/common.php等小写路径存放;config/lang.php中配置default_lang、allow_lang_list等关键项;启用LoadLangPack中间件以自动检测并加载语言包。

ThinkPHP6.0 多语言配置核心在于三件事:语言包存放规范、配置文件正确设置、中间件启用时机。不按规则放文件或晚一步设语言,翻译就无效。
语言包路径和命名必须严格匹配
语言包统一放在 app/lang/ 目录下(单应用模式),按小写语言码建子目录,例如:
— app/lang/zh-cn/
— app/lang/en-us/
每个子目录内放 PHP 文件,最常用的是 common.php,内容必须是返回数组:
return ['hello' => '你好', 'welcome_to' => '欢迎来到 {name}'];
常见错误:
• 用大写命名如 zh_CN.php 或 EN-US.php → ThinkPHP 忽略不报错
• 把语言包放进 config/lang.php → 完全不加载
• 放在 app/extra/ 或 runtime/lang/ → 不识别
配置文件 config/lang.php 要配全关键项
该文件控制多语言行为逻辑,至少需明确以下几项:
-
default_lang:默认语言,如
'zh-cn' -
allow_lang_list:允许切换的语言白名单,如
['zh-cn', 'en-us'](不在列表中会 fallback 到默认) -
detect_var:URL 中用于切换的语言参数名,如设为
'lang',则访问?lang=en-us可触发切换 -
use_cookie:设为
true后,语言选择会存入 Cookie(变量名由cookie_var指定,默认'think_lang') -
accept_language:可映射浏览器
Accept-Language头,例如'zh' => 'zh-cn',避免识别成zh-CN导致不匹配
必须启用 LoadLangPack 中间件
这是自动侦测和加载语言包的执行引擎。在应用的 middleware.php(如 app/middleware.php)中添加:
return [ 'think\middleware\LoadLangPack' ];
该中间件会在请求开始时依次检查:
→ URL 参数(如 lang=en-us)
→ Cookie(如 think_lang=en-us)
→ 请求 Header(think-lang: en-us,V6.0.3+ 支持)
→ 浏览器 Accept-Language 头
匹配成功后自动加载对应语言包,并设为当前请求语言。
模板和代码中使用 lang() 函数
所有需要翻译的字符串,都用 lang() 替代硬编码:
- 控制器中:
lang('hello')或带参数lang('welcome_to', ['name' => 'Tom']) - 模板中:
{:lang('hello')}(非{$Think.lang.hello},那是旧版语法) - 支持复数:
lang('item|items', 1)→ 返回'item';传2→ 返回'items' - 占位符只认
{key}格式,不支持:key或%s
注意:如果 key 在语言包中不存在,lang() 默认返回原字符串(如 lang('missing') 输出 'missing'),上线前建议跑一遍缺失检测。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











