Php 添加浏览器语言检测后,语言href锚(hl)停止工作
我知道如何在PHP中检测语言浏览器,以及如何检测语言href锚点以切换到另一个 我的旧代码没有来自http的Php 添加浏览器语言检测后,语言href锚(hl)停止工作,php,html,Php,Html,我知道如何在PHP中检测语言浏览器,以及如何检测语言href锚点以切换到另一个 我的旧代码没有来自http的locale\u accept\u($\u SERVER['http\u accept\u LANGUAGE']): 这些旧代码对于语言锚非常有效。比如: <a class="waves-effect" href="?hl=en_GB" name="en">English</a> <a class="waves-effect" href="?hl=pt_BR"
locale\u accept\u($\u SERVER['http\u accept\u LANGUAGE'])代码>:
这些旧代码对于语言锚非常有效。比如:
<a class="waves-effect" href="?hl=en_GB" name="en">English</a>
<a class="waves-effect" href="?hl=pt_BR" name="pt_BR">Português Brasileiro</a>
只有浏览器语言的检测工作得很好,但是语言href锚(hl)不工作,因为如果切换到葡萄牙语,页面仍然是英语的
类似于:
switch ($lang):
case "en":
$language = "en";
break;
case "en_GB":
$language = "en_GB";
break;
case "pt_BR":
$language = "pt_BR";
break;
case "pt_PT":
$language = "pt_PT";
break;
endswitch;
但我不想重复这些旧代码。我想继续压缩和缩短相同的新代码。我不明白switch语句在这里做什么?
它不起作用的原因是,您没有在任何情况下使用$lang变量,它只是在所有情况下将$language设置为自身
我想这会满足你的要求:
$language = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (isset($_GET['hl']))
{
$language = $_GET['hl'];
}
由于用户可以修改查询参数,我还建议使用in_数组检查值是否符合预期
switch ($lang):
case "en":
$language = "en";
break;
case "en_GB":
$language = "en_GB";
break;
case "pt_BR":
$language = "pt_BR";
break;
case "pt_PT":
$language = "pt_PT";
break;
endswitch;
$language = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (isset($_GET['hl']))
{
$language = $_GET['hl'];
}