Подтвердить что ты не робот

Системное форматирование даты без использования локали django

Попытка понять реализацию 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. Однако doc говорит:

[...] Два пользователя, которые обращаются к одному и тому же контенту, но на разных языках, будут видеть поля даты и числа, отформатированные по-разному, в зависимости от формата для их текущего языка [...]

Говорят ли они о наборе локалей для своего браузера?
Если нет, как я могу установить его по умолчанию по умолчанию?

4b9b3361

Ответ 1

Локализация Django работает в контексте шаблонов и форм Django и не может перемещаться по цепочке к представлениям внутреннего представления в формате Python:

When using Django 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" }}, будет зависеть от пользовательской локали.

Однако внутренний strftime('%c') Python не имеет доступа к настройкам 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.