ThinkPHP 7.1启用多语言需三步:配置lang_switch_on为true并设置语言列表、在app/language下按语言代码建目录并放置UTF-8无BOM的PHP数组文件、模板中用{$Think.lang.key}或L('key')调用。

想在ThinkPHP 7.1项目中启用多语言界面,让中文用户看到中文提示、英文用户看到英文文案,又不想手动判断语言再加载不同数组——你需要的不是查手册找函数,而是把语言包路径配对、语言开关打开、模板里用对语法这三步走通。
确认ThinkPHP版本与文档对应关系
ThinkPHP 7.1官方尚未发布独立手册,当前最新稳定版为ThinkPHP 8.x,其文档地址为 https://www.thinkphp.cn/doc/8.html。若你实际使用的是7.1分支(非官方正式版),需注意:该版本未内置完整的多语言行为类,【不能直接使用CheckLangBehavior】,强行复制3.2.3配置会导致app_begin阶段报错Class not found。
建议切换至ThinkPHP 8.0+正式版,或降级查阅ThinkPHP 6.1文档(仍兼容7.1大部分多语言逻辑)。
启用多语言功能的最小配置
在应用根目录的config/app.php中添加以下配置项:
立即学习“PHP免费学习笔记(深入)”;
方法一:基础启用(推荐用于开发验证)
'lang_switch_on' => true,
'default_lang' => 'zh-cn',
'lang_auto_detect' => true,
'lang_list' => 'zh-cn,en-us,zh-tw',
'var_language' => 'lang'
方法二:强制指定语言(绕过浏览器检测,适合调试)
'lang_switch_on' => true,
'default_lang' => 'en-us',
'lang_auto_detect' => false
【必须确保lang_switch_on设为true,否则L()函数始终返回原字符串】
语言包文件组织与命名规则
第一步:在app目录下创建language子目录
第二步:按语言代码建子文件夹,例如:
app/language/zh-cn/
app/language/en-us/
app/language/zh-tw/
第三步:在每个语言子目录中放入PHP数组文件,常见命名有:
common.php(全局通用文案)
index.php(对应Index控制器)
user.php(对应User控制器)
第四步:编写zh-cn/common.php示例:
<?php return [ 'welcome' => '欢迎回来', 'login_fail' => '登录失败,请重试' ]; ?>
第五步:编写en-us/common.php示例:
<?php return [ 'welcome' => 'Welcome back', 'login_fail' => 'Login failed, please try again' ]; ?>
注意:文件必须是UTF-8无BOM编码,否则include时会输出空白字符导致header已发送错误。
在代码中调用多语言文本
控制器中使用:
$this->assign('msg', L('welcome'));
模板中使用:
{$Think.lang.welcome} 或 {{:L('welcome')}}
助手函数方式(ThinkPHP 8.0+支持):
lang('welcome')
如果L('welcome')返回空或原字符串,先检查app/language/zh-cn/common.php是否真实存在且可被PHP读取,【不要把language文件夹放在public下,它必须在app目录内】。
通过URL参数动态切换语言
第一步:确保路由开启语言支持
在route/app.php中添加:
use think\facade\Route;
Route::addLanguage();
第二步:访问带lang参数的URL
http://your-site.com/?lang=en-us → 自动加载en-us语言包
http://your-site.com/index/index?lang=zh-tw → 加载zh-tw包并缓存到session
此方式会将lang值写入session,后续请求不再需要传参,直到session过期或用户主动切换。



















