Completed
Push — master ( f7424d...b53e51 )
by Alejandro
07:43
created

LocaleMiddleware::__invoke()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 3
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
ccs 6
cts 6
cp 1
crap 2
1
<?php
2
namespace Shlinkio\Shlink\Common\Middleware;
3
4
use Acelaya\ZsmAnnotatedServices\Annotation\Inject;
5
use Interop\Http\ServerMiddleware\DelegateInterface;
6
use Interop\Http\ServerMiddleware\MiddlewareInterface;
7
use Psr\Http\Message\ResponseInterface as Response;
8
use Psr\Http\Message\ServerRequestInterface as Request;
9
use Zend\I18n\Translator\Translator;
10
11
class LocaleMiddleware implements MiddlewareInterface
12
{
13
    /**
14
     * @var Translator
15
     */
16
    private $translator;
17
18
    /**
19
     * LocaleMiddleware constructor.
20
     * @param Translator $translator
21
     *
22
     * @Inject({"translator"})
23
     */
24 3
    public function __construct(Translator $translator)
25
    {
26 3
        $this->translator = $translator;
27 3
    }
28
29
30
31
    /**
32
     * Process an incoming server request and return a response, optionally delegating
33
     * to the next middleware component to create the response.
34
     *
35
     * @param Request $request
36
     * @param DelegateInterface $delegate
37
     *
38
     * @return Response
39
     */
40 3
    public function process(Request $request, DelegateInterface $delegate)
41
    {
42 3
        if (! $request->hasHeader('Accept-Language')) {
43 1
            return $delegate->process($request);
44
        }
45
46 2
        $locale = $request->getHeaderLine('Accept-Language');
47 2
        $this->translator->setLocale($this->normalizeLocale($locale));
48 2
        return $delegate->process($request);
49
    }
50
51
    /**
52
     * @param string $locale
53
     * @return string
54
     */
55 2
    protected function normalizeLocale($locale)
56
    {
57 2
        $parts = explode('_', $locale);
58 2
        if (count($parts) > 1) {
59 1
            return $parts[0];
60
        }
61
62 2
        $parts = explode('-', $locale);
63 2
        if (count($parts) > 1) {
64 1
            return $parts[0];
65
        }
66
67 1
        return $locale;
68
    }
69
}
70