14

试图了解 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语言环境。然而,医生说:

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

他们是在谈论为各自浏览器设置的语言环境吗?
如果没有,例如,我如何将其默认设置为法语?

4

1 回答 1

25

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英文十进制系统中的意思。类似地,模板标签 like 的输出{{ 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

于 2012-05-29T15:11:52.403 回答