#!/usr/local/bin/perl
@ARGV == 2 || die "usage: missing-strings ";
($dir, $lang) = @ARGV;
opendir(DIR, $dir);
foreach $f ("", readdir(DIR)) {
local ($msg0, $msg1, $msg2, $msg3);
# Check module.info file
local %minfo;
if (&read_file("$dir/$f/module.info", \%minfo)) {
if (!$minfo{"desc_$lang"}) {
$msg0 .= "module.info: desc=$minfo{'desc'}\n";
}
}
elsif ($f) { next; }
# Check lang/ file
local (%en, @eno, %fr);
&read_file("$dir/$f/lang/en", \%en, \@eno);
&read_file("$dir/$f/lang/$lang", \%fr);
foreach $e (@eno) {
if (!$fr{$e}) {
$msg1 .= "lang/$lang: $e=$en{$e}\n";
}
}
# Check config.info file
local (%econfig, @eorder, %fconfig);
if (&read_file("$dir/$f/config.info", \%econfig, \@eorder)) {
foreach $e (@eorder) {
if (!$fconfig{$e}) {
$msg2 .= "config.info.$lang: $e=$econfig{$e}\n";
}
}
}
# Check help files
#opendir(HELP, "$dir/$f/help");
#foreach $h (readdir(HELP)) {
# }
#closedir(HELP);
if ($msg0 || $msg1 || $msg2 || $msg3) {
if ($f) {
print "In module $f\n";
}
else {
print "In Webmin globals\n";
}
print "---------------------------------------\n";
print "$msg0\n" if ($msg0);
print "$msg1\n" if ($msg1);
print "$msg2\n" if ($msg2);
print "$msg3\n" if ($msg3);
print "\n";
}
}
closedir(DIR);
# read_file(file, &assoc, [&order], [lowercase])
# Fill an associative array with name=value pairs from a file
sub read_file
{
open(ARFILE, $_[0]) || return 0;
while() {
s/\r|\n//g;
if (!/^#/ && /^([^=]*)=(.*)$/) {
$_[1]->{$_[3] ? lc($1) : $1} = $2;
push(@{$_[2]}, $1) if ($_[2]);
}
}
close(ARFILE);
return 1;
}