Activator
view release on metacpan or search on metacpan
lib/Activator/Dictionary.pm view on Meta::CPAN
}
DEBUG( "Found entry for lang '$mode'");
return $self->{ $mode }->{ $realm }->{ $key };
}
}
DEBUG( "No valid fail_mode found. Returning undef");
return;
}
=head2 get_dict( $lang )
Returns a reference to the Activator::Dictionary object. Sets all
future lookups to use the $lang passed in. If $lang is not passed in,
uses 'Activator::Dictionary' registry value for 'default_lang'. If
$lang cannot be determined, throws Activator::Exception::Dictionary.
=cut
sub get_dict {
my ($pkg, $lang ) = @_;
my $self = &new( @_ );
# first call
if( !exists $self->{config} ) {
$self->_init_config();
}
# first call for $lang
$lang ||= $self->{cur_lang} || $self->{config}->{default_lang};
if ( !$lang ) {
Activator::Exception::Dictionary->throw( 'lang', 'undefined' );
}
if( !exists $self->{ $lang } ) {
try eval {
$self->_init_lang( $lang );
};
if ( catch my $e ) {
Activator::Exception::Dictionary->throw( 'init_lang', 'failed', $e );
}
}
$self->{cur_lang} = $lang;
return $self;
}
=head2 new( $lang )
Creates a dictionary object. Not very useful, as all it does is create
an uninitialized instance of an Activator::Dictionary object.
=cut
# Contstructor. Implements singleton.
sub new {
my ( $pkg, $lang ) = @_;
my $self = bless( { LOG_LEVEL_FOR_FILE_LOAD => 'WARN' }, $pkg);
$self->_init_StrongSingleton();
return $self;
}
sub _init_config {
my ($self) = @_;
# old config format
my $config = Activator::Registry->get('Activator::Dictionary');
if ( !$config ) {
# new format
$config = Activator::Registry->get('Activator->Dictionary');
}
$self->{config}->{default_realm} = $config->{default_realm} || 'default';
$self->{config}->{default_lang} = $config->{default_lang} || 'en';
$self->{config}->{dict_tables} = $config->{dict_tables};
$self->{config}->{dict_files} = $config->{dict_files};
$self->{config}->{db_alias} = $config->{db_alias};
$self->{config}->{fail_mode} = $config->{fail_mode};
if ( !( defined( $self->{config}->{dict_files} ) ||
defined( $self->{config}->{dict_tables} )
) ) {
Activator::Exception::Dictionary->throw( 'tables_or_files', 'undefined' );
}
if ( defined( $self->{config}->{dict_tables} ) &&
!defined( $self->{config}->{db_alias} ) ) {
Activator::Exception::Dictionary->throw( 'db_alias', 'missing' );
}
}
sub _init_lang {
my ($self, $lang) = @_;
my $processed = 0;
# import all the realms for this language from the db
if ( defined( $self->{config}->{dict_tables} ) ) {
my ( $sql, $rows, $row, $col, $realm, $key );
foreach my $table ( @{ $self->{config}->{dict_tables} } ) {
$sql = "SELECT * FROM $table WHERE lang = ?";
try eval {
$rows = Activator::DB->getall_hashrefs( $sql, [ $lang ], connect => 'def' );
};
if ( catch my $e ) {
Activator::Exception::Dictionary->throw( 'dict_tables',
'misconfigured',
"Activator::Dictionary caught: \n$e" );
}
foreach $row ( @$rows ) {
foreach $col ( keys %$row ) {
if ( $col !~/_id$|realm|lang|key_prefix|last_modified/ ) {
$realm = $row->{realm};
$key = "$row->{key_prefix}.$col";
if ( exists( $self->{ $lang }->{ $realm }->{ $key } ) ) {
local $Log::Log4perl::caller_depth;
( run in 0.884 second using v1.01-cache-2.11-cpan-39bf76dae61 )