首先,我必须指出自己是Web开发的新手,但我会尽力而为。
我用英语和法语创建了一个多语言网站。与我在互联网上阅读的大多数建议与每种语言创建不同的php页面的人相反,我创建了一个MySql数组以对网站进行适当的本地化。我发现此解决方案更简洁,更优雅,因为我计划迟早添加更多语言。
我有一个Config.php文件,其中包含MySql的路径。默认情况下,语言是英语,除非您决定显示其他语言,例如法语:
$_SESSION['lang'] = "en";
}
else{
switch($_GET['lang']){
case "fr":
$_SESSION['lang'] = "fr";
break;
case "en":
$_SESSION['lang'] = "en";
break;
default :
$_SESSION['lang'] = "en";
break;
}
}
switch($_SESSION['lang']){
case "fr":
$language = "French";
break;
case "en":
$language = "English";
break;
}
显然,Config.php包含在所有其他php页面中。为了更改语言,我在导航栏中添加了带有标志的图像,这将在URL末尾添加?lang =:
<a href="?lang=fr"><img class="language" src="images/fr.png"></a>
<a href="?lang=en"><img class="language" src="images/en.png"></a>```
因此,如果您选择法语,则会在网址中添加?lang = fr。本地化效果很好,我很高兴。
但是,当我从导航栏导航到另一个页面时,它失去了法语(因为英语是默认语言:]
<a href="index.php"><?php echo $loc["header_home"] ?></a>
我知道这是有道理的,因为链接只是“ index.php”,而不是“ index.php?lang = fr”。
因此,我尝试使用cookie以保持所选的语言,这就是我遇到的问题。
我编辑了Config.php以进行设置和Cookie如下:
if ((isset($_GET['lang']) != "")) {
setcookie("langpref", "".$_GET['lang'] ."", time()+(0), "/", 'domain.com'); //expires at the end of the session//
$_COOKIE['langpref'] = $_GET['lang'];
}
到目前为止没有问题,直到我添加这些行:
if (isset($_COOKIE['langpref'])) {
if (strpos($_SERVER['PHP_SELF'],$_COOKIE['langpref']) === false) {
header("location: ". basename($_SERVER['PHP_SELF']). "?lang=". $_COOKIE['langpref'] );
}
}
我假设这是一种幼稚的方法,例如在^^'这样的网址中添加“?lang =“因为当我这样做时,我收到一条错误消息,提示由于不允许cookie或其他原因而无法加载页面。
欢迎任何帮助(或其他方法)!
提前谢谢您!
之所以写答案,是因为注释中没有足够的空间。
您将Cookie设置为立即失效,我已将其更改为一个小时。
if ((isset($_GET['lang']) != "")) {
setcookie("langpref", $_GET['lang'], time()+3600, "/"); //expires at the end of the session//
$_COOKIE['langpref'] = $_GET['lang'];
}
其他:
您只写"".$_GET['lang'] .""
时就已经写$_GET['lang']