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

LocaleMiddleware   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 59
ccs 17
cts 17
cp 1
rs 10
c 0
b 0
f 0
wmc 6
lcom 1
cbo 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A process() 0 10 2
A normalizeLocale() 0 14 3
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