RT,创建了一个 SetLang 中间件, 代码如下:
if($request->input('lang')){ app()->setLocale($request->input('lang')); }
return $next($request);
首次设置生效,切换页面不带'lang'参的时候在控制器里用 app()->getLocale()就还是只能拿到默认语言。使用 session 也是一样。检查了中间件的顺序,应该是没什么问题,也没有其他的地方有设置语言操作。求 debug 思路
1
bugsnail 23 天前
不知道你的 session 是怎么存的,应该顺序有问题;
抛开这个不谈,理论上每次请求都是需要在 header 上带上 lang 标识会好点 |
2
Yesr00 OP @bugsnail 目前在本地跑。session 啥的都是用的 file 。不过没搭环境,直接在 php artisan serve 里跑的。。。难道是因为这个问题?
|
3
sagaxu 23 天前
setLocale 只针对当前 request 生效,你要 session 级的,要在 middleware 里做
|
6
iOCZS 23 天前
放 cookie 不就好了
|
7
keller 23 天前
供参考:
''' // 检查用户本地 cookie 是否存在语言选择 if (!$request->hasCookie('language ')) { // 如果不存在,则获取浏览器语言 $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 23 天前
后端接口可以无状态的情况下,在前端把 cookie or local storage 设置,请求时带到接口中
|