Я использую массив для поддерживаемых языков, как указано ниже:
$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) / ä¸æ–‡ (ç¹é«”)');
Теперь мне нужно установить сессию с языком по отношению к языку браузера. Но я сталкиваюсь с проблемой, как будто я удаляю файлы cookie и хост-файл браузера, тогда языком по умолчанию является английский, хотя язык моего браузера изменен на другой язык.
Код:
<?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);
}
}
?>
Задача ещё не решена.
Других решений пока нет …