我正在做自己的网站,我设法编写了一些代码,根据浏览器的语言将用户指向语言版本.这是脚本:
<?php
if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "sv")
header("location: index.php");
if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "pt")
header("location: pt/index.php");
else
header("location: en/index.html");
?>
Run Code Online (Sandbox Code Playgroud)
我把它放在index.php之前.这似乎有效,因为我不在英语国家,但我的浏览器是英文,我被重定向到英文版.
它是否正确?有没有更好/更清洁的方法来做到这一点?
<?php
$language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
echo $language;
?>
Run Code Online (Sandbox Code Playgroud)
当我使用Firefox测试的代码块,我得到的en-us,en;q=0.7,ja;q=0.3,
当我使用IE来测试代码块时,我明白了zh-cn.
是$_SERVER['HTTP_ACCEPT_LANGUAGE']一个字符串的值?如何确定首选语言是中文还是日文?如何编写正则表达式来获取语言的值$_SERVER['HTTP_ACCEPT_LANGUAGE']?
我在PHP中编写了一个小脚本,用于检查浏览器的语言设置并将其重定向到站点的语言版本(WP多站点),
function redirect() {
$language = substr( $_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2 );
switch( $language ) {
case 'sv':
header( 'Location: http://www.example.com/sv/' );
break;
case 'no':
header( 'Location: http://www.example.com/no/' );
break;
case 'da':
header( 'Location: http://www.example.com/da/' );
break;
default:
header( 'Location: http://www.example.com/' );
break;
}
}
if ( strlen($url) < 4 ) {
session_start();
if ( empty($_SESSION[ 'language' ]) ) {
$_SESSION[ 'language' ] = true;
redirect();
}
}
Run Code Online (Sandbox Code Playgroud)
使用Mobile Safari或Mobile Chrome进行测试时,重定向似乎不起作用.我需要考虑移动浏览器的接受语言是否有任何特殊输出?
更新:经过一些调试后我发现了这个:
可能重复:
HTTP_ACCEPT_LANGUAGE
我尝试编写语言选项工具。为此我用
$default_language = (strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
if (eregi('af', $default_language)) {do something}
Run Code Online (Sandbox Code Playgroud)
现在我想在回显时订购字符串:
$_SERVER["HTTP_ACCEPT_LANGUAGE"]
Run Code Online (Sandbox Code Playgroud)
例如,用户指定了多种语言。
带有不同语言的Chrome示例:
nl,en-gb;q=0.8,en;q=0.6,fr;q=0.4,fr-ca;q=0.2
Run Code Online (Sandbox Code Playgroud)
因此,我如何读出字符串以一定的顺序显示它,nl这是我首选的第一语言。
该代码应类似于:
if ('nl'== array[0]) {do something}
Run Code Online (Sandbox Code Playgroud)
因此,如果有人可以帮助我,我将不胜感激。
非常感谢。
php ×4
localization ×2
arrays ×1
html ×1
http ×1
http-headers ×1
redirect ×1
regex ×1
string ×1