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()

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