Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在django中获取当前区域设置_Django_Localization_Internationalization_Locale - Fatal编程技术网

正在django中获取当前区域设置

正在django中获取当前区域设置,django,localization,internationalization,locale,Django,Localization,Internationalization,Locale,在django应用程序中的任何位置都可以轻松获取当前语言(如en):django.utils.translation.get_language() 但是如何获取当前区域设置(例如en_US或en_GB)?您是否尝试到\u locale() language和locale(至少在Django中)之间的区别只是格式问题。en和en-us都是语言,如果en-us是当前选择的语言,则该语言将由get\u language()返回 因此,您的问题似乎是Django没有按照您期望的方式设置当前语言。Djan

在django应用程序中的任何位置都可以轻松获取当前语言(如en):django.utils.translation.get_language()


但是如何获取当前区域设置(例如en_US或en_GB)?

您是否尝试
到\u locale()


language
locale
(至少在Django中)之间的区别只是格式问题。
en
en-us
都是语言,如果
en-us
是当前选择的语言,则该语言将由
get\u language()
返回

因此,您的问题似乎是Django没有按照您期望的方式设置当前语言。Django使用了一系列技术来尝试和找出要使用的语言,因此我建议您继续研究,看看为什么语言不是您所期望的

例如:

如果基础语言可用,但指定的子语言不可用,Django将使用基础语言。例如,如果用户指定
de at
(奥地利德语),但Django只有
de
可用,Django使用
de


Django的
Django.utils.translation.to_locale()
需要像
en-us
这样的“语言名称”,并将其转换为像
en_-us
这样的“语言名称”

源代码:

它基本上只是做一些字符串操作

如果您的“语言名称”只是一个简单的语言代码,如
en
,它将返回
en
。如果要将
en
转换为类似
en\u US.UTF8
的语言环境,则必须编写自己的
到语言环境()
函数。您必须确定语言代码
en
所需的语言环境。例如:

LANG_TO_LOCALE = {
    'en': 'en_US.UTF8',
    'nl': 'nl_NL.UTF8',
    'es': 'es_ES.UTF8'
}

def lang_to_locale(language_code):
    return LANG_TO_LOCALE.get(language_code)
例如,根据您的喜好,您可能希望获得语言代码
en
的区域设置
en_GB.UTF8
,而不是
en_US.UTF8

然后,可以使用该选项设置Python中的区域设置:

import locale
locale.setlocale(locale.LC_ALL, lang_to_locale('nl'))
然后您可以获得所需语言的月份名称:

from datetime import datetime
print(datetime.strftime(datetime.now(), '%B'))  # Prints month name in Dutch
要实现这一点,您需要在系统上安装适当的语言环境包。在Ubuntu上,您可以在相关(虚拟)环境中使用
sudo dpkg重新配置区域设置

python
>>> import locale
>>> locale.getlocale()

e、 g.('en_GB','UTF-8')

to_locale(get_language())仍然只在语言为'en'时输出'en'。to_locale的文档说:将语言名称(en-us)转换为语言名称(en_-us)。如果“to_lower”为真,则最后一个组件为小写(en_us)。。。。。。因此,它需要一个语言名称,即语言+国家。我的问题是,区域设置同时包含语言和国家,因此不能仅从语言中提取。
python
>>> import locale
>>> locale.getlocale()