{
  "backups": {
    "warning": "Остановите боевую группу перед созданием или восстановлением резервной копии. Копии, сделанные во время работы игры, могут быть несогласованными, а для восстановления боевая группа должна быть остановлена.",
    "loadFailed": "Не удалось загрузить копии: {{message}}",
    "take": {
      "title": "Создать копию",
      "desc": "Создаёт снимок базы PostgreSQL боевой группы в файл с отметкой времени на хосте. Рекомендуется перед рискованными изменениями.",
      "btn": "Создать копию"
    },
    "taken": "Копия создана: {{name}}",
    "takeFailed": "Сбой резервного копирования: {{message}}",
    "recent": {
      "title": "Недавние копии",
      "empty": "Копий пока нет."
    },
    "col": {
      "name": "Файл",
      "size": "Размер",
      "modified": "Создано"
    },
    "download": "Скачать",
    "restoreLabel": "Восстановить",
    "restoreFailed": "Сбой восстановления: {{message}}",
    "restoreConfirmTitle": "Восстановить базу данных?",
    "restoreConfirmDesc": "Это заменит активную базу данных на {{name}}. Боевая группа должна быть остановлена — действие необратимо.",
    "deleteLabel": "Удалить",
    "deleteConfirmTitle": "Удалить копию?",
    "deleteConfirmDesc": "Удалить {{name}} безвозвратно?",
    "deleteFailed": "Не удалось удалить: {{message}}",
    "schedule": {
      "title": "Расписание копий",
      "enable": "Включено",
      "desc": "Выполнять автоматические копии по недельному расписанию. Время — в настроенном часовом поясе.",
      "nextBackup": "Следующая копия: {{when}}",
      "noneScheduled": "Копии не запланированы",
      "noRules": "Пока нет правил — добавьте ниже.",
      "addRule": "Добавить правило",
      "removeRule": "Удалить правило",
      "keepN": "Хранить последние",
      "keepHint": "0 = хранить все",
      "timezone": "Часовой пояс",
      "tzPlaceholder": "локальное хоста (напр. UTC)",
      "save": "Сохранить",
      "saveFailed": "Не удалось сохранить: {{message}}"
    }
  },
  "serverHealth": {
    "directorProxied": "(через прокси)",
    "ifaceLoadFailed": "Не удалось загрузить веб-интерфейсы: {{message}}",
    "ifaceSaveFailed": "Не удалось сохранить: {{message}}",
    "ifaceLabel": "Метка",
    "ifaceUrl": "URL (http:// или /путь)",
    "editInterfaces": "Редактировать веб-интерфейсы",
    "removeInterface": "Удалить",
    "addInterface": "Добавить интерфейс",
    "saveInterfaces": "Сохранить",
    "title": "Состояние сервера",
    "subtitle": "Состояние ВМ, боевой группы и портов в реальном времени.",
    "gamePorts": "Игра (UDP)",
    "webPort": "Веб",
    "vm": "ВМ",
    "bg": "Боевая группа",
    "up": "Работает",
    "down": "Остановлено",
    "bgVm": "Боевая группа + ВМ",
    "upFor": "Работает {{uptime}}",
    "noUptime": "Время работы недоступно",
    "components": "Сведения о боевой группе",
    "bgState": "Состояние БГ",
    "database": "База данных",
    "director": "Director",
    "configured": "Настроено",
    "notConfigured": "Не настроено",
    "uptime": "Время работы",
    "readyState": "Готовность игры",
    "ready": "Готово",
    "notReady": "Не готово",
    "webInterfaces": "Веб-интерфейсы",
    "noInterfaces": "Веб-интерфейсы не настроены.",
    "copied": "Скопировано в буфер обмена",
    "copyFailed": "Не удалось скопировать",
    "copy": "Копировать",
    "open": "Открыть",
    "gameServers": "Игровые серверы",
    "pods": "{{n}} подов"
  },
  "restarts": {
    "title": "Запланированные перезапуски",
    "enable": "Включено",
    "nextRestart": "Следующий перезапуск: {{when}}",
    "noneScheduled": "Перезапуски не запланированы",
    "noRules": "Пока нет правил — добавьте ниже.",
    "addRule": "Добавить правило",
    "removeRule": "Удалить правило",
    "warnMinutes": "Предупр. (мин)",
    "timezone": "Часовой пояс",
    "tzPlaceholder": "локальное хоста (напр. UTC)",
    "save": "Сохранить",
    "skipNext": "Пропустить следующий",
    "failedToLoad": "Не удалось загрузить: {{message}}",
    "saveFailed": "Не удалось сохранить: {{message}}"
  },
  "director": {
    "title": "Настройки Director",
    "subtitle": "Настройки Battlegroup Director — инстансирование карт и расширенные параметры (AMP).",
    "loading": "Загрузка конфигурации Director…",
    "unsupported": "Редактирование конфигурации Director доступно только на управляющем плане AMP.",
    "save": "Сохранить",
    "saveWithCount": "Сохранить ({{count}})",
    "saveFailed": "Не удалось сохранить: {{message}}",
    "readOnly": "только чтение",
    "restartNote": "Изменения записываются в director_config.ini и применяются после перезапуска сервера."
  },
  "help": {
    "menu": "Помощь",
    "reportIssue": "Сообщить о проблеме",
    "copyDiagnostics": "Копировать диагностику",
    "viewOnGitHub": "Открыть на GitHub",
    "copied": "Диагностика скопирована в буфер обмена",
    "copyFailed": "Не удалось скопировать в буфер обмена"
  },
  "landsraad": {
    "title": "Landsraad",
    "subtitle": "Еженедельный политический срок — указы и доска задач домов (только чтение).",
    "failedToLoad": "Не удалось загрузить Ландсраад: {{message}}",
    "currentTerm": "Текущий срок",
    "noTerm": "Нет активного срока.",
    "testTerm": "Тестовый срок",
    "term": {
      "id": "Срок",
      "window": "Период",
      "reigning": "Правящая фракция",
      "activeDecree": "Активный указ",
      "electedDecree": "Избранный указ",
      "winning": "Победившая фракция"
    },
    "decrees": "Указы",
    "decreesDesc": "Общесерверные бонусы, которые можно избрать каждый срок.",
    "noDecrees": "Нет указов.",
    "weight": "Вес {{weight}}",
    "enabled": "Включён",
    "disabled": "Отключён",
    "taskBoard": "Доска задач",
    "taskBoardDesc": "Задачи вклада домов на текущий срок.",
    "noTasks": "Нет задач.",
    "tasks": {
      "index": "#",
      "house": "Дом",
      "goal": "Цель",
      "completed": "Статус",
      "sysselraad": "Sysselraad",
      "done": "Готово",
      "open": "Открыто",
      "yes": "Да"
    }
  },
  "guilds": {
    "title": "Гильдии ({{count}})",
    "subtitle": "Гильдии игроков на этом сервере.",
    "view": "Просмотр",
    "empty": "Гильдии не найдены.",
    "failedToLoad": "Не удалось загрузить гильдии: {{message}}",
    "members": "Участники",
    "invites": "Ожидающие приглашения",
    "noMembers": "Нет участников.",
    "noInvites": "Нет ожидающих приглашений.",
    "roleN": "Роль {{id}}",
    "manage": "Управление",
    "editGuild": "Редактировать гильдию",
    "nameLabel": "Название",
    "descLabel": "Описание",
    "save": "Сохранить",
    "saved": "Гильдия обновлена.",
    "saveFailed": "Не удалось сохранить: {{message}}",
    "makeAdmin": "Назначить админом",
    "roleAdmin": "Админ",
    "roleMember": "Участник",
    "roleChanged": "Роль обновлена.",
    "roleChangeFailed": "Не удалось изменить роль: {{message}}",
    "invitedBy": "приглашён: {{name}}",
    "columns": {
      "name": "Название",
      "faction": "Фракция",
      "members": "Участники",
      "description": "Описание"
    }
  },
  "app": {
    "reportIssue": "Сообщить о проблеме на GitHub",
    "changesNote": "Изменения на всех вкладках сохраняются вместе.",
    "checkUpdates": "Проверить обновления",
    "configureBackend": "Настроить бэкенд",
    "goHome": "На главную",
    "openSettings": "Открыть настройки",
    "reconnect": "Переподключить",
    "reconnected": "Переподключено — база данных подключена",
    "reconnectFailed": "Не удалось переподключиться: {{error}}",
    "reconnecting": "Переподключение…",
    "reinstall": "Переустановить",
    "reinstalled": "{{version}} переустановлен. Сервер перезапускается…",
    "saveApply": "Сохранить и применить",
    "selectLanguage": "Выбрать язык",
    "selectTheme": "Выбрать тему",
    "settings": "Настройки",
    "signIn": "Войти",
    "switchToSidenav": "Переключить на боковую навигацию",
    "switchToTopnav": "Переключить на верхнюю навигацию",
    "title": "DUNE ADMIN",
    "updateAvailable": "Доступно обновление",
    "updateAvailableBody": "Доступна новая версия: v{{current}} → v{{latest}}.",
    "updated": "Обновлено до {{version}}. Сервер перезапускается…",
    "updateFailed": "Ошибка обновления: {{message}}",
    "updateNow": "Обновить сейчас",
    "viewReleaseNotes": "Показать примечания к выпуску",
    "backendUnreachable": {
      "body": "Веб-приложение загрузилось, но не смогло подключиться к серверной части dune-admin. Убедитесь, что исполняемый файл dune-admin запущен и доступен из этого браузера.",
      "hint1": "Убедитесь, что служба/исполняемый файл dune-admin запущены на сервере.",
      "hint2": "Проверьте, что указанный выше URL серверной части верен и доступен (хост, порт, брандмауэр, HTTPS).",
      "hint3": "За прокси или на другом хосте? Укажите URL серверной части в настройках.",
      "retry": "Повторить",
      "targetLabel": "Настроенная серверная часть",
      "title": "Не удаётся подключиться к серверной части dune-admin"
    }
  },
  "bases": {
    "ariaLabel": "Базы игроков",
    "columns": {
      "id": "ID",
      "name": "Название",
      "pieces": "Части",
      "placeables": "Размещаемые"
    },
    "export": "Экспорт",
    "failedToLoad": "Не удалось загрузить базы: {{message}}",
    "featureNotAvailable": "Функция недоступна",
    "featureNotAvailableDesc": "Эта версия бинарного файла dune-admin не поддерживает список баз. Обновитесь до последней версии для использования этой функции.",
    "layoutAccountStrong": "Layout Tools",
    "noBasesFound": "Базы не найдены.",
    "subtitle": "Живые базы игроков в мире. Экспортируйте любую базу как чертёж, совместимый с solido.",
    "title_one": "Базы ({{count}})",
    "title_few": "MISSING",
    "title_many": "MISSING",
    "title_other": "Базы ({{count}})"
  },
  "battlegroup": {
    "actions": {
      "backup": "Резервная копия",
      "backupMsg": "Создать резервную копию базы данных? Это может занять несколько минут.",
      "restart": "Перезапустить",
      "restartMsg": "Перезапустить сервер? Игроки будут ненадолго отключены.",
      "restore": "Восстановить",
      "restoreMsg": "Восстановить базу данных из резервной копии? Текущие данные будут перезаписаны.",
      "start": "Запустить",
      "startMsg": "Запустить сервер боевой группы?",
      "stop": "Остановить",
      "stopMsg": "Остановить сервер? Все игроки будут отключены.",
      "update": "Обновить",
      "updateMsg": "Выполнить обновление сервера? Сервер будет кратко недоступен."
    },
    "backupLoadFailed": "Не удалось загрузить файлы резервных копий",
    "bodyPlaceholder": "Текст",
    "broadcastBtn": "Объявить",
    "broadcasts": "Объявления",
    "broadcastSent": "Объявление отправлено",
    "clickRefresh": "Нажмите Обновить для загрузки статуса.",
    "cmdCompleted": "{{label}} выполнено",
    "cmdFailed": "{{label}} не выполнено: {{message}}",
    "columns": {
      "age": "Возраст",
      "dim": "Dim",
      "map": "Карта",
      "part": "Part",
      "phase": "Фаза",
      "players": "Игроки",
      "queue": "Очередь",
      "ready": "Готов"
    },
    "confirm": {
      "confirmPrefix": "Подтвердить",
      "serverSuffix": "Сервер"
    },
    "database": "База данных",
    "durationLabel": "Длительность (с)",
    "genericMessage": "Общее сообщение",
    "initializing": "(инициализация)",
    "initWarning": "Сервер только что запущен — игровые серверы могут ещё инициализироваться (~2 мин).",
    "loadingStatus": "Загрузка статуса...",
    "modal": {
      "download": "Скачать"
    },
    "noGameServers": "Игровые серверы не найдены.",
    "noOutput": "(нет вывода)",
    "phase": "Фаза",
    "restore": {
      "dropzone": "Перетащите или нажмите для загрузки файла .backup или .zip с компьютера",
      "noBackups": "На сервере ещё нет файлов резервных копий.",
      "restoreBtn": "Восстановить {{file}}",
      "restoreCompleted": "Восстановление завершено",
      "title": "Восстановить из резервной копии",
      "uploaded": "{{name}} загружен",
      "warning": "Это перезапишет текущие данные. Сервер следует сначала остановить."
    },
    "restoreLabel": "Восстановить",
    "runningCmd": "Выполняется {{cmd}}...",
    "serverControl": "Управление сервером",
    "shutdownBroadcast": "Объявление об остановке",
    "shutdownCancelled": "Объявление об остановке отменено",
    "shutdownDelay": "Задержка (мин)",
    "shutdownDelayLabel": "Минуты задержки",
    "shutdownSent": "Объявление об остановке отправлено ({{delay}} мин)",
    "shutdownType": "Тип",
    "shutdownTypeLabel": "Тип остановки",
    "statusFailed": "Ошибка статуса: {{message}}",
    "statusTitle": "Статус боевой группы",
    "titleFull": "{{bgTitle}} ({{bgName}})",
    "titlePlaceholder": "Заголовок"
  },
  "blueprints": {
    "ariaLabel": "Чертежи",
    "columns": {
      "id": "ID",
      "itemId": "ID предмета",
      "name": "Название",
      "owner": "Владелец",
      "pieces": "Части",
      "placeables": "Размещаемые"
    },
    "failedToLoad": "Не удалось загрузить чертежи: {{message}}",
    "importBlueprint": "Импортировать чертёж",
    "importFailed": "Ошибка импорта: {{message}}",
    "importModal": {
      "blueprintFile": "Файл чертежа",
      "dropzone": "Перетащите или нажмите для загрузки файла чертежа .json",
      "import": "Импортировать",
      "playerLabel": "Игрок",
      "playerPlaceholder": "Выбрать игрока…",
      "playersLabel": "Игроки",
      "title": "Импортировать чертёж"
    },
    "importSuccess": "Чертёж успешно импортирован",
    "layoutAccountStrong": "Layout Tools",
    "noBlueprintsFound": "Чертежи не найдены.",
    "selectFile": "Выбрать файл чертежа",
    "selectPlayer": "Выбрать игрока",
    "subtitle": "Управление сохранёнными чертежами баз. Экспорт или импорт построек игроков.",
    "title_one": "Чертежи ({{count}})",
    "title_few": "MISSING",
    "title_many": "MISSING",
    "title_other": "Чертежи ({{count}})"
  },
  "common": {
    "timezone": "Часовой пояс",
    "tzHostLocal": "Локальное хоста",
    "add": "Добавить",
    "cancel": "Отмена",
    "checking": "Проверка…",
    "close": "Закрыть",
    "confirm": "Подтвердить",
    "error": "Ошибка:",
    "export": "Экспорт",
    "failed": "Ошибка: {{message}}",
    "noResults": "Нет результатов.",
    "refresh": "Обновить",
    "remove": "Удалить",
    "save": "Сохранить",
    "saving": "Сохранение…",
    "send": "Отправить"
  },
  "database": {
    "columnColumn": "Столбец",
    "enterSearchTerm": "Введите поисковый запрос",
    "enterSQL": "Введите SQL-запрос",
    "enterTableName": "Введите название таблицы",
    "failed": "Ошибка: {{message}}",
    "limitLabel": "Лимит",
    "noResults": "Нет результатов.",
    "nullableColumn": "Nullable",
    "refreshLabel": "Обновить",
    "resultLabel": "Результат",
    "rowsColumn": "Строки",
    "rowsLimited": "Результаты ограничены 200 строками.",
    "runBtn": "Запустить",
    "runHint": "Cmd/Ctrl+Enter для запуска · Tab принимает подсказку",
    "runQuery": "Выполнить запрос",
    "searchLabel": "Столбец или таблица",
    "searchPlaceholder": "player_id, faction...",
    "sections": {
      "backups": "Резервные копии",
      "describe": "Описать",
      "sample": "Образец",
      "search": "Поиск столбцов",
      "sql": "Выполнить SQL",
      "tables": "Таблицы"
    },
    "sideNavTitle": "База данных",
    "sqlPlaceholder": "SELECT * FROM dune.actors LIMIT 10;",
    "tableColumn": "Таблица",
    "tableNameLabel": "Название таблицы",
    "tablePlaceholder": "actors",
    "typeColumn": "Тип"
  },
  "liveMap": {
    "betaBody": "Эта функция находится в активной разработке. Некоторые возможности могут измениться.",
    "betaTitle": "Бета — В разработке",
    "calibActive": "Режим калибровки — нажмите на карту точно там, где стоит ваш персонаж.",
    "calibNoPlayer": "Нет онлайн-игрока для привязки калибровки.",
    "calibPoints": "{{n}} точка(и/ек) захвачена(ы) — нужно 2+ далеко друг от друга для решения.",
    "calibrate": "Калибровать",
    "clear": "Очистить",
    "clearFilters": "Сбросить фильтры",
    "densityNoneSelected": "Включите типы ресурсов выше, чтобы увидеть их плотность.",
    "densityOverlay": "Показать плотность ресурсов",
    "dragTeleportDesc": "Безопасная привязка к ({{x}}, {{y}}) — игрок приземлится на ближайшую допустимую поверхность.",
    "dragTeleportTitle": "Телепортировать {{name}}?",
    "failedToLoad": "Не удалось загрузить карту: {{message}}",
    "filter": "Фильтр",
    "filterBases": "Базы",
    "filterHazards": "Hazards",
    "filterKeys": "Keys",
    "filterLandsraad": "Landsraad",
    "filterDensity": "Наложение плотности",
    "filterLocations": "Locations",
    "filterNPCs": "NPCs",
    "filterResources": "Resources",
    "filterLive": "В реальном времени",
    "filterStaticObjects": "Static Objects",
    "filterTrainers": "Trainers",
    "filterVendors": "Vendors",
    "filterSearch": "Найти фильтр…",
    "players": "Игроки",
    "spawnsLoaded_one": "Загружено {{count}} статических маркеров",
    "spawnsLoaded_few": "MISSING",
    "spawnsLoaded_many": "MISSING",
    "spawnsLoaded_other": "Загружено {{count}} статических маркеров",
    "spawnTooltipCoords": "{{x}}, {{y}}",
    "subtitle": "Игроки, транспортные средства и базы на карте в реальном времени",
    "teleportHere": "Телепортировать сюда",
    "teleportMode": "Режим телепортации",
    "teleportModeActive": "Нажмите на карту, чтобы задать пункт назначения",
    "teleportPlayer": "Игрок для телепортации",
    "teleportSelectPlayer": "Выберите игрока…",
    "teleportSent": "Телепортация отправлена",
    "title": "Карта в реальном времени",
    "total": "Всего",
    "unsupported": "Карта в реальном времени недоступна на этом сервере.",
    "updated": "обновлено в {{time}}",
    "vehicles": "Транспорт"
  },
  "logs": {
    "antiCheatLabel": "События античита",
    "antiCheatLog": "Лог античита",
    "antiCheatTitle": "События античита (7д)",
    "autoScroll": "Автопрокрутка",
    "cheats7d": "Читы (7д)",
    "clear": "Очистить",
    "columns": {
      "character": "Персонаж",
      "cheatType": "Тип чита",
      "time": "Время"
    },
    "connectedPod": "● Подключён · {{pod}}",
    "disconnected": "○ Отключён",
    "disconnectedState": "Отключён.",
    "eventsCount_one": "{{count}} событий",
    "eventsCount_few": "MISSING",
    "eventsCount_many": "MISSING",
    "eventsCount_other": "{{count}} событий",
    "failedToLoad": "Не удалось загрузить поды: {{message}}",
    "linesCount_one": "{{count}} строк",
    "linesCount_few": "MISSING",
    "linesCount_many": "MISSING",
    "linesCount_other": "{{count}} строк",
    "logFiles": "Файлы логов",
    "logFileSingular": "файл лога",
    "noCheatEvents": "За последние 7 дней события читерства не найдены.",
    "pods": "Поды",
    "podSingular": "под",
    "reconnect": "Переподключить",
    "selectFromPanel": "Выберите {{label}} на левой панели для начала стриминга логов.",
    "selectSource": "○ Выбрать {{label}}",
    "sourceTitle_one": "{{label}} ({{count}})",
    "sourceTitle_few": "MISSING",
    "sourceTitle_many": "MISSING",
    "sourceTitle_other": "{{label}} ({{count}})",
    "stop": "Стоп",
    "waitingForLines": "Ожидание строк лога...",
    "wsError": "Ошибка WebSocket"
  },
  "market": {
    "bot": {
      "actions": {
        "cleanupFailed": "Ошибка очистки: {{message}}",
        "dormantHint": "Бот отключён — активируйте его на вкладке Сервер для управления жизненным циклом.",
        "pause": "Пауза",
        "pauseFailed": "Не удалось поставить бота на паузу: {{message}}",
        "pauseSuccess": "Бот поставлен на паузу: {{output}}",
        "reinitialize": "Реинициализировать",
        "reinitializeFailed": "Не удалось реинициализировать бота: {{message}}",
        "reinitializeSuccess": "Бот реинициализирован: {{output}}",
        "resume": "Возобновить",
        "resumeFailed": "Не удалось возобновить бота: {{message}}",
        "resumeSuccess": "Бот возобновлён: {{output}}",
        "wipedListings": "Удалено {{orders}} лотов ({{items}} предметов)",
        "wipeListings": "Очистить лоты",
        "wipeListingsConfirm": "Очистить лоты",
        "wipeListingsDesc": "Это удалит каждый активный лот Revy на бирже. Лоты игроков, история выполненных заказов и баланс Solari Revy не затрагиваются. Следующий тик листинга заново заполнит лоты из каталога.",
        "wipeListingsTitle": "Очистить все лоты бота?"
      },
      "botSectionsLabel": "Разделы бота",
      "config": "Конфигурация",
      "configEditor": {
        "buyThreshold": "Порог покупки",
        "buyThresholdDesc": "Покупает лот только когда его цена на уровне или ниже этого % от эталонной цены бота. 100% = равно или ниже · 70% = нужна скидка 30%+ · 110% = до 10% выше цены бота.",
        "buyThresholdHint": "{{pct}}% от эталонной цены бота",
        "buyTickHint": "напр. 5m",
        "buyTickInterval": "Интервал тика покупки",
        "configSaved": "Конфигурация сохранена — изменения применятся при следующем тике",
        "gradeFlawless": "Безупречный",
        "gradeMasterwork": "Мастерский",
        "gradeMultipliers": "Множители грейда",
        "gradeMultipliersDesc": "Масштабирует цену лота по грейду качества. Грейд 0 (Стандарт) — база, должен оставаться 1,0.",
        "gradePristine": "Первозданный",
        "gradeRefined": "Утончённый",
        "gradeStandard": "Стандартный",
        "gradeSuperior": "Превосходный",
        "limits": "Лимиты",
        "limitsDesc": "Контролирует, сколько предметов бот покупает и выставляет за тик.",
        "listingsPerGrade": "Лотов за грейд",
        "listingsPerGradeDesc": "Активно поддерживаемые лоты на предмет на грейд качества (0 = Стандарт … 5 = Безупречный). Складируемые используют только грейд 0. Пример: 5 × 6 грейдов = до 30 лотов на градируемый предмет.",
        "listingsPerGradeHint": "на предмет на уровень качества",
        "listTickHint": "напр. 30m, 1h",
        "listTickInterval": "Интервал тика листинга",
        "maxBuysPerTick": "Макс. покупок за тик",
        "rarityMultipliers": "Множители редкости",
        "rarityMultipliersDesc": "Применяется к предметам без цены NPC-торговца и к созданному снаряжению Уникальный/Памятный. По ключу редкости; Обычный (1,0) — базовый. Множители грейда применяются поверх.",
        "tickIntervals": "Интервалы тиков",
        "vendorMultipliers": "Множители торговца",
        "vendorMultipliersDesc": "Применяется к предметам с ценой NPC-торговца (большинство предметов). Цена лота = цена торговца × этот множитель, по ключу редкости. Только один из множителей — Торговец или Редкость — применяется к данному предмету."
      },
      "configUnavailable": "Конфигурация недоступна.",
      "disabledItems": {
        "ariaLabel": "Отключённые предметы",
        "columns": {
          "name": "Название",
          "templateId": "ID шаблона"
        },
        "disabledItemsCount_one": "Отключённые предметы ({{count}})",
        "disabledItemsCount_few": "MISSING",
        "disabledItemsCount_many": "MISSING",
        "disabledItemsCount_other": "Отключённые предметы ({{count}})",
        "disabledItemsHeading": "Отключённые предметы",
        "noDisabledItems": "В настоящее время нет отключённых предметов.",
        "noMatchingItems": "Подходящие предметы не найдены.",
        "searchAriaLabel": "Поиск отключённых предметов",
        "searchLabel": "Поиск предметов для отключения",
        "searchPlaceholder": "Поиск по названию или ID шаблона…"
      },
      "disabledItemsTab": "Отключённые предметы",
      "log": {
        "autoScroll": "Автопрокрутка",
        "backendUnreachable": "Не удалось достичь бэкенда — проверьте, что он запущен.",
        "clear": "Очистить",
        "connClosed": "Соединение закрыто (код {{code}})",
        "connClosedReason": "Соединение закрыто (код {{code}}): {{reason}}",
        "connect": "Подключить",
        "connected": "● подключён",
        "connecting": "◌ подключение…",
        "connectingState": "Подключение…",
        "error": "✕ ошибка",
        "idle": "○ отключён",
        "notAvailable": "Стриминг лога недоступен",
        "stop": "Стоп",
        "waitingForLines": "Ожидание строк лога…",
        "wsError": "Ошибка WebSocket-соединения — поток лога прерван."
      },
      "logs": "Логи",
      "panelTitle": "Управление ботом — Revy",
      "reloadConfig": "Перезагрузить конфигурацию",
      "reset": "Сбросить",
      "saveConfig": "Сохранить конфигурацию",
      "server": "Сервер",
      "serverConfig": {
        "cacheDb": "БД кэша",
        "changesNote": "Изменения требуют перезапуска сервера для применения.",
        "embeddedBot": "Встроенный бот",
        "enableEmbedded": "Активировать встроенного бота",
        "itemData": "Данные предметов",
        "loadFailed": "Не удалось загрузить конфигурацию сервера",
        "remoteBot": "Удалённый бот",
        "remoteToken": "Удалённый токен",
        "remoteUrl": "Удалённый URL",
        "restartRequired": "(требуется перезапуск)",
        "savedConfig": "Конфигурация сервера сохранена — требуется перезапуск",
        "saveFailed": "Ошибка сохранения: {{message}}",
        "statePath": "Путь состояния"
      },
      "status": {
        "balance": "Баланс",
        "errors": "Ошибки",
        "label": "Статус",
        "lastBuyTick": "Последний тик покупки",
        "lastListTick": "Последний тик листинга",
        "listings": "Лоты",
        "nextBuyTick": "Следующий тик покупки",
        "nextListTick": "Следующий тик листинга",
        "paused": "⏸ На паузе",
        "running": "● Работает",
        "uptime": "Время работы"
      },
      "tickingEnabled": "Тикинг включён"
    },
    "botControl": "Управление ботом",
    "itemDetail": {
      "activeListings": "Активные лоты",
      "armorStats": "Характеристики брони",
      "armorValue": "Значение брони",
      "armorValueByQuality": "Значение брони по качеству",
      "botStock": "Запас бота",
      "category": "Категория",
      "damageMultiplierByQuality": "Множитель урона по качеству",
      "itemInfo": "Информация о предмете",
      "listingsLabel": "Лоты",
      "lowestPrice": "Минимальная цена",
      "noActiveListings": "Нет активных лотов.",
      "priceCol": "Цена",
      "rarityLabel": "Редкость",
      "resistances": "Сопротивления",
      "seller": "Продавец",
      "stockCol": "Запас",
      "tierLabel": "Уровень",
      "totalStock": "Общий запас",
      "weaponQualityScaling": "Масштабирование качества оружия"
    },
    "noBotConnected": "Бот рынка не подключён — активируйте встроенного бота для управления здесь",
    "search": {
      "allSellers": "Все продавцы",
      "ariaLabel": "Поиск предметов",
      "botOnly": "Только бот",
      "clearFilters": "Сбросить",
      "playersOnly": "Только игроки",
      "searchPlaceholder": "Поиск предметов...",
      "sellerAriaLabel": "Фильтр по продавцу"
    },
    "sidebar": {
      "allItems": "Все предметы",
      "categories": "Категории",
      "collapseAriaLabel": "Свернуть боковую панель",
      "expandAriaLabel": "Развернуть боковую панель",
      "schematics": "Схемы"
    },
    "subtitle": "Просмотр активных лотов на бирже от бота и игроков-продавцов.",
    "table": {
      "ariaLabel": "Предметы рынка",
      "botStock": "Запас бота",
      "category": "Категория",
      "grade": "Грейд",
      "item": "Предмет",
      "listings": "Лоты",
      "lowestPrice": "Минимальная цена",
      "noItemsFound": "Предметы не найдены.",
      "rarity": "Редкость",
      "stock": "Запас",
      "tier": "Уровень"
    },
    "title": "Доска рынка"
  },
  "nav": {
    "director": "Director",
    "landsraad": "Landsraad",
    "guilds": "Гильдии",
    "bases": "Базы",
    "battlegroup": "Состояние сервера",
    "blueprints": "Чертежи",
    "database": "База данных",
    "groups": {
      "economy": "Экономика",
      "operations": "Операции",
      "playerWorld": "Мир игрока"
    },
    "liveMap": "Карта в реальном времени",
    "logs": "Логи",
    "market": "Бот рынка",
    "players": "Игроки",
    "server": "Настройки сервера",
    "storage": "Хранилище",
    "welcome": "Наборы приветствия"
  },
  "players": {
    "actions": {
      "admin": {
        "characterExport": "Экспорт персонажа",
        "characterExportDesc": "Скачать данные персонажа в формате JSON",
        "confirmReset": "Подтвердить сброс",
        "confirmWipe": "Подтвердить очистку",
        "delete": "Удалить",
        "deleteTutorials": "Удалить туториалы",
        "deleteTutorialsConfirmDesc": "Это удалит все записи о прохождении туториалов для {{player}}.",
        "deleteTutorialsDesc": "Удаляет все записи о прохождении туториалов",
        "deleteTutorialsTitle": "Удалить туториалы?",
        "destructive": "Деструктивные действия в реальном времени",
        "destructiveDesc": "Необратимо — игрок должен быть онлайн.",
        "dismiss": "Скрыть",
        "dismissReturning": "Скрыть попап вернувшегося игрока",
        "dismissReturningDesc": "Помечает награду как полученную, чтобы попап входа перестал появляться",
        "downloadExport": "Скачать",
        "exportDownloaded": "Экспорт скачан",
        "kick": "Выгнать",
        "kickDesc": "Отключает игрока от сервера",
        "kickPlayer": "Выгнать игрока",
        "liveActions": "Действия в реальном времени",
        "liveActionsDesc": "Команды RabbitMQ — игрок должен быть онлайн.",
        "loadingPlayers": "Загрузка игроков…",
        "manageLocations": "Управление местоположениями",
        "manageLocationsModal": {
          "addHint": "Введите имя и координаты, затем нажмите Сохранить. Сохранение существующего имени обновит его координаты. Оставьте Z пустым для уровня земли (0).",
          "addSection": "Добавить / Обновить местоположение",
          "delete": "Удалить",
          "done": "Готово",
          "nameLabel": "Имя",
          "namePlaceholder": "напр. Windsack",
          "noLocations": "Местоположений пока нет — добавьте выше.",
          "save": "Сохранить",
          "title": "Управление местоположениями"
        },
        "mapPickerModal": {
          "cancel": "Отмена",
          "confirm": "Использовать эти координаты",
          "hint": "Нажмите в любом месте Бассейна Хагга, чтобы захватить X/Y. Z по умолчанию {{z}} — при необходимости скорректируйте вручную.",
          "selected": "Выбрано:",
          "title": "Выбрать местоположение на карте"
        },
        "move": "Переместить",
        "moveToXyz": "Переместить в XYZ",
        "persistent": "Постоянный",
        "pickOnMap": "Выбрать на карте",
        "pickTarget": "Выбрать цель…",
        "positionReadFailed": "Не удалось прочитать позицию игрока",
        "resetActions": "Сбросить действия",
        "resetProgression": "Сбросить прогресс",
        "resetProgressionConfirmDesc": "Это сотрёт XP, навыки и прогресс пути для {{player}}. Действие нельзя отменить.",
        "resetProgressionDesc": "Стирает XP, навыки и путь игрока",
        "resetProgressionTitle": "Сбросить прогресс навсегда?",
        "selectSpawnLocation": "Выбрать место появления…",
        "selectTargetLabel": "Целевой игрок",
        "selectVehicle": "Выбрать транспорт…",
        "spawn": "Вызвать",
        "spawnLocationLabel": "Место появления",
        "spawnVehicle": "Вызвать транспорт",
        "spawnVehicleDesc": "Игрок должен быть онлайн. Появляется в выбранной локации раздела.",
        "teleport": "Телепортировать",
        "teleportNote": "Онлайн = сразу · оффлайн = записывается в БД",
        "teleportPlaceholder": "Выбрать местоположение...",
        "teleportToPlayer": "Телепортировать к игроку",
        "templateLabel": "Шаблон",
        "useCurrent": "Использовать текущее",
        "vehicleLabel": "Тип транспорта",
        "whisper": "Шептать",
        "whisperFrom": "От:",
        "whisperSent": "Шёпот отправлен {{player}}",
        "wipe": "Очистить",
        "wipeCodex": "Очистить кодекс",
        "wipeCodexConfirmDesc": "Это очистит все открытия кодекса для {{player}}.",
        "wipeCodexDesc": "Очищает все открытия кодекса",
        "wipeCodexTitle": "Очистить кодекс?",
        "wipeInventory": "Очистить инвентарь",
        "wipeInventoryConfirmDesc": "Это уничтожит все предметы в инвентаре {{player}}. Действие нельзя отменить.",
        "wipeInventoryDesc": "Уничтожает все предметы в инвентаре игрока",
        "wipeInventoryTitle": "Очистить инвентарь навсегда?"
      },
      "contracts": {
        "applyContracts_one": "Применить контракт(ы) ({{count}})",
        "applyContracts_few": "MISSING",
        "applyContracts_many": "MISSING",
        "applyContracts_other": "Применить контракт(ы) ({{count}})",
        "clearAll": "очистить всё",
        "count_one": "{{count}} контрактов",
        "count_few": "MISSING",
        "count_many": "MISSING",
        "count_other": "{{count}} контрактов",
        "desc": "Применяет теги AddedFlagsOnCompletion контракта + побочные эффекты повышения уровня. Поддерживается множественный выбор.",
        "filterLabel": "Фильтр контрактов",
        "filterPlaceholder": "Фильтр контрактов (напр. Trainer_Mentat, Atre_Rank01)...",
        "loadFailed": "ошибка загрузки: {{error}} — перезапустите сервер",
        "loadingContracts": "загрузка…",
        "noMatching": "Нет подходящих контрактов",
        "reverseContracts_one": "Отменить контракт(ы) ({{count}})",
        "reverseContracts_few": "MISSING",
        "reverseContracts_many": "MISSING",
        "reverseContracts_other": "Отменить контракт(ы) ({{count}})",
        "tagCount_one": "{{count}} тег",
        "tagCount_few": "MISSING",
        "tagCount_many": "MISSING",
        "tagCount_other": "{{count}} тег",
        "tagCountPlural_one": "{{count}} тегов",
        "tagCountPlural_few": "MISSING",
        "tagCountPlural_many": "MISSING",
        "tagCountPlural_other": "{{count}} тегов",
        "title": "Завершить контракт(ы)"
      },
      "experimental": {
        "confirmRun": "Подтвердить запуск",
        "customScript": "CheatScript — Пользовательский",
        "customScriptDesc": "Попробуйте любое имя скрипта или команду консоли.",
        "customScriptLabel": "Пользовательское имя скрипта",
        "customScriptPlaceholder": "Имя скрипта / команды…",
        "knownScripts": "CheatScript — Известные скрипты",
        "knownScriptsDesc": "Именованные скрипты, определённые в DefaultGame.ini. Fire-and-forget.",
        "run": "Запустить",
        "runTitle": "Запустить {{label}}?",
        "scripts": {
          "AwardPlayerXP": "Award Player XP",
          "AwardPlayerXPDesc": "Выдаёт 10 000 XP боя + 10 000 XP исследования + 10 000 XP науки",
          "LeaveMeAlone": "Leave Me Alone",
          "LeaveMeAloneDesc": "Уничтожает всех NPC, очищает встречи + песчаные бури, отключает песчаного червя (для всего сервера)",
          "PlaytestSetup": "Playtest Setup",
          "PlaytestSetupAdmin": "Playtest Setup (Admin)",
          "PlaytestSetupAdminDesc": "⚠ DESTRUCTIVE — то же, что Playtest Setup, но использует сырые имена шаблонов",
          "PlaytestSetupDesc": "⚠ DESTRUCTIVE — ResetProgression + CleanInventory, затем полный набор снаряжения",
          "UnlockAllAbilities": "Unlock All Abilities",
          "UnlockAllAbilitiesDesc": "Устанавливает все модули способностей на уровень 1",
          "UnlockAllSkills": "Unlock All Skills",
          "UnlockAllSkillsDesc": "Устанавливает все модули дерева навыков на уровень 1"
        },
        "try": "Попробовать",
        "warning": "⚠ Экспериментально — эти команды отправляются через RabbitMQ, но их эффекты не верифицированы. Используйте только на тестовых персонажах."
      },
      "history": {
        "columns": {
          "difficulty": "Сложность",
          "dungeon": "Подземелье",
          "duration": "Длительность",
          "eventType": "Тип события",
          "location": "Местоположение",
          "map": "Карта",
          "partySize": "Размер группы",
          "time": "Время"
        },
        "dungeonLabel": "Записи подземелий",
        "dungeonRecords": "Записи подземелий",
        "gameEvents": "Игровые события",
        "gameEventsLabel": "Игровые события",
        "noDungeons": "Нет записей подземелий",
        "noEvents": "Нет событий"
      },
      "journey": {
        "columns": {
          "done": "Завершён",
          "nodeId": "ID узла",
          "revealed": "Открыт",
          "reward": "Награда"
        },
        "complete": "Завершить",
        "filterPlaceholder": "Фильтр узлов...",
        "journeyLabel": "Узлы пути",
        "noMatching": "Нет подходящих узлов",
        "noNodes": "Узлы пути не найдены",
        "redo": "↻ Re-do",
        "reset": "Сбросить",
        "title": "Узлы пути",
        "wipeAll": "Стереть всё",
        "wipeAllDesc": "Это удалит весь прогресс пути для {{player}}. Действие нельзя отменить.",
        "wipeAllTitle": "Стереть все узлы пути?"
      },
      "progression": {
        "apply": "Применить",
        "applyUnlock": "Применить разблокировку",
        "loadingPresets": "Загрузка…",
        "mainQuestLabel": "Главный квест",
        "nodes_one": "{{count}} узлов",
        "nodes_few": "MISSING",
        "nodes_many": "MISSING",
        "nodes_other": "{{count}} узлов",
        "noPresets": "Пресеты недоступны",
        "presets": {
          "a_new_beginning": {
            "desc": "Введение в основную историю — создание Stillsuit, добыча ресурсов, исследование фабрикатора. Разблокирует начало игры.",
            "name": "Завершить: A New Beginning"
          },
          "act1_complete": {
            "desc": "A New Beginning + Find the Fremen вместе. Игрок начинает готовым к Акту 2.",
            "name": "Завершить: Весь Акт 1"
          },
          "deep_desert_intro": {
            "desc": "Завершает цепочку побочных квестов Глубокой пустыни.",
            "name": "Пропустить: Введение в Глубокую пустыню"
          },
          "find_the_fremen": {
            "desc": "Все 7 испытаний, Сич и Эпилог. Разблокирует Fremkit (Stillsuit, Thumper, Cryss Knife и др.) и завершает Акт 1.",
            "name": "Завершить: Find the Fremen (Trials of Aql)"
          },
          "overland_intro": {
            "desc": "Завершает цепочку побочных квестов карты Оверленда (миссии Hark Landsraad, ключевые камни).",
            "name": "Пропустить: Введение в карту Оверленда"
          },
          "skip_npe": {
            "desc": "Отмечает туториал/NPE как завершённый. Полезно для опытных игроков, которым не нужно введение.",
            "name": "Пропустить NPE (опыт нового игрока)"
          },
          "taxation_intro": {
            "desc": "Завершает туториальную цепочку обмена/путешествий.",
            "name": "Пропустить: Туториал налогообложения / обмена"
          },
          "unlock_all_lore": {
            "desc": "Открывает все записи Dunipedia: Известная вселенная, Достопримечательности, Руководство дружелюбной пустыни, Война за Арракис.",
            "name": "Разблокировать весь лор (Dunipedia)"
          },
          "vermillius_intro": {
            "desc": "Завершает все туториальные квесты Vermillius Gap (исследования, крафт, исследование мира). Без побочных эффектов тегов — чистый пропуск туториала.",
            "name": "Пропустить: Туториалы Vermillius Gap"
          }
        },
        "progressionUnlock": "Разблокировка прогресса",
        "progressionUnlockDesc": "Завершает узлы пути DA_FQ_ClimbTheRanks и записывает теги уровня фракции.",
        "quickPresets": "Быстрые пресеты",
        "quickPresetsDesc": "Подобранные наборы, завершающие один или несколько корневых узлов пути и каскадом распространяющиеся на всех потомков и теги.",
        "resetSkillTree": "Сбросить дерево навыков",
        "resetSkillTreeDesc": "Это сотрёт полное дерево навыков профессии {{trainer}} для {{player}}.",
        "resetSkillTreeTitle": "Сбросить дерево навыков {{trainer}}?",
        "reverseUnlock": "Отменить разблокировку",
        "reverseUnlockDesc": "Это отменит пресет {{preset}} для {{faction}} и удалит связанные теги у {{player}}.",
        "reverseUnlockTitle": "Отменить разблокировку прогресса?",
        "trainerLabel": "Наставник",
        "unlockMainQuest": "Разблокировать главный квест",
        "unlockMainQuestDesc": "Помечает каждую строку пути DA_MQ_<name>.* как завершённую и применяет объединение m_TagsToAdd.",
        "unlockTrainer": "Разблокировать наставника",
        "unlockTrainerDesc": "Завершает каждый контракт Trainer_X_* и выдаёт полное дерево навыков профессии."
      },
      "resources": {
        "award": "Начислить",
        "awardCharXP": "Начислить XP персонажа",
        "awardIntel": "Начислить разведданные",
        "characterXP": "XP персонажа",
        "charXPNote": "Макс. 344 440 (уровень 200) · онлайн = прямо, оффлайн = в БД",
        "currencyResources": "Валюта и ресурсы",
        "currentXP": "Текущий: {{xp}} XP — Уровень {{level}} / 200",
        "faction": "Фракция",
        "factionReputation": "Репутация фракции",
        "fill": "Заполнить",
        "fillWater": "Заполнить воду",
        "fillWaterNote": "Заполняет все ёмкости для воды до максимума (игрок должен быть онлайн)",
        "give": "Выдать",
        "giveCurrency": "Выдать валюту",
        "giveScrip": "Выдать Scrip",
        "liveActions": "Действия в реальном времени",
        "liveActionsNote": "Игрок должен быть онлайн.",
        "reputation": "Репутация",
        "reputationNote": "Добавляется к текущей, макс. 12 474",
        "selectModule": "Выбрать модуль…",
        "set": "Установить",
        "setSkillModule": "Установить модуль навыка",
        "skillModules": "Модули навыков",
        "skillPoints": "Очки навыков",
        "skillPointsNote": "Устанавливает незатраченные очки"
      },
      "sections": {
        "admin": "Администратор",
        "contracts": "Контракты",
        "experimental": "Экспериментальное",
        "history": "История",
        "journey": "Путешествие",
        "progression": "Прогресс",
        "resources": "Статистика",
        "specs": "Специализации",
        "tags": "Теги"
      },
      "specs": {
        "columns": {
          "level": "Уровень",
          "track": "Ветка",
          "xp": "XP"
        },
        "grantMax": "Выдать максимум",
        "grantMaxKeystones": "Выдать максимум краеугольных камней",
        "onlineWarning": "⚠ Игрок онлайн — изменения XP могут не вступить в силу до переподключения",
        "resetAllKeystones": "Сбросить все краеугольные камни",
        "resetKeystonesDesc": "Это удалит все выданные краеугольные камни для {{player}}. Действие нельзя отменить.",
        "resetKeystonesTitle": "Сбросить все краеугольные камни?",
        "resetSpec": "Сбросить специализацию",
        "resetSpecDesc": "Это сотрёт все XP и уровни ветки специализации {{track}}.",
        "resetSpecTitle": "Сбросить специализацию {{track}}?",
        "specializations": "Специализации",
        "specsLabel": "Специализации"
      },
      "tags": {
        "activeTags_one": "Активные теги ({{count}})",
        "activeTags_few": "MISSING",
        "activeTags_many": "MISSING",
        "activeTags_other": "Активные теги ({{count}})",
        "activeTagsLabel": "Активные теги",
        "addCount_one": "Добавить ({{count}})",
        "addCount_few": "MISSING",
        "addCount_many": "MISSING",
        "addCount_other": "Добавить ({{count}})",
        "addTags": "Добавить теги",
        "filterPlaceholder": "Фильтр для удаления…",
        "noTags": "Нет тегов",
        "removedTag": "Тег удалён",
        "searchPlaceholder": "Поиск тегов…",
        "tagColumn": "Тег"
      }
    },
    "dashboard": {
      "activityTrend": "Активность — последние {{days}} дн.",
      "avgLevel": "Средний уровень",
      "avgLevelCol": "Ср. ур.",
      "byFaction": "По фракциям",
      "byMap": "Игроки по картам",
      "econPctCol": "% эконом.",
      "factionCol": "Фракция",
      "growthApprox": "Приблизительно — по онлайн-снимкам",
      "growthTitle": "Рост фракций",
      "metricLevel": "Ср. уровень",
      "metricSolaris": "Solaris",
      "navLabel": "Обзор сервера",
      "noPlayers": "Пока нет игроков",
      "online": "Сейчас онлайн",
      "playersCol": "Игроки",
      "scripCol": "Scrip",
      "sessions": "Сессии",
      "solarisCol": "Solaris",
      "subtitle": "Статистика и тренды игроков по всему серверу",
      "title": "Обзор сервера",
      "totalPlayers": "Всего игроков",
      "totalPlaytime": "Общее игровое время",
      "totalScrip": "Всего Scrip",
      "totalSolaris": "Всего Solaris"
    },
    "detail": {
      "avgSession": "Среднее",
      "charXP": "XP перс.",
      "earned": "Заработано",
      "economy": "Экономика",
      "factionAlignment": "Принадлежность к фракции",
      "unaligned": "Без фракции",
      "factionTier": "Уровень фракции",
      "failedToLoad": "Не удалось загрузить статистику.",
      "lastSeen": "Последний визит",
      "milestones": "Вехи",
      "playtime": "Время в игре",
      "pois": "Точки интереса",
      "progression": "Прогресс",
      "scrip": "Scrip",
      "sessionCount": "Количество",
      "sessionHistory": "История сессий",
      "sessionHistoryEmpty": "Данные сессий накапливаются при входе игроков. Трекер опрашивает каждые 5 минут.",
      "sessions": "Сессии",
      "skillPts": "Очки навыков",
      "solaris": "Solaris",
      "solarisBalance": "Баланс",
      "solarisHistory": "История Solaris",
      "solarisHistoryEmpty": "Снимки Solaris записываются каждые 5 минут, пока игроки онлайн.",
      "spent": "Потрачено",
      "tier": "Уровень {{tier}}",
      "xpCharXP": "XP перс.",
      "xpCombat": "Бой",
      "xpCrafting": "Крафт",
      "xpExploration": "Исследование",
      "xpGathering": "Сбор",
      "xpHistory": "История XP",
      "xpHistoryEmpty": "Снимки XP записываются каждые 5 минут, пока игроки онлайн.",
      "xpSabotage": "Саботаж"
    },
    "give": {
      "add": "Добавить",
      "gave": "✓ Выдано:",
      "gaveItems_one": "{{count}} предмет выдан {{player}}",
      "gaveItems_few": "MISSING",
      "gaveItems_many": "MISSING",
      "gaveItems_other": "{{count}} предметов выдано {{player}}",
      "giveCount_one": "Выдать {{count}} предмет",
      "giveCount_few": "MISSING",
      "giveCount_many": "MISSING",
      "giveCount_other": "Выдать {{count}} предметов",
      "loadPack": "Загрузить пак…",
      "managePacks": "Управление пакетами",
      "modalTitle": "{{name}} — Выдать предметы",
      "qty": "Кол-во",
      "quality": "Качество",
      "searchTemplates": "Поиск шаблонов...",
      "selectTemplate": "Выбрать шаблон",
      "skipped": "✕ {{template}} пропущен: {{reason}}"
    },
    "givePacks": {
      "addItem": "Добавить предмет",
      "addPack": "Добавить пакет",
      "category": "Категория",
      "deletePack": "Удалить пакет",
      "duplicateId": "Пакет с таким ID уже существует.",
      "editingPack": "Редактирование пакета",
      "newPack": "Новый пакет",
      "noItemsYet": "В этом пакете ещё нет предметов.",
      "noPacks": "Пакетов пока нет — добавьте один выше.",
      "noPackSelected": "Выберите пакет для редактирования его предметов.",
      "packId": "ID",
      "packName": "Название",
      "removeItem": "Убрать предмет",
      "save": "Сохранить пакеты",
      "saved": "Пакеты сохранены",
      "saveFailed": "Не удалось сохранить пакеты: {{message}}",
      "searchTemplates": "Поиск шаблона предмета…",
      "tier": "Уровень",
      "title": "Управление пакетами предметов",
      "updatePack": "Обновить пакет"
    },
    "inventory": {
      "columns": {
        "durability": "Прочность",
        "quality": "Качество",
        "stack": "Стак",
        "template": "Шаблон"
      },
      "deleteOnlineWarning": "Игрок онлайн — удаление предметов может вызвать рассинхронизацию инвентаря. Продолжить?",
      "itemDeleted": "Предмет удалён",
      "itemsLabel": "Предметы",
      "noItemsFound": "Предметы не найдены",
      "repair": "Починить",
      "repaired": "{{name}} починен",
      "repairGear": "Починить снаряжение",
      "repairGearDone": "Починено {{repaired}} из {{scanned}} единиц снаряжения — переподключитесь, чтобы увидеть в игре",
      "repairGearNone": "Снаряжение, требующее ремонта, не найдено (проверено {{scanned}} предметов)",
      "repairNotice": "Изменения прочности записываются в БД. Игрок должен перелогиниться, чтобы увидеть их в игре.",
      "title": "Инвентарь"
    },
    "searchLabel": "Поиск игроков",
    "searchPlaceholder": "Фильтр игроков...",
    "tabs": {
      "actions": "Действия",
      "give": "Выдать",
      "inventory": "Инвентарь",
      "overview": "Обзор",
      "vehicles": "Транспорт"
    },
    "title": "Игроки",
    "vehicles": {
      "backup": "Резервная копия",
      "columns": {
        "chassis": "Шасси",
        "class": "Класс",
        "location": "Местоположение",
        "name": "Название",
        "type": "Тип"
      },
      "noVehiclesFound": "Транспорт не найден",
      "recovered": "Восстановлен",
      "refuel": "Заправить",
      "refuelDone": "{{label}} заправлен — переподключитесь, чтобы увидеть в игре",
      "repair": "Починить",
      "repairDone": "Починено {{repaired}} модулей на {{label}} — переподключитесь, чтобы увидеть в игре",
      "repairNone": "Модули не найдены на {{label}}",
      "repairNotice": "Ремонт транспортных средств требует перезапуска сервера для применения в игре.",
      "repairPartial": "Починено {{repaired}} из {{total}} модулей на {{label}} ({{skipped}} пропущено) — переподключитесь, чтобы увидеть в игре",
      "vehiclesLabel": "Транспорт"
    }
  },
  "server": {
    "advancedCategories": "Расширенные",
    "advancedCategoriesDesc": "Нажмите на категорию для развёртывания. Нажмите снова или выберите другую для переключения.",
    "collapse": "Отмена",
    "collapseCategory": "Свернуть категорию",
    "collapseSection": "Свернуть раздел",
    "commonSettings": "Общие настройки",
    "commonSettingsDesc": "Дюжина параметров, которые администраторы используют чаще всего. Остальное находится в категориях ниже.",
    "deleteFailed": "Ошибка удаления: {{message}}",
    "iniNotFound": "Не удалось найти INI-файлы сервера: {{error}}. Для kubectl убедитесь, что PVC игрового сервера примонтирован. Для docker/local добавьте server_ini_dir в ~/.dune-admin/config.yaml.",
    "loading": "Загрузка настроек…",
    "noMatchSettings": "Настройки не совпадают с «{{query}}».",
    "overriddenCount_one": "{{count}} переопределено",
    "overriddenCount_few": "MISSING",
    "overriddenCount_many": "MISSING",
    "overriddenCount_other": "{{count}} переопределено",
    "rawIniDesc": "Записи массивов (+key=val) и нераспознанные ключи, сгруппированные по INI-разделам.",
    "rawIniSections": "Сырые INI-разделы",
    "rawPlaceholder": "Key=Value или +Key=Value для записей массива",
    "removedFrom": "Удалено из {{file}}",
    "save": "Сохранить",
    "savedTo": "Сохранено в {{file}}",
    "saveFailed": "Ошибка сохранения: {{message}}",
    "saveWithCount_one": "Сохранить ({{count}})",
    "saveWithCount_few": "MISSING",
    "saveWithCount_many": "MISSING",
    "saveWithCount_other": "Сохранить ({{count}})",
    "searchLabel": "Поиск настроек",
    "searchPlaceholder": "Поиск настроек…",
    "settingCount_one_one": "{{count}} настройка",
    "settingCount_one_few": "MISSING",
    "settingCount_one_many": "MISSING",
    "settingCount_one_other": "{{count}} настройка",
    "settingCount_other_one": "{{count}} настроек",
    "settingCount_other_few": "MISSING",
    "settingCount_other_many": "MISSING",
    "settingCount_other_other": "{{count}} настроек",
    "showAll": "Все",
    "showAllAriaLabel": "Показаны все настройки — нажмите для отображения только пользовательских",
    "showUser": "Пользователь",
    "showUserAriaLabel": "Показаны только пользовательские настройки — нажмите для отображения всех",
    "title": "Настройки сервера",
    "unsaved": "не сохранено",
    "userOverride": "· переопределение пользователя",
    "expertCategories": "Экспертные",
    "expertCategoriesDesc": "Внутренние параметры движка и системы. Изменяйте их только если точно знаете, что делаете.",
    "ampManagedTooltip": "Управляется через API AMP — применяется при следующем перезапуске сервера",
    "removeFrom": "Удалить из {{file}}"
  },
  "settings": {
    "adv": {
      "applyReload": "Применить и перезагрузить",
      "backendUrlHint": "Необходимо только когда UI обслуживается с другого хоста (SSH-туннель, CDN). Оставьте пустым для однобинарной установки.",
      "backupDir": "Каталог резервных копий",
      "defaultIniDir": "Каталог INI по умолчанию",
      "defaultIniDirHint": "базовый слой DefaultGame.ini",
      "directorUrl": "URL Director",
      "directorUrlHint": "прокси на /director/",
      "listenAddr": "Адрес прослушивания",
      "listenAddrHint": "⚠ требуется перезапуск",
      "reset": "Сбросить",
      "scripCurrency": "ID валюты Scrip",
      "serverIniDir": "Каталог INI сервера",
      "serverIniDirHint": "расположение UserGame.ini",
      "url": "URL",
      "urlHint": "сохранён в браузере, не на сервере"
    },
    "amp": {
      "containerName": "Название контейнера",
      "containerNameHint": "по умолчанию: AMP_<instance>",
      "dataRoot": "Корень данных",
      "instanceName": "Название экземпляра",
      "logPath": "Путь к логам",
      "useContainer": "Использовать контейнер (podman exec)",
      "useContainerHint": "Отключите для запуска напрямую на хосте как пользователь AMP.",
      "user": "Пользователь AMP",
      "apiUser": "Пользователь API AMP",
      "apiPassword": "Пароль API AMP",
      "apiPort": "Порт API AMP",
      "apiHint": "Вход в веб-API AMP. Позволяет dune-admin управлять настройками сервера в AMP, чтобы они сохранялись после перезапусков. Порт по умолчанию 8081."
    },
    "broker": {
      "adminAddr": "Адрес администратора",
      "execPrefix": "Префикс выполнения",
      "execPrefixHint": "когда broker находится в контейнере",
      "gameAddr": "Адрес игры",
      "jwtSecret": "JWT-секрет",
      "jwtSecretHint": "пусто = встроенный по умолчанию",
      "optionalHint": "Включает захват и уведомления при настройке.",
      "password": "Пароль",
      "user": "Пользователь",
      "useTls": "Использовать TLS (amqps://)"
    },
    "cmd": {
      "restart": "Перезапустить",
      "start": "Запустить",
      "status": "Статус",
      "stop": "Остановить"
    },
    "configSaved": "Конфигурация сохранена — применение настроек…",
    "control": {
      "amp": "amp — CubeCoders AMP",
      "docker": "docker — Docker-контейнеры",
      "kubectl": "kubectl — Kubernetes / k3s",
      "local": "local — bare metal / LGSM / shell",
      "modeHint": "Как dune-admin управляет игровым сервером",
      "selectMode": "Выберите режим управления выше для просмотра специфичных настроек."
    },
    "db": {
      "host": "Хост",
      "hostHint": "127.0.0.1 через SSH-туннель",
      "name": "Название базы данных",
      "password": "Пароль",
      "passwordHint": "отправьте заполнитель для сохранения текущего",
      "port": "Порт",
      "schema": "Схема",
      "user": "Пользователь"
    },
    "docker": {
      "brokerAdmin": "Broker (admin)",
      "brokerGame": "Broker (игра)",
      "database": "База данных",
      "gameServer": "Игровой сервер"
    },
    "k8s": {
      "namespace": "Пространство имён",
      "namespaceHint": "пусто = автоопределение"
    },
    "loadFailed": "Не удалось загрузить конфигурацию: {{message}}",
    "loadingConfig": "Загрузка конфигурации…",
    "saveFailed": "Ошибка сохранения: {{message}}",
    "sections": {
      "amp": "CubeCoders AMP",
      "backendUrlOverride": "Переопределение URL бэкенда",
      "controlPlane": "Уровень управления",
      "database": "База данных",
      "dockerContainers": "Docker-контейнеры",
      "kubernetes": "Kubernetes",
      "paths": "Пути",
      "rabbitmq": "RabbitMQ (необязательно)",
      "server": "Сервер",
      "serverCommands": "Команды сервера",
      "ssh": "SSH (оставьте пустым для локального)"
    },
    "ssh": {
      "hostPort": "Хост : порт",
      "hostPortHint": "включает SSH-туннель для всего БД + exec",
      "privateKey": "Путь к приватному ключу",
      "privateKeyHint": "абсолютный путь, пусто = автоопределение",
      "user": "Пользователь"
    },
    "tabs": {
      "advanced": "Расширенные",
      "broker": "Broker",
      "connection": "Подключение",
      "control": "Управление"
    }
  },
  "storage": {
    "addItems": "Добавить предметы",
    "addModal": {
      "add": "Добавить",
      "qtyColLabel": "Кол-во",
      "qtyLabel": "Кол-во",
      "qualityColLabel": "Качество",
      "qualityLabel": "Качество",
      "searchPlaceholder": "Поиск шаблонов...",
      "selectTemplate": "Выбрать шаблон",
      "templateLabel": "Шаблон"
    },
    "ariaLabel": "Предметы контейнера",
    "columns": {
      "durability": "Прочность",
      "id": "ID",
      "quality": "Качество",
      "stack": "Стак",
      "template": "Шаблон"
    },
    "containerEmpty": "Контейнер пуст",
    "containersTitle_one": "Контейнеры ({{count}})",
    "containersTitle_few": "MISSING",
    "containersTitle_many": "MISSING",
    "containersTitle_other": "Контейнеры ({{count}})",
    "containerTitle": "Контейнер #{{id}}",
    "itemRemoved": "Предмет удалён",
    "ownerLabel": "Владелец: {{name}}",
    "remove": "Удалить",
    "searchLabel": "Поиск контейнеров",
    "searchPlaceholder": "Поиск...",
    "selectContainer": "Выберите контейнер для просмотра содержимого",
    "warningText": "Предметы, добавленные или удалённые из хранилищ, требуют перезапуска зоны сервера, чтобы стать видимыми для других игроков."
  },
  "welcome": {
    "activeVersionGranted": "АКТИВНАЯ ВЕРСИЯ (ВЫДАЁТСЯ)",
    "addItem": "Добавить предмет",
    "addVersion": "Добавить версию",
    "columns": {
      "character": "Персонаж",
      "error": "Ошибка",
      "flsId": "FLS ID",
      "status": "Статус",
      "tries": "Попытки",
      "updated": "Обновлено",
      "version": "Версия"
    },
    "configSubtitle": "Включите выдачи, установите активные пакеты и настройте приветственное сообщение.",
    "editingVersion": "Редактирование версии",
    "enabledHint": "— выдаёт активный пакет онлайн-игрокам, ещё не получившим эту версию.",
    "enabledLabel": "Включено",
    "failedToLoad": "Не удалось загрузить набор приветствия: {{message}}",
    "grantsLabel": "Выдачи набора приветствия",
    "grantsTitle_one": "История выдач ({{count}})",
    "grantsTitle_few": "MISSING",
    "grantsTitle_many": "MISSING",
    "grantsTitle_other": "История выдач ({{count}})",
    "message": {
      "enabledHint": "Отправляется один раз на игрока на активную версию через персонажа GM. Регистрируется в журнале выдач.",
      "enabledLabel": "Отправлять шёпот новым игрокам при первом входе",
      "messageLabel": "Сообщение",
      "messagePlaceholder": "Добро пожаловать на сервер! Наслаждайтесь стартовым набором.",
      "senderLabel": "FLS ID отправителя (необязательно)",
      "senderPlaceholder": "Оставьте пустым, чтобы использовать настроенную персону GM",
      "title": "Приветственное сообщение"
    },
    "newVersionLabel": "Название новой версии",
    "newVersionPlaceholder": "напр. v2 или season2",
    "noGrants": "Выдач ещё нет.",
    "noItemsYet": "В этой версии ещё нет предметов.",
    "noPackageSelected": "Пакет не выбран. Добавьте версию для начала.",
    "packagesSubtitle": "Создавайте наборы предметов и управляйте ими. Каждая версия может выдаваться независимо.",
    "removeItem": "Удалить предмет",
    "retry": "Повторить",
    "retryCleared": "Сброшено — повторная попытка при следующем сканировании",
    "retryFailed": "Ошибка повторной попытки: {{message}}",
    "runFailed": "Ошибка выполнения: {{message}}",
    "runNow": "Запустить сейчас",
    "saveConfig": "Сохранить конфигурацию",
    "savedDisabled": "Набор приветствия сохранён (отключён)",
    "savedEnabled": "Включено — «{{version}}» будет выдана в течение одного тика сканирования",
    "saveFailed": "Ошибка сохранения: {{message}}",
    "scanComplete": "Сканирование завершено — {{granted}} выдано, {{failed}} ошибок, {{skipped}} пропущено",
    "scanInterval": "Интервал сканирования (сек)",
    "sections": {
      "config": "Конфигурация",
      "grants": "Выдачи",
      "packages": "Пакеты"
    },
    "title": "Наборы приветствия",
    "revoke": "Отозвать",
    "revoked": "Выдача отозвана — пакет можно выдать снова",
    "revokeFailed": "Не удалось отозвать: {{message}}",
    "motd": {
      "enabledHint": "Отправляется шёпотом от лица GM при каждом входе (каждый сеанс, не только первый). Используйте {player} для имени игрока.",
      "enabledLabel": "Отправлять сообщение игрокам при каждом входе",
      "messageLabel": "Сообщение",
      "messagePlaceholder": "С возвращением, {player}! Загляни в Discord за событиями.",
      "senderLabel": "FLS ID отправителя (необязательно)",
      "senderPlaceholder": "Оставьте пустым, чтобы использовать настроенную персону GM",
      "title": "Сообщение дня"
    },
    "runConfirmTitle": "Выдать приветственный пакет сейчас?",
    "runConfirmBody": "Это немедленно выдаст пакет(ы) {{versions}} всем подходящим игрокам онлайн. Продолжить?"
  }
}
