hot reload (#24)

* container with hot reload

* update readme
This commit is contained in:
Evgeny
2025-07-05 08:18:15 +05:00
committed by GitHub
parent b129a74d39
commit 4485a10514
9 changed files with 312 additions and 197 deletions
+35 -40
View File
@@ -35,23 +35,48 @@ services:
## 🛠️ Разработка
### Ключевые файлы
- русский перевод — [tools/translation.json](./tools/translation.json)
- английский перевод — [outline/shared/i18n/locales/en_US/translation.json](https://github.com/outline/outline/blob/main/shared/i18n/locales/en_US/translation.json)
- временный файл — [tools/translation.tmp.json]() (существует только локально)
### Быстрый старт
0. Клонирование репозитория с подмодулем:
```sh
git clone --recurse-submodules git@github.com:flameshikari/outline-ru.git
```
1. Пулл изменений в подмодуле и переключение на коммит с целевой версией:
```sh
cd outline
git pull --rebase --tags
git checkout v0.85.0
cd -
```
2. Запуск контейнеров:
```sh
docker compose up -d --build
```
Веб-интерфейс Outline будет доступен по [этой ссылке](http://localhost:10240).
3. Формирование временного файла с помощью [tools/diff.py](./tools/diff.py):
```sh
python tools/diff.py
```
После можно приступить к переводу сфомированного временного файла. Любые изменения в русском переводе обновят [открытую веб-страницу](http://localhost:10240) через пару секунд.
### Описание
Контейнер Outline описан в одном [Dockerfile](./Dockerfile) на основе двух оригинальных с применением [патча](./tools/language.patch) поверх исходного кода Outline (он подключен к этому репозиторию в качестве подмодуля) и копированием [файла перевода](./tools/translation.json). Патч, помимо добавления отсутствующих строк в код, меняет некоторые upstream-ссылки, чтобы Outline мониторил этот контейнер на наличие новых версий, а не оригинальный.
В [docker-compose.yml](./docker-compose.yml) описаны четыре контейнера (кликабельные названия далее — это localhost-ссылки): [Outline](http://localhost:10240), Redis, Postgres и [тестовый OIDC-сервер](http://localhost:10241) (логин/пароль: `outline`). Также там описана вся конфигурация контейнеров; настраивайте под себя по желанию. После первой сборки контейнера большинство слоёв берётся из кэша, сам Outline после изменений пересобирается около полминуты-минуты (тут зависит от железа). Пайплайн примерно такой: перевёл → собрал → проверил.
Скрипт [diff.py](./tools/diff.py) используется для объединения переводов [английского](https://github.com/outline/outline/blob/main/shared/i18n/locales/en_US/translation.json) с [русским](./tools/translation.json) во временный файл `./tools/translation.tmp.json`. Скрипт не имеет интерактивного режима и каких-либо аргументов/опций, он просто запускается (с выводом некоторой полезной информации) и делает следующее:
Скрипт [tools/diff.py](./tools/diff.py) используется для объединения английского и русского переводов во временный файл. Скрипт не имеет интерактивного режима и каких-либо аргументов/опций, он просто запускается (с выводом некоторой полезной информации) и делает следующее:
- сохраняет актуальные переведённые строки
- удаляет неактуальные переведённые строки
- если в файле перевода есть одинаковые key/value пары, то они считаются исключениями (например, `HTML` или `API`) и переносятся как есть
- если в русском переводе есть одинаковые key/value пары, то они считаются исключениями (например, `HTML` или `API`) и переносятся как есть
- новые непереведённые строки добавляются в конец
> Возможно, для коллективного перевода стоило использовать [Crowdin](https://crowdin.com), но что-то руки не дошли ¯\\_(ツ)_/¯
Во временном файле вручную делается перевод новых строк, а затем [файл перевода](./tools/translation.json) вручную заменяется временным файлом.
> Если во временном файле присутствуют две одинаковые непереведённые строки, но одна из них с суффиксом `_plural` (множественное число), например:
>
> ```json
@@ -69,33 +94,3 @@ services:
> "{{ count }} comment_2": "{{ count }} комментариев"
> }
> ```
### Команды
0. Клонирование репозитория с подмодулем
```sh
git clone --recurse-submodules git@github.com:flameshikari/outline-ru.git
```
1. Пулл изменений в подмодуле и переключение на коммит с целевой версией
```sh
cd outline
git pull --rebase --tags
git checkout v0.85.0
cd -
```
2. Формирование временного файла с помощью [diff.py](./tools/diff.py)
```sh
python ./tools/diff.py
```
3. Замена [файла перевода](./tools/translation.json) после перевода строк во временном файле
```
cp ./tools/translation.tmp.json ./tools/translation.json
```
4. Сборка контейнера
```sh
docker compose up -d --build
```