entity_mesh-1.1.1/src/Language/LanguageNegotiatorSwitcher.php

src/Language/LanguageNegotiatorSwitcher.php
<?php

namespace Drupal\entity_mesh\Language;

use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\StringTranslation\TranslationManager;
use Drupal\language\ConfigurableLanguageManager;
use Drupal\language\LanguageNegotiatorInterface;

/**
 * Changes language negotiator on runtime.
 *
 * It is used in cases it is needed to render content
 * in a language which is not the current language.
 */
class LanguageNegotiatorSwitcher {

  /**
   * Used to change the language negotiator.
   *
   * @var \Drupal\Core\Language\LanguageManagerInterface
   */
  protected LanguageManagerInterface $languageManager;

  /**
   * Used to ensure we can change language / language negotiator.
   *
   * @var \Drupal\Core\Extension\ModuleHandlerInterface
   */
  protected ModuleHandlerInterface $moduleHandler;

  /**
   * Used to change default langcode of translated strings.
   *
   * @var \Drupal\Core\StringTranslation\TranslationManager
   */
  protected TranslationManager $translationManager;

  /**
   * Force the language to be a specific one.
   *
   * @var StaticLanguageNegotiator
   */
  protected StaticLanguageNegotiator $languageNegotiator;

  /**
   * Old translation language used code by string translation service.
   *
   * @var string|null
   */
  protected ?string $oldTranslationLangcode;

  /**
   * Old negotiator before the language negotiator added by us.
   *
   * @var \Drupal\language\LanguageNegotiatorInterface|null
   */
  protected ?LanguageNegotiatorInterface $oldNegotiator;

  public function __construct(LanguageManagerInterface $language_manager, ModuleHandlerInterface $module_handler, TranslationManager $translation_manager, StaticLanguageNegotiator $language_negotiator) {
    $this->languageManager = $language_manager;
    $this->moduleHandler = $module_handler;
    $this->translationManager = $translation_manager;
    $this->languageNegotiator = $language_negotiator;
  }

  /**
   * Switch to the selected language.
   *
   * @param \Drupal\Core\Language\LanguageInterface $language
   *   The language we want to switch.
   */
  public function switchLanguage(LanguageInterface $language) {
    if ($this->moduleHandler->moduleExists('language') && $this->languageManager instanceof ConfigurableLanguageManager) {
      $this->oldNegotiator = $this->languageManager->getNegotiator();
      $this->oldTranslationLangcode = $this->languageManager->getCurrentLanguage()->getId();
      $this->languageNegotiator->setLanguage($language);
      $this->languageManager->setNegotiator($this->languageNegotiator);
      $this->translationManager->setDefaultLangcode($language->getId());
      $this->languageManager->reset();
    }
  }

  /**
   * Switch to the previous language.
   */
  public function switchBack() {
    if ($this->moduleHandler->moduleExists('language') && $this->languageManager instanceof ConfigurableLanguageManager
      && $this->oldNegotiator instanceof LanguageNegotiatorInterface
      && !empty($this->oldTranslationLangcode)) {
      $this->languageManager->setNegotiator($this->oldNegotiator);
      $this->translationManager->setDefaultLangcode($this->oldTranslationLangcode);
      $this->languageManager->reset();
      $this->oldNegotiator = NULL;
      $this->oldTranslationLangcode = NULL;
    }
  }

}

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

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