// 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. export const RU = { // --- Status pill --------------------------------------------------------- 'status.checking': 'Проверка статуса…', 'status.disconnected': 'WhatsApp не привязан', 'status.connected-as': 'Привязан как {handle}', // --- Action cards ---------------------------------------------------------- // User flow по сути такой же, как в Telegram: сабмит номера → код. Отличие: // в TG код вводится в виджет, в WA — в само приложение WhatsApp. Имя кнопки // одинаковое для consistency между виджетами. 'card.login.name': 'Войти по номеру', 'card.login.desc': 'Ввести номер и получить 8-символьный код для WhatsApp', 'card.login-qr.name': 'Войти по QR-коду', 'card.login-qr.desc': 'Отсканировать QR из мобильного приложения WhatsApp', 'card.refresh.name': 'Обновить статус', 'card.refresh.desc': 'Перепроверить, привязан ли WhatsApp', 'card.refresh.in-flight': 'Проверяю…', 'card.logout.name': 'Выйти из WhatsApp', 'card.logout.desc': 'Завершить сеанс на этом аккаунте', 'card.logout.confirm-prompt': 'Точно выйти?', 'card.logout.confirm-yes': 'Выйти', 'card.logout.confirm-no': 'Отмена', // --- About panel ----------------------------------------------------------- // WhatsApp-only Meta-ToS risk disclosure is folded into the About modal as // an amber callout at the top of the body. The About card itself carries // `command-card warn` (amber border + amber name) and a triangle warning // glyph in the lead slot — instead of the info-circle TG / Discord use — // so the «риски» half of the hybrid description («о работе и рисках») is // visible at a glance before the user opens the modal. TG / Discord get // the plain «вход, безопасность, исходный код» variant because they don't // carry an account-loss risk in the same way (Telegram user ToS doesn't // forbid third-party clients; Discord's restriction on self-bots lives in // developer policies, not user ToS proper). // // ToS reference for the body: https://www.whatsapp.com/legal/terms-of-service // section «Harm To WhatsApp Or Our Users» forbids «software or APIs that // function substantially the same as our Services» and «accounts for our // Services through unauthorized or automated means». 'card.about.name': 'Как работает WhatsApp-бот', 'card.about.desc': 'Информация о работе и рисках — нажмите, чтобы прочесть', 'warning.title': 'Важно знать до подключения WhatsApp', 'warning.body-1': 'Mautrix-whatsapp подключает ваш аккаунт через тот же механизм связанных устройств, что и WhatsApp Web. Технически это стандартный API — но в отличие от других мессенджеров, условия использования WhatsApp прямо запрещают подключение через сторонние клиенты, и Meta может заблокировать аккаунт за это.', // Источник про запрет в ToS — даём юзеру возможность дойти до оригинала // самому, не доверять нам на слово. Кликается потому что host-side iframe // sandbox получил allow-popups (см. src/app/features/bots/BotWidgetEmbed.ts). 'warning.tos-label': 'Условия использования WhatsApp:', 'warning.tos-url': 'https://www.whatsapp.com/legal/terms-of-service', 'about.title': 'О боте WhatsApp', 'about.body-1': 'Этот бот подключает WhatsApp к Vojo. После входа личные чаты и группы из WhatsApp появятся в списке чатов Vojo, а ответы из приложения Vojo будут отправляться собеседникам как обычные сообщения в WhatsApp.', 'about.body-2': 'Для входа нужно мобильное приложение WhatsApp на телефоне с активным аккаунтом. Можно либо отсканировать QR-код через «Настройки → Связанные устройства → Привязка устройства», либо ввести 8-символьный код через «Настройки → Связанные устройства → Связать по номеру телефона».', 'about.body-3': 'Подключение работает через open-source мост mautrix-whatsapp. Он создаёт WhatsApp-сессию на сервере Vojo и использует её для связи WhatsApp с вашим аккаунтом Vojo: получает сообщения из WhatsApp и отправляет ваши ответы обратно. WhatsApp-аккаунт продолжит работать на телефоне как обычно — мост подключается параллельно, как ещё одно связанное устройство.', 'about.github-label': 'Исходный код моста открыт на GitHub:', 'about.github-url': 'https://github.com/mautrix/whatsapp', 'about.body-4': 'Отозвать доступ можно в любой момент — кнопкой «Выйти из WhatsApp» здесь, либо в самом WhatsApp через «Настройки → Связанные устройства → Выйти со всех устройств».', 'about.close': 'Закрыть', 'about.aria-close': 'Закрыть «О боте»', // --- Phone form (pairing-code flow) ----------------------------------------- 'auth-card.phone.title': 'Вход по номеру телефона', 'auth-card.phone.label': 'Номер телефона', 'auth-card.phone.placeholder': '+79991234567', // Подсказка, объясняющая что произойдёт после сабмита: мост создаст // 8-символьный код, который надо ввести в WhatsApp app. Пользователь // должен понимать, что код не SMS-OTP, а pairing-token. 'auth-card.phone.hint': 'Введите номер с кодом страны. После этого WhatsApp создаст 8-символьный код — его нужно будет ввести в приложении.', 'auth-card.phone.submit': 'Получить код', 'auth-card.phone.cooldown': 'Повтор через {seconds} сек', 'auth-card.phone.invalid': 'Похоже, номер ещё не полный или введён с ошибкой.', // --- Pairing-code panel -------------------------------------------------- 'auth-card.pairing-code.title': 'Введите этот код в WhatsApp', 'auth-card.pairing-code.hint': 'Откройте WhatsApp на телефоне и введите этот код в форме «Связанные устройства → Связать по номеру телефона».', 'auth-card.pairing-code.aria': 'Код для входа в WhatsApp. Введите его в приложении на телефоне.', 'auth-card.pairing-code.countdown': 'На ввод осталось {minutes}:{seconds}', 'auth-card.pairing-code.expired': 'Окно входа истекло. Нажмите «Отмена» и попробуйте снова.', 'auth-card.pairing-code.step-1': 'Откройте WhatsApp на телефоне.', 'auth-card.pairing-code.step-2': 'Перейдите в «Настройки → Связанные устройства».', 'auth-card.pairing-code.step-3': 'Нажмите «Привязка устройства», затем «Связать по номеру телефона».', 'auth-card.pairing-code.step-4': 'Введите этот код и подтвердите вход на телефоне.', 'auth-card.pairing-code.copy': 'Скопировать код', 'auth-card.pairing-code.copied': 'Скопировано', // --- Shared form chrome ------------------------------------------------ 'auth-card.cancel': 'Отмена', 'auth-card.waiting-hint': 'Мост ещё думает… ответ может идти до 30 секунд.', // --- QR panel ------------------------------------------------------------ 'auth-card.qr.title': 'Вход по QR-коду', 'auth-card.qr.hint': 'Откройте WhatsApp на телефоне и отсканируйте этот QR-код.', 'auth-card.qr.preparing': 'Готовим QR-код…', 'auth-card.qr.aria': 'QR-код для входа в WhatsApp. Отсканируйте его телефоном.', // Обратный отсчёт до серверного таймаута. Whatsmeow ротирует QR по // расписанию 60 с + 5 × 20 с = 2 мин 40 с активного окна. Сам QR в панели // всегда свежий (long-poll приносит новый на каждой ротации), отсчёт // показывает оставшееся окно ВСЕГО входа. 'auth-card.qr.countdown': 'На сканирование осталось {minutes}:{seconds}', 'auth-card.qr.expired': 'Окно входа истекло. Нажмите «Отмена» и попробуйте снова.', 'auth-card.qr.step-1': 'Откройте WhatsApp на телефоне.', 'auth-card.qr.step-2': 'Перейдите в «Настройки → Связанные устройства».', 'auth-card.qr.step-3': 'Нажмите «Привязка устройства» и отсканируйте QR-код.', // --- Global errors / notices --------------------------------------------- 'error.network': 'Нет связи с сервером. Проверьте интернет и попробуйте ещё раз.', 'error.auth': 'Не удалось подтвердить ваш аккаунт у моста. Обновите страницу; если не помогает — попробуйте позже.', 'error.not-logged-in': 'Сессия WhatsApp больше не активна. Вернитесь назад и привяжите аккаунт заново.', 'error.openid-blocked': 'Хост не выдал виджету разрешение на вход — в config.json у бота нет capability vojo.openid.', 'error.rate-limited': 'WhatsApp просит подождать: слишком много запросов кода. Попробуйте позже.', 'error.phone-invalid': 'WhatsApp не принял этот номер. Укажите его в международном формате и попробуйте снова.', 'error.multidevice': 'На телефоне не включён мультиустройственный режим WhatsApp. Обновите приложение WhatsApp и попробуйте снова.', 'error.client-outdated': 'Мост устарел, и WhatsApp отказывает ему в подключении. Сообщите администратору Vojo.', 'error.pair-failed': 'WhatsApp не подтвердил привязку. Начните вход заново.', 'error.login-timeout': 'Время входа истекло. Начните вход заново.', 'error.login-restart': 'Сессия входа потерялась. Начните вход заново.', 'error.too-many-logins': 'Достигнут лимит привязанных аккаунтов. Сначала выйдите из текущего.', 'error.generic': 'Что-то пошло не так: {reason}', 'notice.login-success': 'WhatsApp привязан! Чаты появятся в списке в течение минуты.', 'notice.logged-out': 'Сеанс WhatsApp завершён.', // --- Contacts ------------------------------------------------------------ 'card.contacts.name': 'Контакты', 'card.contacts.desc': 'Записная книжка WhatsApp: поиск по имени или номеру', 'contacts.back': 'Назад', 'contacts.search-placeholder': 'Имя или +номер…', 'contacts.hint': 'Это контакты вашей записной книжки WhatsApp. Выберите, с кем начать чат в Vojo, — остальные никуда не денутся.', 'contacts.loading': 'Загружаем контакты…', 'contacts.error': 'Не удалось загрузить контакты.', 'contacts.retry': 'Повторить', 'contacts.empty': 'В записной книжке WhatsApp пока пусто.', 'contacts.empty-filtered': 'Никого не нашли с таким именем.', 'contacts.start-chat': 'Начать чат', 'contacts.open-chat': 'Открыть чат', 'contacts.creating': 'Создаём чат…', 'contacts.opening': 'Открываем…', 'contacts.probe-check': 'Проверить {handle} в WhatsApp', 'contacts.probe-checking': 'Проверяем {handle}…', 'contacts.probe-not-found': '{handle} не найден в WhatsApp.', 'contacts.probe-found': 'Есть такой! Можно написать.', 'contacts.probe-self': 'Это ваш собственный номер.', 'contacts.refresh': 'Обновить список', // --- Account tab ----------------------------------------------------------- 'account.state-bad': 'Мост сообщает о проблеме с подключением: {reason}. Попробуйте выйти и привязать WhatsApp заново.', // TRANSIENT_DISCONNECT — телефон давно не в сети / keepalive потерян // (connector phoneping.go). Обычно чинится само, перепривязка не нужна. 'account.state-transient': 'Мост временно потерял связь с WhatsApp. Проверьте, что телефон в сети, — обычно подключение восстанавливается само.', // --- Boot / config --------------------------------------------------------- 'boot.connecting': 'Подключение к мосту…', 'config.missing.title': 'Нужна настройка на сервере', 'config.missing.body': 'Виджет работает через API моста, но его адрес не задан в конфигурации (experience.provisioningUrl в config.json) или не выдано разрешение vojo.openid.', 'error.retry': 'Повторить', // --- Bootstrap failure ------------------------------------------------- 'bootstrap.failed': 'Виджет не запустился', 'bootstrap.missing-params': 'Отсутствуют обязательные параметры URL: {names}.', 'bootstrap.embedded-only': 'Эта страница предназначена для встраивания Vojo по маршруту {route}.', } as const; export type StringKey = keyof typeof RU;