test_support-1.0.x-dev/tests/src/Traits/Support/InteractsWithLanguages.php

tests/src/Traits/Support/InteractsWithLanguages.php
<?php

namespace Drupal\Tests\test_support\Traits\Support;

use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\language\ConfigurableLanguageInterface;
use Drupal\Tests\test_support\Traits\Installs\InstallsExportedConfig;
use PHPUnit\Framework\Assert;

trait InteractsWithLanguages
{
    use InstallsExportedConfig;

    /** @var string[] */
    protected $installedLanguages = [
        'en', // EN is installed by default
    ];

    /** @var bool */
    protected $installLanguageModule = false;

    protected function languageManager(): LanguageManagerInterface
    {
        return $this->container->get('language_manager');
    }

    /** @param string|string[] $langcodes */
    protected function installLanguage($langcodes): void
    {
        $this->setupLanguageDependencies();

        foreach ((array) $langcodes as $langcode) {
            $this->installExportedConfig('language.entity.' . $langcode);
        }

        /** @phpstan-ignore-next-line */
        $this->container->get('kernel')->rebuildContainer();
    }

    /** @param ConfigurableLanguageInterface|string $language */
    protected function setCurrentLanguage($language, ?string $prefix = null): void
    {
        $this->setupLanguageDependencies();

        if (is_string($language)) {
            if (in_array($language, $this->installedLanguages) === false) {
                $this->installLanguage($language);
            }

            $language = $this->container->get('entity_type.manager')->getStorage(
                'configurable_language'
            )->load($language);
        }

        if ($language instanceof ConfigurableLanguageInterface === false) {
            Assert::fail('Could not install language');
        }

        $this->config('system.site')
            ->set('langcode', $language->getId())
            ->set('default_langcode', $language->getId())
            ->save();

        if ($prefix !== null) {
            $languageNegotiation = $this->config('language.negotiation');

            /** @var array<string, string> $prefixes */
            $prefixes = $languageNegotiation->get('url.prefixes');

            $prefixes[$language->id()] = $prefix;

            $languageNegotiation->set('url.prefixes', $prefixes)->save();
        }

        $this->container->get('language.default')->set($language);

        $this->languageManager()->reset();

        $this->installedLanguages[] = $language->getId();
    }

    private function setupLanguageDependencies(): void
    {
        if ($this->installLanguageModule) {
            return;
        }

        $this->installLanguageModule = true;

        $this->enableModules(['language']);
        $this->installConfig('language');
        $this->installEntitySchema('configurable_language');
        $this->setCurrentLanguage('en');
    }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc