19780544fSAndrew Rist#************************************************************** 29780544fSAndrew Rist# 39780544fSAndrew Rist# Licensed to the Apache Software Foundation (ASF) under one 49780544fSAndrew Rist# or more contributor license agreements. See the NOTICE file 59780544fSAndrew Rist# distributed with this work for additional information 69780544fSAndrew Rist# regarding copyright ownership. The ASF licenses this file 79780544fSAndrew Rist# to you under the Apache License, Version 2.0 (the 89780544fSAndrew Rist# "License"); you may not use this file except in compliance 99780544fSAndrew Rist# with the License. You may obtain a copy of the License at 109780544fSAndrew Rist# 119780544fSAndrew Rist# http://www.apache.org/licenses/LICENSE-2.0 129780544fSAndrew Rist# 139780544fSAndrew Rist# Unless required by applicable law or agreed to in writing, 149780544fSAndrew Rist# software distributed under the License is distributed on an 159780544fSAndrew Rist# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 169780544fSAndrew Rist# KIND, either express or implied. See the License for the 179780544fSAndrew Rist# specific language governing permissions and limitations 189780544fSAndrew Rist# under the License. 199780544fSAndrew Rist# 209780544fSAndrew Rist#************************************************************** 219780544fSAndrew Rist 229780544fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweirpackage installer::languages; 25cdf0e10cSrcweir 26cdf0e10cSrcweiruse installer::converter; 27cdf0e10cSrcweiruse installer::existence; 28cdf0e10cSrcweiruse installer::exiter; 29cdf0e10cSrcweiruse installer::globals; 30cdf0e10cSrcweiruse installer::remover; 31cdf0e10cSrcweiruse installer::ziplist; 32cdf0e10cSrcweir 33*01a01bd6SAndre Fischer=head2 analyze_languagelist() 34*01a01bd6SAndre Fischer 35*01a01bd6SAndre Fischer Convert $installer::globals::languagelist into $installer::globals::languageproduct. 36*01a01bd6SAndre Fischer 37*01a01bd6SAndre Fischer That is now just a replacement of '_' with ','. 38*01a01bd6SAndre Fischer 39*01a01bd6SAndre Fischer $installer::globals::languageproduct (specified by the -l option 40*01a01bd6SAndre Fischer on the command line) can contain multiple languages separated by 41*01a01bd6SAndre Fischer '_' to specify multilingual builds. 42*01a01bd6SAndre Fischer 43*01a01bd6SAndre Fischer Separation by '#' to build multiple languages (single or 44*01a01bd6SAndre Fischer multilingual) in one make_installer.pl run is not supported 45*01a01bd6SAndre Fischer anymore. Call make_installer.pl with all languages separately instead: 46*01a01bd6SAndre Fischer make_installer.pl -l L1#L2 47*01a01bd6SAndre Fischer -> 48*01a01bd6SAndre Fischer make_installer.pl -l L1 49*01a01bd6SAndre Fischer make_installer.pl -l L2 50*01a01bd6SAndre Fischer 51*01a01bd6SAndre Fischer=cut 52*01a01bd6SAndre Fischersub analyze_languagelist() 53*01a01bd6SAndre Fischer{ 54*01a01bd6SAndre Fischer my $languageproduct = $installer::globals::languagelist; 55*01a01bd6SAndre Fischer 56*01a01bd6SAndre Fischer $languageproduct =~ s/\_/\,/g; # substituting "_" by ",", in case of dmake definition 01_49 57*01a01bd6SAndre Fischer 58*01a01bd6SAndre Fischer if ($languageproduct =~ /\#/) 59*01a01bd6SAndre Fischer { 60*01a01bd6SAndre Fischer installer::exiter::exit_program( 61*01a01bd6SAndre Fischer "building more than one language (or language set) is not supported anymore\n" 62*01a01bd6SAndre Fischer ."please replace one call of 'make_installer.pl -l language1#language2'\n" 63*01a01bd6SAndre Fischer ."with two calls 'make_installer.pl -l language1' and 'make_installer.pl -l language2'", 64*01a01bd6SAndre Fischer "installer::language::analyze_languagelist"); 65*01a01bd6SAndre Fischer } 66*01a01bd6SAndre Fischer 67*01a01bd6SAndre Fischer $installer::globals::languageproduct = $languageproduct; 68cdf0e10cSrcweir} 69cdf0e10cSrcweir 70*01a01bd6SAndre Fischer 71*01a01bd6SAndre Fischer 72*01a01bd6SAndre Fischer 73cdf0e10cSrcweir#################################################### 74cdf0e10cSrcweir# Reading languages from zip list file 75cdf0e10cSrcweir#################################################### 76cdf0e10cSrcweir 77cdf0e10cSrcweirsub get_info_about_languages 78cdf0e10cSrcweir{ 79cdf0e10cSrcweir my ( $allsettingsarrayref ) = @_; 80cdf0e10cSrcweir 81cdf0e10cSrcweir my $languagelistref; 82cdf0e10cSrcweir 83cdf0e10cSrcweir $languagelistref = installer::ziplist::getinfofromziplist($allsettingsarrayref, "languages"); 84cdf0e10cSrcweir $installer::globals::languagelist = $$languagelistref; 85cdf0e10cSrcweir 86cdf0e10cSrcweir if ( $installer::globals::languagelist eq "" ) # not defined on command line and not in product list 87cdf0e10cSrcweir { 88cdf0e10cSrcweir installer::exiter::exit_program("ERROR: Languages not defined on command line (-l) and not in product list!", "get_info_about_languages"); 89cdf0e10cSrcweir } 90cdf0e10cSrcweir 91cdf0e10cSrcweir # Adapting the separator format from zip list. 92cdf0e10cSrcweir # | means new product, , (comma) means more than one language in one product 93cdf0e10cSrcweir # On the command line, | is difficult to use. Therefore this script uses hashes 94cdf0e10cSrcweir 95cdf0e10cSrcweir $installer::globals::languagelist =~ s/\|/\#/g; 96cdf0e10cSrcweir 97cdf0e10cSrcweir analyze_languagelist(); 98cdf0e10cSrcweir} 99cdf0e10cSrcweir 100cdf0e10cSrcweir############################################################################# 101cdf0e10cSrcweir# Checking whether all elements of an array A are also member of array B 102cdf0e10cSrcweir############################################################################# 103cdf0e10cSrcweir 104cdf0e10cSrcweirsub all_elements_of_array1_in_array2 105cdf0e10cSrcweir{ 106cdf0e10cSrcweir my ($array1, $array2) = @_; 107cdf0e10cSrcweir 108cdf0e10cSrcweir my $array2_contains_all_elements_of_array1 = 1; 109cdf0e10cSrcweir 110cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$array1}; $i++ ) 111cdf0e10cSrcweir { 112cdf0e10cSrcweir if (! installer::existence::exists_in_array(${$array1}[$i], $array2)) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir $array2_contains_all_elements_of_array1 = 0; 115cdf0e10cSrcweir last; 116cdf0e10cSrcweir } 117cdf0e10cSrcweir } 118cdf0e10cSrcweir 119cdf0e10cSrcweir return $array2_contains_all_elements_of_array1; 120cdf0e10cSrcweir} 121cdf0e10cSrcweir 122cdf0e10cSrcweir############################################# 123cdf0e10cSrcweir# All languages defined for one product 124cdf0e10cSrcweir############################################# 125cdf0e10cSrcweir 126cdf0e10cSrcweirsub get_all_languages_for_one_product 127cdf0e10cSrcweir{ 128cdf0e10cSrcweir my ( $languagestring, $allvariables ) = @_; 129cdf0e10cSrcweir 130cdf0e10cSrcweir my @languagearray = (); 131cdf0e10cSrcweir 132cdf0e10cSrcweir my $last = $languagestring; 133cdf0e10cSrcweir 134cdf0e10cSrcweir $installer::globals::ismultilingual = 0; # setting the global variable $ismultilingual ! 135cdf0e10cSrcweir if ( $languagestring =~ /\,/ ) { $installer::globals::ismultilingual = 1; } 136cdf0e10cSrcweir 137cdf0e10cSrcweir while ( $last =~ /^\s*(.+?)\,(.+)\s*$/) # "$" for minimal matching, comma separated list 138cdf0e10cSrcweir { 139cdf0e10cSrcweir my $first = $1; 140cdf0e10cSrcweir $last = $2; 141cdf0e10cSrcweir installer::remover::remove_leading_and_ending_whitespaces(\$first); 142cdf0e10cSrcweir push(@languagearray, "$first"); 143cdf0e10cSrcweir } 144cdf0e10cSrcweir 145cdf0e10cSrcweir installer::remover::remove_leading_and_ending_whitespaces(\$last); 146cdf0e10cSrcweir push(@languagearray, "$last"); 147cdf0e10cSrcweir 148cdf0e10cSrcweir if ( $installer::globals::iswindowsbuild ) 149cdf0e10cSrcweir { 150cdf0e10cSrcweir my $furthercheck = 1; 151cdf0e10cSrcweir 152cdf0e10cSrcweir # For some languages (that are not supported by Windows, english needs to be added to the installation set 153cdf0e10cSrcweir # Languages saved in "@installer::globals::noMSLocaleLangs" 154cdf0e10cSrcweir 155cdf0e10cSrcweir if ( all_elements_of_array1_in_array2(\@languagearray, \@installer::globals::noMSLocaleLangs) ) 156cdf0e10cSrcweir { 157cdf0e10cSrcweir my $officestartlanguage = $languagearray[0]; 158cdf0e10cSrcweir unshift(@languagearray, "en-US"); # am Anfang einf�gen! 159cdf0e10cSrcweir $installer::globals::ismultilingual = 1; 160cdf0e10cSrcweir $installer::globals::added_english = 1; 161cdf0e10cSrcweir $installer::globals::set_office_start_language = 1; 162cdf0e10cSrcweir # setting the variable PRODUCTLANGUAGE, needed for Linguistic-ForceDefaultLanguage.xcu 163cdf0e10cSrcweir $allvariables->{'PRODUCTLANGUAGE'} = $officestartlanguage; 164cdf0e10cSrcweir $furthercheck = 0; 165cdf0e10cSrcweir } 166cdf0e10cSrcweir 167cdf0e10cSrcweir # In bilingual installation sets, in which english is the first language, 168cdf0e10cSrcweir # the Office start language shall be the second language. 169cdf0e10cSrcweir 170cdf0e10cSrcweir if ( $furthercheck ) 171cdf0e10cSrcweir { 172cdf0e10cSrcweir if (( $#languagearray == 1 ) && ( $languagearray[0] eq "en-US" )) 173cdf0e10cSrcweir { 174cdf0e10cSrcweir my $officestartlanguage = $languagearray[1]; 175cdf0e10cSrcweir $installer::globals::set_office_start_language = 1; 176cdf0e10cSrcweir # setting the variable PRODUCTLANGUAGE, needed for Linguistic-ForceDefaultLanguage.xcu 177cdf0e10cSrcweir $allvariables->{'PRODUCTLANGUAGE'} = $officestartlanguage; 178cdf0e10cSrcweir } 179cdf0e10cSrcweir } 180cdf0e10cSrcweir } 181cdf0e10cSrcweir 182cdf0e10cSrcweir return \@languagearray; 183cdf0e10cSrcweir} 184cdf0e10cSrcweir 185cdf0e10cSrcweir#################################################################################### 186cdf0e10cSrcweir# FAKE: The languages string may contain only "de", "en-US", instead of "01", ... 187cdf0e10cSrcweir# But this has to be removed as soon as possible. 188cdf0e10cSrcweir# In the future the languages are determined with "en-US" instead "01" 189cdf0e10cSrcweir# already on the command line and in the zip list file. 190cdf0e10cSrcweir#################################################################################### 191cdf0e10cSrcweir 192cdf0e10cSrcweirsub fake_languagesstring 193cdf0e10cSrcweir{ 194cdf0e10cSrcweir my ($stringref) = @_; 195cdf0e10cSrcweir 196cdf0e10cSrcweir # ATTENTION: This function has to be removed as soon as possible! 197cdf0e10cSrcweir 198cdf0e10cSrcweir $$stringref =~ s/01/en-US/; 199cdf0e10cSrcweir $$stringref =~ s/03/pt/; 200cdf0e10cSrcweir $$stringref =~ s/07/ru/; 201cdf0e10cSrcweir $$stringref =~ s/30/el/; 202cdf0e10cSrcweir $$stringref =~ s/31/nl/; 203cdf0e10cSrcweir $$stringref =~ s/33/fr/; 204cdf0e10cSrcweir $$stringref =~ s/34/es/; 205cdf0e10cSrcweir $$stringref =~ s/35/fi/; 206cdf0e10cSrcweir $$stringref =~ s/36/hu/; 207cdf0e10cSrcweir $$stringref =~ s/37/ca/; 208cdf0e10cSrcweir $$stringref =~ s/39/it/; 209cdf0e10cSrcweir $$stringref =~ s/42/cs/; 210cdf0e10cSrcweir $$stringref =~ s/43/sk/; 211cdf0e10cSrcweir $$stringref =~ s/44/en-GB/; 212cdf0e10cSrcweir $$stringref =~ s/45/da/; 213cdf0e10cSrcweir $$stringref =~ s/46/sv/; 214cdf0e10cSrcweir $$stringref =~ s/47/no/; 215cdf0e10cSrcweir $$stringref =~ s/48/pl/; 216cdf0e10cSrcweir $$stringref =~ s/49/de/; 217cdf0e10cSrcweir $$stringref =~ s/55/pt-BR/; 218cdf0e10cSrcweir $$stringref =~ s/66/th/; 219cdf0e10cSrcweir $$stringref =~ s/77/et/; 220cdf0e10cSrcweir $$stringref =~ s/81/ja/; 221cdf0e10cSrcweir $$stringref =~ s/82/ko/; 222cdf0e10cSrcweir $$stringref =~ s/86/zh-CN/; 223cdf0e10cSrcweir $$stringref =~ s/88/zh-TW/; 224cdf0e10cSrcweir $$stringref =~ s/90/tr/; 225cdf0e10cSrcweir $$stringref =~ s/91/hi-IN/; 226cdf0e10cSrcweir $$stringref =~ s/96/ar/; 227cdf0e10cSrcweir $$stringref =~ s/97/he/; 228cdf0e10cSrcweir} 229cdf0e10cSrcweir 230cdf0e10cSrcweir########################################################## 231cdf0e10cSrcweir# Converting the language array into a string for output 232cdf0e10cSrcweir########################################################## 233cdf0e10cSrcweir 234cdf0e10cSrcweirsub get_language_string 235cdf0e10cSrcweir{ 236cdf0e10cSrcweir my ($languagesref) = @_; 237cdf0e10cSrcweir 238cdf0e10cSrcweir my $newstring = ""; 239cdf0e10cSrcweir 240cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$languagesref}; $i++ ) 241cdf0e10cSrcweir { 242cdf0e10cSrcweir $newstring = $newstring . ${$languagesref}[$i] . "_"; 243cdf0e10cSrcweir } 244cdf0e10cSrcweir 245cdf0e10cSrcweir # remove ending underline 246cdf0e10cSrcweir 247cdf0e10cSrcweir $newstring =~ s/\_\s*$//; 248cdf0e10cSrcweir 249cdf0e10cSrcweir return \$newstring; 250cdf0e10cSrcweir} 251cdf0e10cSrcweir 252cdf0e10cSrcweir########################################################## 253cdf0e10cSrcweir# Analyzing the languages in the languages array and 254cdf0e10cSrcweir# returning the most important language 255cdf0e10cSrcweir########################################################## 256cdf0e10cSrcweir 257cdf0e10cSrcweirsub get_default_language 258cdf0e10cSrcweir{ 259cdf0e10cSrcweir my ($languagesref) = @_; 260cdf0e10cSrcweir 261cdf0e10cSrcweir return ${$languagesref}[0]; # ToDo, only returning the first language 262cdf0e10cSrcweir} 263cdf0e10cSrcweir 264cdf0e10cSrcweir############################################################# 265cdf0e10cSrcweir# Contains the installation set one of the asian languages? 266cdf0e10cSrcweir############################################################# 267cdf0e10cSrcweir 268cdf0e10cSrcweirsub detect_asian_language 269cdf0e10cSrcweir{ 270cdf0e10cSrcweir my ($languagesref) = @_; 271cdf0e10cSrcweir 272cdf0e10cSrcweir my $containsasia = 0; 273cdf0e10cSrcweir 274cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$languagesref}; $i++ ) 275cdf0e10cSrcweir { 276cdf0e10cSrcweir my $onelang = ${$languagesref}[$i]; 277cdf0e10cSrcweir $onelang =~ s/\s*$//; 278cdf0e10cSrcweir 279cdf0e10cSrcweir for ( my $j = 0; $j <= $#installer::globals::asianlanguages; $j++ ) 280cdf0e10cSrcweir { 281cdf0e10cSrcweir my $asialang = $installer::globals::asianlanguages[$j]; 282cdf0e10cSrcweir $asialang =~ s/\s*$//; 283cdf0e10cSrcweir 284cdf0e10cSrcweir if ( $onelang eq $asialang ) 285cdf0e10cSrcweir { 286cdf0e10cSrcweir $containsasia = 1; 287cdf0e10cSrcweir last; 288cdf0e10cSrcweir } 289cdf0e10cSrcweir } 290cdf0e10cSrcweir 291cdf0e10cSrcweir if ( $containsasia ) { last; } 292cdf0e10cSrcweir } 293cdf0e10cSrcweir 294cdf0e10cSrcweir return $containsasia; 295cdf0e10cSrcweir} 296cdf0e10cSrcweir 297cdf0e10cSrcweir############################################################# 298cdf0e10cSrcweir# Contains the installation set only asian languages? 299cdf0e10cSrcweir############################################################# 300cdf0e10cSrcweir 301cdf0e10cSrcweirsub contains_only_asian_languages 302cdf0e10cSrcweir{ 303cdf0e10cSrcweir my ($languagesref) = @_; 304cdf0e10cSrcweir 305cdf0e10cSrcweir my $onlyasian = 1; 306cdf0e10cSrcweir 307cdf0e10cSrcweir for ( my $i = 0; $i <= $#{$languagesref}; $i++ ) 308cdf0e10cSrcweir { 309cdf0e10cSrcweir my $onelang = ${$languagesref}[$i]; 310cdf0e10cSrcweir $onelang =~ s/\s*$//; 311cdf0e10cSrcweir 312cdf0e10cSrcweir if (! installer::existence::exists_in_array($onelang, \@installer::globals::asianlanguages)) 313cdf0e10cSrcweir { 314cdf0e10cSrcweir $onlyasian = 0; 315cdf0e10cSrcweir last; 316cdf0e10cSrcweir } 317cdf0e10cSrcweir } 318cdf0e10cSrcweir 319cdf0e10cSrcweir return $onlyasian; 320cdf0e10cSrcweir} 321cdf0e10cSrcweir 322cdf0e10cSrcweir################################################################ 323cdf0e10cSrcweir# Contains the installation set one of the western languages 324cdf0e10cSrcweir################################################################ 325cdf0e10cSrcweir 326cdf0e10cSrcweirsub detect_western_language 327cdf0e10cSrcweir{ 328cdf0e10cSrcweir my ($languagesref) = @_; 329cdf0e10cSrcweir 330cdf0e10cSrcweir my $containswestern = 1; 331cdf0e10cSrcweir 332cdf0e10cSrcweir if ( contains_only_asian_languages($languagesref) ) { $containswestern = 0; } 333cdf0e10cSrcweir 334cdf0e10cSrcweir return $containswestern; 335cdf0e10cSrcweir} 336cdf0e10cSrcweir 337cdf0e10cSrcweir################################################################ 338cdf0e10cSrcweir# Determining the language used by the Java installer 339cdf0e10cSrcweir################################################################ 340cdf0e10cSrcweir 341cdf0e10cSrcweirsub get_java_language 342cdf0e10cSrcweir{ 343cdf0e10cSrcweir my ( $language ) = @_; 344cdf0e10cSrcweir 345cdf0e10cSrcweir # my $javalanguage = ""; 346cdf0e10cSrcweir 347cdf0e10cSrcweir # if ( $language eq "en-US" ) { $javalanguage = "en_US"; } 348cdf0e10cSrcweir # elsif ( $language eq "ar" ) { $javalanguage = "ar_AR"; } 349cdf0e10cSrcweir # elsif ( $language eq "bg" ) { $javalanguage = "bg_BG"; } 350cdf0e10cSrcweir # elsif ( $language eq "ca" ) { $javalanguage = "ca_CA"; } 351cdf0e10cSrcweir # elsif ( $language eq "cs" ) { $javalanguage = "cs_CS"; } 352cdf0e10cSrcweir # elsif ( $language eq "da" ) { $javalanguage = "da_DA"; } 353cdf0e10cSrcweir # elsif ( $language eq "de" ) { $javalanguage = "de"; } 354cdf0e10cSrcweir # elsif ( $language eq "de" ) { $javalanguage = "de_DE"; } 355cdf0e10cSrcweir # elsif ( $language eq "et" ) { $javalanguage = "et_ET"; } 356cdf0e10cSrcweir # elsif ( $language eq "el" ) { $javalanguage = "el_EL"; } 357cdf0e10cSrcweir # elsif ( $language eq "fi" ) { $javalanguage = "fi_FI"; } 358cdf0e10cSrcweir # elsif ( $language eq "fr" ) { $javalanguage = "fr_FR"; } 359cdf0e10cSrcweir # elsif ( $language eq "hu" ) { $javalanguage = "hu_HU"; } 360cdf0e10cSrcweir # elsif ( $language eq "he" ) { $javalanguage = "he_HE"; } 361cdf0e10cSrcweir # elsif ( $language eq "it" ) { $javalanguage = "it_IT"; } 362cdf0e10cSrcweir # elsif ( $language eq "nl" ) { $javalanguage = "nl_NL"; } 363cdf0e10cSrcweir # elsif ( $language eq "es" ) { $javalanguage = "es_ES"; } 364cdf0e10cSrcweir # elsif ( $language eq "sv" ) { $javalanguage = "sv_SV"; } 365cdf0e10cSrcweir # elsif ( $language eq "sk" ) { $javalanguage = "sk_SK"; } 366cdf0e10cSrcweir # elsif ( $language eq "pl" ) { $javalanguage = "pl_PL"; } 367cdf0e10cSrcweir # elsif ( $language eq "pt-BR" ) { $javalanguage = "pt_BR"; } 368cdf0e10cSrcweir # elsif ( $language eq "ru" ) { $javalanguage = "ru_RU"; } 369cdf0e10cSrcweir # elsif ( $language eq "tr" ) { $javalanguage = "tr_TR"; } 370cdf0e10cSrcweir # elsif ( $language eq "ja" ) { $javalanguage = "ja"; } 371cdf0e10cSrcweir # elsif ( $language eq "ja" ) { $javalanguage = "ja_JP"; } 372cdf0e10cSrcweir # elsif ( $language eq "ko" ) { $javalanguage = "ko_KR"; } 373cdf0e10cSrcweir # elsif ( $language eq "th" ) { $javalanguage = "th_TH"; } 374cdf0e10cSrcweir # elsif ( $language eq "zh-CN" ) { $javalanguage = "zh_CN"; } 375cdf0e10cSrcweir # elsif ( $language eq "zh-TW" ) { $javalanguage = "zh_TW"; } 376cdf0e10cSrcweir 377cdf0e10cSrcweir # languages not defined yet 378cdf0e10cSrcweir # if ( $javalanguage eq "" ) 379cdf0e10cSrcweir # { 380cdf0e10cSrcweir # $javalanguage = $language; 381cdf0e10cSrcweir # $javalanguage =~ s/\-/\_/; 382cdf0e10cSrcweir # } 383cdf0e10cSrcweir 384cdf0e10cSrcweir $javalanguage = $language; 385cdf0e10cSrcweir $javalanguage =~ s/\-/\_/; 386cdf0e10cSrcweir 387cdf0e10cSrcweir return $javalanguage; 388cdf0e10cSrcweir} 389cdf0e10cSrcweir 390cdf0e10cSrcweir1; 391