如何保留Laravel 5选择的本地语言?

时间:2018-03-21 03:34:54

标签: php laravel localization

例如,我登录并选择en作为我的语言,然后选择zh(中文),然后注销。在您注销应用程序后,有没有办法保留本地化?

这是我实现区域设置的方式。

web.php:

Route::post('change-locale', 'LocaleController@changeLocale')->name('change.locale');

LocaleController:

class LocaleController extends Controller
{
    /**
     * @param Request $request
     */
    public function changeLocale(Request $request) {

        $this->validate($request, ['locale' => 'required|in:' . implode(',', config('app.available_locales'))]);

        Session::put('locale', $request->input('locale'));

        return redirect()->back();
    }

}

退出:

public function logout(Request $request)
    {
        $this->guard()->logout();
        $locale =  session('locale');
        $locale = Session::put('locale', $locale);
        Session::flush();
        //$request->session()->invalidate();
        //$request->session()->put('locale',$locale);
        return redirect('/login');
    }

区域设置:

 public function handle($request, Closure $next)
    {
        if (Session::has('locale')) {
            $locale = Session::get('locale', Config::get('app.locale'));
        } else {
            $locale = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);

            if (!in_array($locale, Config::get('app.available_locales'))) {
                $locale = 'en';
            }
        }        
        App::setLocale($locale);

        return $next($request);
    }

2 个答案:

答案 0 :(得分:3)

如果您进入会话,那么您可以通过该值获得

$locale =  Session::get('locale');
Session::flush();
Session::set('locale',$locale);

我做了什么,我使用会话全局助手获取会话值,你可以得到任何值

答案 1 :(得分:0)

我在Laravel 6中这样做:

添加到/app/Http/Controllers/Auth/LoginController.php 这两个功能:

public function logout(Request $request)
{
    $locale =  Session::get('locale');
    $this->guard()->logout();

    $request->session()->invalidate();

    return $this->loggedOut($request, $locale) ?: redirect('/');
}

protected function loggedOut(Request $request, $locale)
{
    Session::put('locale',$locale);
}

这使用:

use Illuminate\Http\Request;
use Session;