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



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

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

我希望在到达主主页后,选择进入 4 种语言部分的用户最初将获得浏览器语言的页面(在所有页面上,如果愿意,将始终有一个菜单可以手动选择另一种语言)。

这是php的工作吗?如果是这样,我将不胜感激一些代码和如何使用它的帮助。

您可以使用

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. 您可以从此链接查看所有语言代码,瑞典语是"sv"。

如果您有 INTL 扩展名,您可以使用 Locale::acceptFromHttp() .

下面是 PHP 文档中的示例。

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

$locale将是类似于"en_US"的东西。如果您只想要语言而不是国家/地区,请使用如下所示的内容:

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

最新更新