mcamara / laravel-localization命名为路由本地化

时间:2018-05-28 15:51:48

标签: php laravel routing translation multilingual

我根据文档在laravel 5.6中设置了mcamara/laravel-localization 1.3库,并在users表中创建了lang列,每次用户切换语言时都会设置该列(这允许我以适当的语言发送"背景"循环电子邮件或在用户登录后设置正确的语言)。我在web.phpLaravelLocalization::setLocale()中设置了所有路线(如文档所述)。

我想在我的控制器中使用命名路径,例如用户登录后重定向到正确的页面(用户来自EN登录页面,但是他的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'

它不起作用。我没有在文档中找到关于此的直接指导。

那怎么办呢?

2 个答案:

答案 0 :(得分:2)

几个小时后我终于在互联网上找到了this solution

$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');

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

答案 1 :(得分:2)

我这样解决了这个问题

成功的授权,您需要从数据库发送用户区域设置

LoginController \ authenticated

\LaravelLocalization::setLocale(\Auth::user()->language);

在页面HTML上指定活动的语言环境

<html lang="{{ \LaravelLocalization::setLocale(\Auth::user()->language) }}">