Skip to content

Commit

Permalink
improved exception handling of Mojolicious::Plugin::I18N
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed May 5, 2012
1 parent e709659 commit 0baacda
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 9 deletions.
1 change: 1 addition & 0 deletions Changes
Expand Up @@ -5,6 +5,7 @@ This file documents the revision history for Perl extension Mojolicious.
- Improved 32bit Perl support of Mojo::Transaction::WebSocket.
(mikemagowan, sri)
- Improved exception handling of application and config file loaders.
- Improved exception handling of Mojolicious::Plugin::I18N.
- Improved renderer log messages.
- Improved documentation.
- Improved tests.
Expand Down
21 changes: 12 additions & 9 deletions lib/Mojolicious/Plugin/I18N.pm
Expand Up @@ -3,22 +3,25 @@ use Mojo::Base 'Mojolicious::Plugin';

use I18N::LangTags;
use I18N::LangTags::Detect;
use Mojo::Loader;

# "Can we have Bender burgers again?
# No, the cat shelter’s onto me."
sub register {
my ($self, $app, $conf) = @_;

# Initialize
my $ns = $conf->{namespace} || ((ref $app) . "::I18N");
my $name = $conf->{namespace} || ((ref $app) . "::I18N");
my $default = $conf->{default} || 'en';
die qq/Couldn't initialize I18N class "$ns": $@/
unless eval "package $ns; { use base 'Locale::Maketext'; 1 }";
my $dc = "${ns}::$default";
eval "require $dc;";
die qq/Couldn't initialize default lexicon class "$dc": $@/
unless eval "\%${dc}::Lexicon"
|| eval "package $dc; { use base '$ns'; our \%Lexicon = (_AUTO => 1); }";
die qq/Couldn't initialize I18N class "$name": $@/
unless eval "package $name; { use base 'Locale::Maketext'; 1 }";
my $dc = "${name}::$default";
if (my $e = Mojo::Loader->load($dc)) {
die qq/Couldn't load default lexicon class "$dc": $e/ if ref $e;
die qq/Couldn't initialize default lexicon class "$dc": $@/
unless eval
"package $dc; { use base '$name'; our \%Lexicon = (_AUTO => 1); }";
}

# Add hook
$app->hook(
Expand All @@ -34,7 +37,7 @@ sub register {

# Handler
$self->stash->{i18n}
= Mojolicious::Plugin::I18N::_Handler->new(namespace => $ns);
= Mojolicious::Plugin::I18N::_Handler->new(namespace => $name);

# Languages
$self->stash->{i18n}->languages(@languages, $default);
Expand Down

0 comments on commit 0baacda

Please sign in to comment.