Повна українізація інтерфейсу Synology DSM та встановлених пакетів — у пару кліків, без терміналу

Synology офіційно не має української локалі. Я зробив повний переклад та хочу поділитися ним зі спільнотою DOU.

Цей пакет ставить повноцінний український переклад прямо в DSM: інтерфейс системи, меню, майстри, email-сповіщення і тексти встановлених пакетів. Вмикаєш галочками, що саме перекласти — і одна кнопка робить решту. Так само легко відкочується байт-в-байт назад.

github.com/...​t/synology-dsm-ukrainizer

Як це виглядає

DSM повністю українською — інтерфейс, меню, майстри, довідка:

Диспетчер сховищаПанель керування
Диспетчер сховища Панель керування

Довідка DSM / Active Insight

Можливості

  • Українізація DSM і пакетів — 99 компонентів: ядро DSM 7.2.2, Центр пакетів, File Station, Surveillance Station, Active Backup, Hyper Backup, Synology Drive, Photos, MailPlus, Virtual Machine Manager, Container Manager й десятки інших.
  • Переклад не лише UI, а й email-сповіщень (mails) — листи про події (бекапи, рейд, диски, безпека тощо) теж приходять українською.
  • Вибірково, по галочках — перекладай що хочеш, рештою не чіпай. Кожен компонент має окремо рядки інтерфейсу (strings) і шаблони листів (mails).
  • Чесний відкат байт-в-байт — при першому застосуванні зберігається недоторканий оригінал (.orig), тож «Повернути оригінал» повертає рідні файли точно, без сюрпризів.
  • Авто-відновлення після оновлень — оновлення DSM чи пакета перезаписує локалі й «з’їдає» переклад. Фоновий systemd-таймер (раз на ~15 хв + на буті) сам переповерхає українізацію назад. Нічого робити руками не треба.
  • Авто-перемикання мови DSM — переклад «живе» в локалі rus (див. нижче чому), тож апка сама виставляє мову інтерфейсу на потрібну, щойно щось українізовано.
  • Живий лог — видно що саме, в якому файлі й з яким статусом патчиться.
  • Вбудована Root-консоль — міні-термінал прямо в апці (під подвійним замком: сесія адміна DSM + пароль) для діагностики без SSH.
  • Чисте видалення — знімаєш «двигун», прибираються таймер і службові файли; переклади можна повернути на оригінал перед видаленням.

Як це працює

Synology не дає додати власний код мови (ukr) — DSM ламає інтерфейс, якщо локаль невідома системі. Тому Українізатор іде хитрішим, але безпечним шляхом:

  1. Підміна вмісту, а не коду локалі. DSM тримає тексти інтерфейсу у файлах локалі rus. Апка замінює вміст цих файлів українським перекладом, лишаючи код локалі rus. Для DSM це досі «російська», а на екрані — українська. Жодного зламаного UI.
  2. Точні шляхи з маніфесту. Локалі розкидані дуже по-різному: …/ui/texts/rus, …/app/texts/rus, абсолютні системні шляхи ядра DSM, Центру журналів, Порадника з безпеки. Усі точні шляхи запечені в payload/manifest.json, який збирається разом із перекладом — жодних здогадок у коді.
  3. Привілейовану роботу робить root-демон. Непідписаному community-пакету DSM не дає прав root (cgi виконується як package-user, POST ріже 403). Тому переклади пише окремий локальний root-демон (127.0.0.1:7686), а веб-морда говорить із ним через nginx-аліас /ua-l10n-api/.
  4. Подвійний гейт безпеки. Кожен виклик демона перевіряється: (1) чинна сесія адміна DSM (cookie id= + X-SYNO-TOKEN, звірені через SYNO.Core.CurrentConnection); а привілейовані/деструктивні дії (apply/revert/exec/мова) — ще й пароль адмін-акаунта (звірка з /etc/shadow через crypt). Демон слухає лише 127.0.0.1, зовні недоступний.
  5. Скидання UI-кешу. DSM кешує скомпільоване меню в js_config_parser; апка чистить кеш після кожної зміни (той самий крок, що робить штатний пост-інстал Synology), DSM регенерує сам.

Архітектура

Браузер (апка ExtJS)       │  Cookie + X-SYNO-TOKEN       ▼ nginx  ──alias /ua-l10n-api/──►  root-демон 127.0.0.1:7686  (ua-l10n-api.py)                                         │   гейт: сесія адміна + пароль                                         ▼                                   uacore.py  ──►  локалі rus у DSM/пакетах                                         │              (.orig = оригінал, .bak = відкат)                                         ▼                                   systemd-таймер  ──►  авто-reapply після оновлень
ФайлРоль
pkgroot/ui/ua-l10n.jsвеб-морда (ExtJS SYNO.SDS.AppWindow): список компонентів, кнопки, лог, попап донату
pkgroot/bin/ua-l10n-api.pyroot-демон: HTTP-API, автентифікація сесії + пароля
pkgroot/bin/uacore.pyядро: статус/apply/revert/export, авто-таймер, перемикання мови
pkgroot/payload/manifest.jsonджерело правди: cid → {live-шлях, назва, версія}
pkgroot/payload/comp/<cid>/{strings,mails}власне переклади
pkgroot/nginx/dsm.ua-l10n.confnginx-аліас на демон

Для яких версій актуальний переклад

Переклад зібрано й звірено під ці версії (станом на реліз 1.0.0):

  • DSM: 7.2.2-72806 Update 8 — ядро системи + 37 системних компонентів (меню, майстри, Центр пакетів, Центр журналів, Порадник з безпеки, email-сповіщення системи тощо).
  • Пакети Synology: 62 компоненти — версії нижче.

На новіших версіях DSM/пакетів апка теж працює: перекладається все, що збіглося, а нові/змінені рядки просто лишаються рідними (не патчаться) — це безпечно, нічого не ламається. Якщо версія пакета відрізняється — переклад однаково накладається, бо файли локалі між мінорними версіями зазвичай сумісні.

Повний список пакетів і цільових версій (62)

Встановлення

Крок 1. Постав пакет

  1. Завантаж UkrainianL10n.spk з розділу Releases.
  2. DSM → Центр пакетів → Ручне встановлення.
  3. Вибери .spkДалі → погодься на попередження про невідомого видавця (це нормально для community-пакетів) → Готово.

Крок 2. Один раз увімкни «двигун» (root-крок) ⚠️

Робиться лише раз на цьому NAS. Без цього кнопки апки не працюють — це безпека Synology (непідписаному пакету root не дають автоматично, і це не обійти).

Спосіб А — прямо в апці (без SSH): відкрий апку → у банері тисни «Активувати двигун» → введи пароль адміна. Апка створить разову root-задачу в Планувальнику й запустить її сама.

Спосіб Б — Планувальник завдань вручну: Панель керування → Планувальник завдань → Створити → Запланована задача → Скрипт користувача, користувач root, команда:


sh /var/packages/UkrainianL10n/target/bin/ua-l10n-bootstrap.sh install

Збережи → вибери задачу → Виконати.

Спосіб В — SSH:


sudo sh /var/packages/UkrainianL10n/target/bin/ua-l10n-bootstrap.sh install

Крок 3. Користуйся

  1. Відкрий «Українізатор DSM».
  2. Постав галочки на тому, що перекласти (ядро DSM + пакети).
  3. «Українізувати вибране» → введи пароль адмін-акаунта DSM.
  4. Дивись живий лог. Натисни Ctrl+F5, щоб DSM перемалював інтерфейс.

Відкат: кнопка «Повернути оригінал» — повертає рідні (російські) файли байт-в-байт.

Після оновлень DSM/пакетів

Оновлення перезаписує локалі своїми. Робити нічого не треба — фоновий таймер (ua-l10n-reapply.timer, на буті + кожні ~15 хв) сам повертає українізацію вибраних компонентів.

Зняти двигун (вимкнути таймер і прибрати службові файли):


sudo sh /var/packages/UkrainianL10n/target/bin/ua-l10n-bootstrap.sh remove

Збірка з вихідників


git clone 
github.com/...​nology-dsm-ukrainizer.git
cd synology-dsm-ukrainizer
sh build.sh        # → UkrainianL10n.spk

build.sh пакує pkgroot/ у package.tgz, далі загортає INFO + package.tgz + scripts + conf + іконки у .spk. Жодних залежностей, чистий tar + gzip.

Нюанси

  • Сумісність: DSM 7.0+. Переклади запечені під DSM 7.2.2-72806; на іншій версії UI-частина працює, але деякі рядки можуть лишитись рідними (просто не патчаться) — це безпечно.
  • Чому переклад у локалі rus, а не ukr? Synology не дозволяє додати новий код мови — UI ламається. Підміна вмісту rus — єдиний робочий спосіб без зламаного інтерфейсу.
  • Root-крок повторюється, якщо переставити пакет наново.
  • Жодних даних назовні. Демон слухає лише 127.0.0.1, нічого нікуди не шле.

Проєкт некомерційний — роблю у вільний час, щоб софт говорив українською. Якщо корисно — можете підтримати, кнопка з QR є всередині апки. Дякую!
👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дуже дякую за статтю і роботу!

Відпишіться як встало, чи все коректно працює?

Підписатись на коментарі