Laravel 5.8 setLocale globally

前端 未结 3 698
失恋的感觉
失恋的感觉 2021-01-03 09:31

I have a route:

    Route::get(\'/setlocale/{locale}\', function($locale) {
            App::setLocale($locale);

            


        
3条回答
  •  臣服心动
    2021-01-03 10:13

    It'll only be set for that current request. You're calling the back() method, which will start a new request/response, and will reset the locale.

    You should persist the value to the users session, or cookie, then use a service provider, or middleware to set the locale from the session/cookie.

    Route::get('/setlocale/{locale}', function (\Illuminate\Http\Request $request, $locale) {
        $request->session()->put('locale', $locale);
        // or
        session(['locale' => $locale]);
    
        return back();
    });
    
    
    // Middleware:
    
    public function handle($request, $next) {
        App::setLocale($request->session->get('locale', 'some default locale');
    
        // or
    
        App::setLocale(session('locale'));
    
        return $next($request);
    }
    

    Hope that helps.

    Helpful links:

    • https://laravel.com/docs/5.8/session#storing-data
    • https://laravel.com/docs/5.8/middleware

提交回复
热议问题