|
|
|
@ -5,7 +5,28 @@ use Cwd; |
|
|
|
|
use Data::Dumper; |
|
|
|
|
use File::Path; |
|
|
|
|
|
|
|
|
|
sub crawl{ |
|
|
|
|
sub crawlPrograms{ |
|
|
|
|
my( $dir, $ignore ) = @_; |
|
|
|
|
my @found = (); |
|
|
|
|
|
|
|
|
|
opendir( DIR, $dir ); |
|
|
|
|
my @files = readdir( DIR ); |
|
|
|
|
closedir( DIR ); |
|
|
|
|
|
|
|
|
|
foreach my $i ( @files ){ |
|
|
|
|
next if substr( $i, 0, 1 ) eq '.'; |
|
|
|
|
if( $i eq 'l10n' && !$ignore ){ |
|
|
|
|
push( @found, $dir ); |
|
|
|
|
} |
|
|
|
|
elsif( -d $dir.'/'.$i ){ |
|
|
|
|
push( @found, crawlPrograms( $dir.'/'.$i )); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return @found; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sub crawlFiles{ |
|
|
|
|
my( $dir ) = @_; |
|
|
|
|
my @found = (); |
|
|
|
|
|
|
|
|
@ -15,17 +36,31 @@ sub crawl{ |
|
|
|
|
|
|
|
|
|
foreach my $i ( @files ){ |
|
|
|
|
next if substr( $i, 0, 1 ) eq '.'; |
|
|
|
|
|
|
|
|
|
if( -d $dir.'/'.$i ){ |
|
|
|
|
push( @found, crawl( $dir.'/'.$i )); |
|
|
|
|
push( @found, crawlFiles( $dir.'/'.$i )); |
|
|
|
|
} |
|
|
|
|
elsif( $i eq 'xgettextfiles' ){ |
|
|
|
|
push( @found, $dir ); |
|
|
|
|
else{ |
|
|
|
|
push(@found,$dir.'/'.$i) if $i =~ /\.js$/ || $i =~ /\.php$/; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return @found; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sub readIgnorelist{ |
|
|
|
|
return () unless -e 'l10n/ignorelist'; |
|
|
|
|
my %ignore = (); |
|
|
|
|
open(IN,'l10n/ignorelist'); |
|
|
|
|
while(<IN>){ |
|
|
|
|
my $line = $_; |
|
|
|
|
chomp($line); |
|
|
|
|
$ignore{"./$line"}++; |
|
|
|
|
} |
|
|
|
|
close(IN); |
|
|
|
|
return %ignore; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
my $task = shift( @ARGV ); |
|
|
|
|
my $place = '..'; |
|
|
|
|
|
|
|
|
@ -36,7 +71,7 @@ my $whereami = cwd(); |
|
|
|
|
die( "Program must be executed in a l10n-folder called 'l10n'" ) unless $whereami =~ m/\/l10n$/; |
|
|
|
|
|
|
|
|
|
# Where are i18n-files? |
|
|
|
|
my @dirs = crawl( $place ); |
|
|
|
|
my @dirs = crawlPrograms( $place, 1 ); |
|
|
|
|
|
|
|
|
|
# Languages |
|
|
|
|
rmtree( 'templates' ); |
|
|
|
@ -51,28 +86,41 @@ foreach my $i ( @files ){ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if( $task eq 'read' ){ |
|
|
|
|
print "Mode: reading\n"; |
|
|
|
|
foreach my $dir ( @dirs ){ |
|
|
|
|
my @temp = split( /\//, $dir ); |
|
|
|
|
pop( @temp ); |
|
|
|
|
my $app = pop( @temp ); |
|
|
|
|
chdir( $dir ); |
|
|
|
|
my @totranslate = crawlFiles('.'); |
|
|
|
|
my %ignore = readIgnorelist(); |
|
|
|
|
my $output = "${whereami}/templates/$app.pot"; |
|
|
|
|
`xgettext --files-from=xgettextfiles --output="$output" --keyword=t`; |
|
|
|
|
print " Processing $app\n"; |
|
|
|
|
|
|
|
|
|
foreach my $file ( @totranslate ){ |
|
|
|
|
next if $ignore{$file}; |
|
|
|
|
my $keyword = ( $file =~ /\.js$/ ? 't:2' : 't'); |
|
|
|
|
my $language = ( $file =~ /\.js$/ ? 'C' : 'PHP'); |
|
|
|
|
my $joinexisting = ( -e $output ? '--join-existing' : ''); |
|
|
|
|
print " Reading $file\n"; |
|
|
|
|
`xgettext --output="$output" $joinexisting --keyword=$keyword --language=$language "$file"`; |
|
|
|
|
} |
|
|
|
|
chdir( $whereami ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
elsif( $task eq 'write' ){ |
|
|
|
|
print "Mode: write\n"; |
|
|
|
|
foreach my $dir ( @dirs ){ |
|
|
|
|
my @temp = split( /\//, $dir ); |
|
|
|
|
pop( @temp ); |
|
|
|
|
my $app = pop( @temp ); |
|
|
|
|
chdir( $dir ); |
|
|
|
|
chdir( $dir.'/l10n' ); |
|
|
|
|
print " Processing $app\n"; |
|
|
|
|
foreach my $language ( @languages ){ |
|
|
|
|
next if $language eq 'templates'; |
|
|
|
|
|
|
|
|
|
my $input = "${whereami}/$language/$app.po"; |
|
|
|
|
next unless -e $input; |
|
|
|
|
|
|
|
|
|
print " Language $language\n"; |
|
|
|
|
my $array = Locale::PO->load_file_asarray( $input ); |
|
|
|
|
# Create array |
|
|
|
|
my @strings = (); |
|
|
|
|