#!/usr/bin/perl
use Encode qw(:all);
$|=1;

sub translate{
	return '' if($_[0] eq '');
	my $s;
	my $w=1;
	print ".";
	while(1){
		sleep $w;
		$s=`wget -o /dev/null -O - "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=$ARGV[0]%7C$ARGV[1]&format=text&q=$_[0]"`;
		last if(index($s,'403')<0);
		print "?";
		$w*=2;
	}
	die "wget error from Google API\n" if($?);
	my $s1;
	$s=~s/"translatedText":"(.*?)"/$s1=$1/ges;
	$i=index($s,'403');
	die "zero answer from Google API: '$_[0]' ->[$i] $s\n" if(!defined($s1));
	$s1;
}

sub trans{
	print "Translating $_[0] -> $_[1] ";
	my ($F,$s,$s1,$s2,$s3,$c,$x);
	open($F,"<$_[0]") or die $!;
	sysread($F,$s,-s $F);
	close($F);
	utf8::decode($s);
	my $st=0;
	for (0..length($s)){
		$c=substr($s,$_,1);
		$x=ord($c);
		utf8::encode($c);
		if(index("\n\t\r ",$c)>=0 || $x>127 eq $st){
			$s2.=$c;
		}else{
			$st=$x>127;
			$s2=~s/^([\n\t\r ]*)/$s1.=$1;''/gse;
			$s3='';
			$s2=~s/([\n\t\r ]*)$/$s3.=$1;''/gse;
			$s1.=$st?$s2:translate($s2);
			$s1.=$s3;
			$s2=$c;
		}
	}
	$s1.=$s2;
	open($F,">$_[1]") or die $!;
	print $F $s1;
	close($F);
	print "\n";
}

die "Usage: $0 <lang_from> <lang_to>\n - in squid3 errors locales dir\n" if(!$ARGV[1]);
die "Target language '$ARGV[1]' exists\n" if(-e "$ARGV[1]");
my $l=$ARGV[0];
mkdir($ARGV[1]);
for(<$l/*>){
	my $f=substr($_,length($l)+1);
	trans($_,"$ARGV[1]/$f");
}
