2011-11-09 23:24:31 +00:00
< ? 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\MessageCatalogue ;
use Symfony\Component\Translation\Loader\MoFileLoader ;
/**
2012-04-28 04:51:32 +01:00
* MoFileDumper generates a gettext formatted string representation of a message catalogue .
2011-11-09 23:24:31 +00:00
*
* @ author Stealth35
*/
class MoFileDumper extends FileDumper
{
/**
2014-04-15 06:57:34 +01:00
* { @ inheritdoc }
2011-11-09 23:24:31 +00:00
*/
public function format ( MessageCatalogue $messages , $domain = 'messages' )
2015-09-05 16:43:58 +01:00
{
2017-12-31 04:48:26 +00:00
@ trigger_error ( 'The ' . __METHOD__ . ' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.' , E_USER_DEPRECATED );
2015-09-05 16:43:58 +01:00
return $this -> formatCatalogue ( $messages , $domain );
}
/**
* { @ inheritdoc }
*/
2015-09-18 17:59:19 +01:00
public function formatCatalogue ( MessageCatalogue $messages , $domain , array $options = array ())
2011-11-09 23:24:31 +00:00
{
2016-09-02 19:13:13 +01:00
$sources = $targets = $sourceOffsets = $targetOffsets = '' ;
2011-11-09 23:24:31 +00:00
$offsets = array ();
$size = 0 ;
foreach ( $messages -> all ( $domain ) as $source => $target ) {
$offsets [] = array_map ( 'strlen' , array ( $sources , $source , $targets , $target ));
$sources .= " \0 " . $source ;
$targets .= " \0 " . $target ;
++ $size ;
}
$header = array (
2014-10-22 19:27:13 +01:00
'magicNumber' => MoFileLoader :: MO_LITTLE_ENDIAN_MAGIC ,
'formatRevision' => 0 ,
'count' => $size ,
'offsetId' => MoFileLoader :: MO_HEADER_SIZE ,
2011-11-09 23:24:31 +00:00
'offsetTranslated' => MoFileLoader :: MO_HEADER_SIZE + ( 8 * $size ),
2014-10-22 19:27:13 +01:00
'sizeHashes' => 0 ,
'offsetHashes' => MoFileLoader :: MO_HEADER_SIZE + ( 16 * $size ),
2011-11-09 23:24:31 +00:00
);
2014-10-22 19:27:13 +01:00
$sourcesSize = strlen ( $sources );
2011-11-17 22:14:19 +00:00
$sourcesStart = $header [ 'offsetHashes' ] + 1 ;
2011-11-09 23:24:31 +00:00
foreach ( $offsets as $offset ) {
2011-11-17 22:14:19 +00:00
$sourceOffsets .= $this -> writeLong ( $offset [ 1 ])
2013-04-02 10:39:57 +01:00
. $this -> writeLong ( $offset [ 0 ] + $sourcesStart );
2011-11-17 22:14:19 +00:00
$targetOffsets .= $this -> writeLong ( $offset [ 3 ])
2013-04-02 10:39:57 +01:00
. $this -> writeLong ( $offset [ 2 ] + $sourcesStart + $sourcesSize );
2011-11-09 23:24:31 +00:00
}
$output = implode ( array_map ( array ( $this , 'writeLong' ), $header ))
2013-04-02 10:39:57 +01:00
. $sourceOffsets
. $targetOffsets
. $sources
. $targets
2011-11-09 23:24:31 +00:00
;
return $output ;
}
/**
2014-04-15 06:57:34 +01:00
* { @ inheritdoc }
2011-11-09 23:24:31 +00:00
*/
protected function getExtension ()
{
return 'mo' ;
}
private function writeLong ( $str )
{
return pack ( 'V*' , $str );
}
}