Русский перевод интерфейса и схемы, падежи, выкладка через релиз

Словарь схемы 0.16.25 (7250 строк), ru.json, ручные правки падежей,
перевод ключа name только в меню, release.sh для выкладки в релиз current.

Claude-Session: https://claude.ai/code/session_01BFaqS6mH9sa99RWghq2j46
Этот коммит содержится в:
2026-10-06 01:37:19 +09:00
родитель 891297bdac
Коммит 61ff14915b
28 изменённых файлов: 15322 добавлений и 2007 удалений
+28
Просмотреть файл
@@ -0,0 +1,28 @@
# Stalwart WebUI на русском, оформление StackWorks
Форк [stalwartlabs/webui](https://github.com/stalwartlabs/webui) (AGPL-3.0) для почтового сервера
StackWorks mail.stackworks.ru. Отличия от оригинала:
- язык всегда русский: `src/i18n/ru.json` для строк самого интерфейса и `src/i18n/schema-ru.json`
для схемы, которую присылает сервер (названия разделов, полей, описания); перевод схемы делает
`src/i18n/schemaRu.ts` прямо при загрузке, ключ `name` переводится только в меню (layouts),
в остальных местах это идентификаторы полей и значений;
- оформление StackWorks: палитра и шрифты в `src/index.css`, логотип в `src/components/common/Logo.tsx`,
тёмные верхняя полоса и боковое меню (классы sw-top, sw-aside, sw-active).
## Перевод
Рабочие файлы в `i18n-work/`: схема сервера `schema-0.16.25.json`, части перевода `part*.ru.json`,
ручные правки `overrides.ru.json` (падежи названий: единственное число в винительном для
«Создать/Изменить/Удалить …», множественное в родительном для «Показано 1-9 из …»),
глоссарий `GLOSSARY.md`. Склейка: `python3 i18n-work/merge.py`.
После обновления сервера Stalwart новые строки схемы останутся английскими: выгрузить новую
схему (`/api/schema/...` из браузера), найти строки без перевода, перевести и пересобрать.
## Выкладка
`./release.sh` собирает интерфейс и выкладывает `webui.zip` в релиз `current` этого репозитория.
Сервер берёт его по адресу из `x:Application.resourceUrl`:
https://git.stackworks.ru/viktor/stalwart-webui-ru/releases/download/current/webui.zip
и обновляет раз в 30 дней или сразу по действию `x:Action/set {"@type":"UpdateApps"}`.