Support blacklists/whitelists for --untranslated-values output
This commit is contained in:
parent
4aa3a003ab
commit
ca911e928e
1 changed files with 71 additions and 7 deletions
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use YAML::Syck qw(LoadFile);
|
use YAML::Syck qw(Load LoadFile);
|
||||||
use Test::Differences;
|
use Test::Differences;
|
||||||
use Pod::Usage ();
|
use Pod::Usage ();
|
||||||
use Getopt::Long ();
|
use Getopt::Long ();
|
||||||
|
@ -12,11 +12,17 @@ locale-diff - Compare two YAML files and print how their datastructures differ
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
diff en.yml is.yml
|
|
||||||
# --keys is the default
|
# --keys is the default
|
||||||
|
diff en.yml is.yml
|
||||||
diff --keys en.yml is.yml
|
diff --keys en.yml is.yml
|
||||||
|
|
||||||
# --untranslated-values compares prints keys whose values don't differ
|
# --untranslated-values compares prints keys whose values don't differ
|
||||||
diff --untranslated-values en.yml is.yml
|
diff --untranslated-values-all en.yml is.yml
|
||||||
|
|
||||||
|
# --untranslated-values-all compares prints keys whose values
|
||||||
|
# don't differ. Ignoring the blacklist which prunes things
|
||||||
|
# unlikley to be translated
|
||||||
|
diff --untranslated-values-all en.yml is.yml
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
@ -41,10 +47,16 @@ new entries from F<en.yml> to a local file.
|
||||||
=item --untranslated-values
|
=item --untranslated-values
|
||||||
|
|
||||||
Show keys whose values are either exactly the same between the two
|
Show keys whose values are either exactly the same between the two
|
||||||
files, or don't exist in the target file (the latter file specified).
|
files, or don't exist in the target file (the latter file
|
||||||
|
specified). The values are pruned according to global and language
|
||||||
|
specific blacklists found in the C<__DATA__> section of this script.
|
||||||
|
|
||||||
This helps to find untranslated values.
|
This helps to find untranslated values.
|
||||||
|
|
||||||
|
=item --untranslated-values-all
|
||||||
|
|
||||||
|
Like C<--untranslated-values> but ignores blacklists.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
@ -60,8 +72,12 @@ Getopt::Long::Parser->new(
|
||||||
'h|help' => \my $help,
|
'h|help' => \my $help,
|
||||||
'keys' => \my $keys,
|
'keys' => \my $keys,
|
||||||
'untranslated-values' => \my $untranslated_values,
|
'untranslated-values' => \my $untranslated_values,
|
||||||
|
'untranslated-values-all' => \my $untranslated_values_all,
|
||||||
) or help();
|
) or help();
|
||||||
|
|
||||||
|
# --keys is the default
|
||||||
|
$keys = 1 if not $untranslated_values_all and not $untranslated_values;
|
||||||
|
|
||||||
# On --help
|
# On --help
|
||||||
help() if $help;
|
help() if $help;
|
||||||
|
|
||||||
|
@ -77,14 +93,19 @@ my $from_parsed = { iterate($from_data->{basename($from)}) };
|
||||||
my $to_parsed = { iterate($to_data->{basename($to)}) };
|
my $to_parsed = { iterate($to_data->{basename($to)}) };
|
||||||
|
|
||||||
# Since this used to be the default, support that...
|
# Since this used to be the default, support that...
|
||||||
if ((not $untranslated_values and not $keys) or $keys)
|
if ($keys)
|
||||||
{
|
{
|
||||||
print_key_differences();
|
print_key_differences();
|
||||||
}
|
}
|
||||||
elsif ($untranslated_values)
|
elsif ($untranslated_values or $untranslated_values_all)
|
||||||
{
|
{
|
||||||
my @untranslated = untranslated_keys($from_parsed, $to_parsed);
|
my @untranslated = untranslated_keys($from_parsed, $to_parsed);
|
||||||
|
|
||||||
|
# Prune according to blacklist
|
||||||
|
if ($untranslated_values) {
|
||||||
|
@untranslated = prune_untranslated_with_blacklist(basename($to), @untranslated);
|
||||||
|
}
|
||||||
|
|
||||||
print $_, "\n" for @untranslated;
|
print $_, "\n" for @untranslated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,7 +124,33 @@ sub print_key_differences
|
||||||
sub untranslated_keys
|
sub untranslated_keys
|
||||||
{
|
{
|
||||||
my ($from_parsed, $to_parsed) = @_;
|
my ($from_parsed, $to_parsed) = @_;
|
||||||
sort grep { not exists $to_parsed->{$_} or $from_parsed->{$_} eq $to_parsed->{$_} } keys %$from_parsed;
|
grep { not exists $to_parsed->{$_} or $from_parsed->{$_} eq $to_parsed->{$_} } keys %$from_parsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub prune_untranslated_with_blacklist
|
||||||
|
{
|
||||||
|
my ($language, @keys) = @_;
|
||||||
|
my %keys;
|
||||||
|
@keys{@keys} = ();
|
||||||
|
|
||||||
|
my $end_yaml = Load(join '', <DATA>);
|
||||||
|
my $untranslated_values = $end_yaml->{untranslated_values};
|
||||||
|
my $default = $untranslated_values->{default};
|
||||||
|
my $this_language = $untranslated_values->{$language} || {};
|
||||||
|
|
||||||
|
my %bw_list = (%$default, %$this_language);
|
||||||
|
|
||||||
|
use feature ':5.10';
|
||||||
|
use Data::Dump 'dump';
|
||||||
|
say STDERR dump \%bw_list;
|
||||||
|
|
||||||
|
while (my ($key, $blacklisted) = each %bw_list)
|
||||||
|
{
|
||||||
|
# FIXME: Does syck actually support true/false booleans in yaml?
|
||||||
|
delete $keys{$key} if $blacklisted eq 'true'
|
||||||
|
}
|
||||||
|
|
||||||
|
sort keys %keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub iterate
|
sub iterate
|
||||||
|
@ -142,3 +189,20 @@ sub help
|
||||||
-exitval => $arg{ exitval } || 0,
|
-exitval => $arg{ exitval } || 0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__DATA__
|
||||||
|
untranslated_values:
|
||||||
|
|
||||||
|
# Default/Per language blacklist/whitelist for the
|
||||||
|
# --untranslated-values switch. "true" as a value indicates that the
|
||||||
|
# key is to be blacklisted, and "false" that it's to be
|
||||||
|
# whitelisted. "false" is only required to whitelist a key
|
||||||
|
# blacklisted by default on a per-language basis.
|
||||||
|
|
||||||
|
default:
|
||||||
|
html.dir: true
|
||||||
|
layouts.intro_3_bytemark: true
|
||||||
|
layouts.intro_3_ucl: true
|
||||||
|
de:
|
||||||
|
layouts.export: true
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue