#!/usr/bin/env bash locale_msg_unknown_argument() { echo "Неизвестный аргумент: $1"; } locale_msg_self_update_not_implemented() { echo "Self-update пока не реализован в v0.1.0"; } locale_msg_license_title() { echo "Лицензионное соглашение AstraDeploy"; } locale_msg_license_intro() { echo "Ниже приведены важные условия запуска утилиты."; } locale_msg_license_item_1() { echo "- Утилита выполняет команды с повышенными привилегиями (root/sudo)."; } locale_msg_license_item_2() { echo "- Утилита может изменять систему: пакеты, службы, firewall, пользователя и файлы."; } locale_msg_license_item_3() { echo "- Перед обновлением или заменой файлов рекомендуется сделать резервную копию."; } locale_msg_license_item_4() { echo "- Ответственность за лицензии ядра и данные сервера лежит на вас."; } locale_msg_license_item_5() { echo "- AstraDeploy не хранит и не отвечает за ваши данные и их потерю."; } locale_msg_license_item_6() { echo "- Соглашение: AstraDeploy поставляется «как есть», без каких-либо гарантий, и вы используете его на свой риск."; } locale_msg_log_title() { echo "AstraDeploy v$1"; } locale_msg_log_file() { echo "Файл журнала: $1"; } locale_msg_license_prompt() { echo "Продолжить установку после принятия условий?"; } locale_msg_license_denied() { echo "Установка остановлена: условия не приняты."; } locale_msg_eula_prompt() { echo "Подтверждаете принятие Minecraft EULA для Java ядер (Paper/Purpur/Velocity/PowerNukkitX)?"; } locale_msg_eula_denied() { echo "Без принятия EULA установка Java-сервера невозможна."; } locale_msg_progress_step() { echo "Шаг $1: $2"; } locale_msg_step_parse_complete() { echo "Аргументы обработаны"; } locale_msg_step_prepare_defaults() { echo "Применены параметры по умолчанию"; } locale_msg_step_preflight_start() { echo "Запуск предварительных проверок"; } locale_msg_step_install_start() { echo "Начало установки"; } locale_msg_step_finalize() { echo "Завершение"; } locale_msg_step_preflight_begin() { echo "Старт preflight"; } locale_msg_step_preflight_detect() { echo "Определение ОС и менеджера пакетов"; } locale_msg_step_preflight_update_mode_check() { echo "Проверка параметров режима обновления"; } locale_msg_step_preflight_validate_plan() { echo "Проверка плана установки"; } locale_msg_step_preflight_validate_licenses() { echo "Проверка соглашений"; } locale_msg_step_preflight_validate_port() { echo "Проверка свободного порта"; } locale_msg_step_preflight_directory() { echo "Подготовка каталога сервера"; } locale_msg_step_preflight_packages() { echo "Установка базовых пакетов"; } locale_msg_step_preflight_java() { echo "Подготовка компонентов Java"; } locale_msg_step_preflight_user() { echo "Подготовка пользователя сервиса"; } locale_msg_step_preflight_validate_root() { echo "Проверка запуска от root"; } locale_msg_step_preflight_detect_os() { echo "Определение параметров ОС"; } locale_msg_step_preflight_validate_support() { echo "Проверка матрицы поддерживаемых версий"; } locale_msg_step_install_core() { echo "Установка ядра"; } locale_msg_step_update_core() { echo "Обновление ядра"; } locale_msg_step_deploy_core() { echo "Развёртывание ядра"; } locale_msg_step_packages_start() { echo "Установка зависимостей"; } locale_msg_step_packages_dry_run() { echo "Симуляция установки зависимостей"; } locale_msg_step_packages_index() { echo "Обновление индекса пакетов"; } locale_msg_step_download_start() { echo "Загрузка артефакта"; } locale_msg_step_download_completed() { echo "Артефакт загружен"; } locale_msg_step_download_swap() { echo "Замена артефакта"; } locale_msg_step_firewall_start() { echo "Настройка firewall"; } locale_msg_step_firewall_done() { echo "Firewall настроен"; } locale_msg_step_firewall_manual() { echo "Firewall не настроен автоматически"; } locale_msg_step_java_install() { echo "Установка Java runtime"; } locale_msg_step_render_start_script() { echo "Генерация стартового скрипта"; } locale_msg_step_chmod_start_script() { echo "Настройка прав скрипта запуска"; } locale_msg_step_user_create() { echo "Создание сервисного пользователя"; } locale_msg_step_user_exists() { echo "Сервисный пользователь уже существует"; } locale_msg_step_prepare_dir() { echo "Создание каталога сервера"; } locale_msg_step_permission_fix() { echo "Применение владельца и прав"; } locale_msg_step_service_stop() { echo "Остановка существующего сервиса"; } locale_msg_step_service_create() { echo "Создание unit-файла"; } locale_msg_step_service_reload_enable() { echo "Активация сервиса"; } locale_msg_step_service_start() { echo "Запуск сервиса сервера"; } locale_msg_step_core_install() { echo "Старт установки ядра"; } locale_msg_step_core_resolve_channel() { echo "Определение канала выпуска"; } locale_msg_step_core_resolve_download() { echo "Поиск источника загрузки"; } locale_msg_step_core_fetch() { echo "Загрузка файлов ядра"; } locale_msg_step_core_render() { echo "Генерация файлов запуска"; } locale_msg_step_core_phpbuild_resolve() { echo "Определение PHP build"; } locale_msg_step_core_phpbuild_fetch() { echo "Загрузка архива PHP build"; } locale_msg_step_core_runtime() { echo "Подготовка PHP runtime"; } locale_msg_step_core_composer() { echo "Подготовка Composer"; } locale_msg_step_core_repo_clone() { echo "Клонирование источника PocketMine-MP"; } locale_msg_step_core_configure() { echo "Запись конфигураций ядра"; } locale_msg_step_core_post() { echo "Пост-настройка ядра"; } locale_msg_step_core_service() { echo "Подготовка запуска сервиса"; } locale_msg_step_core_chown() { echo "Настройка владения файлами"; } locale_msg_step_core_backup() { echo "Резервное копирование файлов"; } locale_msg_step_core_update_done() { echo "Обновление ядра завершено"; } locale_msg_core_required() { echo "Необходимо указать ядро через --core."; } locale_msg_core_validator_missing() { echo "Для ядра $1 отсутствует валидатор."; } locale_msg_server_dir_required() { echo "Требуется указать каталог сервера."; } locale_msg_server_port_required() { echo "Требуется указать порт сервера."; } locale_msg_port_must_be_numeric() { echo "Порт должен быть числом."; } locale_msg_port_out_of_range() { echo "Порт вне диапазона: $1"; } locale_msg_invalid_service_mode() { echo "Неподдерживаемый режим сервиса: $1"; } locale_msg_invalid_firewall_value() { echo "Недопустимое значение --firewall: $1"; } locale_msg_prompt_core() { echo "Ядро (pmmp|paper|purpur|velocity|powernukkitx|nethergamesmc|bds)"; } locale_msg_prompt_server_directory() { echo "Каталог сервера"; } locale_msg_prompt_server_port() { echo "Порт сервера"; } locale_msg_prompt_ram() { echo "RAM"; } locale_msg_prompt_php_build() { echo "Тег PHP-билда (latest|tag)"; } locale_msg_prompt_pocketmine_version() { echo "Версия/тег PocketMine-MCPE (latest|tag)"; } locale_msg_prompt_bds_version() { echo "Версия Bedrock Dedicated Server (latest|версия)"; } locale_msg_prompt_service_mode() { echo "Режим сервиса"; } locale_msg_prompt_open_firewall() { echo "Открыть firewall (yes/no)"; } locale_msg_prompt_install_user() { echo "Пользователь для установки"; } locale_msg_prompt_invalid_yes_no() { echo "Неверный ответ: используйте yes/no"; } locale_msg_easy_plan_title() { echo "Режим easy активирован. План установки:"; } locale_msg_easy_plan_core() { echo "Ядро: $1"; } locale_msg_easy_plan_dir() { echo "Каталог: $1"; } locale_msg_easy_plan_port() { echo "Порт: $1"; } locale_msg_easy_plan_ram() { echo "RAM: $1"; } locale_msg_easy_plan_service() { echo "Сервис: $1"; } locale_msg_easy_plan_user() { echo "Пользователь сервиса: $1"; } locale_msg_easy_plan_firewall() { echo "Firewall: $1"; } locale_msg_easy_plan_build() { echo "PHP-билд: $1"; } locale_msg_easy_plan_mc_version() { echo "Версия/тег PocketMine-MCPE: $1"; } locale_msg_easy_plan_bds_version() { echo "Версия BDS: $1"; } locale_msg_easy_plan_eula() { echo "EULA: $1"; } locale_msg_dir_not_empty_auto() { echo "Каталог '$1' не пустой. Укажите --allow-existing, --backup-existing или --force-clean."; } locale_msg_dir_not_empty() { echo "Каталог '$1' не пустой"; } locale_msg_dir_not_empty_actions() { echo "1) отмена, 2) использовать существующий, 3) создать backup, 4) очистить: "; } locale_msg_dir_backed_up() { echo "Существующий сервер сохранён как $1"; } locale_msg_action_cancelled_by_user() { echo "Установка отменена пользователем"; } locale_msg_dir_invalid_option() { echo "Неверный вариант"; } locale_msg_backed_up_file() { echo "Файл скопирован: $1 -> $2"; } locale_msg_file_backed_up() { echo "Файл скопирован: $1 -> $2"; } locale_msg_post_install_callback_missing() { echo "Отсутствует шаг пост-установки для ядра $1"; } locale_msg_install_completed() { echo "Установка завершена для $1"; } locale_msg_result_server_dir() { echo "Каталог сервера: $1"; } locale_msg_result_service_mode() { echo "Режим сервиса: $1"; } locale_msg_result_service_name() { echo "Имя сервиса: $1"; } locale_msg_result_log_file() { echo "Файл журнала: $1"; } locale_msg_install_finished() { echo "Установка завершена"; } locale_msg_core_install() { echo "Установка $1..."; } locale_msg_core_update() { echo "Обновление $1..."; } locale_msg_core_name_java_core() { echo "Java ядро $1"; } locale_msg_no_stable_build() { echo "Не найден стабильный build для ${1} ${2}"; } locale_msg_detect_os_failed() { echo "Не удалось определить ОС: файл /etc/os-release отсутствует"; } locale_msg_no_package_manager() { echo "Поддерживаемый менеджер пакетов не найден"; } locale_msg_java_already_available() { echo "Java ${1} уже установлена"; } locale_msg_installing_java_21() { echo "Установка Java 21"; } locale_msg_installing_base_packages() { echo "Установка базовых пакетов"; } locale_msg_dry_run_install() { echo "[dry-run] apt/yum/dnf/pacman install: $1"; } locale_msg_package_manager_unsupported() { echo "Менеджер пакетов ${1} не поддерживается"; } locale_msg_firewall_skip() { echo "Шаг настройки firewall пропущен"; } locale_msg_firewall_manual_open() { echo "Не найден поддерживаемый менеджер firewall. Откройте порт вручную: $1/$2"; } locale_msg_report_dry_run() { echo "Пропуск отправки отчёта в dry-run: $1"; } locale_msg_report_failed() { echo "Не удалось отправить отчет в callback, ошибка проигнорирована"; } locale_msg_deployment_failed() { echo "Установка завершилась ошибкой (код $1) на шаге: $2"; } locale_msg_rollback_starts() { echo "Запущен rollback. Каталог сервера не удаляется: $1"; } locale_msg_see_log() { echo "См. лог: $1"; } locale_msg_service_create_skipped() { echo "Создание сервиса пропущено (mode=$1, init=$2)"; } locale_msg_service_start_skipped() { echo "Запуск сервиса пропущен (mode: $1)"; } locale_msg_refuse_root_user() { echo "Использование root как сервисного пользователя запрещено"; } locale_msg_creating_user() { echo "Создание пользователя $1"; } locale_msg_dry_run_useradd() { echo "[dry-run] useradd -r -m -s /bin/bash $1"; } locale_msg_update_requires_existing_dir() { echo "Для обновления нужен существующий каталог сервера."; } locale_msg_update_requires_non_empty_dir() { echo "Для обновления нужен непустой каталог сервера."; } locale_msg_root_required() { echo "Запустите скрипт от root (пример: sudo bash install.sh ...)"; } locale_msg_unsupported_core() { echo "Ядро '$1' не поддерживается. Доступны: $2. Полный список: $3"; } locale_msg_os_coreplanned() { echo "ОС '$1' запланирована к поддержке в v1.1 (манифест: $2). Применяется best-effort."; } locale_msg_unsupported_os() { echo "ОС '$1' не поддерживается. Сейчас поддерживается: $2. В планах: $3. См. $4"; } locale_msg_tcp_port_in_use() { echo "TCP порт $1 уже занят."; } locale_msg_udp_port_in_use() { echo "UDP порт $1 уже занят."; }