1 |
|
2 | use strict;
|
3 | use warnings;
|
4 |
|
5 | use JSON;
|
6 | use Hash::Merge::Simple qw(merge);
|
7 | use Getopt::Long;
|
8 |
|
9 | my $en_file = 'po/mypads.default.json';
|
10 | GetOptions ("file|f=s" => \$en_file);
|
11 |
|
12 | my $json = JSON->new->utf8->space_before(0)->space_after(1)->indent(1)->canonical(1);
|
13 |
|
14 | my $en;
|
15 | {
|
16 | open my $fh, '<', $en_file or die;
|
17 | local $/ = undef;
|
18 | $en = <$fh>;
|
19 | close $fh;
|
20 | }
|
21 |
|
22 | $en = $json->decode($en);
|
23 |
|
24 | my $new_json = {};
|
25 | my $old_json = '';
|
26 |
|
27 | while (defined(my $line = <STDIN>)) {
|
28 | $old_json .= $line;
|
29 | }
|
30 |
|
31 | $old_json = decode_json($old_json);
|
32 | for my $key (keys %{$old_json}) {
|
33 | my $value = $old_json->{$key};
|
34 |
|
35 | $value = $en->{$key} unless (defined($value) && $value ne '');
|
36 |
|
37 | my @keys = split(/\./, $key);
|
38 | while (scalar(@keys)) {
|
39 | $value = {
|
40 | pop(@keys) => $value
|
41 | };
|
42 | }
|
43 |
|
44 | $new_json = merge $new_json, $value;
|
45 | }
|
46 |
|
47 | print $json->encode($new_json);
|