2010-12-13 15 views
1

私は何か間違っていることを知っていますが、私が間違っていることを理解できません。スイッチ言語javascript/ph

私は単純な選択ボックスを使用して自分のウェブサイトの言語を切り替えます。私は次のコードを使用language.phpファイルで

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

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

::私は選択ボックスに、この関数をリンクすべてが正常に動作します

<?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); 
} 

?> 

、クッキー値が正常にすべての新しい言語に変更され時間。すべての変数も変化しています。唯一の問題は、選択した言語のデータベースからデータを取得するために使用するクエリです。それはいつも一歩の後ろにあるようです。例: ウェブサイトを開始すると、その言語は英語で表示されます。フランス語に切り替えると、すべての変数は直ちにフランス語に変更されますが、クエリの行はまだ英語です。手動でページを更新するときだけ、行は希望の言語に変更されます。データベース内

データは、このように入力された: は カテゴリ

例LANGUAGE_ID: LANGUAGE_ID = 1(英語) カテゴリ=歌手

LANGUAGE_ID = 2(フランス語) カテゴリ= Chanteurを

language_id = 3(オランダ語) カテゴリ=ザンジャー

私は、データを取得するために、次のコードを使用します。

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

を** **言語を切り替えるにはJSやクッキーを使用することはありません。しかし、アドレスバーには、常にサブドメインとして配置するのが好ましい。 –

答えて

3

$myLangも設定する必要があります。 setcookie()を呼び出すと、この変数は更新されません。例:

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

この例のようにすべてのブロックを更新する必要があります。

しかし、私は助けるが、すべてのコードの重複排除するために、それを書き換える示唆することはできません:DBコードで

// 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; 
+0

私は本当に馬鹿だと感じます。私は$ myLang変数に気付かなかった。ありがとう百万cdhowie!とても有難い。 – moonwalker

+0

私はあなたのソリューションが好きです。私は今日何か新しいことを学んだ。再度、感謝します。 – moonwalker

+0

@moonwalker:問題ありません。私はまだ毎日、それらの気持ち悪い瞬間を持っています... – cdhowie

関連する問題