From 152a70dd629c4ef1c457ff98a20ed3d261200843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Pr=C3=A9vot?= Date: Sun, 25 Dec 2011 06:06:36 +0000 Subject: Add i18n bot informations to web site translation statistics, closes: #642017 CVS version numbers stattrans.pl: 1.108 -> 1.109 bulgarian/po/stats.bg.po: 1.6 -> 1.7 chinese/po/stats.zh.po: 1.1 -> 1.2 danish/po/stats.da.po: 1.3 -> 1.4 dutch/po/stats.nl.po: 1.3 -> 1.4 english/po/stats.pot: 1.4 -> 1.5 finnish/po/stats.fi.po: 1.2 -> 1.3 french/po/stats.fr.po: 1.5 -> 1.6 german/po/stats.de.po: 1.5 -> 1.6 italian/po/stats.it.po: 1.3 -> 1.4 japanese/po/stats.ja.po: 1.2 -> 1.3 norwegian/po/stats.nb.po: 1.1 -> 1.2 polish/po/stats.pl.po: 1.1 -> 1.2 --- stattrans.pl | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 6 deletions(-) (limited to 'stattrans.pl') diff --git a/stattrans.pl b/stattrans.pl index e7bd69b8cfb..ff3e22d9af9 100755 --- a/stattrans.pl +++ b/stattrans.pl @@ -26,6 +26,7 @@ use Local::Cvsinfo; use Webwml::Langs; use Webwml::TransCheck; use Webwml::TransIgnore; +use Debian::L10n::Db ('%LanguageList'); BEGIN { $udd_available = 0; @@ -103,6 +104,41 @@ my %version; my %files; my %sizes; +print "Loading the coordination status databases\n" if ($config{verbose}); +my %status_db = (); +opendir (DATADIR, "$opt_w/english/international/l10n/data") + or die "Cannot open directory $opt_w/english/international/l10n/data: $!\n"; +foreach (readdir (DATADIR)) { + # Only check the status files + next unless ($_ =~ m/^status\.(.*)$/); + my $l = $1; + next if (!defined $LanguageList{uc $l}); + if (-r "$opt_w/english/international/l10n/data/status.$l") { + $status_db{$LanguageList{uc $l}} = Debian::L10n::Db->new(); + $status_db{$LanguageList{uc $l}}->read("$opt_w/english/international/l10n/data/status.$l", 0); + } +} +closedir (DATADIR); + +sub linklist { + my ($file, $lang) = @_; + my $add = ""; + if ($status_db{$lang}->has_package('www.debian.org') + and $status_db{$lang}->has_status('www.debian.org')) { + foreach my $statusline (@{$status_db{$lang}->status('www.debian.org')}) { + my ($type, $statfile, $date, $status, $translator, $list, $url, $bug_nb) = @{$statusline}; + if ($file eq $statfile) { + $date =~ s/\s*\+0000$//; + $list =~ /^(\d\d\d\d)-(\d\d)-(\d\d\d\d\d)$/; + $add = "$status"; + $add = "$add$translator$date"; + } + } + } + $add = '' if (!length $add); + return $add; +} + # Count wml files in given directory # sub getwmlfiles @@ -368,35 +404,58 @@ foreach $lang (@search_in) { next if ($file eq ""); (my $base = $file) =~ s/\.wml$//; my $hits = exists $hits{$base} ? $hits{$base}.' hits' : 'hit count N/A'; - # Translated pages - if (index ($wmlfiles{$lang}, " $file ") >= 0) { + my $todo = ''; + $todo = linklist($file, $lang) if defined $status_db{$lang}; + # Translated pages or already WIP in translation list + if ((index ($wmlfiles{$lang}, " $file ") >= 0) or (($todo ne '') and ($transversion{"$lang/$file"} ne $version{"$orig/$file"}))) { $translated{$lang}++; $translated_s{$lang} += $sizes{$file}; $orig = $original{"$lang/$file"} || "english"; # Outdated translations $msg = check_translation ($transversion{"$lang/$file"}, $version{"$orig/$file"}, "$lang/$file"); - if (length ($msg)) { + if (length ($msg) or (($todo ne '') and ($transversion{"$lang/$file"} ne $version{"$orig/$file"}))) { $o_body .= ""; if (($file !~ /\.wml$/) || ($file eq "devel/wnpp/wnpp.wml")) { $o_body .= sprintf "%s", $file; } else { - $o_body .= sprintf "%s", $hits, $base, $l, $base; + $o_body .= sprintf "%s", $hits, $base, $base; } + my $stattd = sprintf 'Click to fetch diffstat data\' onClick="setDiffstat(\'%s\', \'%s\', \'%s\', this)">+/-', $file, $transversion{"$lang/$file"}, $version{"$orig/$file"}; + my $statspan = sprintf '(Click to fetch diffstat data\' onClick="setDiffstat(\'%s\', \'%s\', \'%s\', this)">+/-)', $file, $transversion{"$lang/$file"}, $version{"$orig/$file"}; + if (!defined $status_db{$lang}) { $o_body .= sprintf "%s", $msg; - $o_body .= sprintf 'Click to fetch diffstat data\' onClick="setDiffstat(\'%s\', \'%s\', \'%s\', this)">+/-', $file, $transversion{"$lang/$file"}, $version{"$orig/$file"}; + $o_body .= $stattd; + } if ($msg eq 'Wrong translation version' || $msg eq 'The original no longer exists') { + if (defined $status_db{$lang}) { + $o_body .= sprintf "%d (%.2f ‰)", $sizes{$file}, $sizes{$file}/$nsize * 1000; + } else { $o_body .= ""; + } } else { + if (defined $status_db{$lang}) { + if ($transversion{"$lang/$file"} ne ''){ + $o_body .= sprintf 'Unified diff\' href="http://alioth.debian.org/scm/viewvc.php/webwml/%s?root=webwml&view=diff&r1=%s&r2=%s&diff_format=u">%s → %s ', + "$orig/$file", $transversion{"$lang/$file"}, $version{"$orig/$file"}, $transversion{"$lang/$file"}, $version{"$orig/$file"}; + $o_body .= sprintf 'Colored diff\' href="http://alioth.debian.org/scm/viewvc.php/webwml/%s?root=webwml&view=diff&r1=%s&r2=%s&diff_format=h">%s → %s ', + "$orig/$file", $transversion{"$lang/$file"}, $version{"$orig/$file"}, $transversion{"$lang/$file"}, $version{"$orig/$file"}; + $o_body .= "$statspan"; + } else { + $o_body .= sprintf "%d (%.2f ‰)", $sizes{$file}, $sizes{$file}/$nsize * 1000; + } + } else { $o_body .= sprintf "%s\ ->\ %s", $file, $transversion{"$lang/$file"}, $version{"$orig/$file"}, $firstdifftype, $transversion{"$lang/$file"}, $version{"$orig/$file"}; $o_body .= sprintf "%s\ ->\ %s", $file, $transversion{"$lang/$file"}, $version{"$orig/$file"}, $seconddifftype, $transversion{"$lang/$file"}, $version{"$orig/$file"}; + } } - $o_body .= sprintf "[L]", $file, $version{"$orig/$file"}; + $o_body .= sprintf "[L]", $msg, $file, $version{"$orig/$file"}; $o_body .= sprintf "[V]\ ", $lang, $file; $o_body .= sprintf "[F]", $lang, $file; $o_body .= sprintf "%s", $maintainer{"$lang/$file"} || ""; + $o_body .= $todo if (defined $status_db{$lang}); $o_body .= "\n"; $outdated{$lang}++; $outdated_s{$lang} += $sizes{$file}; @@ -506,14 +565,23 @@ foreach $lang (@search_in) { print HTML 'Outdated translations'."\n"; print HTML "\n"; print HTML ''."\n"; + if (defined $status_db{$lang}) { + print HTML ''; + } else { print HTML ''."\n"; print HTML ''."\n"; if ($opt_d eq "u") { print HTML ''; } elsif ($opt_d eq "h") { print HTML ''; } else { print HTML ''; } + } print HTML ''; print HTML ''; print HTML ''; + if (defined $status_db{$lang}) { + print HTML ''; + print HTML ''; + print HTML ''; + } print HTML "\n"; print HTML $o_body; print HTML "
FileDiffCommentDiffstatUnified diffColored diffColored diffUnified diffDiffLogTranslationMaintainerStatusTranslatorDate
\n"; -- cgit v1.2.3