vojo/apps/widget-discord/src/i18n/ru.ts

132 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Russian primary copy. To add a string:
// 1. add the key + RU value here (this file is the canonical key list — `en.ts`
// and the `StringKey` type derive from it),
// 2. add the same key + EN value in `en.ts`,
// 3. consume via `t('key', { var: 'x' })` in components.
// Interpolation uses `{name}` placeholders resolved against the second arg.
//
// The widget no longer renders a hero (avatar/name/handle/description) —
// that block lives in the host's BotShellHero. Status is surfaced inline
// inside the relevant section.
export const RU = {
// --- Inline section status ---------------------------------------------
'status.unknown': 'Проверка статуса…',
'status.disconnected': 'Discord не привязан',
'status.connected': 'Discord привязан',
'status.connected-as': 'Discord привязан как {handle}',
'status.connection-dead': 'Соединение с Discord потеряно',
'status.token-stored': 'Сессия Discord не активна',
'status.qr-verifying': 'Проверяем вход…',
'status.logging-out': 'Завершение сеанса…',
'status.reconnecting': 'Переподключаюсь к Discord…',
// --- Section headers ---------------------------------------------------
'card.login-qr.name': 'Войти по QR-коду',
// Discord QR требует МОБИЛЬНОЕ приложение Discord (legacy remoteauth
// не работает с десктопным клиентом) — это важная подсказка, чтобы у
// пользователя без мобильного клиента не возникло тупика «попробовал
// и не работает».
'card.login-qr.desc': 'Отсканировать QR из мобильного приложения Discord',
'card.refresh.aria': 'Обновить статус',
'card.refresh.label': 'Обновить статус',
'card.refresh.name': 'Обновить статус',
'card.refresh.desc': 'Перепроверить, привязан ли Discord',
'card.refresh.in-flight': 'Проверяю…',
// --- About panel -------------------------------------------------------
'card.about.name': 'Как работает Discord-бот',
'card.about.desc': 'Вход, безопасность и исходный код',
'about.title': 'О боте Discord',
'about.body-1':
'Этот бот подключает Discord к Vojo. После входа личные чаты и серверы Discord появятся в списке чатов Vojo, а ответы из приложения Vojo будут отправляться собеседникам как обычные сообщения в Discord.',
'about.body-2':
'Для входа нужен мобильный клиент Discord — отсканируйте QR-код через «Настройки → Сканировать QR-код». Десктопный Discord или браузер для входа не подходят: используется механизм remoteauth, который доступен только в мобильном приложении.',
'about.body-3':
'Подключение работает через open-source мост mautrix-discord. Он создаёт Discord-сессию на сервере Vojo и использует её для связи Discord с вашим аккаунтом Vojo: получает сообщения из Discord и отправляет ваши ответы обратно.',
'about.github-label': 'Исходный код моста открыт на GitHub:',
'about.github-url': 'https://github.com/mautrix/discord',
'about.body-4':
'Отозвать доступ можно в любой момент — кнопкой «Выйти из Discord» здесь, либо в самом Discord через «Настройки → Устройства → Выйти из Vojo».',
'about.close': 'Закрыть',
'about.aria-close': 'Закрыть «О боте»',
// --- QR form -----------------------------------------------------------
// Discord QR не ротируется в отличие от Telegram MTProto — мост держит
// одну сессию remoteauth до успеха, ошибки или таймаута. Поэтому в
// тексте говорим про «отсканируйте этот QR-код», без указаний на
// обновление, и таймаут показываем «всего окна» одной строкой.
'auth-card.qr.title': 'Вход по QR-коду',
'auth-card.qr.hint': 'Откройте мобильный Discord и отсканируйте этот QR-код.',
'auth-card.qr.preparing': 'Готовим QR-код…',
'auth-card.qr.aria': 'QR-код для входа в Discord. Отсканируйте его телефоном.',
'auth-card.qr.countdown': 'На сканирование осталось {minutes}:{seconds}',
'auth-card.qr.expired': 'Окно входа истекло. Нажмите «Отмена» и попробуйте снова.',
'auth-card.qr.step-1': 'Откройте мобильное приложение Discord.',
'auth-card.qr.step-2': 'Откройте «Настройки → Сканировать QR-код».',
'auth-card.qr.step-3': 'Отсканируйте QR-код и подтвердите вход на телефоне.',
// --- hCaptcha challenge -----------------------------------------------
// Discord иногда требует решить hCaptcha перед завершением remoteauth —
// anti-abuse-сигнал, не зависящий от конкретного юзера. Vojo-патч
// отдаёт челлендж сюда в виджет; пользователь решает, токен уходит
// обратно на мост и логин завершается. Текст не упоминает «бан»: это
// обычный механизм Discord, а не санкция.
'auth-card.captcha.title': 'Подтвердите, что вы не робот',
'auth-card.captcha.hint':
'Discord попросил решить капчу. Решите её ниже — после этого вход продолжится автоматически.',
'auth-card.captcha.load-error':
'Не удалось загрузить капчу. Проверьте сеть и нажмите «Отмена», затем войдите снова.',
// --- Shared form chrome ------------------------------------------------
// Cancel в Discord-flow ЛОКАЛЬНЫЙ: legacy-мост не имеет команды отмены
// активного login-qr, поэтому кнопка просто возвращает виджет в
// disconnected, а серверная сторона сама истекает по таймауту remoteauth
// (~2 минуты по умолчанию). Это написано в about.body-2, и пользователь,
// увидев «Окно входа истекло», понимает, что стало с QR.
'auth-card.cancel': 'Отмена',
'auth-card.waiting-hint': 'Бот ещё думает… ответ может идти до 30 секунд.',
// --- Inline errors -----------------------------------------------------
'auth-error.captcha-required':
'Discord потребовал CAPTCHA — вход через QR временно недоступен. Попробуйте позже или войдите через токен в чате с ботом.',
'auth-error.captcha-send-failed':
'Не удалось отправить ответ на CAPTCHA. Проверьте сеть и попробуйте войти заново.',
'auth-error.captcha-expired': 'CAPTCHA устарела — нажмите «Войти по QR-коду» и решите её заново.',
'auth-error.login-failed': 'Не удалось войти: {reason}',
'auth-error.prepare-failed': 'Не удалось подготовить вход: {reason}',
'auth-error.websocket-failed': 'Не удалось подключиться к серверу входа: {reason}',
'auth-error.connect-after-login-failed':
'Вход прошёл, но соединиться с Discord не получилось: {reason}',
'auth-error.already-logged-in': 'Вы уже вошли в Discord — обновите статус.',
'auth-error.unknown-command': 'Бот не знает эту команду — проверьте префикс в config.json.',
'auth-error.disconnect-failed': 'Не удалось отключиться: {reason}',
// --- Logout / Reconnect ------------------------------------------------
// Reconnect-action нужен только в connection_dead / token_stored —
// здоровая сессия не показывает кнопку. Текст глагольный, без префиксов.
'card.reconnect.name': 'Переподключиться',
'card.reconnect.desc': 'Восстановить соединение с Discord без повторного входа',
'card.logout.name': 'Выйти из Discord',
'card.logout.desc': 'Завершить сеанс на этом аккаунте',
'card.logout.confirm-prompt': 'Точно выйти?',
'card.logout.confirm-yes': 'Выйти',
'card.logout.confirm-no': 'Отмена',
// --- Open Discord space (Vojo bridge sentinel) ------------------------
'card.open-space.name': 'Открыть в Каналах',
'card.open-space.desc': 'Перейти в спейс Discord со списком чатов и серверов',
// --- Diagnostics in transcript ----------------------------------------
'diag.space-ready': 'Discord-спейс готов к открытию.',
'diag.connecting': 'Соединение с Vojo… ожидаем capability handshake.',
'diag.ready': 'Готов отправлять команды.',
'diag.checking-status': 'Проверяю статус подключения…',
'diag.send-failed': 'ошибка отправки: {message}',
'diag.history-marker': '─── история ───',
'diag.history-unavailable': 'Не удалось прочитать историю — проверяю статус заново.',
// QR-сообщения никогда не выводятся целиком в transcript — body содержит
// токен `https://discord.com/ra/…`, который мост стирает после скана;
// сохранять его в DOM-логе виджета означало бы пережить эту защиту.
// Поэтому в логе только нейтральные диагностические строки.
'diag.qr-issued': 'QR-код выдан.',
'diag.qr-consumed': 'QR-код использован — мост подтверждает скан.',
'diag.captcha-issued': 'Discord прислал CAPTCHA — решите её на форме выше.',
// --- Bootstrap failure -------------------------------------------------
'bootstrap.failed': 'Widget не запустился',
'bootstrap.missing-params': 'Отсутствуют обязательные параметры URL: {names}.',
'bootstrap.embedded-only': 'Эта страница предназначена для встраивания Vojo по маршруту {route}.',
} as const;
export type StringKey = keyof typeof RU;