如何使用 select 表单通过 PHP $_GET 和 $_POST 更改语言?
How to use a select form to change language with PHP $_GET and $_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 标签的表单,允许 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>
当我第一次加载页面时,脚本能够检索浏览器语言,但是当我 select 自定义语言时,它无法更改它。
如何在 url 末尾添加 ?lang=en
或 ?lang=it
以便使用 $_GET['lang']
并使用 $lang
循环翻译使用 select 形式设置的变量?
包括外部资源在内的整个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>
如果你想要 URL 中的 lang
参数(我认为这是有道理的)你可以稍微改变一下你的形式:
<form action="" method="get"><!-- use get instead of post-->
<select name="lang" id="custom-lang"><!-- change name to lang-->
... etc.
这样,当提交表单时,您将在URL中有?lang=en
或?lang=it
,您可以使用
if (isset($_GET['lang'])) {
$lang = strip_bad_chars($_GET['lang']);
} else {
$lang = browser_lang();
}
设置您的语言。
试试这个
<?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; ?>">
你好像有几个问题:
- 您正在混合提交方法(使用 POST 和 GET)
- 您检查了
$_POST['set_language']
但期望 $_GET['lang']
<select>
菜单的命名与您希望在 <html>
标签的 lang
属性中使用的变量不同。
我要做的是确定一个方法; POST 或 GET 然后将所有 ref 分别更改为 GET/POST,然后使用 either "set_language" 或 "lang"作为你的超全局($_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 标签的表单,允许 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>
当我第一次加载页面时,脚本能够检索浏览器语言,但是当我 select 自定义语言时,它无法更改它。
如何在 url 末尾添加 ?lang=en
或 ?lang=it
以便使用 $_GET['lang']
并使用 $lang
循环翻译使用 select 形式设置的变量?
包括外部资源在内的整个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>
如果你想要 URL 中的 lang
参数(我认为这是有道理的)你可以稍微改变一下你的形式:
<form action="" method="get"><!-- use get instead of post-->
<select name="lang" id="custom-lang"><!-- change name to lang-->
... etc.
这样,当提交表单时,您将在URL中有?lang=en
或?lang=it
,您可以使用
if (isset($_GET['lang'])) {
$lang = strip_bad_chars($_GET['lang']);
} else {
$lang = browser_lang();
}
设置您的语言。
试试这个
<?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; ?>">
你好像有几个问题:
- 您正在混合提交方法(使用 POST 和 GET)
- 您检查了
$_POST['set_language']
但期望$_GET['lang']
<select>
菜单的命名与您希望在<html>
标签的lang
属性中使用的变量不同。
我要做的是确定一个方法; POST 或 GET 然后将所有 ref 分别更改为 GET/POST,然后使用 either "set_language" 或 "lang"作为你的超全局($_GET/$_POST)数组键。