我正在使用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());
}
有人可以帮忙吗?我真的坚持这个问题......