如何创建一个简单的PHP cookie语言切换?

时间:2011-10-17 08:26:02

标签: php cookies toggle

我正在尝试设置,我认为会是一个简单的语言切换。我以为我会使用PHP cookie,但它们没有按预期运行。

我已经阅读了一些cookie教程并在StackOverflow上查看了一些类似的示例,但我必须遗漏一些东西,因为它无法让它正常工作。

我通过将其作为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的英语或俄语菜单。

感谢。

5 个答案:

答案 0 :(得分: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然后将用户发送回上一页。

完成! :)

答案 1 :(得分:3)

在重新加载设置页面或访问其他页面之前,无法访问Cookie(换句话说,您无法在同一页面中设置和访问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页面。如果要避免重定向循环,请执行一些检查。

答案 2 :(得分:3)

if ( !empty($_GET['language']) ) {
    $_COOKIE['language'] = $_GET['language'] === 'en' ? 'en' : 'nl';
} else if ( empty($_COOKIE['language']) ) {
    $_COOKIE['language'] = 'nl';
}
setcookie('language', $_COOKIE['language']);

答案 3 :(得分: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 ); 
}

如果未在GET中设置lang指令,请检查是否设置了cookie。

如果使用其值,或默认使用“en”。 如果设置了lang指令,请设置cookie。

它几乎是相同的代码,但有点优化。 (最好把条件放在ifs之上。

答案 4 :(得分: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>