diff options
Diffstat (limited to 'solenv/bin/modules/pre2par/language.pm')
-rw-r--r-- | solenv/bin/modules/pre2par/language.pm | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/solenv/bin/modules/pre2par/language.pm b/solenv/bin/modules/pre2par/language.pm new file mode 100644 index 000000000..332bb985f --- /dev/null +++ b/solenv/bin/modules/pre2par/language.pm @@ -0,0 +1,135 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# 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 . +# + +package pre2par::language; + +use strict; + +############################################################## +# 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 = "\"" . $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; +} + +############################################ +# collecting all replace variables +# in a language file +############################################ + +sub get_all_replace_variables +{ + my ($langfile) = @_; + + my %allvars = (); + + for ( my $i = 0; $i <= $#{$langfile}; $i++ ) + { + if ( ${$langfile}[$i] =~ /^\s*\[\s*(.*?)\s*\]\s*$/ ) + { + my $variable = $1; +# print "lang block '$variable'\n"; + my @lang_block = (); + my $counter; + + # Store the complete block in all languages for a specified variable + for ( $counter = $i + 1; $counter <= $#{$langfile}; $counter++ ) { + my $line = ${$langfile}[$counter]; + last if ($line =~ /^s*\[/); # next decl. + push @lang_block, $line; + } +# print "$variable = '@lang_block'\n"; + $allvars{$variable} = \@lang_block; + $i = $counter - 1; + } + } + + return \%allvars; +} + +############################################ +# localizing the par file with the +# corresponding language file +############################################ + +sub localize +{ + my ($parfile, $langfile) = @_; + + my $replace_hash = get_all_replace_variables($langfile); + + # parse lines of the form Name (st) = STR_NAME_MODULE_HELPPACK_OC; + # for variable substitution + my $langlinere = qr/^\s*\w+\s*\(([\w-]+)\)\s*\=\s*([\w-]+)\s*;/; + for ( my $i = 0; $i <= $#{$parfile}; $i++ ) + { + my $oneline = ${$parfile}[$i]; + + if ( $oneline =~ $langlinere) { + my $language = $1; # can be "01" or "en" or "en-US" or ... + my $variable = $2; + +# print "line '$oneline' split to '$language' '$variable'\n"; + + if (defined $replace_hash->{$variable}) { + my $newstring = get_language_string_from_language_block($replace_hash->{$variable}, $language); + if ( $newstring eq "" ) { $newstring = "\"" . $variable . "\""; } + + $oneline =~ s/$variable/$newstring/g; + + ${$parfile}[$i] = $oneline; + } + } + } +} + +1; |