You are here

function locale_translate_batch_refresh in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/locale/locale.bulk.inc \locale_translate_batch_refresh()

Implements callback_batch_operation().

Refreshes translations after importing strings.

Parameters

array|\ArrayAccess $context: Contains a list of strings updated and information about the progress.

1 string reference to 'locale_translate_batch_refresh'
locale_translate_batch_build in core/modules/locale/locale.bulk.inc
Build a locale batch from an array of files.

File

core/modules/locale/locale.bulk.inc, line 301
Mass import-export and batch import functionality for Gettext .po files.

Code

function locale_translate_batch_refresh(&$context) {
  if (!isset($context['sandbox']['refresh'])) {
    $strings = $langcodes = [];
    if (isset($context['results']['stats'])) {

      // Get list of unique string identifiers and language codes updated.
      $langcodes = array_unique(array_values($context['results']['languages']));
      foreach ($context['results']['stats'] as $report) {
        $strings = array_merge($strings, $report['strings']);
      }
    }
    if ($strings) {

      // Initialize multi-step string refresh.
      $context['message'] = t('Updating translations for JavaScript and default configuration.');
      $context['sandbox']['refresh']['strings'] = array_unique($strings);
      $context['sandbox']['refresh']['languages'] = $langcodes;
      $context['sandbox']['refresh']['names'] = [];
      $context['results']['stats']['config'] = 0;
      $context['sandbox']['refresh']['count'] = count($strings);

      // We will update strings on later steps.
      $context['finished'] = 0;
    }
    else {
      $context['finished'] = 1;
    }
  }
  elseif ($name = array_shift($context['sandbox']['refresh']['names'])) {

    // Refresh all languages for one object at a time.
    $count = Locale::config()
      ->updateConfigTranslations([
      $name,
    ], $context['sandbox']['refresh']['languages']);
    $context['results']['stats']['config'] += $count;

    // Inherit finished information from the "parent" string lookup step so
    // visual display of status will make sense.
    $context['finished'] = $context['sandbox']['refresh']['names_finished'];
    $context['message'] = t('Updating default configuration (@percent%).', [
      '@percent' => (int) ($context['finished'] * 100),
    ]);
  }
  elseif (!empty($context['sandbox']['refresh']['strings'])) {

    // Not perfect but will give some indication of progress.
    $context['finished'] = 1 - count($context['sandbox']['refresh']['strings']) / $context['sandbox']['refresh']['count'];

    // Pending strings, refresh 100 at a time, get next pack.
    $next = array_slice($context['sandbox']['refresh']['strings'], 0, 100);
    array_splice($context['sandbox']['refresh']['strings'], 0, count($next));

    // Clear cache and force refresh of JavaScript translations.
    _locale_refresh_translations($context['sandbox']['refresh']['languages'], $next);

    // Check whether we need to refresh configuration objects.
    if ($names = Locale::config()
      ->getStringNames($next)) {
      $context['sandbox']['refresh']['names_finished'] = $context['finished'];
      $context['sandbox']['refresh']['names'] = $names;
    }
  }
  else {
    $context['message'] = t('Updated default configuration.');
    $context['finished'] = 1;
  }
}