获取django中的当前语言环境

时间:2015-01-20 14:11:10

标签: django localization internationalization locale

很容易在django app中的任何地方获取当前语言(例如en):django.utils.translation.get_lanaguage()

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

4 个答案:

答案 0 :(得分:0)

你试过to_locale()吗?

from django.utils.translation import to_locale, get_language
to_locale(get_language())

答案 1 :(得分:0)

languagelocale之间的区别(至少在Django中)只是格式化的问题。 enen-us都是语言,如果en-us是当前选定的语言,那么get_language()将返回该语言。

所以你的问题似乎是Django没有按照你期望的方式设置当前语言。 Django使用了long list种技术来尝试找出要使用的语言,所以我建议你努力工作,看看为什么语言不符合你的期望。

例如:

  

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

答案 2 :(得分:0)

Django的django.utils.translation.to_locale()期望一个像en-us这样的“语言名称”,并将其转换成一个像en_US这样的“语言环境名称”。

源代码:https://github.com/django/django/blob/master/django/utils/translation/init.py#L271-L284

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

如果您的“语言名称”只是一个简单的语言代码,例如en,它将仅返回en。如果要将en转换为en_US.UTF8之类的语言环境,则必须编写自己的to_locale()函数。您必须确定语言代码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_GB.UTF8的语言环境en_US.UTF8而不是en

然后可用于在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-reconfigure locales进行此操作。

答案 3 :(得分:0)

在相关(虚拟)环境中:

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

例如(“ en_GB”,“ UTF-8”)