| : # -*- 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"; |
| } |