|
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 } |