Перейти к содержанию

Инструкция по локализации интерфейса пользователя

В версии Микросервисы появилась возможность локализации (перевода) НОКа на другие языки. Это осуществляется при помощи модуля GetText, который считывает подготовленные строки локализации и заменяет их на соответствущий перевод по словарю. Поскольку, работает он при запуске системы перевод не может изменяться на лету (настройкой браузера) и требует изменения настроек и перезапуска НОКа.

На текущий момент переводу поддаётся 3 сервиса: Web, Card и Login. Механизм локализации описания аварий не реализован. Перевод можно выбрать в настройках соответствующего сервиса в башне:

Языковые настройки для сервиса Card Языковые настройки для сервиса Web

После этого необходимо произвести Deploy с отмеченной опцией "Install Everything" или "Update config" и "Restart gentle".

Сами переводы расположены в папке translations соотвествующего сервиса: * service/web/translations для web * service/card/translations для card * service/login/translations для login

Название папки с переводом необходимо прописывать в настройках сервиса. Можно создавать свои переводы и располагать их в папках по соседству.

Также, для перевода потребуется установить пакеты для разработки:

./bin/pip install -r requirements/dev.txt

И создать файл конфигурации: etc/babel.cfg

#
# Translation extraction config
#
[python: **.py]

[javascript: **.js]
extract_messages = _, __

[jinja2: **.j2]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

Перевод

Сам по себе процесс перевода состоит из 3 шагов:

  1. Разметка в исходном коде фраз, которые подпадают под перевод.
  2. Создание/обновление словаря для перевода.
  3. Компиляция переведённого текста.

Пройдёмся по пунктам по порядку. Если вам необходимо исправить существующий перевод, можно переходить к пункту Создание или обновление словаря.

Разметка фраз для перевода

В первую очередь необходимо пометить фразы, как доступные для перевода. Это делается в исходном коде приложения и может быть в 2 вариантах: разметка для python файлов и для JS файлов. Покажем на примере, как делается разметка в Python файлах. Возьмём, для примера, подготовленный отчёт. В нём присутствуют текстовые строки (помечены оранжевым квадратом) - их необходимо пометить для перевода. Для этого необходимо импортировать пакет gettext (from noc.core.translation import ugettext as _) и заключить текст в круглые скобки: _(translate_text) - см. второй скриншот.

Подготовка строк для перевода Web Подготовка строк для перевода Web

Таким образом можно размечать такст в уже существующих файлах (если потребуется что-то доперевести).

В случае JS (JavaScript) файликов процедура совпадает, но необходимо использовать двойное подчёркивание перед скобками вместо одинарного: __()

Подготовка строк для перевода JS

Посе разметки фраз необходимо закоммитить изменения (команда git commit)

Note

Обязательно выполните команду "hg 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

Необходимо установить зависимости для разработки: "./bin/pip install -r requirements/dev.txt"