[LON-CAPA-cvs] cvs: loncom /localize/localize checkuntranslated.pl

bisitz bisitz@source.lon-capa.org
Wed, 25 Nov 2009 13:36:56 -0000


bisitz		Wed Nov 25 13:36:56 2009 EDT

  Added files:                 
    /loncom/localize/localize	checkuntranslated.pl 
  Log:
  New tool to find untranslated phrases in LON-CAPA translation files.
  Call: perl checkuntranslated.pl translationfile.pm
  All phrases which have an identical key and value are listed.
  Phrases which should have the translation identical to the original English phrase are not filtered and are listed, too.
  
  

Index: loncom/localize/localize/checkuntranslated.pl
+++ loncom/localize/localize/checkuntranslated.pl
#!/usr/bin/perl
# The LearningOnline Network with CAPA
# $Id: checkuntranslated.pl,v 1.1 2009/11/25 13:36:56 bisitz Exp $

# 25.11.2009 Stefan Bisitz

use strict;
use warnings;

my $man = "
checkuntranslated - Checks if a translation file contains untranslated phrases. All untranslated phrases are listed.


SYNOPSIS:\tcheckuntranslated -h 
\t\tcheckuntranslated FILE

OPTIONS:
-h\t\tDisplay this help and exit.

";

my $filename; 
die "Use option -h for help.\n" unless exists $ARGV[0];
#analyze options
if ( $ARGV[0] =~ m/^\s*-h/ ) {
	print $man;
	exit();
} else {
	$filename = ($ARGV[0]);
	die "$filename is not a file.\n" unless -f $ARGV[0];
}


# ----------------------------------------------------------------
# Start Analysis
print "checkuntranslated is searching for untranslated phrases in $filename...\n";

# Read translation file row by row and try to find matching keys and values.
# It is assumed that all keys are followed by a value using the following syntax:
#    'key'
# => 'value',
#
# Optional comment rows and/or comments at the end of each row
# and white spaces are allowed and will be ignored.
#
# Compare key and value: identical? -> untranslated!
my $counter = 0;
my $line;
my $key = '';
my $mode = 'key';
open( FH, "<", $filename ) or die "$filename cannot be opened\n";
while ( !eof(FH) ) {
    $line = readline(FH);
    # Ignore comments
    next if $line=~/^\s*#/;
    # Key?
    if ($mode eq 'key') {
        # Search for key
        if ($line =~ m/^\s+["'](.*)["']/) {
            $key = $1;
            $mode = 'value';
        }
    # Value?
    } else { # $mode eq 'value'
        # Search for value
        if ($line =~ m/^\s*=>\s*["'](.*)["']/) {
            if ($key eq $1) { # key = value?
                print $key."\n";
                $counter++;
            }
            $mode = 'key';
        }
    }
}
close(FH);


# Display summary message
if ($counter == 0) {
    print "Be happy - No untranslated phrases found.\n";
} else {
    print "Found $counter untranslated phrases in $filename.\n";
    print "Please ignore all phrases which should have the same translation as the English phrase.\n";
}

# ----------------------------------------------------------------