diff options
Diffstat (limited to 'help/update_po.pl')
-rwxr-xr-x | help/update_po.pl | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/help/update_po.pl b/help/update_po.pl new file mode 100755 index 0000000000..0cc236318b --- /dev/null +++ b/help/update_po.pl @@ -0,0 +1,203 @@ +#!/usr/bin/perl -w +# +# Script for translators that extract .sgml files into .sgml.po ones +# +# 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 strict; +use File::Basename; +use Getopt::Long; + +my $LANG = $ARGV[0]; +#my $OUTFILE = "./tmp/$FILE.h"; + +my %string = (); +my @elements; +my @items; +my $n=0; + +if (! $LANG){ + print "Usage: update_po.pl LANGCODE\n"; + exit; +} else { $LANG .=".po"; } + +chdir ("./C"); +if ( !(-d "./tmp") ) { mkdir ("./tmp", 0755) ; } +my $comand=""; + +open FILES, "<POTFILES.in" ; +#open POTFILE, ">POTFILES.in.h"; +while (<FILES>) { + undef (%string); + s/\n//g; + my $Original_file = $_ ; + s/.\///g; + my $Converted_file = "./tmp/".$_.".h"; + # print $Original_file."\n"; + # print $Translated_file."\n"; + print "Converting ".$Original_file."\n" ; + system "rm -f $Converted_file"; + &Convert ($Original_file); + open OUT, ">>$Converted_file"; + &addMessages; + close OUT; + $comand = "xgettext --default-domain=$Original_file "; + $comand .="--directory=. --add-comments --keyword=_ --keyword=N_ "; + $comand .="$Converted_file "; + system ( $comand ); + print ("Updating $Original_file.po\n"); + system ("mv $Original_file.po ../$LANG/$Original_file.pot"); + system ("cp ../$LANG/$Original_file.po ../$LANG/$Original_file.po.old"); + system ("msgmerge ../$LANG/$Original_file.po.old ../$LANG/$Original_file.pot -o ../$LANG/$Original_file.po"); + system ("msgfmt --statistics ../$LANG/$Original_file.po"); + system ("rm -f ../$LANG/$Original_file.pot"); +# print POTFILE $Converted_file."\n"; + print ".\n"; +} +close FILES; + +system ("rm -rf ./tmp "); +exit 0; + + +sub Convert() { + + ## Reading the file + open (IN, "<$_[0]") || die "can't open $_[0]: $!"; + + ### For translatable Sgml files ### + while (<IN>) { + if ( /<!--/ ) { + my $Salida = $_ ; + if ( (/-->/) ) { + $string{$Salida} = []; + } else { + while (<IN>) { + $Salida .= $_ ; + if ( /-->/ ) { last ; } + } + $string{$Salida} = []; + } + } + elsif ( /<para>/ ) { + my $number_of_para = 1; + my $Salida = $_ ; + if ( /<\/para>/ ) { + $string{$Salida} = []; + } else { + while (<IN>) { + if ( /<para>/ ) { $number_of_para++; } + $Salida .= $_ ; + if ( /<\/para>/ ) { + $number_of_para--; + if ( $number_of_para==0) {last ; } + } + } + $string{$Salida} = []; + } + } + elsif ( /<title>/ ) { + my $Salida = $_ ; + if ( /<\/title>/ ) { + $string{$Salida} = []; + } else { + while (<IN>) { + $Salida .= $_ ; + if ( /<\/title>/ ) { last ; } + } + $string{$Salida} = []; + } + } + elsif ( /<glossterm>/ ) { + my $Salida = $_ ; + if ( /<\/glossterm>/ ) { + $string{$Salida} = []; + } else { + while (<IN>) { + $Salida .= $_ ; + if ( /<\/glossterm>/ ) { last ; } + } + $string{$Salida} = []; + } + } + elsif ( /<guilabel>/ ) { + my $Salida = $_ ; + if ( /<\/guilabel>/ ) { + $string{$Salida} = []; + } else { + while (<IN>) { + $Salida .= $_ ; + if ( /<\/guilabel>/ ) { last ; } + } + $string{$Salida} = []; + } + } + } + close (IN); +} + +sub addMessages{ + + foreach my $theMessage (sort keys %string) { + + my ($tag) = $string{$theMessage} ; + + # Replace XML codes for special chars to + # geniune gettext syntax + #--------------------------------------- + $theMessage =~ s/"/\\"/mg; + $theMessage =~ s/\n/\\n\n/mg; + +# $theMessage =~ s/</</mg; +# $theMessage =~ s/>/>/mg; + + if ($theMessage =~ /\n/) { + #if ($tag) { print OUT "/* $tag */\n"; } + @elements = split (/\n/, $theMessage); + for ($n = 0; $n < @elements; $n++) { + + if ($n == 0) { + print OUT "gchar *s = N_"; + print OUT "(\"$elements[$n]\""; + if ($n == @elements - 1) { print OUT ");\n"; } + print OUT "\n"; + } + + elsif ($n == @elements - 1) { + print OUT " "; + print OUT "\"$elements[$n]\");\n\n"; + } + + elsif ($n > 0) { + print OUT " "; + print OUT "\"$elements[$n]\"\n"; + } + } + + } else { + +# if ($tag) { print OUT "/* $tag */\n"; } + print OUT "gchar *s = N_(\"$theMessage\");\n"; + } + + } +} + |