po2i18n.pl
branchtrunk
changeset 23 3c10fdd8ccce
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/po2i18n.pl	Mon Jan 28 17:39:51 2008 +0100
     1.3 @@ -0,0 +1,156 @@
     1.4 +#!/usr/bin/perl
     1.5 +#
     1.6 +#  po2i18n - Convert plugin po files in into i18n.c-format
     1.7 +#
     1.8 +#  See the README file for copyright information and how to reach the author.
     1.9 +#
    1.10 +
    1.11 +use strict;
    1.12 +use warnings;
    1.13 +
    1.14 +my @LANGS = (
    1.15 +  "en_US",
    1.16 +  "de_DE",
    1.17 +  "sl_SI",
    1.18 +  "it_IT",
    1.19 +  "nl_NL",
    1.20 +  "pt_PT",
    1.21 +  "fr_FR",
    1.22 +  "nn_NO",
    1.23 +  "fi_FI",
    1.24 +  "pl_PL",
    1.25 +  "es_ES",
    1.26 +  "el_GR",
    1.27 +  "sv_SE",
    1.28 +  "ro_RO",
    1.29 +  "hu_HU",
    1.30 +  "ca_ES",
    1.31 +  "ru_RU",
    1.32 +  "hr_HR",
    1.33 +  "et_EE",
    1.34 +  "da_DK",
    1.35 +  "cs_CZ",
    1.36 +  "tr_TR"
    1.37 +  );
    1.38 +
    1.39 +my %VERS = (
    1.40 +  "en_US" => 10200,
    1.41 +  "de_DE" => 10200,
    1.42 +  "sl_SI" => 10200,
    1.43 +  "it_IT" => 10200,
    1.44 +  "nl_NL" => 10200,
    1.45 +  "pt_PT" => 10200,
    1.46 +  "fr_FR" => 10200,
    1.47 +  "nn_NO" => 10200,
    1.48 +  "fi_FI" => 10200,
    1.49 +  "pl_PL" => 10200,
    1.50 +  "es_ES" => 10200,
    1.51 +  "el_GR" => 10200,
    1.52 +  "sv_SE" => 10200,
    1.53 +  "ro_RO" => 10200,
    1.54 +  "hu_HU" => 10200,
    1.55 +  "ca_ES" => 10200,
    1.56 +  "ru_RU" => 10302,
    1.57 +  "hr_HR" => 10307,
    1.58 +  "et_EE" => 10313,
    1.59 +  "da_DK" => 10316,
    1.60 +  "cs_CZ" => 10342,
    1.61 +  "tr_TR" => 10502
    1.62 +  );
    1.63 +
    1.64 +
    1.65 +my %strings;
    1.66 +
    1.67 +foreach my $lang (@LANGS) { $strings{$lang} = { }; }
    1.68 +
    1.69 +
    1.70 +sub LoadLanguage(*) {
    1.71 +    my ($lang) = @_;
    1.72 +    
    1.73 +    if (!open FILE, "<", "po/$lang.po") {
    1.74 +        return 0;   
    1.75 +    }
    1.76 +    
    1.77 +    my $msgid = "";
    1.78 +    my $msgstr = "";
    1.79 +    my $last = 0; # 0=init, 1=msgid was last, 2=msgstr was last
    1.80 +    
    1.81 +    while (<FILE>) {
    1.82 +        chomp;
    1.83 +        my $line = $_;
    1.84 +        
    1.85 +        if ($line =~ /^msgid "(.*)"$/) {
    1.86 +            if ($last eq 2) {
    1.87 +                $strings{$lang}->{$msgid} = $msgstr;
    1.88 +                $strings{"en_US"}->{$msgid} = $msgid;
    1.89 +            }
    1.90 +            $msgid = $1;
    1.91 +            $last = 1;
    1.92 +        } elsif ($line =~ /^msgstr "(.*)"/) {
    1.93 +            $msgstr = $1;
    1.94 +            $last = 2;
    1.95 +        } elsif ($line =~ /^"(.*)"/) {
    1.96 +            if ($last eq 1) {
    1.97 +                $msgid = $msgid . $1;
    1.98 +            } elsif ($last eq 2) {
    1.99 +                $msgstr = $msgstr . $1;
   1.100 +            }
   1.101 +        }       
   1.102 +    }
   1.103 +    if ($last eq 2) {
   1.104 +        $strings{$lang}->{$msgid} = $msgstr;
   1.105 +        $strings{"en_US"}->{$msgid} = $msgid;
   1.106 +    }
   1.107 +    
   1.108 +    close FILE;
   1.109 +}
   1.110 +
   1.111 +
   1.112 +
   1.113 +foreach my $lang (@LANGS) { 
   1.114 +    LoadLanguage($lang);
   1.115 +}
   1.116 +
   1.117 +my @msgids = sort keys %{$strings{"en_US"}};
   1.118 +
   1.119 +
   1.120 +my $silent = 0;
   1.121 +
   1.122 +while (<>) {
   1.123 +    my $line = $_;
   1.124 +
   1.125 +    if ($line =~ /^\/\/ START I18N/) {
   1.126 +        print "// START I18N - automatically generated by po2i18n.pl\n";
   1.127 +        for my $msgid (@msgids) {
   1.128 +            next if $msgid eq "";
   1.129 +
   1.130 +            my $head = "  { ";
   1.131 +            my $endif = "";
   1.132 +            my $versnum = 10200;
   1.133 +            
   1.134 +            for my $lang (@LANGS) {
   1.135 +                if ($VERS{$lang} ne $versnum) {
   1.136 +                    $versnum = $VERS{$lang};
   1.137 +                    print $endif;
   1.138 +                    print "#if VDRVERSNUM >= $versnum\n";
   1.139 +                    $endif = "#endif\n";
   1.140 +                }
   1.141 +                my $msgstr = $strings{$lang}->{$msgid};
   1.142 +                $msgstr = "" if !defined $msgstr;
   1.143 +                
   1.144 +                print "$head\"$msgstr\",\n";
   1.145 +                $head = "    ";
   1.146 +            }
   1.147 +            print $endif;
   1.148 +            print "  },\n";
   1.149 +        }
   1.150 +        $silent = 1;
   1.151 +    }
   1.152 +
   1.153 +    if (!$silent) { print $line; }
   1.154 +
   1.155 +    if ($line =~ /^\/\/ END I18N/) { 
   1.156 +        print "// END I18N - automatically generated by po2i18n.pl\n";
   1.157 +        $silent = 0; 
   1.158 +    }    
   1.159 +}