Locale Middleware和View Composer服务提供商

时间:2017-04-08 12:21:51

标签: laravel middleware service-provider

我正在使用Laravel 5.4开发一个多语言网站,而且我在设置中间件和服务提供商逻辑时遇到了问题。我已经意识到servide提供程序是在中间件之前执行的。问题是我在中间件上设置了应用程序区域设置。另一方面,我有一个服务提供商将本地化数据提供给应用程序的导航栏和页脚。我的问题是,到服务提供商执行时,它并不知道真正的语言环境是什么。

这是我在Locale中间件上的句柄功能

public function handle($request, Closure $next, $guard = null)
{
    $locales_arr = Language::localesArr();

    // if there isn't a slug on URL
    if(!session()->has('app.locale') && $request->segment(1) === null)
    {
        // browser preference
        $client_locale = substr(\Request::server('HTTP_ACCEPT_LANGUAGE'), 0, 2);

        // if it is a valid locale
        if(in_array($client_locale, $locales_arr))
        {
            $locale = $client_locale;
        }
        else {
            $locale = config('app.fallback_locale');
        }
    }
    else
    {
        $locale = in_array($request->segment(1), $locales_arr) ? $request->segment(1) : config('app.fallback_locale');
    }

    // set locale prefix
    $locale_prefix = ($locale != config('app.fallback_locale')) ? $locale : '';

    // set locale
    app()->setLocale($locale);

    config(['app.locale_prefix' => $locale_prefix]);
    session(['app.locale' => $locale]);
    session()->save();

    setlocale(LC_TIME, $locale . "_" . strtoupper($locale));

    return $next($request);
}

这是我在ViewComposerServiceProvider上的启动功能

public function boot()
{
    /* this doesn't work properly!!! */
    dump(app()->getLocale());
}

有人可以帮忙吗?我真的坚持这个问题......

0 个答案:

没有答案