HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/web/matomo.circ/core/Translation/Loader/DevelopmentLoader.php
<?php

/**
 * Matomo - free/libre analytics platform
 *
 * @link    https://matomo.org
 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 */

namespace Piwik\Translation\Loader;

/**
 * Loads a pseudo-language for developers where translation are equal to translation ids.
 */
class DevelopmentLoader implements LoaderInterface
{
    public const LANGUAGE_ID = 'dev';

    /**
     * Decorated loader.
     *
     * @var LoaderInterface
     */
    private $loader;

    /**
     * @var string
     */
    private $fallbackLanguage = 'en';

    /**
     * @param LoaderInterface $loader Decorate another loader to add the pseudo-language.
     */
    public function __construct(LoaderInterface $loader)
    {
        $this->loader = $loader;
    }

    /**
     * {@inheritdoc}
     */
    public function load($language, array $directories)
    {
        if ($language !== self::LANGUAGE_ID) {
            return $this->loader->load($language, $directories);
        }

        return $this->getDevelopmentTranslations($directories);
    }

    private function getDevelopmentTranslations(array $directories)
    {
        $fallbackTranslations = $this->loader->load($this->fallbackLanguage, $directories);

        $translations = array();

        foreach ($fallbackTranslations as $section => $sectionFallbackTranslations) {
            $translationIds = array_keys($sectionFallbackTranslations);
            $sectionTranslations = $this->prefixTranslationsWithSection($section, $translationIds);

            $translations[$section] = array_combine($translationIds, $sectionTranslations);
        }

        return $translations;
    }

    private function prefixTranslationsWithSection($section, $translationIds)
    {
        return array_map(function ($translation) use ($section) {
            return $section . '_' . $translation;
        }, $translationIds);
    }
}