如果以前已经回答了这个答案,我必须道歉,我已经找到了它,发现了一些部分有用但没有任何东西可以满足我的需求。
我是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
,以便使用$_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 :(得分:3)
如果您想要URL中的lang
参数(我认为这是有道理的),您可以稍微更改一下表单:
<form action="" method="get"><!-- use get instead of post-->
<select name="lang" id="custom-lang"><!-- change name to lang-->
... etc.
这样,提交表单后, 会在网址中显示?lang=en
或?lang=it
,您可以使用
if (isset($_GET['lang'])) {
$lang = strip_bad_chars($_GET['lang']);
} else {
$lang = browser_lang();
}
设置你的语言。
答案 1 :(得分:0)
你似乎有几个问题:
$_POST['set_language']
,但期望$_GET['lang']
<select>
菜单的名称与您希望在<html>
代码的lang
属性中使用的变量的名称不同。我要做的是确定一种方法; POST 或 GET然后分别将所有引用更改为GET / POST,然后使用 “set_language”或“lang”作为您的超全局($ _GET / $ _ POST)数组键。
答案 2 :(得分:-1)
试试这个
<?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; ?>">