Viewing file: check_translation.pl (3.4 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl # # This tool helps with the translation into other languages by verifying that # all text specified in translate(), etranslate() and etooltip() # within the application has a corresponding entry in the translation # data file. In short, this makes sure all text has a correspoding # translation. # # Usage: # check_translation.pl languagefile # ... or to check the most recently modified translation file # check_translation.pl # Example: # check_translation.pl ../translations/English-US.txt # # Note: this utility should be run from this directory (tools). # ###########################################################################
$trans_dir = "../translations";
$infile = $ARGV[0];
if ( $infile eq "" ) { opendir ( DIR, $trans_dir ) || die "error opening $trans_dir"; @files = grep ( /\.txt$/, readdir ( DIR ) ); closedir ( DIR ); $last_mtime = 0; foreach $f ( @files ) { ( $mtime ) = ( stat ( "../translations/$f" ) )[9]; if ( $mtime > $last_mtime ) { $last_mtime = $mtime; $infile = "../translations/$f"; } } }
if ( $infile ne "" && ! -f $infile && -f "$trans_dir/$infile" ) { $infile = "$trans_dir/$infile"; }
if ( $infile ne "" && ! -f $infile && -f "$trans_dir/$infile.txt" ) { $infile = "$trans_dir/$infile.txt"; }
# First get the list of .php and .inc files. opendir ( DIR, ".." ) || die "Error opening .."; @files = grep ( /\.php$/, readdir ( DIR ) ); closedir ( DIR );
opendir ( DIR, "../includes" ) || die "Error opening ../includes"; @incfiles = grep ( /\.php$/, readdir ( DIR ) ); closedir ( DIR ); foreach $f ( @incfiles ) { push ( @files, "includes/$f" ); } opendir ( DIR, "../includes/js" ) || die "Error opening ../includes/js"; @incfiles = grep ( /\.php$/, readdir ( DIR ) ); closedir ( DIR ); foreach $f ( @incfiles ) { push ( @files, "includes/js/$f" ); } push ( @files, "tools/send_reminders.php" );
foreach $f ( @files ) { $file = "../$f"; open ( F, $file ) || die "Error reading $file"; #print "Checking $f for text.\n"; while ( <F> ) { $data = $_; while ( $data =~ /(translate|tooltip)\s*\(\s*"/ ) { $data = $'; if ( $data =~ /"\s*\)/ ) { $text = $`; $text{$text} = 1; $data = $'; } } } close ( F ); }
#print "Found the following entries:\n"; #foreach $text ( sort { uc($a) cmp uc($b) } keys ( %text ) ) { # print "$text\n"; #}
# Now load the translation file if ( ! -f $infile ) { die "Usage: $0 translation-file\n"; } open ( F, $infile ) || die "Error opening $infile"; while ( <F> ) { chop; next if ( /^#/ ); if ( /\s*:/ ) { $abbrev = $`; $trans{$abbrev} = $'; } }
$notfound = 0; $total = 0; foreach $text ( sort { uc($a) cmp uc($b) } keys ( %text ) ) { if ( ! defined ( $trans{$text} ) ) { if ( ! $notfound ) { print "The following text did not have a translation in $infile:\n\n"; } print "$text\n"; $notfound++; } $total++; }
# Check for translations that are not used... $extra = 0; foreach $text ( sort { uc($a) cmp uc($b) } keys ( %trans ) ) { if ( ! defined ( $text{$text} ) ) { if ( ! $extra ) { print "\nThe following translation text is not needed in $infile:\n\n"; } print "$text\n"; $extra++; } }
if ( ! $notfound ) { print "All text was found in $infile. Good job :-)\n"; } else { printf "\n$notfound of $total translation(s) missing. (%1.1f%% complete)\n", ( 100 * ( $total - $notfound ) / $total ); }
exit 0;
|