From 0de17780cb0336735ac1127c4f9840c540dce206 Mon Sep 17 00:00:00 2001
From: Hanne Moa <hanne.moa@uninett.no>
Date: Thu, 24 Nov 2016 11:30:03 +0100
Subject: [PATCH] Handle renamed/non-standard langcodes

---
 lib/SimpleSAML/Locale/Language.php     | 15 +++++++++++++++
 lib/SimpleSAML/Locale/Localization.php | 10 ++++++++++
 2 files changed, 25 insertions(+)

diff --git a/lib/SimpleSAML/Locale/Language.php b/lib/SimpleSAML/Locale/Language.php
index a4f32d67c..b280593f3 100644
--- a/lib/SimpleSAML/Locale/Language.php
+++ b/lib/SimpleSAML/Locale/Language.php
@@ -326,6 +326,21 @@ class Language
     }
 
 
+    /**
+     * Return an alias for a langcode, if any
+     *
+     * @return string The alias, or null if alias not found
+     */
+    public function getLanguageCodeAlias($langcode)
+    {
+        if (isset($this->defaultLanguageMap[$langcode]) {
+            return $this->defaultLanguageMap[$langcode];
+        }
+        // No alias found, which is fine
+        return null;
+    }
+
+
     /**
      * Return an indexed list of all languages available.
      *
diff --git a/lib/SimpleSAML/Locale/Localization.php b/lib/SimpleSAML/Locale/Localization.php
index 3f7a7b101..1fc1cb74b 100644
--- a/lib/SimpleSAML/Locale/Localization.php
+++ b/lib/SimpleSAML/Locale/Localization.php
@@ -137,6 +137,16 @@ class Localization
             return $langPath;
         }
 
+        // Some langcodes have aliases..
+        $alias = $this->language->getLanguageCodeAlias($langcode);
+        if (isset($alias)) {
+            $langPath = $localeDir.'/'.$alias.'/LC_MESSAGES/';
+            \SimpleSAML\Logger::debug("Trying langpath for alternative '$alias' as '$langPath'");
+            if (is_dir($langPath) && is_readable($langPath)) {
+                return $langPath;
+            }
+        }
+
         // Language not found, fall back to default
         $defLangcode = $this->language->getDefaultLanguage();
         $langPath = $localeDir.'/'.$defLangcode.'/LC_MESSAGES/';
-- 
GitLab