From 1682d89db6e03ed1c49396c127f727e394ae52f9 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Mon, 1 Feb 2010 13:56:13 +0100 Subject: [PATCH] Locale benutzt nur noch locale/de/all MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Die Funktionsnamensauflösung wird nun bei jedem Aufruf von Locale selber durchgeführt. --- SL/Locale.pm | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/SL/Locale.pm b/SL/Locale.pm index 87008734a..0d2a89517 100644 --- a/SL/Locale.pm +++ b/SL/Locale.pm @@ -47,16 +47,16 @@ use strict; sub new { $main::lxdebug->enter_sub(); - my ($type, $country, $NLS_file) = @_; + my ($type, $country) = @_; + + $country ||= $::language; + $country =~ s|.*/||; + $country =~ s|\.||g; my $self = {}; bless $self, $type; - $country =~ s|.*/||; - $country =~ s|\.||g; - $NLS_file =~ s|.*/||; - - $self->_init($country, $NLS_file); + $self->_init($country); $main::lxdebug->leave_sub(); @@ -66,15 +66,13 @@ sub new { sub _init { my $self = shift; my $country = shift; - my $NLS_file = shift; $self->{charset} = Common::DEFAULT_CHARSET; $self->{countrycode} = $country; - $self->{NLS_file} = $NLS_file; if ($country && -d "locale/$country") { local *IN; - if (open(IN, "<", "locale/$country/$NLS_file")) { + if (open(IN, "<", "locale/$country/all")) { my $code = join("", ); eval($code); close(IN); @@ -212,15 +210,25 @@ sub findsub { my ($self, $text) = @_; my $text_rev = $self->{iconv_reverse}->convert($text); - if (exists $self->{subs}{$text_rev}) { - $text = $self->{subs}{$text_rev}; - } elsif ($self->{countrycode} && $self->{NLS_file}) { - $main::form->error("$text not defined in locale/$self->{countrycode}/$self->{NLS_file}"); + $self->{subs} ||= { }; + + if (!$self->{subs}->{$text_rev}) { + $self->{texts_reverse} ||= { reverse %{ $self->{texts} } }; + my $sub_name = $self->{texts_reverse}->{$text_rev}; + $sub_name ||= $text_rev if $text_rev =~ m/^[a-z][a-z0-9_]+$/; + + $main::form->error("$text not defined in locale/$self->{countrycode}/all") if !$sub_name; + + $sub_name = lc $sub_name; + $sub_name =~ s/[^a-z0-9]/_/g; + $sub_name =~ s/_+/_/g; + + $self->{subs}->{$text_rev} = $sub_name; } $main::lxdebug->leave_sub(); - return $text; + return $self->{subs}->{$text_rev}; } sub date { -- 2.20.1