# Русские строки. Каждая запись задаёт MSG[]. Загружается lib/i18n.sh. # Ключи должны совпадать с i18n/en.sh. MSG[yes]="да" MSG[no]="нет" MSG[default_label]="по умолчанию" MSG[invalid_input]="Неверный ввод, попробуйте ещё раз." MSG[aborted]="Прервано." MSG[enter_to_keep]="(Enter — оставить по умолчанию)" # -- preflight ------------------------------------------------------------- MSG[err_bash_version]="Требуется Bash 4+ (найден %s). Установите более новый bash." MSG[err_need_docker]="Docker не установлен или не в PATH. См. https://docs.docker.com/get-docker/" MSG[err_docker_daemon]="Демон Docker недоступен. Docker запущен?" MSG[err_need_compose]="Требуется Docker Compose v2 ('docker compose'). Обновите Docker Desktop или установите плагин compose." MSG[err_need_openssl]="Для генерации секретов требуется openssl." MSG[preflight_ok]="Предварительные проверки пройдены." MSG[port_in_use]="Порт %s, похоже, занят. Выберите другой или освободите его." # -- locale / welcome ------------------------------------------------------ MSG[choose_locale]="Choose language / Выберите язык" MSG[welcome_title]="Установщик MCMA" MSG[welcome_body]="Мастер задаст несколько вопросов, создаст .env.deploy и docker-compose.yml, скачает образы, выполнит миграции БД, создаст первого администратора и проверит работоспособность. Секреты генерируются автоматически — ничего секретного не печатается. Ctrl+C в любой момент — чистый выход." # -- existing install ------------------------------------------------------ MSG[existing_found]="Найдена существующая установка (.env.deploy). Что сделать?" MSG[menu_update_images]="Обновить образы (pull + перезапуск, конфиг не трогаем)" MSG[menu_reconfigure]="Перенастроить (бэкап конфига и запуск мастера заново)" MSG[menu_cancel]="Отмена" MSG[backup_made]="Текущий конфиг сохранён в %s" # -- services -------------------------------------------------------------- MSG[step_services]="Какие сервисы запустить?" MSG[svc_backend]="mcma-backend — ядро + синк-нода + worker (обязателен)" MSG[svc_webui]="mcma-webui — веб-интерфейс" MSG[backend_required]="Backend обязателен и не может быть отключён." # -- image tag ------------------------------------------------------------- MSG[step_tag]="Какой тег образов развернуть?" MSG[tag_latest]="latest — всегда свежее (может иногда ломаться)" MSG[tag_custom]="Ввести конкретный тег (например, версию релиза)" MSG[tag_prompt]="Тег образа" # -- database -------------------------------------------------------------- MSG[step_db]="База данных" MSG[db_embedded]="Использовать встроенный Postgres (рекомендуется)" MSG[db_external]="Подключиться к внешнему Postgres" MSG[db_host]="Хост Postgres" MSG[db_port]="Порт Postgres" MSG[db_name]="Имя базы" MSG[db_user]="Пользователь базы" MSG[db_pass]="Пароль базы" # -- redis ----------------------------------------------------------------- MSG[step_redis]="Redis" MSG[redis_embedded]="Использовать встроенный Redis (рекомендуется)" MSG[redis_external]="Подключиться к внешнему Redis" MSG[redis_url_prompt]="URL Redis (redis://host:port/db)" # -- storage --------------------------------------------------------------- MSG[step_storage]="Где хранить медиафайлы?" MSG[storage_local]="Локальный каталог на хосте (рекомендуется)" MSG[storage_s3]="S3-совместимое хранилище" MSG[storage_path_prompt]="Каталог на хосте для медиа" MSG[s3_choice]="Хранилище S3" MSG[s3_embedded]="Использовать встроенный MinIO" MSG[s3_external]="Подключиться к внешнему S3" MSG[s3_endpoint]="URL эндпоинта S3 (https://...)" MSG[s3_bucket]="Имя бакета S3" MSG[s3_region]="Регион S3 (пусто, если не нужно)" MSG[s3_key]="Access key S3" MSG[s3_secret]="Secret key S3" # -- network --------------------------------------------------------------- MSG[step_network]="Сеть и доступ" MSG[proxy_note]="Веб-интерфейс и API должны быть на одном origin. Встроенный прокси Caddy обеспечивает это как единая точка входа." MSG[net_caddy_http]="Встроенный прокси (Caddy), обычный HTTP на порту — рекомендуется" MSG[net_caddy_https]="Встроенный прокси (Caddy), авто-HTTPS для домена" MSG[net_direct]="Без встроенного прокси — публикую порты / свой прокси" MSG[direct_cors_warn]="Без встроенного прокси веб-интерфейс и API должны быть на одном origin: backend не отправляет CORS-заголовки, поэтому кросс-origin URL заблокирует браузер. Используйте '/api/v1', только если ваш прокси отдаёт оба на одном origin." MSG[domain_prompt]="Доменное имя (например, music.example.com)" MSG[acme_email_prompt]="Email для Let's Encrypt (необязательно, для уведомлений)" MSG[http_port_prompt]="HTTP-порт для публикации" MSG[api_port_prompt]="Порт API backend для публикации" MSG[webui_port_prompt]="Порт веб-интерфейса для публикации" MSG[public_api_prompt]="Базовый URL API для браузера" # -- admin ----------------------------------------------------------------- MSG[step_admin]="Первый администратор" MSG[admin_q]="Создать первого администратора сейчас?" MSG[admin_user]="Логин администратора" MSG[admin_pass]="Пароль администратора (мин. 8 символов)" MSG[admin_pass_confirm]="Подтвердите пароль" MSG[pass_mismatch]="Пароли не совпадают." MSG[pass_too_short]="Пароль должен быть не короче 8 символов." MSG[admin_skip_note]="Администратора можно создать позже (см. README)." # -- ml -------------------------------------------------------------------- MSG[step_ml]="Опциональный ML-сервис" MSG[ml_prompt]="URL ML-сервиса (оставьте пустым — backend деградирует штатно)" # -- enrichment / acoustid ------------------------------------------------- MSG[step_enrichment]="Обогащение метаданных (опционально)" MSG[enrichment_note]="Импортируемые файлы тегируются из встроенных тегов. Добавьте ключ AcoustID, чтобы опознавать файлы без тегов по аудио-отпечатку (бесплатно: https://acoustid.org/new-application)." MSG[acoustid_prompt]="API-ключ AcoustID (пусто — только встроенные теги)" MSG[musicbrainz_note]="MusicBrainz/AcoustID требуют контактный email в User-Agent, иначе запросы могут ограничиваться (throttling)." MSG[musicbrainz_email_prompt]="Контактный email для MusicBrainz/AcoustID (пусто — использовать значение по умолчанию)" # -- summary / run --------------------------------------------------------- MSG[summary_title]="Сводка (секреты скрыты)" MSG[summary_services]="Сервисы" MSG[summary_tag]="Тег образа" MSG[summary_db]="База данных" MSG[summary_redis]="Redis" MSG[summary_storage]="Хранилище" MSG[summary_access]="Доступ" MSG[confirm_start]="Сгенерировать конфиг и запустить сейчас?" MSG[embedded]="встроенный" MSG[external]="внешний" MSG[pull_images]="Скачивание образов (%s)..." MSG[pull_hint]="Если pull падает с 'unauthorized', выполните 'docker login git.ollyhearn.ru' (приватный регистри)." MSG[starting_deps]="Запуск зависимостей..." MSG[waiting_health]="Ожидание готовности %s..." MSG[running_migrations]="Выполнение миграций БД..." MSG[creating_admin]="Создание первого администратора..." MSG[starting_app]="Запуск сервисов приложения..." MSG[checking_health]="Проверка работоспособности API..." # -- done / errors --------------------------------------------------------- MSG[done_title]="MCMA запущен." MSG[done_url]="Откройте" MSG[done_config]="Конфиг (храните в секрете)" MSG[done_admin_login]="Логин администратора" MSG[done_commands]="Управление: make status | make logs | make update | make down" MSG[err_migrations_failed]="Миграции не выполнились. Backend НЕ запущен поверх битой БД. Смотрите 'make logs'." MSG[err_health_timeout]="API не стал healthy вовремя. Смотрите 'make logs' и 'make status'." MSG[hint_logs]="Выполните 'make logs', чтобы увидеть причину." MSG[no_config]="Установка не найдена. Сначала выполните 'make deploy'." MSG[clean_confirm]="Удалить сгенерированные файлы конфигурации?" MSG[clean_volumes_confirm]="Также УДАЛИТЬ все тома данных (база, медиа)? Это необратимо." MSG[clean_done]="Очистка завершена."