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

Поддержка русского языка в Outline прекращена в версии 0.71.0 по некоторым причинам.
- образ доступен в Docker Hub и GHCR
- за основу взят перевод из этого коммита
- сообщить о некорректном переводе можно тут
Warning
Перед обновлением ОБЯЗАТЕЛЬНО делайте бэкап!
Следуйте официальной инструкции, только в качестве image укажите flameshikari/outline-ru:latest (желательно зафиксировать версию, заменив latest на один из доступных тегов). Например:
services:
outline:
image: flameshikari/outline-ru:1.5.0
# image: ghcr.io/flameshikari/outline-ru:1.5.0
env_file: ./docker.env
expose:
- 3000
volumes:
- storage-data:/var/lib/outline/data
depends_on:
- postgres
- redis
...- русский перевод — translation/ru.json
- английский перевод — outline/shared/i18n/locales/en_US/translation.json
- временный файл — translation/tmp.json (существует только локально)
Скрипт translation/merge.py используется для объединения английского и русского переводов во временный файл. Скрипт не имеет интерактивного режима и каких-либо аргументов/опций, он просто запускается (с выводом некоторой полезной информации) и делает следующее:
- сохраняет актуальные переведённые строки
- удаляет неактуальные переведённые строки
- если в русском переводе есть одинаковые key/value пары, то они считаются исключениями (например,
HTMLилиAPI) и переносятся как есть - новые непереведённые строки добавляются в конец
Также скрипт конвертирует строки с суффиксом
_plural(англ. множественное число) в строки с числовыми суффиксами, поддерживающие склонение по падежам. Например, имеем исходные данные:Строки после конвертации скриптом:
{ // ... "{{ count }} comment_0": "[NOT TRANSLATED]", "{{ count }} comment_1": "[NOT TRANSLATED]", "{{ count }} comment_2": "[NOT TRANSLATED]" // ... }Конвертированные строки после перевода:
{ // ... "{{ count }} comment_0": "{{ count }} комментарий", // ед. число, им. падеж "{{ count }} comment_1": "{{ count }} комментария", // ед. число, род. падеж "{{ count }} comment_2": "{{ count }} комментариев" // мн. число, род. падеж // ... }Документация: множественное число в i18next с JSON-форматом версии 3
-
Клонирование репозитория с подмодулем:
git clone --recurse-submodules git@github.com:flameshikari/outline-ru.git
-
Пулл изменений в подмодуле и переключение на последний доступный тег:
git submodule foreach 'git pull --rebase --tags && git checkout v1.5.0' -
Запуск контейнеров:
docker compose up -d --build
Веб-интерфейс Outline будет доступен по этой ссылке; входить с помощью OpenID Connect под логином/паролем
outline. -
Формирование временного файла с помощью translation/merge.py:
python translation/merge.py
После можно приступить к переводу сфомированного временного файла. После перевода временного файла скопируйте его в файл русского перевода. Любые изменения в русском переводе обновят открытую веб-страницу через пару секунд.
{ // ... "{{ count }} comment": "{{ count }} comment", "{{ count }} comment_plural": "{{ count }} comments" // ... }