PHP: Load page with default language as browser language even after clearing of cookies and history

365 Views Asked by At

I am using an array for supported languages as mentioned below:

$langs = array();
$langs[13] = array('zh','Chinese (Simplified) / 中文 (简体)');
$langs[2] = array('en','English (USA / International)');
$langs[4] = array('fr','French / Français');
$langs[1] = array('de','German / Deutsch');
$langs[6] = array('it','Italian / Italiano');
$langs[11] = array('ja','Japanese / 日本語');
$langs[8] = array('pt','Portuguese (Brazil) / Português');
$langs[3] = array('es','Spanish/ Español ');
$langs[14] = array('zh-tr','Chinese (Traditional) / 中文 (ç¹é«”)');

Now i need to set the session with the lanuage with respect to the browser laguage. But i am facing problem as if i delete the browser cookies and hostory,then the default panguage is setting to English even though my browser languange is set changed to another language.

Code:

<?php

class Language {
   public $data = array();


   public function __construct () {
      global $langs;

      $lang = '';
      $session = Registry::get('session');

      if($session->get("lang")) {
         $file = DIR_LANGUAGE . $session->get("lang") . '/messages.php';
         define('LANG', $session->get("lang"));
      }
      else {
         $pref_langs = $this->get_preferred_languages();
        //print_r($langs);
         while(list($k, $v) = each($pref_langs)) {
echo "v- ".$v." sep ";
            if(in_array($v, $langs)) {


               $lang = $v;
               define('LANG', $lang);

               break;
            }
         }
               echo $lang." sep a";
       if($lang == '') { $lang = DEFAULT_LANG; }

         $session->set("lang", $lang);

         $file = DIR_LANGUAGE . $lang . '/messages.php';
      }

      if(file_exists($file)) {
         $_ = array();

         require($file);

         $this->data = array_merge($this->data, $_);
      }
      else {
         exit('Error: Could not load language ' . $file . '!');
      }

   }


   private function get_preferred_languages() {
      $langs = array();

      if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        //echo "HTTP_ACCEPT_LANGUAGE :".$_SERVER['HTTP_ACCEPT_LANGUAGE'];
         $l = explode(";", $_SERVER['HTTP_ACCEPT_LANGUAGE']);


         while(list($k, $v) = each($l)) {
            $a = explode(",", $v);

            if(isset($a[0]) && substr($a[0], 0, 2) != 'q=') {
               array_push($langs, $a[0]);
            }
            if(isset($a[1])) { array_push($langs, $a[1]); }
         }
      }

      array_push($langs, DEFAULT_LANG);
print_r($langs);
      return $langs;
   }


   public function get($key) {
      return (isset($this->data[$key]) ? $this->data[$key] : $key);
   }


}

?>
0

There are 0 best solutions below