为什么我的本地化cookie似乎不想改变?

时间:2009-08-28 14:12:11

标签: php cookies localization internationalization logic

为什么我不能更改cookie?如果您选择的语言不能更改。如果要更改语言,则必须清空Cookie。那是为什么?

if (isset($_GET['setLang']) && $_GET['setLang'] == 'en' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'en') {
setcookie("setLang", 'en', time()+(3600*12)); //expires in 12 hours
include('language/en/common.php');
}


elseif (isset($_GET['setLang']) && $_GET['setLang'] == 'se' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'se') {
setcookie("setLang", 'se', time()+(3600*12)); //expires in 12 hours
include('language/se/common.php');
}

else if (isset($_GET['setLang']) && $_GET['setLang'] == 'fr' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'fr') {
setcookie("setLang", 'fr', time()+(3600*12)); //expires in 12 hours
include('language/fr/common.php');
}

// default language is english
else {
  include('language/en/common.php');
}

3 个答案:

答案 0 :(得分:3)

您当然可以更改Cookie。您无法使用您所拥有的逻辑更改语言,因为您编写它的方式,$_COOKIE中的现有设置总是会覆盖$_GET中的设置(除了en对于$_GET,首先会检查en,所以如果您开始使用其他语言,那么现在应该可以切换到$_GET。如果您希望能够更改语言,则需要首先对$_COOKIE进行所有检查,然后对{{1}}进行所有检查。

答案 1 :(得分:2)

逻辑也伤害了我的大脑。

$language = $_GET['setLang'] || $_COOKIE['setLang']) || 'en';
setcookie("setLang", $language, time()+(3600*12));
include('language/' . $language . '/common.php');

应该达到同样的效果并修复你的cookie问题(尽管未经测试)。

答案 2 :(得分:0)

  

setcookie()定义了一个cookie   与HTTP的其余部分一起发送   头。像其他标题,饼干   必须在任何输出之前发送   你的脚本(这是一个协议   限制)。这需要你   在此之前调用此函数   任何输出,包括和    标签以及任何空格。

http://in3.php.net/setcookie