Laravel 二手项目,语言切换问题,求解

8 天前
 Yesr00

RT,创建了一个 SetLang 中间件, 代码如下:

if($request->input('lang')){ app()->setLocale($request->input('lang')); }

return $next($request);

首次设置生效,切换页面不带'lang'参的时候在控制器里用 app()->getLocale()就还是只能拿到默认语言。使用 session 也是一样。检查了中间件的顺序,应该是没什么问题,也没有其他的地方有设置语言操作。求 debug 思路

1037 次点击
所在节点    PHP
8 条回复
bugsnail
8 天前
不知道你的 session 是怎么存的,应该顺序有问题;

抛开这个不谈,理论上每次请求都是需要在 header 上带上 lang 标识会好点
Yesr00
8 天前
@bugsnail 目前在本地跑。session 啥的都是用的 file 。不过没搭环境,直接在 php artisan serve 里跑的。。。难道是因为这个问题?
sagaxu
8 天前
setLocale 只针对当前 request 生效,你要 session 级的,要在 middleware 里做
Yesr00
8 天前
@sagaxu 用 session(['app_locale'=>'en_us‘]) 这种来做存取然后中间件里对每个 request 做 setLocale()?
bugsnail
8 天前
@Yesr00 #4 差不多是这个意思

因为都是无状态的,只有 session ,所以需要每次都 set
iOCZS
8 天前
放 cookie 不就好了
keller
8 天前
供参考:

'''
// 检查用户本地 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);
'''
ben1024
8 天前
后端接口可以无状态的情况下,在前端把 cookie or local storage 设置,请求时带到接口中

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1084412

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX