PoDatabaseWriter::importString

private PoDatabaseWriter::importString(PoItem $item)

Imports one string into the database.

Parameters

\Drupal\Component\Gettext\PoItem $item: The item being imported.

Return value

int The string ID of the existing string modified or the new string added.

File

core/modules/locale/src/PoDatabaseWriter.php, line 206

Class

PoDatabaseWriter
Gettext PO writer working with the locale module database.

Namespace

Drupal\locale

Code

private function importString(PoItem $item) {
  // Initialize overwrite options if not set.
  $this->options['overwrite_options'] += array(
    'not_customized' => FALSE,
    'customized' => FALSE,
  );
  $overwrite_options = $this->options['overwrite_options'];
  $customized = $this->options['customized'];

  $context = $item->getContext();
  $source = $item->getSource();
  $translation = $item->getTranslation();

  // Look up the source string and any existing translation.
  $strings = \Drupal::service('locale.storage')->getTranslations(array(
    'language' => $this->langcode,
    'source' => $source,
    'context' => $context,
  ));
  $string = reset($strings);

  if (!empty($translation)) {
    // Skip this string unless it passes a check for dangerous code.
    if (!locale_string_is_safe($translation)) {
      \Drupal::logger('locale')->error('Import of string "%string" was skipped because of disallowed or malformed HTML.', array('%string' => $translation));
      $this->report['skips']++;
      return 0;
    }
    elseif ($string) {
      $string->setString($translation);
      if ($string->isNew()) {
        // No translation in this language.
        $string->setValues(array(
          'language' => $this->langcode,
          'customized' => $customized,
        ));
        $string->save();
        $this->report['additions']++;
      }
      elseif ($overwrite_options[$string->customized ? 'customized' : 'not_customized']) {
        // Translation exists, only overwrite if instructed.
        $string->customized = $customized;
        $string->save();
        $this->report['updates']++;
      }
      $this->report['strings'][] = $string->getId();
      return $string->lid;
    }
    else {
      // No such source string in the database yet.
      $string = \Drupal::service('locale.storage')->createString(array('source' => $source, 'context' => $context))
        ->save();
      \Drupal::service('locale.storage')->createTranslation(array(
        'lid' => $string->getId(),
        'language' => $this->langcode,
        'translation' => $translation,
        'customized' => $customized,
      ))->save();

      $this->report['additions']++;
      $this->report['strings'][] = $string->getId();
      return $string->lid;
    }
  }
  elseif ($string && !$string->isNew() && $overwrite_options[$string->customized ? 'customized' : 'not_customized']) {
    // Empty translation, remove existing if instructed.
    $string->delete();
    $this->report['deletes']++;
    $this->report['strings'][] = $string->lid;
    return $string->lid;
  }
}
doc_Drupal
2016-10-29 09:34:27
Comments
Leave a Comment

Please login to continue.