flameshikari b129a74d39 update readme
2025-07-04 23:58:27 +05:00
2025-07-04 14:14:52 +05:00
2025-07-04 14:14:52 +05:00
2025-07-04 23:58:27 +05:00
2025-03-11 15:36:15 +05:00
2025-07-04 14:14:52 +05:00
2025-07-04 14:14:52 +05:00
2025-03-11 16:12:01 +05:00
2025-07-04 23:58:27 +05:00

📚 Outline с русским переводом Build Status Version

Зачем

Поддержка русского языка в Outline прекращена в версии 0.71.0 по некоторым причинам.

📝 Примечания

🐳 Установка

Перед установкой ОБЯЗАТЕЛЬНО прочтите про бэкапы перед обновлением

Следуйте официальной инструкции, только в качестве image укажите flameshikari/outline-ru:latest (желательно зафиксировать версию, заменив latest на один из доступных тегов). Например:

services:
  outline:
    image: flameshikari/outline-ru:0.85.0
    # image: ghcr.io/flameshikari/outline-ru:0.85.0
    env_file: ./docker.env
    expose:
      - 3000
    volumes:
      - storage-data:/var/lib/outline/data
    depends_on:
      - postgres
      - redis

  ...

🛠️ Разработка

Описание

Контейнер Outline описан в одном Dockerfile на основе двух оригинальных с применением патча поверх исходного кода Outline (он подключен к этому репозиторию в качестве подмодуля) и копированием файла перевода. Патч, помимо добавления отсутствующих строк в код, меняет некоторые upstream-ссылки, чтобы Outline мониторил этот контейнер на наличие новых версий, а не оригинальный.

В docker-compose.yml описаны четыре контейнера (кликабельные названия далее — это localhost-ссылки): Outline, Redis, Postgres и тестовый OIDC-сервер (логин/пароль: outline). Также там описана вся конфигурация контейнеров; настраивайте под себя по желанию. После первой сборки контейнера большинство слоёв берётся из кэша, сам Outline после изменений пересобирается около полминуты-минуты (тут зависит от железа). Пайплайн примерно такой: перевёл → собрал → проверил.

Скрипт diff.py используется для объединения переводов английского с русским во временный файл ./tools/translation.tmp.json. Скрипт не имеет интерактивного режима и каких-либо аргументов/опций, он просто запускается (с выводом некоторой полезной информации) и делает следующее:

  • сохраняет актуальные переведённые строки
  • удаляет неактуальные переведённые строки
  • если в файле перевода есть одинаковые key/value пары, то они считаются исключениями (например, HTML или API) и переносятся как есть
  • новые непереведённые строки добавляются в конец

Возможно, для коллективного перевода стоило использовать Crowdin, но что-то руки не дошли ¯\(ツ)

Во временном файле вручную делается перевод новых строк, а затем файл перевода вручную заменяется временным файлом.

Если во временном файле присутствуют две одинаковые непереведённые строки, но одна из них с суффиксом _plural (множественное число), например:

{
  "{{ count }} comment": "{{ count }} comment",
  "{{ count }} comment_plural": "{{ count }} comments"
}

…то нужно заменить эти строки на следующие (для справки: множественное число в i18next с JSON-форматом версии 3):

{
  "{{ count }} comment_0": "{{ count }} комментарий",
  "{{ count }} comment_1": "{{ count }} комментария",
  "{{ count }} comment_2": "{{ count }} комментариев"
}

Команды

  1. Клонирование репозитория с подмодулем

    git clone --recurse-submodules git@github.com:flameshikari/outline-ru.git
    
  2. Пулл изменений в подмодуле и переключение на коммит с целевой версией

    cd outline
    git pull --rebase --tags
    git checkout v0.85.0
    cd -
    
  3. Формирование временного файла с помощью diff.py

    python ./tools/diff.py
    
  4. Замена файла перевода после перевода строк во временном файле

    cp ./tools/translation.tmp.json ./tools/translation.json
    
  5. Сборка контейнера

    docker compose up -d --build
    
S
Description
📚 Outline с русским переводом
Readme MIT 2 MiB
Languages
JavaScript 61.2%
Python 16.5%
Dockerfile 12.3%
Shell 10%