从 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 模板中的“Else if”语句出现在 HTML 标头块之后