author | nathan |
Sat, 15 Mar 2008 03:38:25 +0100 | |
branch | trunk |
changeset 24 | a2a8e9ed1368 |
parent 23 | 3c10fdd8ccce |
permissions | -rw-r--r-- |
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 #
8 use strict;
9 use warnings;
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 );
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 );
62 my %strings;
64 foreach my $lang (@LANGS) { $strings{$lang} = { }; }
67 sub LoadLanguage(*) {
68 my ($lang) = @_;
70 if (!open FILE, "<", "po/$lang.po") {
71 return 0;
72 }
74 my $msgid = "";
75 my $msgstr = "";
76 my $last = 0; # 0=init, 1=msgid was last, 2=msgstr was last
78 while (<FILE>) {
79 chomp;
80 my $line = $_;
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 }
105 close FILE;
106 }
110 foreach my $lang (@LANGS) {
111 LoadLanguage($lang);
112 }
114 my @msgids = sort keys %{$strings{"en_US"}};
117 my $silent = 0;
119 while (<>) {
120 my $line = $_;
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 "";
127 my $head = " { ";
128 my $endif = "";
129 my $versnum = 10200;
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;
141 print "$head\"$msgstr\",\n";
142 $head = " ";
143 }
144 print $endif;
145 print " },\n";
146 }
147 $silent = 1;
148 }
150 if (!$silent) { print $line; }
152 if ($line =~ /^\/\/ END I18N/) {
153 print "// END I18N - automatically generated by po2i18n.pl\n";
154 $silent = 0;
155 }
156 }