Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2011 17:19:18

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод даты в частном случае

Добрый день, проблема в следующем, необходимо чтобы в templates выводились даты на английском языке. Но при этом локаль настроена на русский, и это правильно, перенастраивать нельзя глобально.

Вот что я имею:
так вывожу - <pubDate>{{ rs.published|date:“r” }}</pubDate>
это получаю <pubDate>Пнд, 30 Май 2011 17:48:00 +0300</pubDate>

Как именно в этом месте перевести дату на английский язык?
Спасибо.



Офлайн

#2 Июнь 20, 2011 22:15:12

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Перевод даты в частном случае

Я считаю, что для этого нужно в шаблонизатор добавить фильтр который будет выдавать то что нужно.
вот пример фильтра для jinja2 (фреймворк bottle)

Офлайн

#3 Июнь 21, 2011 09:13:12

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод даты в частном случае

o7412369815963
Не, это не то, значения у меня отдаются в нужном формате, все как нужно, но вот только из-за установленной локализации русской, эти значения отдаются на русском. Нужно как-то для отдачи этого значения в темплейт сменить временно локализацию.

Из-за срочности задания и при том что я без малейшего понятия как это сделать правильно и красиво, собираюсь создать 2 списка со значениями месяцев и дней недели, и уже в ручную по значению даты отдавать английские значения.

Это тупо в лоб, но увы пока что другого решения найти не могу. Результат отпишу.



Офлайн

#4 Июнь 21, 2011 11:26:05

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Перевод даты в частном случае

locale.setlocale



Офлайн

#5 Июнь 21, 2011 14:19:46

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод даты в частном случае

Андрей Светлов
Позже попробую вашим способом, пока что тупо в лоб сделал как и писал ранее.
Вот вышел такой фильтр:
from django import template
from django.conf import settings

register = template.Library()

@register.filter
def enlang(value):
mon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
day = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')
li = []
tt = value.timetuple()
for it in tt:
li.append(it)
value = "%s, %s %s %s %s:%s:%s +0300" %(day[li[6]], li[2], mon[li[1]], li[0], li[3], li[4], li[5])
return value
Получаю в нужном мне виде. Надо было так сразу сделать, нервы бы поберёг. Говнокодец, но иногда без него никуда.



Офлайн

#6 Июнь 21, 2011 16:08:21

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Перевод даты в частном случае

Вколачивать таймзону +0300 константой считаю очень прогрессивным шагом! Что осенью делать будете, когда Украина перейдет на зимнее время?

Английская локаль включается как

import locale; locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
С временами и таймзонами разбирайтесь сами. Можете почитать http://asvetlov.blogspot.com/2011/02/date-and-time.html
Всё.



Офлайн

#7 Июнь 21, 2011 17:07:17

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод даты в частном случае

На насмешки отвечать не буду, кроме как в лоб не мог решить эту задачу.

>>>import locale
>>>loc = locale.getlocale(locale.LC_ALL)
(None, None)
>>>locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python25\lib\locale.py", line 478, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
Данная ошибка преследует этот метод.



Офлайн

#8 Июнь 21, 2011 17:37:58

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Перевод даты в частном случае

Ага, Windows. Что же сразу не сказали. Быстро проверить не на чем, но должно подойти
locale.setlocale(locale.LC_ALL, “English”)
Про зимнее время я вас вполне серьезно предупреждал — поломается же!



Офлайн

#9 Июнь 21, 2011 18:03:12

KarDer_Groom
От:
Зарегистрирован: 2009-11-17
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод даты в частном случае

Андрей Светлов
Про зимнее время прекрасно понял, до того момента код не нужен уже будет, но послухаю вас, допишу комментарий к фильтру.
Скинул ошибку с винды, но проверяли и на сервере.
In [1]: import locale
In [2]: loc = locale.getlocale(locale.LC_ALL)
In [3]: loc
Out[3]: (None, None)
In [4]: locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
....
Error: unsupported locale setting



Офлайн

#10 Июнь 21, 2011 18:33:46

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Перевод даты в частном случае

Нужно знать, какую строку локали передавать. Всякие линуксы понимают то, что является валидным для переменной окружения LANG.
На моей убунте это именно ‘en_US.UTF-8’ или там ‘ru_RU.UTF-8’. Требует установки пакетов language-pack-en и language-pack-ru соответственно.
В других дистрибутивах может быть иначе — но принцип тот же.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version