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