2010-01-31 164 views
2

我的網站是獨立於語言的,我有幾種語言包,包括基於用戶選擇的語言包。如何使用PHP會話或cookie來實現這個目標?

用戶選擇的形式:

<form action='' method='POST'> 
     <select name='language' onchange='this.form.submit();'> 
     <optgroup> 
      <option>Language</option> 
     <option value='eng'>English</option> 
     <option value='esp'>Español</option> 
      <option value='fra'>Français</option> 
      </optgroup> 
     </select> 
</form> 

腳本:

$language = $_POST['language']; 

if($language == "esp") 
    include("languages/esp.php"); 
else if($language == "fra") 
    include("languages/fra.php"); 
else 
    include("languages/eng.php"); 

問題是,當我點擊網站上的新頁面上,所選擇的語言再次被遺忘和加載默認英文。我知道我應該使用cookie或會話來保存所選語言,以便所有頁面加載該語言包。但是如何?

+0

你爲什麼不把語言識別到你的網址是什麼?如果您將它用作路徑前綴,如'/ en/...',則無論瀏覽器是否允許使用cookie,它都將始終存在。 – Gumbo 2010-01-31 21:44:03

回答

0

如果您想使用會話,則必須在每個頁面上使用session_start()。

+0

正如@Ondrej所提到的,您需要在每個要使用會話數據的頁面上使用session_start()。因此,考慮將代碼@ Chacha102建議放在另一個包含的文件中,這樣您就不會在整個地方複製相同的代碼。 – sberry 2010-01-31 21:45:33

4

在頁面的頂部:

session_start(); 
if(isset($_SESSION['language'])) 
{ 
    $language = $_SESSION['language']; 
} 
else 
{ 
    $language = "en"; 
} 

include("languages/".$language.".php"); 

在表單頁面:

session_start() // assuming you haven't already done this from the above code 

$languages = array("en", "esp", "fra"); 
if(in_array($_POST['language'], $languages)) 
{ 
    $_SESSION['language'] = $_POST['language']; 
} 

注意session_start()只應在網頁中調用一次。通常接近開始。

2

我會使用cookies,因爲我們正在談論語言選擇,用戶不可能改變他/她的語言選擇。通過會話,如果用戶關閉他/她的瀏覽器,語言選擇將被重置。這將類似於@ Chacha102的解決方案,只是多一點代碼。您可以使用該功能將語言選擇存儲在Cookie中

setcookie() 

然後將Cookie存儲在用戶的計算機上。您還可以指定cookie何時到期。然後,您可以使用$_COOKIE(類似於$_SESSION)檢索cookie的值(語言選擇)。

肯定閱讀: http://www.w3schools.com/PHP/php_cookies.asp