X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/7ecdb94715674d62df85fc746fe06db10c7ade9b..38e08b2f3ae7b386eb22f2475077cf1c3a1711a7:/SL/Locale.pm diff --git a/SL/Locale.pm b/SL/Locale.pm index b1c8205e8..7c524e984 100644 --- a/SL/Locale.pm +++ b/SL/Locale.pm @@ -55,7 +55,7 @@ sub new { my ($type, $country) = @_; - $country ||= $::language; + $country ||= $::lx_office_conf{system}->{language}; $country =~ s|.*/||; $country =~ s|\.||g; @@ -96,8 +96,8 @@ sub _init { } } - my $db_charset = $main::dbcharset || Common::DEFAULT_CHARSET; - $self->{is_utf8} = (any { lc($::dbcharset || '') eq $_ } qw(utf8 utf-8 unicode)) ? 1 : 0; + my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET; + $self->{is_utf8} = (any { lc($::lx_office_conf{system}->{dbcharset} || '') eq $_ } qw(utf8 utf-8 unicode)) ? 1 : 0; if ($self->{is_utf8}) { binmode STDOUT, ":utf8"; @@ -109,6 +109,7 @@ sub _init { $self->{iconv_english} = SL::Iconv->new('ASCII', $db_charset); $self->{iconv_iso8859} = SL::Iconv->new('ISO-8859-15', $db_charset); $self->{iconv_to_iso8859} = SL::Iconv->new($db_charset, 'ISO-8859-15'); + $self->{iconv_utf8} = SL::Iconv->new('UTF-8', $db_charset); $self->_read_special_chars_file($country); @@ -226,11 +227,24 @@ sub text { return $text; } +sub lang_to_locale { + my ($self, $requested_lang) = @_; + + my $requested_locale; + $requested_locale = 'de' if $requested_lang =~ m/^_(de|deu|ger)/i; + $requested_locale = 'en' if $requested_lang =~ m/^_(en|uk|us|gr)/i; + $requested_locale = 'fr' if $requested_lang =~ m/^_fr/i; + $requested_locale ||= 'de'; + + return $requested_locale; +} + sub findsub { $main::lxdebug->enter_sub(); my ($self, $text) = @_; my $text_rev = lc $self->{iconv_reverse}->convert($text); + $text_rev =~ s/[\s\-]+/_/g; if (!$self->{texts_reverse}) { $self->{texts_reverse} = { }; @@ -240,7 +254,7 @@ sub findsub { $original =~ s/_+/_/g; $translation = lc $translation; - $translation =~ s/\s+/_/g; + $translation =~ s/[\s\-]+/_/g; $self->{texts_reverse}->{$translation} ||= [ ]; push @{ $self->{texts_reverse}->{$translation} }, $original; @@ -338,13 +352,13 @@ sub date { } sub parse_date { - $main::lxdebug->enter_sub(); + $main::lxdebug->enter_sub(2); my ($self, $myconfig, $date, $longformat) = @_; my ($spc, $yy, $mm, $dd); unless ($date) { - $main::lxdebug->leave_sub(); + $main::lxdebug->leave_sub(2); return (); } @@ -371,7 +385,7 @@ sub parse_date { $yy = ($yy < 70) ? $yy + 2000 : $yy; $yy = ($yy >= 70 && $yy <= 99) ? $yy + 1900 : $yy; - $main::lxdebug->leave_sub(); + $main::lxdebug->leave_sub(2); return ($yy, $mm, $dd); } @@ -382,12 +396,34 @@ sub parse_date_to_object { return $yy && $mm && $dd ? DateTime->new(year => $yy, month => $mm, day => $dd) : undef; } +sub format_date_object { + my ($self, $datetime, %params) = @_; + + my $format = $::myconfig{dateformat} || 'yyyy-mm-dd'; + $format =~ s/yyyy/\%Y/; + $format =~ s/yy/\%y/; + $format =~ s/mm/\%m/; + $format =~ s/dd/\%d/; + + my $precision = $params{precision} || 'day'; + $precision =~ s/s$//; + my %precision_spec_map = ( + second => '%H:%M:%S', + minute => '%H:%M', + hour => '%H', + ); + + $format .= ' ' . $precision_spec_map{$precision} if $precision_spec_map{$precision}; + + return $datetime->strftime($format); +} + sub reformat_date { - $main::lxdebug->enter_sub(); + $main::lxdebug->enter_sub(2); my ($self, $myconfig, $date, $output_format, $longformat) = @_; - $main::lxdebug->leave_sub() and return "" unless ($date); + $main::lxdebug->leave_sub(2) and return "" unless ($date); my ($yy, $mm, $dd) = $self->parse_date($myconfig, $date); @@ -402,7 +438,7 @@ sub reformat_date { $output_format =~ /y+/; substr($output_format, $-[0], $+[0] - $-[0]) = $yy; - $main::lxdebug->leave_sub(); + $main::lxdebug->leave_sub(2); return $output_format; } @@ -495,4 +531,147 @@ sub restore_numberformat { $myconfig->{numberformat} = $self->{saved_numberformat} if $self->{saved_numberformat}; } +sub get_local_time_zone { + my $self = shift; + $self->{local_time_zone} ||= DateTime::TimeZone->new(name => 'local'); + return $self->{local_time_zone}; +} + 1; +__END__ + +=pod + +=encoding utf8 + +=head1 NAME + +Locale - Functions for dealing with locale-dependant information + +=head1 SYNOPSIS + + use Locale; + use DateTime; + + my $locale = Locale->new('de'); + my $now = DateTime->now_local; + print "Current date and time: ", $::locale->format_date_object($now, precision => 'second'), "\n"; + +=head1 OVERVIEW + +TODO: write overview + +=head1 FUNCTIONS + +=over 4 + +=item C + +TODO: Describe date + +=item C + +TODO: Describe findsub + +=item C + +TODO: Describe format_date + +=item C + +Formats the C<$datetime> object accoring to the user's locale setting. + +The parameter C can control whether or not the time +component is formatted as well: + +=over 4 + +=item * C + +Only format the year, month and day. This is also the default. + +=item * C + +Add the hour to the date. + +=item * C + +Add hour:minute to the date. + +=item * C + +Add hour:minute:second to the date. + +=back + +=item C + +TODO: Describe get_local_time_zone + +=item C + +TODO: Describe is_utf8 + +=item C + +TODO: Describe lang_to_locale + +=item C + +TODO: Describe new + +=item C + +TODO: Describe parse_date + +=item C + +TODO: Describe parse_date_to_object + +=item C + +TODO: Describe quote_special_chars + +=item C + +TODO: Describe raw_io_active + +=item C + +TODO: Describe reformat_date + +=item C + +TODO: Describe remap_special_chars + +=item C + +TODO: Describe restore_numberformat + +=item C + +TODO: Describe set_numberformat_wo_thousands_separator + +=item C + +TODO: Describe text + +=item C + +TODO: Describe unquote_special_chars + +=item C + +TODO: Describe with_raw_io + +=back + +=head1 BUGS + +Nothing here yet. + +=head1 AUTHOR + +Moritz Bunkus Em.bunkus@linet-services.deE + +=cut