我正在尝试设置,我认为会是,一个简单的语言切换。我想我会使用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。
谢谢。
感谢所有的建议- @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_switch .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" );
}
用户选择一种语言,点击"Select language"。然后,表单将表单值发送给'language_switch .php',该函数设置cookie,然后将用户发送回上一页。
完成了!:)
在重新加载设置页面或访问其他页面之前,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页面。如果您想避免重定向循环,请执行一些检查。
if ( !empty($_GET['language']) ) {
$_COOKIE['language'] = $_GET['language'] === 'en' ? 'en' : 'nl';
} else if ( empty($_COOKIE['language']) ) {
$_COOKIE['language'] = 'nl';
}
setcookie('language', $_COOKIE['language']);
试试这个,
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。
这是几乎相同的代码,但有点优化。(最好把出现次数最多的条件放在上面。
我使用PHP的$_SERVER['PHP_SELF']来刷新当前页面,并考虑所选择的语言
附带的示例代码。文件名称:language_switch .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>