检测浏览器首选语言以提供html页面

时间:2014-01-17 14:59:07

标签: php html

我是一名在html / css之外几乎没有编码知识的设计师。在网上阅读我发现很多人使用http_accept_language引用了一些php,但找不到一步一步的做法"做到这一点,做到这一点"解释因此我不知道如何处理/在哪里放置人们为工作提供的代码。

我正在开发一个带有英文主页的网站。在那里,用户可以选择两个分支。一个分支将仅使用英语,另一个分支将使用英语和3种斯堪的纳维亚语言。非英语页面是预翻译的,不是由谷歌即时创建的。

我希望在到达主要家庭后,选择进入4语言部分的用户将首先使用他们浏览器的语言提供一个页面(在所有页面上总会有一个手动菜单)如果愿意,请选择另一种语言。)

这是php的工作吗?如果是这样,我会感谢一些代码,并帮助我们使用它。

2 个答案:

答案 0 :(得分:2)

您可以使用HTTP_ACCEPT_LANGUAGE标头。将支持的语言保存到数组,然后使用foreach循环标题。

$languages = array('en', 'fi', 'sv', 'no');
$header = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach($header as $lang) {
    if(in_array($lang, $languages)) {
        header("Location: $lang.php"); // i.e. fi.php or se.php
            break;
    }
}

HTTP_ACCEPT_LANGUAGE包含以下内容:

  

接受语言:en-gb,en; q = 0.5

如您所见,有多种语言,en-gben。这就是为什么循环标题很聪明的原因。如果您更喜欢功能,请参阅以下内容:

function get_user_lang() {
    $languages = array('en', 'fi', 'sv', 'no');
    $header = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    foreach($header as $lang) {
        if(in_array($lang, $languages)) {
            return $lang; // i.e. fi.php or se.php
                break;
        }
    }
}
echo 'Your language is ' . get_user_lang();

循序渐进指南:

  1. 为每种语言创建新文件。将它们命名为:“fi.php”或“se.php”。

  2. 将第一个代码部分放在主页的顶部。该文件必须包含.php结尾,因此它必须是php文件。如果你不明白,那应该放在哪里:

    <?php 
     $languages = array('en', 'fi', 'sv', 'no');
     $header = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
     foreach($header as $lang) {
        if(in_array($lang, $languages)) {
        header("Location: $lang.php"); // i.e. fi.php or se.php
            break;
        }
     }
    ?>
    <!DOCTYPE html>
    <html>
      <head>
        <title>title</title>
      </head>
      <body>
        contents
      </body>
    </html> 
    
  3. 在浏览器中导航到您的主页。如果您的浏览器的语言是英语,它将重定向到“en.php”,如果瑞典语; “se.php”等等。

  4. 您可以看到来自this link的所有语言代码,瑞典语是“sv”。

答案 1 :(得分:0)

如果您有INTL扩展程序,则可以使用Locale::acceptFromHttp()

以下是PHP documentation的示例。

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale;

$locale将类似于“en_US”。如果您只想要语言而不是国家,请使用以下内容:

$locale = explode('_', Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']));
echo $locale[0];