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

Translator::translate()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 18
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 18
ccs 9
cts 9
cp 1
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 9
nc 3
nop 3
crap 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