Newer
Older
gn-synapse / frontend / src / i18n / messages / ru.js
// Словарь ru (база): плоские slugs по областям, одинаковые slugs во всех языках.
// Пополнение: разделы за вьюхи добавляются при i18n-рое (см. docs/06 README).
export default {
  "app.docTitle": "Synapse Admin",
  "app.subtitle": "Хаб уведомлений Gnexus",
  "app.loading": "Загрузка…",

  "common.signOut": "Выйти",

  "nav.dashboard": "Обзор",
  "nav.sources": "Источники",
  "nav.types": "Типы",
  "nav.targets": "Цели",
  "nav.rules": "Правила",
  "nav.deliveries": "Доставки",
  "nav.mcpKeys": "MCP-ключи",
  "nav.myEvents": "Мои события",
  "nav.settings": "Настройки",
  "settings.language": "Язык интерфейса",
  "settings.languageAuto": "Авто",
  "settings.languageHelp": "«Авто» — язык аккаунта gnexus-auth; выбор перекрывает его только для Synapse и переживает выход.",
  "settings.languageSaved": "Язык изменён",
  "dashboard.title": "Обзор",
  "dashboard.subtitle": "Состояние хаба уведомлений",
  "dashboard.loaderChecking": "Опрашиваю сервис…",
  "dashboard.errorUnavailable": "Сервис недоступен: {message}",
  "dashboard.metricService": "Сервис",
  "dashboard.getStartTitle": "С чего начать",
  "dashboard.getStartText": "Порядок настройки: Источники — зарегистрировать сервис и выпустить ему API-ключ; Цели — куда доставлять (журнал, сервис через s2s); Правила — какое событие и в какую цель уходит. Доставки покажут, что реально ушло.",
  "deliveries.title": "Доставки",
  "deliveries.subtitle": "Лог попыток: канал, цель, статус, ретраи и текст, реально ушедший в канал",
  "deliveries.filterAll": "все",
  "deliveries.filterStatus": "Статус",
  "deliveries.filterChannel": "Канал",
  "deliveries.refresh": "Обновить",
  "deliveries.loading": "Загрузка…",
  "deliveries.empty": "Доставок ещё не было",
  "deliveries.colTime": "Время",
  "deliveries.colEvent": "Событие",
  "deliveries.colEventHint": "Идентификатор события, породившего доставку",
  "deliveries.colChannel": "Канал",
  "deliveries.colTarget": "Цель",
  "deliveries.colStatus": "Статус",
  "deliveries.colStatusHint": "delivered — доставлено; pending — ждёт отправки или ретрая; skipped — отсеял шумодав; failed — попытки кончились",
  "deliveries.colAttempts": "Попытки",
  "deliveries.colAttemptsHint": "Сколько раз пытались отправить (ретраи 30с → 2мин → 10мин → 30мин)",
  "deliveries.colError": "Ошибка",
  "deliveries.colMessage": "Сообщение",
  "denied.cardTitle": "Доступ запрещён",
  "denied.cardText": "Настройки Synapse доступны роли admin и выше; личный раздел — по ссылке «Мои события». Обычно сюда попадают только по устаревшей ссылке на админ-часть.",
  "denied.backToLogin": "На страницу входа",
  "login.title": "Добро пожаловать в Synapse",
  "login.subtitle": "Войдите, чтобы получить доступ к хабу уведомлений",
  "login.signInButton": "Войти через GNEXUS",
  "oauth.checkingLabel": "Проверка входа…",
  "myEvents.title": "Мои события",
  "myEvents.subtitle": "События, направленные лично вам правилами маршрутизации: что случилось и что об этом сказали",
  "myEvents.loading": "Загрузка…",
  "myEvents.empty": "Пока нет событий, направленных лично вам: они появляются, когда правило маршрутизации отправляет событие в канал user",
  "myEvents.colTime": "Время",
  "myEvents.colEvent": "Событие",
  "myEvents.colPriority": "Приоритет",
  "myEvents.priorityTip": "Приоритет события из конверта: low, normal, high, critical",
  "myEvents.colMessage": "Сообщение",
  "sources.pageTitle": "Источники",
  "sources.pageSubtitle": "Сервисы, которые шлют события в хаб. Описание, ключи и типы — на странице источника",
  "sources.toastCreated": "Источник создан",
  "sources.toastDeleted": "Источник удалён",
  "sources.createButton": "Источник",
  "sources.loading": "Загрузка…",
  "sources.empty": "Источников ещё нет — создайте первый",
  "sources.colSlug": "Slug",
  "sources.colSlugHelp": "Имя источника в событии (поле source конверта). Клик — страница источника",
  "sources.colLabel": "Название",
  "sources.colCreated": "Создан",
  "sources.rowDelete": "Удалить источник",
  "sources.createTitle": "Новый источник",
  "sources.formSlugLabel": "Slug (name)",
  "sources.formSlugHelp": "Например monitoring; только a-z 0-9 . _ -",
  "sources.formLabelHelp": "Человекочитаемое имя",
  "sources.formDescriptionLabel": "Описание",
  "sources.formDescriptionHelp": "Что это за сервис — это увидят человек и ИИ-агент в админке",
  "sources.cancel": "Отмена",
  "sources.create": "Создать",
  "sources.confirmTitle": "Удалить источник?",
  "sources.confirmMessage": "Источник «{name}» будет удалён вместе с типами и ключами. Если у источника есть события, удаление будет отклонено.",
  "sources.delete": "Удалить",
  "sourceDetail.notFound": "Источник не найден",
  "sourceDetail.toastKeyRevoked": "Ключ отозван",
  "sourceDetail.toastDeleted": "Источник удалён",
  "sourceDetail.backToList": "К списку источников",
  "sourceDetail.kicker": "Synapse · Источник",
  "sourceDetail.actions": "Действия",
  "sourceDetail.issueKey": "Выпустить ключ",
  "sourceDetail.deleteSource": "Удалить источник",
  "sourceDetail.loading": "Загрузка…",
  "sourceDetail.aboutTitle": "О сервисе",
  "sourceDetail.dtSlug": "Slug",
  "sourceDetail.dtName": "Название",
  "sourceDetail.dtDescription": "Описание",
  "sourceDetail.dtCreated": "Создан",
  "sourceDetail.keysTitle": "API-ключи",
  "sourceDetail.tokenLabel": "Токен",
  "sourceDetail.tokenNote": " показывается один раз при выпуске — в Synapse хранится только sha256-хэш.",
  "sourceDetail.keysEmpty": "Ключей нет — выпустите первый",
  "sourceDetail.colKey": "Ключ",
  "sourceDetail.colTail": "Хвост",
  "sourceDetail.colCreatedHelp": "Момент выпуска ключа",
  "sourceDetail.colUsed": "Использован",
  "sourceDetail.colUsedHelp": "Последнее событие с этим ключом",
  "sourceDetail.colStatus": "Статус",
  "sourceDetail.keyRevoked": "отозван",
  "sourceDetail.keyActive": "активен",
  "sourceDetail.revoke": "Отозвать",
  "sourceDetail.typesTitle": "Типы событий",
  "sourceDetail.allTypes": "Все типы",
  "sourceDetail.typesEmpty": "Типов не зарегистрировано — событие с незнакомой тройкой будет отклонено с 422",
  "sourceDetail.colSubject": "Subject",
  "sourceDetail.colSubjectHelp": "Сущность события: container, issue, build…",
  "sourceDetail.colAction": "Action",
  "sourceDetail.colActionHelp": "Что случилось: down, created, resolved…",
  "sourceDetail.colTypeCreatedHelp": "Момент регистрации типа",
  "sourceDetail.tokenModalTitle": "Токен — показывается один раз",
  "sourceDetail.tokenModalText": "Токен больше не будет показан: в Synapse хранится только sha256-хэш. Скопируйте сейчас и отдайте владельцу источника.",
  "sourceDetail.copy": "Скопировать",
  "sourceDetail.done": "Готово",
  "sourceDetail.confirmTitle": "Удалить источник?",
  "sourceDetail.confirmMessage": "Источник «{name}» будет удалён вместе с типами и ключами. Если у источника есть события, удаление будет отклонено.",
  "sourceDetail.delete": "Удалить",
  "sourceDetail.cancel": "Отмена",
  "types.pickSource": "— выберите источник —",
  "types.toastCreated": "Тип создан",
  "types.toastDeleted": "Тип удалён",
  "types.pageTitle": "Типы",
  "types.pageSubtitle": "Реестр (source, subject, action). Событие с незарегистрированной тройкой отклоняется с 422",
  "types.createButton": "Тип",
  "types.loading": "Загрузка…",
  "types.empty": "Типов нет — создайте первый",
  "types.colSource": "Source",
  "types.colSubject": "Subject",
  "types.colAction": "Action",
  "types.colCreated": "Создан",
  "types.rowDelete": "Удалить тип",
  "types.createTitle": "Новый тип",
  "types.formSourceLabel": "Источник",
  "types.formSubjectHelp": "Сущность: container, issue, build…",
  "types.formActionHelp": "Что случилось: down, created, resolved…",
  "types.cancel": "Отмена",
  "types.create": "Создать",
  "types.confirmTitle": "Удалить тип?",
  "types.confirmMessage": "Тип ({name}, {subject}, {action}) будет удалён — события такой тройки отклонятся с 422.",
  "types.delete": "Удалить",
  "targets.invalidConfigJson": "Config — не корректный JSON",
  "targets.toastCreated": "Цель создана",
  "targets.toastDeleted": "Цель удалена",
  "targets.title": "Цели",
  "targets.subtitle": "Куда доставлять: TG-чаты, SMTP, s2s-точки. Креды каналов только в .env (gnexus-creds)",
  "targets.createButton": "Цель",
  "targets.loading": "Загрузка…",
  "targets.empty": "Целей нет — например, создайте цель для internal_log",
  "targets.colChannel": "Канал",
  "targets.colName": "Название",
  "targets.colCreatedAt": "Создана",
  "targets.rowDelete": "Удалить цель",
  "targets.modalCreate": "Новая цель",
  "targets.formChannel": "Канал",
  "targets.formName": "Название",
  "targets.formDescription": "Описание",
  "targets.formConfigLabel": "Config (JSON)",
  "targets.nameHelp": "Например infra-alerts",
  "targets.descriptionHelp": "Для чего эта цель (для ИИ-агента и человека)",
  "targets.configHelp": "Для s2s: {\"endpoint\":\"http://…\",\"token_ref\":\"navi-rei\"}; для TG: {\"chat_id\":\"@…\"}",
  "targets.cancel": "Отмена",
  "targets.create": "Создать",
  "targets.confirmTitle": "Удалить цель?",
  "targets.confirmMessage": "Цель «{name}» ({channel}) будет удалена. Ссылки из правил и доставок обнулятся, история останется.",
  "targets.confirmDelete": "Удалить",
  "targetDetail.notFound": "Цель не найдена",
  "targetDetail.invalidConfigJson": "Config — не корректный JSON",
  "targetDetail.toastSaved": "Сохранено",
  "targetDetail.toastEnabled": "Цель включена",
  "targetDetail.toastDisabled": "Цель выключена",
  "targetDetail.toastDeleted": "Цель удалена",
  "targetDetail.hintS2s": "system-to-system: Synapse подписывает и отправляет событие на endpoint цели. Секрет — в .env воркера под именем S2S_SECRET_<TOKEN_REF>.",
  "targetDetail.hintTelegram": "Telegram-канал (#29, пока не реализован). Config хранит идентификатор чата.",
  "targetDetail.hintEmail": "Email-канал (#29, пока не реализован). Config хранит адреса/тему.",
  "targetDetail.hintInternalLog": "Внутренний журнал Synapse: доставка пишется в БД как деградация и аудит.",
  "targetDetail.backLink": "К списку целей",
  "targetDetail.kickerTarget": "Цель",
  "targetDetail.unnamed": "…",
  "targetDetail.enabled": "Включена",
  "targetDetail.disabled": "Выключена",
  "targetDetail.statusOn": "включена",
  "targetDetail.statusOff": "выключена",
  "targetDetail.actions": "Действия",
  "targetDetail.edit": "Редактировать",
  "targetDetail.delete": "Удалить",
  "targetDetail.loading": "Загрузка…",
  "targetDetail.about": "О цели",
  "targetDetail.fieldChannel": "Канал",
  "targetDetail.fieldStatus": "Статус",
  "targetDetail.fieldName": "Название",
  "targetDetail.fieldDescription": "Описание",
  "targetDetail.fieldCreatedAt": "Создана",
  "targetDetail.configTitle": "Config",
  "targetDetail.copy": "Скопировать",
  "targetDetail.configNote": "Идентификаторы точки доставки. Секреты и креды в config не пишутся — только в .env (gnexus-creds).",
  "targetDetail.modalEdit": "Редактировать цель",
  "targetDetail.formName": "Название",
  "targetDetail.nameHelp": "Показывается в правилах и логе доставок",
  "targetDetail.formDescription": "Описание",
  "targetDetail.descriptionHelp": "Для чего эта цель (для ИИ-агента и человека)",
  "targetDetail.formConfigLabel": "Config (JSON)",
  "targetDetail.configExample": "Например: {\"endpoint\":\"http://…\",\"token_ref\":\"navi-rei\"}",
  "targetDetail.credsNote": "Креды в config не пишутся — только .env (gnexus-creds)",
  "targetDetail.cancel": "Отмена",
  "targetDetail.save": "Сохранить",
  "targetDetail.confirmTitle": "Удалить цель?",
  "targetDetail.confirmMessage": "Цель «{name}» будет удалена. Ссылки из правил и доставок обнулятся, история доставок останется.",
  "targetDetail.confirmDelete": "Удалить",
  "rules.weightTip": "Вес определяет порядок применения правил в режиме «первое подошедшее» (ROUTING_MATCH_MODE=first): меньше важнее, срабатывает раньше. В режиме «все» на результат не влияет.",
  "rules.throttleTip": "Шумодав: не чаще одной живой доставки в эту цель за N секунд. Подавленное отмечается статусом skipped, critical проходит всегда.",
  "rules.toastCreated": "Правило создано",
  "rules.toastEnabled": "Правило включено",
  "rules.toastDisabled": "Правило выключено",
  "rules.toastDeleted": "Правило удалено",
  "rules.title": "Правила",
  "rules.subtitle": "Каждое событие прогоняется через правила: совпали условия — создаётся доставка в каналы действия. Шумодав режет повторы, critical проходит всегда",
  "rules.createButton": "Правило",
  "rules.loading": "Загрузка…",
  "rules.emptyText": "Правил нет — событие, не попавшее ни в одно правило, только логируется историей",
  "rules.colName": "Правило",
  "rules.colWeight": "Вес",
  "rules.colThrottle": "Шумодав",
  "rules.colActions": "Действия",
  "rules.actionsTip": "Куда доставить: канал и цель. internal_log без цели пишет журнал Synapse. Условия — на странице правила",
  "rules.colEnabled": "Вкл./выкл.",
  "rules.secondsShort": "с",
  "rules.deleteRule": "Удалить правило",
  "rules.newRuleTitle": "Новое правило",
  "rules.cancel": "Отмена",
  "rules.create": "Создать",
  "rules.deleteTitle": "Удалить правило?",
  "rules.deleteMessage": "Правило «{name}» будет удалено вместе с действиями. История доставок останется.",
  "rules.delete": "Удалить",
  "ruleDetail.condSource": "Источник: имя source из реестра",
  "ruleDetail.condSubjects": "Subject'ы события (любой из)",
  "ruleDetail.condActions": "Action'ы события (любой из)",
  "ruleDetail.condPriorityMin": "Минимальный приоритет (low/normal/high/critical)",
  "ruleDetail.condPayload": "Требования к полям payload (все указанные; значение-список = любой из)",
  "ruleDetail.notFound": "Правило не найдено",
  "ruleDetail.toastEnabled": "Правило включено",
  "ruleDetail.toastDisabled": "Правило выключено",
  "ruleDetail.toastSaved": "Сохранено",
  "ruleDetail.toastDeleted": "Правило удалено",
  "ruleDetail.weightTip": "Вес определяет порядок применения правил в режиме «первое подошедшее» (ROUTING_MATCH_MODE=first): меньше важнее, срабатывает раньше. В режиме «все» на результат не влияет.",
  "ruleDetail.throttleTip": "Шумодав: не чаще одной живой доставки в эту цель за N секунд. Подавленное отмечается статусом skipped, critical проходит всегда.",
  "ruleDetail.backToList": "К списку правил",
  "ruleDetail.kicker": "Synapse · Правило",
  "ruleDetail.noName": "…",
  "ruleDetail.subtitle": "Условия → действия маршрутизации",
  "ruleDetail.enabled": "Включено",
  "ruleDetail.disabled": "Выключено",
  "ruleDetail.actionsLabel": "Действия",
  "ruleDetail.edit": "Редактировать",
  "ruleDetail.delete": "Удалить",
  "ruleDetail.loading": "Загрузка…",
  "ruleDetail.paramsTitle": "Параметры",
  "ruleDetail.statusLabel": "Статус",
  "ruleDetail.stateOn": "включено",
  "ruleDetail.stateOff": "выключено",
  "ruleDetail.weightLabel": "Вес",
  "ruleDetail.throttleLabel": "Шумодав",
  "ruleDetail.createdLabel": "Создано",
  "ruleDetail.secondsShort": "с",
  "ruleDetail.conditionsTitle": "Условия",
  "ruleDetail.conditionsNote": "Событие проходит по правилу, только когда все условия ниже совпали. Здесь нет ни одного — правило подходит к любому событию.",
  "ruleDetail.templateTitle": "Шаблон сообщения",
  "ruleDetail.templateNote1": "Jinja2-текст, который уйдёт в канал:",
  "ruleDetail.templateNote2": "подставит значение из payload события. Если шаблона нет — у действия ниже может быть свой.",
  "ruleDetail.templateEmpty": "— не задан",
  "ruleDetail.actionsTitle": "Действия",
  "ruleDetail.actionsNote": "Когда событие совпало с условиями, для каждого действия создаётся доставка. internal_log пишет в журнал Synapse (аудит и деградация), s2s — подписанную отправку в сервис; каналы telegram/email — #29, пока не работают.",
  "ruleDetail.withoutTarget": "без цели",
  "ruleDetail.actionTemplate": "шаблон действия:",
  "ruleDetail.noTemplate": "шаблон не задан",
  "ruleDetail.editTitle": "Редактировать правило",
  "ruleDetail.cancel": "Отмена",
  "ruleDetail.save": "Сохранить",
  "ruleDetail.deleteTitle": "Удалить правило?",
  "ruleDetail.deleteMessage": "Правило «{name}» будет удалено вместе с действиями. История доставок останется.",
  "ruleForm.priorityAny": "— любая —",
  "ruleForm.weightTip": "Вес определяет порядок применения правил в режиме «первое подошедшее» (ROUTING_MATCH_MODE=first): меньше важнее, срабатывает раньше. В режиме «все» на результат не влияет.",
  "ruleForm.throttleTip": "Шумодав: не чаще одной живой доставки в эту цель за N секунд. Подавленное отмечается статусом skipped, critical проходит всегда.",
  "ruleForm.anySource": "— любой источник —",
  "ruleForm.errName": "Задайте название правила",
  "ruleForm.errPayloadJson": "Требования payload — не корректный JSON",
  "ruleForm.errNoActions": "Добавьте хотя бы одно действие — куда доставлять",
  "ruleForm.nameLabel": "Название",
  "ruleForm.nameHelp": "Как правило подписано в списке, например «контейнеры вниз»",
  "ruleForm.weightLabel": "Вес (weight)",
  "ruleForm.throttleLabel": "Шумодав, сек",
  "ruleForm.conditionsTitle": "Условия",
  "ruleForm.conditionsNote": "Правило применяется к событию, только если все заданные условия совпали. Пустое условие = всегда подходит.",
  "ruleForm.sourceLabel": "Источник",
  "ruleForm.subjectsHelp": "Сущности через запятую: container, build…; пусто = любые",
  "ruleForm.actionsHelp": "Действия события через запятую: down, created…; пусто = любые",
  "ruleForm.payloadLabel": "Требования к payload (JSON)",
  "ruleForm.payloadHelp": "Например {\"host\": [\"melody\",\"pilar\"]} — событие должно нести host melody или pilar; пусто = без требования",
  "ruleForm.actionsTitle": "Действия",
  "ruleForm.actionsNote": "Что делать, когда правило совпало: создать доставку в каждом канале ниже. internal_log без цели — запись в журнал Synapse (аудит); user — личный лог пользователя из payload.user_id; s2s — подписанная отправка в сервис; telegram/email — каналы #29, пока не работают.",
  "ruleForm.tplLabel": "Шаблон по умолчанию (Jinja2)",
  "ruleForm.tplHelp": "{{ payload.поле }} — значение из payload события, например \"Контейнер {{ payload.container }} упал\"; у действия может быть свой шаблон",
  "ruleForm.channelLabel": "Канал",
  "ruleForm.targetLabel": "Цель",
  "ruleForm.noTarget": "— без цели —",
  "ruleForm.removeAction": "Убрать действие",
  "ruleForm.addAction": "Действие",
  "ruleForm.errTitle": "Ошибка формы",
  "settings.title": "Настройки",
  "settings.subtitleAdmin": "Личная подписка на пуши и конфигурация Synapse (перебивает дефолты .env)",
  "settings.subtitleUser": "Личное: подписка на push-уведомления этого браузера",
  "settings.loading": "Загрузка…",
  "settings.toastDeviceRemoved": "Подписка удалена",
  "settings.toastNotConfigured": "Пуши ещё не настроены — админ задаст VAPID-ключи в настройках",
  "settings.toastPermissionDenied": "Браузеру запрещены уведомления для этого сайта — включите в настройках сайта",
  "settings.toastPushEnabled": "Пуши включены",
  "settings.toastPushDisabled": "Пуши выключены",
  "settings.toastSaved": "Настройки сохранены",
  "settings.sectionRouting": "Маршрутизация",
  "settings.sectionPush": "Web Push",
  "settings.sectionTelegram": "Telegram",
  "settings.sectionSmtp": "Email · SMTP",
  "settings.deviceTip": "Устройство, подписанное на ваши пуши (одна строка — один браузер). Удалите строку, если устройства больше нет.",
  "settings.pushTitle": "Push-уведомления этого браузера",
  "settings.pushUnsupportedTitle": "Пуши недоступны",
  "settings.pushUnsupportedText": "Браузер не поддерживает web-push (нужны Service Worker и Notification API; на http-странице — только https/localhost).",
  "settings.pushNotConfiguredTitle": "Сервер ещё не настроен",
  "settings.pushNotConfiguredText": "Админ не задал VAPID-ключи — включите после настройки (админ: Настройки → Web Push).",
  "settings.permissionDeniedNote": "Разрешение на уведомления запрещено — включите его в настройках сайта браузера.",
  "settings.permissionUnsupportedNote": "Браузер не умеет web-push.",
  "settings.pushSwitchLabel": "Получать пуши от Synapse",
  "settings.pushActiveNote": "Подписка этого браузера активна",
  "settings.pushInactiveNote": "События с адресатом именно вам (payload.user_id) будут открываться как системные уведомления",
  "settings.removeDeviceLabel": "Удалить подписку",
  "settings.secretSetPlaceholder": "••••• задано — оставить пустым, чтобы не менять",
  "settings.notSetPlaceholder": "не задано",
  "settings.writeOnlyHelp": "write-only: {text}",
  "settings.overrideButton": "Перебить дефолт",
  "settings.overrideHint": "Значения отсюда перекрывают .env на ходу — контейнер перезапускать не нужно",
  "mcpKeys.title": "MCP-ключи",
  "mcpKeys.subtitle": "Личные токены доступа к MCP-серверу Synapse: агент с ключом действует вашей ролью",
  "mcpKeys.loading": "Загрузка…",
  "mcpKeys.myKeys": "Мои ключи",
  "mcpKeys.tokenWord": "Токен",
  "mcpKeys.myKeysNote": "показывается один раз при выпуске — в Synapse хранится только sha256-хэш. Действует ролью владельца на момент выпуска: после смены роли выпустите ключ заново, а старый отзовите. Одновременно активно до 10 ключей.",
  "mcpKeys.namePlaceholder": "Имя ключа: «агент Navi rei»",
  "mcpKeys.generate": "Сгенерировать ключ",
  "mcpKeys.defaultName": "ключ",
  "mcpKeys.toastRevoked": "Ключ отозван",
  "mcpKeys.emptyOwn": "Ключей нет — сгенерируйте первый и отдайте его своему ИИ-агенту",
  "mcpKeys.colKey": "Ключ",
  "mcpKeys.colTail": "Хвост",
  "mcpKeys.colRole": "Роль",
  "mcpKeys.colCreated": "Создан",
  "mcpKeys.colCreatedTip": "Момент выпуска ключа",
  "mcpKeys.colUsed": "Использован",
  "mcpKeys.colUsedTip": "Последний MCP-запрос с этим ключом",
  "mcpKeys.colStatus": "Статус",
  "mcpKeys.badgeRevoked": "отозван",
  "mcpKeys.badgeActive": "активен",
  "mcpKeys.revoke": "Отозвать",
  "mcpKeys.howToConnect": "Как подключить агент",
  "mcpKeys.connectNoteBefore": "Клиенту MCP (Claude Code, IDE и др.) нужен URL эндпоинта",
  "mcpKeys.connectNoteAfter": "этого Synapse и Bearer-ключ из выпуска: тот, кто получил ключ, действует ролью владельца (админ-тулы — только ролей admin+).",
  "mcpKeys.copyConfig": "Скопировать конфиг",
  "mcpKeys.allKeysAdmin": "Все ключи (админ)",
  "mcpKeys.allKeysNote": "Выпуск — самопользовательский (каждый на своей странице /mcp-keys); здесь — обзор всех и отзыв, например после смены роли пользователя на gnexus-auth.",
  "mcpKeys.emptyAll": "Персональных ключей пока нет — они появятся, когда пользователи выпустят себе их",
  "mcpKeys.colOwner": "Владелец",
  "mcpKeys.modalTitle": "Токен — показывается один раз",
  "mcpKeys.modalAlert": "Настройте агент сейчас: в Synapse хранится только sha256-хэш, токен больше не будет показан.",
  "mcpKeys.copy": "Скопировать",
  "mcpKeys.done": "Готово",
  "mcpKeys.revokeConfirmTitle": "Отозвать чужой ключ?",
  "mcpKeys.revokeConfirmMessage": "Ключ «{name}» ({owner}) перестанет работать у его агента. Пользователь выпустит себе новый по необходимости.",
  "mcpKeys.cancel": "Отмена",
  'push.unsupported': 'Браузер не поддерживает web-push',
  'push.swNotReady': 'Service worker ещё не готов (обновите страницу)',
};