2011-10-17 54 views
6

我試圖設置,我認爲會是一個簡單的語言切換。我以爲我會使用PHP cookies,但他們沒有按照預期行事。如何創建一個簡單的PHP cookie語言切換?

我已經閱讀了一些cookie教程,並在StackOverflow上查看了一些類似的示例,但是我必須缺少一些東西,因爲它無法使其正常工作。

我通過將URL作爲URL變量(lang = en或lang = ru)來設置語言。這一切似乎都很好。然而,我目前設置cookie的代碼似乎落後了一步,所以最初它沒有任何價值(我希望它默認爲'en'),那麼如果用戶點擊'ENG'按鈕,它仍然沒有任何價值,然後如果用戶點擊俄語,則該值顯示爲'en',然後如果再次單擊'ENG'按鈕,則該值顯示爲'ru'。

下面是我拼湊起來的代碼:

if($_GET['lang']) { 
    $lang = (string)$_GET['lang']; 
    setcookie('lang', $lang, time() + 60*60*24*30); 
} elseif(!isset($_COOKIE['lang'])) { 
    $lang = 'en'; 
} else { 
    $lang = $_COOKIE['lang']; 
} 

一旦我得到這個工作,我打算使用cookie的值,顯示無論是使用位條件PHP的英文或俄文菜單。

謝謝。

+2

這是不是一個好主意,使用Cookie來確定語言。單獨的URL是更好的選擇,人們可以直接鏈接到與他們在鏈接頁面上使用相同語言的內容,而搜索引擎會看到兩個單獨的頁面。 – Quentin

+0

@Quentin做得很好。但是,我正在努力縮減預算,因此需要一個快速簡單的解決方案。基本上有(或將)兩個主菜單,一個用於英語,一個用於俄語。網站編輯器將以兩種語言創建文章,然後將其分配到相關菜單。根據用戶的選擇和使用條件語句,只會顯示其中一個菜單。這是我能想到的最簡單的方式... – Matt

+0

@Quentin如果單獨製作網址,網站應該如何記住法語網頁應該只鏈接到法語網站上的另一個網頁? – compguy24

回答

6

。感謝所有的建議 - @Mob讓我朝着正確的方向,即在另一頁上處理cookie,然後將您發回第一個。

我做了一些更多的思考和嘗試,我終於解決了它。我會在下面發佈代碼,以防其他人想要使用它。

在您的主頁把這個:

<form action="language_switcher.php" method="post"> 
    <select name="lang"> 
     <option value="en"<?php if($_COOKIE["language"] == "en") { echo " selected"; } ?>>English</option> 
     <option value="ru"<?php if($_COOKIE["language"] == "ru") { echo " selected"; } ?>>Russian</option> 
    </select> 
    <input type="submit" value="Select Language"> 
</form> 

<p>Language: <?php if(isset($_COOKIE["language"])) { echo $_COOKIE["language"]; } else { echo "<em>not set</em>"; } ?></p> 
在所謂的「language_switcher.php」另一個文件

然後把下面的代碼:

$lang = "en"; 
if(isset($_POST["lang"])) { 
    $lang = $_POST["lang"]; 
    setcookie ('language', $lang, time() + 60*60*24*30, '/', 'mydomain.com'); 
    header("Location: /previous_page_url.php"); 
} 

用戶選擇一種語言,點擊「選擇語言」。然後表單將表單值發送到'language_switcher.php',它設置cookie,然後將用戶發送回上一頁。

完成! :)

0

試試這個,

if (!isset($_GET['lang'])) { 
    if (isset($_COOKIE['lang'])) { 
     $lang = $_COOKIE['lang']; 
    } 
    else { 
     $lang = 'en'; 
    } 
} 
else { 
    $lang = (string)$_GET['lang']; 
    setcookie('lang', $lang, time() + 60*60*24*30); 
} 

如果郎指令進不去設置,檢查是否有一個cookie集。

如果是使用它的值,或默認使用'en'。 如果設置了lang指令,請設置一個cookie。

這幾乎是相同的代碼,但有點優化。 (最好是在ifs頂部顯示最多的條件)

+0

非常感謝,但它似乎也做了同樣的事情,即它落後了一步。有幾個我在這裏糾正的拼寫錯誤:'if(!isset($ _GET ['lang'])){if(isset($ _COOKIE ['lang'])){ \t \t $ lang = $ _COOKIE ['lang']; \t} else { \t \t $ lang ='en'; \t} } else { \t $ lang =(string)$ _ GET ['lang']; ('lang',$ lang,time()+ 60 * 60 * 24 * 30); }' – Matt

+0

確實,我錯過了一對括號 – ikromm

2

只有設置頁面重新加載或訪問了其他頁面(換句話說,您無法設置和訪問cookie在同一頁)

檢查這個代碼了。

if($_GET['lang']) { 
    $lang = (string)$_GET['lang']; 
    setcookie('lang', $lang, time() + 60*60*24*30,'/'); 
} elseif( !$_GET['lang'])) { 
    $lang = 'en'; 
} else { 
    $lang = $_GET['lang']; 
} 
header("Location: redirect_file.php") 
redirect_file.php

然後,您重定向回cookie的網頁,如果你想避免重定向環路進行一些檢查

+0

我明白,但是我試圖做不到?這是流程:用戶點擊'ENG'按鈕,頁面重新加載發送URL變量'lang = en'並設置cookie值。 – Matt

+0

@Matt編輯!一探究竟。 – Mob

0

我用PHP的$ _SERVER ['PHP_SELF']來刷新當前頁面,並考慮到選擇的語言。

附上示例代碼。文件名:language_switcher.php

<?php 

    error_reporting(E_ERROR); 

    $lang = "en"; 

    if(isset($_COOKIE["language"])) { 
     $lang = $_COOKIE["language"]; 
    } 

    if(isset($_POST["lang"])) { 
     $lang = $_POST["lang"]; 
     setcookie ('language', $lang, time() + 60*60*24*30, '/','localhost'); 
     $refresh = $_SERVER['PHP_SELF']; 
     header("Location: $refresh"); 
    } 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Test Page Language Toggle</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 

<body> 

    <?php 
     // Text definitions 
     $text = array(
     'en' => array(
      'selectlang' => 'Select Language', 
      'lingua' => 'Language: ', 
      'filename' => 'You are in this location: ' 
     ), 
     'fr' => array(
      'selectlang' => 'Séléctionner', 
      'lingua' => 'Langue: ', 
      'filename' => 'Vous lisez ce fichier: ' 
     ) 
    ); 

    ?> 

    <form action="language_switcher.php" method="post"> 
     <select name="lang"> 
      <option value="en"<?php if($_COOKIE["language"] == "en") { echo "selected"; } ?>>English</option> 
      <option value="fr"<?php if($_COOKIE["language"] == "fr") { echo " selected"; } ?>>Français</option> 
     </select> 
     <input type="submit" value="<?php echo $text[$lang][selectlang]; ?>"> 
    </form> 

    <p><?php echo $text[$lang][lingua]; if(isset($_COOKIE["language"])) { echo $_COOKIE["language"]; } else { echo "<em>not set</em>"; } ?></p> 

    <br> 
    <p><?php echo $text[$lang][filename] . $_SERVER['PHP_SELF']; ?></p> 

</body> 
</html>