Laravel5.6中mcamara/laravel-localization命名路由语言跳转异常求助
解决Laravel Localization登录后跳转至用户预设语言路由的问题
这个问题我之前处理过,核心原因是laravel-localization库维护着自己独立的locale上下文状态,单纯调用App::setLocale()并不会同步更新路由生成时使用的locale,所以生成的URL还是沿用了登录请求时的语言(也就是你提到的en)。
下面给你两种可行的解决方案:
方案一:使用LaravelLocalization的setLocale方法同步上下文
直接调用库提供的setLocale()方法,它会同时更新库内部的locale状态,并且同步Laravel核心的App locale:
use Mcamara\LaravelLocalization\Facades\LaravelLocalization; use Illuminate\Support\Facades\Auth; public function redirectTo() { $userLocale = Auth::user()->lang; // 先设置laravel-localization的locale,这会自动同步App的locale LaravelLocalization::setLocale($userLocale); // 此时生成路由会使用用户预设的locale return route('dashboard.index'); }
方案二:手动在路由生成时指定locale参数
如果方案一因为某些原因不生效,你可以直接在route()函数中传入locale参数,强制指定路由的语言前缀:
use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Auth; public function redirectTo() { $userLocale = Auth::user()->lang; App::setLocale($userLocale); // 手动传入locale参数覆盖当前上下文的语言 return route('dashboard.index', ['locale' => $userLocale]); }
额外注意事项
- 确保用户
lang字段的值是你在config/laravellocalization.php的supportedLocales数组中配置过的有效语言代码(比如pl必须在列表里),否则库会自动 fallback 到默认语言,导致跳转还是不符合预期。 - 如果你在其他地方也需要基于用户语言生成路由,建议封装一个辅助函数,避免重复代码。
内容的提问来源于stack exchange,提问作者Kamil Kiełczewski
相关产品推荐
相关产品推荐

