X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FLocale.pm;h=3b91502d5e2f990e11497512768396787f1572a4;hb=991369b17d679e2855f4d5086d0b9769dc2ae1aa;hp=23a399e10fe1b37ea23bfbf8e678640faee12b50;hpb=646cb2aa3a79d7b35a1673fc67cdf802e9cba515;p=kivitendo-erp.git diff --git a/SL/Locale.pm b/SL/Locale.pm index 23a399e10..3b91502d5 100644 --- a/SL/Locale.pm +++ b/SL/Locale.pm @@ -27,7 +27,8 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1335, USA. #====================================================================== # # Translations and number/date formatting @@ -73,6 +74,12 @@ sub new { return $locales_by_country{$country} } +sub is_supported { + my ($country) = @_; + + return -f "locale/$country/all"; +} + sub _init { my $self = shift; my $country = shift; @@ -80,11 +87,27 @@ sub _init { $self->{countrycode} = $country; if ($country && -d "locale/$country") { - local *IN; - if (open(IN, "<", "locale/$country/all")) { - my $code = join("", ); + if (open my $in, "<", "locale/$country/all") { + local $/ = undef; + my $code = <$in>; eval($code); - close(IN); + close($in); + } + + if (-d "locale/$country/more") { + opendir my $dh, "locale/$country/more" or die "can't open locale/$country/more: $!"; + my @files = sort grep -f "locale/$country/more/$_", readdir $dh; + close $dh; + + for my $file (@files) { + if (open my $in, "<", "locale/$country/more/$file") { + local $/ = undef; + my $code = <$in>; + eval($code); + close($in); + $self->{texts}{$_} = $self->{more_texts}{$_} for keys %{ $self->{more_texts} }; + } + } } } @@ -364,8 +387,8 @@ sub parse_date { ($yy, $mm, $dd) = ($date =~ /(..)(..)(..)/); } - $dd *= 1; - $mm *= 1; + $_ ||= 0 for ($dd, $mm, $yy); + $_ *= 1 for ($dd, $mm, $yy); $yy = ($yy < 70) ? $yy + 2000 : $yy; $yy = ($yy >= 70 && $yy <= 99) ? $yy + 1900 : $yy; @@ -376,6 +399,11 @@ sub parse_date { sub parse_date_to_object { my ($self, $string, %params) = @_; + return undef if !defined $string; + + return DateTime->today_local if lc($string) eq 'today'; + return DateTime->today_local->subtract(days => 1) if lc($string) eq 'yesterday'; + $params{dateformat} ||= $::myconfig{dateformat} || 'yy-mm-dd'; $params{numberformat} ||= $::myconfig{numberformat} || '1,000.00'; my $num_separator = $params{numberformat} =~ m{,\d+$} ? ',' : '.'; @@ -383,9 +411,12 @@ sub parse_date_to_object { my ($date_str, $time_str) = split m{\s+}, $string, 2; my ($yy, $mm, $dd) = $self->parse_date(\%params, $date_str); - my $millisecond = 0; - my ($hour, $minute, $second) = split m/:/, $time_str; - ($second, $millisecond) = split quotemeta($num_separator), $second, 2; + my ($hour, $minute, $second) = split m/:/, ($time_str || ''); + $second ||= '0'; + + ($second, my $millisecond) = split quotemeta($num_separator), $second, 2; + $_ ||= 0 for ($hour, $minute, $millisecond); + $millisecond = substr $millisecond, 0, 3; $millisecond .= '0' x (3 - length $millisecond); @@ -436,13 +467,13 @@ sub reformat_date { my ($yy, $mm, $dd) = $self->parse_date($myconfig, $date); - $output_format =~ /d+/; + $output_format =~ /(d+)/; substr($output_format, $-[0], $+[0] - $-[0]) = - sprintf("%0" . (length($&)) . "d", $dd); + sprintf("%0" . (length($1)) . "d", $dd); - $output_format =~ /m+/; + $output_format =~ /(m+)/; substr($output_format, $-[0], $+[0] - $-[0]) = - sprintf("%0" . (length($&)) . "d", $mm); + sprintf("%0" . (length($1)) . "d", $mm); $output_format =~ /y+/; substr($output_format, $-[0], $+[0] - $-[0]) = $yy; @@ -469,9 +500,9 @@ sub format_date { $yy = $yy % 100 if 2 == $yy_len; my $format = ref $myconfig eq '' ? "$myconfig" : $myconfig->{dateformat}; - $format =~ s{ d+ }{ sprintf("%0" . (length($&)) . "d", $dd) }gex; - $format =~ s{ m+ }{ sprintf("%0" . (length($&)) . "d", $mm) }gex; - $format =~ s{ y+ }{ sprintf("%0${yy_len}d", $yy) }gex; + $format =~ s{ (d+) }{ sprintf("%0" . (length($1)) . "d", $dd) }gex; + $format =~ s{ (m+) }{ sprintf("%0" . (length($1)) . "d", $mm) }gex; + $format =~ s{ (y+) }{ sprintf("%0${yy_len}d", $yy) }gex; $main::lxdebug->leave_sub(); @@ -601,7 +632,7 @@ TODO: Describe format_date =item C -Formats the C<$datetime> object accoring to the user's locale setting. +Formats the C<$datetime> object according to the user's locale setting. The parameter C can control whether or not the time component is formatted as well: