【问题标题】:Python - Extract Main Language Code from HTTP / BrowserPython - 从 HTTP / 浏览器中提取主要语言代码
【发布时间】:2012-09-04 19:16:22
【问题描述】:

我需要一种方法来确定浏览器中设置的主要语言。我找到了一个非常棒的 PHP 解决方案,但不幸的是我使用的是 Django / Python。

我认为该信息在 HTTP 请求的 HTTP_ACCEPT_LANGUAGE 属性内。

对我有什么想法或现成的功能吗?

【问题讨论】:

    标签: python django http-accept-language


    【解决方案1】:

    您正在寻找request.META dictionary:

    print request.META['HTTP_ACCEPT_LANGUAGE']
    

    WebOb project 是一个轻量级 Web 框架,包括一个方便的 accept parser,您可以在这种情况下重复使用它:

    from webob.acceptparse import Accept
    
    language_accept = Accept(request.META['HTTP_ACCEPT_LANGUAGE'])
    print language_accept.best_match(('en', 'de', 'fr'))
    print 'en' in language_accept
    

    请注意,安装 WebOb 包不会干扰 Django 的功能,我们只是在此处重新使用包中恰好非常有用的一个类。

    简短的演示总是更能说明问题:

    >>> header = 'en-us,en;q=0.5'
    >>> from webob.acceptparse import Accept
    >>> lang = Accept(header)
    >>> 'en' in lang
    True
    >>> 'fr' in lang
    False
    >>> lang.best_match(('en', 'de', 'fr'))
    'en'
    

    【讨论】:

    • 我知道这一点,但我需要一种方法来检测主要语言。大多数情况下,HTTP_ACCEPT_LANGUAGE 是一个包含不同语言等的字符串
    • 请注意,客户端可能并不总是传递HTTP_ACCEPT_LANGUAGE,即使传递,它的值也可能不正确。最简单的方法是让用户明确选择他们的语言。
    • 它只是我网站上的一个小功能。如果我得到代码,它很好。如果没有,我就用德语或英语...
    【解决方案2】:

    这是我使用的一个功能,那是我的创作自我。

    def language(self):
            if 'HTTP_ACCEPT_LANGUAGE' in self._request.META:
                lang = self._request.META['HTTP_ACCEPT_LANGUAGE']
                return str(lang[:2])
            else:
                return 'en'
    

    随便叫吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多