Перевод названий месяцев и дней недели в шаблонах django
Я хотел бы напечатать названия дней и месяцев на выбранном в данный момент языке, но django продолжает отображать их на английском, даже если выбор языка работает нормально.
В моем шаблоне:
{{ LANGUAGE_CODE }}
{% localize on %}
{{ day|date:"l" }}
{% endlocalize %}
В результате получается:
сегодня Пятница
Я ожидал:
это Венерди
Если я попытаюсь отобразить дату в формате по умолчанию, используя этот код:
{{ day }}
, формат даты корректно изменится в зависимости от выбранного языка, но названия дня или месяца по-прежнему не будут локализованы..
Так, например, если выбран английский, я получаю April 25th 2025
, а если выбран итальянский, я получаю 25th April 2025
. Формат даты другой, но апрель всегда указан на английском.
Как я могу перевести названия дней и месяцев?
Это мой settings.py:
USE_I18N = True
USE_L10N = True
USE_TZ = True
Если я правильно понял, то localize
это не то, что вы хотите.
Вероятно, вам понадобится тег шаблона language
.
Например, у меня это работает:
{% load i18n %}
{% language 'it' %}
<div id='header'>{{ today|date:"l" }} </div>
{% endlanguage 'it' %}
В результате я вижу:
<div id="header">Sabato </div>
Значение today - это дата и время:
{'today': datetime.now()}
Подробнее о теге шаблона language
здесь:
https://docs.djangoproject.com/en/5.1/topics/i18n/translation/#switching-language-in-templates
Используйте django.utils.formats.date_format
в своем шаблоне:
{% load l10n %}
{{ day|date_format:"l" }} {# Outputs localized full weekday name #}
{{ day|date_format:"F" }} {# Outputs localized full month name #}
При этом используется
date_format
Django, который соответствует текущему активному языку.
Проблема в том, что по какой-то причине, которую мне все еще нужно выяснить, файл default .po в env/lib/python3.9/site-packages/django/conf/locale/it/LC_MESSAGES был "поврежден" со всеми записями для названий дней вот так:
#~ msgid "Friday"
#~ msgstr "Venerdì"
Исправление файла .po путем переустановки django устранило проблему:
pip uninstall django
pip install django