Как перевести django фильтр на русский язык?
Например:
<div class="bookCard__uploadTime">{{ novel.created_at|timesince|clipto:',' }} назад</div
отрендерит как 1 day назад. Подскажите, пожалуйста, как перевести.
В файле settings.py измени параметр LANGUAGE_CODE таким образом:
settings.py
LANGUAGE_CODE = 'ru'
Не знаю правильно ли сделал
В django.utils.timesince изменил словарь TIME_STRINGS:
TIME_STRINGS = {
'year': ngettext_lazy('%(num)d год', '%(num)d года', 'num'),
'month': ngettext_lazy('%(num)d месяц', '%(num)d месяца', 'num'),
'week': ngettext_lazy('%(num)d неделя', '%(num)d недели', 'num'),
'day': ngettext_lazy('%(num)d день', '%(num)d дня', 'num'),
'hour': ngettext_lazy('%(num)d час', '%(num)d часа', 'num'),
'minute': ngettext_lazy('%(num)d минута', '%(num)d минуты', 'num'),
}
И создал новый фильтр:
from django import template
from django.template.defaultfilters import stringfilter
from itertools import chain
register = template.Library()
REPLACE_TIME = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] \
+ list(chain.from_iterable((i, i + 5, i + 6, i + 7, i + 8, i + 9) for i in range(20, 60, 10)))
REPLACE_STRING = {
"минуты": "минут",
"часа": "часов",
"дня": "дней",
"недели": "недель",
"месяца": "месяцев",
"года": "лет",
}
REPLACE_STRING1 = {
"минуты": "минута",
"часа": "час",
}
@register.filter
@stringfilter
def fixtimesince(value, delimiter=None):
if value[0] == '0':
return 'Только что'
if value in (None, ''):
return ''
if int(value[:2]) in [21, 31, 41, 51]:
for key, val in REPLACE_STRING1.items():
value = value.replace(key, val)
if int(value[:2]) in REPLACE_TIME:
for key, val in REPLACE_STRING.items():
value = value.replace(key, val)
return value + ' назад'
fixtimesince.is_safe = True