summaryrefslogtreecommitdiff
path: root/lib/Plack/Middleware
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-05-27 20:36:11 +0200
committerfranck cuny <franck@lumberjaph.net>2010-05-27 20:36:11 +0200
commitc8601d93f056efcc018587a6c79cde2f61aeb224 (patch)
tree3e04478f483f5aff3f62140bd627a1ed7b437f2a /lib/Plack/Middleware
parentinitial commit (diff)
downloadplack-middleware-i18n-c8601d93f056efcc018587a6c79cde2f61aeb224.tar.gz
detect locale from http headers
Diffstat (limited to '')
-rw-r--r--lib/Plack/Middleware/i18n.pm44
1 files changed, 29 insertions, 15 deletions
diff --git a/lib/Plack/Middleware/i18n.pm b/lib/Plack/Middleware/i18n.pm
index 28d4536..6a6e927 100644
--- a/lib/Plack/Middleware/i18n.pm
+++ b/lib/Plack/Middleware/i18n.pm
@@ -2,8 +2,10 @@ package Plack::Middleware::i18n;
use strict;
use warnings;
+
use Plack::Util;
use Plack::Util::Accessor qw/default_lang/;
+use Plack::Request;
use I18N::LangTags;
use I18N::LangTags::Detect;
@@ -12,23 +14,35 @@ our $VERSION = '0.01';
use parent 'Plack::Middleware';
sub call {
- my $self = shift;
- my $res = $self->app->(@_);
-
- my $h = Plack::Util::headers($res->[1]);
-
- my @languages = ($self->default_lang) if $self->default_lang;
- push @languages,
- I18N::LangTags::implicate_supers(
- I18N::LangTags::Detect->http_accept_langs($h->get('Accept-Language')));
-
- # XXX store languages in psgix.languages
- # XXX if session, store in session too
- # XXX maybe redirect to appropriate location ?
-
- return $res;
+ my ($self, $env) = @_;
+
+ my $locale;
+
+ if (my $lang = $env->{'HTTP_ACCEPT_LANGUAGE'}) {
+ $locale = (
+ split(
+ '-',
+ ( I18N::LangTags::implicate_supers(
+ I18N::LangTags::Detect->http_accept_langs($lang)
+ )
+ )[0]
+ )
+ )[0];
+ }
+ else {
+ $locale = $self->default_lang // 'en';
+ }
+
+ $env->{'psgix.locale'} = $locale;
+
+ if (my $session = $env->{'psgix.session'}) {
+ $session->{locale} = $locale;
+ }
+
+ $self->app->($env);
}
+
1;
__END__