nathan@23: #!/usr/bin/perl nathan@23: # nathan@23: # po2i18n - Convert plugin po files in into i18n.c-format nathan@23: # nathan@23: # See the README file for copyright information and how to reach the author. nathan@23: # nathan@23: nathan@23: use strict; nathan@23: use warnings; nathan@23: nathan@23: my @LANGS = ( nathan@23: "en_US", nathan@23: "de_DE", nathan@23: "sl_SI", nathan@23: "it_IT", nathan@23: "nl_NL", nathan@23: "pt_PT", nathan@23: "fr_FR", nathan@23: "nn_NO", nathan@23: "fi_FI", nathan@23: "pl_PL", nathan@23: "es_ES", nathan@23: "el_GR", nathan@23: "sv_SE", nathan@23: "ro_RO", nathan@23: "hu_HU", nathan@23: "ca_ES", nathan@23: "ru_RU", nathan@23: "hr_HR", nathan@23: "et_EE", nathan@23: "da_DK", nathan@23: "cs_CZ", nathan@23: "tr_TR" nathan@23: ); nathan@23: nathan@23: my %VERS = ( nathan@23: "en_US" => 10200, nathan@23: "de_DE" => 10200, nathan@23: "sl_SI" => 10200, nathan@23: "it_IT" => 10200, nathan@23: "nl_NL" => 10200, nathan@23: "pt_PT" => 10200, nathan@23: "fr_FR" => 10200, nathan@23: "nn_NO" => 10200, nathan@23: "fi_FI" => 10200, nathan@23: "pl_PL" => 10200, nathan@23: "es_ES" => 10200, nathan@23: "el_GR" => 10200, nathan@23: "sv_SE" => 10200, nathan@23: "ro_RO" => 10200, nathan@23: "hu_HU" => 10200, nathan@23: "ca_ES" => 10200, nathan@23: "ru_RU" => 10302, nathan@23: "hr_HR" => 10307, nathan@23: "et_EE" => 10313, nathan@23: "da_DK" => 10316, nathan@23: "cs_CZ" => 10342, nathan@23: "tr_TR" => 10502 nathan@23: ); nathan@23: nathan@23: nathan@23: my %strings; nathan@23: nathan@23: foreach my $lang (@LANGS) { $strings{$lang} = { }; } nathan@23: nathan@23: nathan@23: sub LoadLanguage(*) { nathan@23: my ($lang) = @_; nathan@23: nathan@23: if (!open FILE, "<", "po/$lang.po") { nathan@23: return 0; nathan@23: } nathan@23: nathan@23: my $msgid = ""; nathan@23: my $msgstr = ""; nathan@23: my $last = 0; # 0=init, 1=msgid was last, 2=msgstr was last nathan@23: nathan@23: while () { nathan@23: chomp; nathan@23: my $line = $_; nathan@23: nathan@23: if ($line =~ /^msgid "(.*)"$/) { nathan@23: if ($last eq 2) { nathan@23: $strings{$lang}->{$msgid} = $msgstr; nathan@23: $strings{"en_US"}->{$msgid} = $msgid; nathan@23: } nathan@23: $msgid = $1; nathan@23: $last = 1; nathan@23: } elsif ($line =~ /^msgstr "(.*)"/) { nathan@23: $msgstr = $1; nathan@23: $last = 2; nathan@23: } elsif ($line =~ /^"(.*)"/) { nathan@23: if ($last eq 1) { nathan@23: $msgid = $msgid . $1; nathan@23: } elsif ($last eq 2) { nathan@23: $msgstr = $msgstr . $1; nathan@23: } nathan@23: } nathan@23: } nathan@23: if ($last eq 2) { nathan@23: $strings{$lang}->{$msgid} = $msgstr; nathan@23: $strings{"en_US"}->{$msgid} = $msgid; nathan@23: } nathan@23: nathan@23: close FILE; nathan@23: } nathan@23: nathan@23: nathan@23: nathan@23: foreach my $lang (@LANGS) { nathan@23: LoadLanguage($lang); nathan@23: } nathan@23: nathan@23: my @msgids = sort keys %{$strings{"en_US"}}; nathan@23: nathan@23: nathan@23: my $silent = 0; nathan@23: nathan@23: while (<>) { nathan@23: my $line = $_; nathan@23: nathan@23: if ($line =~ /^\/\/ START I18N/) { nathan@23: print "// START I18N - automatically generated by po2i18n.pl\n"; nathan@23: for my $msgid (@msgids) { nathan@23: next if $msgid eq ""; nathan@23: nathan@23: my $head = " { "; nathan@23: my $endif = ""; nathan@23: my $versnum = 10200; nathan@23: nathan@23: for my $lang (@LANGS) { nathan@23: if ($VERS{$lang} ne $versnum) { nathan@23: $versnum = $VERS{$lang}; nathan@23: print $endif; nathan@23: print "#if VDRVERSNUM >= $versnum\n"; nathan@23: $endif = "#endif\n"; nathan@23: } nathan@23: my $msgstr = $strings{$lang}->{$msgid}; nathan@23: $msgstr = "" if !defined $msgstr; nathan@23: nathan@23: print "$head\"$msgstr\",\n"; nathan@23: $head = " "; nathan@23: } nathan@23: print $endif; nathan@23: print " },\n"; nathan@23: } nathan@23: $silent = 1; nathan@23: } nathan@23: nathan@23: if (!$silent) { print $line; } nathan@23: nathan@23: if ($line =~ /^\/\/ END I18N/) { nathan@23: print "// END I18N - automatically generated by po2i18n.pl\n"; nathan@23: $silent = 0; nathan@23: } nathan@23: }