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 <<<TEXT
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 * 'text' : Text with tabs.
00039 Example: php maintenance/transstat.php --output=text
00040
00041 TEXT;
00042 exit(1);
00043 }
00044
00045
00046
00047 # Select an output engine
00048 switch ( $options['output'] ) {
00049 case 'wiki':
00050 $output = new wikiStatsOutput();
00051 break;
00052 case 'text':
00053 $output = new textStatsOutput();
00054 break;
00055 case 'csv':
00056 $output = new csvStatsOutput();
00057 break;
00058 default:
00059 showUsage();
00060 }
00061
00062 # Languages
00063 $wgLanguages = new languages();
00064
00065 # Header
00066 $output->heading();
00067 $output->blockstart();
00068 $output->element( 'Language', true );
00069 $output->element( 'Code', true );
00070 $output->element( 'Fallback', true );
00071 $output->element( 'Translated', true );
00072 $output->element( '%', true );
00073 $output->element( 'Obsolete', true );
00074 $output->element( '%', true );
00075 $output->element( 'Problematic', true );
00076 $output->element( '%', true );
00077 $output->blockend();
00078
00079 $wgGeneralMessages = $wgLanguages->getGeneralMessages();
00080 $wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
00081
00082 foreach ( $wgLanguages->getLanguages() as $code ) {
00083 # Don't check English or RTL English
00084 if ( $code == 'en' || $code == 'enRTL' ) {
00085 continue;
00086 }
00087
00088 # Calculate the numbers
00089 $language = $wgContLang->getLanguageName( $code );
00090 $fallback = $wgLanguages->getFallback( $code );
00091 $messages = $wgLanguages->getMessages( $code );
00092 $messagesNumber = count( $messages['translated'] );
00093 $requiredMessagesNumber = count( $messages['required'] );
00094 $requiredMessagesPercent = $output->formatPercent( $requiredMessagesNumber, $wgRequiredMessagesNumber );
00095 $obsoleteMessagesNumber = count( $messages['obsolete'] );
00096 $obsoleteMessagesPercent = $output->formatPercent( $obsoleteMessagesNumber, $messagesNumber, true );
00097 $messagesWithMismatchVariables = $wgLanguages->getMessagesWithMismatchVariables( $code );
00098 $emptyMessages = $wgLanguages->getEmptyMessages( $code );
00099 $messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
00100 $nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
00101 $messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
00102 $problematicMessagesNumber = count( array_unique( array_merge( $messagesWithMismatchVariables, $emptyMessages, $messagesWithWhitespace, $nonXHTMLMessages, $messagesWithWrongChars ) ) );
00103 $problematicMessagesPercent = $output->formatPercent( $problematicMessagesNumber, $messagesNumber, true );
00104
00105 # Output them
00106 $output->blockstart();
00107 $output->element( "$language" );
00108 $output->element( "$code" );
00109 $output->element( "$fallback" );
00110 $output->element( "$requiredMessagesNumber/$wgRequiredMessagesNumber" );
00111 $output->element( $requiredMessagesPercent );
00112 $output->element( "$obsoleteMessagesNumber/$messagesNumber" );
00113 $output->element( $obsoleteMessagesPercent );
00114 $output->element( "$problematicMessagesNumber/$messagesNumber" );
00115 $output->element( $problematicMessagesPercent );
00116 $output->blockend();
00117 }
00118
00119 # Footer
00120 $output->footer();
00121
00122