{"id":18054437,"url":"https://github.com/flameshikari/outline-ru","last_synced_at":"2026-01-28T13:02:34.056Z","repository":{"id":224968603,"uuid":"764714816","full_name":"flameshikari/outline-ru","owner":"flameshikari","description":"📚 Outline с русским переводом","archived":false,"fork":false,"pushed_at":"2026-01-21T10:54:49.000Z","size":193,"stargazers_count":102,"open_issues_count":0,"forks_count":5,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-01-21T22:06:56.299Z","etag":null,"topics":["docker","outline","outline-wiki","russian","translation","wiki"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/flameshikari/outline-ru","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flameshikari.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-02-28T15:27:39.000Z","updated_at":"2026-01-21T10:49:22.000Z","dependencies_parsed_at":"2024-03-18T14:27:34.573Z","dependency_job_id":"7f2738d8-a2ea-44f4-b102-6243d7cfd00d","html_url":"https://github.com/flameshikari/outline-ru","commit_stats":null,"previous_names":["flameshikari/outline-ru"],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/flameshikari/outline-ru","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flameshikari%2Foutline-ru","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flameshikari%2Foutline-ru/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flameshikari%2Foutline-ru/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flameshikari%2Foutline-ru/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flameshikari","download_url":"https://codeload.github.com/flameshikari/outline-ru/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flameshikari%2Foutline-ru/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28845769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T13:02:32.985Z","status":"ssl_error","status_checked_at":"2026-01-28T13:02:04.945Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","outline","outline-wiki","russian","translation","wiki"],"created_at":"2024-10-31T00:11:12.349Z","updated_at":"2026-01-28T13:02:34.051Z","avatar_url":"https://github.com/flameshikari.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📚 [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)\n\n## ❓ Зачем\n\nПоддержка русского языка в [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).\n\n## 📝 Примечания\n\n- образ доступен в [Docker Hub](https://hub.docker.com/r/flameshikari/outline-ru/tags) и [GHCR](https://github.com/flameshikari/outline-ru/pkgs/container/outline-ru)\n- за основу взят перевод из [этого коммита](https://github.com/outline/outline/commit/228d1faa9fd3cbb82409d98e1443fed65adc5715)\n- сообщить о некорректном переводе можно [тут](https://github.com/flameshikari/outline-ru/discussions/8)\n\n## 🐳 Установка\n\n\u003e [!WARNING]\n\u003e Перед обновлением **ОБЯЗАТЕЛЬНО** делайте [бэкап](https://docs.getoutline.com/s/hosting/doc/backups-KZtPOADCHG)!\n\nСледуйте [официальной инструкции](https://docs.getoutline.com/s/hosting/doc/docker-7pfeLP5a8t), только в качестве `image` укажите `flameshikari/outline-ru:latest` (желательно зафиксировать версию, заменив `latest` на один из [доступных тегов](https://github.com/flameshikari/outline-ru/tags)). Например:\n\n```yaml\nservices:\n  outline:\n    image: flameshikari/outline-ru:1.4.0\n    # image: ghcr.io/flameshikari/outline-ru:1.4.0\n    env_file: ./docker.env\n    expose:\n      - 3000\n    volumes:\n      - storage-data:/var/lib/outline/data\n    depends_on:\n      - postgres\n      - redis\n\n  ...\n```\n\n## 🛠️ Разработка\n\n### Ключевые файлы\n\n- русский перевод — [translation/ru.json](./translation/ru.json)\n- английский перевод — [outline/shared/i18n/locales/en_US/translation.json](https://github.com/outline/outline/blob/main/shared/i18n/locales/en_US/translation.json)\n- временный файл — [translation/tmp.json]() (существует только локально)\n\n### Описание работы скрипта\n\nСкрипт [translation/merge.py](./translation/merge.py) используется для объединения английского и русского переводов во временный файл. Скрипт не имеет интерактивного режима и каких-либо аргументов/опций, он просто запускается (с выводом некоторой полезной информации) и делает следующее:\n\n- сохраняет актуальные переведённые строки\n- удаляет неактуальные переведённые строки\n- если в русском переводе есть одинаковые key/value пары, то они считаются исключениями (например, `HTML` или `API`) и переносятся как есть\n- новые непереведённые строки добавляются в конец\n\n\u003e Также скрипт конвертирует строки с суффиксом `_plural` (англ. множественное число) в строки с числовыми суффиксами, поддерживающие склонение по падежам. Например, имеем исходные данные:\n\u003e \n\u003e ```jsonc\n\u003e {\n\u003e   // ...\n\u003e   \"{{ count }} comment\": \"{{ count }} comment\",\n\u003e   \"{{ count }} comment_plural\": \"{{ count }} comments\"\n\u003e   // ...\n\u003e }\n\u003e ```\n\u003e Строки после конвертации скриптом:\n\u003e ```jsonc\n\u003e {\n\u003e   // ...\n\u003e   \"{{ count }} comment_0\": \"[NOT TRANSLATED]\",\n\u003e   \"{{ count }} comment_1\": \"[NOT TRANSLATED]\",\n\u003e   \"{{ count }} comment_2\": \"[NOT TRANSLATED]\"\n\u003e   // ...\n\u003e }\n\u003e ```\n\u003e Конвертированные строки после перевода:\n\u003e ```jsonc\n\u003e {\n\u003e   // ...\n\u003e   \"{{ count }} comment_0\": \"{{ count }} комментарий\", // ед. число, им. падеж\n\u003e   \"{{ count }} comment_1\": \"{{ count }} комментария\", // ед. число, род. падеж\n\u003e   \"{{ count }} comment_2\": \"{{ count }} комментариев\" // мн. число, род. падеж\n\u003e   // ...\n\u003e }\n\u003e ```\n\u003e Документация: [множественное число](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)\n\n\n### Быстрый старт\n\n1. Клонирование репозитория с подмодулем:\n    ```sh\n    git clone --recurse-submodules git@github.com:flameshikari/outline-ru.git\n    ```\n\n2. Пулл изменений в подмодуле и переключение на последний доступный тег:\n    ```sh\n    git submodule foreach 'git pull --rebase --tags \u0026\u0026 git checkout v1.4.0'\n    ```\n\n3. Запуск контейнеров:\n    ```sh\n    docker compose up -d --build\n    ```\n    Веб-интерфейс Outline будет доступен по [этой ссылке](http://localhost:10240); входить с помощью OpenID Connect под логином/паролем `outline`.\n\n4. Формирование временного файла с помощью [translation/merge.py](./translation/merge.py):\n    ```sh\n    python translation/merge.py\n    ```\n    После можно приступить к переводу сфомированного временного файла. После перевода временного файла скопируйте его в файл русского перевода. Любые изменения в русском переводе обновят [открытую веб-страницу](http://localhost:10240) через пару секунд.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflameshikari%2Foutline-ru","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflameshikari%2Foutline-ru","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflameshikari%2Foutline-ru/lists"}