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

标签 python django localization date-format

试图理解 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/

相关文章:

python - 如何将数组保存到格式为 f10.0 的文本文件中?

python - 无法使用selenium和Python连接到网页

localization - 本地化静态网站的正确方法是什么

python - 在 Python 中使用 Olson 时区

ios - imageNamed 和本地化问题

python - 自定义 Django 数据库前端

python - 如何在Python中从字符串中就地删除重复项?

python - 使用查询集 Model.objects.aggregate(Sum(***)) 对数据库列的所有值求和

django - 在 Django 中使用 UTF-8 编码的 JSON fixture 文件

django - 如何更改序列化程序中持续时间字段值的格式?