Сессия для языкового переключателя

69
18 ноября 2021, 19:30

Доброго времени суток
Сделал языковой переключатель и вот такую логику от которой подключая языковые пакеты и отображаю на выбранном языке данные.

 if (isset($_GET['language_id']) && !empty($_GET['language_id']) && $_GET['language_id'] == "en") {
        __IncludeLang($_SERVER['DOCUMENT_ROOT']. $templateFolder . '/lang/'.'en'.'/'.basename(__FILE__));
        session_start();
        if (isset($_REQUEST['language_id']))
            $_SESSION["language_id"] = ($_REQUEST['language_id'] == 'ru') ? 'ru' : 'en';
    } else if (isset($_GET['language_id']) && !empty($_GET['language_id']) && $_GET['language_id'] == "ru" || !isset($_GET['language_id']) && empty($_GET['language_id'])) {
        __IncludeLang($_SERVER['DOCUMENT_ROOT']. $templateFolder . '/lang/'.'ru'.'/'.basename(__FILE__));
        $_SESSION['language_id'] = "ru";
    }

Данная логика подключена в header.php. В рамках текущей страницы все отлично работает, но если например я наглавной странице переключил язык на английский, далее захожу в категорию товаров, то там уже опять отображается руссая версия сайта и опять нужно делать выбор языка. Понятно что тут отрабатывает else if, но как можно сделать такую логику что бы от выбранного языка, сохранить его в сессию, и далее это же значение использовать на другой странице? Подскажите пожалуйста. По умолчанию у меня русский, я сейчас пытаюсь сделать что бы если выбрали язык то на основании этого отображаю данные на нужном языке, и если не выбрали язык то отображаю так же на русском.
Или какие еще есть варианты? Поделитесь пожалуйста опытом =)

Answer 1

ПРАВИЛЬНЫМ вариантом во всех смыслах будет передавать идентификатор языка в ссылке, каждый раз. Например site.ru/about/ - русская версия, а site.ru/en/about/ - английская. Или site.ru/about/?lang=kz (такой себе вариант).

НИКОГДА не используйте для этого сессии, куки и прочее.

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

P.S. Языковой код для казахского языка - kk, а не kz))

READ ALSO
Команда shell_exec php выполняется 2 раза, почему?

Команда shell_exec php выполняется 2 раза, почему?

Странное поведение команды shell_exec: при выполнении она выполняется 2 раза

177
messages.getHistory не возвращает непрочитанные сообщения

messages.getHistory не возвращает непрочитанные сообщения

Появилась проблема с vk apiМетод messages

95
Как посмотреть формируемый запрос?

Как посмотреть формируемый запрос?

Есть метод, к БД CIBlockElement::GetList(

249
Локальный сервер для веб разработки на windows

Локальный сервер для веб разработки на windows

Всем привет, работу над веб проектами я веду локальноНа OpenServer

186