Files
wagic/projects/mtg/tools/translation_sync/sync.pl
wagic.the.homebrew@gmail.com fd8dd58706 Erwan
-language oatch tool (sync.pl) bug fix
-French _cards.dat updates to 0.8.1
2009-08-16 06:13:36 +00:00

106 lines
2.6 KiB
Perl

#!/usr/bin/perl
#This script synchronizes a translation of _cards.dat with the equivalent english _cards.dat
# it keeps everything from the english file, except the text line that is taken from the translated file
# usage: sync.pl FR
use strict;
use warnings;
use Cwd;
use DirHandle;
use Data::Dumper;
# Subroutines
my $parseCards = sub {
my $inFile = shift;
return {} unless (-f $inFile);
my @cards;
my %card;
open (MYFILE, $inFile);
while (<MYFILE>) {
chomp;
my $line = $_;
next if $line eq "[card]";
if ($line =~ /\[\/card\]/) {
my %copy = %card;
%card =();
push @cards, \%copy;
}
if ($line =~ /=/){
my ($type, $content) = split(/=/, $line);
$card{$type} = [] unless $card{$type};
push @{$card{$type}}, $content;
}
}
close (MYFILE);
my %cards = map { $_->{id}[0] => $_ } @cards;
return \%cards;
};
my $doOutput = sub {
my ($outFile, $data, $translation) = @_;
open (OUTFILE, '>' . $outFile);
while ( my ($key, $value) = each(%$data) ) {
if (my $trans = $translation->{$key}){
$value->{text} = $trans->{text} if $trans->{text};
}
print OUTFILE "[card]\n";
while ( my ($k, $v) = each(%$value) ) {
my @v = @$v;
for my $line (@v){
print OUTFILE $k ."=" . $line . "\n";
}
}
print OUTFILE "[/card]\n";
}
close (OUTFILE);
};
my $output = sub {
};
my $lang = $ARGV[0] || "FR";
my $data_folder = "../../bin/Res/sets";
my $input_translation = "$lang/input";
my $output_folder = "sets";
my $dh = DirHandle->new($input_translation) or die "No such directory: $input_translation";
print "looking for translated sets in $input_translation\n";
$dh = DirHandle->new($data_folder) or die "No such directory: $data_folder";
while(defined(my $val = $dh->read)){
next if "." eq $val;
next if ".." eq $val;
if (-d $data_folder."/".$val){
if (-f $data_folder. "/" . $val ."/" . "_cards.dat"){
print "processing $val \n";
my $curdir = $input_translation."/".$val;
my $cards = $parseCards->($data_folder. "/" . $val ."/" . "_cards.dat");
my $transl = $parseCards->($curdir."/_cards.dat");
mkdir "$lang/$output_folder";
my $out = $lang . "/" . $output_folder ."/" . $val;
mkdir ($out);
$doOutput->($out . "/_cards.dat", $cards,$transl);
if (%$transl){
print "-->OK\n";
}else{
print "--> No translation was found for $val. The original file was used\n";
}
}
}
}
print "done! resulting _cards.dat files put in Folder:$output_folder\n";
$dh->close();