#!/usr/local/bin/perl

@ARGV == 2 || die "usage: missing-strings <webmin-directory> <language>";
($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(<ARFILE>) {
	s/\r|\n//g;
        if (!/^#/ && /^([^=]*)=(.*)$/) {
		$_[1]->{$_[3] ? lc($1) : $1} = $2;
		push(@{$_[2]}, $1) if ($_[2]);
        	}
        }
close(ARFILE);
return 1;
}


