## translation metadata
# Revision: $Revision: 14526 $

# Note to translators:
# translating this page is probably not a good idea, and it never was intended to be translated.
# it contains lots of programming logic, which you would have to duplicate, and it's probably
# useful only to other translators which most likely will know a bit of english.
#
# Thanks for your hard work, improve the other pages instead. :)   -- weasel

#include "head.wmi" TITLE="Tor: Translation status"
#use "functions.wmi"

<div class="main-column">

<h2>Tor: Translation status</h2>
<hr />

<:
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/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 $obs = file_is_obsolete($dir, 'en', $file);
			my $validatorlink = '';
			my $htmlfile = $file;
			if ($htmlfile =~ s/\.wml/.html/) {
				$validatorlink = sprintf '<br><a href="http://validator.w3.org/check?uri=%s%s.en">validator</a>',
					$HTMLBASE, $htmlfile;
			};

			${$_[0]}{$priority}->{$file}->{'data'} = sprintf '<th>%s</th>
				<td%s>Revision %s%s<br>
				<a href="https://svn.torproject.org/cgi-bin/viewcvs.cgi/website/trunk/%sen/%s?root=Tor&amp;view=markup">HEAD</a>
				%s',
				$file,
				($obs ? ' bgcolor="#D3D3D3"' : ''),
				$files{'en'}->{$file}->{'rev'},
				($obs ? ' (obsolete)' :''),
				($dir eq '.' ? '' : $dir.'/'),
				$file,
				$validatorlink;

			${$_[0]}{$priority}->{$file}->{'urgency'} = 0;

			for my $lang (@LANGUAGES) {
				next if $lang eq 'en';
				my $color;
				my $status;
				if ($validatorlink) {
					$validatorlink = sprintf '<br><a href="http://validator.w3.org/check?uri=%s%s.%s">validator</a>',
						$HTMLBASE, $htmlfile, $lang;
				};
				if (exists $files{$lang}->{$file}) {
					my $all_info = '';
					for my $key (sort {$a cmp $b} keys %{$files{$lang}->{$file}->{'all'}}) {
						$all_info .= sprintf "%s: %s<br>", $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 '<br><a href="https://svn.torproject.org/cgi-bin/viewcvs.cgi/website/trunk/%sen/%s?root=Tor&amp;r1=%s&amp;r2=%s">changes in original</a>',
								($dir eq '.' ? '' : $dir.'/'), $file, $files{$lang}->{$file}->{'based'}, $files{'en'}->{$file}->{'rev'};
							$color='yellow';
						} else {
							$difflink='';
							$color='#FFA500';
						};

						${$_[0]}{$priority}->{$file}->{'urgency'} += 1;
					};

					${$_[0]}{$priority}->{$file}->{'data'} .= sprintf '<td bgcolor="%s">%s<br>
						<a href="https://svn.torproject.org/cgi-bin/viewcvs.cgi/website/trunk/%s%s/%s?root=Tor&amp;view=markup">HEAD</a><br>
						%s
						%s
						%s</td>',
						$color,
						$status,
						($dir eq '.' ? '' : $dir.'/'),
						$lang, $file,
						$all_info,
						$difflink,
						$validatorlink;
				} else {
					$color=(($obs or $priority eq 'none') ?
						'#90EE90' : 'red');
					$status='missing';

					${$_[0]}{$priority}->{$file}->{'data'} .= sprintf '<td bgcolor="%s">%s</td>', $color, $status;
					${$_[0]}{$priority}->{$file}->{'urgency'} += ($obs or $priority eq 'none') ? 0 : 2;
				};
				delete $files{$lang}->{$file};
			};
		};
	};

	for my $lang (@LANGUAGES) {
		next if $lang eq 'en';
		if (keys %{$files{$lang}} > 0) {
#			print "<p>";
			print "<br><br>";
			printf "<h2>Additional files in %s (%s)</h2>\n", $lang, $LANGUAGES{$lang};

			print "<table border=1>\n";
			print "<tr>\n";
			print "<th>File</th>\n";
			print "<th>Based on Revision</th>\n";
			print "</tr>\n";
			for my $file (sort {$a cmp $b} keys %{$files{$lang}}) {
				print "<tr>";
				printf "<th>%s</th><td>", $file;
				for my $key (sort {$a cmp $b} keys %{$files{$lang}->{$file}->{'all'}}) {
					printf "%s: %s<br>", $key, $files{$lang}->{$file}->{'all'}->{$key};
				};
				printf "</td>";
				delete $files{$lang}->{$file};
				print "</tr>\n";
			};
			print "</table>\n\n";
		};
	};
};

sub sort_and_print(\%) {
	my %rows = %{$_[0]};

	for my $priority (sort {$a cmp $b} keys %rows) {
		print "<h2>Translation priority: $priority</h2>\n";

		print "<table border=1>\n";
		print "<tr>\n";
		print "<th>File</th>\n";
		printf("<th>%s (%s)</th>\n", $_, $LANGUAGES{$_}) for ('en', grep { $_ ne 'en' } @LANGUAGES);
		print "</tr>\n";

		for my $row (sort {$rows{$priority}->{$b}->{'urgency'} <=> $rows{$priority}->{$a}->{'urgency'}} keys %{$rows{$priority}}) {
			print "<tr>";
			print $rows{$priority}->{$row}->{'data'};
			delete ${$_[0]}{$priority}->{$row};
			print "</tr>\n\n";
		};

		print "</table><br>\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_data, 'eff', 1);
#do_status(%table_data, 'gui', 1);
sort_and_print(%table_rows);


:>

</div><!-- #main -->

#include <foot.wmi>
