/**
  * Get a profile's translation messages based on a previous Profiler token.
  *
  * @param string $token by which a Profile can be found in the Profiler
  *
  * @return array with collection of TransUnits and it's count
  */
 public function getByToken($token)
 {
     if (null === $this->profiler) {
         throw new \RuntimeException('Invalid profiler instance.');
     }
     $profile = $this->profiler->loadProfile($token);
     // In case no results were found
     if (!$profile instanceof Profile) {
         return array(array(), 0);
     }
     try {
         /** @var TranslationDataCollector $collector */
         $collector = $profile->getCollector('translation');
         $messages = $collector->getMessages();
         $transUnits = array();
         foreach ($messages as $message) {
             $transUnit = $this->storage->getTransUnitByKeyAndDomain($message['id'], $message['domain']);
             if ($transUnit instanceof TransUnit) {
                 $transUnits[] = $transUnit;
             } elseif (true === $this->createMissing) {
                 $transUnits[] = $transUnit = $this->transUnitManager->create($message['id'], $message['domain'], true);
             }
             // Also store the translation if profiler state was defined
             if (!$transUnit->hasTranslation($message['locale']) && $message['state'] == DataCollectorTranslator::MESSAGE_DEFINED) {
                 $this->transUnitManager->addTranslation($transUnit, $message['locale'], $message['translation'], null, true);
             }
         }
         return array($transUnits, count($transUnits));
     } catch (\InvalidArgumentException $e) {
         // Translation collector is a 2.7 feature
         return array(array(), 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
  * @return int
  */
 public function import(\Symfony\Component\Finder\SplFileInfo $file, $forceUpdate = false)
 {
     $imported = 0;
     list($domain, $locale, $extention) = explode('.', $file->getFilename());
     if (isset($this->loaders[$extention])) {
         $messageCatalogue = $this->loaders[$extention]->load($file->getPathname(), $locale, $domain);
         $translationFile = $this->fileManager->getFor($file->getFilename(), $file->getPath());
         foreach ($messageCatalogue->all($domain) as $key => $content) {
             // skip empty translation values
             if (!isset($content)) {
                 continue;
             }
             $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++;
             } else {
                 if ($forceUpdate) {
                     $translation = $this->transUnitManager->updateTranslation($transUnit, $locale, $content);
                     $imported++;
                 }
             }
             // 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));
         }
     } else {
         throw new \RuntimeException(sprintf('No load found for "%s" format.', $extention));
     }
     return $imported;
 }