Vous êtes connecté en tant que anonymous Se Deconnecter
vendor/symfony/translation/Dumper/MoFileDumper.php
4f5a31d2
 <?php
 
 /*
  * This file is part of the Symfony package.
  *
  * (c) Fabien Potencier <fabien@symfony.com>
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
  */
 
 namespace Symfony\Component\Translation\Dumper;
 
 use Symfony\Component\Translation\Loader\MoFileLoader;
 use Symfony\Component\Translation\MessageCatalogue;
 
 /**
  * MoFileDumper generates a gettext formatted string representation of a message catalogue.
  *
  * @author Stealth35
  */
 class MoFileDumper extends FileDumper
 {
     /**
      * {@inheritdoc}
      */
     public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = [])
     {
         $sources = $targets = $sourceOffsets = $targetOffsets = '';
         $offsets = [];
         $size = 0;
 
         foreach ($messages->all($domain) as $source => $target) {
             $offsets[] = array_map('strlen', [$sources, $source, $targets, $target]);
             $sources .= "\0".$source;
             $targets .= "\0".$target;
             ++$size;
         }
 
         $header = [
             'magicNumber' => MoFileLoader::MO_LITTLE_ENDIAN_MAGIC,
             'formatRevision' => 0,
             'count' => $size,
             'offsetId' => MoFileLoader::MO_HEADER_SIZE,
             'offsetTranslated' => MoFileLoader::MO_HEADER_SIZE + (8 * $size),
             'sizeHashes' => 0,
             'offsetHashes' => MoFileLoader::MO_HEADER_SIZE + (16 * $size),
         ];
 
         $sourcesSize = \strlen($sources);
         $sourcesStart = $header['offsetHashes'] + 1;
 
         foreach ($offsets as $offset) {
             $sourceOffsets .= $this->writeLong($offset[1])
                           .$this->writeLong($offset[0] + $sourcesStart);
             $targetOffsets .= $this->writeLong($offset[3])
                           .$this->writeLong($offset[2] + $sourcesStart + $sourcesSize);
         }
 
         $output = implode('', array_map([$this, 'writeLong'], $header))
                .$sourceOffsets
                .$targetOffsets
                .$sources
                .$targets
                 ;
 
         return $output;
     }
 
     /**
      * {@inheritdoc}
      */
     protected function getExtension()
     {
         return 'mo';
     }
 
     private function writeLong($str)
     {
         return pack('V*', $str);
     }
 }