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

185 lines
16 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.
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;