Same name and namespace in other branches
  1. 8.9.x core/modules/locale/src/LocaleDefaultConfigStorage.php \Drupal\locale\LocaleDefaultConfigStorage
  2. 9 core/modules/locale/src/LocaleDefaultConfigStorage.php \Drupal\locale\LocaleDefaultConfigStorage

Provides access to default configuration for locale integration.

Allows unified access to default configuration from one of three sources:

  • Required default configuration (config/install/*)
  • Optional default configuration (config/optional/*)
  • Predefined languages mocked as default configuration (list defined in LocaleConfigManagerInterface::getStandardLanguageList())

These sources are considered equal in terms of how locale module interacts with them for translation. Their translatable source strings are exposed for interface translation and participate in remote translation updates.

Hierarchy

Expanded class hierarchy of LocaleDefaultConfigStorage

1 string reference to 'LocaleDefaultConfigStorage'
locale.services.yml in core/modules/locale/locale.services.yml
core/modules/locale/locale.services.yml
1 service uses LocaleDefaultConfigStorage
locale.default.config.storage in core/modules/locale/locale.services.yml
Drupal\locale\LocaleDefaultConfigStorage

File

core/modules/locale/src/LocaleDefaultConfigStorage.php, line 22

Namespace

Drupal\locale
View source
class LocaleDefaultConfigStorage {

  /**
   * The storage instance for reading configuration data.
   *
   * @var \Drupal\Core\Config\StorageInterface
   */
  protected $configStorage;

  /**
   * The language manager.
   *
   * @var \Drupal\language\ConfigurableLanguageManagerInterface
   */
  protected $languageManager;

  /**
   * The storage instance for reading required default configuration data.
   *
   * @var \Drupal\Core\Config\StorageInterface
   */
  protected $requiredInstallStorage;

  /**
   * The storage instance for reading optional default configuration data.
   *
   * @var \Drupal\Core\Config\StorageInterface
   */
  protected $optionalInstallStorage;

  /**
   * Constructs a LocaleDefaultConfigStorage.
   *
   * @param \Drupal\Core\Config\StorageInterface $config_storage
   *   The storage object to use for reading configuration data.
   * @param \Drupal\language\ConfigurableLanguageManagerInterface $language_manager
   *   The language manager.
   * @param string $install_profile
   *   The current installation profile.
   */
  public function __construct(StorageInterface $config_storage, ConfigurableLanguageManagerInterface $language_manager, $install_profile) {
    $this->configStorage = $config_storage;
    $this->languageManager = $language_manager;
    $this->requiredInstallStorage = new ExtensionInstallStorage($this->configStorage, ExtensionInstallStorage::CONFIG_INSTALL_DIRECTORY, ExtensionInstallStorage::DEFAULT_COLLECTION, TRUE, $install_profile);
    $this->optionalInstallStorage = new ExtensionInstallStorage($this->configStorage, ExtensionInstallStorage::CONFIG_OPTIONAL_DIRECTORY, ExtensionInstallStorage::DEFAULT_COLLECTION, TRUE, $install_profile);
  }

  /**
   * Read a configuration from install storage or default languages.
   *
   * @param string $name
   *   Configuration object name.
   *
   * @return array
   *   Configuration data from install storage or default language.
   */
  public function read($name) {
    if ($this->requiredInstallStorage
      ->exists($name)) {
      return $this->requiredInstallStorage
        ->read($name);
    }
    elseif ($this->optionalInstallStorage
      ->exists($name)) {
      return $this->optionalInstallStorage
        ->read($name);
    }
    elseif (str_starts_with($name, 'language.entity.')) {

      // Simulate default languages as if they were shipped as default
      // configuration.
      $langcode = str_replace('language.entity.', '', $name);
      $predefined_languages = $this->languageManager
        ->getStandardLanguageList();
      if (isset($predefined_languages[$langcode])) {
        $data = $this->configStorage
          ->read($name);
        $data['label'] = $predefined_languages[$langcode][0];
        return $data;
      }
    }
  }

  /**
   * Return the list of configuration in install storage and current languages.
   *
   * @return array
   *   List of configuration in install storage and current languages.
   */
  public function listAll() {
    $languages = $this
      ->predefinedConfiguredLanguages();
    return array_unique(array_merge($this->requiredInstallStorage
      ->listAll(), $this->optionalInstallStorage
      ->listAll(), $languages));
  }

  /**
   * Get all configuration names and folders for a list of modules or themes.
   *
   * @param string $type
   *   Type of components: 'module' | 'theme' | 'profile'
   * @param array $list
   *   Array of theme or module names.
   *
   * @return array
   *   Configuration names provided by that component. In case of language
   *   module this list is extended with configured languages that have
   *   predefined names as well.
   */
  public function getComponentNames($type, array $list) {
    $names = array_unique(array_merge(array_keys($this->requiredInstallStorage
      ->getComponentNames($list)), array_keys($this->optionalInstallStorage
      ->getComponentNames($list))));
    if ($type == 'module' && in_array('language', $list)) {
      $languages = $this
        ->predefinedConfiguredLanguages();
      $names = array_unique(array_merge($names, $languages));
    }
    return $names;
  }

  /**
   * Compute the list of configuration names that match predefined languages.
   *
   * @return array
   *   The list of configuration names that match predefined languages.
   */
  protected function predefinedConfiguredLanguages() {
    $names = $this->configStorage
      ->listAll('language.entity.');
    $predefined_languages = $this->languageManager
      ->getStandardLanguageList();
    foreach ($names as $id => $name) {
      $langcode = str_replace('language.entity.', '', $name);
      if (!isset($predefined_languages[$langcode])) {
        unset($names[$id]);
      }
    }
    return array_values($names);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
LocaleDefaultConfigStorage::$configStorage protected property The storage instance for reading configuration data.
LocaleDefaultConfigStorage::$languageManager protected property The language manager.
LocaleDefaultConfigStorage::$optionalInstallStorage protected property The storage instance for reading optional default configuration data.
LocaleDefaultConfigStorage::$requiredInstallStorage protected property The storage instance for reading required default configuration data.
LocaleDefaultConfigStorage::getComponentNames public function Get all configuration names and folders for a list of modules or themes.
LocaleDefaultConfigStorage::listAll public function Return the list of configuration in install storage and current languages.
LocaleDefaultConfigStorage::predefinedConfiguredLanguages protected function Compute the list of configuration names that match predefined languages.
LocaleDefaultConfigStorage::read public function Read a configuration from install storage or default languages.
LocaleDefaultConfigStorage::__construct public function Constructs a LocaleDefaultConfigStorage.