Я пытаюсь настроить, как я думал, простой языковой переключатель. Я думал, что буду использовать PHP-файлы cookie, но они не ведут себя так, как предполагалось.
Я прочитал несколько руководств по куки-файлу и рассмотрел несколько подобных примеров здесь, в StackOverflow, но я должен что-то упустить, потому что он не может заставить его работать правильно.
Я устанавливаю язык, передавая его как переменную URL (lang = en или lang = ru). Все кажется, что все в порядке. Тем не менее, код, который у меня есть в тот момент, который устанавливает cookie, кажется, отстает на один шаг, поэтому изначально он не имеет значения (я бы хотел, чтобы он был «en» по умолчанию), тогда, если пользователь нажимает «ENG», кнопка все равно не имеет значения, а затем, если пользователь нажимает на русский, значение отображается как «en», а затем, если я снова нажимаю кнопку «ENG», значение отображается как «ru».
Вот код, который я объединил:
if( $_GET['lang'] ) { $lang = (string)$_GET['lang']; setcookie( 'lang', $lang, time() + 60*60*24*30 ); } elseif( !isset($_COOKIE['lang']) ) { $lang = 'en'; } else { $lang = $_COOKIE['lang']; }
Как только у меня получится эта работа, я намерен использовать значение cookie для отображения английского или русского меню с использованием некоторого условного PHP.
Благодарю.
Спасибо за все предложения – @Mob поставил меня в правильном направлении, то есть обработал файл cookie на другой странице, а затем отправил вас обратно.
Я немного больше думал и экспериментировал, и я, наконец, решил это. Я отправлю код ниже, если кто-то еще захочет это использовать.
На главной странице поставьте это:
<form action="language_switcher.php" method="post"> <select name="lang"> <option value="en"<?php if( $_COOKIE["language"] == "en" ) { echo " selected"; } ?>>English</option> <option value="ru"<?php if( $_COOKIE["language"] == "ru" ) { echo " selected"; } ?>>Russian</option> </select> <input type="submit" value="Select Language"> </form> <p>Language: <?php if( isset( $_COOKIE["language"] ) ) { echo $_COOKIE["language"]; } else { echo "<em>not set</em>"; } ?></p>
Затем в другом файле с именем 'language_switcher.php' введите следующий код:
$lang = "en"; if( isset( $_POST["lang"] ) ) { $lang = $_POST["lang"]; setcookie ( 'language', $lang, time() + 60*60*24*30, '/', 'mydomain.com'); header( "Location: /previous_page_url.php" ); }
Пользователь выбирает язык и нажимает «Выбрать язык». Затем форма отправляет значение формы в 'language_switcher.php', которое устанавливает cookie, а затем отправляет пользователя на предыдущую страницу.
Готово! 🙂
if ( !empty($_GET['language']) ) { $_COOKIE['language'] = $_GET['language'] === 'en' ? 'en' : 'nl'; } else if ( empty($_COOKIE['language']) ) { $_COOKIE['language'] = 'nl'; } setcookie('language', $_COOKIE['language']);
Куки-файлы недоступны до тех пор, пока страница настроек не будет перезагружена или другая страница не будет доступна (другими словами, вы не можете установить и получить доступ к файлу cookie на той же странице).
Проверьте этот код:
if( $_GET['lang'] ) { $lang = (string)$_GET['lang']; setcookie( 'lang', $lang, time() + 60*60*24*30,'/' ); } elseif( !$_GET['lang']) ) { $lang = 'en'; } else { $lang = $_GET['lang']; } header("Location: redirect_file.php")
Затем в redirect_file.php
вы перенаправляетесь обратно на страницу cookie. Выполните некоторые проверки, если вы хотите избежать переадресации циклов.
Попробуй это,
if ( !isset( $_GET['lang'] ) ) { if ( isset( $_COOKIE['lang'] ) ) { $lang = $_COOKIE['lang']; } else { $lang = 'en'; } } else { $lang = (string)$_GET['lang']; setcookie( 'lang', $lang, time() + 60*60*24*30 ); }
Если директива lang не установлена в GET, проверьте, есть ли набор файлов cookie.
Если он использует свое значение или по умолчанию используется «en». Если задана директива lang, установите cookie.
Это почти тот же код, но немного оптимизирован. (Лучше ставить условия, которые кажутся больше всего на вершине ifs.
Я использовал PHP $ _SERVER ['PHP_SELF'] для обновления текущей страницы и учета выбранного языка.
Пример прилагаемого кода. имя файла: language_switcher.php
<?php error_reporting(E_ERROR); $lang = "en"; if( isset( $_COOKIE["language"] ) ) { $lang = $_COOKIE["language"]; } if( isset( $_POST["lang"] ) ) { $lang = $_POST["lang"]; setcookie ( 'language', $lang, time() + 60*60*24*30, '/','localhost'); $refresh = $_SERVER['PHP_SELF']; header( "Location: $refresh"); } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Test Page Language Toggle</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php // Text definitions $text = array( 'en' => array( 'selectlang' => 'Select Language', 'lingua' => 'Language: ', 'filename' => 'You are in this location: ' ), 'fr' => array( 'selectlang' => 'Séléctionner', 'lingua' => 'Langue: ', 'filename' => 'Vous lisez ce fichier: ' ) ); ?> <form action="language_switcher.php" method="post"> <select name="lang"> <option value="en"<?php if( $_COOKIE["language"] == "en" ) { echo "selected"; } ?>>English</option> <option value="fr"<?php if( $_COOKIE["language"] == "fr" ) { echo " selected"; } ?>>Français</option> </select> <input type="submit" value="<?php echo $text[$lang][selectlang]; ?>"> </form> <p><?php echo $text[$lang][lingua]; if( isset( $_COOKIE["language"] ) ) { echo $_COOKIE["language"]; } else { echo "<em>not set</em>"; } ?></p> <br> <p><?php echo $text[$lang][filename] . $_SERVER['PHP_SELF']; ?></p> </body> </html>