summaryrefslogtreecommitdiff
path: root/vendor/symfony/translation/Loader
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/symfony/translation/Loader')
-rw-r--r--vendor/symfony/translation/Loader/XliffFileLoader.php61
1 files changed, 37 insertions, 24 deletions
diff --git a/vendor/symfony/translation/Loader/XliffFileLoader.php b/vendor/symfony/translation/Loader/XliffFileLoader.php
index ed97cae290..6e01a7119b 100644
--- a/vendor/symfony/translation/Loader/XliffFileLoader.php
+++ b/vendor/symfony/translation/Loader/XliffFileLoader.php
@@ -82,38 +82,51 @@ class XliffFileLoader implements LoaderInterface
$xml = simplexml_import_dom($dom);
$encoding = strtoupper($dom->encoding);
- $xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:1.2');
- foreach ($xml->xpath('//xliff:trans-unit') as $translation) {
- $attributes = $translation->attributes();
+ $namespace = 'urn:oasis:names:tc:xliff:document:1.2';
+ $xml->registerXPathNamespace('xliff', $namespace);
- if (!(isset($attributes['resname']) || isset($translation->source))) {
- continue;
- }
+ foreach ($xml->xpath('//xliff:file') as $file) {
+ $fileAttributes = $file->attributes();
- $source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source;
- // If the xlf file has another encoding specified, try to convert it because
- // simple_xml will always return utf-8 encoded values
- $target = $this->utf8ToCharset((string) (isset($translation->target) ? $translation->target : $translation->source), $encoding);
+ $file->registerXPathNamespace('xliff', $namespace);
- $catalogue->set((string) $source, $target, $domain);
+ foreach ($file->xpath('.//xliff:trans-unit') as $translation) {
+ $attributes = $translation->attributes();
- $metadata = [];
- if ($notes = $this->parseNotesMetadata($translation->note, $encoding)) {
- $metadata['notes'] = $notes;
- }
+ if (!(isset($attributes['resname']) || isset($translation->source))) {
+ continue;
+ }
- if (isset($translation->target) && $translation->target->attributes()) {
- $metadata['target-attributes'] = [];
- foreach ($translation->target->attributes() as $key => $value) {
- $metadata['target-attributes'][$key] = (string) $value;
+ $source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source;
+ // If the xlf file has another encoding specified, try to convert it because
+ // simple_xml will always return utf-8 encoded values
+ $target = $this->utf8ToCharset((string) ($translation->target ?? $translation->source), $encoding);
+
+ $catalogue->set((string) $source, $target, $domain);
+
+ $metadata = [
+ 'source' => (string) $translation->source,
+ 'file' => [
+ 'original' => (string) $fileAttributes['original'],
+ ],
+ ];
+ if ($notes = $this->parseNotesMetadata($translation->note, $encoding)) {
+ $metadata['notes'] = $notes;
}
- }
- if (isset($attributes['id'])) {
- $metadata['id'] = (string) $attributes['id'];
- }
+ if (isset($translation->target) && $translation->target->attributes()) {
+ $metadata['target-attributes'] = [];
+ foreach ($translation->target->attributes() as $key => $value) {
+ $metadata['target-attributes'][$key] = (string) $value;
+ }
+ }
- $catalogue->setMetadata((string) $source, $metadata, $domain);
+ if (isset($attributes['id'])) {
+ $metadata['id'] = (string) $attributes['id'];
+ }
+
+ $catalogue->setMetadata((string) $source, $metadata, $domain);
+ }
}
}