/usr/local/CPAN/Petal/Petal/TranslationService/Gettext.pm
package Petal::TranslationService::Gettext;
use Petal::TranslationService::MOFile;
use warnings;
use strict;
sub new
{
my $class = shift;
return bless {
# defaults...
locale_dir => '/usr/share/locale',
target_lang => 'en',
# optional overriding args
@_,
}, $class;
}
sub maketext
{
my $self = shift;
my $tsrv = $self->mo_file_translation_service();
ref $tsrv and return $tsrv->maketext (@_);
return;
}
sub target_lang
{
my $self = shift;
$self->{target_lang} =~ s/-/_/;
return $self->{target_lang};
}
sub mo_file_translation_service
{
my $self = shift;
my $domain = $Petal::I18N::Domain || 'default';
$self->{mo_file_tranlation_services} ||= {};
$self->{mo_file_tranlation_services}->{$domain} ||= $self->_mo_file_translation_service();
return $self->{mo_file_tranlation_services}->{$domain};
}
sub _mo_file_translation_service
{
my $self = shift;
my $target_lang = $self->target_lang() || die 'target_lang() returned undef';
my $domain = $Petal::I18N::Domain || 'default';
my $res = undef;
$res = $self->_instanciate_mo_file_tranlation_service_if_file_exists ($target_lang);
$res && return $res;
$target_lang =~ s/_.*$//;
$res = $self->_instanciate_mo_file_tranlation_service_if_file_exists ($target_lang);
$res && return $res;
return '__none__';
}
sub _instanciate_mo_file_tranlation_service_if_file_exists
{
my $self = shift;
my $target_lang = $self->{target_lang};
my $domain = $Petal::I18N::Domain || 'default';
my $locale_dir = $self->{locale_dir};
$locale_dir =~ s/\/$//;
my $mo_file_relative_path = "/$target_lang/LC_MESSAGES/$domain.mo";
my $mo_file_absolute_path = $locale_dir . $mo_file_relative_path;
-e $mo_file_absolute_path or return;
return Petal::TranslationService::MOFile->new ($mo_file_absolute_path);
}
1;
__END__