Guest User

Untitled

a guest
Jan 18th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. <?php
  2. function Language2XML($data, $language, $translations = array()) {
  3. $xml = new DOMDocument('1.0', 'UTF-8');
  4. $xml->preserveWhiteSpace = false;
  5. $xml->formatOutput = true;
  6.  
  7. $xliff = $xml->createElement('xliff');
  8. $xliff->setAttribute('version', '1.0');
  9.  
  10. $file = $xml->createElement('file');
  11. $file->setAttribute('source-language', 'en');
  12. if (func_num_args() > 2) {
  13. $file->setAttribute('target-language', $language);
  14. }
  15. $file->setAttribute('datatype', 'plaintext');
  16. $file->setAttribute('original', 'messages');
  17. $file->setAttribute('data', strftime('%Y-%m-%dT%H-%M-%S'));
  18. $file->setAttribute('product-name', 'zsb');
  19.  
  20. $header = $xml->createElement('header');
  21. $file->appendChild($header);
  22.  
  23. $body = $xml->createElement('body');
  24. foreach ($data as $index => $label) {
  25. $unit = $xml->createElement('trans-unit');
  26. $unit->setAttribute('id', $index);
  27. $unit->setAttribute('xml:space', 'preserve');
  28.  
  29. $source = $xml->createElement('source', $label);
  30. $unit->appendChild($source);
  31.  
  32. if (func_num_args() > 2) {
  33. $target = $xml->createElement('target', $translations[$index]);
  34. $unit->appendChild($target);
  35. }
  36.  
  37. $body->appendChild($unit);
  38. }
  39.  
  40. $file->appendChild($body);
  41. $xliff->appendChild($file);
  42. $xml->appendChild($xliff);
  43.  
  44. return $xml->saveXML();
  45. }
  46.  
  47. if (isset($_POST['xml'])) {
  48. $xml = $_POST['xml'];
  49. $xml = utf8_encode($xml);
  50.  
  51. $doc = new DOMDocument();
  52. $doc->loadXML($xml);
  53.  
  54. $defaults = array();
  55. $langs = array();
  56.  
  57. $xpath = new DOMXPath($doc);
  58. $languages = $xpath->query("//T3locallang/data/languageKey");
  59. foreach ($languages as $language) {
  60. $lang = $language->attributes['index']->value;
  61.  
  62. if ($lang !== 'default') {
  63. $langs[$lang] = array();
  64. }
  65.  
  66. foreach ($language->childNodes as $word) {
  67. if ($word->nodeName !== 'label') {
  68. continue;
  69. }
  70.  
  71. $string = utf8_decode($word->attributes['index']->value);
  72. $translation = utf8_decode($word->nodeValue);
  73.  
  74. if ($lang === 'default') {
  75. $defaults[$string] = $translation;
  76. } else {
  77. $langs[$lang][$string] = $translation;
  78. }
  79. }
  80. }
  81.  
  82. $outputs = array(
  83. 'locallang.xlf' => Language2XML($defaults, 'en'),
  84. );
  85. foreach ($langs as $lang => $words) {
  86. $outputs[$lang . '.locallang.xlf'] = Language2XML($defaults, $lang, $words);
  87. }
  88. }
  89. ?>
  90. <!DOCTYPE html>
  91. <html>
  92. <head>
  93. <meta charset="UTF-8">
  94. <title>LocalLang: XML to XLIFF</title>
  95. <style>
  96. textarea {
  97. box-sizing: border-box;
  98. height: 250px;
  99. width: 100%;
  100. }
  101. </style>
  102. </head>
  103. <body>
  104. <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
  105. <fieldset>
  106. <legend>Input locallang.xml</legend>
  107. <textarea name="xml" style="width: 100%; height: 250px;"><?= htmlspecialchars(@$_POST['xml']) ?></textarea>
  108. </fieldset>
  109.  
  110. <footer>
  111. <input type="submit">
  112. </footer>
  113. </form>
  114. <? if (isset($outputs)): ?>
  115. <hr>
  116. <? foreach ($outputs as $file => $xml): ?>
  117. <fieldset>
  118. <legend><?= $file ?></legend>
  119.  
  120. <textarea onfocus="this.select()"><?= htmlspecialchars($xml) ?></textarea>
  121. </fieldset>
  122. <? endforeach; ?>
  123. <? endif; ?>
  124. </body>
  125. </html>
Add Comment
Please, Sign In to add comment