diff --git a/README.md b/README.md index cf1fc8b..3e04913 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ ## 🐳 Установка -> ΠΏΠ΅Ρ€Π΅Π΄ установкой **ΠžΠ‘Π―Π—ΠΠ’Π•Π›Π¬ΠΠž** ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ [ΠΏΡ€ΠΎ бэкапы ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ](https://docs.getoutline.com/s/hosting/doc/backups-KZtPOADCHG) +> ΠŸΠ΅Ρ€Π΅Π΄ установкой **ΠžΠ‘Π―Π—ΠΠ’Π•Π›Π¬ΠΠž** ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ [ΠΏΡ€ΠΎ бэкапы ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ](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)). НапримСр: @@ -32,3 +32,70 @@ services: ... ``` + +## πŸ› οΈ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° + +### ОписаниС + +ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ 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`. Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²/ΠΎΠΏΡ†ΠΈΠΉ, ΠΎΠ½ просто запускаСтся (с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ) ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: + +- сохраняСт Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ строки +- удаляСт Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ строки +- Ссли Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ key/value ΠΏΠ°Ρ€Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `HTML` ΠΈΠ»ΠΈ `API`) ΠΈ пСрСносятся ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ +- Π½ΠΎΠ²Ρ‹Π΅ Π½Π΅ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ строки Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Π΅Ρ† + +> Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, для ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° стоило ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ [Crowdin](https://crowdin.com), Π½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ€ΡƒΠΊΠΈ Π½Π΅ дошли Β―\\_(ツ)_/Β― + +Π’ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ дСлаСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½ΠΎΠ²Ρ‹Ρ… строк, Π° Π·Π°Ρ‚Π΅ΠΌ [Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°](./tools/translation.json) Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ замСняСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ. + +> Если Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π½Π΅ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ строки, Π½ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… с суффиксом `_plural` (мноТСствСнноС число), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: +> +> ```json +> { +> "{{ count }} comment": "{{ count }} comment", +> "{{ count }} comment_plural": "{{ count }} comments" +> } +> ``` +> …то Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эти строки Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ (для справки: [мноТСствСнноС число](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)): +> +> ```json +> { +> "{{ count }} comment_0": "{{ count }} ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ", +> "{{ count }} comment_1": "{{ count }} коммСнтария", +> "{{ 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 + ``` \ No newline at end of file diff --git a/tools/diff.py b/tools/diff.py index 64c4eb3..066b828 100755 --- a/tools/diff.py +++ b/tools/diff.py @@ -48,7 +48,7 @@ for key, value in ru_json.items(): out_json = {**translated_lines, **untranslated_lines} if (exception_lines): - print('ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ строки ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:') + print('Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:') print(json.dumps(exception_lines, indent=2, ensure_ascii=False)) print()