Локалізація Redash Admin та Redash Viewer
Сторінка технічної документації є баченням майбутньої реалізації, актуальність якого може бути застарілою. |
Загальний опис
Необхідно реалізувати можливість підтримки декількох мов інтерфейсу перегляду звітів для посадових осіб (Redash Viewer) та інтерфейсу для створення та налаштування аналітичних звітів та дашбордів (Redash Admin) в залежності від обраної мови реєстру.
Актори та ролі користувачів
-
Технічний адміністратор Платформи
-
Технічний адміністратор реєстру (користувач Admin Portal, а саме Redash Admin)
-
Посадова особа (користувач Office Portal, а саме Redash Viewer)
Функціональні сценарії
-
Cтворення та налаштування аналітичних звітів та інформаційних панелей мовою реєстра.
-
Перегляд та маніпуляція відображенням даних реєстру на інформаційних панелях мовою реєстра.
-
Перегляд та аналіз даних журналу подій аудиту реєстру на інформаційних панелях мовою реєстра.
Поточна реалізація
Кожен екземпляр сервісу аналітичної звітності реєстру Redash (Viewer та Admin) розгортається українською мовою без можливості зміни при розгортанні.
Вихідний Redash докер образ збирається англійською мовою.
Локалізація українською мовою відбувається на етапі збірки redash-chart
за допомогою додаткового main.py
скрипта та заготовленого файлу з перекладом слів та словосполучень redash_localization_words.csv
.
Така поточна реалізація не дозволяє встановити залежність між обраною мовою реєстру з розділу Керування реєстрами у адмінпанель Control Plane та процесом розгортання екземплярів Redash (Viewer та Admin).
Загальні принципи та положення
-
Redash не локалізується українською на етапі збірки
redash-chart
. -
Існуючий файл
redash_localization_words.csv
з перекладом слів перейменовується уuk.csv
і пакується в папкуlocales
докер образаredash-chart
на етапі збірки. -
Дії по локалізації Redash виносяться з існуючого
redash-chart/main.py
у новийredash-chart/translate.py
, що пакується в докер образredash-chart
на етапі збірки. -
В
values
redash-chart
додаєтьсяglobal.language
змінна, що визначає змінну оточенняLANGUAGE
темплейту розгортання Redash екземпляру. -
Скрипт
translate.py
параметризується таким чином, щоб визначати шлях до файлу з перекладом визначеної мови локалізації на основі змінної оточенняLANGUAGE
. -
Скрипт
translate.py
модифікується так, щоб не виконувати переклад, якщоLANGUAGE = "en"
, лишаючи Redash не локалізованим. -
По можливості доповнити та виправити поточний український переклад.
Цільовий дизайн
Збірка
Наразі процес локалізації відбувається за допомогою запуску redash-chart/main.py
скрипта на етапі збірки redash-chart
докер образу через інструкції:
FROM .../redash-master:version as source
FROM python:3.9.6 as local
COPY --from=source /app/client/dist/app.*.js /app/
...
COPY . /app
WORKDIR /app
RUN pip install pipenv
RUN pipenv install
RUN pipenv run python main.py
FROM source
COPY --from=local /app/app.*.js /app/client/dist/.
...
Необхідно винести процес локалізації в окремий translate.py
скрипт. Відповідно видаливши з main.py
.
import ...
def load_excel_to_dict():
...
def wrap_as_variable(str):
...
def wrap_as_tag(str):
...
def localize(dict):
...
translations = load_excel_to_dict()
localize(translations)
Та додатково запакувати translate.py
скрипт в redash-chart
докер образ для подальшого виклику при розгортанні:
COPY translate.py /app/
Видалити обробку app.*.js
файлів з Dockerfile
.
Перейменувати існуючий файл redash_localization_words.csv
в uk.csv
та також запакувати в redash-chart
докер образ у новостворену папку locales
:
COPY uk.csv /app/locales/
Модифікувати translate.py
скрипт, а саме:
-
Привести шляхи до фалів до актуального стану.
-
Параметризувати скрипт таким чином, щоб шлях до
locales/uk.csv
файлу з перекладом визначався енв змінною, наприклад,LANGUAGE
. -
Додати вхідну умову, що переклад здійснюється лише у випадку, коли
LANGUAGE != "en"
-
Додати вхідну умову, що у випадку якщо
LANGUAGE
не визначена, тобтоglobal.language
була не задана, переклад здійснюється українською.
Розгортання
Мова визначатиметься через змінну global.language
у values.yaml
кожного реєстру, що наразі матиме допустимі значення uk
та en
та задаватиметься через Адмінпанель Control Plane.
У шаблон розгортання реєстру у control-plane-gerrit
, а також redash-chart
значення за замовчуванням не виноситься, при необхідності задається пустим.
Скрипт по обробці файлу з перекладом запускається в процесі розгортання екземпляру Redash при старті відповідного контейнеру, наприклад, таким чином:
apiVersion: apps/v1
kind: Deployment
...
spec:
...
containers:
- name: ...
...
command: ["/bin/sh"]
args: ["-c", "python ./translate.py && . /config/dynamicenv.sh && /app/bin/docker-entrypoint server"]
Також необхідно передавати значення змінної global.language
у енв змінні темплейту розгортання екземпляру Redash для подальшого використання скриптом перекладу translate.py
з метою визначення шляху до файлу з перекладом locales/uk.csv
. Наприклад:
apiVersion: apps/v1
kind: Deployment
...
spec:
...
containers:
- name: ...
...
env:
- name: LANGUAGE
value: {{ .Values.global.language }}
Зміни на UI
В Control Plane в табі Реєстри на сторінці Загальні налаштування в розділі "Локалізація" під текстом "Кабінет адміністратора регламенту" додати фразу "Веб-інтерфейс моделювання звітів" згідно мокапів.
Отже, при зміні мови реєстру через Адмінпанель Control Plane буде створений новий запит на оновлення, що призведе до зміни параметру global.language
у values.yaml
та перерозгорне екземпляри redash-admin
та redash-viewer
із актуальним значенням змінної оточення LANGUAGE
. Що в свою чергу визначить режим роботи translate.py
скрипта, який виконає або ні переклад, згідно обраного csv
файлу.
Компоненти системи та їх призначення в рамках дизайну рішення
У даному розділі наведено перелік компонент системи, які задіяні або потребують змін в рамках реалізації дизайну.
Підсистема | Компонент | Опис змін |
---|---|---|
Підсистема аналітичної звітності реєстру |
redash-viewer |
Винесення скриптів локалізації з процесу збірки докер образа на рівень розгортання. Опрацювання варіантів ввімкнення і вимкнення локалізації. Виправлення помилок поточного перекладу. |
Підсистема моделювання регламенту реєстру |
redash-admin |
|
Підсистема управління Платформою та Реєстрами |
control-plane-console |
Розширення інтерфейсу управління реєстру коментарем. |
Підтримка зворотної сумісності
За замовчуванням мова локалізації не визначається ні на рівні шаблону реєстру, ні у redash-chart
. При необхідності значення global.language
може бути виставлене в ""
або null
.
Для існуючих реєстрів, що не потребують переключення на англійську мову, це буде реалізовано в скрипті translate.py
умовою запускати переклад uk
в разі пустого значення змінної середовища LANGUAGE
.
Додаткових кроків для міграції реєстрів і їх компонент не потребується.
Високорівневий план розробки
Попередній план розробки
-
Винести процес локалізації в окремий
translate.py
скрипт та запакувати вredash-chart
докер образ. -
Запакувати
uk.csv
файл локалізації вredash-chart
докер образ. -
Прибрати обробку
app.*.js
файлів зDockerfile
. -
Параметризувати скрипт
translate.py
для визначення мови перекладу та власне запуску процесу перекладу в залежності від змінної оточенняLANGUAGE
. -
Запускати скрипт
translate.py
черезcommand.args
в темплейтах розгортанняredash-admin
таredash-viewer
. -
В Control Plane в табі Реєстри на сторінці Загальні налаштування в розділі "Локалізація" під текстом "Кабінет адміністратора регламенту" додати фразу: Веб-інтерфейс моделювання звітів.
-
По можливості доповнити та виправити поточний український переклад.
Опційно
Стандартизувати процес інтернаціоналізації та локалізації, використовуючи для зберігання слів перекладу json формат. Для цього:
-
Cконвертувати файли перекладу
csv
уjson
, формату{"en_word" : "uk_word", …}
. -
Замінити
load_excel_to_dict()
на читання перекладів згідно цільового формату, наприклад,json.load()
.
Поза скоупом
-
Адміністратор платформи чи адміністратор реєстру обирає для Redash Admin та/або Viewer мову, відмінну, від мови реєстру.
-
Адміністратор платформи чи адміністратор реєстру обирає свою індивідуальну мову інтерфейсу.
-
Визначення мови користувача в "Accept-Language" заголовку запиту або у разі відсутності перекладів для мови - використання налаштувань за замовчуванням обраних на етапі встановлення екземпляру Платформи.
-
Локалізація елементів, недоступних для зміни після збірки Redash компонента.