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