Переключение языков на сайте с PHP - PullRequest
2 голосов
/ 21 мая 2010

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

Буду признателен за любые идеи или советы.

Спасибо

Ответы [ 5 ]

2 голосов
/ 21 мая 2010

Я бы пошел на переменную сеанса.

В начале ваших страниц вы будете иметь:

 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
1 голос
/ 21 мая 2010

Думали ли вы об использовании $_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 согласно ответу Бена.

0 голосов
/ 21 мая 2010

Самый распространенный способ - использовать его как часть URL и извлекать его при загрузке страницы:

http://www.your-site.com/en/somepage

Используете ли вы фреймворк?

0 голосов
/ 21 мая 2010

Наиболее распространенный способ передачи идентификатора языка - это поддомен.

http://en.wikipedia.com/

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

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

0 голосов
/ 21 мая 2010

Как насчет сохранения его в cookie-файле?

...