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 d501e0a253bbe383e4cbc8269138ac31a720e1ec..241622871a9cb8efc32992af0b17598e7753afaf 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 cb784575d783fc344077c3db9d8d78cbe1964433..1f8f2ccf1d0c7c4c5c54b41e675a29088596ae08 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 ae7d6f7c542fd019d29b617cecc7c9b30cada64f..d1160493ef7f2f14523e27d08bb1489fcfcb832f 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 a20913a420901219e3928b8cf7f2909e332a0607..3517a422a1b828c6e9f178b864fad2b8196922c9 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 f0d436b089b639196f583e223fb6fe7f9cc03660..bb6d69319960caad2e601c1b5bb83f990c496d41 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 607e89d9b6e1cb47e38327ee1a8394ab8332a668..551e7d57038aa44c5ffe03c0b6cbfb7d81e249d5 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 bbdfeb2654e8c09df856b60cbb00084fefafe876..2a55ed833adbe0faf7ce11b28b1c5681e2949cd0 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 269b734b2fbbdf8eb73763f95a9d5570ce46f6ec..c089fb5ebe0423de14888cf49d8570097e93e535 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";