Acme-MetaSyntactic
view release on metacpan or search on metacpan
lib/Acme/MetaSyntactic/Locale.pm view on Meta::CPAN
package Acme::MetaSyntactic::Locale;
use strict;
use warnings;
use Acme::MetaSyntactic (); # do not export metaname and friends
use Acme::MetaSyntactic::MultiList;
use List::Util qw( shuffle );
use Carp;
our @ISA = qw( Acme::MetaSyntactic::MultiList );
our $VERSION = '1.000';
sub init {
# alias the older package variable %Locale to %MultiList
no strict 'refs';
*{"$_[0]::Locale"} = \%{"$_[0]::MultiList"};
${"$_[0]::Separator"} = '_';
# call the parent class init code
goto &Acme::MetaSyntactic::MultiList::init;
}
sub new {
my $class = shift;
no strict 'refs';
my $self = bless { @_, cache => [] }, $class;
# compute some defaults
if( ! exists $self->{category} ) {
$self->{category} =
exists $self->{lang}
? $self->{lang}
: $ENV{LANGUAGE} || $ENV{LANG} || '';
if( !$self->{category} && $^O eq 'MSWin32' ) {
eval { require Win32::Locale; };
$self->{category} = Win32::Locale::get_language() unless $@;
}
}
my $cat = $self->{category};
# support for territories
if ( $cat && $cat ne ':all' ) {
($cat) = $cat =~ /^([-A-Za-z_]+)/;
$cat = lc( $cat || '' );
1 while $cat
&& !exists ${"$class\::MultiList"}{$cat}
&& $cat =~ s/_?[^_]*$//;
}
# fall back to last resort
$self->{category} = $cat || ${"$class\::Default"};
$self->_compute_base();
return $self;
}
*lang = \&Acme::MetaSyntactic::MultiList::category;
*languages = \&Acme::MetaSyntactic::MultiList::categories;
1;
__END__
=head1 NAME
Acme::MetaSyntactic::Locale - Base class for multilingual themes
=head1 SYNOPSIS
package Acme::MetaSyntactic::digits;
use Acme::MetaSyntactic::Locale;
our @ISA = ( Acme::MetaSyntactic::Locale );
__PACKAGE__->init();
1;
=head1 NAME
Acme::MetaSyntactic::digits - The numbers theme
=head1 DESCRIPTION
You can count on this module. Almost.
=cut
__DATA__
( run in 1.586 second using v1.01-cache-2.11-cpan-39bf76dae61 )