Revision 2ea67805
Von Moritz Bunkus vor mehr als 18 Jahren hinzugefügt
locale/de/locales.pl | ||
---|---|---|
#!/usr/bin/perl
|
||
|
||
# -n do not include custom_ scripts
|
||
# -v verbose mode, shows progress stuff
|
||
|
||
# this version of locles processes not only all required .pl files
|
||
# but also all parse_html_templated files.
|
||
... | ... | |
use FileHandle;
|
||
use Data::Dumper;
|
||
|
||
$| = 1;
|
||
|
||
$basedir = "../..";
|
||
$bindir = "$basedir/bin/mozilla";
|
||
$menufile = "menu.ini";
|
||
$submitsearch = qr/type\s*=\s*["']?submit/i;
|
||
$submitsearch = qr/type\s*=\s*[\"\']?submit/i;
|
||
|
||
foreach $item (@ARGV) {
|
||
$item =~ s/-//g;
|
||
... | ... | |
}
|
||
|
||
opendir DIR, "$bindir" or die "$!";
|
||
@progfiles = grep { /\.pl$/ && !/(_|^\.)/ } readdir DIR;
|
||
@progfiles = grep { /\.pl/; !/(_|^\.)/ } readdir DIR;
|
||
seekdir DIR, 0;
|
||
@customfiles = grep /_/, readdir DIR;
|
||
closedir DIR;
|
||
... | ... | |
|
||
foreach $file (@progfiles) {
|
||
|
||
print "\n$file" if $arg{v};
|
||
%locale = ();
|
||
%submit = ();
|
||
%subrt = ();
|
||
... | ... | |
if ($file eq 'menunew.pl') {
|
||
foreach $item (@menufiles) {
|
||
&scanmenu("$basedir/$item");
|
||
print "." if $arg{v};
|
||
}
|
||
}
|
||
|
||
... | ... | |
|;
|
||
|
||
close FH;
|
||
}
|
||
|
||
foreach $file (@htmltemplates) {
|
||
converthtmlfile($file);
|
||
}
|
||
|
||
#foreach $file (@htmltemplates) {
|
||
# converthtmlfile($file);
|
||
#}
|
||
|
||
# now print out all
|
||
|
||
open FH, ">all" or die "$! : all";
|
||
... | ... | |
chomp $trlanguage;
|
||
|
||
$per = sprintf("%.1f", ($count - $notext) / $count * 100);
|
||
print "\n$trlanguage - ${per}%\n";
|
||
print "\n$trlanguage - ${per}%";
|
||
print " - $notext missing" if $notext;
|
||
print "\n";
|
||
|
||
exit;
|
||
|
||
... | ... | |
|
||
sub scanfile {
|
||
my $file = shift;
|
||
my $dont_include_subs = shift;
|
||
my $scanned_files = shift;
|
||
|
||
return unless (-f "$file");
|
||
$scanned_files = {} unless ($scanned_files);
|
||
return if ($scanned_files->{$file});
|
||
$scanned_files->{$file} = 1;
|
||
|
||
my $fh = new FileHandle;
|
||
open $fh, "$file" or die "$! : $file";
|
||
if (!defined $cached{$file}) {
|
||
|
||
my ($is_submit, $line_no, $sub_line_no) = (0, 0, 0);
|
||
return unless (-f "$file");
|
||
|
||
while (<$fh>) {
|
||
$line_no++;
|
||
my $fh = new FileHandle;
|
||
open $fh, "$file" or die "$! : $file";
|
||
|
||
# is this another file
|
||
if (/require\s+\W.*\.pl/) {
|
||
my $newfile = $&;
|
||
$newfile =~ s/require\s+\W//;
|
||
$newfile =~ s/\$form->{path}\///;
|
||
&scanfile("$bindir/$newfile");
|
||
}
|
||
my ($is_submit, $line_no, $sub_line_no) = (0, 0, 0);
|
||
|
||
while (<$fh>) {
|
||
$line_no++;
|
||
|
||
# is this a template call?
|
||
if (/parse_html_template\s*\(\s*["']([\w\/]+)/) {
|
||
my $newfile = "$basedir/templates/webpages/$1_master.html";
|
||
if (-f $newfile) {
|
||
&scanhtmlfile($newfile);
|
||
&converthtmlfile($newfile);
|
||
# is this another file
|
||
if (/require\s+\W.*\.pl/) {
|
||
my $newfile = $&;
|
||
$newfile =~ s/require\s+\W//;
|
||
$newfile =~ s/\$form->{path}\///;
|
||
# &scanfile("$bindir/$newfile", 0, $scanned_files);
|
||
$cached{$file}{scan}{"$bindir/$newfile"} = 1;
|
||
} elsif (/use\s+SL::(.*?);/) {
|
||
# &scanfile("../../SL/${1}.pm", 1, $scanned_files);
|
||
$cached{$file}{scannosubs}{"../../SL/${1}.pm"} = 1;
|
||
}
|
||
}
|
||
|
||
# is this a sub ?
|
||
if (/^sub /) {
|
||
($null, $subrt) = split / +/;
|
||
$subrt{$subrt} = 1;
|
||
next;
|
||
}
|
||
# is this a template call?
|
||
if (/parse_html_template\s*\(\s*[\"\']([\w\/]+)/) {
|
||
my $newfile = "$basedir/templates/webpages/$1_master.html";
|
||
if (-f $newfile) {
|
||
# &scanhtmlfile($newfile);
|
||
# &converthtmlfile($newfile);
|
||
$cached{$file}{scanh}{$newfile} = 1;
|
||
print "." if $arg{v};
|
||
}
|
||
}
|
||
|
||
my $rc = 1;
|
||
# is this a sub ?
|
||
if (/^sub /) {
|
||
next if ($dont_include_subs);
|
||
($null, $subrt) = split / +/;
|
||
# $subrt{$subrt} = 1;
|
||
$cached{$file}{subr}{$subrt} = 1;
|
||
next;
|
||
}
|
||
|
||
my $rc = 1;
|
||
|
||
while ($rc) {
|
||
if (/Locale/) {
|
||
unless (/^use /) {
|
||
my ($null, $country) = split /,/;
|
||
$country =~ s/^ +[\"\']//;
|
||
$country =~ s/[\"\'].*//;
|
||
while ($rc) {
|
||
if (/Locale/) {
|
||
unless (/^use /) {
|
||
my ($null, $country) = split /,/;
|
||
$country =~ s/^ +[\"\']//;
|
||
$country =~ s/[\"\'].*//;
|
||
}
|
||
}
|
||
}
|
||
|
||
my $postmatch = "";
|
||
my $postmatch = "";
|
||
|
||
# is it a submit button before $locale->
|
||
if (/$submitsearch/) {
|
||
$postmatch = $';
|
||
if ($` !~ /\$locale->text/) {
|
||
$is_submit = 1;
|
||
$sub_line_no = $line_no;
|
||
# is it a submit button before $locale->
|
||
if (/$submitsearch/) {
|
||
$postmatch = "$'";
|
||
if ($` !~ /locale->text/) {
|
||
$is_submit = 1;
|
||
$sub_line_no = $line_no;
|
||
}
|
||
}
|
||
}
|
||
|
||
my ($found) = /\$locale->text.*?\(/;
|
||
my $postmatch = $';
|
||
my ($found) = /locale->text.*?\(/;
|
||
my $postmatch = "$'";
|
||
|
||
if ($found) {
|
||
my $string;
|
||
($string, $_) = extract_text_between_parenthesis($fh, $postmatch);
|
||
$postmatch = $_;
|
||
if ($found) {
|
||
my $string;
|
||
($string, $_) = extract_text_between_parenthesis($fh, $postmatch);
|
||
$postmatch = $_;
|
||
|
||
# if there is no $ in the string record it
|
||
unless (($string =~ /\$\D.*/) || ("" eq $string)) {
|
||
# if there is no $ in the string record it
|
||
unless (($string =~ /\$\D.*/) || ("" eq $string)) {
|
||
|
||
# this guarantees one instance of string
|
||
$locale{$string} = 1;
|
||
# this guarantees one instance of string
|
||
# $locale{$string} = 1;
|
||
$cached{$file}{locale}{$string} = 1;
|
||
|
||
# this one is for all the locales
|
||
$alllocales{$string} = 1;
|
||
# this one is for all the locales
|
||
# $alllocales{$string} = 1;
|
||
$cached{$file}{all}{$string} = 1;
|
||
|
||
# is it a submit button before $locale->
|
||
if ($is_submit) {
|
||
$submit{$string} = 1;
|
||
# is it a submit button before $locale->
|
||
if ($is_submit) {
|
||
# $submit{$string} = 1;
|
||
$cached{$file}{submit}{$string} = 1;
|
||
}
|
||
}
|
||
} elsif ($postmatch =~ />/) {
|
||
$is_submit = 0;
|
||
}
|
||
} elsif ($postmatch =~ />/) {
|
||
$is_submit = 0;
|
||
}
|
||
|
||
# exit loop if there are no more locales on this line
|
||
($rc) = ($postmatch =~ /\$locale->text/);
|
||
# exit loop if there are no more locales on this line
|
||
($rc) = ($postmatch =~ /locale->text/);
|
||
|
||
# strip text
|
||
s/^.*?\$locale->text.*?\)//;
|
||
|
||
if ( ($postmatch =~ />/)
|
||
|| (!$found && ($sub_line_no != $line_no) && />/)) {
|
||
$is_submit = 0;
|
||
if ( ($postmatch =~ />/)
|
||
|| (!$found && ($sub_line_no != $line_no) && />/)) {
|
||
$is_submit = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
close($fh);
|
||
close($fh);
|
||
|
||
}
|
||
|
||
map { $alllocales{$_} = 1 } keys %{$cached{$file}{all}};
|
||
map { $locale{$_} = 1 } keys %{$cached{$file}{locale}};
|
||
map { $submit{$_} = 1 } keys %{$cached{$file}{submit}};
|
||
map { $subrt{$_} = 1 } keys %{$cached{$file}{subr}};
|
||
map { &scanfile($_, 0, $scanned_files) } keys %{$cached{$file}{scan}};
|
||
map { &scanfile($_, 1, $scanned_files) } keys %{$cached{$file}{scannosubs}};
|
||
map { &scanhtmlfile($_) } keys %{$cached{$file}{scanh}};
|
||
}
|
||
|
||
sub scanmenu {
|
||
... | ... | |
|
||
sub scanhtmlfile {
|
||
local *IN;
|
||
|
||
open(IN, $_[0]) || die $_[0];
|
||
|
||
my $copying = 0;
|
||
my $issubmit = 0;
|
||
my $text = "";
|
||
while (my $line = <IN>) {
|
||
chomp($line);
|
||
|
||
while ("" ne $line) {
|
||
if (!$copying) {
|
||
if ($line =~ m|<translate>|i) {
|
||
my $eom = $+[0];
|
||
if ($` =~ /$submitsearch/) {
|
||
$issubmit = 1
|
||
|
||
if (!defined $cached{$_[0]}) {
|
||
|
||
open(IN, $_[0]) || die $_[0];
|
||
|
||
my $copying = 0;
|
||
my $issubmit = 0;
|
||
my $text = "";
|
||
while (my $line = <IN>) {
|
||
chomp($line);
|
||
|
||
while ("" ne $line) {
|
||
if (!$copying) {
|
||
if ($line =~ m|<translate>|i) {
|
||
my $eom = $+[0];
|
||
if ($` =~ /$submitsearch/) {
|
||
$issubmit = 1
|
||
}
|
||
substr($line, 0, $eom) = "";
|
||
$copying = 1;
|
||
} else {
|
||
$line = "";
|
||
}
|
||
substr($line, 0, $eom) = "";
|
||
$copying = 1;
|
||
} else {
|
||
$line = "";
|
||
}
|
||
|
||
} else {
|
||
if ($line =~ m|</translate>|i) {
|
||
$text .= $`;
|
||
substr($line, 0, $+[0]) = "";
|
||
|
||
$copying = 0;
|
||
if ($issubmit) {
|
||
$submit{$text} = 1;
|
||
$issubmit = 0;
|
||
}
|
||
$alllocales{$text} = 1;
|
||
$htmllocale{$text} = 1;
|
||
$text = "";
|
||
|
||
} else {
|
||
$text .= $line;
|
||
$line = "";
|
||
if ($line =~ m|</translate>|i) {
|
||
$text .= $`;
|
||
substr($line, 0, $+[0]) = "";
|
||
|
||
$copying = 0;
|
||
if ($issubmit) {
|
||
# $submit{$text} = 1;
|
||
$cached{$_[0]}{submit}{$text} = 1;
|
||
$issubmit = 0;
|
||
}
|
||
# $alllocales{$text} = 1;
|
||
$cached{$_[0]}{all}{$text} = 1;
|
||
# $htmllocale{$text} = 1;
|
||
$cached{$_[0]}{html}{$text} = 1;
|
||
$text = "";
|
||
|
||
} else {
|
||
$text .= $line;
|
||
$line = "";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
close(IN);
|
||
&converthtmlfile($_[0]);
|
||
}
|
||
|
||
close(IN);
|
||
# copy back into global arrays
|
||
map { $alllocales{$_} = 1 } keys %{$cached{$_[0]}{all}};
|
||
map { $htmllocales{$_} = 1 } keys %{$cached{$_[0]}{html}};
|
||
map { $submit{$_} = 1 } keys %{$cached{$_[0]}{submit}};
|
||
}
|
||
|
||
sub converthtmlfile {
|
||
... | ... | |
$copying = 0;
|
||
$alllocales{$text} = 1;
|
||
$htmllocale{$text} = 1;
|
||
print(OUT $self{"texts"}{$text});
|
||
print(OUT $self{"texts"}{$text} || $text);
|
||
print(OUT "\n") if ("" eq $line);
|
||
$text = "";
|
||
|
Auch abrufbar als: Unified diff
Auch die Module in SL/ auf Vorkommen von $main::locale->text() scannen, aber die subs ignorieren. Diese Version parst jede Datei die mit scanfile und scanhtmlfile aufgerufen wird nur einmal und cached die Ergebnisse. Wenn Uebersetzung nicht vorhanden, dann originaltext verwenden.