/**
  * {@inheritdoc}
  */
 public function create($name, $path, $flush = false)
 {
     $path = $this->getFileRelativePath($path);
     $class = $this->storage->getModelClass('file');
     $file = new $class();
     $file->setName($name);
     $file->setPath($path);
     $file->setHash($this->generateHash($name, $path));
     $this->storage->persist($file);
     if ($flush) {
         $this->storage->flush();
     }
     return $file;
 }
 /**
  * {@inheritdoc}
  */
 public function process(FormInterface $form, Request $request)
 {
     $valid = false;
     if ($request->isMethod('POST')) {
         $form->handleRequest($request);
         if ($form->isValid()) {
             $transUnit = $form->getData();
             $translations = $transUnit->filterNotBlankTranslations();
             // only keep translations with a content
             // link new translations to a file to be able to export them.
             foreach ($translations as $translation) {
                 if (!$translation->getFile()) {
                     $file = $this->fileManager->getFor(sprintf('%s.%s.yml', $transUnit->getDomain(), $translation->getLocale()), $this->rootDir . '/Resources/translations');
                     if ($file instanceof FileInterface) {
                         $translation->setFile($file);
                     }
                 }
             }
             if ($transUnit instanceof PropelTransUnit) {
                 // The setTranslations() method only accepts PropelCollections
                 $translations = new \PropelObjectCollection($translations);
             }
             $transUnit->setTranslations($translations);
             $this->storage->persist($transUnit);
             $this->storage->flush();
             $valid = true;
         }
     }
     return $valid;
 }
 /**
  * Updates a trans unit from the request.
  *
  * @param integer $id
  * @param Request $request
  * @throws NotFoundHttpException
  * @return \Lexik\Bundle\TranslationBundle\Model\TransUnit
  */
 public function updateFromRequest($id, Request $request)
 {
     $transUnit = $this->storage->getTransUnitById($id);
     if (!$transUnit) {
         throw new NotFoundHttpException(sprintf('No TransUnit found for "%s"', $id));
     }
     $translationsContent = array();
     foreach ($this->managedLoales as $locale) {
         $translationsContent[$locale] = $request->request->get($locale);
     }
     $this->transUnitManager->updateTranslationsContent($transUnit, $translationsContent);
     if ($transUnit instanceof TransUnitDocument) {
         $transUnit->convertMongoTimestamp();
     }
     $this->storage->flush();
     return $transUnit;
 }
 /**
  * @param TransUnitInterface $transUnit
  * @param string             $locale
  * @return bool
  */
 public function deleteTranslation(TransUnitInterface $transUnit, $locale)
 {
     try {
         $translation = $transUnit->getTranslation($locale);
         $this->storage->remove($translation);
         $this->storage->flush();
         return true;
     } catch (\Exception $e) {
         return false;
     }
 }
예제 #5
0
 /**
  * Impoort the given file and return the number of inserted translations.
  *
  * @param \Symfony\Component\Finder\SplFileInfo $file
  * @param boolean                               $forceUpdate  force update of the translations
  * @param boolean                               $merge        merge translations
  * @return int
  */
 public function import(\Symfony\Component\Finder\SplFileInfo $file, $forceUpdate = false, $merge = false)
 {
     $this->skippedKeys = array();
     $imported = 0;
     list($domain, $locale, $extention) = explode('.', $file->getFilename());
     if (!isset($this->loaders[$extention])) {
         throw new \RuntimeException(sprintf('No load found for "%s" format.', $extention));
     }
     $messageCatalogue = $this->loaders[$extention]->load($file->getPathname(), $locale, $domain);
     $translationFile = $this->fileManager->getFor($file->getFilename(), $file->getPath());
     $keys = array();
     foreach ($messageCatalogue->all($domain) as $key => $content) {
         if (!isset($content)) {
             continue;
             // skip empty translation values
         }
         $normalizedKey = $this->caseInsensitiveInsert ? strtolower($key) : $key;
         if (in_array($normalizedKey, $keys, true)) {
             $this->skippedKeys[] = $key;
             continue;
             // skip duplicate keys
         }
         $transUnit = $this->storage->getTransUnitByKeyAndDomain($key, $domain);
         if (!$transUnit instanceof TransUnitInterface) {
             $transUnit = $this->transUnitManager->create($key, $domain);
         }
         $translation = $this->transUnitManager->addTranslation($transUnit, $locale, $content, $translationFile);
         if ($translation instanceof TranslationInterface) {
             $imported++;
         } elseif ($forceUpdate) {
             $translation = $this->transUnitManager->updateTranslation($transUnit, $locale, $content);
             $imported++;
         } elseif ($merge) {
             $translation = $this->transUnitManager->updateTranslation($transUnit, $locale, $content, false, true);
             if ($translation instanceof TranslationInterface) {
                 $imported++;
             }
         }
         $keys[] = $normalizedKey;
         // convert MongoTimestamp objects to time to don't get an error in:
         // Doctrine\ODM\MongoDB\Mapping\Types\TimestampType::convertToDatabaseValue()
         if ($transUnit instanceof TransUnitDocument) {
             $transUnit->convertMongoTimestamp();
         }
     }
     $this->storage->flush();
     // clear only Lexik entities
     foreach (array('file', 'trans_unit', 'translation') as $name) {
         $this->storage->clear($this->storage->getModelClass($name));
     }
     return $imported;
 }
 /**
  * {@inheritdoc}
  */
 public function updateTranslationsContent(TransUnitInterface $transUnit, array $translations, $flush = false)
 {
     foreach ($translations as $locale => $content) {
         if (!empty($content)) {
             if ($transUnit->hasTranslation($locale)) {
                 $this->updateTranslation($transUnit, $locale, $content);
                 if ($this->storage instanceof PropelStorage) {
                     $this->storage->persist($transUnit);
                 }
             } else {
                 //We need to get a proper file for this translation
                 $file = $this->getTranslationFile($transUnit, $locale);
                 $this->addTranslation($transUnit, $locale, $content, $file);
             }
         }
     }
     if ($flush) {
         $this->storage->flush();
     }
 }