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;
 }