public function executeUpload(sfWebRequest $request) { $language = LanguageTable::getInstance()->find($request->getParameter('id')); /* @var $language Language */ if (!$language) { return $this->notFound(); } if ($request->getPostParameter('csrf_token') == UtilCSRF::gen('language_upload', $language->getId())) { $this->ajax()->setAlertTarget('#upload', 'append'); $file = $request->getFiles('file'); if ($file && $file['tmp_name']) { $parser = new sfMessageSource_XLIFF(); if ($parser->loadData($file['tmp_name'])) { $dir = dirname($language->i18nFileWidget()); if (!file_exists($dir)) { mkdir($dir); } move_uploaded_file($file['tmp_name'], $language->i18nFileWidget()); $language->i18nCacheWidgetClear(); return $this->ajax()->alert('Language file updated.', '', null, null, false, 'success')->render(true); } return $this->ajax()->alert('File invalid.', '', null, null, false, 'error')->render(true); } return $this->ajax()->alert('Upload failed.', '', null, null, false, 'error')->render(true); } return $this->notFound(); }
protected function extractTranslations($arguments = array(), $options = array()) { $translations = array(); $this->logSection('i18n', sprintf('Find XLIFF files named "%s"', $options['filename'])); // Search for xliff files $files = sfFinder::type('file')->name($options['filename'])->in($arguments['path']); if (0 == count($files)) { $this->logSection('i18n', 'No valid files found. Please check path and filename'); return; } // Extract translation strings foreach ($files as $file) { $culture = self::getTargetCulture($file); $xliff = new sfMessageSource_XLIFF(substr($file, 0, strrpos('/'))); if (!($messages = $xliff->loadData($file))) { continue; } // Build list of translations, keyed on source value foreach ($messages as $source => $message) { if (0 < strlen($message[0])) { $translations[$source][$culture] = $message[0]; } } } return $translations; }
public function &loadData($filename) { $result = parent::loadData($filename); // OpenPNE doesn't allow translating empty string unset($result['']); return $result; }