Инструкция по локализации интерфейса пользователя¶
NOC поддерживает возможнось локализации (перевода) на другие языки. На текущий момент переводу поддаётся 3 сервиса: Web
, Card
и Login
. Перевод можно выбрать в настройках соответствующего сервиса в башне:
После этого необходимо произвести Deploy с отмеченной опцией "Install Everything" или "Update config" и "Restart gentle".
Сами переводы расположены в папке translations соотвествующего сервиса: * service/web/translations для web * service/card/translations для card * service/login/translations для login
Название папки с переводом необходимо прописывать в настройках сервиса. Можно создавать свои переводы и располагать их в папках по соседству.
Также, для перевода потребуется установить пакеты для разработки:
pip install -r requirements/dev.txt
Перевод¶
Сам по себе процесс перевода состоит из 3 шагов:
- Разметка в исходном коде фраз, которые подпадают под перевод.
- Создание/обновление словаря для перевода.
- Компиляция переведённого текста.
Пройдёмся по пунктам по порядку. Если вам необходимо исправить существующий перевод, можно переходить к пункту .
Разметка фраз для перевода¶
В первую очередь необходимо пометить фразы, как доступные для перевода. Это делается в исходном коде приложения и может быть в 2 вариантах: разметка для python файлов и для JS файлов. Покажем на примере, как делается разметка в Python файлах. Возьмём, для примера, подготовленный отчёт. В нём присутствуют текстовые строки (помечены оранжевым квадратом) - их необходимо пометить для перевода. Для этого необходимо импортировать пакет gettext (from noc.core.translation import ugettext as _) и заключить текст в круглые скобки: _(translate_text)
- см. второй скриншот.
Таким образом можно размечать такст в уже существующих файлах (если потребуется что-то доперевести).
В случае JS (JavaScript) файликов процедура совпадает, но необходимо использовать двойное подчёркивание перед скобками вместо одинарного: __()
Посе разметки фраз необходимо закоммитить изменения (команда git commit)
Note
Обязательно выполните команду "git commit" после того как разметили файлики для перевода, иначе не выполнится операция извлечения строк в словарь.
Создание или обновление словаря для перевода¶
После того как произведена разметка текста для перевода необходимо извлечь фразы из исходного кода и поместить и поместить их в словарь. Извлечение исходного текста делается командой "./noc translation extract <service>
". <service>
опционален, если не указать, то извлекутся строки для всех сервисов. После извлечения необходимо обновить словарь командой "./noc translation update <service>
".
После выполнения последней команды мы получим словарь с нашими фразами, которые мы можем переводить (.po файл). Эти файлики лежат в папках переводов (н-р для русского это ru/LC_MESSAGES/messages.po для python и ru/LC_MESSAGES/messages_js.po для JS). Их можно свободно скачать к себе и заняться переводом. Это можно делать в текстовом редакторе, либо, используюя специальный редактор переводов (н-р PoEdit).
image/image2016-9-16 0:10:41.png
После заполнения всех полей файлик необходимо вернуть обратно.
Note
Внимательно! не перепутайте сервис, для которого осуществлялся перевод!
Файлики, для остальных сервисов можно не трогать (в них поменялась только дата обновления)
Итого.
# ./noc translation extract <service>
# ./noc translation update <service>
# ./noc translation edit <service> <lang> (в случае наличия редактора на ноде)
Компиляция переведённого текста для использования НОКом¶
После перевода фраз, словарь необходимо вернуть в папку LC_MESSAGES для соответствующего языка и сервиса. После этого необходима компиляция: выполняется командой "./noc translation compile <service>
".
После компиляции необходим перезапуск процесса, для которого осуществлялся перевод (web, card или login).
Публикация перевода¶
Note
В случае, если необходимо вместе с наработками отправить перевод или свои правки - это можно сделать отправив 3 файла для соответствующего сервиса:
- словарь: .po файл
- скомпилированный словарь: .mo файл
- json файл с описанием: messages_js.json
Отправлять необходимо файлы, в которых изменилось содержимое (добавились строки или перевод). Файлы, где поменялась только дата прикладываться смысла нет.
Проблемы¶
При использовании команды ./noc translate extract показывается ошибка "No module named babel.util"
]# ./noc translation extract
Traceback (most recent call last):
File "./commands/translation.py", line 15, in <module>
from babel.util import pathmatch
ImportError: No module named babel.util
Необходимо установить зависимости для разработки: "pip install -r requirements/dev.txt"