DevelopmentLoader.php
6 years ago
JsonFileLoader.php
6 years ago
LoaderCache.php
6 years ago
LoaderInterface.php
6 years ago
DevelopmentLoader.php
73 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Piwik - free/libre analytics platform |
| 4 | * |
| 5 | * @link https://matomo.org |
| 6 | * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later |
| 7 | */ |
| 8 | |
| 9 | namespace Piwik\Translation\Loader; |
| 10 | |
| 11 | /** |
| 12 | * Loads a pseudo-language for developers where translation are equal to translation ids. |
| 13 | */ |
| 14 | class DevelopmentLoader implements LoaderInterface |
| 15 | { |
| 16 | const LANGUAGE_ID = 'dev'; |
| 17 | |
| 18 | /** |
| 19 | * Decorated loader. |
| 20 | * |
| 21 | * @var LoaderInterface |
| 22 | */ |
| 23 | private $loader; |
| 24 | |
| 25 | /** |
| 26 | * @var string |
| 27 | */ |
| 28 | private $fallbackLanguage = 'en'; |
| 29 | |
| 30 | /** |
| 31 | * @param LoaderInterface $loader Decorate another loader to add the pseudo-language. |
| 32 | */ |
| 33 | public function __construct(LoaderInterface $loader) |
| 34 | { |
| 35 | $this->loader = $loader; |
| 36 | } |
| 37 | |
| 38 | /** |
| 39 | * {@inheritdoc} |
| 40 | */ |
| 41 | public function load($language, array $directories) |
| 42 | { |
| 43 | if ($language !== self::LANGUAGE_ID) { |
| 44 | return $this->loader->load($language, $directories); |
| 45 | } |
| 46 | |
| 47 | return $this->getDevelopmentTranslations($directories); |
| 48 | } |
| 49 | |
| 50 | private function getDevelopmentTranslations(array $directories) |
| 51 | { |
| 52 | $fallbackTranslations = $this->loader->load($this->fallbackLanguage, $directories); |
| 53 | |
| 54 | $translations = array(); |
| 55 | |
| 56 | foreach ($fallbackTranslations as $section => $sectionFallbackTranslations) { |
| 57 | $translationIds = array_keys($sectionFallbackTranslations); |
| 58 | $sectionTranslations = $this->prefixTranslationsWithSection($section, $translationIds); |
| 59 | |
| 60 | $translations[$section] = array_combine($translationIds, $sectionTranslations); |
| 61 | } |
| 62 | |
| 63 | return $translations; |
| 64 | } |
| 65 | |
| 66 | private function prefixTranslationsWithSection($section, $translationIds) |
| 67 | { |
| 68 | return array_map(function ($translation) use ($section) { |
| 69 | return $section . '_' . $translation; |
| 70 | }, $translationIds); |
| 71 | } |
| 72 | } |
| 73 |