Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
LocaleMiddleware
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
72
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 process
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
56
1<?php
2
3declare(strict_types=1);
4
5namespace App\Web\Middleware;
6
7use App\Domain\Translation\Service\TranslatorInterface;
8use App\Domain\Translation\ValueObject\Language;
9use Psr\Http\Message\ResponseInterface;
10use Psr\Http\Message\ServerRequestInterface;
11use Psr\Http\Server\MiddlewareInterface;
12use Psr\Http\Server\RequestHandlerInterface;
13
14 class LocaleMiddleware implements MiddlewareInterface
15{
16    public const COOKIE_NAME = 'ammonly_lang';
17
18    public function __construct(
19        private TranslatorInterface $translator
20    ) {}
21
22    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
23    {
24        $queryParams = $request->getQueryParams();
25        $cookieParams = $request->getCookieParams();
26
27        $locale = Language::DEFAULT_LOCALE;
28
29        if (isset($queryParams['lang']) && is_string($queryParams['lang'])) {
30            $locale = $queryParams['lang'];
31        } elseif (isset($cookieParams[self::COOKIE_NAME]) && is_string($cookieParams[self::COOKIE_NAME])) {
32            $locale = $cookieParams[self::COOKIE_NAME];
33        } else {
34            $header = $request->getHeaderLine('Accept-Language');
35            if ($header !== '') {
36                $primary = strtolower(substr($header, 0, 2));
37                if (in_array($primary, Language::SUPPORTED_LOCALES, true)) {
38                    $locale = $primary;
39                }
40            }
41        }
42
43        $this->translator->setLocale($locale);
44
45        return $handler->handle($request);
46    }
47}