📝 Django

Интернационализация (i18n) в Django

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
86
🌳
Уровень
Продвинутый
🐦 💼 ✈️

Охватываемые темы: Настройка, Перевод строк в Python, Перевод в шаблонах, Создание файлов переводов.

Настройка

# settings.py
LANGUAGE_CODE = 'ru'
USE_I18N = True
USE_L10N = True
USE_TZ = True

LANGUAGES = [
    ('ru', 'Русский'),
    ('en', 'English'),
]

MIDDLEWARE = [
    ...
    'django.middleware.locale.LocaleMiddleware',
]

LOCALE_PATHS = [BASE_DIR / 'locale']

Перевод строк в Python

from django.utils.translation import gettext_lazy as _

class Task(models.Model):
    class Status(models.TextChoices):
        TODO = 'todo', _('К выполнению')
        DONE = 'done', _('Выполнено')

    title = models.CharField(_('заголовок'), max_length=200)
# В views.py
from django.utils.translation import gettext as _

def my_view(request):
    message = _('Задача создана успешно')
    return HttpResponse(message)

Перевод в шаблонах

{% load i18n %}

<h1>{% trans "Мои задачи" %}</h1>
<p>{% blocktrans with count=task_count %}У вас {{ count }} задач{% endblocktrans %}</p>

Создание файлов переводов

# Собрать строки для перевода
python manage.py makemessages -l en

# Файл locale/en/LC_MESSAGES/django.po
# msgid "К выполнению"
# msgstr "To Do"

# Скомпилировать
python manage.py compilemessages

Переключение языка

# URL для смены языка
from django.conf.urls.i18n import i18n_patterns

urlpatterns = [
    path('i18n/', include('django.conf.urls.i18n')),
] + i18n_patterns(
    path('tasks/', include('tasks.urls')),
)
<form action="{% url 'set_language' %}" method="post">
  {% csrf_token %}
  <input name="next" type="hidden" value="{{ request.path }}">
  <select name="language">
    {% get_available_languages as languages %}
    {% for code, name in languages %}
      <option value="{{ code }}">{{ name }}</option>
    {% endfor %}
  </select>
  <button type="submit">Сменить</button>
</form>

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 138
📝

Django: Теги шаблонов

Теги шаблонов — это логика внутри HTML. В отличие от {{ переменная }}, которая только...

📅 30.06.2026 👁️ 87
📝

Django: Статические файлы

Статические файлы — CSS, JavaScript, изображения, шрифты. Django обрабатывает их особым образом: в разработке раздаёт...

📅 30.06.2026 👁️ 79

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!