Переключите язык javascript / php - PullRequest
1 голос
/ 13 декабря 2010

Я знаю, что я делаю что-то не так, но я не могу понять, что я делаю неправильно.

Я использую простое поле выбора для переключения языков на моем веб-сайте.Я связал эту функцию с полем выбора:

function changeLang(){
    var chosenLang = $('#chooseLang').val();

    if(chosenLang != 0){
        window.location = "index.php?lang="+chosenLang
        }
}

В файле language.php я использую следующий код:

<?php
$lang = $_GET['lang'];
$myLang = $_COOKIE["myLang"];

// one month to expire
$expire = time()+60*60*24*30;

if (!isset($_COOKIE["myLang"])){
    setcookie("myLang", "en", $expire);
    include "languages/en.php";
    }else{
    include "languages/$myLang.php";
}



if($lang == "en"){
    include "languages/en.php";
    setcookie("myLang", "en", $expire);
    }else if($lang == "fr"){
        include "languages/fr.php";
        setcookie("myLang", "fr", $expire);
        }else if($lang == "nl"){
            include "languages/nl.php";
            setcookie("myLang", "nl", $expire);
}

?>

Все работает нормально, значение cookie изменяется нановый язык успешно каждый раз.Все переменные тоже меняются.Единственная проблема - запросы, которые я использую для извлечения данных из базы данных на выбранном языке.Кажется, это всегда на шаг позади.Пример: если я запускаю сайт, язык на английском.Как только я переключаюсь на французский, все переменные сразу же меняются на французский, но строки в запросах по-прежнему на английском.Только когда я обновляю страницу вручную, строки изменяются на нужный язык.

Данные в базе данных вводятся так: language_id Categories

Пример: language_id = 1 (English) category =Певец

language_id = 2 (французский) категории = Chanteur

language_id = 3 (голландский) категории = Zanger

Я использую следующий код для извлечения данных:

if($myLang == "en" || !$myLang){
$lang = 1;                      
}else if($myLang == "fr"){
$lang = 2;
}else if($myLang == "nl"){                                
$lang = 3;                          
}

$stmt = $dbh->prepare("SELECT cat_title, cat_group
            FROM categories
            WHERE cat_lang_id = '$lang'
            ORDER BY  category_id ASC");
/*** execute the prepared statement ***/
$stmt->execute();
/*** fetch the results ***/
$result = $stmt->fetchAll();

Я попробовал все, что знаю, чтобы решить эту проблему, но безуспешно.

Заранее спасибо.

1 Ответ

3 голосов
/ 13 декабря 2010

Вам также нужно установить $myLang. Вызов setcookie() не изменит эту переменную. Например:

if($lang == "en"){
    include "languages/en.php";
    setcookie("myLang", "en", $expire);
    $myLang = 'en';  // <-- add this line

Вам необходимо обновить все блоки, как в этом примере.

Однако я не могу не предложить переписать его, чтобы исключить весь дублирующий код:

// Put $languages in a common header file.
$languages = array('en' => 1, 'fr' => 2, 'nl' => 3);

if (array_key_exists($lang, $languages)) {
    include "languages/{$lang}.php";
    setcookie("myLang", $lang, $expire);
    $myLang = $lang;
}

В коде БД:

$lang = array_key_exists($myLang, $languages) ? $languages[$myLang] : 1;
...