Passed
Push — master ( e8c0b1...e5e781 )
by Dominik
03:18
created

Translator   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
wmc 6
lcom 1
cbo 3
dl 0
loc 59
ccs 17
cts 17
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 2
A addLocaleTranslationProvider() 0 4 1
A translate() 0 18 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Chubbyphp\Translation;
6
7
use Psr\Log\LoggerInterface;
8
use Psr\Log\NullLogger;
9
10
final class Translator implements TranslatorInterface
11
{
12
    /**
13
     * @var LocaleTranslationProviderInterface[]
14
     */
15
    private $localeTranslationProviders = [];
16
17
    /**
18
     * @var LoggerInterface
19
     */
20
    private $logger;
21
22
    /**
23
     * Translator constructor.
24
     *
25
     * @param array $localeTranslationProviders
26
     */
27 3
    public function __construct(array $localeTranslationProviders, LoggerInterface $logger = null)
28
    {
29 3
        foreach ($localeTranslationProviders as $localeTranslationProvider) {
30 3
            $this->addLocaleTranslationProvider($localeTranslationProvider);
31
        }
32 3
        $this->logger = $logger ?? new NullLogger();
33 3
    }
34
35
    /**
36
     * @param LocaleTranslationProviderInterface $localeTranslationProvider
37
     */
38 3
    private function addLocaleTranslationProvider(LocaleTranslationProviderInterface $localeTranslationProvider)
39
    {
40 3
        $this->localeTranslationProviders[$localeTranslationProvider->getLocale()] = $localeTranslationProvider;
41 3
    }
42
43
    /**
44
     * @param string $locale
45
     * @param string $key
46
     * @param array  $args
47
     *
48
     * @return string
49
     */
50 3
    public function translate(string $locale, string $key, array $args = []): string
51
    {
52 3
        if (isset($this->localeTranslationProviders[$locale])) {
53 3
            if (null !== $translation = $this->localeTranslationProviders[$locale]->translate($key, $args)) {
54 3
                $this->logger->info('translation: translate {locale} {key}', ['locale' => $locale, 'key' => $key]);
55
56 3
                return $translation;
57
            }
58
59 3
            $this->logger->notice('translation: missing {locale} {key}', ['locale' => $locale, 'key' => $key]);
60
61 3
            return $key;
62
        }
63
64 3
        $this->logger->warning('translation: missing {locale}', ['locale' => $locale]);
65
66 3
        return $key;
67
    }
68
}
69