00001 <?php
00014 $optionsWithArgs = array( 'output' );
00015
00016 require_once( dirname(__FILE__).'/../commandLine.inc' );
00017 require_once( 'languages.inc' );
00018 require_once( dirname(__FILE__).'/StatOutputs.php' );
00019
00020
00021 if ( isset( $options['help'] ) ) {
00022 showUsage();
00023 }
00024
00025 # Default output is WikiText
00026 if ( !isset( $options['output'] ) ) {
00027 $options['output'] = 'wiki';
00028 }
00029
00031 function showUsage() {
00032 print <<<END
00033 Usage: php transstat.php [--help] [--output=csv|text|wiki]
00034 --help : this helpful message
00035 --output : select an output engine one of:
00036 * 'csv' : Comma Separated Values.
00037 * 'wiki' : MediaWiki syntax (default).
00038 * 'metawiki' : MediaWiki syntax used for Meta-Wiki.
00039 * 'text' : Text with tabs.
00040 Example: php maintenance/transstat.php --output=text
00041
00042 END;
00043 exit();
00044 }
00045
00046
00047
00048 # Select an output engine
00049 switch ( $options['output'] ) {
00050 case 'wiki':
00051 $wgOut = new wikiStatsOutput();
00052 break;
00053 case 'metawiki':
00054 $wgOut = new metawikiStatsOutput();
00055 break;
00056 case 'text':
00057 $wgOut = new textStatsOutput();
00058 break;
00059 case 'csv':
00060 $wgOut = new csvStatsOutput();
00061 break;
00062 default:
00063 showUsage();
00064 }
00065
00066 # Languages
00067 $wgLanguages = new languages();
00068
00069 # Header
00070 $wgOut->heading();
00071 $wgOut->blockstart();
00072 $wgOut->element( 'Language', true );
00073 $wgOut->element( 'Code', true );
00074 $wgOut->element( 'Translated', true );
00075 $wgOut->element( '%', true );
00076 $wgOut->element( 'Obsolete', true );
00077 $wgOut->element( '%', true );
00078 $wgOut->element( 'Problematic', true );
00079 $wgOut->element( '%', true );
00080 $wgOut->blockend();
00081
00082 $wgGeneralMessages = $wgLanguages->getGeneralMessages();
00083 $wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
00084
00085 foreach ( $wgLanguages->getLanguages() as $code ) {
00086 # Don't check English or RTL English
00087 if ( $code == 'en' || $code == 'enRTL' ) {
00088 continue;
00089 }
00090
00091 # Calculate the numbers
00092 $language = $wgContLang->getLanguageName( $code );
00093 $messages = $wgLanguages->getMessages( $code );
00094 $messagesNumber = count( $messages['translated'] );
00095 $requiredMessagesNumber = count( $messages['required'] );
00096 $requiredMessagesPercent = $wgOut->formatPercent( $requiredMessagesNumber, $wgRequiredMessagesNumber );
00097 $obsoleteMessagesNumber = count( $messages['obsolete'] );
00098 $obsoleteMessagesPercent = $wgOut->formatPercent( $obsoleteMessagesNumber, $messagesNumber, true );
00099 $messagesWithMismatchVariables = $wgLanguages->getMessagesWithMismatchVariables( $code );
00100 $emptyMessages = $wgLanguages->getEmptyMessages( $code );
00101 $messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
00102 $nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
00103 $messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
00104 $problematicMessagesNumber = count( array_unique( array_merge( $messagesWithMismatchVariables, $emptyMessages, $messagesWithWhitespace, $nonXHTMLMessages, $messagesWithWrongChars ) ) );
00105 $problematicMessagesPercent = $wgOut->formatPercent( $problematicMessagesNumber, $messagesNumber, true );
00106
00107 # Output them
00108 $wgOut->blockstart();
00109 $wgOut->element( "$language" );
00110 $wgOut->element( "$code" );
00111 $wgOut->element( "$requiredMessagesNumber/$wgRequiredMessagesNumber" );
00112 $wgOut->element( $requiredMessagesPercent );
00113 $wgOut->element( "$obsoleteMessagesNumber/$messagesNumber" );
00114 $wgOut->element( $obsoleteMessagesPercent );
00115 $wgOut->element( "$problematicMessagesNumber/$messagesNumber" );
00116 $wgOut->element( $problematicMessagesPercent );
00117 $wgOut->blockend();
00118 }
00119
00120 # Footer
00121 $wgOut->footer();
00122
00123