aboutsummaryrefslogblamecommitdiffstats
path: root/doc/update_translation.pl
blob: 0023b069d19bb2519793edfaf7802f6c03c425fc (plain) (tree)















































































































































































































































                                                                                  
#!/usr/bin/perl -w 
#
#  Script that translates .sgml files using the .po files generated from
#  the script update_po.pl
#
#  Copyright (C) 2001 Héctor García Álvarez.
#
#  This library is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License as
#  published by the Free Software Foundation; either version 2 of the
#  License, or (at your option) any later version.
#
#  This script is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this library; if not, write to the Free Software
#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
#  Authors: Héctor García Álvarez <hector@scouts-es.org>

## Loaded modules
use File::Basename;
use Getopt::Long;

my $LANG = $ARGV[0];

my %string;
my $texto_original="";
my $texto_traducido="";

if (! $LANG){
    print "Usage: update_translation.pl LANGCODE\n";
    exit;
}

chdir ("./C");

## Reading the po file
#print "Loading ".$LANG.".po\n";
#&load_translated_strings ($LANG.".po");

## Checking for the lang dir
if ( !(-d "../".$LANG) ) { mkdir ("../".$LANG, 0755) ; }

open FILES, "<POTFILES.in" ;
while (<FILES>) {
    undef %string;
    s/\n//g;
    $Original_file = $_ ;
    s/.\///g;
    $Translated_file = "../".$LANG."/".$_;
#   print $Original_file."\n";
#   print $Translated_file."\n";
    &load_translated_strings ("../".$LANG.".po/".$_.".po");
    print "Translating ".$Original_file ;
    system "rm -f $Translated_file";
    &translate_file ($Translated_file , $Original_file);
    print ".\n";
}
close FILES;                                

exit 0;




sub load_translated_strings () 
{
    my $FILE=$_[0];
    open (IN, "<$FILE") || die "I can't find $FILE";

    while (<IN>) {
            if ( /#: /) {
            &original;
            &traduccion;
#               print "Original \n##".$texto_original."##\n";
#               print "Traducción \n##".$texto_traducido."##\n";
                    $string{$texto_original} = $texto_traducido;
        }
    }
    close (IN);
}

sub translate_file ()
{
    my $OUTFILE=$_[0];
    my $INFILE=$_[1];
    
    open OUT, ">>$OUTFILE";
    open (IN, "<$INFILE") || die "can't open $INFILE: $!";

    while (<IN>) {
        my $imprimir = 0;
        if ( /<!--/ ) {
            $Salida =  $_ ;
            if ( !(/-->/) ) {
                while (<IN>) {
                    $Salida .=  $_ ;
                    if ( /-->/ ) { last ; }
                }
            }
            $imprimir = 1;
        }
        elsif ( /<para>/ ) {
            my $number_of_para = 1;
            $Salida = $_ ;
            if ( !(/<\/para>/) ) {
                while (<IN>) {
                    if ( /<para>/ ) { $number_of_para++; }
                    $Salida .=  $_ ;
                    if ( /<\/para>/ ) {
                        $number_of_para--;
                        if ( $number_of_para==0) {last ; }
                    }
                }
            }
            $imprimir = 1;
        }
        elsif ( /<title>/ ) {
            $Salida = $_ ;
            if ( !(/<\/title>/) ) {
                while (<IN>) {
                    $Salida .=  $_ ;
                    if ( /<\/title>/ ) { last ; }
                }
            }
            $imprimir = 1;
        }
        elsif ( /<glossterm>/ ) {
            $Salida = $_ ;
            if ( !(/<\/glossterm>/) ) {
                while (<IN>) {
                    $Salida .=  $_ ;
                    if ( /<\/glossterm>/ ) { last ; }
                }
            }
            $imprimir = 1;
        }
        elsif ( /<guilabel>/ ) {
            $Salida = $_ ;
            if ( !(/<\/guilabel>/) ) {
                while (<IN>) {
                    $Salida .=  $_ ;
                    if ( /<\/guilabel>/ ) { last ; }
                }
            }
            $imprimir = 1;
        }
            if ( $imprimir == 0 ) {  print (OUT $_); }
        else { 
            my $impreso=0;
            foreach my $theMessage (sort keys %string) {
                if (!($theMessage cmp $Salida)) {
                    my $tag = $string{$Salida} ;
                    
                    if ( $tag cmp "") {
                        $tag =~ s/\\"/"/mg ;
                        print (OUT $tag);
                    }
                    else {
                        print (OUT $Salida);
                    }
                    $impreso=1;
                }
            }
            if ( $impreso == 0) {
                print "No lo encuentro\n##".$Salida."##\n";
                $impreso=0;
            } 
            $imprimir = 0;
        }
    }
    close IN;
    close OUT;
}
#exit 0;

sub original () 
{
    my $tmp = "";
    while (<IN>) {
        if ( !(/^#: /) ) {
            if ( /msgid ""/) { s/msgid ""\n//; }
            if ( /msgstr/) {
                $tmp =~ s/\\n/\n/sg ;
                $tmp =~ s/\\t/\t/sg ;
                $tmp =~ s/\\"/"/sg ;
                $texto_original = $tmp;
                last ;
            }
            s/msgid "//;
            s/\s*"// ;
            s/"\n// ;
            s/\n// ;
            $tmp .=  $_;
        }
    }
}
        
sub traduccion ()
{
        my $tmp = "";
    my $first = 0;
    if ( /msgstr "/) {
        if ( /msgstr ""/) {
            $tmp = "";
            $first = 1;
        } else {
            $tmp = $_;
            $tmp =~ s/msgstr "//;
            $tmp =~ s/"\n// ;
        }
    }
    while (<IN>) {
    
        if ( !($_ cmp "\n") )  {
            $tmp =~ s/\\n/\n/sg ;
            $tmp =~ s/\\t/\t/sg ;
            $tmp =~ s/\"/"/sg ;
            if ( $first == 1 ) { $texto_traducido = "" ; }
            else { $texto_traducido = $tmp; }
            last ;
        }
        $first = 0;
        s/msgstr "//;
        s/"\n// ;
        s/\s*"// ;
        $tmp .=  $_;    
    }
    if ( eof IN ) {
        $tmp =~ s/\\n/\n/sg ;
        $tmp =~ s/\\t/\t/sg ;
        $tmp =~ s/\"/"/sg ;
        $texto_traducido = $tmp; 
    }
}