You are here

function locale_translation_status_save in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/locale/locale.module \locale_translation_status_save()
  2. 9 core/modules/locale/locale.module \locale_translation_status_save()

Saves the status of translation sources in static cache.

Parameters

string $project: Machine readable project name.

string $langcode: Language code.

string $type: Type of data to be stored.

object $data: File object also containing timestamp when the translation is last updated.

4 calls to locale_translation_status_save()
locale_translation_batch_fetch_download in core/modules/locale/locale.batch.inc
Implements callback_batch_operation().
locale_translation_batch_fetch_import in core/modules/locale/locale.batch.inc
Implements callback_batch_operation().
locale_translation_batch_status_check in core/modules/locale/locale.batch.inc
Implements callback_batch_operation().
locale_translation_check_projects_local in core/modules/locale/locale.compare.inc
Check and store the status and timestamp of local po files.

File

core/modules/locale/locale.module, line 902
Enables the translation of the user interface to languages other than English.

Code

function locale_translation_status_save($project, $langcode, $type, $data) {

  // Load the translation status or build it if not already available.
  \Drupal::moduleHandler()
    ->loadInclude('locale', 'inc', 'locale.translation');
  $status = locale_translation_get_status();
  if (empty($status)) {
    $projects = locale_translation_get_projects([
      $project,
    ]);
    if (isset($projects[$project])) {
      $status[$project][$langcode] = locale_translation_source_build($projects[$project], $langcode);
    }
  }

  // Merge the new status data with the existing status.
  if (isset($status[$project][$langcode])) {
    $request_time = \Drupal::time()
      ->getRequestTime();
    switch ($type) {
      case LOCALE_TRANSLATION_REMOTE:
      case LOCALE_TRANSLATION_LOCAL:

        // Add the source data to the status array.
        $status[$project][$langcode]->files[$type] = $data;

        // Check if this translation is the most recent one. Set timestamp and
        // data type of the most recent translation source.
        if (isset($data->timestamp) && $data->timestamp) {
          if ($data->timestamp > $status[$project][$langcode]->timestamp) {
            $status[$project][$langcode]->timestamp = $data->timestamp;
            $status[$project][$langcode]->last_checked = $request_time;
            $status[$project][$langcode]->type = $type;
          }
        }
        break;
      case LOCALE_TRANSLATION_CURRENT:
        $data->last_checked = $request_time;
        $status[$project][$langcode]->timestamp = $data->timestamp;
        $status[$project][$langcode]->last_checked = $data->last_checked;
        $status[$project][$langcode]->type = $type;
        locale_translation_update_file_history($data);
        break;
    }
    \Drupal::keyValue('locale.translation_status')
      ->set($project, $status[$project]);
    \Drupal::state()
      ->set('locale.translation_last_checked', $request_time);
  }
}