Completed
Push — master ( 6d1120...3e38c4 )
by Michal
10s
created

Translator::translate()   B

Complexity

Conditions 5
Paths 7

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 5

Importance

Changes 0
Metric Value
dl 0
loc 17
ccs 11
cts 11
cp 1
rs 8.8571
c 0
b 0
f 0
cc 5
eloc 10
nc 7
nop 2
crap 5
1
<?php
2
3
namespace UniMan\Core\Translator;
4
5
use UniMan\Core\Translator\LanguageResolver\LanguageResolverInterface;
6
use UniMan\Core\Translator\Storage\StorageInterface;
7
use Nette\Localization\ITranslator;
8
9
class Translator implements ITranslator
10
{
11
    private $storage;
12
13
    private $languageResolver;
14
15
    private $defaultLanguage;
16
17 46
    public function __construct(StorageInterface $storage, LanguageResolverInterface $languageResolver)
18
    {
19 46
        $this->storage = $storage;
20 46
        $this->languageResolver = $languageResolver;
21 46
    }
22
23 2
    public function setDefaultLanguage($language)
24
    {
25 2
        $this->defaultLanguage = $language;
26 2
        return $this;
27
    }
28
29 12
    public function translate($message, $params = null)
30
    {
31 12
        $language = $this->languageResolver->resolve();
32 12
        if ($language !== null) {
33 12
            $value = $this->storage->load($language, $message);
34 12
            if ($value !== null) {
35 8
                return $this->replaceTokens($value, $params);
36
            }
37 2
        }
38
39 4
        if (!$this->defaultLanguage) {
40 2
            return '';
41
        }
42
43 2
        $value = $this->storage->load($this->defaultLanguage, $message);
44 2
        return $value ? $this->replaceTokens($value, $params) : $message;
45
    }
46
47 10
    private function replaceTokens($message, $params = null)
48
    {
49 10
        if (!$params) {
50 10
            return $message;
51
        }
52 6
        foreach ($params as $key => $value) {
53 6
            $message = str_replace('%' . $key . '%', $value, $message);
54 3
        }
55 6
        return $message;
56
    }
57
}
58