Перевод собственного исходного кода
Отредактируйте файл settings.py проекта, импортировав функцию gettext_lazy() и изменив настроечный параметр LANGUAGES, как показано ниже, чтобы переводить названия языков:
from django.utils.translation import gettext_lazy as _
# ...
LANGUAGES = [
('en', _('English')),
('ru', _('Russian')),
]
Здесь вместо функции gettext() используется функция gettext_lazy(), чтобы избежать циклического импорта, тем самым переводя названия языков при доступе к ним.
Откройте оболочку и выполните следующую команду из каталога проекта:
django-admin makemessages --all --ignore venv
Вы должны увидеть такой результат:
Взгляните на каталог locale\. Вы должны увидеть файловую структуру, подобную следующей ниже:
Для каждого языка создан файл сообщений .po.
С помощью текстового редактора откройте ru\LC_MESSAGES\django.po. В конце файла вы увидите следующее:
#: django_htmx/settings.py:108
msgid "English"
msgstr ""
#: django_htmx/settings.py:109
msgid "Russian"
msgstr ""
Каждому переводному строковому литералу предшествует комментарий, показывающий детальную информацию о файле и строковый литерал, в котором он был найден. Каждый перевод включает два строковых литерала:
msgid: переводной строковый литерал в том виде, в каком он представлен в исходном коде;
msgstr: языковой перевод, который по умолчанию пуст. Здесь нужно ввести фактический перевод данного строкового литерала.
Заполните переводы msgstr данного строкового литерала msgid, как показано ниже:
#: django_htmx/settings.py:108
msgid "English"
msgstr "Английский"
#: django_htmx/settings.py:109
msgid "Russian"
msgstr "Русский"
Сохраните видоизмененный файл сообщения, откройте оболочку и выполните такую команду:
django-admin compilemessages --ignore venv
Если все пройдет хорошо, то вы должны увидеть результат, подобный следующему ниже:
Указанный результат показывает информацию о скомпилированных файлах сообщений.
Ещё раз взгляните на каталог locale\, вы увидите показанные далее файлы:
Как видите, для каждого языка был скомпилирован файл сообщений .mo.