Замена дефолтного перевода слова в Django Admin

Если вы не удовлетворены тем, как приложение перевело какое-нибудь слово, вы можете легко заменить его на свой вариант. В этой статье мы рассмотрим, как сделать это в Django.

Как Django ищет переводы

Когда Django ищет перевод слова, он сначала проверяет папку locale на самом верхнем уровне проекта. Если перевод не найден там, он начинает искать его последовательно по приложениям, объявленным в INSTALLED_APPS. Как только он находит перевод слова (в скомпилированном файле django.mo необходимого языка), он возвращает его, заканчивая поиск.

Подготовка проекта к интернационализации

Отредактируйте файл settings.py вашего проекта и добавьте следующие настройки LANGUAGES рядом с параметром LANGUAGE_CODE и LOCALE_PATHS:

# settings.py

LANGUAGE_CODE = 'ru'
TIME_ZONE = 'Europe/Moscow'
USE_I18N = True
USE_TZ = True

LANGUAGES = (
    ("ru", _("Russian")),
    ("en", _("English")),
)

LOCALE_PATHS = [
    BASE_DIR / "locale/",
]

LOCALE_PATHS - Этот параметр указывает каталоги, в которых Django должен искать файлы перевода. Пути языка, которые появляются первыми, имеют наивысший приоритет.

LANGUAGES - Этот параметр указывает, что наш проект будет доступен только на английском и испанском языках.
LANGUAGE_CODE - Это установит русский язык в качестве языка по умолчанию.

Добавление промежуточного программного обеспечения

Добавьте 'django.middleware.locale.LocaleMiddleware' в настройки MIDDLEWARE_CLASSES. Убедитесь, что эта строка вставлена после SessionMiddleware, потому что LocaleMiddleware необходимо использовать данные сессии. Она также должна быть помещена перед CommonMiddleware, поскольку для разрешения запрошенного URL-адреса требуется активный язык.

# settings.py

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ...
)

Теперь наш проект готов к интернационализации. Мы можем использовать команду makemessages для создания файлов сообщений в каталогах locale.

Вызовите следующую команду для добавления русского языка

django-admin makemessages -l ru

Добавление перевода

В файле project/locale/ru/django.po добавьте следующую строку:

# django.po

msgid "Filters"
msgstr "Фильтр"

Эта строка указывает, что слово "Filters" должно быть переведено как "Фильтр" на русском языке.

Проблема с автоматическим обновлением

Когда вы вызываете команду django-admin makemessages -a, Django может посчитать, что слова в вашем коде нигде нет и закомментирует их. Чтобы избежать этой проблемы, вы можете добавить в свой код специальную строку, которая будет указывать Django, что эти слова должны быть переведены.

Решение

Вы можете создать отдельный файл, например translations.py, и добавить в него следующий код:

from django.utils.translation import gettext_lazy as _

translations = [_('Filters'), _('By %(filter_title)s'), _('To')]

Этот код указывает Django, что слово "Filters" должно быть переведено. Вы можете добавить в список translations несколько слов, которые нужно перевести.

Почему это работает

Когда Django обрабатывает файл translations.py, он видит, что слово "Filters" используется в коде и не закомментирует его в файле django.po. Это позволяет вам сохранить переводы в файле django.po и избежать проблем с автоматическим обновлением. После того, как вы добавили переводы в файл django.po, вам нужно скомпилировать их в файл django.mo. Для этого вы можете использовать команду django-admin compilemessages.

django-admin compilemessages --ignore=env

Эта команда скомпилирует все сообщения в файле django.po и игнорирует ошибки, связанные с окружением. После выполнения команды вы увидите сообщение о том, что сообщения были успешно скомпилированы. Файл django.mo будет создан в том же каталоге, где находится файл  django.po.

Зачем нужна компиляция

Компиляция сообщений необходима для того, чтобы Django мог использовать переводы в вашем приложении. Без компиляции сообщений Django не сможет найти переводы и будет использовать исходные строки.

Совет

После того, как вы добавили новые переводы или изменили существующие, не забудьте скомпилировать сообщения снова, чтобы изменения вступили в силу.

После выполнения этих шагов, Django будет использовать ваш перевод вместо дефолтного.

Read more

Использование Email вместо имени пользователя для входа в Django Admin

По умолчанию, Django использует имя пользователя для входа в систему. Однако, в некоторых случаях использование email может быть более удобным и практичным. Например, большинство пользователей помнят свой email, а не имя пользователя. В этой статье мы рассмотрим, как настроить вход в Django с использованием email вместо имени пользователя. Зачем использовать

By Dmitry

Показ кастомной страницы 404 в Django

В этом посте мы рассмотрим, как показать кастомную страницу 404 в приложении на Django. Это может быть полезно, если вы хотите предоставить пользователям более информативную и дружелюбную страницу ошибки вместо стандартной страницы 404, которая показывает только сообщение об ошибке. Шаг 1: Создание кастомной страницы 404 Сначала создайте новый шаблон для

By Dmitry

Вход по SSH на удаленный сервер Ubuntu без пароля

Настройка входа по SSH на сервере Ubuntu В этой статье мы рассмотрим, как настроить вход пользователей только по SSH на сервере Ubuntu. Это позволит повысить безопасность вашего сервера, ограничив вход только по защищённому протоколу SSH. Шаг 1: Установка и настройка OpenSSH OpenSSH - это пакет, который позволяет устанавливать защищённое соединение

By Dmitry

Автоматизация деплоя по SSH с паролем

Автоматизация деплоя с помощью GitHub Actions и SSH для Django проекта (вход на сервер по SSH с паролем) GitHub Actions — это сервис, который позволяет автоматизировать процесс сборки, тестирования и деплоя вашего кода. Одним из способов деплоя является использование SSH для подключения к серверу и копирования файлов. В этой статье мы

By Dmitry