试图理解 Django 中的 L10N 实现,这是我的设置
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是说:
[...] Two users accessing the same content, but in different language, will see date and number fields formatted in different ways, depending on the format for their current locale [...]
他们是在谈论为各自浏览器设置的语言环境吗?
如果没有,我如何将其设置为默认法语?
最佳答案
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
。
关于python - 系统日期格式不使用 django 语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801397/