// Словарь 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 ещё не готов (обновите страницу)',
};