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

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

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

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

Это тупо в лоб, но увы пока что другого решения найти не могу. Результат отпишу.
Андрей Светлов
locale.setlocale
KarDer_Groom
Андрей Светлов
Позже попробую вашим способом, пока что тупо в лоб сделал как и писал ранее.
Вот вышел такой фильтр:
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
Получаю в нужном мне виде. Надо было так сразу сделать, нервы бы поберёг. Говнокодец, но иногда без него никуда.
Андрей Светлов
Вколачивать таймзону +0300 константой считаю очень прогрессивным шагом! Что осенью делать будете, когда Украина перейдет на зимнее время?

Английская локаль включается как
import locale; locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
С временами и таймзонами разбирайтесь сами. Можете почитать http://asvetlov.blogspot.com/2011/02/date-and-time.html
Всё.
KarDer_Groom
На насмешки отвечать не буду, кроме как в лоб не мог решить эту задачу.
>>>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
Данная ошибка преследует этот метод.
Андрей Светлов
Ага, Windows. Что же сразу не сказали. Быстро проверить не на чем, но должно подойти
locale.setlocale(locale.LC_ALL, “English”)
Про зимнее время я вас вполне серьезно предупреждал — поломается же!
KarDer_Groom
Андрей Светлов
Про зимнее время прекрасно понял, до того момента код не нужен уже будет, но послухаю вас, допишу комментарий к фильтру.
Скинул ошибку с винды, но проверяли и на сервере.
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
Андрей Светлов
Нужно знать, какую строку локали передавать. Всякие линуксы понимают то, что является валидным для переменной окружения LANG.
На моей убунте это именно ‘en_US.UTF-8’ или там ‘ru_RU.UTF-8’. Требует установки пакетов language-pack-en и language-pack-ru соответственно.
В других дистрибутивах может быть иначе — но принцип тот же.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB