不使用django语言环境的系统日期格式

时间:2012-05-29 14:42:01

标签: python django localization date-format

尝试将L10N实现理解为Django,这是我的设置

LANGUAGE_CODE = 'fr-FR'
USE_L10N = True

如果我尝试

>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M')
      .strftime('%c')

它会向我'Wed May 30 15:30:00 2012'提供 EN 区域设置。但是doc说:

  

[...]访问相同内容但使用不同语言的两个用户将看到以不同方式格式化的日期和数字字段,具体取决于其当前区域设置的格式[...]

他们是在谈论为各自浏览器设置的区域设置吗? 如果没有,默认情况下如何将其设置为法语?

1 个答案:

答案 0 :(得分:24)

Django的本地化工作在Django模板和表单的上下文中,并且无法通过链接到Python的内部日期时间表示:

When using Django's formatting system, dates and numbers on templates 
will be displayed using the format specified for the current locale. 
...Django will also use localized formats when parsing data in forms. 

因此,如果您有USE_L10N = True且区域FR的用户在表单中输入10,45,则会在英文十进制系统中将其解释为10.45。同样,{{ value|date:"SHORT_DATE_FORMAT" }}等模板标记的输出也会因用户的区域设置而异。

但是,Python内部strftime('%c')不能访问Django的设置,而是指在安装它的机器上设置的语言环境。您可以使用以下命令检索和更改Python指向的区域设置:

>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M').strftime('%c')
'Wed May 30 15:30:00 2012'
>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.getdefaultlocale()
('en_US', 'UTF-8')
>>> locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
'fr_FR.UTF-8'
>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M').strftime('%c')
'Mer 30 mai 15:30:00 2012'

或者通过设置环境变量$LANG