function locale_translate_batch_refresh

Same name and namespace in other branches
  1. 9 core/modules/locale/locale.bulk.inc \locale_translate_batch_refresh()
  2. 8.9.x core/modules/locale/locale.bulk.inc \locale_translate_batch_refresh()
  3. 10 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 300

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[] = $report['strings'];
            }
            $strings = array_merge(...$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 = \Drupal::service('locale.config_manager')->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 = \Drupal::service('locale.config_manager')->getStringNames($next)) {
            $context['sandbox']['refresh']['names_finished'] = $context['finished'];
            $context['sandbox']['refresh']['names'] = $names;
        }
    }
    else {
        $context['message'] = t('Updated default configuration.');
        $context['finished'] = 1;
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.