* (bug 2499) Translation statistics
authorÆvar Arnfjörð Bjarmason <avar@users.mediawiki.org>
Fri, 24 Jun 2005 15:36:07 +0000 (15:36 +0000)
committerÆvar Arnfjörð Bjarmason <avar@users.mediawiki.org>
Fri, 24 Jun 2005 15:36:07 +0000 (15:36 +0000)
maintenance/transstat.php [new file with mode: 0644]

diff --git a/maintenance/transstat.php b/maintenance/transstat.php
new file mode 100644 (file)
index 0000000..fe338b1
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+/**
+ * @package MediaWiki
+ * @subpackage Maintenance
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @bug 2499
+ */
+
+$langs = array();
+$dir = opendir('languages');
+while ($file = readdir($dir)) {
+       if (preg_match("/Language(.*?)\.php$/", $file, $m)) {
+               $langs[] = $m[1];
+       }
+}
+
+sort($langs);
+
+// Cleanup
+foreach($langs as $key => $lang) {
+       if ($lang == 'Utf8' || $lang == '' || $lang == 'Converter')
+               unset($langs[$key]);
+}
+
+require_once('commandLine.inc');
+
+$msgs = array();
+foreach($langs as $lang) {
+       // Since they aren't loaded by default..
+       require_once( 'languages/Language' . $lang . '.php' );
+       $arr = 'wgAllMessages' . $lang;
+       if (@is_array($$arr)) { // Some of them don't have a message array 
+               $msgs[$wgContLang->lcfirst($lang)] = array(
+                       'total' => count($$arr),
+                       'redundant' => redundant($$arr),
+               );
+       } else {
+               $msgs[$wgContLang->lcfirst($lang)] = array(
+                       'total' => 0,
+                       'redundant' => 0,
+               );
+       }
+}
+
+$out = "{| border=2 cellpadding=4 cellspacing=0 style=\"background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;\" width=100%\n";
+$out .= beginul();
+$out .= li('Language', true);
+$out .= li('Translated', true);
+$out .= li('%', true);
+$out .= li('Untranslated', true);
+$out .= li('%', true);
+$out .= li('Redundant', true);
+$out .= li('%', true);
+$out .= endul();
+foreach($msgs as $lang => $stats) {
+       $out .= beginul();
+       $out .= li($wgContLang->getLanguageName(strtr($lang, '_', '-')) . " ($lang)"); // Language
+       $out .= li($stats['total'] . '/' . $msgs['en']['total']); // Translated
+       $out .= li(percent($stats['total'], $msgs['en']['total'])); // % Translated
+       $out .= li($msgs['en']['total'] - $stats['total']); // Untranslated
+       $out .= li(percent($msgs['en']['total'] - $stats['total'], $msgs['en']['total'])); // % Untranslated
+       $out .= li($stats['redundant'] . '/' . $stats['total']); // Redundant
+       $out .= li(percent($stats['redundant'],  $stats['total'])); // % Redundant
+       $out .= endul();
+}
+$out = substr($out, 0, -3) . "|}\n";
+echo $out;
+
+function beginul() { return ''; }
+function endul() { return "|-\n"; }
+function li($in, $heading = false) { return ($heading ? '!' : '|') . " $in\n"; }
+function percent($subset, $total, $accuracy = 2) { return @sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total ); }
+
+// FIXME: This takes an obscene amount of time
+function redundant(&$arr) {
+       global $wgAllMessagesEn;
+       
+       $redundant = 0;
+       foreach(array_keys($arr) as $key) {
+               if ( ! array_key_exists( $key, $wgAllMessagesEn) )
+                       ++$redundant;
+       }
+       return $redundant;
+}