1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/po2i18n.pl Sat Dec 29 14:58:47 2007 +0100
1.3 @@ -0,0 +1,156 @@
1.4 +#!/usr/bin/perl
1.5 +#
1.6 +# po2i18n - Convert plugin po files in into i18n.c-format
1.7 +#
1.8 +# See the README file for copyright information and how to reach the author.
1.9 +#
1.10 +
1.11 +use strict;
1.12 +use warnings;
1.13 +
1.14 +my @LANGS = (
1.15 + "en_US",
1.16 + "de_DE",
1.17 + "sl_SI",
1.18 + "it_IT",
1.19 + "nl_NL",
1.20 + "pt_PT",
1.21 + "fr_FR",
1.22 + "nn_NO",
1.23 + "fi_FI",
1.24 + "pl_PL",
1.25 + "es_ES",
1.26 + "el_GR",
1.27 + "sv_SE",
1.28 + "ro_RO",
1.29 + "hu_HU",
1.30 + "ca_ES",
1.31 + "ru_RU",
1.32 + "hr_HR",
1.33 + "et_EE",
1.34 + "da_DK",
1.35 + "cs_CZ",
1.36 + "tr_TR"
1.37 + );
1.38 +
1.39 +my %VERS = (
1.40 + "en_US" => 10200,
1.41 + "de_DE" => 10200,
1.42 + "sl_SI" => 10200,
1.43 + "it_IT" => 10200,
1.44 + "nl_NL" => 10200,
1.45 + "pt_PT" => 10200,
1.46 + "fr_FR" => 10200,
1.47 + "nn_NO" => 10200,
1.48 + "fi_FI" => 10200,
1.49 + "pl_PL" => 10200,
1.50 + "es_ES" => 10200,
1.51 + "el_GR" => 10200,
1.52 + "sv_SE" => 10200,
1.53 + "ro_RO" => 10200,
1.54 + "hu_HU" => 10200,
1.55 + "ca_ES" => 10200,
1.56 + "ru_RU" => 10302,
1.57 + "hr_HR" => 10307,
1.58 + "et_EE" => 10313,
1.59 + "da_DK" => 10316,
1.60 + "cs_CZ" => 10342,
1.61 + "tr_TR" => 10502
1.62 + );
1.63 +
1.64 +
1.65 +my %strings;
1.66 +
1.67 +foreach my $lang (@LANGS) { $strings{$lang} = { }; }
1.68 +
1.69 +
1.70 +sub LoadLanguage(*) {
1.71 + my ($lang) = @_;
1.72 +
1.73 + if (!open FILE, "<", "po/$lang.po") {
1.74 + return 0;
1.75 + }
1.76 +
1.77 + my $msgid = "";
1.78 + my $msgstr = "";
1.79 + my $last = 0; # 0=init, 1=msgid was last, 2=msgstr was last
1.80 +
1.81 + while (<FILE>) {
1.82 + chomp;
1.83 + my $line = $_;
1.84 +
1.85 + if ($line =~ /^msgid "(.*)"$/) {
1.86 + if ($last eq 2) {
1.87 + $strings{$lang}->{$msgid} = $msgstr;
1.88 + $strings{"en_US"}->{$msgid} = $msgid;
1.89 + }
1.90 + $msgid = $1;
1.91 + $last = 1;
1.92 + } elsif ($line =~ /^msgstr "(.*)"/) {
1.93 + $msgstr = $1;
1.94 + $last = 2;
1.95 + } elsif ($line =~ /^"(.*)"/) {
1.96 + if ($last eq 1) {
1.97 + $msgid = $msgid . $1;
1.98 + } elsif ($last eq 2) {
1.99 + $msgstr = $msgstr . $1;
1.100 + }
1.101 + }
1.102 + }
1.103 + if ($last eq 2) {
1.104 + $strings{$lang}->{$msgid} = $msgstr;
1.105 + $strings{"en_US"}->{$msgid} = $msgid;
1.106 + }
1.107 +
1.108 + close FILE;
1.109 +}
1.110 +
1.111 +
1.112 +
1.113 +foreach my $lang (@LANGS) {
1.114 + LoadLanguage($lang);
1.115 +}
1.116 +
1.117 +my @msgids = sort keys %{$strings{"en_US"}};
1.118 +
1.119 +
1.120 +my $silent = 0;
1.121 +
1.122 +while (<>) {
1.123 + my $line = $_;
1.124 +
1.125 + if ($line =~ /^\/\/ START I18N/) {
1.126 + print "// START I18N - automatically generated by po2i18n.pl\n";
1.127 + for my $msgid (@msgids) {
1.128 + next if $msgid eq "";
1.129 +
1.130 + my $head = " { ";
1.131 + my $endif = "";
1.132 + my $versnum = 10200;
1.133 +
1.134 + for my $lang (@LANGS) {
1.135 + if ($VERS{$lang} ne $versnum) {
1.136 + $versnum = $VERS{$lang};
1.137 + print $endif;
1.138 + print "#if VDRVERSNUM >= $versnum\n";
1.139 + $endif = "#endif\n";
1.140 + }
1.141 + my $msgstr = $strings{$lang}->{$msgid};
1.142 + $msgstr = "" if !defined $msgstr;
1.143 +
1.144 + print "$head\"$msgstr\",\n";
1.145 + $head = " ";
1.146 + }
1.147 + print $endif;
1.148 + print " },\n";
1.149 + }
1.150 + $silent = 1;
1.151 + }
1.152 +
1.153 + if (!$silent) { print $line; }
1.154 +
1.155 + if ($line =~ /^\/\/ END I18N/) {
1.156 + print "// END I18N - automatically generated by po2i18n.pl\n";
1.157 + $silent = 0;
1.158 + }
1.159 +}