package DateTime::Locale::Base;
use strict;
use DateTime::Locale;
use Params::Validate qw( validate_pos );
BEGIN
{
foreach my $field ( qw( id en_complete_name native_complete_name
en_language en_script en_territory en_variant
native_language native_script native_territory native_variant
)
)
{
# remove leading 'en_' for method name
(my $meth_name = $field) =~ s/^en_//;
# also remove 'complete_'
$meth_name =~ s/complete_//;
no strict 'refs';
*{$meth_name} = sub { $_[0]->{$field} };
}
}
my @FormatLengths = qw( short medium long full );
sub new
{
my $c = shift;
return bless { @_,
default_date_format_length => $c->_default_date_format_length,
default_time_format_length => $c->_default_time_format_length,
}, $c;
}
sub language_id { ( DateTime::Locale::parse_id( $_[0]->id ) )[0] }
sub script_id { ( DateTime::Locale::parse_id( $_[0]->id ) )[1] }
sub territory_id { ( DateTime::Locale::parse_id( $_[0]->id ) )[2] }
sub variant_id { ( DateTime::Locale::parse_id( $_[0]->id ) )[3] }
sub month_name { $_[0]->month_names-> [ $_[1]->month_0 ] }
sub month_abbreviation { $_[0]->month_abbreviations->[ $_[1]->month_0 ] }
sub month_narrow { $_[0]->month_narrows-> [ $_[1]->month_0 ] }
sub day_name { $_[0]->day_names-> [ $_[1]->day_of_week_0 ] }
sub day_abbreviation { $_[0]->day_abbreviations->[ $_[1]->day_of_week_0 ] }
sub day_narrow { $_[0]->day_narrows-> [ $_[1]->day_of_week_0 ] }
sub quarter_name { $_[0]->quarter_names-> [ $_[1]->quarter - 1 ] }
sub quarter_abbreviation { $_[0]->quarter_abbreviations->[ $_[1]->quarter - 1 ] }
sub am_pm { $_[0]->am_pms->[ $_[1]->hour < 12 ? 0 : 1 ] }
sub era_name { $_[0]->era_names-> [ $_[1]->ce_year < 0 ? 0 : 1 ] }
sub era_abbreviation { $_[0]->era_abbreviations->[ $_[1]->ce_year < 0 ? 0 : 1 ] }
# backwards compat
*era = \&era_abbreviation;
sub default_date_format
{
my $meth = $_[0]->{default_date_format_length} . '_date_format';
$_[0]->$meth();
}
sub date_formats
{
return
{ map { my $meth = "${_}_date_format";
$_ => $_[0]->$meth() } @FormatLengths }
}
sub default_time_format
{
my $meth = $_[0]->{default_time_format_length} . '_time_format';
$_[0]->$meth();
}
sub time_formats
{
return
{ map { my $meth = "${_}_time_format";
$_ => $_[0]->$meth() } @FormatLengths }
}
sub _datetime_format_pattern_order { $_[0]->date_before_time ? (0, 1) : (1, 0) }
sub full_datetime_format { join ' ', ( $_[0]->full_date_format, $_[0]->full_time_format )[ $_[0]->_datetime_format_pattern_order
] }
sub long_datetime_format { join ' ', ( $_[0]->long_date_format, $_[0]->long_time_format )[ $_[0]->_datetime_format_pattern_order
] }
sub medium_datetime_format { join ' ', ( $_[0]->medium_date_format, $_[0]->medium_time_format )[
$_[0]->_datetime_format_pattern_order ] }
sub short_datetime_format { join ' ', ( $_[0]->short_date_format, $_[0]->short_time_format )[
$_[0]->_datetime_format_pattern_order ] }
sub default_datetime_format { join ' ', ( $_[0]->default_date_format, $_[0]->default_time_format )[
$_[0]->_datetime_format_pattern_order ] }
sub default_date_format_length { $_[0]->{default_date_format_length} }
sub default_time_format_length { $_[0]->{default_time_format_length} }
sub set_default_date_format_length
=1= |