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

Pie*_*NAY 14 python django localization date-format

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

LANGUAGE_CODE = 'fr-FR'
USE_L10N = True
Run Code Online (Sandbox Code Playgroud)

如果我试试

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

它会给我'Wed May 30 15:30:00 2012'这是EN语言环境.然而,医生说:

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

他们在谈论为各自的浏览器设置的区域设置吗?
如果没有,我怎么能默认将它设置为法语?

Kar*_*mel 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. 
Run Code Online (Sandbox Code Playgroud)

因此,如果您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'
Run Code Online (Sandbox Code Playgroud)

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