# πŸ“š [Outline](https://github.com/outline/outline) с русским ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ [![Build Status](https://img.shields.io/github/actions/workflow/status/flameshikari/outline-ru/build.yml)](https://github.com/flameshikari/outline-ru/actions) [![Version](https://img.shields.io/github/v/release/flameshikari/outline-ru?style=)](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.8.1 # image: ghcr.io/flameshikari/outline-ru:1.8.1 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.8.1' ``` 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) Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρƒ сСкунд.