Initial Commit

This commit is contained in:
David Stone
2024-11-30 18:24:12 -07:00
commit e8f7955c1c
5432 changed files with 1397750 additions and 0 deletions

View File

@ -0,0 +1,96 @@
<?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;
/**
* IcuResDumper generates an ICU ResourceBundle formatted string representation of a message catalogue.
*
* @author Stealth35
*/
class IcuResFileDumper extends \Symfony\Component\Translation\Dumper\FileDumper
{
protected $relativePathTemplate = '%domain%/%locale%.%extension%';
public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) : string
{
$data = $indexes = $resources = '';
foreach ($messages->all($domain) as $source => $target) {
$indexes .= \pack('v', \strlen($data) + 28);
$data .= $source . "\x00";
}
$data .= $this->writePadding($data);
$keyTop = $this->getPosition($data);
foreach ($messages->all($domain) as $source => $target) {
$resources .= \pack('V', $this->getPosition($data));
$data .= \pack('V', \strlen($target)) . \mb_convert_encoding($target . "\x00", 'UTF-16LE', 'UTF-8') . $this->writePadding($data);
}
$resOffset = $this->getPosition($data);
$data .= \pack('v', \count($messages->all($domain))) . $indexes . $this->writePadding($data) . $resources;
$bundleTop = $this->getPosition($data);
$root = \pack(
'V7',
$resOffset + (2 << 28),
// Resource Offset + Resource Type
6,
// Index length
$keyTop,
// Index keys top
$bundleTop,
// Index resources top
$bundleTop,
// Index bundle top
\count($messages->all($domain)),
// Index max table length
0
);
$header = \pack(
'vC2v4C12@32',
32,
// Header size
0xda,
0x27,
// Magic number 1 and 2
20,
0,
0,
2,
// Rest of the header, ..., Size of a char
0x52,
0x65,
0x73,
0x42,
// Data format identifier
1,
2,
0,
0,
// Data version
1,
4,
0,
0
);
return $header . $root . $data;
}
private function writePadding(string $data) : ?string
{
$padding = \strlen($data) % 4;
return $padding ? \str_repeat("\xaa", 4 - $padding) : null;
}
private function getPosition(string $data) : float|int
{
return (\strlen($data) + 28) / 4;
}
protected function getExtension() : string
{
return 'res';
}
}