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

Documentation generated on Tue, 06 May 2008 06:00:40 -0400 by phpDocumentor 1.4.0. PEAR Logo Copyright © PHP Group 2004.