package Hello::Locale;
use strict;
use Encode qw(encode);
require Locale::Maketext::Lexicon;
use base qw( Locale::Maketext);
our %Lexicon = (
_AUTO => 1
);
sub get_handle {
my $class = shift;
my( $lang, $enc ) = @_;
my $self = $class->SUPER::get_handle($lang);
$self->{encoding} = $enc;
$self;
}
sub maketext {
my $self = shift;
my @params = @_;
my $result = encode( $self->encoding(), $self->SUPER::maketext( @params));
$result;
}
sub load {
my $self = shift;
my %params = @_;
Locale::Maketext::Lexicon->import( { $self->language_tag() => [ %params], _decode => 1});
1;
}
package Hello::Locale::ru;
use Hello::Locale;
use base qw( Hello::Locale);
our %Lexicon = ();
our $LEXICON_LOADED = 1;
1;
####
#!/usr/local/bin/perl
use strict;
use Hello::Locale;
use Data::Dumper;
my $filename = shift;
my $lh = Hello::Locale->get_handle("ru","KOI8-R");
$lh->load( Messages => $filename);
no strict 'refs';
print Dumper( $lh );
print "Lexicon loaded\n" if ${ref($lh)."\::LEXICON_LOADED"} ;
print Dumper( %{ref($lh)."\::Lexicon" } );
####
% ./test.pl file.msg
$VAR1 = bless( {
'encoding' => 'KOI8-R',
'blacklist' => {
'get_handle' => 1,
'new' => 1,
'encoding' => 1,
'language_tag' => 1,
'init' => 1,
'failure_handler_auto' => 1,
'_ambient_langprefs' => 1,
'_langtag_munging' => 1,
'_die_pointing' => 1,
'maketext' => 1,
'_compile' => 1,
'_try_use' => 1,
'__ANON__' => 1,
'whitelist' => 1,
'fallback_languages' => 1,
'_lex_refs' => 1,
'blacklist' => 1,
'fail_with' => 1,
'_add_supers' => 1,
'fallback_language_classes' => 1
}
}, 'Hello::Locale::ru' );
Lexicon loaded
Segmentation fault (core dumped)