213 lines
5.0 KiB
Perl
Executable File
213 lines
5.0 KiB
Perl
Executable File
#!/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"; }
|
|
|
|
if ( !(-d "./$LANG") ){ mkdir ("./$LANG", 0755) ; }
|
|
|
|
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");
|
|
|
|
if ( -f "../$LANG/$Original_file.po") {
|
|
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");
|
|
} else {
|
|
system ("mv ../$LANG/$Original_file.pot ../$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";
|
|
}
|
|
|
|
}
|
|
}
|
|
|