1. Не используем хранение установок (язык, город, настройки шаблона и т.д.) в браузере клиента, если это явно не нужно.
2. Прописываем в конфиге:
//////////Languages settings///////////
define ('HOMELANG','ru');
define ('AVAILABLE_LANGS','ru|en');
define ('DEFAULTLANG','ru'); //if no autodetect
define ('DB_HOMELANG_AUTOSWITCH',true);
3. Определяем:
/*
domain.com/ru/....
domain.com/en/...
берём "ru", "en" и т.д.
*/
$lng=explode(WWWROOTNOLANG,URI_LEFT);
$lng=explode('/',$lng[1],2);
$lng=$lng[0];
/*Проверяем: Есть ли у нас перевод для запрошенного языка?*/
if ($_SESSION['lang']!=$lng && $lng!='' && (strpos(AVAILABLE_LANGS,$lng)!==false)) {
$_SESSION['lang']=$lng;
} else $lng=HOMELANG;
/*
...здесь обработчик GET, для линков переключения языка..
*/
/*
Задан ли язык в сессии? Если нет - берём предпочтения из браузера клиента.
*/
if (!isset($_SESSION['lang']) || $_SESSION['lang']=='') {
$lng=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lng=explode(':',$lng);
$lng=explode(',',$lng[0]);
$lng=explode('-',$lng[0]);
$lng=mb_strtolower($lng[0]);
if ($lng=='' || $lng!='' && strpos(AVAILABLE_LANGS,$lng)===false) {
if (@strpos(AVAILABLE_LANGS,DEFAULTLANG)!==false) $lng=DEFAULTLANG;
else $lng=HOMELANG;
}
$_SESSION['lang']=$lng;
}
define('LANG',$_SESSION['lang']);
4. Создаём функцию, чтобы выводить строки:
function lang($s){
global $lang;
if (isset($lang[$s])) return $lang[$s];
else return $s;
}
5. Вызов в коде:
echo lang('hello');
или в шаблоне:
<?=lang('hello')?>