PHP не может получить cookie на одной странице - PullRequest
0 голосов
/ 19 сентября 2019

Мой веб-сайт имеет два языка (английский и немецкий), между которыми пользователь может выбрать, нажав кнопку.Затем он устанавливает cookie для хранения этого решения для 24h.Я также использую класс php-i18n из GitHub.Он работает путем хранения всех языковых текстов в определенных *.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>

У кого-нибудь есть вход?Идеи, как улучшить код, также всегда высоко ценятся, так как я все еще учусь.

1 Ответ

0 голосов
/ 19 сентября 2019

Попробуйте это: (не "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';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...