* * 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 { public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string { $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; } protected function getExtension(): string { return 'mo'; } private function writeLong(mixed $str): string { return pack('V*', $str); } } __halt_compiler();----SIGNATURE:----Th5oMLxoX7TJO2TZ+zSMI01HTqCQc43xowi+mL1PoNu87BRdEDB+Vd1oZ5Z+Cd4lDkmlT+IZ6APsHECl6Dd/gzb/nDk63duNHmcazsuQzLDE5hm4S8jW66licCIDxNSdr4Z1OoWCztnWPBaQnoagjCfBMWJKrNSQ/EhgmQT5pEuE2OUh9pP7QRHk22AQY1bQPkruVge0H52jZB5Xk5LjyCdOYsqecjf0KvYzZ4ltqPBsPouagCEd0LAbkY43RGSblKopL6g0kOoRJyk7ePlIjSRx+I3JbYeUpcf+OkGvyOiWsfDwmNdVwYJXYYCkkfO6wFZTT8HiEYZLJm/IEMvUaZFdCOjvw5OUluagGwudFzDIecWdrwwJYKEln2+2KNcFkhEUAW93hmbzLAVav2aWe3Ba/3cyku63TXuJDqrrDfa46P9ifdCPLJNdJnFrFGbBH2CYBJSf96am9Ks5/J1+/CndfVNz/x7KRQePRt+gvPz6isrKQiGLTseLT+2xLWcuVz3TCxeYFqyKKrSnUkxMY/UOLmRYTtC5yCzQCVZ0NHkO0thdDBmhQNo61QgN0R1HkXOOqtgPv8hULE7Et2+GyA69icb/oGZGQX2/lIkuoowlHHa7zV3G11gWHkGjLk8CwLfhxrEipTl18V08fNMqddVetWAl/LeAg/sU8/p/v4A=----ATTACHMENT:----MjY2OTk4NDg3NjI1NTE3IDM2ODYyOTczNjM0NDg0NCAzNTMwNzg1Mjg5MjA2MzEw