po2i18n.pl
author nathan
Mon, 28 Jan 2008 17:39:51 +0100
branchtrunk
changeset 23 3c10fdd8ccce
permissions -rw-r--r--
use po2i18n for non-locale vdr
     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 }