baseStorage = $storage; $this->eventDispatcher = $event_dispatcher; $this->typedConfigManager = $typed_config; // Prior to negotiation the override language should be the default // language. $this->language = $default_language->get(); } /** * {@inheritdoc} */ public function loadOverrides($names) { if ($this->language) { $storage = $this->getStorage($this->language->getId()); return $storage->readMultiple($names); } return []; } /** * {@inheritdoc} */ public function getOverride($langcode, $name) { $storage = $this->getStorage($langcode); $data = $storage->read($name); $override = new LanguageConfigOverride( $name, $storage, $this->typedConfigManager, $this->eventDispatcher ); if (!empty($data)) { $override->initWithData($data); } return $override; } /** * {@inheritdoc} */ public function getStorage($langcode) { if (!isset($this->storages[$langcode])) { $this->storages[$langcode] = $this->baseStorage->createCollection($this->createConfigCollectionName($langcode)); } return $this->storages[$langcode]; } /** * {@inheritdoc} */ public function getCacheSuffix() { return $this->language ? $this->language->getId() : NULL; } /** * {@inheritdoc} */ public function getLanguage() { return $this->language; } /** * {@inheritdoc} */ public function setLanguage(LanguageInterface $language = NULL) { $this->language = $language; return $this; } /** * {@inheritdoc} */ public function setLanguageFromDefault(LanguageDefault $language_default = NULL) { $this->language = $language_default ? $language_default->get() : NULL; return $this; } /** * {@inheritdoc} */ public function installLanguageOverrides($langcode) { /** @var \Drupal\Core\Config\ConfigInstallerInterface $config_installer */ $config_installer = \Drupal::service('config.installer'); $config_installer->installCollectionDefaultConfig($this->createConfigCollectionName($langcode)); } /** * {@inheritdoc} */ public function createConfigObject($name, $collection = StorageInterface::DEFAULT_COLLECTION) { $langcode = $this->getLangcodeFromCollectionName($collection); return $this->getOverride($langcode, $name); } /** * {@inheritdoc} */ public function addCollections(ConfigCollectionInfo $collection_info) { foreach (\Drupal::languageManager()->getLanguages() as $language) { $collection_info->addCollection($this->createConfigCollectionName($language->getId()), $this); } } /** * {@inheritdoc} */ public function onConfigSave(ConfigCrudEvent $event) { $config = $event->getConfig(); $name = $config->getName(); foreach (\Drupal::languageManager()->getLanguages() as $language) { $config_translation = $this->getOverride($language->getId(), $name); if (!$config_translation->isNew()) { $this->filterOverride($config, $config_translation); } } } /** * {@inheritdoc} */ public function onConfigRename(ConfigRenameEvent $event) { $config = $event->getConfig(); $name = $config->getName(); $old_name = $event->getOldName(); foreach (\Drupal::languageManager()->getLanguages() as $language) { $config_translation = $this->getOverride($language->getId(), $old_name); if (!$config_translation->isNew()) { $saved_config = $config_translation->get(); $storage = $this->getStorage($language->getId()); $storage->write($name, $saved_config); $config_translation->delete(); } } } /** * {@inheritdoc} */ public function onConfigDelete(ConfigCrudEvent $event) { $config = $event->getConfig(); $name = $config->getName(); foreach (\Drupal::languageManager()->getLanguages() as $language) { $config_translation = $this->getOverride($language->getId(), $name); if (!$config_translation->isNew()) { $config_translation->delete(); } } } /** * {@inheritdoc} */ public function getCacheableMetadata($name) { $metadata = new CacheableMetadata(); if ($this->language) { $metadata->setCacheContexts(['languages:language_interface']); } return $metadata; } }