blob: 78842e919ec40398496d14e9dcea367c4382acfd [file] [log] [blame]
: # -*- perl -*-
eval 'exec perl -wS $0 ${1+"$@"}'
if 0;
#**************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#**************************************************************
# create java installer property files for all languages defined in jlf file
use Cwd;
use File::Copy;
if( $#ARGV < 2 )
{
print <<ENDHELP;
USAGE: $0 <separator> <jlf_file_path> <outputpath>
<separator>: separator, used on the platform (slash or backslash)
<jlf_file_path>: path, in which the jlf file(s) can be found
<outputpath>: path, in which the property files will be created
ENDHELP
exit;
}
$separator = $ARGV[0];
$inputpath = $ARGV[1];
$outputpath = $ARGV[2];
$inputpath =~ s/\Q$separator\E\s*$//;
$outputpath =~ s/\Q$separator\E\s*$//;
if ( ! -d $outputpath ) { mkdir $outputpath; }
print "Separator: $separator \n";
print "Input path: $inputpath \n";
print "Output path: $outputpath \n";
my $localdir = cwd();
my $all_template_files = read_directory($localdir, "properties");
my $all_jlf_files = read_directory($inputpath, "jlf");
my $defaultlanguage = "en-US";
my $missing_jlf_file = "setupfiles.jlf";
my $alllanguages = get_all_languages($all_jlf_files);
my @allnewpropertyfiles = ();
for ( my $i = 0; $i <= $#{$all_template_files}; $i++ )
{
my $template_file_name = ${$all_template_files}[$i];
my $complete_template_file_name = $localdir . $separator . $template_file_name;
my $jlf_file_name = get_jlf_file_name($template_file_name);
my $complete_jlf_file_name = $inputpath . $separator . $jlf_file_name;
print "Using template file: $complete_template_file_name\n";
my $jlf_file = "";
if ( ! ( $jlf_file_name eq $missing_jlf_file ))
{
print "Using translation file: $complete_jlf_file_name\n";
$jlf_file = read_file($complete_jlf_file_name);
}
for ( my $j = 0; $j <= $#{$alllanguages}; $j++ )
{
my $language = ${$alllanguages}[$j];
my $template_file = read_file($complete_template_file_name);
my $stringhash = create_string_hash($jlf_file, $language);
create_property_file($template_file, $stringhash);
my $filename = generate_filename($template_file_name, $language);
if ( $language eq $defaultlanguage )
{
# Creating language indenpendent english file
make_propertyfile_language_independent($template_file);
$filename = generate_filename($template_file_name, "");
save_file($outputpath, $filename, $template_file);
}
else
{
# Saving the non-english files
save_file($outputpath, $filename, $template_file);
}
}
}
exit;
sub main::read_directory
{
my ($dir, $ext) = @_;
my @content = ();
my $direntry;
opendir(DIR, $dir);
foreach $direntry (readdir (DIR))
{
next if $direntry eq ".";
next if $direntry eq "..";
next if ( ! ( $direntry =~ /\.\Q$ext\E\s*$/ ));
# my $completeentry = $dir . $separator . $direntry;
# push(@content, $completeentry);
push(@content, $direntry);
}
closedir(DIR);
return \@content;
}
sub main::read_file
{
my ($filename) = @_;
open( IN, "<$filename" ) || die "cannot open $filename";
my @content = <IN>;
close( IN );
return \@content;
}
sub main::get_jlf_file_name
{
my ($tempfilename) = @_;
my $jlffilename = "";
if ( $tempfilename =~ /^\s*(\w+)_template/ ) { $tempfilename = $1; }
$jlffilename = $tempfilename . "\.jlf";
return $jlffilename;
}
sub main::get_all_languages
{
my ($alljlffiles) = @_;
my @languages = ();
my $record = 0;
my $first_jlf_file_name = $inputpath . $separator . ${$alljlffiles}[0];
my $jlffile = read_file($first_jlf_file_name);
for ( my $i = 0; $i <= $#{$jlffile}; $i++ )
{
if (( ${$jlffile}[$i] =~ /^\s*\[.*]\s*$/ ) && ( $record )) { last; }
if (( ${$jlffile}[$i] =~ /^\s*\[.*]\s*$/ ) && ( $record == 0 )) { $record = 1; }
if (( $record ) && ( ${$jlffile}[$i] =~ /^\s*(.+?)\s*\=/ ))
{
$language = $1;
push(@languages, $language);
}
}
my $languagestring = "";
for ( my $i = 0; $i <= $#languages; $i++ ) { $languagestring = $languagestring . $languages[$i] . ","; }
$languagestring =~ s/,\s*$//;
print "Languages: $languagestring\n";
return \@languages;
}
sub main::create_string_hash
{
my ($jlffile, $language) = @_;
my %stringhash = ();
my $key = "";
my $value_defined = 0;
for ( my $i = 0; $i <= $#{$jlffile}; $i++ )
{
if ( ${$jlffile}[$i] =~ /^\s*\[(.*)\]\s*$/ )
{
$key = $1;
$value_defined = 0;
}
if (( ${$jlffile}[$i] =~ /^\s*\Q$defaultlanguage\E\s*=\s*\"(.*)\"\s*$/ ) && ( ! $value_defined ))
{
$value = $1; # defaulting to english
$stringhash{$key} = $value;
}
if (( ${$jlffile}[$i] =~ /^\s*\Q$language\E\s*=\s*\"(.*)\"\s*$/ ) && ( ! $value_defined ))
{
$value = $1;
$stringhash{$key} = $value;
$value_defined = 1;
}
}
# additional replacement for ${LANGUAGE}, not defined in jlf file
my $languagekey = "LANGUAGE";
$stringhash{$languagekey} = $language;
# print_hash(\%stringhash);
return \%stringhash;
}
sub main::print_hash
{
my ( $hashref ) = @_;
print "Hash contains:\n";
my $key;
foreach $key (keys %{$hashref} ) { print "Key: $key, Value: $hashref->{$key}\n"; }
}
sub main::create_property_file
{
my ($template_file, $stringhash) = @_;
for ( my $i = 0; $i <= $#{$template_file}; $i++ )
{
if ( ${$template_file}[$i] =~ /\$\{(\w+)\}/ )
{
my $key = $1;
if ( exists($stringhash->{$key}) )
{
my $value = $stringhash->{$key};
${$template_file}[$i] =~ s/\$\{\Q$key\E\}/$value/g;
}
else
{
print "Error: No value found for key: $key\n";
exit;
}
}
}
}
sub main::generate_filename
{
my ($template_file_name, $onelanguage) = @_;
my $filename = $template_file_name;
if ( $onelanguage )
{
$onelanguage =~ s/-/_/; # zh-TW -> zh_TW
$onelanguage = "_" . $onelanguage;
$filename =~ s/_template\./$onelanguage\./;
}
else
{
$filename =~ s/_template//;
}
return $filename;
}
sub make_propertyfile_language_independent
{
my ($property_file) = @_;
for ( my $i = 0; $i <= $#{$property_file}; $i++ )
{
# if ( ${$property_file}[$i] =~ /^\s*#/ ) # only comment lines
# {
${$property_file}[$i] =~ s/_\Q$defaultlanguage\E//;
# }
}
}
sub main::save_file
{
my ($outputpath, $filename, $filecontent) = @_;
$filename = $outputpath . $separator . $filename;
if ( open( OUT, ">$filename" ) )
{
print OUT @{$filecontent};
close( OUT);
}
push(@allnewpropertyfiles, $filename);
print "Created file: $filename\n";
}