代码之家  ›  专栏  ›  技术社区  ›  Kamil Kiełczewski

mcamara/laravel本地化命名路由本地化

  •  1
  • Kamil Kiełczewski  · 技术社区  · 6 年前

    我设置了 mcamara/laravel-localization 1.3 中的库 laravel 5.6 users 我创建的表 lang 每次用户切换语言时设置的列(这允许我以正确的语言发送“后台”循环电子邮件或在用户登录后设置正确的语言)。我把所有的路线都安排好了 web.php 分组 LaravelLocalization::setLocale() (如文件所述)。

    我想用 命名路由 在我的控制器内部,例如在用户登录后重定向到正确的页面(用户来自登录页面,但他的 lang='pl' )当在我的 LoginController@redirectTo() 我只使用:

    App::setLocale(Auth::user()->lang);
    $url =  route('dashboard.index');
    return $url;
    
    // current result $url = 'http://ebnavi.localhost/en/panel/raporty'
    // desired result $url = 'http://ebnavi.localhost/pl/panel/raporty'
    

    它不起作用。我在有关这方面的文档中找不到直接指示。

    那么怎么做呢?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Kamil Kiełczewski    6 年前

    几个小时后,我终于发现 this solution 在Internet中:

    $url = LaravelLocalization::getLocalizedURL($locale, route($routeName));
    

    并创建以下内容 helper function 为了实现这个任务

    function localRoute($routeName, $locale = null)
    {
        if (!$locale && Auth::user())  $locale = Auth::user()->lang;
    
        return $locale ? LaravelLocalization::getLocalizedURL($locale, route($routeName)) : route($routeName);
    }
    

    在我们的控制器中,我们可以这样使用它:

    $url =  localRoute('dashboard.index');
    

    但可能存在一些更好的方法吗?