Пример #1
0
 /**
  * Imports one string into the database.
  *
  * @param PoItem $item
  *   The item being imported.
  *
  * @return int
  *   The string ID of the existing string modified or the new string added.
  */
 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();
     $textgroup = $item->getTextgroup();
     // Look up the source string and any existing translation.
     $strings = $this->storage->getTranslations(array('language' => $this->_langcode, 'source' => $source, 'context' => $context, 'textgroup' => $textgroup));
     $string = reset($strings);
     if (!empty($translation)) {
         // Skip this string unless it passes a check for dangerous code.
         if (!locale_string_is_safe($translation)) {
             watchdog('l10n_update', 'Import of string "%string" was skipped because of disallowed or malformed HTML.', array('%string' => $translation), WATCHDOG_ERROR);
             $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 = $this->storage->createString(array('source' => $source, 'context' => $context, 'textgroup' => $textgroup))->save();
             $target = $this->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;
     }
 }