Completed
Push — master ( b0c3f0...b94c2d )
by Dominik
02:22
created

Translator::generateKey()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
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
    public function __construct(array $localeTranslationProviders, LoggerInterface $logger = null)
28
    {
29
        foreach ($localeTranslationProviders as $localeTranslationProvider) {
30
            $this->addLocaleTranslationProvider($localeTranslationProvider);
31
        }
32
        $this->logger = $logger ?? new NullLogger();
33
    }
34
35
    /**
36
     * @param LocaleTranslationProviderInterface $localeTranslationProvider
37
     */
38
    private function addLocaleTranslationProvider(LocaleTranslationProviderInterface $localeTranslationProvider)
39
    {
40
        $this->localeTranslationProviders[$localeTranslationProvider->getLocale()] = $localeTranslationProvider;
41
    }
42
43
    /**
44
     * @param string $locale
45
     * @param string $key
46
     * @param array  $args
47
     *
48
     * @return string
49
     */
50
    public function translate(string $locale, string $key, array $args = []): string
51
    {
52
        if (isset($this->localeTranslationProviders[$locale])) {
53
            return $this->localeTranslationProviders[$locale]->translate($key, $args);
54
        }
55
56
        $this->logger->notice('translation: missing {locale}', ['locale' => $locale]);
57
58
        return $key;
59
    }
60
}
61