如何配置并使用ThinkPHP多语言中间件?
- 内容介绍
- 文章标签
- 相关推荐
本文共计801个文字,预计阅读时间需要4分钟。
在Lang中,若未注册中间件,则等同于未开启——语言包根本不会加载。例如,`Lang::get()` 返回空或默认值,不会报错,且不消耗特殊时间。
Lang中间件必须显式注册才能生效
ThinkPHP 默认不启用 Lang 中间件,哪怕你配了 lang_switch_on => true 也没用。它不像路由或日志中间件那样自动挂载。
- 打开
app/middleware.php,确认think\middleware\Lang在数组中(不是被注释掉) - 多应用模式下,每个应用目录(如
app/admin/middleware.php)都得单独加一遍 - 中间件顺序很重要:必须在
SessionInit之后、路由调度之前执行;否则读不到$_COOKIE['think_lang'],Lang::detect()拿不到上下文
Cookie 键名和路径必须严格匹配
Lang 中间件只认 think_lang 这个 Cookie 名,不是 lang、language 或其他自定义名。设错就完全跳过切换逻辑。
本文共计801个文字,预计阅读时间需要4分钟。
在Lang中,若未注册中间件,则等同于未开启——语言包根本不会加载。例如,`Lang::get()` 返回空或默认值,不会报错,且不消耗特殊时间。
Lang中间件必须显式注册才能生效
ThinkPHP 默认不启用 Lang 中间件,哪怕你配了 lang_switch_on => true 也没用。它不像路由或日志中间件那样自动挂载。
- 打开
app/middleware.php,确认think\middleware\Lang在数组中(不是被注释掉) - 多应用模式下,每个应用目录(如
app/admin/middleware.php)都得单独加一遍 - 中间件顺序很重要:必须在
SessionInit之后、路由调度之前执行;否则读不到$_COOKIE['think_lang'],Lang::detect()拿不到上下文
Cookie 键名和路径必须严格匹配
Lang 中间件只认 think_lang 这个 Cookie 名,不是 lang、language 或其他自定义名。设错就完全跳过切换逻辑。

