From 6a0ef149665556d651a42f585930f38caffa98c9 Mon Sep 17 00:00:00 2001
From: Guillaume Rousse <guillaume.rousse@renater.fr>
Date: Tue, 11 Feb 2020 14:01:56 +0100
Subject: [PATCH] fix automatic lang detection

---
 lib/AccountManager/App.pm | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/lib/AccountManager/App.pm b/lib/AccountManager/App.pm
index 9b3b4bf..3a71b37 100644
--- a/lib/AccountManager/App.pm
+++ b/lib/AccountManager/App.pm
@@ -68,25 +68,25 @@ sub new {
 
     my $lang;
     my $cookies = CGI::Simple::Cookie->fetch();
-    if ($lang = $self->{cgi}->param('lang')) {
+    if ($self->{cgi}->param('lang')) {
+        $lang = $self->{cgi}->param('lang');
+        $self->{lh} = AccountManager::L10N->get_handle($lang);
         $self->{logger}->debugf("setting language from parameter: %s", $lang);
-    } elsif ($lang = $cookies->{lang} ? $cookies->{lang}->value() : undef) {
+    } elsif ($cookies->{lang}) {
+        $lang = $cookies->{lang}->value();
+        $self->{lh} = AccountManager::L10N->get_handle($lang);
         $self->{logger}->debugf("setting language from cookie: %s", $lang);
     } elsif ($lang = $ENV{HTTP_ACCEPT_LANGUAGE}) {
+        $lang = I18N::LangTags::Detect::detect();
+        if ($lang =~ /^(\w\w)-(\w\w)$/) {
+            $lang = $1;
+        }
+        $self->{lh} = AccountManager::L10N->get_handle($lang);
         $self->{logger}->debugf("setting language from HTTP_ACCEPT_LANGUAGE header: %s", $lang);
     } else {
+        $self->{lh} = AccountManager::L10N->get_handle('en');
         $self->{logger}->debugf("using default language");
     }
-    $self->{lh} = AccountManager::L10N->get_handle($lang ? $lang: ());
-    if (!$self->{lh}) {
-        $self->{logger}->fatal("Unable to get suitable language handle");
-        $self->respond(
-            template => 'errors.tt2.html',
-            data     => {
-                errors  => [ 'internal' ]
-            }
-        );
-    }
     $self->{lh}->load_custom_lexicon($args{custom_l10n});
 
     if (!$self->{configuration}->{mailer}) {
-- 
GitLab