mirror of
https://github.com/flameshikari/outline-ru.git
synced 2026-06-13 04:05:10 +03:00
daa7561aff
Build / Build [amd64] (push) Has been cancelled
Build / Build [arm64] (push) Has been cancelled
Build / Publish (push) Has been cancelled
* bump outline to 1.0.0-2 * update translation.json * update readme.* * update Dockerfile* * bump outline to 1.0.0-test8 * reorganize repo, add git hook * bump version to 1.0.0 * update translations
110 lines
6.3 KiB
Markdown
110 lines
6.3 KiB
Markdown
# 📚 [Outline](https://github.com/outline/outline) с русским переводом [](https://github.com/flameshikari/outline-ru/actions) [](https://github.com/flameshikari/outline-ru/releases/latest)
|
||
|
||
## ❓ Зачем
|
||
|
||
Поддержка русского языка в [Outline](https://github.com/outline/outline) прекращена в версии [0.71.0](https://github.com/outline/outline/releases/tag/v0.71.0) по [некоторым причинам](https://github.com/outline/outline/discussions/5706).
|
||
|
||
## 📝 Примечания
|
||
|
||
- образ доступен в [Docker Hub](https://hub.docker.com/r/flameshikari/outline-ru/tags) и [GHCR](https://github.com/flameshikari/outline-ru/pkgs/container/outline-ru)
|
||
- за основу взят перевод из [этого коммита](https://github.com/outline/outline/commit/228d1faa9fd3cbb82409d98e1443fed65adc5715)
|
||
- сообщить о некорректном переводе можно [тут](https://github.com/flameshikari/outline-ru/discussions/8)
|
||
|
||
## 🐳 Установка
|
||
|
||
> [!WARNING]
|
||
> Перед обновлением **ОБЯЗАТЕЛЬНО** делайте [бэкап](https://docs.getoutline.com/s/hosting/doc/backups-KZtPOADCHG)!
|
||
|
||
Следуйте [официальной инструкции](https://docs.getoutline.com/s/hosting/doc/docker-7pfeLP5a8t), только в качестве `image` укажите `flameshikari/outline-ru:latest` (желательно зафиксировать версию, заменив `latest` на один из [доступных тегов](https://github.com/flameshikari/outline-ru/tags)). Например:
|
||
|
||
```yaml
|
||
services:
|
||
outline:
|
||
image: flameshikari/outline-ru:1.0.0
|
||
# image: ghcr.io/flameshikari/outline-ru:1.0.0
|
||
env_file: ./docker.env
|
||
expose:
|
||
- 3000
|
||
volumes:
|
||
- storage-data:/var/lib/outline/data
|
||
depends_on:
|
||
- postgres
|
||
- redis
|
||
|
||
...
|
||
```
|
||
|
||
## 🛠️ Разработка
|
||
|
||
### Ключевые файлы
|
||
|
||
- русский перевод — [translation/ru.json](./translation/ru.json)
|
||
- английский перевод — [outline/shared/i18n/locales/en_US/translation.json](https://github.com/outline/outline/blob/main/shared/i18n/locales/en_US/translation.json)
|
||
- временный файл — [translation/tmp.json]() (существует только локально)
|
||
|
||
### Описание работы скрипта
|
||
|
||
Скрипт [translation/merge.py](./translation/merge.py) используется для объединения английского и русского переводов во временный файл. Скрипт не имеет интерактивного режима и каких-либо аргументов/опций, он просто запускается (с выводом некоторой полезной информации) и делает следующее:
|
||
|
||
- сохраняет актуальные переведённые строки
|
||
- удаляет неактуальные переведённые строки
|
||
- если в русском переводе есть одинаковые key/value пары, то они считаются исключениями (например, `HTML` или `API`) и переносятся как есть
|
||
- новые непереведённые строки добавляются в конец
|
||
|
||
> Также скрипт конвертирует строки с суффиксом `_plural` (англ. множественное число) в строки с числовыми суффиксами, поддерживающие склонение по падежам. Например, имеем исходные данные:
|
||
>
|
||
> ```jsonc
|
||
> {
|
||
> // ...
|
||
> "{{ count }} comment": "{{ count }} comment",
|
||
> "{{ count }} comment_plural": "{{ count }} comments"
|
||
> // ...
|
||
> }
|
||
> ```
|
||
> Строки после конвертации скриптом:
|
||
> ```jsonc
|
||
> {
|
||
> // ...
|
||
> "{{ count }} comment_0": "[NOT TRANSLATED]",
|
||
> "{{ count }} comment_1": "[NOT TRANSLATED]",
|
||
> "{{ count }} comment_2": "[NOT TRANSLATED]"
|
||
> // ...
|
||
> }
|
||
> ```
|
||
> Конвертированные строки после перевода:
|
||
> ```jsonc
|
||
> {
|
||
> // ...
|
||
> "{{ count }} comment_0": "{{ count }} комментарий", // ед. число, им. падеж
|
||
> "{{ count }} comment_1": "{{ count }} комментария", // ед. число, род. падеж
|
||
> "{{ count }} comment_2": "{{ count }} комментариев" // мн. число, род. падеж
|
||
> // ...
|
||
> }
|
||
> ```
|
||
> Документация: [множественное число](https://www.i18next.com/translation-function/plurals#languages-with-multiple-plurals) в [i18next](https://www.i18next.com) с [JSON-форматом версии 3](https://www.i18next.com/misc/json-format#i18next-json-v3)
|
||
|
||
|
||
### Быстрый старт
|
||
|
||
1. Клонирование репозитория с подмодулем:
|
||
```sh
|
||
git clone --recurse-submodules git@github.com:flameshikari/outline-ru.git
|
||
```
|
||
|
||
2. Пулл изменений в подмодуле и переключение на последний доступный тег:
|
||
```sh
|
||
git submodule foreach 'git pull --rebase --tags && git checkout v1.0.0'
|
||
```
|
||
|
||
3. Запуск контейнеров:
|
||
```sh
|
||
docker compose up -d --build
|
||
```
|
||
Веб-интерфейс Outline будет доступен по [этой ссылке](http://localhost:10240); входить с помощью OpenID Connect под логином/паролем `outline`.
|
||
|
||
4. Формирование временного файла с помощью [translation/merge.py](./translation/merge.py):
|
||
```sh
|
||
python translation/merge.py
|
||
```
|
||
После можно приступить к переводу сфомированного временного файла. После перевода временного файла скопируйте его в файл русского перевода. Любые изменения в русском переводе обновят [открытую веб-страницу](http://localhost:10240) через пару секунд.
|