Переключение языков на веб-сайт с помощью PHP

Я просто ищу совет. Я создаю веб-сайт, который предлагает (по крайней мере) 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://en.wikipedia.com/

оба поддомена должны указывать на один и тот же каталог, и фактический язык можно легко извлечь из HTTP_HOST

и для хранения языковых файлов решение является gettext