Сохранение выбранного языка в куках

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
466
Реакции
16
Есть у меня такой вот код

PHP:
<?php
if($language == $_GET['lang'])
{
if(strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2))=='ru'){$lang='ru';}
elseif(strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2))=='lt'){$lang='lt';}
elseif(strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2))=='it'){$lang='it';}
else{$lang='en';}
} else {
$lang = $_GET['lang'];
}
   define('LANGAGE_DIR' ."/lang/", false);
include_once('lang/' . $lang . '.php');
?>

Вставляется в каждую страницу, посредством
PHP:
<?php include ('lang.php'); ?>

Как сделать так, чтобы выбранный пользователем язык сохранялся в куках, и при повторном посещении сайта, язык не приходилось снова выбирать.
 
При выборе/переключении языка

Код:
setcookie("lang","ru",time()+86400); //на день например

В код вставляем

Код:
if (isset($_COOKIE['lang'])) {
$lang=$_COOKIE['lang'];
}
else {
$lang='ru';
}

include_once('lang/' . $lang . '.php');
 
Последнее редактирование:
При выборе/переключении языка

Код:
setcookie("lang","ru",time()+86400); //на день например

В код вставляем

Код:
if (isset($_COOKIE['cookiename'])) {
$lang=$_COOKIE['cookiename'];
}
else {
$lang='ru';
}

include_once('lang/' . $lang . '.php');


Вот так выглядит выбор языка

HTML:
    <a href="/en" title="English">English</a>
    <a href="/ru" title="Russian">Русский</a>

Просто вставить так?

HTML:
    <a href="/en" setcookie("lang","en",time()+86400); title="English">English</a>
    <a href="/ru"  setcookie("lang","ru",time()+86400); title="Russian">Русский</a>

?
 
Нет, так не будет работать. При переходе на /en или /ru нужно вставить setcookie в PHP код.
 
к примеру:
domain.ru/index.php?lang=ru
Код:
<?php
...
if($_GET["lang"] == 'ru')
setcookie("lang","ru",time()+86400);
...
?>
 
  • Нравится
Реакции: vave
Можно и так, но лучше конечно аяксом отправлять.
Ну и время под себя поставь.
 
к примеру:
domain.ru/index.php?lang=ru
Код:
<?php
...
if($_GET["lang"] == 'ru')
setcookie("lang","ru",time()+86400);
...
?>
Да в настройках браузера вижу что куки записываются.

Только вот язык сайта не меняется, он определяется за счет языка браузера...

Суть такая, я на основной странице выбрал язык, он вбился в куки, я авторизируюсь на сайте, перехожу в панель управления сайтом (в котором уже нет приставки /en /ru), и язык остается таким, каким был изначально (в соотвтетсвии с языком браузера).

всё это выглядит так

PHP:
<?php
if($language == $_GET['lang'])
{
if(strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2))=='ru'){$lang='ru';}
elseif(strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2))=='ee'){$lang='ee';}


else{$lang='en';}
} else {
$lang = $_GET['lang'];
}


if($_GET["lang"] == 'ru')
setcookie("lang","ru",time()+86400);

if($_GET["lang"] == 'ee')
setcookie("lang","ee",time()+86400);

include_once('lang/' . $lang . '.php');

И код который редиректит пользователя на разные версии сайта /ru /ee взависимости от языка браузера...

PHP:
if($lang == 'ru' && 'nl' && 'lv' && 'lt' && 'ee' && 'fi' && 'fr' && 'de' && 'it' && 'es' && 'my' && 'pl' && 'pt' && 'se' && 'tr' && 'cn' && 'jp' && 'pk' && 'ae' && 'ir' && 'kr' && 'bd' && 'in' && 'sg') {
if ($_SERVER['REQUEST_URI'] != '/'. $lang .'') header('Location: /'. $lang .'');
}

Чувствую что так не делается :)
 
Конечно не так - кука ставится, но никак не обрабатывается дальше.

Простой костыль чтоб работало
Код:
setcookie("lang","ee",time()+86400);

if ($_GET["lang"]) {
     $lang=$_GET["lang"];}
}

Но вообще вся логика как то выглядит корявовато, если я правильно понимаю то должно быть так.

1. Проверям на куку, если ее нету, то ставим язык из браузера.
2. Если кука есть, то ставим язык из нее.
3. Если юзер переключил язык вручную, то пишем его в куку.
 
Да в настройках браузера вижу что куки записываются.

Только вот язык сайта не меняется, он определяется за счет языка браузера...
Имейте в виду, что куки сменятся не сразу после установки, а после перезагрузки страницы.
Чтобы изменить в этом же сеансе, нужно насильно их присвоить после setcookie:
PHP:
$days=30;//запомнить на столько дней
if(isset($_GET['lang']) {
setcookie("lang",$_GET['lang'],time()+86400*$days);
$_COOKIE['lang'] = $_GET['lang'];
}
 
Назад
Сверху