Translation2
[ class tree: Translation2 ] [ index: Translation2 ] [ all elements ]

Source for file t2xmlchk.php

Documentation is available at t2xmlchk.php

  1. #!/usr/bin/php -q
  2. <?php
  3. /**
  4.  * Check XML files intended to be used with Translation2
  5.  * @author Olivier Guilyardi <ylf@xung.org>
  6.  */
  7. //error_reporting (E_ALL);
  8.  
  9. if (substr(phpversion(),0,1!= '4'{
  10.     exit ("Sorry, this script will only run under PHP4 (that is: not PHP5)\n");
  11. }
  12.  
  13. function print_usage()
  14. {
  15.     echo "t2xmlchk checks and validates XML files intended to be used with \n" 
  16.          "the Translation2 internationalization package.\n" 
  17.          "Usage: t2xmlchk <xml filename>\n";
  18. }
  19.  
  20.  
  21. require_once 'Translation2/Container/xml.php';
  22.  
  23. require_once 'XML/DTD/XmlValidator.php';
  24.  
  25. if (!$xml_file $argv[1]{
  26.     echo ("ERROR : No xml filename provided\n\n");
  27.     print_usage();
  28.     exit("\n");
  29. }
  30.  
  31. if (!is_readable ($xml_file)) {
  32.     echo ("ERROR : No such file : \"$xml_file\"\n\n");
  33.     print_usage();
  34.     exit("\n");
  35. }
  36.  
  37. $validator =new XML_DTD_XmlValidator();
  38.  
  39. $dtd_file tempnam('/tmp','t2');
  40. $fp fopen($dtd_file,'w');
  41. fclose($fp);
  42.  
  43. echo "Performing DTD validation... ";
  44. $test $validator->isValid($dtd_file$xml_file);
  45. unlink ($dtd_file);
  46. if ($test{
  47.     echo "OK\n";
  48. else {
  49.     exit ("FAILED : " $validator->getMessage("\n");
  50. }
  51.  
  52. echo "Unserializing... ";
  53.  
  54. $keyAttr = array (
  55.     'lang'   => 'id',
  56.     'page'   => 'key',
  57.     'string' => 'key',
  58.     'tr'     => 'lang'
  59. );
  60. $unserializer &new XML_Unserializer (array('keyAttribute' => $keyAttr));
  61. if (PEAR::isError($status $unserializer->unserialize($xml_filetrue))) {
  62.     exit ("FAILED : " .  $status->getMessage("\n");
  63. else {
  64.     echo "OK\n";
  65. }
  66.  
  67. $data $unserializer->getUnserializedData();
  68.  
  69. // This should be done by XML_DTD :
  70. echo "Checking lang IDs... ";
  71.  
  72. $known_langs = array();
  73.  
  74. foreach ($data['languages'as $lang => $spec{
  75.     echo "$lang ";
  76.     $known_langs[$lang;
  77.     if (isset($spec[0])) {
  78.         exit ("FAILED : Found lang duplicate for \"$lang\"\n");
  79.     }
  80. }
  81.  
  82. echo "OK\n";
  83.  
  84. echo "Checking string duplicates... ";
  85.  
  86. foreach($data['pages'as $pagename => $pagedata{
  87.     foreach($pagedata as $stringname => $stringvalues{
  88.         if (is_array(array_pop($stringvalues))) {
  89.             exit("FAILED : found duplicate in page \"$pagename\" for string \"stringname\"\n");
  90.         }
  91.     }
  92. }
  93.  
  94. echo "OK\n";
  95.  
  96. // This should be done by XML_DTD :
  97. echo "Checking lang IDREFs... ";
  98.  
  99. foreach ($data['pages'as $pagename => $pagedata{
  100.     foreach ($pagedata as $stringname => $stringvalues{
  101.         foreach ($stringvalues as $lang => $translation{
  102.             if (!in_array ($lang$known_langs)) {
  103.                 exit ("FAILED : Unknow lang \"$lang\" in page \"$pagename\" at string \"$stringname\"\n");
  104.             }
  105.         }
  106.     }
  107. }
  108.  
  109. echo "OK\n";
  110. echo "Checking translation duplicates... ";
  111.  
  112. foreach ($data['pages'as $pagename => $pagedata{
  113.     foreach ($pagedata as $stringname => $stringvalues{
  114.         foreach ($stringvalues as $lang => $translation{
  115.             if (is_array ($translation)) {
  116.                 exit("FAILED : found duplicate in page \"$pagename\" for string \"stringname\" with lang \"$lang\"\n");
  117.             }
  118.         }
  119.     }
  120. }
  121.  
  122. echo "OK\n";
  123. ?>

Documentation generated on Mon, 11 Mar 2019 14:41:45 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.