Как использовать форму выбора для изменения языка с помощью PHP $ _GET и $ _POST?

Я должен извиниться, если на этот ответ уже был дан ответ, я искал его и нашел что-то частично полезное, но ничего, что отвечало моим потребностям.

Я новичок в PHP и хочу сделать простой сайт с многоязычной поддержкой. Переводы предоставляются определенными массивами в зависимости от страницы, на которой они находятся. Я буду использовать foreach цикл, чтобы получить перевод. Пользователь может изменить язык по умолчанию с select HTML-тег. Я частично могу достичь этой цели следующим образом:

Во-первых, с помощью простой функции я ищу язык браузера и устанавливаю его как запасной вариант языка:

function browser_lang() {
$rawLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

if($rawLang == 'it') {
$browserLang = 'it';
} else {
$browserLang = 'en';
}

return $browserLang;
}

в index.php В файле я задаю запасной язык следующим образом:

<?php
// Include the browser_lang() and other functions

if(isset($_POST['set_language'])) {
$lang = strip_bad_chars($_GET['lang']);
} else {
$lang = browser_lang();
}
?>

<html lang="<?php echo $lang; ?>">

Позже в HTML я добавил форму с тегом select, который позволяет выбирать языки:

<form action="" method="post">
<select name="set_language" id="custom-lang">
<option value="it">Italiano</option>
<option value="en">English</option>
</select>
<input type="submit" name="input_language" value="Set Language">
</form>

Когда я загружаю страницу в первый раз, скрипт может получить язык браузера, но когда я выбираю пользовательский язык, он не может его изменить.

Как я могу добавить ?lang=en или же ?lang=it в конце URL, чтобы использовать $_GET['lang'] и перебрать переводы с $lang переменная установлена ​​с этой формой выбора?

Целиком index.phpВключены внешние ресурсы, это:

<?php
function browser_lang() {
$rawLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

if($rawLang == 'it') {
$browserLang = 'it';
} else {
$browserLang = 'en';
}

return $browserLang;
}

function strip_bad_chars( $input ) {
$output = preg_replace( "/[^a-zA-Z0-9_-]/", "",$input);
return $output;
}

if(isset($_POST['set_language'])) {
$lang = strip_bad_chars($_GET['lang']);
} else {
$lang = browser_lang();
}
?>

<!DOCTYPE html>
<html lang="<?php echo $lang; ?>">
<head>
<title>HOME</title>
</head>

<body>
<form action="" method="post">
<select name="set_language" id="custom-lang">
<option value="it">Italiano</option>
<option value="en">English</option>
</select>
<input type="submit" name="input_language" value="Set Language">
</form>
</body>
</html>

0

Решение

Если вы хотите lang параметр в URL (который, я думаю, имеет смысл), вы можете просто немного изменить свою форму:

<form action="" method="get"><!-- use get instead of post-->
<select name="lang" id="custom-lang"><!-- change name to lang-->
... etc.

Таким образом, когда форма отправлена, вы будут иметь ?lang=en или же ?lang=it в URL, и вы можете использовать

if (isset($_GET['lang'])) {
$lang = strip_bad_chars($_GET['lang']);
} else {
$lang = browser_lang();
}

установить свой язык.

3

Другие решения

У вас, кажется, есть несколько проблем:

  1. Вы смешиваете методы представления (используя и то и другое ПОСТ и ПОЛУЧИТЬ)
  2. Вы проверяете на $_POST['set_language'] но ожидать $_GET['lang']
  3. <select> имя меню отличается от переменной, которую вы хотите использовать в <html> тега lang приписывать.

Что я бы сделал, так это остановился на методе; СООБЩЕНИЕ или же GET затем измените все ссылки на GET / POST соответственно, а затем используйте или «Set_language» или же «lang» — ваш суперглобальный ($ _GET / $ _ POST) массив.

0

Попробуй это

<?php
// Include the browser_lang() and other functions

if(isset($_POST['input_language'])) {
$lang1 = $_POST['set_language'];
if ($lang1 == "Italiano") {
$lang = "it"} else {
echo "en";
}
}
?>

<html lang="<?php echo $lang; ?>">
-1
По вопросам рекламы [email protected]