コード例 #1
0
 /**
  * Implements Drupal\Component\Gettext\PoWriterInterface::writeItem().
  */
 public function writeItem(PoItem $item)
 {
     if (is_array($item->getSource())) {
         $item->setSource(implode(LOCALE_PLURAL_DELIMITER, $item->getSource()));
         $item->setTranslation(implode(LOCALE_PLURAL_DELIMITER, $item->getTranslation()));
     }
     $context = $item->getContext();
     $this->_items[$context != NULL ? $context : ''][$item->getSource()] = $item->getTranslation();
 }
コード例 #2
0
 /**
  * Imports one string into the database.
  *
  * @param \Drupal\Component\Gettext\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();
     // 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;
     }
 }
コード例 #3
0
 /**
  * Store the parsed values as a PoItem object.
  */
 public function setItemFromArray($value)
 {
     $plural = FALSE;
     $comments = '';
     if (isset($value['#'])) {
         $comments = $this->shortenComments($value['#']);
     }
     if (is_array($value['msgstr'])) {
         // Sort plural variants by their form index.
         ksort($value['msgstr']);
         $plural = TRUE;
     }
     $item = new PoItem();
     $item->setContext(isset($value['msgctxt']) ? $value['msgctxt'] : '');
     $item->setSource($value['msgid']);
     $item->setTranslation($value['msgstr']);
     $item->setPlural($plural);
     $item->setComment($comments);
     $item->setLangcode($this->_langcode);
     $this->_last_item = $item;
     $this->_context = 'COMMENT';
 }
コード例 #4
0
ファイル: PoDatabaseReader.php プロジェクト: ddrozdik/dmaps
 /**
  * {@inheritdoc}
  */
 public function readItem()
 {
     if ($string = $this->readString()) {
         $values = (array) $string;
         $po_item = new PoItem();
         $po_item->setFromArray($values);
         return $po_item;
     }
 }