| #!/usr/bin/perl |
| |
| if(!$ARGV[0]) { |
| print <<MOO |
| Usage: lang.pl <english file> <translated file> |
| MOO |
| ; |
| exit; |
| } |
| |
| my %ids, @ids; |
| open(ENG, "<$ARGV[0]"); |
| while(<ENG>) { |
| if($_ =~ /^ *\#/) { |
| # comment |
| next; |
| } |
| $_ =~ s/\r//g; |
| if($_ =~ /^ *([a-z]+): *(.*)/) { |
| ($var, $value) = ($1, $2); |
| # print "$var => $value\n"; |
| |
| $set{$var} = $value; |
| |
| if($var eq "new") { |
| # the last one for a single phrase |
| $all{$set{'id'}, 'desc'}=$set{'desc'}; |
| $all{$set{'id'}, 'eng'}=$set{'eng'}; |
| $all{$set{'id'}, 'voice'}=$set{'voice'}; |
| |
| $ids{$set{'id'}}=1; |
| push @ids, $set{'id'}; |
| undef %set; |
| } |
| } |
| } |
| close(ENG); |
| |
| undef %set; |
| my $cblock = 1; |
| open(NEW, "<$ARGV[1]"); |
| while(<NEW>) { |
| $_ =~ s/\r//g; |
| |
| if($_ =~ /^ *\#/) { |
| # comment |
| if($_ !~ /^ *\#\#\#/) { |
| # no special ### comment -> keep it |
| if(!$cblock) { |
| print "\n"; |
| $cblock = 1; |
| } |
| print $_; |
| } |
| next; |
| } |
| $cblock = 0; |
| |
| if($_ =~ /^ *([a-z]+): *(.*)/) { |
| ($var, $value) = ($1, $2); |
| |
| $set{$var} = $value; |
| |
| if($var eq "new") { |
| # the last one for a single phrase |
| |
| if(!$ids{$set{'id'}}) { |
| print "\n### ".$set{'id'}." was not found in the english file!\n"; |
| next; |
| } |
| |
| print "\nid: ".$set{'id'}."\n"; |
| |
| if($set{'desc'} ne $all{$set{'id'}, 'desc'}) { |
| print "### Description changed! Previous description was:\n", |
| "### \"".$set{'desc'}."\"\n"; |
| print "desc: ".$all{$set{'id'}, 'desc'}."\n"; |
| } |
| else { |
| print "desc: ".$set{'desc'}."\n"; |
| } |
| |
| if($set{'eng'} ne $all{$set{'id'}, 'eng'}) { |
| print "### English phrase was changed! Previous translation was made on:\n", |
| "### ".$set{'eng'}."\n"; |
| print "eng: ".$all{$set{'id'}, 'eng'}."\n"; |
| } |
| else { |
| print "eng: ".$set{'eng'}."\n"; |
| } |
| |
| if($set{'id'} =~ /^VOICE_/) { # voice only, compare desc: |
| if($set{'desc'} ne $all{$set{'id'}, 'desc'}) { |
| print "### Voice only: description changed! Voice set to english. Previous voice was:\n", |
| "### ".$set{'voice'}."\n"; |
| $set{'voice'} = $all{$set{'id'}, 'voice'}; |
| } |
| } |
| else { # standard entry, compare eng: |
| if($set{'eng'} ne $all{$set{'id'}, 'eng'} |
| #only if either original or translated voice: is non-empty |
| and ($set{'voice'} !~ /^(\"\")? *$/ |
| or $all{$set{'id'}, 'voice'} !~ /^(\"\")? *$/)) { |
| print "### English phrase was changed! Voice set to english. Previous voice was:\n", |
| "### ".$set{'voice'}."\n"; |
| $set{'voice'} = $all{$set{'id'}, 'voice'}; |
| } |
| } |
| if($set{'voice'} =~ /^(\"\")? *$/ |
| and $all{$set{'id'}, 'voice'} !~ /^(\"\")? *$/) { |
| print "### Voice not found in previous translation. Set to english.\n"; |
| $set{'voice'} = $all{$set{'id'}, 'voice'}; |
| } |
| print "voice: ".$set{'voice'}."\n"; |
| |
| print "new: ".$set{'new'}."\n"; |
| |
| $ids{$set{'id'}}=0; |
| undef %set; |
| } |
| } |
| } |
| close(NEW); |
| |
| # output new phrases not already translated , in english.lang order |
| for(@ids) { |
| if($ids{$_}) { |
| my $id=$_; |
| print "\nid: $_\n"; |
| print "desc: ".$all{$id, 'desc'}."\n"; |
| print "eng: ".$all{$id, 'eng'}."\n"; |
| print "### Not previously translated\n"; |
| print "voice: ".$all{$id, 'voice'}."\n"; |
| print "new: \n"; |
| } |
| } |