improved language detection using browser information; set the language directly...
authorArun Persaud <arun@nubati.net>
Mon, 31 Dec 2012 15:11:45 +0000 (15:11 +0000)
committerArun Persaud <arun@nubati.net>
Mon, 31 Dec 2012 15:11:45 +0000 (15:11 +0000)
previously one had to reload to get the language correct, now it should be correct right away.
We also read out the browser request for a language now.

digest.php
include/functions.php
include/game.php
include/preferences.php
include/stats.php
include/user.php
index.php
rss.php

index d501e0a..2416228 100644 (file)
@@ -53,21 +53,7 @@ foreach($users as $uid)
     $PREF = DB_get_PREF($uid);
 
     // set users language preference
-    $language = $PREF['language'];
-
-    switch($language)
-      {
-      case 'de':
-       putenv("LC_ALL=de_DE");
-       setlocale(LC_ALL, "de_DE");
-       // Specify location of translation tables
-       bindtextdomain("edoko", "./locale");
-       // Choose domain
-       textdomain("edoko");
-       break;
-      default:
-       /* do nothing */
-      }
+    set_language($PREF['language']);
 
     // calculate mod by digest-time
     switch($PREF['digest'])
index cb78457..1f8f2cc 100644 (file)
@@ -1699,4 +1699,32 @@ function verify_password($email, $password)
   return 3;
 }
 
+/* language functions */
+function detectlanguage()
+{
+       /* read out browser's prefered language, taken from php-manual*/
+       $langcode = explode(";", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+       $langcode = explode(",", $langcode['0']);
+       return $langcode['0'];
+}
+
+function set_language($language)
+{
+    switch($language)
+      {
+      case 'de':
+       putenv("LC_ALL=de_DE");
+       setlocale(LC_ALL, "de_DE");
+       // Specify location of translation tables
+       bindtextdomain("edoko", "./locale");
+       // Choose domain
+       textdomain("edoko");
+       break;
+      default:
+       /* do nothing */
+      }
+
+    return;
+}
+
 ?>
index ae7d6f7..d116049 100644 (file)
@@ -59,6 +59,7 @@ $playid   = DB_get_current_playid($gameid); /* might be -1 at beginning of the g
 $PREF = DB_get_PREF(isset($_SESSION['id'])?$_SESSION['id']:$myid);
 /* set language chosen in preferences, will become active on the next reload (see index.php)*/
 $_SESSION['language'] = $PREF['language'];
+set_language($PREF['language']);
 
 
 /* get rule set for this game */
index a20913a..3517a42 100644 (file)
@@ -51,6 +51,7 @@ display_user_menu($myid);
 $PREF = DB_get_PREF($myid);
 /* set language chosen in preferences, will become active on the next reload (see index.php)*/
 $_SESSION['language'] = $PREF['language'];
+set_language($PREF['language']);
 $timezone =  DB_get_user_timezone($myid);
 
 DB_update_user_timestamp($myid);
index f0d436b..bb6d693 100644 (file)
@@ -37,6 +37,7 @@ if(!$myid)
 $PREF = DB_get_PREF($myid);
 /* set language chosen in preferences, will become active on the next reload (see index.php)*/
 $_SESSION['language'] = $PREF['language'];
+set_language($PREF['language']);
 
 DB_update_user_timestamp($myid);
 
index 607e89d..551e7d5 100644 (file)
@@ -120,6 +120,7 @@ else
        $PREF = DB_get_PREF($myid);
        /* set language chosen in preferences, will become active on the next reload (see index.php)*/
        $_SESSION['language'] = $PREF['language'];
+       set_language($PREF['language']);
 
        DB_update_user_timestamp($myid);
 
index bbdfeb2..2a55ed8 100644 (file)
--- a/index.php
+++ b/index.php
@@ -51,33 +51,28 @@ if($DBopen<0)
     exit();
   }
 
-/* localization */
+/**** localization ****/
 /* needs to be in front of output_header, but we don't know the users preferences at this time,
  * so we go by the session variable or if language is set
  */
-if(myisset('language') || isset($_SESSION['language']))
-  {
-    $language = 'en';
-
-    if(myisset('language'))
-      $language = $_REQUEST['language'];
-    else if(isset($_SESSION['language']))
-      $language = $_SESSION['language'];
-
-    switch($language)
-      {
-      case 'de':
-       putenv("LC_ALL=de_DE");
-       setlocale(LC_ALL, "de_DE");
-       // Specify location of translation tables
-       bindtextdomain("edoko", "./locale");
-       // Choose domain
-       textdomain("edoko");
-       break;
-      default:
-       /* do nothing */
-      }
-  }
+/* set default */
+$language =  detectlanguage();
+
+/* check if default in array of supported languages, else default to english */
+$supported_languages = array ('en','de');
+
+if ( !in_array($language, $supported_languages) )
+   $language = 'en';
+
+/* override with explicit request from user */
+if(myisset('language'))
+  $language = $_REQUEST['language'];
+else if(isset($_SESSION['language']))
+  $language = $_SESSION['language'];
+
+/* set it */
+set_language($language);
+/**** end language ****/
 
 /* done major error checking, output header of HTML page */
 output_header();
diff --git a/rss.php b/rss.php
index 269b734..c089fb5 100644 (file)
--- a/rss.php
+++ b/rss.php
@@ -74,23 +74,9 @@ header("Content-Type: text/xml");
 <title>E-DoKo Feed</title>
 <?php
 
-  /* set language */
-  $PREF = DB_get_PREF($id);
-  $lang = $PREF['language'];
-
-  switch($lang)
-    {
-    case 'de':
-      putenv("LC_ALL=de_DE");
-      setlocale(LC_ALL, "de_DE");
-      // Specify location of translation tables
-      bindtextdomain("edoko", "./locale");
-      // Choose domain
-      textdomain("edoko");
-      break;
-    default:
-      /* do nothing */
-    }
+/* set language */
+$PREF = DB_get_PREF($id);
+set_language($PREF['language']);
 
 echo '<subtitle>'._('Know when it is your turn')."</subtitle>\n";