Laravel中的区域设置不变

时间:2016-06-12 16:42:40

标签: laravel locale

我正在尝试在Laravel中创建一个Locale切换器。

当用户登录时,切换台运行良好,但是当客人没有任何反应时,我找不到错误...

以下是我的文件:

在我的登录视图中,我有我的切换台:

<ul class="dropdown-menu">
                <li><a class="mexico" href="{{ URL::action('LanguageController@update', 'es') }}">
                        <img src="/images/flags/MX.png" alt="Español"> Español</a></li>
                <li><a class="english" href="{{ URL::action('LanguageController@update', 'en') }}">
                        <img src="/images/flags/GB.png" alt="English"> English</a></li>
            </ul>

这是我的LanguageController:

class LanguageController extends Controller
{

    public function update($locale){
        if(Auth::check()){
            Auth::user()->locale = $locale;
            Auth::user()->save();
        }
        Lang::setLocale($locale);
        app()->setLocale($locale);
        return redirect()->back();

    }
}

我的routes.php

Route::get('lang/{lang}', 'LanguageController@update'); // This is outside any middleware

我有一个处理Locale的全局中间件:

public function handle($request, Closure $next)
{
        if (Auth::check()) {
            app()->setLocale(Auth::user()->locale);
        }
        else {
            $locale = Lang::getLocale();

            app()->setLocale($locale);
        }
    return $next($request);
}

如果记录了用户,则语言环境存储在db中,否则,应用语言环境已设置...

默认情况下,Locale是西班牙语。

当我尝试选择英语时,它什么也没做。

 dd(Lang::getLocale());

在LanguageController的末尾给我“en”,所以,它应该可以工作,但如果我把这一行放在同一行

dd(Lang::getLocale());

在登录视图中(它会在返回redirect() - &gt; back();)之后返回那里,它给了我“es”

我不明白为什么!!!

任何想法???

编辑:

当我替换:

return redirect()->back();

return view ('auth/login');

它有效。

扩展一下,似乎当我使用redirect()时,它会失败......仍然不知道如何解决它。

1 个答案:

答案 0 :(得分:0)

以下是我如何解决它:

class LanguageController extends Controller
    {

        public function update($locale)
        {
            if (Auth::check()) {
                Auth::user()->locale = $locale;
                Auth::user()->save();
            }
            Session::put('locale', $locale);
            return redirect()->back();


        }
    }

LocaleMiddleware:

class LocaleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */

    protected $languages = ['en', 'es'];


    public function handle($request, Closure $next)
    {
        if (Session::has('locale') && in_array(Session::get('locale'), $this->languages)) {
            App::setLocale(Session::get('locale'));
        }

        return $next($request);
    }
}

启发this post