Перевод исходного кода Python
Для того чтобы перевести строковые литералы в исходном коде Python, можно пометить строковые литералы для перевода с помощью включенной в django.utils.translation функции gettext(). Эта функция переводит сообщение и возвращает строковый литерал.
По традиции указанная функция импортируется как более короткий псевдоним с именем _ (символ подчеркивания).
Вся документация о переводах находится на странице https://docs.djangoproject.com/en/4.2/topics/i18n/translation/.
Стандартные переводы
Следующий ниже исходный код показывает, как помечать строковый литерал для перевода:
from django.utils.translation import gettext as _
output = _('Text to be translated.')
Ленивые переводы
Django содержит ленивые версии всех своих переводных функций, которые имеют суффикс _lazy(). При использовании ленивых функций строковые литералы переводятся при доступе к значению, а не при вызове функции (поэтому они переводятся лениво).
Функции ленивого перевода пригодятся, когда помеченные для перевода строковые литералы будут находиться в путях, которые задействуются при загрузке модулей.
Переводы с переменными
Помеченные для перевода строковые литералы могут содержать местозаполнители, чтобы вставлять в переводы переменные. Следующий ниже исходный код является примером строкового литерала для перевода с местозаполнителем:
from django.utils.translation import gettext as _
month = _('April')
day = '14'
output = _('Today is %(month)s %(day)s') % {'month': month, 'day': day}
Используя местозаполнители, можно переупорядочивать текстовые переменные.
Например, английский перевод приведенного выше примера будет Today is April 14, а русский – Сегодня 14 апреля.
Если в переводном строковом литерале есть более одного параметра, то следует всегда придерживаться строковой интерполяции вместо позиционной. Благодаря этому можно переупорядочивать текст с местозаполнителями.
Формы множественного числа в переводах
Для форм множественного числа можно использовать функции ngettext() и ngettext_lazy().
Эти функции переводят формы единственного и множественного числа в зависимости от аргумента, указывающего число объектов.
В следующем ниже примере показано, как их использовать:
output = ngettext('there is %(count)d product', 'there are %(count)d products', count) % {'count': count}
Теперь, когда вы знаете основы перевода строковых литералов в своем исходном коде Python, самое время применить переводы к проекту.