我根据文档在laravel 5.6
中设置了mcamara/laravel-localization 1.3库,并在users
表中创建了lang
列,每次用户切换语言时都会设置该列(这允许我以适当的语言发送"背景"循环电子邮件或在用户登录后设置正确的语言)。我在web.php
组LaravelLocalization::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'
它不起作用。我没有在文档中找到关于此的直接指导。
那怎么办呢?
答案 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) }}">