You are here

function _install_config_locale_overrides in Drupal 10

Creates a batch to process config translations after installing from config.

This ensures that the logic from LocaleConfigSubscriber::onConfigSave() is run on sites after installing from configuration so updating translations from PO files does not result in overwriting customizations.

Return value

array The batch definition.

See also

\Drupal\locale\LocaleConfigSubscriber::onConfigSave()

1 call to _install_config_locale_overrides()
install_finish_translations in core/includes/install.core.inc
Finishes importing files at end of installation.

File

core/includes/install.core.inc, line 2468
API functions for installing Drupal.

Code

function _install_config_locale_overrides() {

  // @todo https://www.drupal.org/project/drupal/issues/3252244 Somehow the
  //   config cache gets filled up with junk after installing from
  //   configuration.
  \Drupal::service('cache.config')
    ->deleteAll();

  // Get the services we need.
  $language_manager = \Drupal::languageManager();

  /** @var \Drupal\locale\LocaleConfigManager $locale_config_manager */
  $locale_config_manager = \Drupal::service('locale.config_manager');
  $langcodes = array_keys($language_manager
    ->getLanguages());
  if (count($langcodes) > 1 && !$language_manager instanceof ConfigurableLanguageManagerInterface) {
    throw new \LogicException('There are multiple languages and the language manager is not an instance of ConfigurableLanguageManagerInterface');
  }
  $batch_builder = (new BatchBuilder())
    ->setFile('core/includes/install.core.inc')
    ->setTitle(t('Updating configuration translations'))
    ->setInitMessage(t('Starting configuration update'))
    ->setErrorMessage(t('Error updating configuration translations'));
  $i = 0;
  $batch_names = [];
  foreach ($locale_config_manager
    ->getComponentNames() as $name) {
    $batch_names[] = $name;
    $i++;

    // During installation the caching of configuration objects is disabled so
    // it is very expensive to initialize the \Drupal::config() object on each
    // request. We batch a small number of configuration object upgrades
    // together to improve the overall performance of the process.
    if ($i % 20 == 0) {
      $batch_builder
        ->addOperation('_install_config_locale_overrides_process_batch', [
        $batch_names,
        $langcodes,
      ]);
      $batch_names = [];
    }
  }
  if (!empty($batch_names)) {
    $batch_builder
      ->addOperation('_install_config_locale_overrides_process_batch', [
      $batch_names,
      $langcodes,
    ]);
  }
  return $batch_builder
    ->toArray();
}