transstat.php
来自「php 开发的内容管理系统」· PHP 代码 · 共 204 行
PHP
204 行
<?php/** * @package MediaWiki * @subpackage Maintenance * * @author 脝var Arnfj枚r冒 Bjarmason <avarab@gmail.com> * @author Ashar Voultoiz <thoane@altern.org> * @bug 2499 * * Output is posted from time to time on: * http://meta.wikimedia.org/wiki/Localization_statistics *//** */require_once('commandLine.inc');require_once('languages.inc');if( isset($options['help']) ) { usage(); wfDie(); }// default output is WikiTextif( !isset($options['output']) ) { $options['output']='wiki'; }/** Print a usage message*/function usage() {print <<<ENDUsage: php transstat.php [--help] [--output:csv|text|wiki] [--showdupes] --help : this helpful message --showold : show old messages that are not in Messages.php --output : select an output engine one of: * 'csv' : Comma Separated Values. * 'none' : Nothing, usefull with --showdupes * 'wiki' : MediaWiki syntax (default). * 'text' : Text with tabs.Example: php transstat.php --showdupes --output=noneEND;}/** A general output object. Need to be overriden */class statsOutput { var $output; // buffer that contain the text function statsOutput() { $this->output='';} function getContent() { return $this->output;} function formatPercent($subset, $total, $revert=false, $accuracy=2) { return @sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total ); } // Override the next methods function heading() {} function footer() {} function blockstart() {} function blockend() {} function element($in, $heading=false) {}}/** Outputs nothing ! */class noneStatsOutput extends statsOutput { function getContent() { return NULL;}}/** Outputs WikiText */class wikiStatsOutput extends statsOutput { function heading() { $this->output .= "{| border=2 cellpadding=4 cellspacing=0 style=\"background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;\" width=100%\n"; } function footer() { $this->output .= "|}\n"; } function blockstart() { $this->output .= "|-\n"; } function blockend() { $this->output .= ''; } function element($in, $heading = false) { $this->output .= ($heading ? '!' : '|') . " $in\n"; } function formatPercent($subset, $total, $revert=false, $accuracy=2) { $v = @round(255 * $subset / $total); if($revert) $v = 255 - $v; if($v < 128) { // red to yellow $red = 'FF'; $green = sprintf('%02X', 2*$v); } else { // yellow to green $red = sprintf('%02X', 2*(255 -$v) ); $green = 'FF'; } $blue = '00'; $color = $red.$green.$blue; $percent = statsOutput::formatPercent($subset, $total, $revert, $accuracy); return 'bgcolor="#'.$color.'" | '.$percent; }}/** Output text. To be used on a terminal for example. */class textStatsOutput extends statsOutput { function element($in, $heading = false) { $this->output .= $in."\t"; } function blockend(){ $this->output .="\n";}}/** csv output. Some people love excel */class csvStatsOutput extends statsOutput { function element($in, $heading = false) { $this->output .= $in.";"; } function blockend(){ $this->output .="\n";}}function redundant(&$arr, $langcode) { global $wgAllMessagesEn; $redundant = 0; foreach(array_keys($arr) as $key) { if ( @$wgAllMessagesEn[$key] === null ) { global $options; if( isset($options['showold']) ) { print "Deprecated [$langcode]: $key\n"; } ++$redundant; } } return $redundant;}// Select an output engineswitch ($options['output']) { case 'csv': $out = new csvStatsOutput(); break; case 'none': $out = new noneStatsOutput(); break; case 'text': $out = new textStatsOutput(); break; case 'wiki': $out = new wikiStatsOutput(); break; default: usage(); wfDie(); break;}$langTool = new languages();// Load message and compute stuff$msgs = array();foreach($langTool->getList() as $langcode) { // Since they aren't loaded by default.. require_once( 'languages/Language' . $langcode . '.php' ); $arr = 'wgAllMessages'.$langcode; if(@is_array($$arr)) { $msgs[$wgContLang->lcfirst($langcode)] = array( 'total' => count($$arr), 'redundant' => redundant($$arr, $langcode), ); } else { $msgs[$wgContLang->lcfirst($langcode)] = array( 'total' => 0, 'redundant' => 0, ); }}// Top entry$out->heading();$out->blockstart();$out->element('Language', true);$out->element('Translated', true);$out->element('%', true);$out->element('Untranslated', true);$out->element('%', true);$out->element('Redundant', true);$out->element('%', true);$out->blockend();// Generate rowsforeach($msgs as $lang => $stats) { $out->blockstart(); // Language $out->element($wgContLang->getLanguageName(strtr($lang, '_', '-')) . " ($lang)"); // Translated $out->element($stats['total'] . '/' . $msgs['en']['total']); // % Translated $out->element($out->formatPercent($stats['total'], $msgs['en']['total'])); // Untranslated $out->element($msgs['en']['total'] - $stats['total']); // % Untranslated $out->element($out->formatPercent($msgs['en']['total'] - $stats['total'], $msgs['en']['total'], true)); // Redundant & % Redundant if($stats['redundant'] =='NC') { $out->element('NC'); $out->element('NC'); } else { $out->element($stats['redundant'] . '/' . $stats['total']); $out->element($out->formatPercent($stats['redundant'], $stats['total'],true)); } $out->blockend();}$out->footer();// Final outputecho $out->getContent();?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?