4.5. Перевод интерфейса
Некоторый конфигурации требуется переводить на несколько языков, в случае, когда пользователи системы плохо знакомы с основным языком системы (Русским).
В корне приложения создайте файл «babel.cfg» с таким содержимым. Это подскажет утилите, как и где в коде нужно искать фразы для перевода
[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
Запустим команду на поиск в шаблонах и коде python фраз перевода и сохраним то что она нашла в файл «messages.pot»
pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .
В случае, если вам нужно добавить новый язык в трансляцию, запустите команду. После ее выполнения, внутри директории translations будет создана структура для хранения файлов перевода интрерфейса для этого языка
pybabel init -i messages.pot -d translations -l de
Если же вам нужно обновить существующие файлы переводов новыми фразами, которые возникли в процессе доработки приложения и у вас уже есть директория для этого языка, необходимо только обновить файлы для всех языков, которые вам нужны
pybabel update -i messages.pot -d translations
После того, как вы собрали фразы для перевода и инициализировали директории для хранения нужных вам языков, заполните самостоятельно файлы перевода translations/<код_языка>/LC_MESSAGES/messages.po. Это можно делать как вручную (это текстовый файл в кодировке UTF-8) или использовать отдельные приложения. Например, Poedit. После того, как вы заполните фразы для различных языков, нужно скомпилировать файлы трансляции в формат, который может использовать приложение
pybabel compile -d translations
Для того, чтобы собрать все переводы, необходимо выполнить операции следующие операции после инициализации директорий для нужных вам языков
# Собираем фразы из ядра
pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot sphere
pybabel update -i messages.pot -d translations
# Собираем фразы из конфигурации данного проекта
pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .
pybabel update -i messages.pot -d translations
Далее, под перевод попадают все названия проекта, параметры документов, этапы, значения справочников и тому подобный динамический контент, который собрать средствами pybabel extract не получится. Для этого необходимо запустить процедуру, которая соберет эту информацию и выведет в консоль. Эту информацию следует скопировать в файл messages.pot или направить вывод в этот файл. Для запуска, нужно войти в контекст приложения командой, предварительно активировав виртуальное окружение (см. раздел установки)
./manage.py shell
from sphere.lib.utils import print_translations
print_translations()
После этого, остается заполнить переводы и скомпилировать их. После перезапуска приложения, эти переводы станут доступны в системе