Форум сайта python.su
0
Добрый день, проблема в следующем, необходимо чтобы в templates выводились даты на английском языке. Но при этом локаль настроена на русский, и это правильно, перенастраивать нельзя глобально.
Вот что я имею:
так вывожу - <pubDate>{{ rs.published|date:“r” }}</pubDate>
это получаю <pubDate>Пнд, 30 Май 2011 17:48:00 +0300</pubDate>
Как именно в этом месте перевести дату на английский язык?
Спасибо.
Офлайн
32
Я считаю, что для этого нужно в шаблонизатор добавить фильтр который будет выдавать то что нужно.
вот пример фильтра для jinja2 (фреймворк bottle)
Офлайн
0
o7412369815963Не, это не то, значения у меня отдаются в нужном формате, все как нужно, но вот только из-за установленной локализации русской, эти значения отдаются на русском. Нужно как-то для отдачи этого значения в темплейт сменить временно локализацию.
Офлайн
14
locale.setlocale
Офлайн
0
Андрей СветловПозже попробую вашим способом, пока что тупо в лоб сделал как и писал ранее.
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
Офлайн
14
Вколачивать таймзону +0300 константой считаю очень прогрессивным шагом! Что осенью делать будете, когда Украина перейдет на зимнее время?
Английская локаль включается как
import locale; locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
Офлайн
0
На насмешки отвечать не буду, кроме как в лоб не мог решить эту задачу.
>>>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
Офлайн
14
Ага, Windows. Что же сразу не сказали. Быстро проверить не на чем, но должно подойти
locale.setlocale(locale.LC_ALL, “English”)
Про зимнее время я вас вполне серьезно предупреждал — поломается же!
Офлайн
0
Андрей СветловПро зимнее время прекрасно понял, до того момента код не нужен уже будет, но послухаю вас, допишу комментарий к фильтру.
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
Офлайн
14
Нужно знать, какую строку локали передавать. Всякие линуксы понимают то, что является валидным для переменной окружения LANG.
На моей убунте это именно ‘en_US.UTF-8’ или там ‘ru_RU.UTF-8’. Требует установки пакетов language-pack-en и language-pack-ru соответственно.
В других дистрибутивах может быть иначе — но принцип тот же.
Офлайн