| #************************************************************** |
| # |
| # 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. |
| # |
| #************************************************************** |
| |
| |
| |
| package pre2par::language; |
| |
| use pre2par::existence; |
| |
| ############################################################## |
| # Returning a specific language string from the block |
| # of all translations |
| ############################################################## |
| |
| sub get_language_string_from_language_block |
| { |
| my ($language_block, $language) = @_; |
| |
| my $newstring = ""; |
| |
| for ( my $i = 0; $i <= $#{$language_block}; $i++ ) |
| { |
| |
| if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*\"(.*)\"\s*$/ ) |
| { |
| $newstring = $1; |
| $newstring =~ s/\"/\\\"/g; # masquerading all '"' in the string |
| $newstring = "\"" . $newstring . "\""; |
| last; |
| } |
| } |
| |
| # defaulting to english! |
| |
| if ( $newstring eq "" ) |
| { |
| $language = "en-US"; # defaulting to english |
| |
| for ( my $i = 0; $i <= $#{$language_block}; $i++ ) |
| { |
| if ( ${$language_block}[$i] =~ /^\s*$language\s*\=\s*(\".*\")\s*$/ ) |
| { |
| $newstring = $1; |
| last; |
| } |
| } |
| } |
| |
| return $newstring; |
| } |
| |
| ############################################################## |
| # Returning the complete block in all languages |
| # for a specified string |
| ############################################################## |
| |
| sub get_language_block_from_language_file |
| { |
| my ($searchstring, $langfile) = @_; |
| |
| my @language_block = (); |
| |
| for ( my $i = 0; $i <= $#{$langfile}; $i++ ) |
| { |
| if ( ${$langfile}[$i] =~ /^\s*\[\s*$searchstring\s*\]\s*$/ ) |
| { |
| my $counter = $i; |
| |
| push(@language_block, ${$langfile}[$counter]); |
| $counter++; |
| |
| while (( $counter <= $#{$langfile} ) && (!( ${$langfile}[$counter] =~ /^\s*\[/ ))) |
| { |
| push(@language_block, ${$langfile}[$counter]); |
| $counter++; |
| } |
| |
| last; |
| } |
| } |
| |
| return \@language_block; |
| } |
| |
| ############################################ |
| # collecting all replace strings |
| # in a language file |
| ############################################ |
| |
| sub get_all_replace_strings |
| { |
| my ($langfile) = @_; |
| |
| my @allstrings = (); |
| |
| for ( my $i = 0; $i <= $#{$langfile}; $i++ ) |
| { |
| if ( ${$langfile}[$i] =~ /^\s*\[\s*(.*?)\s*\]\s*$/ ) |
| { |
| my $replacestring = $1; |
| if (! pre2par::existence::exists_in_array($replacestring, \@allstrings)) |
| { |
| push(@allstrings, $replacestring); |
| } |
| } |
| } |
| |
| return \@allstrings; |
| } |
| |
| ############################################ |
| # localizing the par file with the |
| # corresponding language file |
| ############################################ |
| |
| sub localize |
| { |
| my ($parfile, $langfile) = @_; |
| |
| my $allreplacestrings = get_all_replace_strings($langfile); |
| |
| for ( my $i = 0; $i <= $#{$parfile}; $i++ ) |
| { |
| my $oneline = ${$parfile}[$i]; |
| |
| for ( my $j = 0; $j <= $#{$allreplacestrings}; $j++ ) |
| { |
| if ( $oneline =~ /\b${$allreplacestrings}[$j]\b/ ) # Not for basic scripts |
| { |
| my $oldstring = ${$allreplacestrings}[$j]; |
| |
| if ( $oneline =~ /^\s*\w+\s*\(([\w-]+)\)\s*\=/ ) |
| { |
| my $language = $1; # can be "01" or "en" or "en-US" or ... |
| |
| my $languageblock = get_language_block_from_language_file($oldstring, $langfile); |
| my $newstring = get_language_string_from_language_block($languageblock, $language); |
| |
| if ( $newstring eq "" ) { $newstring = "\"" . $oldstring . "\""; } |
| |
| $oneline =~ s/$oldstring/$newstring/g; |
| |
| ${$parfile}[$i] = $oneline; |
| } |
| } |
| } |
| } |
| } |
| |
| 1; |