2012-12-22 34 views
1

我想在每個頁面的頂部插入以下代碼。主要目標是改變語言設置。問題是,當我發佈表單時,它不會改變會話,因爲它應該這樣做。會話不變?

<?php 

session_start(); 

$basename = basename($_SERVER['SCRIPT_NAME'], ".php"); 
$host = $_SERVER['HTTP_HOST']; 
$index_path = $host.'/'.$basename; 


if (isset($index_path)){ 
    //header ('Location:http://www.domain.com/'.$pref_language.'/'.$basename); 
} 
if (!isset($_SESSION['pref_lang'])){ //looks if this session already exists 

    if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])){//looks if the browser has set a default language 
     $max = 0.0; 
     $languages = explode(",", (strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]))); 
     foreach($languages as $language){ 
      $language = explode(';', $language); 
      $q = (isset($language[1])) ? ((float) $language[1]) : 1.0; 
      if ($q > $max){ 
       $max = $q; 
       $pref_language = $language[0]; 
      } 
     } 
     $pref_language = trim($pref_language); 
    } 

    if (!isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])){// in case there is no http_accept_language create it by hand 
     $pref_language = "de"; 
    } 
$_SESSION['pref_lang'] = $pref_language; //registers the session in case there is no one 
$pref_language = $_SESSION['pref_lang']; //is needed to select the right footer 

}else{ //in case that there is already a session with the saved language 

    if (isset($_REQUEST["fr"]) ) { //if a new language will be choosen overwrite the old session with the new entry and header to correct path to show the page in the desired language 
     $_SESSION['pref_lang'] = 'fr'; 
     header ('Location: http://www.domain.com/'.$pref_language.'/'.$basename); 
    }elseif (isset($_REQUEST["en"]) ) { 
     $_SESSION['pref_lang'] = 'en'; 
     header ('Location: http://www.domain.com/'.$pref_language.'/'.$basename); 
    } 

    $pref_language = $_SESSION['pref_lang']; //needed in case that the path is correct to select the right footer version 
} 
var_dump($_POST); 
var_dump($_SESSION); 
echo '<form method="post">  
      <input type="submit" id="en" name="en" value="en"/><div>englisch</div> 
     </form> 
     <form method="post"> 
      <input type="submit" id="fr" name="fr" value="fr"><div>französisch</div> 
     </form>'; 
?> 

print_r ($_SESSION); 

的其他空白頁上,該會議將是默認的 「德」?

如果有人能夠幫助我,我真的很感激。

非常感謝。

+0

請參閱這裏的文章,教導這種事情的設計模式。我會盡力向你展示一個代碼示例。 http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_8910-A-Polyglot-Web-Site-in-PHP.html –

回答

1

試試這個版本,看看它是否對你有意義。確保在第一次測試之前刪除您的會話cookie ;-)

<?php // RAY_temp_bonny.php 
error_reporting(E_ALL); 
session_start(); 

$form = <<<ENDFORM 
<form method="post"> 
Choose Language: 
<br/><input type="submit" name="pref_lang" value="de" /><div>german</div> 
<br/><input type="submit" name="pref_lang" value="en" /><div>englisch</div> 
<br/><input type="submit" name="pref_lang" value="fr" /><div>französisch</div> 
</form> 
ENDFORM; 

// IF SOMETHING IS POSTED TO REQUEST THE LANGUAGE 
if (!empty($_POST['pref_lang'])) 
{ 
    $_SESSION['pref_lang'] = $_POST['pref_lang']; 
    $_SESSION['pref_basis'] = 'POST REQUEST VARS'; 
} 
// IF NOTHING IS POSTED TO REQUEST THE LANGUAGE 
else 
{ 
    // IF THE SESSION PREFERENCE IS NOT ALREADY SET 
    if (empty($_SESSION['pref_lang'])) 
    { 
     // IF NO PREFERENCE IN THE REQUEST VARS, CHOOSE GERMAN 
     if (!isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) 
     { 
      $_SESSION['pref_lang'] = "de"; 
      $_SESSION['pref_basis'] = 'DEFAULT CHOICE'; 
     } 
     // IF THERE IS A CHOICE IN THE ACCEPT_LANGUAGE 
     else 
     { 
      $_SESSION['pref_lang'] = strtolower(substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2)); 
      $_SESSION['pref_basis'] = 'HTTP_ACCEPT'; 
     } 
    } 
    // IF THE SESSION PREFERENCE WAS PREVIOUSLY SET 
    else 
    { 
     $_SESSION['pref_basis'] = 'PREVIOUS SETTING'; 
    } 
} 

echo " CHOSEN LANGUAGE IS: " . $_SESSION['pref_lang']; 
echo " AND THE REASON IS: " . $_SESSION['pref_basis']; 
echo $form; 

這將使用默認值(「德」或HTTP_ACCEPT),如果沒有特定的語言要求已經取得進展。如果客戶已經請求了該語言,它將在會話中保留所請求的語言。

+0

沒關係,pref_language仍然沒有改變。當重新加載頁面時,它將被重新設置爲默認值。只是pref_basis將以正確的方式顯示。 – bonny

+0

腳本在我的服務器上。行爲是所選擇的語言通過重複訪問保持偏好。請測試它並觀看屏幕。然後離開並回到頁面檢查語言。 http://www.laprbass.com/RAY_temp_bonny.php –

+0

這很奇怪。在你的服務器上它的工作方式應該是這樣。你在代碼中改變了什麼?謝謝。 – bonny