12
12
13
13
require __DIR__ .'/../vendor/autoload.php ' ;
14
14
15
- function dumpXliff1 (string $ defaultLocale , MessageCatalogue $ messages , string $ domain )
15
+ function dumpXliff1 (string $ defaultLocale , MessageCatalogue $ messages , string $ domain, ? \ DOMElement $ header = null )
16
16
{
17
17
$ dom = new \DOMDocument ('1.0 ' , 'utf-8 ' );
18
18
$ dom ->formatOutput = true ;
@@ -27,6 +27,10 @@ function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, string $d
27
27
$ xliffFile ->setAttribute ('datatype ' , 'plaintext ' );
28
28
$ xliffFile ->setAttribute ('original ' , 'file.ext ' );
29
29
30
+ if (null !== $ header ) {
31
+ mergeDom ($ dom , $ xliffFile , $ header );
32
+ }
33
+
30
34
$ xliffBody = $ xliffFile ->appendChild ($ dom ->createElement ('body ' ));
31
35
foreach ($ messages ->all ($ domain ) as $ source => $ target ) {
32
36
$ translation = $ dom ->createElement ('trans-unit ' );
@@ -62,6 +66,24 @@ function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, string $d
62
66
return preg_replace ('/^ +/m ' , '$0$0 ' , $ dom ->saveXML ());
63
67
}
64
68
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
+ }
65
87
66
88
foreach (['Security/Core ' => 'security ' , 'Form ' => 'validators ' , 'Validator ' => 'validators ' ] as $ component => $ domain ) {
67
89
$ dir = __DIR__ .'/../src/Symfony/Component/ ' .$ component .'/Resources/translations ' ;
@@ -95,6 +117,13 @@ function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, string $d
95
117
$ localeCatalogue ->setMetadata ($ source , $ metadata , $ domain );
96
118
}
97
119
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 ));
99
128
}
100
129
}
0 commit comments