#!/usr/bin/perl if(!$ARGV[0]) { print < MOO ; exit; } my %ids, @ids; open(ENG, "<$ARGV[0]"); while() { 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() { $_ =~ 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"; } }