use strict;
use warnings;
-
+use Getopt::Std;
use Locale::PO;
use JSON;
use Encode;
# - we do not support plural. forms
# - no message content support
+my $options = {};
+
+getopts('t:o:v:', $options) ||
+ die "unable to parse options\n";
+
die "no files specified\n" if !scalar(@ARGV);
#my $filename = shift || die "no po file specified\n";
return $hval & 0x7fffffff;
}
-my $catalog;
+my $catalog = {};
foreach my $filename (@ARGV) {
my $href = Locale::PO->load_file_ashash($filename) ||
my $po = $href->{$k};
next if $po->fuzzy(); # skip fuzzy entries
my $ref = $po->reference();
+
+ # skip unused entries
+ next if !$ref;
+
+ # skip entries if t is defined (pve/pmg) and the string is
+ # not used there or in the widget toolkit
+ next if $options->{t} && $ref !~ m/($options->{t}|proxmox)\-/;
my $qmsgid = decode($charset, $po->msgid);
my $msgid = $po->dequote($qmsgid);
next if !length($msgid); # skip header
- #next if !length($msgstr); # skip untranslated entries
+ next if !length($msgstr); # skip untranslated entries
my $digest = fnv31a($msgid);
my $json = to_json($catalog, {canonical => 1, utf8 => 1});
-print <<__EOD
-PVE = { i18n_msgcat: $json }
+my $content = "// $options->{v}\n"; # write version to beginning
+
+my $outfile = $options->{o};
+
+$content .= "// Proxmox Message Catalog: $outfile\n" if $outfile;
+
+$content .= <<__EOD;
+__proxmox_i18n_msgcat__ = $json;
function fnv31a(text) {
var len = text.length;
function gettext(buf) {
var digest = fnv31a(buf);
- var data = PVE.i18n_msgcat[digest];
+ var data = __proxmox_i18n_msgcat__[digest];
if (!data) {
return buf;
}
return data[0] || buf;
}
-
__EOD
+if ($outfile) {
+ open(my $fh, '>', $outfile) ||
+ die "unable to open '$outfile' - $!\n";
+ print $fh $content;
+} else {
+ print $content;
+}