From c665adf1c8cde4fb3b30cc3e71272f38f66be40c Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Tue, 26 Nov 2019 16:53:19 +0800 Subject: [PATCH] Fix detecting unknown locale --- app/Http/Middleware/DetectLanguagePrefer.php | 16 +++++++++++++--- .../TranslationsTest/JavaScriptTest.php | 7 +++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/app/Http/Middleware/DetectLanguagePrefer.php b/app/Http/Middleware/DetectLanguagePrefer.php index 7281206f..77caaf8e 100644 --- a/app/Http/Middleware/DetectLanguagePrefer.php +++ b/app/Http/Middleware/DetectLanguagePrefer.php @@ -9,11 +9,21 @@ class DetectLanguagePrefer { public function handle($request, \Closure $next) { - $locale = $request->input('lang') ?? $request->cookie('locale') ?? $request->getPreferredLanguage(); - if (($info = Arr::get(config('locales'), $locale)) && ($alias = Arr::get($info, 'alias'))) { + $locale = $request->input('lang') + ?? $request->cookie('locale') + ?? $request->getPreferredLanguage(); + if ( + ($info = Arr::get(config('locales'), $locale)) && + ($alias = Arr::get($info, 'alias')) + ) { $locale = $alias; } - app()->setLocale($locale ?? app()->getLocale()); + $locale ?? app()->getLocale(); + if (! Arr::has(config('locales'), $locale)) { + $locale = config('app.fallback_locale'); + } + + app()->setLocale($locale); Cookie::queue('locale', $locale); return $next($request); diff --git a/tests/ServicesTest/TranslationsTest/JavaScriptTest.php b/tests/ServicesTest/TranslationsTest/JavaScriptTest.php index 8c6c8b31..8727cc59 100644 --- a/tests/ServicesTest/TranslationsTest/JavaScriptTest.php +++ b/tests/ServicesTest/TranslationsTest/JavaScriptTest.php @@ -97,4 +97,11 @@ class JavaScriptTest extends TestCase resolve(JavaScript::class)->plugin('en') ); } + + public function testFallbackLocale() + { + $this->get('/', ['Accept-Language' => 'xyz']) + ->assertSuccessful() + ->assertSee('lang/en.js'); + } }