【问题标题】:PHP can't retrieve cookie on one pagePHP无法在一页上检索cookie
【发布时间】:2019-09-19 09:28:30
【问题描述】:

我的网站有两种语言(英语和德语),用户可以通过单击按钮在它们之间进行选择。然后它设置一个 cookie 来存储 24h 的这个决定。我也在使用来自GitHub 的php-i18n 类。它通过将所有语言文本存储在特定的*.ini 文件中来工作。根据选择的语言,通过PHP 变量显示德语或英语文本。我希望我解释得足够好。

除了我的“法律详情”页面外,一切正常。由于这一页有很多文字,我把这一页做了两个版本,一个英文,一个德文。根据选择的语言,我想显示相应的页面版本。但不知何故,它总是最终成为“默认德语”版本。关于为什么我的代码不起作用,我可能遗漏了一些非常明显的东西。

PHP 在标题中(动态的,首先显示在所有页面上):

require_once 'i18n.class.php';
$i18n = new i18n('lang/lang_{LANGUAGE}.ini', 'langcache/', 'de');
// Parameters: language file path, cache dir, default language (all optional)
$i18n->setForcedLang('de');

// language buttons & set cookie
if(isset($_GET['lang'])) {
  $lang=$_GET['lang'];
  if ($lang == 'de') {
    $i18n->setForcedLang('de');
    setcookie('language', 'lang-de', time() + 86400, '/');
    echo "german cookie set!";
  }
  if ($lang == 'en') {
    $i18n->setForcedLang('en');
    setcookie('language', 'lang-en', time() + 86400, '/');
    echo "english cookie set!";
  }
}

// get language cookie
if (isset($_COOKIE['language']) && $_COOKIE['language']== "lang-de") {
  echo "german cookie is really set, now get it!";
  $i18n->setForcedLang('de');
} else if (isset($_COOKIE['language']) && $_COOKIE['language']== "lang-en") {
  echo "english cookie is really set, now get it!";
  $i18n->setForcedLang('en');

} else {
  echo "no cookie set";
}

// init object: load language files, parse them if not cached, and so on.
$i18n->init();

PHP在法律详情页面:

include 'templates/header.php';

// show english or german legal details
if(isset($_GET['lang'])) {
  $lang=$_GET['lang'];
  if ($lang == 'de') {
    echo "k, german impressum";
    include 'impressum-de.php';
  } else if ($lang == 'en') {
    echo "english impressum";
    include 'impressum-en.php';
  }
} else if ($language == 'de') {
  echo "german impressum b/c cookie";
  include 'impressum-de.php';
} else if ($language == 'en') {
  echo "english impressum b/c cookie";
  include 'impressum-en.php';
} else {
  echo "default German impressum";
  include 'impressum-de.php';
}

按钮:

<div class="language">
  <a href="?lang=de" name="lang-de" class="lang-de">DE</a>/
  <a href="?lang=en" name="lang-en" class="lang-en">EN</a>
</div>

有人有意见吗?由于我仍在学习中,因此也总是非常感谢如何改进代码的想法。

【问题讨论】:

  • 我认为cookie设置是正确的,你的问题在你代码的其他地方
  • 那么问题可能出在链接上吗? (我会把它添加到我的帖子中)

标签: php cookies internationalization


【解决方案1】:

试试这个:(不是“else if”->它的“elseif”)

include 'templates/header.php';

// show english or german legal details
if(isset($_GET['lang'])) {
  $lang=$_GET['lang'];
  if ($lang == 'de') {
    echo "k, german impressum";
    include 'impressum-de.php';
  } elseif ($lang == 'en') {
    echo "english impressum";
    include 'impressum-en.php';
  }
} elseif ($language == 'de') {
  echo "german impressum b/c cookie";
  include 'impressum-de.php';
} elseif ($language == 'en') {
  echo "english impressum b/c cookie";
  include 'impressum-en.php';
} else {
  echo "default German impressum";
  include 'impressum-de.php';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多