#!/usr/bin/perl use strict; use JSON; use Getopt::Long; use Encode::Locale qw/decode_argv/; my ( $portal, $modify, $help, $delete, $reorder ); my $json = JSON->new->utf8->pretty()->canonical()->space_before(0)->space_after(0); decode_argv(); GetOptions( "portal|p" => \$portal, "modify|m" => \$modify, "delete|d" => \$delete, "reorder|r" => \$reorder, "help|h" => \$help, ); usage() if $help or ( !@ARGV and !$reorder ); my $key = shift @ARGV; my $enText = shift @ARGV; my $frText = shift(@ARGV) || $enText; # Check args usage() if $delete and $modify; if ($key) { usage() if $reorder; if ($delete) { usage() if $enText; } else { usage() unless $enText; } } else { usage() unless $reorder; } # Main my $wdir = 'lemonldap-ng-' . ( $portal ? "portal" : "manager" ) . '/site/htdocs/static/languages'; opendir D, $wdir or die "unable to open $wdir"; my @langs = grep { /\.json$/ } readdir D; closedir D; for my $lang (@langs) { my ( $file, $content ); { local $/ = undef; open $file, "$wdir/$lang" or die $!; binmode $file; $content = <$file>; close $file; } my $jsonObj = $json->decode($content); if ($key) { if ( $jsonObj->{$key} xor( $delete or $modify ) ) { print STDERR ( $jsonObj->{$key} ? "key already exists\n" : "key doesn't exit\n" ); usage(); } if ($delete) { delete $jsonObj->{$key}; } else { $jsonObj->{$key} = ( $lang eq 'fr.json' ? $frText : $enText ); } } $content = $json->encode($jsonObj); $content =~ s/\n\s+/\n/sg; open $file, '>', "$wdir/$lang" or die $!; binmode $file; print $file $content; close $file; } ## usage sub usage { print STDERR < key enText Options: --portal -p: add entry in portal translation instead of manager --modify -m: modify an existing entry --delete -d: delete an existing key --reorder -r: reorder files --help -h: display this EOT exit( $help ? 0 : 1 ); }