从 HTML 标头在 Django 中获取正确的语言代码

Posted

技术标签:

【中文标题】从 HTML 标头在 Django 中获取正确的语言代码【英文标题】:Get correct language code in Django from HTML header 【发布时间】:2015-09-25 14:40:05 【问题描述】:

我正在尝试从 html 头 ACCEPT-LANGUAGE 标头中获取语言选择。我为此使用了 parse_accept_lang_header() 模块。但是它以小字符返回了我所有的语言代码。像这样[('pt-pt', 1.0), ('pt-br', 0.8), ('en-us', 0.5), ('en', 0.3)] 但我想得到像第一个小字符,第二部分大写校正器。喜欢这个[('pt-PT', 1.0), ('pt-BR', 0.8), ('en-US', 0.5), ('en', 0.3)]。那我该怎么做呢?

我的代码如下:

from django.utils.translation.trans_real import parse_accept_lang_header
header_locales =parse_accept_lang_header(
                                  request.META.get('HTTP_ACCEPT_LANGUAGE', None))

header_locales 以小字符返回给我的语言环境名称。

【问题讨论】:

如果因为parse_accept_lang_header而只是小写,您可以考虑将parse_accept_lang_header (it's pretty straightforward) 的源代码复制到您的应用中并修改为不更改为小写。可能是您最快的路径。 【参考方案1】:

看来 django 会为您的语言代码小写(谢谢 dgel)。有理由需要大写版本吗?我猜你总是可以自己拆分代码并将其大写。或者,您可以复制 parse_accept_lang_header 代码的功能而无需小写位。不过,我不确定用例是什么。

如果你需要查询你的数据库,你总是可以使用类似下面的东西(来自here和original documenation):

MyClass.objects.filter(name__iexact=my_parameter)

【讨论】:

django does muck with it @dgel 哦,因为他正在调用 parse_accept_lang_header。杜普,办公室。我以为他说的是 request.META.get 中的字符串是小写的。 我需要大写版本来显示与我的数据库匹配的语言代码。在数据库中,它是小写和大写混合版本! :// @safwan 你总是可以只做一个不区分大小写的查询,看看我的编辑。 啊,那么你唯一的选择就是发布 parse_accept_lang_header 的结果,或者只是复制/粘贴并调整该功能。

以上是关于从 HTML 标头在 Django 中获取正确的语言代码的主要内容,如果未能解决你的问题,请参考以下文章

如何从标头中正确获取 jwt 令牌并将其与 express 一起使用

django - 将标头从管理员复制到所有模板

我的 Django 模板中的“Else if”语句出现在 HTML 标头块之后

Django Rest Framework - 如何在 urls.py 中获取 Http 标头信息

Django:检测数据库后端

从 Django 静态文件夹中获取图像的正确方法