You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:40:54