相关疑难解决方法(0)

自动检测语言并重定向用户

我正在做自己的网站,我设法编写了一些代码,根据浏览器的语言将用户指向语言版本.这是脚本:

<?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 localization

16
推荐指数
3
解决办法
4万
查看次数

如何使用PHP从$ _SERVER ['HTTP_ACCEPT_LANGUAGE']获取语言值?

<?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 regex localization http internationalization

14
推荐指数
2
解决办法
2万
查看次数

语言重定向适用于桌面,但不适用于移动浏览器

我在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时,Mobile Safari会显示正确的语言,但不会重定向.
  • 移动Chrome(仅适用于iOS,适用于Android)无法显示正确的语言(默认为"en").
  • iOS以不同的顺序解析http标头数据,比较iOS Chrome(en-US,en; q = 0.8,sv; q = 0.6)和OSX …

php redirect url-redirection http-accept-language

9
推荐指数
1
解决办法
1519
查看次数

如何从HTTP_ACCEPT_LANGUAGE订购字符串

可能重复:
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)

因此,如果有人可以帮助我,我将不胜感激。

非常感谢。

html php arrays string http-headers

1
推荐指数
1
解决办法
2588
查看次数