
RT,创建了一个 SetLang 中间件, 代码如下:
if($request->input('lang')){ app()->setLocale($request->input('lang')); }
return $next($request);
首次设置生效,切换页面不带'lang'参的时候在控制器里用 app()->etLocale()就还是只能拿到默认语言。使用 session 也是一样。检查了中间件的顺序,应该是没什么问题,也没有其他的地方有设置语言操作。求 debug 思路
1 bugsnail 2024-10-28 20:49:08 +08:00 不知道你的 session 是怎么存的,应该顺序有问题; 抛开这个不谈,理论上每次请求都是需要在 header 上带上 lang 标识会好点 |
2 Yesr00 OP @bugsnail 目前在本地跑。session 啥的都是用的 file 。不过没搭环境,直接在 php artisan serve 里跑的。。。难道是因为这个问题? |
3 sagaxu 2024-10-28 20:57:02 +08:00 setLocale 只针对当前 request 生效,你要 session 级的,要在 middleware 里做 |
4 Yesr00 OP @sagaxu 用 session(['app_locale'=>'en_us‘]) 这种来做存取然后中间件里对每个 request 做 setLocale()? |
6 iOCZS 2024-10-28 23:00:08 +08:00 放 cookie 不就好了 |
7 keller 2024-10-29 09:42:39 +08:00 供参考: ''' // 检查用户本地 cookie 是否存在语言选择 if (!$request->hasCookie('laguage ')) { // 如果不存在,则获取浏览器语言 $acceptLanguage = $request->headers->get('Accept-Language'); //检查是否中文 if (strpos($acceptLanguage, 'zh-CN') !== false) { $language = 'zh-CN'; } else { $language = 'en'; } }else{ $language = $request->cookie('language '); } // 设置语言 app()->setLocale($language); ''' |
8 ben1024 2024-10-29 09:48:43 +08:00 后端接口可以无状态的情况下,在前端把 cookie or local storage 设置,请求时带到接口中 |