po2i18n.pl
author nathan
Sun, 22 Feb 2009 21:02:54 +0800
branchtrunk
changeset 29 a0f32201f466
parent 23 3c10fdd8ccce
permissions -rw-r--r--
add italian translations
nathan@23
     1
#!/usr/bin/perl
nathan@23
     2
#
nathan@23
     3
#  po2i18n - Convert plugin po files in into i18n.c-format
nathan@23
     4
#
nathan@23
     5
#  See the README file for copyright information and how to reach the author.
nathan@23
     6
#
nathan@23
     7
nathan@23
     8
use strict;
nathan@23
     9
use warnings;
nathan@23
    10
nathan@23
    11
my @LANGS = (
nathan@23
    12
  "en_US",
nathan@23
    13
  "de_DE",
nathan@23
    14
  "sl_SI",
nathan@23
    15
  "it_IT",
nathan@23
    16
  "nl_NL",
nathan@23
    17
  "pt_PT",
nathan@23
    18
  "fr_FR",
nathan@23
    19
  "nn_NO",
nathan@23
    20
  "fi_FI",
nathan@23
    21
  "pl_PL",
nathan@23
    22
  "es_ES",
nathan@23
    23
  "el_GR",
nathan@23
    24
  "sv_SE",
nathan@23
    25
  "ro_RO",
nathan@23
    26
  "hu_HU",
nathan@23
    27
  "ca_ES",
nathan@23
    28
  "ru_RU",
nathan@23
    29
  "hr_HR",
nathan@23
    30
  "et_EE",
nathan@23
    31
  "da_DK",
nathan@23
    32
  "cs_CZ",
nathan@23
    33
  "tr_TR"
nathan@23
    34
  );
nathan@23
    35
nathan@23
    36
my %VERS = (
nathan@23
    37
  "en_US" => 10200,
nathan@23
    38
  "de_DE" => 10200,
nathan@23
    39
  "sl_SI" => 10200,
nathan@23
    40
  "it_IT" => 10200,
nathan@23
    41
  "nl_NL" => 10200,
nathan@23
    42
  "pt_PT" => 10200,
nathan@23
    43
  "fr_FR" => 10200,
nathan@23
    44
  "nn_NO" => 10200,
nathan@23
    45
  "fi_FI" => 10200,
nathan@23
    46
  "pl_PL" => 10200,
nathan@23
    47
  "es_ES" => 10200,
nathan@23
    48
  "el_GR" => 10200,
nathan@23
    49
  "sv_SE" => 10200,
nathan@23
    50
  "ro_RO" => 10200,
nathan@23
    51
  "hu_HU" => 10200,
nathan@23
    52
  "ca_ES" => 10200,
nathan@23
    53
  "ru_RU" => 10302,
nathan@23
    54
  "hr_HR" => 10307,
nathan@23
    55
  "et_EE" => 10313,
nathan@23
    56
  "da_DK" => 10316,
nathan@23
    57
  "cs_CZ" => 10342,
nathan@23
    58
  "tr_TR" => 10502
nathan@23
    59
  );
nathan@23
    60
nathan@23
    61
nathan@23
    62
my %strings;
nathan@23
    63
nathan@23
    64
foreach my $lang (@LANGS) { $strings{$lang} = { }; }
nathan@23
    65
nathan@23
    66
nathan@23
    67
sub LoadLanguage(*) {
nathan@23
    68
    my ($lang) = @_;
nathan@23
    69
    
nathan@23
    70
    if (!open FILE, "<", "po/$lang.po") {
nathan@23
    71
        return 0;   
nathan@23
    72
    }
nathan@23
    73
    
nathan@23
    74
    my $msgid = "";
nathan@23
    75
    my $msgstr = "";
nathan@23
    76
    my $last = 0; # 0=init, 1=msgid was last, 2=msgstr was last
nathan@23
    77
    
nathan@23
    78
    while (<FILE>) {
nathan@23
    79
        chomp;
nathan@23
    80
        my $line = $_;
nathan@23
    81
        
nathan@23
    82
        if ($line =~ /^msgid "(.*)"$/) {
nathan@23
    83
            if ($last eq 2) {
nathan@23
    84
                $strings{$lang}->{$msgid} = $msgstr;
nathan@23
    85
                $strings{"en_US"}->{$msgid} = $msgid;
nathan@23
    86
            }
nathan@23
    87
            $msgid = $1;
nathan@23
    88
            $last = 1;
nathan@23
    89
        } elsif ($line =~ /^msgstr "(.*)"/) {
nathan@23
    90
            $msgstr = $1;
nathan@23
    91
            $last = 2;
nathan@23
    92
        } elsif ($line =~ /^"(.*)"/) {
nathan@23
    93
            if ($last eq 1) {
nathan@23
    94
                $msgid = $msgid . $1;
nathan@23
    95
            } elsif ($last eq 2) {
nathan@23
    96
                $msgstr = $msgstr . $1;
nathan@23
    97
            }
nathan@23
    98
        }       
nathan@23
    99
    }
nathan@23
   100
    if ($last eq 2) {
nathan@23
   101
        $strings{$lang}->{$msgid} = $msgstr;
nathan@23
   102
        $strings{"en_US"}->{$msgid} = $msgid;
nathan@23
   103
    }
nathan@23
   104
    
nathan@23
   105
    close FILE;
nathan@23
   106
}
nathan@23
   107
nathan@23
   108
nathan@23
   109
nathan@23
   110
foreach my $lang (@LANGS) { 
nathan@23
   111
    LoadLanguage($lang);
nathan@23
   112
}
nathan@23
   113
nathan@23
   114
my @msgids = sort keys %{$strings{"en_US"}};
nathan@23
   115
nathan@23
   116
nathan@23
   117
my $silent = 0;
nathan@23
   118
nathan@23
   119
while (<>) {
nathan@23
   120
    my $line = $_;
nathan@23
   121
nathan@23
   122
    if ($line =~ /^\/\/ START I18N/) {
nathan@23
   123
        print "// START I18N - automatically generated by po2i18n.pl\n";
nathan@23
   124
        for my $msgid (@msgids) {
nathan@23
   125
            next if $msgid eq "";
nathan@23
   126
nathan@23
   127
            my $head = "  { ";
nathan@23
   128
            my $endif = "";
nathan@23
   129
            my $versnum = 10200;
nathan@23
   130
            
nathan@23
   131
            for my $lang (@LANGS) {
nathan@23
   132
                if ($VERS{$lang} ne $versnum) {
nathan@23
   133
                    $versnum = $VERS{$lang};
nathan@23
   134
                    print $endif;
nathan@23
   135
                    print "#if VDRVERSNUM >= $versnum\n";
nathan@23
   136
                    $endif = "#endif\n";
nathan@23
   137
                }
nathan@23
   138
                my $msgstr = $strings{$lang}->{$msgid};
nathan@23
   139
                $msgstr = "" if !defined $msgstr;
nathan@23
   140
                
nathan@23
   141
                print "$head\"$msgstr\",\n";
nathan@23
   142
                $head = "    ";
nathan@23
   143
            }
nathan@23
   144
            print $endif;
nathan@23
   145
            print "  },\n";
nathan@23
   146
        }
nathan@23
   147
        $silent = 1;
nathan@23
   148
    }
nathan@23
   149
nathan@23
   150
    if (!$silent) { print $line; }
nathan@23
   151
nathan@23
   152
    if ($line =~ /^\/\/ END I18N/) { 
nathan@23
   153
        print "// END I18N - automatically generated by po2i18n.pl\n";
nathan@23
   154
        $silent = 0; 
nathan@23
   155
    }    
nathan@23
   156
}