【问题标题】:Why does my localization cookie seem to not want to change?为什么我的本地化 cookie 似乎不想更改?
【发布时间】:2009-08-28 23:17:07
【问题描述】:

为什么我不能更改 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');
}

【问题讨论】:

  • 读到这个逻辑伤了我的大脑:(.

标签: php cookies localization internationalization logic


【解决方案1】:

您当然可以更改 cookie。您无法使用那里的逻辑更改语言,因为您编写它的方式,$_COOKIE 中的现有设置将始终覆盖$_GET 中的设置(en 除外, 其中$_GET 将首先被检查,所以现在你应该能够切换到en 如果你开始使用另一种语言)。如果您希望能够更改语言,则需要先对 $_GET 进行所有检查,然后对 $_COOKIE 进行所有检查。

【讨论】:

  • 或者更好的是,为了让事情更清楚,选择两个位置之一作为“规范语言源”,并让您的所有语言更改代码仅基于该一个源。然后你有另一个源覆盖。例如。使$_GET 成为规范源,因此您有一个include 的小简介,如果$_GET 不存在,则覆盖cookie 并将$_GET 设置为其默认内容。
【解决方案2】:

这个逻辑也伤了我的脑筋。

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

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

【讨论】:

  • 请不要那样做。至少有一个允许的语言代码列表并对此进行验证,然后盲目相信用户的输入并在包含中使用它。
  • (实际上,由于最后一个词是'en'$language 将永远是true。)
【解决方案3】:

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

http://in3.php.net/setcookie

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 2022-01-05
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多