// Russian dictionary — same slugs as en.js; a missing slug falls back to English.
export default {
// app / shell / nav
"app.docTitle": "GHard Monitor",
"shell.title": "Мониторинг",
"nav.dashboard": "Дашборд",
"nav.storage": "Хранилища",
"nav.settings": "Настройки",
"nav.signOut": "Выйти",
// login screen
"login.title": "Вход",
"login.subtitle": "GHard Monitor защищён gnexus-auth",
"login.action": "Войти",
// dashboard
"dash.title": "Дашборд",
"dash.addServer": "Добавить сервер",
"dash.summary": "{servers} · {online}", // счётчики собираются вложенным t()
"dash.servers": { one: "{n} сервер", few: "{n} сервера", many: "{n} серверов" },
"dash.online": "{m} в сети",
"dash.emptyTitle": "Серверов пока нет",
"dash.emptyText": "Добавьте первый сервер — панель выдаст ключ для агента hard-monitor",
"dash.serverCreated": "Сервер создан",
"dash.newServer": "Новый сервер",
"dash.nameHint": "Имя нужно только панели — имя хоста агент сообщает сам.",
"dash.serverName": "Имя сервера",
"dash.keyHint": "Ключ показывается {once} — сохраните его и настройте агента с ним.",
"dash.installOn": "Установка на сервере:",
"dash.failed": "Ошибка",
// server card / server page
"server.open": "Открыть",
"server.uptime": "аптайм {value}",
"server.disk": "Диск {mount}",
"server.nodata": "данных пока нет — установите агента",
"server.back": "К дашборду",
"server.notFound": "Сервер не найден",
"server.notFoundText": "Возможно, он был удалён",
"server.rename": "Переименовать",
"server.renameTitle": "Переименовать сервер",
"server.serverName": "Имя сервера",
"server.delete": "Удалить",
"server.deleteTitle": "Удалить сервер?",
"server.deleteMessage": "«{name}» и вся его история метрик будут удалены навсегда.",
"server.infoTitle": "Инфо",
"server.noteTitle": "Заметка",
"server.serverNote": "Заметка о сервере",
"server.notePlaceholder": "Для чего сервер, что на нём работает. Без секретов :)",
"server.hostname": "Имя хоста",
"server.os": "ОС",
"server.kernel": "Ядро",
"server.ips": "IP-адреса",
"server.connIp": "IP подключения",
"server.interval": "Интервал агента",
"server.lastPacket": "Последний пакет",
"server.network": "Сеть",
"server.history": "История:",
"server.tabOverview": "Обзор",
"server.tabDisks": "Диски",
"server.tabNetwork": "Сеть",
"server.tabProcesses": "Процессы",
"server.tabDocker": "Docker",
"server.cpuRamChart": "CPU и RAM, %",
"server.diskChart": "Заполненность дисков, %",
"server.netChart": "Скорость сети, MB/s",
"server.colMount": "Точка монтирования",
"server.colSize": "Размер",
"server.colUsed": "Занято",
"server.colUsage": "Заполненность",
"server.colPid": "PID",
"server.colProcess": "Процесс",
"server.colStatus": "Статус",
"server.colContainer": "Контейнер",
"server.colImage": "Образ",
"server.noDisks": "В последнем пакете нет дисков",
"server.noProcesses": "Нет данных о процессах",
"server.noDocker": "Docker-контейнеры не найдены",
"server.of": "из {total}",
"server.noteSaved": "Заметка сохранена",
"server.renamed": "Переименовано",
"server.serverDeleted": "Сервер удалён",
"server.failedToSave": "Не удалось сохранить",
"server.failedToRename": "Не удалось переименовать",
"server.failedToDelete": "Не удалось удалить",
"server.historyFailed": "Не удалось загрузить историю",
// storage
"storage.title": "Хранилища",
"storage.subtitle": "Сетевые шары, примонтированные к хосту панели",
"storage.addShare": "Добавить шару",
"storage.emptyTitle": "Шар пока нет",
"storage.emptyText": "Примонтируйте сетевой диск к хосту панели и добавьте его путь сюда — панель сама будет следить за заполненностью",
"storage.usedLabel": "Занято",
"storage.used": "занято",
"storage.free": "свободно",
"storage.total": "всего",
"storage.nodata": "нет данных — проверьте монтирование",
"storage.sampledAt": "замер: {time}",
"storage.notSampled": "замеров ещё не было",
"storage.historyTitle": "Заполненность за 24 ч, %",
"storage.addTitle": "Добавить сетевую шару",
"storage.name": "Название",
"storage.mountPath": "Путь монтирования на хосте панели",
"storage.shareAdded": "Шара добавлена",
"storage.deleteTitle": "Удалить шару?",
"storage.deleteMessage": "«{name}» будет убрана из мониторинга. Само монтирование и данные не затрагиваются.",
"storage.historyFailed": "Не удалось загрузить историю хранилищ",
"storage.shareDeleted": "Шара удалена",
// services (health checker)
"nav.services": "Сервисы",
"nav.mcpKeys": "MCP-ключи",
"services.title": "Сервисы",
"services.subtitle": "Здоровье внешних сервисов по их health-эндпоинтам",
"services.addService": "Добавить сервис",
"services.emptyTitle": "Сервисов пока нет",
"services.emptyText": "Добавьте health-URL сервиса (например gnexus-auth) — панель будет опрашивать его сама",
"services.addTitle": "Добавить сервис",
"services.name": "Название",
"services.url": "Health-URL",
"services.urlHint": "Адрес, который панель опрашивает (GET) для проверки здоровья, например http://gnexus-creds.local/api/v1/health",
"services.latency": "отклик {n} ms",
"services.stateUp": "в порядке",
"services.stateDegraded": "деградация",
"services.stateDown": "недоступен",
"services.statePending": "ожидание",
"services.modeMaintenance": "обслуживание",
"services.modeReadonly": "только чтение",
"services.modeDraining": "снятие с нагрузки",
"services.notResponding": "не отвечает — {message}",
"services.serviceAdded": "Сервис добавлен",
"services.historyFailed": "Не удалось загрузить историю сервисов",
"services.serviceDeleted": "Сервис удалён",
"services.serviceUpdated": "Сервис обновлён",
"services.deleteTitle": "Удалить сервис?",
"services.deleteMessage": "«{name}» будет убран из health-мониторинга. Сам сервис не затрагивается.",
"services.back": "К списку",
"services.notFound": "Сервис не найден",
"services.notFoundText": "Возможно, он был убран из мониторинга",
"services.edit": "Редактировать",
"services.editTitle": "Редактировать сервис",
"services.chartTitle": "Время отклика, ms",
"services.logTitle": "Моменты недоступности",
"services.colStart": "Начало",
"services.colDuration": "Длительность",
"services.colWhat": "Что",
"services.colReason": "Причина",
"services.ongoing": "продолжается",
"services.noIncidents": "Недоступности не зафиксировано",
"services.durD": "д",
"services.durH": "ч",
"services.durM": "мин",
"services.durS": "с",
// settings
"settings.title": "Настройки",
"settings.languageToolbar": "Язык интерфейса",
"settings.languageDescription": "По умолчанию панель следует языку аккаунта gnexus-auth; выбор здесь перекрывает его только для GHard Monitor. «Авто» возвращает язык аккаунта.",
"settings.languageDescriptionOpen": "Панель открыта без аккаунта — выбор хранится в этом браузере.",
"settings.languageSaved": "Язык обновлён.",
// language picker (native names — invariant across UI languages)
"profile.languageAuto": "Авто (из аккаунта)",
"profile.langEn": "English",
"profile.langUk": "Українська",
"profile.langRu": "Русский",
// status (single source for card/page/storage badges)
"status.online": "в сети",
"status.offline": "оффлайн",
"status.waiting": "ожидание",
// relative time (fmtAgo / fmtUptime)
"time.never": "никогда",
"time.now": "только что",
"time.secondsAgo": "{n} с назад",
"time.minutesAgo": "{n} мин назад",
"time.hoursAgo": "{n} ч назад",
"time.daysAgo": "{n} д назад",
"time.upDaysHours": "{d} д {h} ч",
"time.upHoursMinutes": "{h} ч {m} мин",
"time.upMinutesSeconds": "{m} мин {s} с",
// common
"common.cancel": "Отмена",
"common.close": "Закрыть",
"common.copy": "Копировать",
"common.create": "Создать",
"common.save": "Сохранить",
"common.add": "Добавить",
"common.delete": "Удалить",
"common.once": "один раз",
"common.error": "Ошибка",
"common.failedToLoad": "Не удалось загрузить",
// MCP personal keys (handbook 10-platform/mcp.md)
"mcpKeys.title": "MCP-ключи",
"mcpKeys.myKeys": "Мои ключи",
"mcpKeys.myKeysNote": "Bearer-токены ваших ИИ-агентов для /mcp этой панели.",
"mcpKeys.defaultName": "Агент",
"mcpKeys.namePlaceholder": "агент",
"mcpKeys.generate": "Выдать ключ",
"mcpKeys.newKey": "Новый MCP-ключ",
"mcpKeys.plaintextOnceName": "Ключ показывается один раз при создании; дальше в списке — только хвост-хинт.",
"mcpKeys.createdTitle": "Ключ создан",
"mcpKeys.plaintextHint": "Скопируйте ключ сейчас — повторно он показан не будет.",
"mcpKeys.colKey": "Ключ",
"mcpKeys.colTail": "Хвост",
"mcpKeys.colRole": "Роль",
"mcpKeys.colCreated": "Создан",
"mcpKeys.colUsed": "Был вызван",
"mcpKeys.colStatus": "Статус",
"mcpKeys.colOwner": "Владелец",
"mcpKeys.badgeActive": "Активен",
"mcpKeys.badgeRevoked": "Отозван",
"mcpKeys.revoke": "Отозвать",
"mcpKeys.revokeTitle": "Отозвать ключ",
"mcpKeys.revokeMessage": "Агенты с ключом \"{name}\" перестанут получать ответы от /mcp.",
"mcpKeys.revokedTitle": "Ключ отозван",
"mcpKeys.failed": "Не удалось",
"mcpKeys.emptyOwn": "Ключей нет — выпустите ключ для своего агента.",
"mcpKeys.emptyAll": "Пока никто не выпускал ключей.",
"mcpKeys.allKeysAdmin": "Ключи всех пользователей",
"mcpKeys.allKeysNote": "Все выпущенные персональные ключи; любой можно отозвать.",
"mcpKeys.limits": "активных ключей: {count} из {limit}",
"mcpKeys.howToConnect": "Как подключить агент",
"mcpKeys.connectNote": "Транспорт — streamable HTTP; авторизация — персональным ключом с этой страницы. Пример для Claude Code:",
"mcpKeys.authOff": "Персональные MCP-ключи работают при включённом входе gnexus-auth. В открытой панели (и для скриптов) используйте GHARD_ADMIN_TOKEN.",
};