Laravel 5 Laravel 5.4在会话中设置区域设置

Laravel 5 Laravel 5.4在会话中设置区域设置,laravel-5,Laravel 5,更新。 我想知道如何在会话中设置区域设置 我的语言选择器不是输入类型,只是文本。这是刀片碎片-这是语言选择器: <div class = "col-lg-5 col-md-5" id = "lang"> <ul id = "lang_menu"> <li class = "language active">Latviešu</a></li> <li class = "language">

更新。 我想知道如何在会话中设置区域设置

我的语言选择器不是输入类型,只是文本。这是刀片碎片-这是语言选择器:

<div class = "col-lg-5 col-md-5" id = "lang">
    <ul id = "lang_menu">
        <li class = "language active">Latviešu</a></li>
        <li class = "language">Pусский</a></li>
        <li class = "language">English</a></li>
    </ul>
</div>
此外,我还有transladet文件,当我在配置中更改区域设置时,这些文件可以正常工作

现在我已经走了这么远,但它仍然不起作用。我在一个教程中编写了这段代码,其中所有代码都可以使用。我也做了同样的事,但它不起作用

这是我的选择:

<ul id = "lang_menu">
    <li class = "language active"><a href ="{{ url('/locale/lv') }}">Latviešu</a></li>
    <li class = "language"><a href ="{{ url('/locale/ru') }}">Pусский</a></li>
    <li class = "language"><a href ="{{ url('/locale/en') }}">English</a></li>
</ul>
这是我的语言控制器:

use Illuminate\Http\Request;
use Session;
use URL;

class LanguageController extends Controller
{
public function setLocale($locale='en'){
    if (!in_array($locale, ['en', 'ru', 'lv'])){
        $locale = 'en';
    }
    Session::put('locale', $locale);
    return redirect(url(URL::previous()));
    }
}
这里是中间件“Locale”:

并添加到Kernel.php中:

    \App\Http\Middleware\Locale::class,
    \Illuminate\Session\Middleware\StartSession::class,

您可以设置路由以配置区域设置(请参阅),并重定向回上一个url:

Route::get('locale/{locale}', function ($locale) {
    $validLocale = in_array($locale, ['lv', 'ru', 'en']);
    if ($validLocale) {
        App::setLocale($locale);
    }
    return back();
});
当访问者选择区域设置时,让用户访问您的路线:

<div class = "col-lg-5 col-md-5" id = "lang">
    <ul id = "lang_menu">
        <li class = "language{{ App::isLocale('lv') ? ' active' : '' }}"><a href="/locale/lv">Latviešu</a></li>
        <li class = "language{{ App::isLocale('ru') ? ' active' : '' }}"><a href="/locale/ru">Pусский</a></li>
        <li class = "language{{ App::isLocale('en') ? ' active' : '' }}"><a href="/locale/en">English</a></li>
    </ul>
</div>


在中间件中,您必须使用从请求获得的会话,而不是从helper session()或session::get()获得的会话


尝试使用中间件。所以你所有的路线都实现了它。然后使用中间件设置区域设置。由于某些原因,您必须为每个已完成的请求设置区域设置。您必须在
\App\Http\Middleware\locale::class,
之后设置
\light\Session\Middleware\StartSession::class,
,否则会话不会启动…上面抛出以下异常:-未根据请求设置RuntimeException会话存储。
    \App\Http\Middleware\Locale::class,
    \Illuminate\Session\Middleware\StartSession::class,
Route::get('locale/{locale}', function ($locale) {
    $validLocale = in_array($locale, ['lv', 'ru', 'en']);
    if ($validLocale) {
        App::setLocale($locale);
    }
    return back();
});
<div class = "col-lg-5 col-md-5" id = "lang">
    <ul id = "lang_menu">
        <li class = "language{{ App::isLocale('lv') ? ' active' : '' }}"><a href="/locale/lv">Latviešu</a></li>
        <li class = "language{{ App::isLocale('ru') ? ' active' : '' }}"><a href="/locale/ru">Pусский</a></li>
        <li class = "language{{ App::isLocale('en') ? ' active' : '' }}"><a href="/locale/en">English</a></li>
    </ul>
</div>
public function handle($request, Closure $next)
{
    if ($request->session()->has('locale')  ) {
        $locale = $request->session()->get('locale');
        App::setLocale($locale);
    }
    return $next($request);
}