From 8d4f8607dc1558ce73eb4c376bdbf78ddb65da83 Mon Sep 17 00:00:00 2001 From: Christian Wieninger Date: Sun, 11 Nov 2007 15:40:28 +0100 Subject: Initial commit --- buildutil/pot2i18n.pl | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100755 buildutil/pot2i18n.pl (limited to 'buildutil') 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; + } +} -- cgit v1.2.3