=head1 NAME LedgerSMB::Locale Locale handling class for LedgerSMB =head1 SYNOPSIS Locale support module for LedgerSMB. Uses Locale::Maketext::Lexicon as a base. =head1 METHODS =over =item get_handle ($language_code) Returns a locale handle for accessing the other methods. Inherited from Locale::Maketext. =item text ($string, @params) Returns the translation for the given string. This is a legacy wrapper that merely calls $self->maketext. =item date ($myconfig, $date, $longformat) Returns the given date after formatting it. $longformat is a ternary flag that determines how the date is formatted. If $longformat is true, the date will be given in the form of "_('September') 23 2007". If $longformat is false but defined, the date will be in the form of "_('Sep') 23 2007" unless the date is given in the form 'yyyy.mm.dd', in which case it is returned as-is. If $longformat is not defined, the date will be output in the format specified by $myconfig->{dateformat}. =back =head1 Copyright (C) 2006, The LedgerSMB core team. #==================================================================== # # Locale support module for LedgerSMB # LedgerSMB::Locale # # LedgerSMB # Small Medium Business Accounting software # http://www.ledgersmb.org/ # # # Copyright (C) 2006 # This work contains copyrighted information from a number of sources # all used with permission. It is released under the GNU General # Public License Version 2 or, at your option, any later version. # See COPYRIGHT file for details. # # This file contains source code included with or based on SQL-Ledger # which is Copyright Dieter Simader and DWS Systems Inc. 2000-2005 # and licensed under the GNU General Public License version 2 or, at # your option, any later version. For a full list including contact # information of contributors, maintainers, and copyright holders, # see the CONTRIBUTORS file. # # Original Copyright Notice from SQL-Ledger 2.6.17 (before the fork): # Copyright (C) 2000 # # Author: DWS Systems Inc. # Web: http://www.sql-ledger.org # # Contributors: Thomas Bayen # Antti Kaihola # Moritz Bunkus (tex) # Jim Rawlings (DB2) # #==================================================================== =cut package LedgerSMB::Locale; use base 'Locale::Maketext'; use Locale::Maketext::Lexicon; use Encode; Locale::Maketext::Lexicon->import( { '*' => [ Gettext => "${LedgerSMB::Sysconfig::localepath}/*.po", ], _auto => 1, _decode => 1, } ); sub text { my ( $self, $text, @params ) = @_; return $self->maketext( $text, @params ); } ##sub date { ## my ($self, $myconfig, $date, $longformat) = @_; ## return $date; ##} sub date { my ( $self, $myconfig, $date, $longformat ) = @_; my @longmonth = (qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)); @longmonth = ( "January", "February", "March", "April", "May ", "June", "July", "August", "September", "October", "November", "December" ) if $longformat; my $longdate = ''; return '' if not $date; my $spc = ''; my $yy = ''; my $mm = ''; my $dd = ''; # get separator $spc = $myconfig->{dateformat}; $spc =~ s/\w//g; $spc = substr( $spc, 0, 1 ); if ( !$longformat && $date =~ /^\d{4}\D/ ) { # reparsing date at this point # causes problems! return $date; } if ( $date =~ /\D/ ) { if ( $myconfig->{dateformat} =~ /^yy/ ) { ( $yy, $mm, $dd ) = split /\D/, $date; } elsif ( $myconfig->{dateformat} =~ /^mm/ ) { ( $mm, $dd, $yy ) = split /\D/, $date; } elsif ( $myconfig->{dateformat} =~ /^dd/ ) { ( $dd, $mm, $yy ) = split /\D/, $date; } } else { $date = substr( $date, 2 ); ( $yy, $mm, $dd ) = ( $date =~ /(..)(..)(..)/ ); } $dd *= 1; $yy += 2000 if length $yy == 2; $dd = substr( "0$dd", -2 ); $mm = substr( "0$mm", -2 ); if ( $myconfig->{dateformat} =~ /^dd/ ) { $longdate = "$dd$spc$mm$spc$yy"; } elsif ( $myconfig->{dateformat} =~ /^yy/ ) { $longdate = "$yy$spc$mm$spc$dd"; } else { $longdate = "$mm$spc$dd$spc$yy"; } if ( defined $longformat ) { $longdate = $self->text( $longmonth[ --$mm ] ) . " $dd $yy"; } $longdate; } 1;