2012-05-29 4 views
12

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

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

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

ответ

21

локализация 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.

+0

Благодарим вас за подробный ответ. Я забыл заметить, что 'datetime', очевидно, не имеет никакого отношения к Django :) Теперь, если мне нужно отправить список форматированных дат JSON, что было бы лучшим способом отформатировать его в зависимости от локали пользователей? –

+0

Я предполагаю, что это потребует фактической сборки JSON после того, как вы узнаете о локали пользователя. Попробуй это? https://docs.djangoproject.com/en/1.3/howto/i18n/ – Karmel

+0

Новый вопрос задал [здесь] (http://stackoverflow.com/questions/10802680/django-accessing-request-meta-data-from- производство) –