X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FLocale.pm;h=b6065da7761d8f9df1054c1c9fc49ed242603d29;hb=9b36c5639d01f1c9059381c12fac5d57ff614710;hp=7c524e984d153bcbf7f9658062b631ff1378fb2a;hpb=38e08b2f3ae7b386eb22f2475077cf1c3a1711a7;p=kivitendo-erp.git diff --git a/SL/Locale.pm b/SL/Locale.pm index 7c524e984..b6065da77 100644 --- a/SL/Locale.pm +++ b/SL/Locale.pm @@ -77,7 +77,6 @@ sub _init { my $self = shift; my $country = shift; - $self->{charset} = Common::DEFAULT_CHARSET; $self->{countrycode} = $country; if ($country && -d "locale/$country") { @@ -87,29 +86,17 @@ sub _init { eval($code); close(IN); } - - if (open IN, "<", "locale/$country/charset") { - $self->{charset} = ; - close IN; - - chomp $self->{charset}; - } } - 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; + binmode STDOUT, ":utf8"; + binmode STDERR, ":utf8"; - if ($self->{is_utf8}) { - binmode STDOUT, ":utf8"; - binmode STDERR, ":utf8"; - } - - $self->{iconv} = SL::Iconv->new($self->{charset}, $db_charset); - $self->{iconv_reverse} = SL::Iconv->new($db_charset, $self->{charset}); - $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->{iconv} = SL::Iconv->new('UTF-8', 'UTF-8'); + $self->{iconv_reverse} = SL::Iconv->new('UTF-8', 'UTF-8'); + $self->{iconv_english} = SL::Iconv->new('ASCII', 'UTF-8'); + $self->{iconv_iso8859} = SL::Iconv->new('ISO-8859-15', 'UTF-8'); + $self->{iconv_to_iso8859} = SL::Iconv->new('UTF-8', 'ISO-8859-15'); + $self->{iconv_utf8} = SL::Iconv->new('UTF-8', 'UTF-8'); $self->_read_special_chars_file($country); @@ -121,12 +108,6 @@ sub _init { (qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)); } -sub is_utf8 { - my $self = shift; - my $handle = shift; - return $self->{is_utf8} && (!$handle || $handle->is_utf8); -} - sub _handle_markup { my $self = shift; my $str = shift; @@ -214,6 +195,8 @@ sub text { my $self = shift; my $text = shift; + return $text->translated if (ref($text) || '') eq 'SL::Locale::String'; + if ($self->{texts}->{$text}) { $text = $self->{iconv}->convert($self->{texts}->{$text}); } else { @@ -277,73 +260,74 @@ sub date { my ($self, $myconfig, $date, $longformat) = @_; + if (!$date) { + $main::lxdebug->leave_sub(); + return ''; + } + my $longdate = ""; my $longmonth = ($longformat) ? 'LONG_MONTH' : 'SHORT_MONTH'; my ($spc, $yy, $mm, $dd); - if ($date) { - # get separator - $spc = $myconfig->{dateformat}; - $spc =~ s/\w//g; - $spc = substr($spc, 1, 1); + $spc = $myconfig->{dateformat}; + $spc =~ s/\w//g; + $spc = substr($spc, 1, 1); - if ($date =~ /\D/) { - if ($myconfig->{dateformat} =~ /^yy/) { - ($yy, $mm, $dd) = split /\D/, $date; - } - if ($myconfig->{dateformat} =~ /^mm/) { - ($mm, $dd, $yy) = split /\D/, $date; - } - if ($myconfig->{dateformat} =~ /^dd/) { - ($dd, $mm, $yy) = split /\D/, $date; - } - } else { - $date = substr($date, 2); - ($yy, $mm, $dd) = ($date =~ /(..)(..)(..)/); + if ($date =~ /\D/) { + if ($myconfig->{dateformat} =~ /^yy/) { + ($yy, $mm, $dd) = split /\D/, $date; + } + if ($myconfig->{dateformat} =~ /^mm/) { + ($mm, $dd, $yy) = split /\D/, $date; + } + if ($myconfig->{dateformat} =~ /^dd/) { + ($dd, $mm, $yy) = split /\D/, $date; } + } else { + $date = substr($date, 2); + ($yy, $mm, $dd) = ($date =~ /(..)(..)(..)/); + } - $dd *= 1; - $mm--; - $yy = ($yy < 70) ? $yy + 2000 : $yy; - $yy = ($yy >= 70 && $yy <= 99) ? $yy + 1900 : $yy; + $dd *= 1; + $mm--; + $yy = ($yy < 70) ? $yy + 2000 : $yy; + $yy = ($yy >= 70 && $yy <= 99) ? $yy + 1900 : $yy; - if ($myconfig->{dateformat} =~ /^dd/) { - if (defined $longformat && $longformat == 0) { - $mm++; - $dd = "0$dd" if ($dd < 10); - $mm = "0$mm" if ($mm < 10); - $longdate = "$dd$spc$mm$spc$yy"; - } else { - $longdate = "$dd"; - $longdate .= ($spc eq '.') ? ". " : " "; - $longdate .= &text($self, $self->{$longmonth}[$mm]) . " $yy"; - } - } elsif ($myconfig->{dateformat} eq "yyyy-mm-dd") { - - # Use German syntax with the ISO date style "yyyy-mm-dd" because - # Lx-Office is mainly used in Germany or German speaking countries. - if (defined $longformat && $longformat == 0) { - $mm++; - $dd = "0$dd" if ($dd < 10); - $mm = "0$mm" if ($mm < 10); - $longdate = "$yy-$mm-$dd"; - } else { - $longdate = "$dd. "; - $longdate .= &text($self, $self->{$longmonth}[$mm]) . " $yy"; - } + if ($myconfig->{dateformat} =~ /^dd/) { + if (defined $longformat && $longformat == 0) { + $mm++; + $dd = "0$dd" if ($dd < 10); + $mm = "0$mm" if ($mm < 10); + $longdate = "$dd$spc$mm$spc$yy"; } else { - if (defined $longformat && $longformat == 0) { - $mm++; - $dd = "0$dd" if ($dd < 10); - $mm = "0$mm" if ($mm < 10); - $longdate = "$mm$spc$dd$spc$yy"; - } else { - $longdate = &text($self, $self->{$longmonth}[$mm]) . " $dd, $yy"; - } + $longdate = "$dd"; + $longdate .= ($spc eq '.') ? ". " : " "; + $longdate .= &text($self, $self->{$longmonth}[$mm]) . " $yy"; + } + } elsif ($myconfig->{dateformat} eq "yyyy-mm-dd") { + + # Use German syntax with the ISO date style "yyyy-mm-dd" because + # kivitendo is mainly used in Germany or German speaking countries. + if (defined $longformat && $longformat == 0) { + $mm++; + $dd = "0$dd" if ($dd < 10); + $mm = "0$mm" if ($mm < 10); + $longdate = "$yy-$mm-$dd"; + } else { + $longdate = "$dd. "; + $longdate .= &text($self, $self->{$longmonth}[$mm]) . " $yy"; + } + } else { + if (defined $longformat && $longformat == 0) { + $mm++; + $dd = "0$dd" if ($dd < 10); + $mm = "0$mm" if ($mm < 10); + $longdate = "$mm$spc$dd$spc$yy"; + } else { + $longdate = &text($self, $self->{$longmonth}[$mm]) . " $dd, $yy"; } - } $main::lxdebug->leave_sub(); @@ -400,8 +384,7 @@ 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/yy(?:yy)?/\%Y/; $format =~ s/mm/\%m/; $format =~ s/dd/\%d/; @@ -512,7 +495,7 @@ sub with_raw_io { $self->{raw_io_active} = 1; binmode $fh, ":raw"; $code->(); - binmode $fh, ":utf8" if $self->is_utf8; + binmode $fh, ":utf8"; $self->{raw_io_active} = 0; } @@ -537,7 +520,20 @@ sub get_local_time_zone { return $self->{local_time_zone}; } +sub language_join { + my ($self, $items, %params) = @_; + + $items ||= []; + $params{conjunction} ||= $::locale->text('and'); + my $num = scalar @{ $items }; + + return 0 == $num ? '' + : 1 == $num ? $items->[0] + : join(', ', @{ $items }[0..$num - 2]) . ' ' . $params{conjunction} . ' ' . $items->[$num - 1]; +} + 1; + __END__ =pod @@ -546,7 +542,7 @@ __END__ =head1 NAME -Locale - Functions for dealing with locale-dependant information +Locale - Functions for dealing with locale-dependent information =head1 SYNOPSIS @@ -608,10 +604,6 @@ Add hour:minute:second to the date. TODO: Describe get_local_time_zone -=item C - -TODO: Describe is_utf8 - =item C TODO: Describe lang_to_locale