postoffice-1.0.x-dev/src/Language/LanguageSwitcher.php

src/Language/LanguageSwitcher.php
<?php

namespace Drupal\postoffice\Language;

use Drupal\Core\Language\LanguageDefault;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\StringTranslation\TranslationManager;

/**
 * Implements the language switcher service.
 */
class LanguageSwitcher implements LanguageSwitcherInterface {

  use StringTranslationTrait;

  /**
   * The language default.
   *
   * @var \Drupal\Core\Language\LanguageDefault
   */
  protected $languageDefault;

  /**
   * The language manager.
   */
  protected LanguageManagerInterface $languageManager;

  /**
   * Constructs a language switcher.
   *
   * @param \Drupal\Core\Language\LanguageDefault $languageDefault
   *   The language default.
   * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager
   *   The language manager.
   */
  public function __construct(LanguageDefault $languageDefault, LanguageManagerInterface $languageManager) {
    $this->languageDefault = $languageDefault;
    $this->languageManager = $languageManager;
  }

  /**
   * {@inheritdoc}
   *
   * @see Drupal\commerce\MailHandler
   */
  public function switchTo($langcode): void {
    if (!$this->languageManager->isMultilingual()) {
      return;
    }
    $language = $this->languageManager->getLanguage($langcode);
    if (!$language) {
      return;
    }
    // The language manager has no method for overriding the default
    // language, like it does for config overrides. We have to change the
    // default language service's current language.
    // @see https://www.drupal.org/project/drupal/issues/3029010
    $this->languageDefault->set($language);
    $this->languageManager->setConfigOverrideLanguage($language);
    $this->languageManager->reset();

    // The default string_translation service, TranslationManager, has a
    // setDefaultLangcode method. However, this method is not present on
    // either of its interfaces. Therefore we check for the concrete class
    // here so that any swapped service does not break the application.
    // @see https://www.drupal.org/project/drupal/issues/3029003
    $string_translation = $this->getStringTranslation();
    if ($string_translation instanceof TranslationManager) {
      $string_translation->setDefaultLangcode($language->getId());
      $string_translation->reset();
    }
  }

}

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

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