PageRenderTime 40ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/maintenance/language/transstat.php

https://github.com/tav/confluence
PHP | 123 lines | 84 code | 18 blank | 21 comment | 8 complexity | a28f79e64b059fbf55ca074015ffef1d MD5 | raw file
Possible License(s): GPL-2.0, LGPL-3.0
  1. <?php
  2. /**
  3. * Statistics about the localisation.
  4. *
  5. * @file
  6. * @ingroup MaintenanceLanguage
  7. *
  8. * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  9. * @author Ashar Voultoiz <thoane@altern.org>
  10. *
  11. * Output is posted from time to time on:
  12. * http://meta.wikimedia.org/wiki/Localization_statistics
  13. */
  14. $optionsWithArgs = array( 'output' );
  15. require_once( dirname(__FILE__).'/../commandLine.inc' );
  16. require_once( 'languages.inc' );
  17. require_once( dirname(__FILE__).'/StatOutputs.php' );
  18. if ( isset( $options['help'] ) ) {
  19. showUsage();
  20. }
  21. # Default output is WikiText
  22. if ( !isset( $options['output'] ) ) {
  23. $options['output'] = 'wiki';
  24. }
  25. /** Print a usage message*/
  26. function showUsage() {
  27. print <<<END
  28. Usage: php transstat.php [--help] [--output=csv|text|wiki]
  29. --help : this helpful message
  30. --output : select an output engine one of:
  31. * 'csv' : Comma Separated Values.
  32. * 'wiki' : MediaWiki syntax (default).
  33. * 'metawiki' : MediaWiki syntax used for Meta-Wiki.
  34. * 'text' : Text with tabs.
  35. Example: php maintenance/transstat.php --output=text
  36. END;
  37. exit();
  38. }
  39. # Select an output engine
  40. switch ( $options['output'] ) {
  41. case 'wiki':
  42. $wgOut = new wikiStatsOutput();
  43. break;
  44. case 'metawiki':
  45. $wgOut = new metawikiStatsOutput();
  46. break;
  47. case 'text':
  48. $wgOut = new textStatsOutput();
  49. break;
  50. case 'csv':
  51. $wgOut = new csvStatsOutput();
  52. break;
  53. default:
  54. showUsage();
  55. }
  56. # Languages
  57. $wgLanguages = new languages();
  58. # Header
  59. $wgOut->heading();
  60. $wgOut->blockstart();
  61. $wgOut->element( 'Language', true );
  62. $wgOut->element( 'Code', true );
  63. $wgOut->element( 'Translated', true );
  64. $wgOut->element( '%', true );
  65. $wgOut->element( 'Obsolete', true );
  66. $wgOut->element( '%', true );
  67. $wgOut->element( 'Problematic', true );
  68. $wgOut->element( '%', true );
  69. $wgOut->blockend();
  70. $wgGeneralMessages = $wgLanguages->getGeneralMessages();
  71. $wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
  72. foreach ( $wgLanguages->getLanguages() as $code ) {
  73. # Don't check English or RTL English
  74. if ( $code == 'en' || $code == 'enRTL' ) {
  75. continue;
  76. }
  77. # Calculate the numbers
  78. $language = $wgContLang->getLanguageName( $code );
  79. $messages = $wgLanguages->getMessages( $code );
  80. $messagesNumber = count( $messages['translated'] );
  81. $requiredMessagesNumber = count( $messages['required'] );
  82. $requiredMessagesPercent = $wgOut->formatPercent( $requiredMessagesNumber, $wgRequiredMessagesNumber );
  83. $obsoleteMessagesNumber = count( $messages['obsolete'] );
  84. $obsoleteMessagesPercent = $wgOut->formatPercent( $obsoleteMessagesNumber, $messagesNumber, true );
  85. $messagesWithMismatchVariables = $wgLanguages->getMessagesWithMismatchVariables( $code );
  86. $emptyMessages = $wgLanguages->getEmptyMessages( $code );
  87. $messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
  88. $nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
  89. $messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
  90. $problematicMessagesNumber = count( array_unique( array_merge( $messagesWithMismatchVariables, $emptyMessages, $messagesWithWhitespace, $nonXHTMLMessages, $messagesWithWrongChars ) ) );
  91. $problematicMessagesPercent = $wgOut->formatPercent( $problematicMessagesNumber, $messagesNumber, true );
  92. # Output them
  93. $wgOut->blockstart();
  94. $wgOut->element( "$language" );
  95. $wgOut->element( "$code" );
  96. $wgOut->element( "$requiredMessagesNumber/$wgRequiredMessagesNumber" );
  97. $wgOut->element( $requiredMessagesPercent );
  98. $wgOut->element( "$obsoleteMessagesNumber/$messagesNumber" );
  99. $wgOut->element( $obsoleteMessagesPercent );
  100. $wgOut->element( "$problematicMessagesNumber/$messagesNumber" );
  101. $wgOut->element( $problematicMessagesPercent );
  102. $wgOut->blockend();
  103. }
  104. # Footer
  105. $wgOut->footer();