1cdf0e10cSrcweir: # -*- perl -*- 2cdf0e10cSrcweireval 'exec perl -wS $0 ${1+"$@"}' 3cdf0e10cSrcweir if 0; 4*7e90fac2SAndrew Rist#************************************************************** 5*7e90fac2SAndrew Rist# 6*7e90fac2SAndrew Rist# Licensed to the Apache Software Foundation (ASF) under one 7*7e90fac2SAndrew Rist# or more contributor license agreements. See the NOTICE file 8*7e90fac2SAndrew Rist# distributed with this work for additional information 9*7e90fac2SAndrew Rist# regarding copyright ownership. The ASF licenses this file 10*7e90fac2SAndrew Rist# to you under the Apache License, Version 2.0 (the 11*7e90fac2SAndrew Rist# "License"); you may not use this file except in compliance 12*7e90fac2SAndrew Rist# with the License. You may obtain a copy of the License at 13*7e90fac2SAndrew Rist# 14*7e90fac2SAndrew Rist# http://www.apache.org/licenses/LICENSE-2.0 15*7e90fac2SAndrew Rist# 16*7e90fac2SAndrew Rist# Unless required by applicable law or agreed to in writing, 17*7e90fac2SAndrew Rist# software distributed under the License is distributed on an 18*7e90fac2SAndrew Rist# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19*7e90fac2SAndrew Rist# KIND, either express or implied. See the License for the 20*7e90fac2SAndrew Rist# specific language governing permissions and limitations 21*7e90fac2SAndrew Rist# under the License. 22*7e90fac2SAndrew Rist# 23*7e90fac2SAndrew Rist#************************************************************** 24*7e90fac2SAndrew Rist 25*7e90fac2SAndrew Rist 26cdf0e10cSrcweir 27cdf0e10cSrcweir# create java installer property files for all languages defined in jlf file 28cdf0e10cSrcweir 29cdf0e10cSrcweiruse Cwd; 30cdf0e10cSrcweiruse File::Copy; 31cdf0e10cSrcweir 32cdf0e10cSrcweirif( $#ARGV < 2 ) 33cdf0e10cSrcweir { 34cdf0e10cSrcweir print <<ENDHELP; 35cdf0e10cSrcweirUSAGE: $0 <separator> <jlf_file_path> <outputpath> 36cdf0e10cSrcweir <separator>: separator, used on the platform (slash or backslash) 37cdf0e10cSrcweir <jlf_file_path>: path, in which the jlf file(s) can be found 38cdf0e10cSrcweir <outputpath>: path, in which the property files will be created 39cdf0e10cSrcweirENDHELP 40cdf0e10cSrcweir exit; 41cdf0e10cSrcweir } 42cdf0e10cSrcweir 43cdf0e10cSrcweir$separator = $ARGV[0]; 44cdf0e10cSrcweir$inputpath = $ARGV[1]; 45cdf0e10cSrcweir$outputpath = $ARGV[2]; 46cdf0e10cSrcweir 47cdf0e10cSrcweir$inputpath =~ s/\Q$separator\E\s*$//; 48cdf0e10cSrcweir$outputpath =~ s/\Q$separator\E\s*$//; 49cdf0e10cSrcweir 50cdf0e10cSrcweirif ( ! -d $outputpath ) { mkdir $outputpath; } 51cdf0e10cSrcweir 52cdf0e10cSrcweirprint "Separator: $separator \n"; 53cdf0e10cSrcweirprint "Input path: $inputpath \n"; 54cdf0e10cSrcweirprint "Output path: $outputpath \n"; 55cdf0e10cSrcweir 56cdf0e10cSrcweirmy $localdir = cwd(); 57cdf0e10cSrcweirmy $all_template_files = read_directory($localdir, "properties"); 58cdf0e10cSrcweirmy $all_jlf_files = read_directory($inputpath, "jlf"); 59cdf0e10cSrcweirmy $defaultlanguage = "en-US"; 60cdf0e10cSrcweirmy $missing_jlf_file = "setupfiles.jlf"; 61cdf0e10cSrcweirmy $alllanguages = get_all_languages($all_jlf_files); 62cdf0e10cSrcweirmy @allnewpropertyfiles = (); 63cdf0e10cSrcweir 64cdf0e10cSrcweirfor ( my $i = 0; $i <= $#{$all_template_files}; $i++ ) 65cdf0e10cSrcweir{ 66cdf0e10cSrcweir my $template_file_name = ${$all_template_files}[$i]; 67cdf0e10cSrcweir my $complete_template_file_name = $localdir . $separator . $template_file_name; 68cdf0e10cSrcweir my $jlf_file_name = get_jlf_file_name($template_file_name); 69cdf0e10cSrcweir my $complete_jlf_file_name = $inputpath . $separator . $jlf_file_name; 70cdf0e10cSrcweir print "Using template file: $complete_template_file_name\n"; 71cdf0e10cSrcweir my $jlf_file = ""; 72cdf0e10cSrcweir if ( ! ( $jlf_file_name eq $missing_jlf_file )) 73cdf0e10cSrcweir { 74cdf0e10cSrcweir print "Using translation file: $complete_jlf_file_name\n"; 75cdf0e10cSrcweir $jlf_file = read_file($complete_jlf_file_name); 76cdf0e10cSrcweir } 77cdf0e10cSrcweir 78cdf0e10cSrcweir for ( my $j = 0; $j <= $#{$alllanguages}; $j++ ) 79cdf0e10cSrcweir { 80cdf0e10cSrcweir my $language = ${$alllanguages}[$j]; 81cdf0e10cSrcweir my $template_file = read_file($complete_template_file_name); 82cdf0e10cSrcweir my $stringhash = create_string_hash($jlf_file, $language); 83cdf0e10cSrcweir create_property_file($template_file, $stringhash); 84cdf0e10cSrcweir my $filename = generate_filename($template_file_name, $language); 85cdf0e10cSrcweir 86cdf0e10cSrcweir if ( $language eq $defaultlanguage ) 87cdf0e10cSrcweir { 88cdf0e10cSrcweir # Creating language indenpendent english file 89cdf0e10cSrcweir make_propertyfile_language_independent($template_file); 90cdf0e10cSrcweir $filename = generate_filename($template_file_name, ""); 91cdf0e10cSrcweir save_file($outputpath, $filename, $template_file); 92cdf0e10cSrcweir } 93cdf0e10cSrcweir else 94cdf0e10cSrcweir { 95cdf0e10cSrcweir # Saving the non-english files 96cdf0e10cSrcweir save_file($outputpath, $filename, $template_file); 97cdf0e10cSrcweir } 98cdf0e10cSrcweir } 99cdf0e10cSrcweir} 100cdf0e10cSrcweir 101cdf0e10cSrcweirexit; 102cdf0e10cSrcweir 103cdf0e10cSrcweirsub main::read_directory 104cdf0e10cSrcweir{ 105cdf0e10cSrcweir my ($dir, $ext) = @_; 106cdf0e10cSrcweir 107cdf0e10cSrcweir my @content = (); 108cdf0e10cSrcweir my $direntry; 109cdf0e10cSrcweir opendir(DIR, $dir); 110cdf0e10cSrcweir 111cdf0e10cSrcweir foreach $direntry (readdir (DIR)) 112cdf0e10cSrcweir { 113cdf0e10cSrcweir next if $direntry eq "."; 114cdf0e10cSrcweir next if $direntry eq ".."; 115cdf0e10cSrcweir next if ( ! ( $direntry =~ /\.\Q$ext\E\s*$/ )); 116cdf0e10cSrcweir 117cdf0e10cSrcweir # my $completeentry = $dir . $separator . $direntry; 118cdf0e10cSrcweir # push(@content, $completeentry); 119cdf0e10cSrcweir push(@content, $direntry); 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir closedir(DIR); 123cdf0e10cSrcweir return \@content; 124cdf0e10cSrcweir} 125cdf0e10cSrcweir 126cdf0e10cSrcweirsub main::read_file 127cdf0e10cSrcweir{ 128cdf0e10cSrcweir my ($filename) = @_; 129cdf0e10cSrcweir 130cdf0e10cSrcweir open( IN, "<$filename" ) || die "cannot open $filename"; 131cdf0e10cSrcweir my @content = <IN>; 132cdf0e10cSrcweir close( IN ); 133cdf0e10cSrcweir 134cdf0e10cSrcweir return \@content; 135cdf0e10cSrcweir} 136cdf0e10cSrcweir 137cdf0e10cSrcweirsub main::get_jlf_file_name 138cdf0e10cSrcweir{ 139cdf0e10cSrcweir my ($tempfilename) = @_; 140cdf0e10cSrcweir 141cdf0e10cSrcweir my $jlffilename = ""; 142cdf0e10cSrcweir 143cdf0e10cSrcweir if ( $tempfilename =~ /^\s*(\w+)_template/ ) { $tempfilename = $1; } 144cdf0e10cSrcweir $jlffilename = $tempfilename . "\.jlf"; 145cdf0e10cSrcweir 146cdf0e10cSrcweir return $jlffilename; 147cdf0e10cSrcweir} 148cdf0e10cSrcweir 149cdf0e10cSrcweirsub main::get_all_languages 150cdf0e10cSrcweir{ 151cdf0e10cSrcweir my ($alljlffiles) = @_; 152cdf0e10cSrcweir 153cdf0e10cSrcweir my @languages = (); 154cdf0e10cSrcweir my $record = 0; 155cdf0e10cSrcweir 156cdf0e10cSrcweir my $first_jlf_file_name = $inputpath . $separator . ${$alljlffiles}[0]; 157cdf0e10cSrcweir my $jlffile = read_file($first_jlf_file_name); 158cdf0e10cSrcweir 159cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$jlffile}; $i++ ) 160cdf0e10cSrcweir { 161cdf0e10cSrcweir if (( ${$jlffile}[$i] =~ /^\s*\[.*]\s*$/ ) && ( $record )) { last; } 162cdf0e10cSrcweir if (( ${$jlffile}[$i] =~ /^\s*\[.*]\s*$/ ) && ( $record == 0 )) { $record = 1; } 163cdf0e10cSrcweir 164cdf0e10cSrcweir if (( $record ) && ( ${$jlffile}[$i] =~ /^\s*(.+?)\s*\=/ )) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir $language = $1; 167cdf0e10cSrcweir push(@languages, $language); 168cdf0e10cSrcweir } 169cdf0e10cSrcweir } 170cdf0e10cSrcweir 171cdf0e10cSrcweir my $languagestring = ""; 172cdf0e10cSrcweir for ( my $i = 0; $i <= $#languages; $i++ ) { $languagestring = $languagestring . $languages[$i] . ","; } 173cdf0e10cSrcweir $languagestring =~ s/,\s*$//; 174cdf0e10cSrcweir print "Languages: $languagestring\n"; 175cdf0e10cSrcweir 176cdf0e10cSrcweir return \@languages; 177cdf0e10cSrcweir} 178cdf0e10cSrcweir 179cdf0e10cSrcweirsub main::create_string_hash 180cdf0e10cSrcweir{ 181cdf0e10cSrcweir my ($jlffile, $language) = @_; 182cdf0e10cSrcweir 183cdf0e10cSrcweir my %stringhash = (); 184cdf0e10cSrcweir my $key = ""; 185cdf0e10cSrcweir my $value_defined = 0; 186cdf0e10cSrcweir 187cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$jlffile}; $i++ ) 188cdf0e10cSrcweir { 189cdf0e10cSrcweir if ( ${$jlffile}[$i] =~ /^\s*\[(.*)\]\s*$/ ) 190cdf0e10cSrcweir { 191cdf0e10cSrcweir $key = $1; 192cdf0e10cSrcweir $value_defined = 0; 193cdf0e10cSrcweir } 194cdf0e10cSrcweir 195cdf0e10cSrcweir if (( ${$jlffile}[$i] =~ /^\s*\Q$defaultlanguage\E\s*=\s*\"(.*)\"\s*$/ ) && ( ! $value_defined )) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir $value = $1; # defaulting to english 198cdf0e10cSrcweir $stringhash{$key} = $value; 199cdf0e10cSrcweir } 200cdf0e10cSrcweir 201cdf0e10cSrcweir if (( ${$jlffile}[$i] =~ /^\s*\Q$language\E\s*=\s*\"(.*)\"\s*$/ ) && ( ! $value_defined )) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir $value = $1; 204cdf0e10cSrcweir $stringhash{$key} = $value; 205cdf0e10cSrcweir $value_defined = 1; 206cdf0e10cSrcweir } 207cdf0e10cSrcweir } 208cdf0e10cSrcweir 209cdf0e10cSrcweir # additional replacement for ${LANGUAGE}, not defined in jlf file 210cdf0e10cSrcweir my $languagekey = "LANGUAGE"; 211cdf0e10cSrcweir $stringhash{$languagekey} = $language; 212cdf0e10cSrcweir 213cdf0e10cSrcweir # print_hash(\%stringhash); 214cdf0e10cSrcweir 215cdf0e10cSrcweir return \%stringhash; 216cdf0e10cSrcweir} 217cdf0e10cSrcweir 218cdf0e10cSrcweirsub main::print_hash 219cdf0e10cSrcweir{ 220cdf0e10cSrcweir my ( $hashref ) = @_; 221cdf0e10cSrcweir 222cdf0e10cSrcweir print "Hash contains:\n"; 223cdf0e10cSrcweir 224cdf0e10cSrcweir my $key; 225cdf0e10cSrcweir foreach $key (keys %{$hashref} ) { print "Key: $key, Value: $hashref->{$key}\n"; } 226cdf0e10cSrcweir} 227cdf0e10cSrcweir 228cdf0e10cSrcweirsub main::create_property_file 229cdf0e10cSrcweir{ 230cdf0e10cSrcweir my ($template_file, $stringhash) = @_; 231cdf0e10cSrcweir 232cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$template_file}; $i++ ) 233cdf0e10cSrcweir { 234cdf0e10cSrcweir if ( ${$template_file}[$i] =~ /\$\{(\w+)\}/ ) 235cdf0e10cSrcweir { 236cdf0e10cSrcweir my $key = $1; 237cdf0e10cSrcweir 238cdf0e10cSrcweir if ( exists($stringhash->{$key}) ) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir my $value = $stringhash->{$key}; 241cdf0e10cSrcweir ${$template_file}[$i] =~ s/\$\{\Q$key\E\}/$value/g; 242cdf0e10cSrcweir } 243cdf0e10cSrcweir else 244cdf0e10cSrcweir { 245cdf0e10cSrcweir print "Error: No value found for key: $key\n"; 246cdf0e10cSrcweir exit; 247cdf0e10cSrcweir } 248cdf0e10cSrcweir } 249cdf0e10cSrcweir } 250cdf0e10cSrcweir} 251cdf0e10cSrcweir 252cdf0e10cSrcweirsub main::generate_filename 253cdf0e10cSrcweir{ 254cdf0e10cSrcweir my ($template_file_name, $onelanguage) = @_; 255cdf0e10cSrcweir 256cdf0e10cSrcweir my $filename = $template_file_name; 257cdf0e10cSrcweir 258cdf0e10cSrcweir if ( $onelanguage ) 259cdf0e10cSrcweir { 260cdf0e10cSrcweir $onelanguage =~ s/-/_/; # zh-TW -> zh_TW 261cdf0e10cSrcweir $onelanguage = "_" . $onelanguage; 262cdf0e10cSrcweir $filename =~ s/_template\./$onelanguage\./; 263cdf0e10cSrcweir } 264cdf0e10cSrcweir else 265cdf0e10cSrcweir { 266cdf0e10cSrcweir $filename =~ s/_template//; 267cdf0e10cSrcweir } 268cdf0e10cSrcweir 269cdf0e10cSrcweir return $filename; 270cdf0e10cSrcweir} 271cdf0e10cSrcweir 272cdf0e10cSrcweirsub make_propertyfile_language_independent 273cdf0e10cSrcweir{ 274cdf0e10cSrcweir my ($property_file) = @_; 275cdf0e10cSrcweir 276cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$property_file}; $i++ ) 277cdf0e10cSrcweir { 278cdf0e10cSrcweir# if ( ${$property_file}[$i] =~ /^\s*#/ ) # only comment lines 279cdf0e10cSrcweir# { 280cdf0e10cSrcweir ${$property_file}[$i] =~ s/_\Q$defaultlanguage\E//; 281cdf0e10cSrcweir# } 282cdf0e10cSrcweir } 283cdf0e10cSrcweir} 284cdf0e10cSrcweir 285cdf0e10cSrcweirsub main::save_file 286cdf0e10cSrcweir{ 287cdf0e10cSrcweir my ($outputpath, $filename, $filecontent) = @_; 288cdf0e10cSrcweir 289cdf0e10cSrcweir $filename = $outputpath . $separator . $filename; 290cdf0e10cSrcweir 291cdf0e10cSrcweir if ( open( OUT, ">$filename" ) ) 292cdf0e10cSrcweir { 293cdf0e10cSrcweir print OUT @{$filecontent}; 294cdf0e10cSrcweir close( OUT); 295cdf0e10cSrcweir } 296cdf0e10cSrcweir 297cdf0e10cSrcweir push(@allnewpropertyfiles, $filename); 298cdf0e10cSrcweir print "Created file: $filename\n"; 299cdf0e10cSrcweir} 300