This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/src/Symfony/Component/Translation/Dumper/MoFileDumper.php

93 lines
2.6 KiB
PHP
Raw Normal View History

<?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;
2018-07-26 10:03:18 +01:00
use Symfony\Component\Translation\MessageCatalogue;
/**
2012-04-28 04:51:32 +01:00
* MoFileDumper generates a gettext formatted string representation of a message catalogue.
*
* @author Stealth35
*/
class MoFileDumper extends FileDumper
{
/**
* {@inheritdoc}
*/
public function format(MessageCatalogue $messages, $domain = 'messages')
{
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);
return $this->formatCatalogue($messages, $domain);
}
/**
* {@inheritdoc}
*/
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
{
2016-09-02 19:13:13 +01:00
$sources = $targets = $sourceOffsets = $targetOffsets = '';
$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,
'offsetTranslated' => MoFileLoader::MO_HEADER_SIZE + (8 * $size),
2014-10-22 19:27:13 +01:00
'sizeHashes' => 0,
'offsetHashes' => MoFileLoader::MO_HEADER_SIZE + (16 * $size),
);
$sourcesSize = \strlen($sources);
2011-11-17 22:14:19 +00:00
$sourcesStart = $header['offsetHashes'] + 1;
foreach ($offsets as $offset) {
2011-11-17 22:14:19 +00:00
$sourceOffsets .= $this->writeLong($offset[1])
.$this->writeLong($offset[0] + $sourcesStart);
2011-11-17 22:14:19 +00:00
$targetOffsets .= $this->writeLong($offset[3])
.$this->writeLong($offset[2] + $sourcesStart + $sourcesSize);
}
$output = implode(array_map(array($this, 'writeLong'), $header))
.$sourceOffsets
.$targetOffsets
.$sources
.$targets
;
return $output;
}
/**
* {@inheritdoc}
*/
protected function getExtension()
{
return 'mo';
}
private function writeLong($str)
{
return pack('V*', $str);
}
}