xref: /AOO41X/main/solenv/bin/modules/pre2par/language.pm (revision 9780544fa6b4c85f7d9b48452f58c7da854fc9a5)
1#**************************************************************
2#
3#  Licensed to the Apache Software Foundation (ASF) under one
4#  or more contributor license agreements.  See the NOTICE file
5#  distributed with this work for additional information
6#  regarding copyright ownership.  The ASF licenses this file
7#  to you under the Apache License, Version 2.0 (the
8#  "License"); you may not use this file except in compliance
9#  with the License.  You may obtain a copy of the License at
10#
11#    http://www.apache.org/licenses/LICENSE-2.0
12#
13#  Unless required by applicable law or agreed to in writing,
14#  software distributed under the License is distributed on an
15#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16#  KIND, either express or implied.  See the License for the
17#  specific language governing permissions and limitations
18#  under the License.
19#
20#**************************************************************
21
22
23
24package pre2par::language;
25
26use pre2par::existence;
27
28##############################################################
29# Returning a specific language string from the block
30# of all translations
31##############################################################
32
33sub get_language_string_from_language_block
34{
35    my ($language_block, $language) = @_;
36
37    my $newstring = "";
38
39    for ( my $i = 0; $i <= $#{$language_block}; $i++ )
40    {
41
42        if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ )
43        {
44            $newstring = $1;
45            $newstring =~ s/\"/\\\"/g;  # masquerading all '"' in the string
46            $newstring = "\"" . $newstring . "\"";
47            last;
48        }
49    }
50
51    # defaulting to english!
52
53    if ( $newstring eq "" )
54    {
55        $language = "en-US";    # defaulting to english
56
57        for ( my $i = 0; $i <= $#{$language_block}; $i++ )
58        {
59            if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*(\".*\")\s*$/ )
60            {
61                $newstring = $1;
62                last;
63            }
64        }
65    }
66
67    return $newstring;
68}
69
70##############################################################
71# Returning the complete block in all languages
72# for a specified string
73##############################################################
74
75sub get_language_block_from_language_file
76{
77    my ($searchstring, $langfile) = @_;
78
79    my @language_block = ();
80
81    for ( my $i = 0; $i <= $#{$langfile}; $i++ )
82    {
83        if ( ${$langfile}[$i] =~ /^\s*\[\s*$searchstring\s*\]\s*$/ )
84        {
85            my $counter = $i;
86
87            push(@language_block, ${$langfile}[$counter]);
88            $counter++;
89
90            while (( $counter <= $#{$langfile} ) && (!( ${$langfile}[$counter] =~ /^\s*\[/ )))
91            {
92                push(@language_block, ${$langfile}[$counter]);
93                $counter++;
94            }
95
96            last;
97        }
98    }
99
100    return \@language_block;
101}
102
103############################################
104# collecting all replace strings
105# in a language file
106############################################
107
108sub get_all_replace_strings
109{
110    my ($langfile) = @_;
111
112    my @allstrings = ();
113
114    for ( my $i = 0; $i <= $#{$langfile}; $i++ )
115    {
116        if ( ${$langfile}[$i] =~ /^\s*\[\s*(.*?)\s*\]\s*$/ )
117        {
118            my $replacestring = $1;
119            if (! pre2par::existence::exists_in_array($replacestring, \@allstrings))
120            {
121                push(@allstrings, $replacestring);
122            }
123        }
124    }
125
126    return \@allstrings;
127}
128
129############################################
130# localizing the par file with the
131# corresponding language file
132############################################
133
134sub localize
135{
136    my ($parfile, $langfile) = @_;
137
138    my $allreplacestrings = get_all_replace_strings($langfile);
139
140    for ( my $i = 0; $i <= $#{$parfile}; $i++ )
141    {
142        my $oneline = ${$parfile}[$i];
143
144        for ( my $j = 0; $j <= $#{$allreplacestrings}; $j++ )
145        {
146            if ( $oneline =~ /\b${$allreplacestrings}[$j]\b/ ) # Not for basic scripts
147            {
148                my $oldstring = ${$allreplacestrings}[$j];
149
150                if ( $oneline =~ /^\s*\w+\s*\(([\w-]+)\)\s*\=/ )
151                {
152                    my $language = $1;   # can be "01" or "en" or "en-US" or ...
153
154                    my $languageblock = get_language_block_from_language_file($oldstring, $langfile);
155                    my $newstring = get_language_string_from_language_block($languageblock, $language);
156
157                    if ( $newstring eq "" ) { $newstring = "\"" . $oldstring . "\""; }
158
159                    $oneline =~ s/$oldstring/$newstring/g;
160
161                    ${$parfile}[$i] = $oneline;
162                }
163            }
164        }
165    }
166}
167
1681;
169