Я просто ищу совет. Я создаю веб-сайт, который предлагает (по крайней мере) 2 языка. Способ, которым я его настраиваю, – это использование XML-файлов для языка, PHP для получения значений в узлах XML. Скажем, у вас есть файл XML, загружаемый следующим образом:
<?php $lang = "en"; $xmlFile = simplexml_load_file("$lang/main.xml"); ?>
Как только содержимое файла будет доступно, я просто выводю каждый узел в HTML-тег, например:
<li><?php echo $xmlFile->navigation->home; ?></li> which in turn is equal to : <li><a href="#">Home</a></li> as a nav bar link.
Теперь, когда я переключаю языки, это изменение значения переменной «$ lang» через «$ _POST», например:
if(isset($_POST['es'])){ $lang = "es"; }elseif(isset($_POST['en'])){ $lang = "en"; }
Значение переменной «$ lang» сбрасывается и загружается новый файл, загружается также все новые узлы из нового XML-файла и, следовательно, изменяется язык.
Мне просто интересно, есть ли другой способ сбросить переменную «$ lang», используя что-то другое, кроме «$ _POST» или «$ _GET». Я также не хочу использовать строку запроса. Я знаю, что для этого я мог использовать JavaScript или jQuery, но я хотел бы сделать сайт не слишком надежным для JavaScript.
Я был бы признателен за любые идеи или советы.
благодаря
Я бы пошел на переменную сессии.
В начале ваших страниц у вас будет:
if (!isset($_SESSION['language'])) $_SESSION['language'] = "en";
Затем у вас появятся ссылки для изменения языка.
<a href="changelanguage.php?lang=es">Español</a> <a href="changelanguage.php?lang=fr">Français</a>
Changelanguage.php просто что-то вроде
$language = $_GET['lang']; // DO SOME CHECK HERE TO ENSURE A CORRECT LANGUAGE HAS BEEN PASSED // OTHERWISE REVERT TO DEFAULT $_SESSION['language'] = $language; header("Location:index.php"); // Or wherever you want to redirect
Вы думали об использовании $_SERVER["HTTP_ACCEPT_LANGUAGE"]
? Что-то вроде этого:
if ($_SERVER["HTTP_ACCEPT_LANGUAGE"]) { $langs = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]); for ($i = 0; $i < count($langs); $i++) { if ($langs[$i] == "en") { $lang = "en"; break; } elseif($langs[$i] == "es") { $lang = "es"; break; } } }
Разумеется, инструкция switch может поместиться немного лучше, и есть больше способов сказать по-английски, чем только en, но это должно работать без того, чтобы пользователь мог что-то сделать. Если они меняют вручную, сохраните их в файле cookie в соответствии с ответом Бена.
Как сохранить его в cookie?
Наиболее распространенным способом было бы использовать его как часть URL-адреса и извлечь его при загрузке страницы:
http://www.your-site.com/en/somepage
Вы используете рамки?
Наиболее распространенным способом передачи идентификатора языка является субдомен.
оба поддомена должны указывать на один и тот же каталог, и фактический язык можно легко извлечь из HTTP_HOST
и для хранения языковых файлов решение является gettext