Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
LanguageTranslator
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
4 / 4
8
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
2
 getInstance
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setJsonFileLoader
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
2
 setPoFileLoader
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace BO\Slim;
4
5use Psr\Http\Message\RequestInterface;
6// Symfony Translation Classes
7use Symfony\Component\Translation\Loader\JsonFileLoader;
8use Symfony\Component\Translation\Loader\PoFileLoader;
9use Symfony\Component\Translation\Translator;
10
11class LanguageTranslator
12{
13    protected $translator = null;
14
15    protected $defaultLang;
16
17    protected $loaderTypes = [
18        'pofile' => 'setPoFileLoader',
19        'json' => 'setJsonFileLoader'
20    ];
21
22    public function __construct($fallbackLocale, $defaultLocale, $defaultLang)
23    {
24        $translatorType = (\App::$languagesource) ? \App::$languagesource : 'pofile';
25
26        $this->defaultLang = $defaultLang;
27
28        /** @var class-string<Translator> $translatorClass */
29        $translatorClass = \App::TRANSLATOR_CLASS;
30        // First param is the "default language" to use.
31        $this->translator = new $translatorClass($defaultLocale);
32        // Set a fallback language incase you don't have a translation in the default language
33        $this->translator->setFallbackLocales([$fallbackLocale]);
34        // Add a loader that will get the php files we are going to store our translations in
35        $initLoader = $this->loaderTypes[$translatorType];
36        $this->$initLoader();
37    }
38
39    public function getInstance()
40    {
41        return $this->translator;
42    }
43
44    protected function setJsonFileLoader()
45    {
46        $this->translator->addLoader('json', new JsonFileLoader());
47        foreach (\App::$supportedLanguages as $language) {
48            $this->translator->addResource(
49                'json',
50                \App::APP_PATH . '/lang/' . $language['locale'] . '.json',
51                $language['locale']
52            );
53        }
54    }
55
56    protected function setPoFileLoader()
57    {
58        $this->translator->addLoader('pofile', new PoFileLoader());
59        foreach (\App::$supportedLanguages as $locale => $language) {
60            if ($locale != $this->defaultLang) {
61                $this->translator->addResource(
62                    'pofile',
63                    \App::APP_PATH . '/lang/' . $language['locale'] . '.po',
64                    $language['locale']
65                );
66            }
67        }
68    }
69}