]>
git.proxmox.com Git - proxmox-i18n.git/blob - po2js.pl
127c5c4da33f305521607b4d8156cf7867536a82
11 # - we do not support plural. forms
12 # - no message content support
14 die "no files specified\n" if !scalar(@ARGV);
16 #my $filename = shift || die "no po file specified\n";
18 # like FNV32a, but we only return 31 bits (positive numbers)
22 my $hval = 0x811c9dc5;
24 foreach my $c (unpack('C*', $string)) {
32 $hval = $hval & 0xffffffff;
34 return $hval & 0x7fffffff;
39 foreach my $filename (@ARGV) {
40 my $href = Locale
::PO-
>load_file_ashash($filename) ||
41 die "unable to load '$filename'\n";
44 my $hpo = $href->{'""'} || die "no header";
45 my $header = $hpo->dequote($hpo->msgstr);
46 if ($header =~ m
|^Content-Type
:\s
+text
/plain
;\s
+charset
=(\S
+)$|im
) {
49 die "unable to get charset\n" if !$charset;
53 foreach my $k (keys %$href) {
55 next if $po->fuzzy(); # skip fuzzy entries
56 my $ref = $po->reference();
58 my $qmsgid = decode
($charset, $po->msgid);
59 my $msgid = $po->dequote($qmsgid);
61 my $qmsgstr = decode
($charset, $po->msgstr);
62 my $msgstr = $po->dequote($qmsgstr);
64 next if !length($msgid); # skip header
66 #next if !length($msgstr); # skip untranslated entries
68 my $digest = fnv31a
($msgid);
70 die "duplicate digest" if $catalog->{$digest};
72 $catalog->{$digest} = [ $msgstr ];
73 # later, we can add plural forms to the array
77 my $json = to_json
($catalog, {canonical
=> 1, utf8
=> 1});
80 PVE = { i18n_msgcat: $json }
82 function fnv31a(text) {
83 var len = text.length;
84 var hval = 0x811c9dc5;
85 for (var i = 0; i < len; i++) {
86 var c = text.charCodeAt(i);
88 hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);
94 function gettext(buf) {
95 var digest = fnv31a(buf);
96 var data = PVE.i18n_msgcat[digest];
100 return data[0] || buf;