# this version of locles processes not only all required .pl files
# but also all parse_html_templated files.
-use POSIX;
-use FileHandle;
use Data::Dumper;
-
+use FileHandle;
+use Getopt::Long;
use List::Util qw(first);
+use POSIX;
+use Pod::Usage;
$| = 1;
%referenced_html_files = ();
-# Arguments:
-# -v verbose
-# -n no custom files
-# -h extended checks on HTML templates
+my $opt_v = 0;
+my $opt_n = 0;
+my $opt_c = 0;
+
+sub parse_args {
+ my ($help, $man);
+
+ GetOptions('no-custom-files' => \$opt_n,
+ 'check-files' => \$opt_c,
+ 'verbose' => \$opt_v,
+ 'help' => \$help,
+ 'man' => \$man,);
+
+ if ($help) {
+ pod2usage(1);
+ exit 0;
+ }
-foreach $item (@ARGV) {
- $item =~ s/-//g;
- $arg{$item} = 1;
+ if ($man) {
+ pod2usage(-exitstatus => 0, -verbose => 2);
+ exit 0;
+ }
}
+parse_args();
+
opendir DIR, "$bindir" or die "$!";
@progfiles = grep { /\.pl$/ && !/(_|^\.)/ } readdir DIR;
seekdir DIR, 0;
closedir DIR;
# put customized files into @customfiles
-@customfiles = () if ($arg{n});
-if ($arg{n}) {
- @menufiles = ($menufile);
+if ($opt_n) {
+ @customfiles = ();
+ @menufiles = ($menufile);
} else {
opendir DIR, "$basedir" or die "$!";
@menufiles = grep { /.*?_$menufile$/ } readdir DIR;
sub handle_file {
my ($file, $dir) = @_;
- print "\n$file" if $arg{v};
+ print "\n$file" if $opt_v;
%locale = ();
%submit = ();
%subrt = ();
if ($file eq 'menunew.pl') {
foreach $item (@menufiles) {
&scanmenu("$basedir/$item");
- print "." if $arg{v};
+ print "." if $opt_v;
}
}
$trlanguage = $language[0];
chomp $trlanguage;
-if ($arg{h}) {
+if ($opt_c) {
search_unused_htmlfiles();
search_translated_htmlfiles_wo_master();
}
$per = sprintf("%.1f", ($count - $notext) / $count * 100);
print "\n$trlanguage - ${per}%";
-print " - $notext missing" if $notext;
+print " - $notext/$count missing" if $notext;
print "\n";
exit;
# &scanhtmlfile($newfile);
# &converthtmlfile($newfile);
$cached{$file}{scanh}{$newfile} = 1;
- print "." if $arg{v};
- } elsif ($arg{h}) {
+ print "." if $opt_v;
+ } elsif ($opt_c) {
print "W: missing HTML template: " . strip_base($newfile) . " (referenced from " . strip_base($file) . ")\n";
}
}
$plugins{needed}->{$plugin} = 1 if (first { $_ eq $plugin } qw(HTML LxERP JavaScript MultiColumnIterator));
}
+ while ($line =~ m/\[\% # Template-Start-Tag
+ [\-~#] # Whitespace-Unterdrückung
+ \s* # Optional beliebig viele Whitespace
+ [\'\"] # Anfang des zu übersetzenden Strings
+ (.*?) # Der zu übersetzende String
+ [\'\"] # Ende des zu übersetzenden Strings
+ \s*\|\s* # Pipe-Zeichen mit optionalen Whitespace davor und danach
+ \$T8 # Filteraufruf
+ .*? # Optionale Argumente für den Filter und Whitespaces
+ [\-~#] # Whitespace-Unterdrückung
+ \%\] # Template-Ende-Tag
+ /ix) {
+ print "Found filter >>>$1<<<\n";
+ $cached{$_[0]}{all}{$1} = 1;
+ $cached{$_[0]}{html}{$1} = 1;
+ $plugins{needed}->{T8} = 1;
+ substr $line, $-[1], $+[0] - $-[0], '';
+ }
+
while ("" ne $line) {
if (!$copying) {
if ($line =~ m|<translate>|i) {
substr($line, 0, $+[0]) = "";
$text =~ s/\s+/ /g;
- $copying = 0;
+ $copying = 0;
if ($issubmit) {
# $submit{$text} = 1;
$cached{$_[0]}{submit}{$text} = 1;
}
# 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}};
+ map { $alllocales{$_} = 1 } keys %{$cached{$_[0]}{all}};
+ map { $htmllocale{$_} = 1 } keys %{$cached{$_[0]}{html}};
+ map { $submit{$_} = 1 } keys %{$cached{$_[0]}{submit}};
}
sub converthtmlfile {
return $s;
}
+
+__END__
+
+=head1 NAME
+
+locales.pl - Collect strings for translation in Lx-Office
+
+=head1 SYNOPSIS
+
+locales.pl [options]
+
+ Options:
+ -n, --no-custom-files Do not process files whose name contains "_"
+ -c, --check-files Run extended checks on HTML files
+ -v, --verbose Be more verbose
+ -h, --help Show this help
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<-n>, B<--no-custom-files>
+
+Do not process files whose name contains "_", e.g. "custom_io.pl".
+
+=item B<-c>, B<--check-files>
+
+Run extended checks on the usage of templates. This can be used to
+discover HTML templates that are never used as well as the usage of
+non-existing HTML templates.
+
+=item B<-v>, B<--verbose>
+
+Be more verbose.
+
+=back
+
+=head1 DESCRIPTION
+
+This script collects strings from Perl files, the menu.ini file and
+HTML templates and puts them into the file "all" for translation. It
+also distributes those translations back to the individual files.
+
+=cut