X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=po%2Fpocheck.pl;h=69bc405b2b947b1c1b9a59f5a850cebdee2b8d97;hb=4ec78e7098f3e89c817fd4d94dd347ccfd68123e;hp=c1bb63776687e850c06a7f3648e97bd529610a60;hpb=f791a6c4d1160ff053b30332ea9e87a86f0aaa92;p=lyx.git diff --git a/po/pocheck.pl b/po/pocheck.pl index c1bb637766..69bc405b2b 100755 --- a/po/pocheck.pl +++ b/po/pocheck.pl @@ -1,18 +1,18 @@ -#! /usr/bin/perl -w +#! /usr/bin/perl -w # file pocheck.pl # # This file is part of LyX, the document processor. # Licence details can be found in the file COPYING. # -# author: Michael Schmitt, michael.schmitt@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): +# 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: @@ -22,7 +22,7 @@ foreach $pofilename ( @ARGV ) { print "Processing po file '$pofilename'...\n"; - open( INPUT, "<$pofilename" ) + open( INPUT, "<$pofilename" ) || die "Cannot read po file '$pofilename'"; @pofile = ; close( INPUT ); @@ -31,9 +31,9 @@ foreach $pofilename ( @ARGV ) keys( %trans ) = 10000; $noOfLines = $#pofile; - + $warn = 0; - + $i = 0; while ($i <= $noOfLines) { if ( ( $msgid ) = ( $pofile[$i] =~ m/^msgid "(.*)"/ ) ) { @@ -45,7 +45,7 @@ foreach $pofilename ( @ARGV ) until ( ( $msgstr ) = ( $pofile[$i] =~ m/^msgstr "(.*)"/ ) ) { $i++; }; $i++; - while ( ( $i <= $noOfLines ) && + while ( ( $i <= $noOfLines ) && ( ( $more ) = $pofile[$i] =~ m/^"(.*)"/ ) ) { $msgstr = $msgstr . $more; $i++; @@ -55,59 +55,66 @@ foreach $pofilename ( @ARGV ) # Check colon at the end of a message if ( ( $msgid =~ m/: *(\|.*)?$/ ) != ( $msgstr =~ m/: *(\|.*)?$/ ) ) { - print( "Missing or redundant colon:\n" ); + print( "Missing or unexpected colon:\n" ); print( " '$msgid' => '$msgstr'\n" ); $warn++; } # Check period at the end of a message; uncomment code if you are paranoid #if ( ( $msgid =~ m/\. *(\|.*)?$/ ) != ( $msgstr =~ m/\. *(\|.*)?$/ ) ) { - # print( "Missing or redundant period:\n" ); + # print( "Missing or unexpected period:\n" ); # print( " '$msgid' => '$msgstr'\n" ); # $warn++; #} # Check space at the end of a message if ( ( $msgid =~ m/ *?(\|.*)?$/ ) != ( $msgstr =~ m/ *?(\|.*)?$/ ) ) { - print( "Missing or redundant space:\n" ); + print( "Missing or unexpected space:\n" ); print( " '$msgid' => '$msgstr'\n" ); $warn++; } # Check for "&" shortcuts if ( ( $msgid =~ m/&[^ ]/ ) != ( $msgstr =~ m/&[^ ]/ ) ) { - print( "Missing or redundant QT shortcut:\n" ); + print( "Missing or unexpected Qt shortcut:\n" ); print( " '$msgid' => '$msgstr'\n" ); $warn++; } - # Check for "|..." shortcut(s) + # Check for "|..." shortcuts if ( ( $msgid =~ m/\|[^ ]/ ) != ( $msgstr =~ m/\|[^ ]/ ) ) { - print( "Missing or redundant xforms shortcut:\n" ); + print( "Missing or unexpected menu shortcut:\n" ); print( " '$msgid' => '$msgstr'\n" ); $warn++; } - - $msgid_clean = lc($msgid); + + $msgid_clean = lc($msgid); $msgstr_clean = lc($msgstr); - $msgid_clean =~ s/|.*?$//; - $msgid_clean =~ s/&([^ ])/$1/; - $msgstr_clean =~ s/|.*?$//; - $msgstr_clean =~ s/&([^ ])/$1/; + $msgid_clean =~ s/(.*)\|.*?$/$1/; # strip menu shortcuts + $msgstr_clean =~ s/(.*)\|.*?$/$1/; + $msgid_clean =~ s/&([^ ])/$1/; # strip Qt shortcuts + $msgstr_clean =~ s/&([^ ])/$1/; - if ( defined( $trans{$msgid_clean} ) && $msgstr_clean ne $trans{$msgid_clean}{'msgstr_clean'} ) { - print( "Different translations for '$msgid_clean':\n" ); - print( " '$msgid' => '$msgstr'\n" ); - print( " '$trans{$msgid_clean}{'msgid'}' => '$trans{$msgid_clean}{'msgstr'}'\n" ); - $warn++; - } else { - $trans{$msgid_clean} = { 'msgid' => $msgid, 'msgstr' => $msgstr, 'msgstr_clean' => $msgstr_clean }; - } + $trans{$msgid_clean}{$msgstr_clean} = [ $msgid, $msgstr ]; } } else { $i++; } } + + foreach $msgid ( keys %trans ) { + $ref = $trans{$msgid}; + @msgstrkeys = keys %$ref; + + if ( $#msgstrkeys > 0 ) { + print( "Different translations for '$msgid':\n" ); + foreach $msgstr ( @msgstrkeys ) { + print( " '" . $trans{$msgid}{$msgstr}[0] . "' => '" . $trans{$msgid}{$msgstr}[1] . "'\n" ); + } + $warn++; + } + } + print( "\nTotal number of warnings: $warn\n\n" ); }