summaryrefslogtreecommitdiff
path: root/solenv/bin/modules/installer/languages.pm
diff options
context:
space:
mode:
Diffstat (limited to 'solenv/bin/modules/installer/languages.pm')
-rw-r--r--solenv/bin/modules/installer/languages.pm379
1 files changed, 379 insertions, 0 deletions
diff --git a/solenv/bin/modules/installer/languages.pm b/solenv/bin/modules/installer/languages.pm
new file mode 100644
index 000000000000..7070b09f80b8
--- /dev/null
+++ b/solenv/bin/modules/installer/languages.pm
@@ -0,0 +1,379 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+package installer::languages;
+
+use installer::converter;
+use installer::existence;
+use installer::exiter;
+use installer::globals;
+use installer::remover;
+use installer::ziplist;
+
+#############################################################################
+# Analyzing the laguage list parameter and language list from zip list file
+#############################################################################
+
+sub analyze_languagelist
+{
+ my $first = $installer::globals::languagelist;
+
+ $first =~ s/\_/\,/g; # substituting "_" by ",", in case of dmake definition 01_49
+
+ # Products are separated by a "#", if defined in zip-list by a "|". But "get_info_about_languages"
+ # substitutes already "|" to "#". This procedure only knows "#" as product separator.
+ # Different languages for one product are separated by ",". But on the command line the "_" is used.
+ # Therefore "_" is replaced by "," at the beginning of this procedure.
+
+ while ($first =~ /^(\S+)\#(\S+?)$/) # Minimal matching, to keep the order of languages
+ {
+ $first = $1;
+ my $last = $2;
+ unshift(@installer::globals::languageproducts, $last);
+ }
+
+ unshift(@installer::globals::languageproducts, $first);
+}
+
+####################################################
+# Reading languages from zip list file
+####################################################
+
+sub get_info_about_languages
+{
+ my ( $allsettingsarrayref ) = @_;
+
+ my $languagelistref;
+
+ $languagelistref = installer::ziplist::getinfofromziplist($allsettingsarrayref, "languages");
+ $installer::globals::languagelist = $$languagelistref;
+
+ if ( $installer::globals::languagelist eq "" ) # not defined on command line and not in product list
+ {
+ installer::exiter::exit_program("ERROR: Languages not defined on command line (-l) and not in product list!", "get_info_about_languages");
+ }
+
+ # Adapting the separator format from zip list.
+ # | means new product, , (comma) means more than one language in one product
+ # On the command line, | is difficult to use. Therefore this script uses hashes
+
+ $installer::globals::languagelist =~ s/\|/\#/g;
+
+ analyze_languagelist();
+}
+
+#############################################################################
+# Checking whether all elements of an array A are also member of array B
+#############################################################################
+
+sub all_elements_of_array1_in_array2
+{
+ my ($array1, $array2) = @_;
+
+ my $array2_contains_all_elements_of_array1 = 1;
+
+ for ( my $i = 0; $i <= $#{$array1}; $i++ )
+ {
+ if (! installer::existence::exists_in_array(${$array1}[$i], $array2))
+ {
+ $array2_contains_all_elements_of_array1 = 0;
+ last;
+ }
+ }
+
+ return $array2_contains_all_elements_of_array1;
+}
+
+#############################################
+# All languages defined for one product
+#############################################
+
+sub get_all_languages_for_one_product
+{
+ my ( $languagestring, $allvariables ) = @_;
+
+ my @languagearray = ();
+
+ my $last = $languagestring;
+
+ $installer::globals::ismultilingual = 0; # setting the global variable $ismultilingual !
+ if ( $languagestring =~ /\,/ ) { $installer::globals::ismultilingual = 1; }
+
+ while ( $last =~ /^\s*(.+?)\,(.+)\s*$/) # "$" for minimal matching, comma separated list
+ {
+ my $first = $1;
+ $last = $2;
+ installer::remover::remove_leading_and_ending_whitespaces(\$first);
+ push(@languagearray, "$first");
+ }
+
+ installer::remover::remove_leading_and_ending_whitespaces(\$last);
+ push(@languagearray, "$last");
+
+ if ( $installer::globals::iswindowsbuild )
+ {
+ my $furthercheck = 1;
+
+ # For some languages (that are not supported by Windows, english needs to be added to the installation set
+ # Languages saved in "@installer::globals::noMSLocaleLangs"
+
+ if ( all_elements_of_array1_in_array2(\@languagearray, \@installer::globals::noMSLocaleLangs) )
+ {
+ my $officestartlanguage = $languagearray[0];
+ unshift(@languagearray, "en-US"); # am Anfang einfgen!
+ $installer::globals::ismultilingual = 1;
+ $installer::globals::added_english = 1;
+ $installer::globals::set_office_start_language = 1;
+ # setting the variable PRODUCTLANGUAGE, needed for Linguistic-ForceDefaultLanguage.xcu
+ $allvariables->{'PRODUCTLANGUAGE'} = $officestartlanguage;
+ $furthercheck = 0;
+ }
+
+ # In bilingual installation sets, in which english is the first language,
+ # the Office start language shall be the second language.
+
+ if ( $furthercheck )
+ {
+ if (( $#languagearray == 1 ) && ( $languagearray[0] eq "en-US" ))
+ {
+ my $officestartlanguage = $languagearray[1];
+ $installer::globals::set_office_start_language = 1;
+ # setting the variable PRODUCTLANGUAGE, needed for Linguistic-ForceDefaultLanguage.xcu
+ $allvariables->{'PRODUCTLANGUAGE'} = $officestartlanguage;
+ }
+ }
+ }
+
+ return \@languagearray;
+}
+
+####################################################################################
+# FAKE: The languages string may contain only "de", "en-US", instead of "01", ...
+# But this has to be removed as soon as possible.
+# In the future the languages are determined with "en-US" instead "01"
+# already on the command line and in the zip list file.
+####################################################################################
+
+sub fake_languagesstring
+{
+ my ($stringref) = @_;
+
+ # ATTENTION: This function has to be removed as soon as possible!
+
+ $$stringref =~ s/01/en-US/;
+ $$stringref =~ s/03/pt/;
+ $$stringref =~ s/07/ru/;
+ $$stringref =~ s/30/el/;
+ $$stringref =~ s/31/nl/;
+ $$stringref =~ s/33/fr/;
+ $$stringref =~ s/34/es/;
+ $$stringref =~ s/35/fi/;
+ $$stringref =~ s/36/hu/;
+ $$stringref =~ s/37/ca/;
+ $$stringref =~ s/39/it/;
+ $$stringref =~ s/42/cs/;
+ $$stringref =~ s/43/sk/;
+ $$stringref =~ s/44/en-GB/;
+ $$stringref =~ s/45/da/;
+ $$stringref =~ s/46/sv/;
+ $$stringref =~ s/47/no/;
+ $$stringref =~ s/48/pl/;
+ $$stringref =~ s/49/de/;
+ $$stringref =~ s/55/pt-BR/;
+ $$stringref =~ s/66/th/;
+ $$stringref =~ s/77/et/;
+ $$stringref =~ s/81/ja/;
+ $$stringref =~ s/82/ko/;
+ $$stringref =~ s/86/zh-CN/;
+ $$stringref =~ s/88/zh-TW/;
+ $$stringref =~ s/90/tr/;
+ $$stringref =~ s/91/hi-IN/;
+ $$stringref =~ s/96/ar/;
+ $$stringref =~ s/97/he/;
+}
+
+##########################################################
+# Converting the language array into a string for output
+##########################################################
+
+sub get_language_string
+{
+ my ($languagesref) = @_;
+
+ my $newstring = "";
+
+ for ( my $i = 0; $i <= $#{$languagesref}; $i++ )
+ {
+ $newstring = $newstring . ${$languagesref}[$i] . "_";
+ }
+
+ # remove ending underline
+
+ $newstring =~ s/\_\s*$//;
+
+ return \$newstring;
+}
+
+##########################################################
+# Analyzing the languages in the languages array and
+# returning the most important language
+##########################################################
+
+sub get_default_language
+{
+ my ($languagesref) = @_;
+
+ return ${$languagesref}[0]; # ToDo, only returning the first language
+}
+
+#############################################################
+# Contains the installation set one of the asian languages?
+#############################################################
+
+sub detect_asian_language
+{
+ my ($languagesref) = @_;
+
+ my $containsasia = 0;
+
+ for ( my $i = 0; $i <= $#{$languagesref}; $i++ )
+ {
+ my $onelang = ${$languagesref}[$i];
+ $onelang =~ s/\s*$//;
+
+ for ( my $j = 0; $j <= $#installer::globals::asianlanguages; $j++ )
+ {
+ my $asialang = $installer::globals::asianlanguages[$j];
+ $asialang =~ s/\s*$//;
+
+ if ( $onelang eq $asialang )
+ {
+ $containsasia = 1;
+ last;
+ }
+ }
+
+ if ( $containsasia ) { last; }
+ }
+
+ return $containsasia;
+}
+
+#############################################################
+# Contains the installation set only asian languages?
+#############################################################
+
+sub contains_only_asian_languages
+{
+ my ($languagesref) = @_;
+
+ my $onlyasian = 1;
+
+ for ( my $i = 0; $i <= $#{$languagesref}; $i++ )
+ {
+ my $onelang = ${$languagesref}[$i];
+ $onelang =~ s/\s*$//;
+
+ if (! installer::existence::exists_in_array($onelang, \@installer::globals::asianlanguages))
+ {
+ $onlyasian = 0;
+ last;
+ }
+ }
+
+ return $onlyasian;
+}
+
+################################################################
+# Contains the installation set one of the western languages
+################################################################
+
+sub detect_western_language
+{
+ my ($languagesref) = @_;
+
+ my $containswestern = 1;
+
+ if ( contains_only_asian_languages($languagesref) ) { $containswestern = 0; }
+
+ return $containswestern;
+}
+
+################################################################
+# Determining the language used by the Java installer
+################################################################
+
+sub get_java_language
+{
+ my ( $language ) = @_;
+
+ # my $javalanguage = "";
+
+ # if ( $language eq "en-US" ) { $javalanguage = "en_US"; }
+ # elsif ( $language eq "ar" ) { $javalanguage = "ar_AR"; }
+ # elsif ( $language eq "bg" ) { $javalanguage = "bg_BG"; }
+ # elsif ( $language eq "ca" ) { $javalanguage = "ca_CA"; }
+ # elsif ( $language eq "cs" ) { $javalanguage = "cs_CS"; }
+ # elsif ( $language eq "da" ) { $javalanguage = "da_DA"; }
+ # elsif ( $language eq "de" ) { $javalanguage = "de"; }
+ # elsif ( $language eq "de" ) { $javalanguage = "de_DE"; }
+ # elsif ( $language eq "et" ) { $javalanguage = "et_ET"; }
+ # elsif ( $language eq "el" ) { $javalanguage = "el_EL"; }
+ # elsif ( $language eq "fi" ) { $javalanguage = "fi_FI"; }
+ # elsif ( $language eq "fr" ) { $javalanguage = "fr_FR"; }
+ # elsif ( $language eq "hu" ) { $javalanguage = "hu_HU"; }
+ # elsif ( $language eq "he" ) { $javalanguage = "he_HE"; }
+ # elsif ( $language eq "it" ) { $javalanguage = "it_IT"; }
+ # elsif ( $language eq "nl" ) { $javalanguage = "nl_NL"; }
+ # elsif ( $language eq "es" ) { $javalanguage = "es_ES"; }
+ # elsif ( $language eq "sv" ) { $javalanguage = "sv_SV"; }
+ # elsif ( $language eq "sk" ) { $javalanguage = "sk_SK"; }
+ # elsif ( $language eq "pl" ) { $javalanguage = "pl_PL"; }
+ # elsif ( $language eq "pt-BR" ) { $javalanguage = "pt_BR"; }
+ # elsif ( $language eq "ru" ) { $javalanguage = "ru_RU"; }
+ # elsif ( $language eq "tr" ) { $javalanguage = "tr_TR"; }
+ # elsif ( $language eq "ja" ) { $javalanguage = "ja"; }
+ # elsif ( $language eq "ja" ) { $javalanguage = "ja_JP"; }
+ # elsif ( $language eq "ko" ) { $javalanguage = "ko_KR"; }
+ # elsif ( $language eq "th" ) { $javalanguage = "th_TH"; }
+ # elsif ( $language eq "zh-CN" ) { $javalanguage = "zh_CN"; }
+ # elsif ( $language eq "zh-TW" ) { $javalanguage = "zh_TW"; }
+
+ # languages not defined yet
+ # if ( $javalanguage eq "" )
+ # {
+ # $javalanguage = $language;
+ # $javalanguage =~ s/\-/\_/;
+ # }
+
+ $javalanguage = $language;
+ $javalanguage =~ s/\-/\_/;
+
+ return $javalanguage;
+}
+
+1;