当前位置: 首页 > 面试题库 >

需要一个有关如何从Accept-Language请求标头中获取首选语言的示例

韦原
2023-03-14
问题内容

我需要一个代码示例或库来解析Accept-Language标头并返回我的首选语言。
RFC2616指出:

Accept-Language请求标头字段类似于Accept,但是限制了首选自然语言集作为对请求的响应。语言标签在3.10节中定义。

   Accept-Language = "Accept-Language" ":"
                     1#( language-range [ ";" "q" "=" qvalue ] )
   language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )

可以给每个语言范围一个相关的质量值,该质量值表示用户对该范围指定的语言的偏好的估计。质量值默认为“ q = 1”。

进一步的阅读显示,太多的“可选”,“应该”,“可能”和其他语音方式阻止了我重新发明轮子-我只想知道用户喜欢哪种语言,任何浏览器都会回答这个问题十亿次。一天。

任何语言的任何代码片段(请使用Lisp和Assembler除外)都将有所帮助。

提前谢谢了!


问题答案:

试试这个,它在PHP中,但是使用相同的正则表达式,我确定它可以适应任何语言:

$langs = array(); // used to store values

if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    // break up string into pieces (languages and q factors)
    preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);

    if (count($lang_parse[1])) {
        // create a list like "en" => 0.8
        $langs = array_combine($lang_parse[1], $lang_parse[4]);

        // set default to 1 for any without q factor
        foreach ($langs as $lang => $val) {
            if ($val === '') $langs[$lang] = 1;
        }

        // sort list based on value 
        arsort($langs, SORT_NUMERIC);
    }
}

首先产生具有首选语言的排序数组:

Array
(
    [en-ca] => 1
    [en] => 0.8
    [en-us] => 0.6
    [de-de] => 0.4
    [de] => 0.2
)

从示例ACCEPT_LANGUAGE标题:en-ca,en;q=0.8,en-us;q=0.6,de-de;q=0.4,de;q=0.2

这里的工作示例



 类似资料:
  • 问题内容: 请求中的accept-language标头通常是一个很长的复杂字符串- 例如。 有没有一种简单的方法可以在Java中解析它?还是可以帮助我做到这一点的API? 问题答案: 我建议使用让容器解析“接受语言”,而不是尝试自己管理复杂性。

  • 我正在构建一个Java的grpc服务器,我很难得到请求头。proto文件是使用Pro buf-maven-plugin编译的,基于生成的存根,我无法访问上下文或请求元数据。 我还尝试在消息请求中定义一个键/值列表,希望grpc能够处理头映射,但目前为止没有成功。 知道我怎么能拿到标题吗? 谢谢 我的原型文件内容: 服务器端实现如下所示: 版本请求。getHeadersCount()始终返回0,尽管

  • 问题内容: 我需要获取所有Django请求标头。根据我的阅读,Django只是将所有内容与大量其他数据一起转储到变量中。获取客户端发送到我的Django应用程序的所有标头的最佳方法是什么? 我将使用它们来构建httplib请求。 问题答案: 根据文档,这 是“包含所有可用HTTP标头的标准Python词典”。如果要获取所有标头,则可以简单地遍历字典。 代码的哪一部分执行此操作取决于你的确切要求。有

  • 问题内容: 我想在使用Spring的请求中设置的值。 这是我的Spring请求处理代码 这是我的Java REST客户端: 这对我有用;我从服务器端获取了JSON字符串。 我的问题是:当我使用RestTemplate时,如何指定标头(例如)和请求方法(例如,…)? 问题答案: 我建议使用可以接受的方法之一,也可以为其设置。(你也可以指定要使用的HTTP方法。) 例如, 我喜欢这种解决方案,因为它是

  • 我的问题是:在使用RESTTemplate时,如何指定头(例如、,...)和请求方法(例如、,...)?

  • Accept-Language请求的 HTTP 标头通告哪些语言客户端是能够理解,并且其区域的变体是优选的。使用内容协商,服务器然后选择其中一个提议,使用它并通过Content-Language响应头通知客户它的选择。浏览器根据它们的用户界面语言为该标题设置足够的值,并且即使用户可以改变它,这也很少发生(并且因为它导致指纹)而被忽视。 当服务器无法通过另一种方式确定语言时,使用此标题是一种暗示,例