要在ThinkPHP3.2中实现中文界面自动切换英文等语言,必须完成行为注册、配置启用、目录创建、文件编写四步;缺一不可,否则L()函数始终输出原始键名。

要在ThinkPHP3.2项目中让中文界面自动切换成英文或其他语言,必须完成行为注册、配置启用、目录创建、文件编写四步,缺一不可;漏掉任意一步都会导致L()函数始终输出原始键名而非翻译内容。
注册多语言检测行为
打开 Application/Common/Conf/tags.php 文件(若不存在则新建),写入以下内容:
return array(
'app_begin' => array('Behavior\CheckLangBehavior'),
);
这一步必须放在 app_begin 钩子上,否则语言检测逻辑不会在请求最开始执行。ThinkPHP3.2不支持中间件机制,只能靠Behavior行为注入。
立即学习“PHP免费学习笔记(深入)”;
开启并配置多语言开关
编辑 Application/Common/Conf/config.php 文件,在 return 数组中添加以下配置项:
'LANG_SWITCH_ON' => true,
'LANG_AUTO_DETECT' => true,
'DEFAULT_LANG' => 'zh-cn',
'LANG_LIST' => 'zh-cn,en-us',
'VAR_LANGUAGE' => 'l',
【LANG_SWITCH_ON 必须为 true】——值为 false 或缺失时,整个多语言流程被跳过,后续所有操作无效。注意 LANG_LIST 是逗号分隔的字符串(非数组),这是 3.2 版本与 6.x 的关键区别。
创建语言包目录与文件
在 Application/Common/Lang/ 目录下,按语言码建立子目录:
zh-cn/
en-us/
每个子目录内新建一个 PHP 文件,命名规则为:模块名小写.php。例如首页控制器 IndexController.class.php 对应的文件名为 index.php;通用语言项可统一放入 common.php。
zh-cn/common.php 内容示例:
return array(
'welcome' => '欢迎使用系统',
'logout' => '退出登录'
);
en-us/common.php 内容示例:
return array(
'welcome' => 'Welcome to the system',
'logout' => 'Log out'
);
注意:文件必须以 return array(...) 开头,不能有 echo、print、BOM 头或任何输出;否则 L() 调用会失败且无提示。
在代码中调用多语言变量
控制器中直接使用 L() 函数:
L('welcome') → 输出当前语言的欢迎语
模板中使用 ThinkPHP 模板语法:
{$Think.lang.welcome}
或者在模板中嵌入 PHP 表达式:
URL 切换语言时使用配置的 VAR_LANGUAGE 参数:
http://yourdomain.com/index/index?l=en-us
该参数会触发 CheckLangBehavior 自动写入 cookie think_language,下次请求无需再传参即可保持语言状态。



















