Skip to content

Commit 454655e

Browse files
committed
General fixes
1 parent 65e25e5 commit 454655e

File tree

2 files changed

+70
-57
lines changed

2 files changed

+70
-57
lines changed

src/Middleware.php

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,50 @@
33
namespace Orkhanahmadov\LaravelAcceptLanguageMiddleware;
44

55
use Closure;
6-
use Illuminate\Contracts\Foundation\Application;
76
use Illuminate\Http\Request;
87
use Illuminate\Support\Collection;
98

109
class Middleware
1110
{
12-
/**
13-
* @var Application
14-
*/
15-
private $app;
16-
17-
/**
18-
* HttpLocaleMiddleware constructor.
19-
*
20-
* @param Application $app
21-
*/
22-
public function __construct(Application $app)
23-
{
24-
$this->app = $app;
25-
}
26-
2711
/**
2812
* Handle an incoming request.
2913
*
30-
* @param \Illuminate\Http\Request $request
14+
* @param Request $request
3115
* @param \Closure $next
3216
* @return mixed
3317
*/
3418
public function handle($request, Closure $next)
3519
{
36-
$this->app->setLocale($this->parseHttpLocale($request));
20+
if ($locale = $this->parseHttpLocale($request)) {
21+
app()->setLocale($locale);
22+
}
3723

3824
return $next($request);
3925
}
4026

41-
/**
42-
* @param Request $request
43-
*
44-
* @return string
45-
*/
4627
private function parseHttpLocale(Request $request): string
4728
{
4829
$list = explode(',', $request->server('HTTP_ACCEPT_LANGUAGE'));
4930

50-
$locales = Collection::make($list)->map(function ($locale) {
51-
$parts = explode(';', $locale);
31+
$locales = Collection::make($list)
32+
->map(function ($locale) {
33+
$parts = explode(';', $locale);
5234

53-
$mapping['locale'] = trim($parts[0]);
35+
$mapping['locale'] = trim($parts[0]);
5436

55-
if (isset($parts[1])) {
56-
$factorParts = explode('=', $parts[1]);
37+
if (isset($parts[1])) {
38+
$factorParts = explode('=', $parts[1]);
5739

58-
$mapping['factor'] = $factorParts[1];
59-
} else {
60-
$mapping['factor'] = 1;
61-
}
40+
$mapping['factor'] = $factorParts[1];
41+
} else {
42+
$mapping['factor'] = 1;
43+
}
6244

63-
return $mapping;
64-
})->sortByDesc(function ($locale) {
65-
return $locale['factor'];
66-
});
45+
return $mapping;
46+
})
47+
->sortByDesc(function ($locale) {
48+
return $locale['factor'];
49+
});
6750

6851
return $locales->first()['locale'];
6952
}

tests/MiddlewareTest.php

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,106 +3,136 @@
33
namespace Orkhanahmadov\LaravelAcceptLanguageMiddleware\Tests;
44

55
use Illuminate\Http\Request;
6+
use Illuminate\Http\Response;
67
use Illuminate\Support\Facades\App;
78
use Orkhanahmadov\LaravelAcceptLanguageMiddleware\Middleware;
89

910
class MiddlewareTest extends TestCase
1011
{
12+
/**
13+
* @var Response
14+
*/
15+
private $response;
16+
/**
17+
* @var Middleware
18+
*/
19+
private $middleware;
20+
1121
public function test_with_single_locale()
1222
{
13-
$middleware = $this->app->make(Middleware::class);
14-
$request = Request::create('whatever', 'GET', [], [], [], [
23+
$request = Request::create('/', 'GET', [], [], [], [
1524
'HTTP_ACCEPT_LANGUAGE' => 'es',
1625
]);
1726
$this->assertEquals('en', App::getLocale());
1827

19-
$middleware->handle($request, function () {
28+
$this->middleware->handle($request, function () {
29+
return $this->response;
2030
});
2131

2232
$this->assertEquals('es', App::getLocale());
2333
}
2434

2535
public function test_with_single_with_country()
2636
{
27-
$middleware = $this->app->make(Middleware::class);
28-
$request = Request::create('whatever', 'GET', [], [], [], [
37+
$request = Request::create('/', 'GET', [], [], [], [
2938
'HTTP_ACCEPT_LANGUAGE' => 'es-US',
3039
]);
3140
$this->assertEquals('en', App::getLocale());
3241

33-
$middleware->handle($request, function () {
42+
$this->middleware->handle($request, function () {
43+
return $this->response;
3444
});
3545

3646
$this->assertEquals('es-US', App::getLocale());
3747
}
3848

3949
public function test_with_single_with_country_and_quality_value()
4050
{
41-
$middleware = $this->app->make(Middleware::class);
42-
$request = Request::create('whatever', 'GET', [], [], [], [
51+
$request = Request::create('/', 'GET', [], [], [], [
4352
'HTTP_ACCEPT_LANGUAGE' => 'es-US;q=0.5',
4453
]);
4554
$this->assertEquals('en', App::getLocale());
4655

47-
$middleware->handle($request, function () {
56+
$this->middleware->handle($request, function () {
57+
return $this->response;
4858
});
4959

5060
$this->assertEquals('es-US', App::getLocale());
5161
}
5262

5363
public function test_with_multiple_locales()
5464
{
55-
$middleware = $this->app->make(Middleware::class);
56-
$request = Request::create('whatever', 'GET', [], [], [], [
65+
$request = Request::create('/', 'GET', [], [], [], [
5766
'HTTP_ACCEPT_LANGUAGE' => 'es, de',
5867
]);
5968
$this->assertEquals('en', App::getLocale());
6069

61-
$middleware->handle($request, function () {
70+
$this->middleware->handle($request, function () {
71+
return $this->response;
6272
});
6373

6474
$this->assertEquals('es', App::getLocale());
6575
}
6676

6777
public function test_with_multiple_locales_with_countries()
6878
{
69-
$middleware = $this->app->make(Middleware::class);
70-
$request = Request::create('whatever', 'GET', [], [], [], [
79+
$request = Request::create('/', 'GET', [], [], [], [
7180
'HTTP_ACCEPT_LANGUAGE' => 'es-US, de-DE',
7281
]);
7382
$this->assertEquals('en', App::getLocale());
7483

75-
$middleware->handle($request, function () {
84+
$this->middleware->handle($request, function () {
85+
return $this->response;
7686
});
7787

7888
$this->assertEquals('es-US', App::getLocale());
7989
}
8090

8191
public function test_with_multiple_locales_with_countries_and_quality_value()
8292
{
83-
$middleware = $this->app->make(Middleware::class);
84-
$request = Request::create('whatever', 'GET', [], [], [], [
93+
$request = Request::create('/', 'GET', [], [], [], [
8594
'HTTP_ACCEPT_LANGUAGE' => 'es-AZ;q=0.7, de-DE;q=0.8',
8695
]);
8796
$this->assertEquals('en', App::getLocale());
8897

89-
$middleware->handle($request, function () {
98+
$this->middleware->handle($request, function () {
99+
return $this->response;
90100
});
91101

92102
$this->assertEquals('de-DE', App::getLocale());
93103
}
94104

95105
public function test_with_mixed_locale_values()
96106
{
97-
$middleware = $this->app->make(Middleware::class);
98-
$request = Request::create('whatever', 'GET', [], [], [], [
107+
$request = Request::create('/', 'GET', [], [], [], [
99108
'HTTP_ACCEPT_LANGUAGE' => 'fr-CH, de;q=0.7, fr;q=0.9, en;q=0.8, *;q=0.5',
100109
]);
101110
$this->assertEquals('en', App::getLocale());
102111

103-
$middleware->handle($request, function () {
112+
$this->middleware->handle($request, function () {
113+
return $this->response;
104114
});
105115

106116
$this->assertEquals('fr-CH', App::getLocale());
107117
}
118+
119+
public function test_does_not_set_app_locale_when_request_header_is_not_available()
120+
{
121+
$request = new Request();
122+
App::setLocale('es');
123+
124+
$this->middleware->handle($request, function () {
125+
return $this->response;
126+
});
127+
128+
$this->assertEquals('es', App::getLocale());
129+
}
130+
131+
protected function setUp(): void
132+
{
133+
parent::setUp();
134+
135+
$this->response = new Response();
136+
$this->middleware = new Middleware();
137+
}
108138
}

0 commit comments

Comments
 (0)