summaryrefslogtreecommitdiff
path: root/buildutil
diff options
context:
space:
mode:
authorChristian Wieninger <winni@debian.(none)>2007-11-11 15:40:28 +0100
committerChristian Wieninger <winni@debian.(none)>2007-11-11 15:40:28 +0100
commit8d4f8607dc1558ce73eb4c376bdbf78ddb65da83 (patch)
treed0c5dde81a36ab2e8a2edc7c1e6922556518b312 /buildutil
downloadvdr-plugin-epgsearch-8d4f8607dc1558ce73eb4c376bdbf78ddb65da83.tar.gz
vdr-plugin-epgsearch-8d4f8607dc1558ce73eb4c376bdbf78ddb65da83.tar.bz2
Initial commit
Diffstat (limited to 'buildutil')
-rwxr-xr-xbuildutil/pot2i18n.pl157
1 files changed, 157 insertions, 0 deletions
diff --git a/buildutil/pot2i18n.pl b/buildutil/pot2i18n.pl
new file mode 100755
index 0000000..600879b
--- /dev/null
+++ b/buildutil/pot2i18n.pl
@@ -0,0 +1,157 @@
+#!/usr/bin/perl
+#
+# File: pot2i18n.pl - Convert plugin pot file into i18n.c-format
+# Author: Dieter Hametner
+# Version: 0.1
+#
+# based on po2i18n.pl version 0.1 from Udo Richter
+#
+# See the po2i18n/README file for copyright information and how to
+# reach the original author. Also general use is described there.
+#
+# This version uses the CPAN module Locale::PO to read the .pot and .po files
+# which ensures, that these files are read correctly.
+#
+# The usage of pot2i18n.pl differs from po2i18n.pl that it requires as first
+# argument the path to the plugins .pot file. There it then looks also for
+# the translated .po files which are used to create the result.
+# This version does not sort the msgids lexicaly (in contrast to po2i18n.pl)
+
+use strict;
+use warnings;
+
+use Locale::PO;
+use File::Basename;
+
+my @LANGS = (
+ "en_US",
+ "de_DE",
+ "sl_SI",
+ "it_IT",
+ "nl_NL",
+ "pt_PT",
+ "fr_FR",
+ "nn_NO",
+ "fi_FI",
+ "pl_PL",
+ "es_ES",
+ "el_GR",
+ "sv_SE",
+ "ro_RO",
+ "hu_HU",
+ "ca_ES",
+ "ru_RU",
+ "hr_HR",
+ "et_EE",
+ "da_DK",
+ "cs_CZ",
+ "tr_TR"
+ );
+
+my %VERS = (
+ "en_US" => 10200,
+ "de_DE" => 10200,
+ "sl_SI" => 10200,
+ "it_IT" => 10200,
+ "nl_NL" => 10200,
+ "pt_PT" => 10200,
+ "fr_FR" => 10200,
+ "nn_NO" => 10200,
+ "fi_FI" => 10200,
+ "pl_PL" => 10200,
+ "es_ES" => 10200,
+ "el_GR" => 10200,
+ "sv_SE" => 10200,
+ "ro_RO" => 10200,
+ "hu_HU" => 10200,
+ "ca_ES" => 10200,
+ "ru_RU" => 10302,
+ "hr_HR" => 10307,
+ "et_EE" => 10313,
+ "da_DK" => 10316,
+ "cs_CZ" => 10342,
+ "tr_TR" => 10502
+ );
+
+die "Missing .pot file argument" unless $#ARGV >= 0;
+
+my $potfile = $ARGV[0];
+my $podir = dirname($potfile);
+
+my $potRef = Locale::PO->load_file_asarray($potfile);
+shift;
+
+my %translations;
+
+foreach my $lang (@LANGS) {
+ $translations{$lang} = Locale::PO->load_file_ashash("$podir/$lang.po");
+}
+
+# debugging code: (may be removed)
+#for my $po (@{$potRef}) {
+# my $msgid = $po->msgid;
+#
+# print "UNTRANSLATED: ", $msgid, "\n";
+# next if $msgid eq "\"\"";
+# foreach my $lang (@LANGS) {
+# my $lhref = $translations{$lang};
+# my $lpo = ${$lhref}{$msgid};
+# $lpo = $po if !defined $lpo;
+#
+# my $msg = $lpo->msgstr;
+# $msg = $lpo->msgid if !defined $msg;
+# $msg = $msgid if ($lang eq "en_US");
+# print $lang, ": ", $msg, "\n";
+# }
+# print "\n";
+#}
+#
+#exit;
+
+my $silent = 0;
+
+while (<>) {
+ my $line = $_;
+
+ if ($line =~ /^\/\/ START I18N/) {
+ print "// START I18N - automatically generated by pot2i18n.pl\n";
+ foreach my $po (@{$potRef}) {
+ my $msgid = $po->msgid;
+ next if $msgid eq "\"\"";
+
+ my $head = " { ";
+ my $endif = "";
+ my $versnum = 10200;
+
+ for my $lang (@LANGS) {
+ if ($VERS{$lang} ne $versnum) {
+ $versnum = $VERS{$lang};
+ print $endif;
+ print "#if VDRVERSNUM >= $versnum\n";
+ $endif = "#endif\n";
+ }
+
+ my $lhref = $translations{$lang};
+ my $lpo = ${$lhref}{$msgid};
+ $lpo = $po if !defined $lpo;
+
+ my $msgstr = $lpo->msgstr;
+ $msgstr = $lpo->msgid if !defined $msgstr;
+ $msgstr = $msgid if ($lang eq "en_US");
+
+ print "$head$msgstr,\n";
+ $head = " ";
+ }
+ print $endif;
+ print " },\n";
+ }
+ $silent = 1;
+ }
+
+ if (!$silent) { print $line; }
+
+ if ($line =~ /^\/\/ END I18N/) {
+ print "// END I18N - automatically generated by pot2i18n.pl\n";
+ $silent = 0;
+ }
+}