系统日期格式不使用djang

2024-05-20 22:04:54 发布

您现在位置:Python中文网/ 问答频道 /正文

试图理解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 [...]

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


Tags: thedjangoin语言truedatetime环境use
1条回答
网友
1楼 · 发布于 2024-05-20 22:04:54

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

相关问题 更多 >