add some base work for KaiRo bug 396 - adding L10n to the auth system
authorRobert Kaiser <kairo@kairo.at>
Fri, 18 Nov 2016 04:57:28 +0000 (05:57 +0100)
committerRobert Kaiser <kairo@kairo.at>
Fri, 18 Nov 2016 04:57:28 +0000 (05:57 +0100)
app/authsystem.inc.php
app/authutils.php-class

index 6e30200293422d7fa3dd9fd5c26d6c7669649b1c..372c4db9c19b9c51afd220828a3ff9df4e5175dc 100644 (file)
@@ -26,14 +26,18 @@ require_once('../kairo-utils/email.php-class');
 // Class for sending emails
 require_once(__DIR__.'/authutils.php-class');
 
-bindtextdomain('kairo_auth', 'en'); // XXX: Should negotiate locale.
-bind_textdomain_codeset('kairo_auth', 'utf-8');
-
 // Connect to our MySQL DB
 $db = new PDO($dbdata['dsn'], $dbdata['username'], $dbdata['password']);
 // Instantiate auth utils.
 $utils = new AuthUtils($settings, $db);
 
+$textdomain = 'kairo_auth';
+$textlocale = $utils->negotiateLocale(array('en', 'de'));
+putenv('LC_ALL='.$textlocale);
+bindtextdomain($textdomain, '../locale');
+bind_textdomain_codeset($textdomain, 'utf-8');
+textdomain($textdomain);
+
 /* Creating the DB tables:
 CREATE TABLE `auth_sessions` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
index 44152a43ea64c3712a1b217dcee21f6ce6c8e888..f76ac18f9ffc9245f8def3d43dbbd16c1cd4630f 100755 (executable)
@@ -82,6 +82,9 @@ class AuthUtils {
   // function pwdNeedsRehash($user)
   //   Return true if the pwdhash field of the user uses an outdated standard and needs to be rehashed.
   //
+  // function negotiateLocale($supportedLanguages)
+  //   Return the language to use out of the given array of supported locales, via netotiation based on the HTTP Accept-Language header.
+  //
   // function getGroupedEmails($group_id, [$exclude_email])
   //   Return all emails grouped in the specified group ID, optionally exclude a specific email (e.g. because you only want non-current entries)
   //
@@ -353,6 +356,30 @@ class AuthUtils {
     }
   }
 
+  function negotiateLocale($supportedLanguages) {
+    $nlocale = $supportedLanguages[0];
+    $headers = getAllHeaders();
+    $accLcomp = explode(',', $headers['Accept-Language']);
+    $accLang = array();
+    foreach ($accLcomp as $lcomp) {
+      if (strlen($lcomp)) {
+        $ldef = explode(';', $lcomp);
+        $accLang[$ldef[0]] = (float)((strpos(@$ldef[1],'q=')===0)?substr($ldef[1],2):1);
+      }
+    }
+    if (count($accLang)) {
+      $pLang = ''; $pLang_q = 0;
+      foreach ($supportedLanguages as $wantedLang) {
+        if (isset($accLang[$wantedLang]) && ($accLang[$wantedLang] > $pLang_q)) {
+          $pLang = $wantedLang;
+          $pLang_q = $accLang[$wantedLang];
+        }
+      }
+      if (strlen($pLang)) { $nlocale = $pLang; }
+    }
+    return $nlocale;
+  }
+
   function getGroupedEmails($group_id, $exclude_email = '') {
     $emails = array();
     if (intval($group_id)) {