Я должен извиниться, если на этот ответ уже был дан ответ, я искал его и нашел что-то частично полезное, но ничего, что отвечало моим потребностям.
Я новичок в 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>
Если вы хотите 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();
}
установить свой язык.
У вас, кажется, есть несколько проблем:
$_POST['set_language']
но ожидать $_GET['lang']
<select>
имя меню отличается от переменной, которую вы хотите использовать в <html>
тега lang
приписывать.Что я бы сделал, так это остановился на методе; СООБЩЕНИЕ или же GET затем измените все ссылки на GET / POST соответственно, а затем используйте или «Set_language» или же «lang» — ваш суперглобальный ($ _GET / $ _ POST) массив.
Попробуй это
<?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; ?>">