Skip to content

Commit ecfb542

Browse files
committed
[CI] Make sure we preserve file->header when we run sync-translations.php
1 parent fa7531f commit ecfb542

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

.github/sync-translations.php

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
require __DIR__.'/../vendor/autoload.php';
1414

15-
function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, string $domain)
15+
function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, string $domain, ?\DOMElement $header = null)
1616
{
1717
$dom = new \DOMDocument('1.0', 'utf-8');
1818
$dom->formatOutput = true;
@@ -27,6 +27,10 @@ function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, string $d
2727
$xliffFile->setAttribute('datatype', 'plaintext');
2828
$xliffFile->setAttribute('original', 'file.ext');
2929

30+
if (null !== $header) {
31+
mergeDom($dom, $xliffFile, $header);
32+
}
33+
3034
$xliffBody = $xliffFile->appendChild($dom->createElement('body'));
3135
foreach ($messages->all($domain) as $source => $target) {
3236
$translation = $dom->createElement('trans-unit');
@@ -62,6 +66,24 @@ function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, string $d
6266
return preg_replace('/^ +/m', '$0$0', $dom->saveXML());
6367
}
6468

69+
function mergeDom(\DOMDocument $dom, \DOMNode $tree, \DOMNode $input)
70+
{
71+
$new = $dom->createElement($input->tagName);
72+
foreach ($input->attributes as $key => $value) {
73+
$new->setAttribute($key, $value);
74+
}
75+
$tree->appendChild($new);
76+
foreach ($input->childNodes as $child) {
77+
if ($child instanceof \DOMText) {
78+
$new->appendChild($dom->createTextNode(str_replace(' ', ' ', $child->textContent)));
79+
} elseif ($child instanceof \DOMNode) {
80+
mergeDom($dom, $new, $child);
81+
} else {
82+
// We just need to update our script to handle this node types
83+
throw new \LogicException('Unsupported node type: '.get_class($child));
84+
}
85+
}
86+
}
6587

6688
foreach (['Security/Core' => 'security', 'Form' => 'validators', 'Validator' => 'validators'] as $component => $domain) {
6789
$dir = __DIR__.'/../src/Symfony/Component/'.$component.'/Resources/translations';
@@ -95,6 +117,13 @@ function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, string $d
95117
$localeCatalogue->setMetadata($source, $metadata, $domain);
96118
}
97119

98-
file_put_contents($file, dumpXliff1('en', $localeCatalogue, $domain));
120+
$inputDom = new \DOMDocument();
121+
$inputDom->loadXML(file_get_contents($file->getRealPath()));
122+
$header = null;
123+
if (1 === $inputDom->getElementsByTagName('header')->count()) {
124+
$header = $inputDom->getElementsByTagName('header')->item(0);
125+
}
126+
127+
file_put_contents($file, dumpXliff1('en', $localeCatalogue, $domain, $header));
99128
}
100129
}

0 commit comments

Comments
 (0)