Tor: Translation status
<: sub do_status(\%$$) { my $dir = $_[1]; my $may_miss_dir = $_[2]; my %files; my @warnings; for my $lang (@LANGUAGES) { opendir(DIR, "$dir/$lang") or $may_miss_dir or die ("Cannot opendir $dir/$lang: $!\n"); my @files = grep { $_ ne '.' && $_ ne '..' && $_ !~ /tor-manual/i && $_ !~ /translation-status/i && $_ =~ m/^[^.]/ && -f "$dir/$lang/$_"} readdir(DIR); closedir DIR; for my $file (@files) { $files{$lang}->{$file}->{'all'} = getMetadata("$dir/$lang/$file"); if ($lang eq 'en') { $files{$lang}->{$file}->{'rev'} = translation_get_masterrevision_file($dir, $file); } else { $files{$lang}->{$file}->{'based'} = translation_get_basedonrevision_langfile($dir, $lang, $file); }; }; }; my %priorities; for my $file (keys %{$files{'en'}}) { my $p = $files{'en'}->{$file}->{'all'}->{'Translation-Priority'}; if (defined $p) { $priorities{$p} = 1; }; }; my @priorities = sort {$a cmp $b} keys %priorities; push @priorities, 'none'; my $HTMLBASE = (defined $ENV{'HTMLBASE'} ? $ENV{'HTMLBASE'} : 'https://www.torproject.org/') . ($dir eq '.' ? '' : $dir.'/'); for my $priority (@priorities) { for my $file (sort {$a cmp $b} keys %{$files{'en'}}) { my $file_priority = $files{'en'}->{$file}->{'all'}->{'Translation-Priority'}; next if (defined $file_priority && $priority ne $file_priority); next if (!defined $file_priority && $priority ne 'none'); my $path = ($dir eq '.' ? '' : $dir.'/') . $file; my $obs = file_is_obsolete($dir, 'en', $file); my $validatorlink = ''; my $htmlfile = $file; if ($htmlfile =~ s/\.wml/.html/) { $validatorlink = sprintf '
validator', $HTMLBASE, $htmlfile; }; my $cell_path = sprintf '
HEAD %s', ($obs ? ' bgcolor="#D3D3D3"' : ''), $files{'en'}->{$file}->{'rev'}, ($obs ? ' (obsolete)' :''), ($dir eq '.' ? '' : $dir.'/'), $file, $validatorlink; ${$_[0]}{$priority}->{$path}->{'data'} = $cell_path . $cell_en; ${$_[0]}{$priority}->{$path}->{'urgency'} = 0; for my $lang (@LANGUAGES) { next if $lang eq 'en'; my $color; my $status; #my $path = ($dir eq '.' ? '' : $dir.'/') . $file; if ($validatorlink) { $validatorlink = sprintf '
validator', $HTMLBASE, $htmlfile, $lang; }; if (exists $files{$lang}->{$file}) { my $all_info = ''; for my $key (sort {$a cmp $b} keys %{$files{$lang}->{$file}->{'all'}}) { next if $key eq 'Translation-Priority'; $all_info .= sprintf "%s: %s
", $key, $files{$lang}->{$file}->{'all'}->{$key}; }; my $difflink; if ($files{$lang}->{$file}->{'based'} eq $files{'en'}->{$file}->{'rev'}) { $color='#90EE90'; $status='current'; $difflink=''; } else { $status='not current'; if ($files{$lang}->{$file}->{'based'} ne 'unknown') { $difflink=sprintf '
changes in original', ($dir eq '.' ? '' : $dir.'/'), $file, $files{$lang}->{$file}->{'based'}, $files{'en'}->{$file}->{'rev'}; $color='yellow'; } else { $difflink=''; $color='#FFA500'; }; ${$_[0]}{$priority}->{$path}->{'urgency'} += 1; }; ${$_[0]}{$priority}->{$path}->{'data'} .= sprintf '
HEAD
%s %s %s
";
print "
";
printf "
Additional files in %s (%s)
\n", $lang, $LANGUAGES{$lang}; print "| File | \n"; print "Based on Revision | \n"; print "
|---|---|
| %s | ", $file;
for my $key (sort {$a cmp $b} keys %{$files{$lang}->{$file}->{'all'}}) {
printf "%s: %s ", $key, $files{$lang}->{$file}->{'all'}->{$key}; }; printf " | ";
delete $files{$lang}->{$file};
print "
Translation priority: $priority
\n"; print "| File | \n"; printf("%s (%s) | \n", $_, $LANGUAGES{$_}) for ('en', grep({ $_ ne 'en' } @LANGUAGES), 'en'); print "File | \n"; print "
|---|---|---|
\n\n\n"; }; }; # accumulate the table rows, then sort and print them my %table_rows; do_status(%table_rows, '.', 0); do_status(%table_rows, 'docs', 1); do_status(%table_rows, 'torbrowser', 1); do_status(%table_rows, 'tordnsel', 1); do_status(%table_rows, 'projects', 1); #do_status(%table_data, 'eff', 1); #do_status(%table_data, 'gui', 1); sort_and_print(%table_rows); :>