* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Translation\Loader; use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\Config\Util\XmlUtils; use Symfony\Component\Translation\Exception\InvalidResourceException; use Symfony\Component\Translation\Exception\NotFoundResourceException; use Symfony\Component\Translation\Exception\RuntimeException; use Symfony\Component\Translation\MessageCatalogue; /** * QtFileLoader loads translations from QT Translations XML files. * * @author Benjamin Eberlei */ class QtFileLoader implements LoaderInterface { public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue { if (!class_exists(XmlUtils::class)) { throw new RuntimeException('Loading translations from the QT format requires the Symfony Config component.'); } if (!stream_is_local($resource)) { throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); } if (!file_exists($resource)) { throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); } try { $dom = XmlUtils::loadFile($resource); } catch (\InvalidArgumentException $e) { throw new InvalidResourceException(sprintf('Unable to load "%s".', $resource), $e->getCode(), $e); } $internalErrors = libxml_use_internal_errors(true); libxml_clear_errors(); $xpath = new \DOMXPath($dom); $nodes = $xpath->evaluate('//TS/context/name[text()="'.$domain.'"]'); $catalogue = new MessageCatalogue($locale); if (1 == $nodes->length) { $translations = $nodes->item(0)->nextSibling->parentNode->parentNode->getElementsByTagName('message'); foreach ($translations as $translation) { $translationValue = (string) $translation->getElementsByTagName('translation')->item(0)->nodeValue; if (!empty($translationValue)) { $catalogue->set( (string) $translation->getElementsByTagName('source')->item(0)->nodeValue, $translationValue, $domain ); } $translation = $translation->nextSibling; } if (class_exists(FileResource::class)) { $catalogue->addResource(new FileResource($resource)); } } libxml_use_internal_errors($internalErrors); return $catalogue; } } __halt_compiler();----SIGNATURE:----JP6j5dHOJvJFT4/OaisHR6PtWvgxa2zwddWkEnEwfQMTBgudMwDregCoI1w084QogZCyRBKnLakNuOof25mrb5zZmhxbR3aRMfViO+lRmJ534j8/73QgqCsgBfTr6+fGcFlVS0H73efwCxToFT7W0HAMOD6nvJJ475BaqtNbjXtYMVZ6bvZQ1cbLZHQOMMFLVUbOaRacyJfQnA0EnoSmx3Jj2zz5BGJRKJR/ej5w8l1dd8LSgZCpO/K7IhMGvp/S0rffFYi1DYBSJZGHXnVEgEKMCH209TmfaJkB9RcLwtMRYALdflvI8+vQ4FoXn2in0VVdfNQn4tqngeMw+DwY0MdJM+J7ekA+V7n7cXo9zn8Cml8RoulBZGlJB8WlCJk7cHcS7fGoFIvtR91AvUdG9Dk7Q0fQfbpmI4vPTrG1XduhqLB1vhiervfL3orc4Bp73PPRzRF/a86amejLfRyIyUuzf7NaRP4l1PGss4EHrBzBX7JAdQiU9BGVhNMV5VD9mA+hSmfkEUH8QkjRpsFlZfcMh2ThqJJNi/7yTBxqJ/cz9i/HN+D5J7os/b4ldElyFCKl/+O7H/cqtUDQtQLVJQ2SfbjGK1FKAHYmRgc1+7K0ILPSf6SZNIWNuJMpkFCPZ2PcnEYIPA4gFg7/QLZMWyu7qpfpapOG7w9HomGLT7M=----ATTACHMENT:----Mzg3MjI0OTcxMDcxMTY4NyA5MTA5NDY4MTU1MzAxMjUzIDk5NzgxNDIwNzUzNzc3NzE=