PHP: способ вручную переключать языки?
У меня есть веб-сайт со следующим алгоритмом переключения языка:
- Во-первых, он определяет язык браузера по умолчанию (я не знаю почему? Но Chrome всегда выдает что-то вроде
en-EN,ru,lv
Так что язык Chrome по умолчанию всегда английский, кажется). - Затем он записывает значение языка в переменную сеанса
lang
и запрашивает нужный строковый файл (т.е./assets/includes/en-US/strings.php
); - И каждая строка из этого файла включается в код HTML, поэтому в чистом HTML нет простого текста.
Конечно, определение языка по умолчанию не является причиной для остановки - мне нужен ручной переключатель языка, такой как ссылки (LV | EN | RU). Итак, каков возможный (и, возможно, лучший) способ переключения языка и перезаписи переменной сеанса после того, как пользователь щелкнет на нужном языке?
1 ответ
Лучший способ - это самый простой способ:)
$langs = array('LV', 'EN', 'RU');
<?php foreach ($langs as $lang): ?>
<a href="index.php?lang=<?=$lang;?>"> <?=$lang;?> </a>
<?php endforeach; ?>
так что вы даете пользователю возможность изменить язык через GET в этом примере.
Перезаписать сеанс на отправленный запрос:
<?php
if(in_array($_GET['lang'], $langs) {
$_SESSION['lang'] = $_GET['lang']; // to prevent user to change its session to something you don't want to
}
?>
После этого вы просто взаимодействуете с этим сеансом для отображения контента.
Вы можете использовать перенаправление, если каждая страница написана на другом языке: (но я полагаю, логика, как взаимодействовать с языком, который вы уже реализовали, с помощью автоматического определения языка, но все же... позвольте мне предложить несколько способов быстро?)
<?php
if (isset($_SESSION['lang']) && $_SESSION['lang'] !== 'EN') {
header("Location: mysite.com/".$_SESSION['lang']."/index.php");
exit;
}
?>
Или вы можете использовать метод перевода.
Все ваши переводы находятся в базе данных под столбцами с теми же именами, что и ваш массив $langs.
Таким образом, вы выводите контент из этого конкретного столбца:
SELECT lang_{$_SESSION['lang']} FROM translations WHERE string = '$string';