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