mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-12 22:14:35 +00:00
Add option processing to pocheck.pl so that we can selectively check for certain problems, rather than having to sort through everything manually.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38265 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
c294f1f623
commit
89bb06a23e
162
po/pocheck.pl
162
po/pocheck.pl
@ -7,19 +7,43 @@
|
|||||||
#
|
#
|
||||||
# author: Michael Gerz, michael.gerz@teststep.org
|
# author: Michael Gerz, michael.gerz@teststep.org
|
||||||
#
|
#
|
||||||
# This script performs some consistency checks on po files:
|
|
||||||
#
|
|
||||||
# 1. Uniform translation of messages that are identical except
|
|
||||||
# for capitalization, shortcuts, and shortcut notation.
|
|
||||||
# 2. Usage of the following elements in both the original and
|
|
||||||
# the translated message (or no usage at all):
|
|
||||||
# shortcuts ("&" and "|..."), trailing space, trailing colon
|
|
||||||
#
|
|
||||||
# Invocation:
|
|
||||||
# pocheck.pl po_file po_file ...
|
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use Getopt::Std;
|
||||||
|
|
||||||
|
my $usage = <<EOT;
|
||||||
|
pocheck.pl [-acmpqst] po_file [po_file] ...
|
||||||
|
|
||||||
|
This script performs some consistency checks on po files. It will check
|
||||||
|
for everything listed under "Options" below, unless options are given, in
|
||||||
|
which case it checks only those requested.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-a: Check arguments, like %1\$s
|
||||||
|
-c: Check for colons at end
|
||||||
|
-m: Check for menu shortcuts
|
||||||
|
-p: Check for period at end
|
||||||
|
-q: Check Qt shortcuts
|
||||||
|
-s: Check for space at end
|
||||||
|
-t: Check for uniform translations
|
||||||
|
EOT
|
||||||
|
|
||||||
|
my %options;
|
||||||
|
getopts(":hacmpqst", \%options);
|
||||||
|
|
||||||
|
if (defined($options{h})) {
|
||||||
|
print $usage;
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $check_args = (!%options or defined($options{a}));
|
||||||
|
my $check_colons = (!%options or defined($options{c}));
|
||||||
|
my $check_spaces = (!%options or defined($options{m}));
|
||||||
|
my $check_periods = (!%options or defined($options{p}));
|
||||||
|
my $check_qt = (!%options or defined($options{q}));
|
||||||
|
my $check_menu = (!%options or defined($options{s}));
|
||||||
|
my $check_trans = (!%options or defined($options{t}));
|
||||||
|
|
||||||
my %trans;
|
my %trans;
|
||||||
|
|
||||||
@ -68,58 +92,72 @@ foreach my $pofilename ( @ARGV )
|
|||||||
next if ($msgid eq "" or $msgstr eq "");
|
next if ($msgid eq "" or $msgstr eq "");
|
||||||
|
|
||||||
# Check for matching %1$s, etc.
|
# Check for matching %1$s, etc.
|
||||||
my @argstrs = ( $msgid =~ m/%(\d)\$s/g );
|
if ($check_args) {
|
||||||
if (@argstrs) {
|
my @argstrs = ( $msgid =~ m/%(\d)\$s/g );
|
||||||
my $n = 0;
|
if (@argstrs) {
|
||||||
foreach my $arg (@argstrs) { $n = $arg if $arg > $n; }
|
my $n = 0;
|
||||||
if ($n <= 0) {
|
foreach my $arg (@argstrs) { $n = $arg if $arg > $n; }
|
||||||
print "Problem finding arguments in:\n $msgid!\n";
|
if ($n <= 0) {
|
||||||
$warn++;
|
print "Problem finding arguments in:\n $msgid!\n";
|
||||||
} else {
|
$warn++;
|
||||||
foreach my $i (1..$n) {
|
} else {
|
||||||
my $arg = "%$i\\\$s";
|
foreach my $i (1..$n) {
|
||||||
if ( $msgstr !~ m/$arg/ ) {
|
my $arg = "%$i\\\$s";
|
||||||
print "Missing argument `$arg'\n '$msgid' ==> '$msgstr'\n";
|
if ( $msgstr !~ m/$arg/ ) {
|
||||||
$warn++;
|
print "Missing argument `$arg'\n '$msgid' ==> '$msgstr'\n";
|
||||||
|
$warn++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check colon at the end of a message
|
if ($check_colons) {
|
||||||
if ( ( $msgid =~ m/: *(\|.*)?$/ ) != ( $msgstr =~ m/: *(\|.*)?$/ ) ) {
|
# Check colon at the end of a message
|
||||||
print( "Missing or unexpected colon:\n" );
|
if ( ( $msgid =~ m/: *(\|.*)?$/ ) != ( $msgstr =~ m/: *(\|.*)?$/ ) ) {
|
||||||
print( " '$msgid' => '$msgstr'\n" );
|
print( "Missing or unexpected colon:\n" );
|
||||||
$warn++;
|
print( " '$msgid' => '$msgstr'\n" );
|
||||||
|
$warn++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check period at the end of a message; uncomment code if you are paranoid
|
if ($check_periods) {
|
||||||
#if ( ( $msgid =~ m/\. *(\|.*)?$/ ) != ( $msgstr =~ m/\. *(\|.*)?$/ ) ) {
|
# Check period at the end of a message; uncomment code if you are paranoid
|
||||||
# print( "Missing or unexpected period:\n" );
|
if ( ( $msgid =~ m/\. *(\|.*)?$/ ) != ( $msgstr =~ m/\. *(\|.*)?$/ ) ) {
|
||||||
# print( " '$msgid' => '$msgstr'\n" );
|
print( "Missing or unexpected period:\n" );
|
||||||
# $warn++;
|
print( " '$msgid' => '$msgstr'\n" );
|
||||||
#}
|
$warn++;
|
||||||
|
}
|
||||||
# Check space at the end of a message
|
|
||||||
if ( ( $msgid =~ m/ *?(\|.*)?$/ ) != ( $msgstr =~ m/ *?(\|.*)?$/ ) ) {
|
|
||||||
print( "Missing or unexpected space:\n" );
|
|
||||||
print( " '$msgid' => '$msgstr'\n" );
|
|
||||||
$warn++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check for "&" shortcuts
|
if ($check_spaces) {
|
||||||
if ( ( $msgid =~ m/&[^ ]/ ) != ( $msgstr =~ m/&[^ ]/ ) ) {
|
# Check space at the end of a message
|
||||||
print( "Missing or unexpected Qt shortcut:\n" );
|
if ( ( $msgid =~ m/ *?(\|.*)?$/ ) != ( $msgstr =~ m/ *?(\|.*)?$/ ) ) {
|
||||||
print( " '$msgid' => '$msgstr'\n" );
|
print( "Missing or unexpected space:\n" );
|
||||||
$warn++;
|
print( " '$msgid' => '$msgstr'\n" );
|
||||||
|
$warn++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check for "|..." shortcuts
|
if ($check_qt) {
|
||||||
if ( ( $msgid =~ m/\|[^ ]/ ) != ( $msgstr =~ m/\|[^ ]/ ) ) {
|
# Check for "&" shortcuts
|
||||||
print( "Missing or unexpected menu shortcut:\n" );
|
if ( ( $msgid =~ m/&[^ ]/ ) != ( $msgstr =~ m/&[^ ]/ ) ) {
|
||||||
print( " '$msgid' => '$msgstr'\n" );
|
print( "Missing or unexpected Qt shortcut:\n" );
|
||||||
$warn++;
|
print( " '$msgid' => '$msgstr'\n" );
|
||||||
|
$warn++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($check_menu) {
|
||||||
|
# Check for "|..." shortcuts
|
||||||
|
if ( ( $msgid =~ m/\|[^ ]/ ) != ( $msgstr =~ m/\|[^ ]/ ) ) {
|
||||||
|
print( "Missing or unexpected menu shortcut:\n" );
|
||||||
|
print( " '$msgid' => '$msgstr'\n" );
|
||||||
|
$warn++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
next unless $check_trans;
|
||||||
|
|
||||||
# we now collect these translations in a hash.
|
# we now collect these translations in a hash.
|
||||||
# this will allow us to check below if we have translated
|
# this will allow us to check below if we have translated
|
||||||
@ -139,19 +177,21 @@ foreach my $pofilename ( @ARGV )
|
|||||||
$trans{$msgid_clean}{$msgstr_clean} = [ $msgid, $msgstr ];
|
$trans{$msgid_clean}{$msgstr_clean} = [ $msgid, $msgstr ];
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach $msgid ( keys %trans ) {
|
if ($check_trans) {
|
||||||
# so $ref is a reference to the inner hash.
|
foreach $msgid ( keys %trans ) {
|
||||||
my $ref = $trans{$msgid};
|
# so $ref is a reference to the inner hash.
|
||||||
# @msgstrkeys is an array of the keys of that inner hash.
|
my $ref = $trans{$msgid};
|
||||||
my @msgstrkeys = keys %$ref;
|
# @msgstrkeys is an array of the keys of that inner hash.
|
||||||
|
my @msgstrkeys = keys %$ref;
|
||||||
|
|
||||||
# do we have more than one such key?
|
# do we have more than one such key?
|
||||||
if ( $#msgstrkeys > 0 ) {
|
if ( $#msgstrkeys > 0 ) {
|
||||||
print( "Different translations for '$msgid':\n" );
|
print( "Different translations for '$msgid':\n" );
|
||||||
foreach $msgstr ( @msgstrkeys ) {
|
foreach $msgstr ( @msgstrkeys ) {
|
||||||
print( " '" . $trans{$msgid}{$msgstr}[0] . "' => '" . $trans{$msgid}{$msgstr}[1] . "'\n" );
|
print( " '" . $trans{$msgid}{$msgstr}[0] . "' => '" . $trans{$msgid}{$msgstr}[1] . "'\n" );
|
||||||
|
}
|
||||||
|
$warn++;
|
||||||
}
|
}
|
||||||
$warn++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user