1 gettext.inc _locale_import_one_string($op, $value = NULL, $mode = NULL, $langcode = NULL, $file = NULL)

Performs the specified operation for one string.

Parameters

string $op: Operation to perform: 'db-store', 'db-report', 'mem-store' or 'mem-report'.

array $value: Details of the string stored.

int $mode: Should existing translations be replaced LOCALE_IMPORT_KEEP or LOCALE_IMPORT_OVERWRITE.

$langcode: Language to store the string in.

stdClass $file: Object representation of file being imported, only required when op is 'db-store'.

Return value

NULL|array: If the operation is a "report" operation, an array is returned with information about currently stored strings. Other operations return NULL.

Related topics

File

core/includes/gettext.inc, line 388
Gettext parsing and generating API.

Code

function _locale_import_one_string($op, $value = NULL, $mode = NULL, $langcode = NULL, $file = NULL) {
  $report = &backdrop_static(__FUNCTION__, array('additions' => 0, 'updates' => 0, 'deletes' => 0, 'skips' => 0));
  $header_done = &backdrop_static(__FUNCTION__ . ':header_done', FALSE);
  $strings = &backdrop_static(__FUNCTION__ . ':strings', array());

  switch ($op) {
    // Return stored strings.
    case 'mem-report':
      return $strings;

      // Store string in memory (only supports single strings).
    case 'mem-store':
      $strings[isset($value['msgctxt']) ? $value['msgctxt'] : ''][$value['msgid']] = $value['msgstr'];
      return NULL;

      // Called at end of import to inform the user.
    case 'db-report':
      return array($header_done, $report['additions'], $report['updates'], $report['deletes'], $report['skips']);

      // Store the string we got in the database.
    case 'db-store':
      // We got header information.
      if ($value['msgid'] == '') {
        $locale_plurals = state_get('locale_translation_plurals', array());
        if (($mode != LOCALE_IMPORT_KEEP) || empty($locale_plurals[$langcode]['plurals'])) {
          // Since we only need to parse the header if we ought to update the
          // plural formula, only run this if we don't need to keep existing
          // data untouched or if we don't have an existing plural formula.
          $header = _locale_import_parse_header($value['msgstr']);

          // Get and store the plural formula if available.
          if (isset($header["Plural-Forms"]) && $p = _locale_import_parse_plural_forms($header["Plural-Forms"], $file->uri)) {
            list($nplurals, $formula) = $p;
            $locale_plurals[$langcode] = array(
              'plurals' => $nplurals,
              'formula' => $formula,
            );
            state_set('locale_translation_plurals', $locale_plurals);
          }
        }
        $header_done = TRUE;
      }

      else {
        // Some real string to import.
        $comments = _locale_import_shorten_comments(empty($value['#']) ? array() : $value['#']);

        if (strpos($value['msgid'], "\0")) {
          // This string has plural versions.
          $english = explode("\0", $value['msgid'], 2);
          $entries = array_keys($value['msgstr']);
          for ($i = 3; $i <= count($entries); $i++) {
            $english[] = $english[1];
          }
          $translation = array_map('_locale_import_append_plural', $value['msgstr'], $entries);
          $english = array_map('_locale_import_append_plural', $english, $entries);
          foreach ($translation as $key => $trans) {
            if ($key == 0) {
              $plid = 0;
            }
            $plid = _locale_import_one_string_db($report, $langcode, isset($value['msgctxt']) ? $value['msgctxt'] : '', $english[$key], $trans, $comments, $mode, $plid, $key);
          }
        }

        else {
          // A simple string to import.
          $english = $value['msgid'];
          $translation = $value['msgstr'];
          _locale_import_one_string_db($report, $langcode, isset($value['msgctxt']) ? $value['msgctxt'] : '', $english, $translation, $comments, $mode);
        }
      }
      // End of db-store operation.
  }

  return NULL;
}