diff options
Diffstat (limited to 'help/update_translation.pl')
-rwxr-xr-x | help/update_translation.pl | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/help/update_translation.pl b/help/update_translation.pl new file mode 100755 index 0000000000..0023b069d1 --- /dev/null +++ b/help/update_translation.pl @@ -0,0 +1,240 @@ +#!/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; + } +} |