use the browsers language preferences instead of the settings page

This commit is contained in:
SJ
2012-09-21 20:13:41 +02:00
parent 3e0ad6da34
commit d68ffad8a6
5 changed files with 50 additions and 22 deletions

View File

@ -5,13 +5,32 @@ class Language {
public function __construct () {
global $langs;
$lang = '';
if(isset($_SESSION['lang'])) {
$file = DIR_LANGUAGE . $_SESSION['lang'] . '/messages.php';
} else {
$file = DIR_LANGUAGE . LANG . '/messages.php';
}
else {
$pref_langs = $this->get_preferred_languages();
while(list($k, $v) = each($pref_langs)) {
if(in_array($v, $langs)) {
$lang = $v;
define('LANG', $lang);
break;
}
}
if($lang == '') { $lang = DEFAULT_LANG; }
$_SESSION['lang'] = $lang;
$file = DIR_LANGUAGE . $lang . '/messages.php';
}
if (file_exists($file)) {
if(file_exists($file)) {
$_ = array();
require($file);
@ -25,6 +44,29 @@ class Language {
}
private function get_preferred_languages() {
$langs = array();
if(isset($_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);
return $langs;
}
public function get($key) {
return (isset($this->data[$key]) ? $this->data[$key] : $key);
}