The palette lived as ~620 hex literals in inline styles plus a few hundred more in
the stylesheets, so there was no single thing to change. It is now 113 custom
properties in src/styles/theme.css, in two blocks.
src/scripts/theme-boot.js decides the theme before first paint — blocking, in <head>,
above the stylesheet, because a deferred script paints dark first and corrects itself.
It stores the mode ('system' | 'light' | 'dark'), never the colour it resolved to, and
stamps data-theme so an explicit choice can beat the media query. The switcher in the
header is a view onto it.
A filled accent stays the brand colour in both themes — the ink on it is near-black
either way — while an accent used as text darkens to clear 4.5:1 on white. A colour
reaches a fill by four routes (a style property, a constant, a helper argument, an SVG
source string), and tests/theme-switching.test.mjs covers all four.
The dark theme is unchanged: every colour declaration the previous build produced comes
out of this one identically once the properties are resolved.
Also: the roadmap drops its status chips on mobile, and Roadmap.jsx no longer splits a
colour with parseInt at runtime, which a var() reference cannot survive.
893 lines
74 KiB
JSON
893 lines
74 KiB
JSON
{
|
||
"htmlLang": "ru",
|
||
"ogLocale": "ru_RU",
|
||
"dir": "ltr",
|
||
"nativeName": "Русский",
|
||
"abbr": "RU",
|
||
"meta": {
|
||
"title": "SecureBit.chat - мессенджер со сквозным шифрованием",
|
||
"description": "Бесплатный P2P-мессенджер со сквозным шифрованием прямо в браузере. Без учётных записей и без серверов, хранящих ваши сообщения.",
|
||
"ogTitle": "SecureBit.chat - одноранговый чат со сквозным шифрованием",
|
||
"ogDescription": "Защищённый мессенджер, работающий целиком в вашем браузере. Без учётных записей и без серверов, хранящих ваши сообщения. Подключайте свои STUN/TURN-серверы - мы ничего не навязываем.",
|
||
"ogImageAlt": "SecureBit.chat - одноранговый чат со сквозным шифрованием",
|
||
"twitterTitle": "SecureBit.chat - одноранговый чат со сквозным шифрованием",
|
||
"twitterDescription": "Защищённый мессенджер, работающий целиком в вашем браузере. Без учётных записей и без серверов, хранящих ваши сообщения.",
|
||
"twitterImageAlt": "SecureBit.chat - одноранговый чат со сквозным шифрованием"
|
||
},
|
||
"schema": {
|
||
"siteDescription": "Одноранговый чат со сквозным шифрованием, работающий целиком в браузере.",
|
||
"appDescription": "Бесплатный одноранговый мессенджер со сквозным шифрованием. Без учётных записей и без серверов, хранящих сообщения: ECDH P-384, AES-256-GCM и личная сверка SAS.",
|
||
"operatingSystem": "Любая (современный веб-браузер)",
|
||
"browserRequirements": "Требуются WebRTC и Web Crypto API",
|
||
"featureList": [
|
||
"Сквозное шифрование (ECDH P-384, AES-256-GCM)",
|
||
"Одноранговое соединение по WebRTC, без серверов для сообщений",
|
||
"Личная сверка SAS против атак «человек посередине»",
|
||
"Свои STUN/TURN-серверы и режим приватности только через relay",
|
||
"Зашифрованная передача файлов",
|
||
"Устанавливаемое прогрессивное веб-приложение с работой офлайн"
|
||
]
|
||
},
|
||
"manifest": {
|
||
"name": "SecureBit.chat - приватный мессенджер со сквозным шифрованием",
|
||
"short_name": "SecureBit",
|
||
"description": "P2P-мессенджер с защитой ECDH, DTLS и SAS и криптографией военного уровня"
|
||
},
|
||
"ui": {
|
||
"language.label": "Язык",
|
||
"language.suggest.text": "Эта страница также доступна на русском.",
|
||
"language.suggest.cta": "Читать по-русски",
|
||
"language.suggest.dismiss": "Закрыть",
|
||
"theme.label": "Тема",
|
||
"theme.system": "Системная",
|
||
"theme.light": "Светлая",
|
||
"theme.dark": "Тёмная",
|
||
"community.title": "Присоединяйтесь к будущему приватности",
|
||
"community.description": "SecureBit растёт благодаря сообществу. Ваши идеи и отзывы формируют будущее защищённого общения - разработка ведётся открыто, с полной проверкой ASN.1 на всём пути.",
|
||
"community.github": "Репозиторий на GitHub",
|
||
"community.feedback": "Обратная связь",
|
||
"unique.eyebrow": "Чем мы отличаемся",
|
||
"unique.heading": "Почему SecureBit особенный",
|
||
"unique.s1.titleTop": "Многослойное",
|
||
"unique.s1.titleBottom": "ядро шифрования",
|
||
"unique.s1.collapsed": "Ядро шифрования",
|
||
"unique.s1.desc": "Обмен ключами ECDH P-384, полезная нагрузка в AES-256-GCM, подписи ECDSA и полная проверка ASN.1 - собранные в один укреплённый конвейер.",
|
||
"unique.s1.tags": [
|
||
"ECDH P-384",
|
||
"AES-256-GCM",
|
||
"ECDSA",
|
||
"ASN.1"
|
||
],
|
||
"unique.s2.titleTop": "Чистый P2P",
|
||
"unique.s2.titleBottom": "через WebRTC",
|
||
"unique.s2.collapsed": "Чистый P2P через WebRTC",
|
||
"unique.s2.desc": "Сообщения идут напрямую между устройствами по WebRTC. Никакой relay не держит ваши данные - сервер лишь помогает двум участникам найти друг друга.",
|
||
"unique.s2.tags": [
|
||
"DTLS 1.3",
|
||
"Без relay"
|
||
],
|
||
"unique.s3.titleTop": "Совершенная",
|
||
"unique.s3.titleBottom": "прямая секретность",
|
||
"unique.s3.collapsed": "Прямая секретность",
|
||
"unique.s3.desc": "Сеансовые ключи меняются непрерывно и отбрасываются после использования, поэтому один скомпрометированный ключ никогда не откроет прошлые разговоры.",
|
||
"unique.s3.tags": [
|
||
"Эфемерные ключи",
|
||
"Автоматическая смена"
|
||
],
|
||
"unique.s4.titleTop": "Маскировка",
|
||
"unique.s4.titleBottom": "трафика",
|
||
"unique.s4.collapsed": "Маскировка трафика",
|
||
"unique.s4.desc": "Размеры пакетов и паузы между ними дополняются и рандомизируются, поэтому метаданные не складываются в узнаваемый рисунок даже для того, кто следит за каналом.",
|
||
"unique.s4.tags": [
|
||
"Дополнение пакетов",
|
||
"Разброс во времени"
|
||
],
|
||
"unique.s5.titleTop": "Никакого",
|
||
"unique.s5.titleBottom": "сбора данных",
|
||
"unique.s5.collapsed": "Никакого сбора данных",
|
||
"unique.s5.desc": "Без учётных записей, без журналов, без хранения сообщений. На сервере нет ничего, что можно утечь, изъять по запросу или продать.",
|
||
"unique.s5.tags": [
|
||
"Без учётных записей",
|
||
"Без журналов"
|
||
],
|
||
"partners.eyebrow": "Партнёры и экосистема",
|
||
"partners.heading": "Нам доверяют наши партнёры",
|
||
"partners.aegis.desc": "Инвестиционный партнёр, защищающий конфиденциальные финансовые коммуникации во всём своём портфеле.",
|
||
"partners.aegis.role": "Стратегический инвестор",
|
||
"partners.furilabs.desc": "Linux-телефоны с приоритетом приватности, поставляющие SecureBit как защищённый канал по умолчанию.",
|
||
"partners.furilabs.role": "Технологический партнёр",
|
||
"partners.inviteTitle": "Стать партнёром",
|
||
"partners.inviteDesc": "Создаёте оборудование или инфраструктуру для приватности? Давайте интегрируем SecureBit.",
|
||
"partners.inviteCta": "Начать разговор",
|
||
"roadmap.eyebrow": "Дорожная карта",
|
||
"roadmap.heading": "Как развивался SecureBit",
|
||
"roadmap.subheading": "От первого прототипа до децентрализованной сети, устойчивой к квантовым вычислениям, с полной проверкой ASN.1 на каждом уровне.",
|
||
"roadmap.progress": "Пройдено {shipped} из {total} этапов",
|
||
"roadmap.upcoming": "{upcoming} впереди",
|
||
"roadmap.keyFeatures": "Ключевые возможности",
|
||
"roadmap.status.released": "Выпущено",
|
||
"roadmap.status.current": "Текущий",
|
||
"roadmap.status.dev": "В разработке",
|
||
"roadmap.status.planned": "Запланировано",
|
||
"roadmap.status.research": "Исследование",
|
||
"hero.headlineTop": "Прямая линия,",
|
||
"hero.headlineBottom": "которую прочитаете только вы двое.",
|
||
"hero.subheading": "Ключи создаются на вашем устройстве и передаются напрямую между участниками. Без учётных записей и без серверов, хранящих ваши сообщения.",
|
||
"hero.diagramAlt": "Прямая зашифрованная линия к одному участнику, к которой присоединяются ещё двое",
|
||
"intro.createTitle": "Создать новый канал",
|
||
"intro.createDesc": "Ваше устройство создаёт ключи и одноразовое приглашение. Ничто из этого не попадает на сервер.",
|
||
"intro.createCta": "Создать ключи и приглашение",
|
||
"intro.joinTitle": "Присоединиться к каналу",
|
||
"intro.scanTitle": "Сканировать QR камерой",
|
||
"intro.scanSubtitle": "Быстрее всего - наведите на экран собеседника",
|
||
"intro.orPasteCode": "или вставьте код",
|
||
"intro.pastePlaceholder": "Вставьте код приглашения сюда…",
|
||
"intro.connect": "Соединиться",
|
||
"intro.connecting": "Обработка…",
|
||
"roadmap.r1.title": "Начало разработки",
|
||
"roadmap.r1.sub": "Идея, прототип и настройка инфраструктуры",
|
||
"roadmap.r1.date": "Начало 2025",
|
||
"roadmap.r1.features": [
|
||
"Формирование концепции и требований",
|
||
"Выбор стека: WebRTC, P2P, криптография",
|
||
"Первые прототипы обмена сообщениями",
|
||
"Создание репозитория и CI",
|
||
"Базовая архитектура шифрования",
|
||
"Дизайн UX/UI"
|
||
],
|
||
"roadmap.r2.title": "Альфа-версия",
|
||
"roadmap.r2.sub": "Первая публичная альфа: базовый чат и обмен ключами",
|
||
"roadmap.r2.date": "Весна 2025",
|
||
"roadmap.r2.features": [
|
||
"Базовый обмен сообщениями P2P через WebRTC",
|
||
"Простое сквозное шифрование (демонстрационная схема)",
|
||
"Стабильный сигналинг и переподключение",
|
||
"Минимальный интерфейс для тестирования",
|
||
"Сбор отзывов от первых тестировщиков"
|
||
],
|
||
"roadmap.r3.title": "Усиленная защита",
|
||
"roadmap.r3.sub": "Укрепление безопасности и выпуск стабильной ветки",
|
||
"roadmap.r3.date": "Лето 2025",
|
||
"roadmap.r3.features": [
|
||
"ECDH/ECDSA в промышленной эксплуатации",
|
||
"Прямая секретность и смена ключей",
|
||
"Улучшенные проверки аутентификации",
|
||
"Шифрование файлов и передача больших объёмов",
|
||
"Аудит базовых криптографических процессов"
|
||
],
|
||
"roadmap.r4.title": "Масштабирование и стабильность",
|
||
"roadmap.r4.sub": "Масштабирование сети и повышение стабильности",
|
||
"roadmap.r4.date": "Осень 2025",
|
||
"roadmap.r4.features": [
|
||
"Оптимизация P2P-соединений и прохождения NAT",
|
||
"Механизмы переподключения и очереди сообщений",
|
||
"Меньший расход батареи на мобильных",
|
||
"Синхронизация между несколькими устройствами",
|
||
"Инструменты мониторинга и журналирования для разработчиков"
|
||
],
|
||
"roadmap.r5.title": "Приватность прежде всего",
|
||
"roadmap.r5.sub": "Фокус на приватности: уменьшение метаданных",
|
||
"roadmap.r5.date": "Зима 2025",
|
||
"roadmap.r5.features": [
|
||
"Защита метаданных и снижение отпечатка",
|
||
"Эксперименты с луковой маршрутизацией и DHT",
|
||
"Варианты анонимных соединений",
|
||
"Подготовка к открытому аудиту кода",
|
||
"Улучшенная проверка участников"
|
||
],
|
||
"roadmap.r6.title": "Enhanced Security Edition",
|
||
"roadmap.r6.sub": "18-слойная криптография военного уровня с полной проверкой ASN.1",
|
||
"roadmap.r6.date": "Конец 2025",
|
||
"roadmap.r6.features": [
|
||
"Тройная защита: ECDH + DTLS + SAS",
|
||
"Шифрование ECDH P-384 и AES-GCM 256 бит",
|
||
"Проверка отпечатка DTLS",
|
||
"Проверка SAS (короткая строка аутентификации)",
|
||
"Прямая секретность со сменой ключей",
|
||
"Усиленная защита от атак «человек посередине»",
|
||
"Полная проверка ASN.1 DER",
|
||
"Проверка OID и точек EC",
|
||
"Проверка структуры SPKI",
|
||
"Архитектура P2P на WebRTC",
|
||
"Защита метаданных",
|
||
"100 % открытый код"
|
||
],
|
||
"roadmap.r7.title": "Desktop Edition",
|
||
"roadmap.r7.sub": "Отдельные приложения для Windows, macOS и Linux",
|
||
"roadmap.r7.date": "Начало 2026",
|
||
"roadmap.r7.features": [
|
||
"Приложение для Windows (Tauri v2)",
|
||
"Приложение для macOS (Tauri v2)",
|
||
"AppImage для Linux (Tauri v2)",
|
||
"Уведомления в реальном времени",
|
||
"Автоматическое переподключение",
|
||
"Синхронизация между устройствами",
|
||
"Обновлённый интерфейс",
|
||
"Файлы до 100 МБ"
|
||
],
|
||
"roadmap.r8.title": "Защищённый голос и звонки",
|
||
"roadmap.r8.sub": "Зашифрованные голосовые сообщения, аудио- и видеозвонки",
|
||
"roadmap.r8.date": "Начало 2026",
|
||
"roadmap.r8.features": [
|
||
"Голосовые сообщения со сквозным шифрованием",
|
||
"Зашифрованные аудиозвонки один на один (WebRTC)",
|
||
"Зашифрованные видеозвонки один на один (WebRTC)",
|
||
"Прямая секретность для живого потока",
|
||
"Медиапотоки под защитой SRTP/DTLS",
|
||
"Проверка SAS во время звонка",
|
||
"Уведомления о звонках и автопереподключение",
|
||
"Медиа P2P с низкой задержкой"
|
||
],
|
||
"roadmap.r9.title": "Групповое общение",
|
||
"roadmap.r9.sub": "Групповые чаты без потери приватности",
|
||
"roadmap.r9.date": "Сейчас",
|
||
"roadmap.r9.features": [
|
||
"Групповые чаты P2P до 8 участников",
|
||
"Доставка по сети с подписанным relay как запасным путём",
|
||
"Один код безопасности группы, который сверяют все",
|
||
"Церемония «сначала обязательство, потом раскрытие» против подбора кодов",
|
||
"Собственные ключи личности в группе, эфемерные по замыслу",
|
||
"Подписанное членство с упорядочиванием по эпохам",
|
||
"Подписанные сообщения - расхождение в стенограмме можно доказать",
|
||
"Без сервера, без общего ключа группы, без истории"
|
||
],
|
||
"roadmap.r10.title": "Mobile Edition",
|
||
"roadmap.r10.sub": "Отдельные приложения для iOS и Android",
|
||
"roadmap.r10.date": "II квартал 2027",
|
||
"roadmap.r10.features": [
|
||
"Приложение для iOS (Swift/SwiftUI)",
|
||
"Приложение для Android (Kotlin/Jetpack Compose)",
|
||
"Поддержка PWA в мобильных браузерах",
|
||
"Push-уведомления в реальном времени",
|
||
"Оптимизация расхода батареи",
|
||
"Интерфейс, приспособленный к мобильным",
|
||
"Очередь сообщений офлайн",
|
||
"Биометрическая аутентификация"
|
||
],
|
||
"roadmap.r11.title": "Стойкость к квантовым вычислениям",
|
||
"roadmap.r11.sub": "Защита от квантовых компьютеров",
|
||
"roadmap.r11.date": "IV квартал 2027",
|
||
"roadmap.r11.features": [
|
||
"Постквантовая криптография CRYSTALS-Kyber",
|
||
"Цифровые подписи SPHINCS+",
|
||
"Гибридная схема: классическая и постквантовая",
|
||
"Квантово стойкий обмен ключами",
|
||
"Обновлённые алгоритмы хеширования",
|
||
"Миграция существующих сеансов",
|
||
"Совместимость с v5.x",
|
||
"Квантово стойкие протоколы"
|
||
],
|
||
"roadmap.r12.title": "Децентрализованная сеть",
|
||
"roadmap.r12.sub": "Полностью децентрализованная сеть",
|
||
"roadmap.r12.date": "2028",
|
||
"roadmap.r12.features": [
|
||
"Ячеистая сеть узлов",
|
||
"DHT для поиска участников",
|
||
"Встроенная луковая маршрутизация",
|
||
"Токеномика и стимулы для узлов",
|
||
"Управление через DAO",
|
||
"Взаимодействие с другими сетями",
|
||
"Совместимость между платформами",
|
||
"Самовосстанавливающаяся сеть"
|
||
],
|
||
"roadmap.r13.title": "ИИ-помощник по приватности",
|
||
"roadmap.r13.sub": "Искусственный интеллект для приватности и безопасности",
|
||
"roadmap.r13.date": "2028+",
|
||
"roadmap.r13.features": [
|
||
"Локальный анализ угроз с помощью ИИ",
|
||
"Автоматическое обнаружение атак «человек посередине»",
|
||
"Адаптивная криптография",
|
||
"Персональные советы по безопасности",
|
||
"Машинное обучение с нулевым разглашением",
|
||
"Приватный ИИ-помощник",
|
||
"Предсказательная безопасность",
|
||
"Автономная защита от атак"
|
||
],
|
||
"handshake.step1": "Создание пары ключей ECDH P-384",
|
||
"handshake.step2": "Вычисление кода проверки",
|
||
"handshake.step3": "Закрепление прямой секретности",
|
||
"handshake.securingTitle": "Защищаем ваш канал",
|
||
"handshake.answerTitle": "Готовим ваш ответ",
|
||
"handshake.securingDesc": "Создаём ключи, способные выдержать вмешательство.",
|
||
"handshake.shareTitle": "Поделитесь приглашением",
|
||
"handshake.sendAnswerTitle": "Отправьте ответ обратно",
|
||
"handshake.shareDesc": "Покажите QR-код или отправьте код собеседнику. Он одноразовый и скоро станет недействительным.",
|
||
"handshake.sendAnswerDesc": "Передайте этот ответ создателю канала, чтобы он завершил рукопожатие.",
|
||
"handshake.establish": "Установить соединение",
|
||
"handshake.thenReceive": "Затем получите ответ, который пришлёт собеседник",
|
||
"handshake.pasteAnswerPlaceholder": "Вставьте код ответа собеседника…",
|
||
"handshake.answerSentNote": "Отправьте этот ответ создателю и подождите - чат откроется, как только он подключится.",
|
||
"handshake.qrHint": "Держите это открытым, пока собеседник не считает код.",
|
||
"handshake.qrHintFrames": "Рукопожатие разбито на {frames} кадров - держите это открытым, пока собеседник не считает все.",
|
||
"verify.title": "Проверка безопасности",
|
||
"verify.desc": "Сверьте этот код безопасности с собеседником по другому каналу (голосом или лично), затем введите его, чтобы открыть чат.",
|
||
"verify.enterLabel": "Введите сверенный код",
|
||
"verify.placeholder": "Введите код здесь",
|
||
"verify.confirm": "Подтвердить код",
|
||
"verify.confirmed": "Подтверждено",
|
||
"verify.mismatch": "Не совпадают",
|
||
"verify.yours": "Ваше подтверждение",
|
||
"verify.peer": "Подтверждение собеседника",
|
||
"verify.pending": "Ожидается",
|
||
"verify.waiting": "Ожидание кода…",
|
||
"verify.verified": "Канал проверен",
|
||
"verify.bothConfirmed": "Обе стороны подтвердили. Открываем защищённый чат…",
|
||
"pwa.bannerTitle": "Установите SecureBit.chat",
|
||
"pwa.bannerDesc": "Опыт полноценного приложения с усиленной защитой",
|
||
"pwa.install": "Установить",
|
||
"pwa.dismiss": "Закрыть",
|
||
"pwa.close": "Закрыть",
|
||
"pwa.iosTitle": "Установка на iOS",
|
||
"pwa.iosStep1": "Нажмите кнопку «Поделиться»",
|
||
"pwa.iosStep1Hint": "Обычно внизу Safari",
|
||
"pwa.iosStep2": "Найдите «На экран «Домой»»",
|
||
"pwa.iosStep2Hint": "Прокрутите меню «Поделиться» вниз",
|
||
"pwa.iosStep3": "Нажмите «Добавить»",
|
||
"pwa.iosStep3Hint": "Подтвердите, чтобы установить SecureBit.chat",
|
||
"pwa.genericTitle": "Установить SecureBit",
|
||
"pwa.genericDesc": "Каждый браузер устанавливает по-своему. Выберите шаги, подходящие вашему.",
|
||
"pwa.androidChromeHint": "Нажмите ⋮ в верхнем углу и выберите «Установить приложение»",
|
||
"pwa.androidOtherHint": "Откройте меню и выберите «Добавить на главный экран»",
|
||
"pwa.gotIt": "Понятно",
|
||
"pwa.installedTitle": "Приложение установлено!",
|
||
"pwa.installedIos": "Приложение для iOS установлено! Откройте его с экрана «Домой».",
|
||
"pwa.installedGeneric": "SecureBit.chat теперь на вашем устройстве",
|
||
"pwa.anytimeTitle": "Установить в любой момент",
|
||
"pwa.anytimeDesc": "Вы всегда можете установить SecureBit.chat из меню браузера - так он работает лучше всего.",
|
||
"pwa.ok": "Хорошо",
|
||
"step.open": "Шаг 1 · открыть канал",
|
||
"step.exchange": "Шаг 2 · обмен",
|
||
"step.verification": "Шаг 3 · проверка",
|
||
"action.create": "Создать",
|
||
"action.join": "Присоединиться",
|
||
"action.back": "Назад",
|
||
"action.copy": "Копировать",
|
||
"action.copied": "Скопировано",
|
||
"action.scan": "Сканировать",
|
||
"action.downloadDesktop": "Скачать приложение",
|
||
"action.advancedSettings": "Дополнительные настройки",
|
||
"cred.offerTag": "предложение · или скопируйте текст",
|
||
"cred.answerTag": "ответ · или скопируйте текст",
|
||
"cred.reveal": "Нажмите, чтобы показать - держите этот код в тайне",
|
||
"qr.title": "Сканировать QR-код",
|
||
"qr.subtitle": "Наведите камеру на их QR-код",
|
||
"qr.scanning": "Сканирование…",
|
||
"qr.hint": "Держите ровно, пока не считаются все части. Камера работает локально - ничего не отправляется.",
|
||
"mesh.you": "вы",
|
||
"mesh.peer": "собеседник · сеанс 1",
|
||
"mesh.joined2": "лена присоединилась · +2",
|
||
"mesh.joined3": "миша присоединился · +3",
|
||
"ice.title": "Сетевые настройки",
|
||
"ice.subtitle": "Настраивается локально - никогда не передаётся собеседнику",
|
||
"ice.intro": "По умолчанию SecureBit использует публичные STUN-серверы, чтобы согласовать прямое соединение. Если держите свои, укажите собственные STUN/TURN.",
|
||
"ice.publicTitle": "Публичные серверы (по умолчанию)",
|
||
"ice.publicDesc": "Без настройки. Подходит большинству.",
|
||
"ice.customTitle": "Свои STUN/TURN-серверы",
|
||
"ice.customDesc": "До {max} серверов.",
|
||
"ice.turnNote": "TURN-relay видит IP обеих сторон и ритм трафика - но никогда содержимое сообщений, которое остаётся зашифрованным сквозным образом. Лучше ",
|
||
"ice.turnNoteTls": " (TLS).",
|
||
"ice.test": "Проверить серверы",
|
||
"ice.testing": "Проверка…",
|
||
"ice.relayTitle": "Режим только через relay",
|
||
"ice.relayBadge": "МАКСИМУМ ПРИВАТНОСТИ",
|
||
"ice.relayDesc": "Пропускает весь трафик через TURN, так что собеседник никогда не увидит вашего IP. Нужен TURN-сервер.",
|
||
"ice.relayWarning": "Режим только через relay включён, но TURN-сервер не указан. Соединение не сможет начаться.",
|
||
"ice.persist": "Сохранить на этом устройстве",
|
||
"ice.persistDesc": "Хранится зашифрованно в этом браузере. Оставьте выключенным, чтобы действовало только в этом сеансе.",
|
||
"ice.forget": "Забыть сохранённое",
|
||
"ice.cancel": "Отмена",
|
||
"ice.apply": "Применить",
|
||
"ice.errUnavailable": "WebRTC недоступен в этом браузере",
|
||
"ice.errInvalid": "Неверная конфигурация сервера",
|
||
"update.title": "Доступно обновление",
|
||
"update.desc": "Обнаружена более новая версия SecureBit.",
|
||
"update.currentVersion": "Текущая версия",
|
||
"update.newVersion": "Новая версия",
|
||
"update.now": "Обновить сейчас",
|
||
"update.later": "Позже",
|
||
"update.unknown": "н/д",
|
||
"update.stepSaving": "Сохранение данных…",
|
||
"update.stepSwCaches": "Очистка кешей Service Worker…",
|
||
"update.stepSwUnregister": "Отмена регистрации Service Worker…",
|
||
"update.stepBrowserCache": "Очистка кеша браузера…",
|
||
"update.stepVersion": "Обновление версии…",
|
||
"update.stepReload": "Перезагрузка приложения…",
|
||
"update.error": "Ошибка обновления. Перезагрузите страницу вручную (Ctrl+F5 или Cmd+Shift+R)",
|
||
"update.confirmSkip": "Доступна новая версия. Обновление рекомендуется для безопасности и стабильности. Продолжить без обновления?",
|
||
"offline.backOnline": "Снова онлайн",
|
||
"offline.mode": "Режим офлайн",
|
||
"offline.dismiss": "Закрыть",
|
||
"offline.lostTitle": "Соединение потеряно",
|
||
"offline.lostDesc": "SecureBit работает офлайн. Кое-что ограничено, но ваши данные в безопасности.",
|
||
"offline.point1": "Ваш сеанс и ключи сохранены",
|
||
"offline.point2": "Никаких данных на серверах",
|
||
"offline.point3": "Сообщения и файлы синхронизируются после восстановления связи",
|
||
"offline.continue": "Продолжить офлайн",
|
||
"offline.restoredTitle": "Когда связь восстановится",
|
||
"offline.restoredDesc": "Обрыв связи ничего не стоит. SecureBit складывает всё локально в очередь и возобновляет зашифрованный сеанс, как только вы снова онлайн.",
|
||
"offline.r1Title": "Ваши сообщения дойдут",
|
||
"offline.r1Desc": "Всё, что вы написали офлайн, отправляется собеседнику автоматически.",
|
||
"offline.r2Title": "Файлы дозагрузятся",
|
||
"offline.r2Desc": "Передача продолжится с места остановки - отправлять заново не нужно.",
|
||
"offline.r3Title": "Их сообщения и файлы придут",
|
||
"offline.r3Desc": "Всё, что собеседник отправил во время перерыва, придёт вам по порядку.",
|
||
"offline.r4Title": "Ничего не теряется",
|
||
"offline.r4Desc": "После восстановления связи разрыва не остаётся - разговор продолжается ровно с того места, где остановился.",
|
||
"offline.gotIt": "Понятно",
|
||
"qr.showTitle": "Показать QR-код",
|
||
"qr.showSubtitle": "На весь экран · пусть собеседник отсканирует",
|
||
"qr.showSubtitleFrames": "На весь экран · пусть собеседник отсканирует все {frames} кадров",
|
||
"notify.enabledBody": "Уведомления включены. Вы будете получать оповещения о новых сообщениях.",
|
||
"notify.workingBody": "Уведомления работают. Вы будете получать оповещения о новых сообщениях.",
|
||
"pw.label": "Поле пароля",
|
||
"pw.placeholder": "Введите пароль…",
|
||
"pw.decrypt": "Расшифровать",
|
||
"pw.cancel": "Отмена",
|
||
"file.title": "Передача файлов",
|
||
"file.drop": "Перетащите файлы сюда",
|
||
"file.dropHint": "Шифруются сквозным образом перед передачей · до 100 МБ",
|
||
"file.browse": "Обзор устройства",
|
||
"file.incoming": "Входящий запрос на файл",
|
||
"file.accept": "Принять",
|
||
"file.reject": "Отклонить",
|
||
"file.download": "Скачать",
|
||
"file.notReady": "Соединение ещё не готово",
|
||
"file.tooLarge": "Файл слишком большой",
|
||
"file.typeNotAllowed": "Тип файла не разрешён",
|
||
"file.maxConcurrent": "Достигнут предел одновременных передач",
|
||
"file.gone": "Этот файл больше не доступен для скачивания.",
|
||
"call.incoming": "Входящий звонок",
|
||
"call.incomingVideo": "Входящий видеозвонок",
|
||
"call.encrypted": "Зашифрованный звонок",
|
||
"call.encryptedShort": "Зашифровано",
|
||
"call.peer": "Защищённый собеседник",
|
||
"call.connecting": "Соединение…",
|
||
"call.ringing": "Вызов…",
|
||
"call.accept": "Принять",
|
||
"call.decline": "Отклонить",
|
||
"call.end": "Завершить звонок",
|
||
"call.camera": "Камера",
|
||
"call.cameraOff": "Камера выключена",
|
||
"call.peerCameraOff": "Камера собеседника выключена",
|
||
"call.flipCamera": "Переключить камеру",
|
||
"call.addVideo": "Добавить видео",
|
||
"call.video": "Видео",
|
||
"call.muted": "Без звука",
|
||
"call.expand": "Развернуть",
|
||
"call.minimize": "Свернуть",
|
||
"call.quality": "Качество соединения",
|
||
"call.qualityExcellent": "Отличное",
|
||
"call.videoPrefix": "Видео · ",
|
||
"call.voicePrefix": "Голос · ",
|
||
"group.new": "Новая группа",
|
||
"group.create": "Создать группу",
|
||
"group.join": "Присоединиться к группе",
|
||
"group.name": "Название группы",
|
||
"group.nameTooLong": "Название группы слишком длинное.",
|
||
"group.capacity": "До {max} человек, напрямую между устройствами. Все сверят один код безопасности, прежде чем группа откроется.",
|
||
"group.invite": "Пригласить",
|
||
"group.inviteMore": "Пригласить ещё участников",
|
||
"group.invitePeople": "Пригласить {count} человек",
|
||
"group.invitation": "Приглашение в группу",
|
||
"group.addMembers": "Добавить участников",
|
||
"group.roomFor": "Есть место ещё для {remaining}. После присоединения все сверят новый код группы.",
|
||
"group.membersCount": "{count} участников",
|
||
"group.member": "Участник",
|
||
"group.members": "Участники",
|
||
"group.remove": "Удалить {name}",
|
||
"group.message": "Написать в «{name}»",
|
||
"group.leave": "Выйти",
|
||
"group.leaveThis": "Выйти из этой группы",
|
||
"group.cancel": "Отменить группу",
|
||
"group.close": "Закрыть",
|
||
"group.cancelBtn": "Отмена",
|
||
"group.decline": "Отклонить",
|
||
"group.working": "Выполняется…",
|
||
"group.sasTitle": "Код безопасности группы",
|
||
"group.sasEveryone": "Этот код видят все",
|
||
"group.sasCompare": "Сверьте код группы с каждым участником, чтобы открыть группу.",
|
||
"group.sasReadAloud": "Прочитайте эти цифры вслух для ",
|
||
"group.sasWarning": "Если хотя бы один участник читает другой код, между вами кто-то есть. Отмените группу - не подтверждайте.",
|
||
"group.confirmFirst": "Сначала подтвердите код группы",
|
||
"group.codeSuffix": " · код {code}",
|
||
"group.exchangingNonces": "Обмен одноразовыми значениями…",
|
||
"group.waitingCommit": "Ожидание обязательств от всех участников…",
|
||
"group.waitingJoin": "Ожидание присоединения остальных участников…",
|
||
"group.emptyChat": "Здесь пока ничего. Сообщения подписаны отправителем и идут по собственному зашифрованному каналу каждого участника.",
|
||
"group.noVerified": "Пока нет проверенных чатов. Сначала откройте личный чат и сверьте его код безопасности - группа строится из уже проверенных соединений.",
|
||
"group.noMoreToAdd": "Других проверенных чатов нет. Откройте личный чат и сначала сверьте его код безопасности.",
|
||
"group.directLink": "Прямое соединение между устройствами",
|
||
"group.noDirectLink": "Прямого соединения ещё нет - сообщения передаёт другой участник, пока оно устанавливается",
|
||
"group.relayNote": "С некоторыми участниками прямого соединения ещё нет. Их сообщения идут через другого участника, который видит, что вы общаетесь, но не может ни прочитать, ни изменить сказанное. Группа продолжает соединять их напрямую.",
|
||
"group.relayOnlyOff": "Режим только через relay выключен, поэтому каждый участник соединяется с вами напрямую и узнаёт ваш IP-адрес - в том числе те, кого пригласил кто-то другой. Включите его в сетевых настройках, если это важно.",
|
||
"group.memberOffline": "{name} офлайн и не получит сообщений. Участие сохраняется - удаление перевыпускает ключи группы.",
|
||
"group.joinNote": "Другие участники узнают, что вы в этой группе. Истории сообщений нет - группа начинается пустой.",
|
||
"group.inviteSentNote": "Группа работает дальше, пока они не примут. Истории для них нет - они увидят только то, что отправлено с этого момента.",
|
||
"group.errNotCreated": "Группа не создана",
|
||
"group.errNobodyAccepted": "Никто не принял приглашение вовремя.",
|
||
"group.errNothingSent": "Ничего не отправлено и ничего не проверено. Закройте это и попробуйте снова, когда все подключатся.",
|
||
"group.errNotFormed": "Эту группу не удалось сформировать.",
|
||
"group.errFull": "Эта группа заполнена.",
|
||
"group.errInviteFailed": "Приглашение не удалось отправить - тот чат не подключён.",
|
||
"group.errNoMemberList": "Владелец группы так и не отправил список участников.",
|
||
"group.errUnsignedList": "Список участников не подписан владельцем группы. Не повторяйте - скажите им.",
|
||
"group.errNotOwner": "Изменить состав участников пытался не владелец группы.",
|
||
"hdr.tagline": "Сквозное шифрование",
|
||
"hdr.netSettings": "Дополнительные сетевые настройки",
|
||
"hdr.netSettingsTitle": "Дополнительные сетевые настройки (STUN/TURN)",
|
||
"hdr.disconnect": "Отключиться",
|
||
"status.connected": "Соединено",
|
||
"status.connecting": "Соединение…",
|
||
"status.notConnected": "Не соединено",
|
||
"status.reconnecting": "Переподключение…",
|
||
"status.retrying": "Повтор попытки…",
|
||
"status.verifying": "Проверка…",
|
||
"status.peerDisconnected": "Собеседник отключился",
|
||
"sec.replayProtection": "Защита от повторов",
|
||
"sec.messageIntegrity": "Целостность сообщений (HMAC)",
|
||
"sec.forwardSecrecy": "Совершенная прямая секретность",
|
||
"sec.metadataProtection": "Защита метаданных",
|
||
"sec.trafficObfuscation": "Маскировка трафика",
|
||
"sec.realTests": "Настоящие криптографические проверки",
|
||
"sec.simulatedData": "Смоделированные данные",
|
||
"sec.testPassed": "Проверка пройдена",
|
||
"sec.testFailed": "Проверка не пройдена или недоступна",
|
||
"sec.verificationDone": "Настоящая криптографическая проверка завершена",
|
||
"sec.verificationInProgress": "Идёт проверка безопасности…",
|
||
"sec.verificationWait": "Идёт проверка безопасности…\nПодождите, пока завершится криптографическая проверка в реальном времени.",
|
||
"sec.verificationUnavailable": "Проверка безопасности недоступна",
|
||
"chat.placeholder": "Напишите зашифрованное сообщение…",
|
||
"chat.send": "Отправить сообщение",
|
||
"chat.sendFiles": "Отправить файлы",
|
||
"chat.hideFiles": "Скрыть файлы",
|
||
"chat.recordVoice": "Записать голосовое сообщение",
|
||
"chat.sendVoice": "Отправить голосовое сообщение",
|
||
"chat.discard": "Отменить",
|
||
"chat.codeBlock": "Отправить как блок кода (расширяет поле)",
|
||
"chat.codeHint": "Фрагмент кода · форматирование сохранено · ⌘↵ чтобы отправить",
|
||
"chat.viewOnce": "Просмотреть один раз",
|
||
"chat.viewOnceTitle": "Просмотреть один раз - исчезает, как только собеседник прочитает",
|
||
"chat.viewOncePrefix": "Просмотреть один раз · ",
|
||
"chat.viewOnceTap": "Просмотреть один раз · коснитесь, чтобы показать",
|
||
"chat.viewedOnce": "Уже просмотрено",
|
||
"chat.disappearing": "Исчезающее сообщение - удаляется с обеих сторон",
|
||
"chat.disappearAfter": "Исчезнет через",
|
||
"chat.visibleFor": "Видно",
|
||
"chat.timerPrefix": "Таймер · ",
|
||
"chat.expired": "Это сообщение истекло",
|
||
"chat.deleteForEveryone": "Удалить у всех",
|
||
"chat.sending": "Отправка",
|
||
"chat.delivered": "Доставлено",
|
||
"chat.notSent": "Не отправлено",
|
||
"chat.notSentReason": "Не отправлено - защищённый канал не готов. Переподключитесь, чтобы продолжить.",
|
||
"chat.encrypted": "Зашифровано",
|
||
"chat.decrypted": "Расшифровано",
|
||
"chat.encryptedOnDevice": "Зашифровано на вашем устройстве",
|
||
"chat.uploading": "Отправка",
|
||
"chat.downloading": "Загрузка",
|
||
"chat.transferring": "Передача…",
|
||
"chat.copied": "Скопировано!",
|
||
"chat.collapse": "Свернуть",
|
||
"chat.closeMenu": "Закрыть меню",
|
||
"chat.newChat": "Новый чат",
|
||
"chat.newGroup": "Новая группа",
|
||
"chat.createGroup": "Создать группу",
|
||
"chat.groupChats": "Групповые чаты",
|
||
"chat.secureChat": "Защищённый чат",
|
||
"chat.nameThis": "Назовите этот чат",
|
||
"chat.rename": "Переименовать чат (только локально)",
|
||
"chat.renameHint": "Дважды щёлкните, чтобы переименовать",
|
||
"chat.localLabel": "Локальное название · хранится только на этом устройстве",
|
||
"chat.setStatus": "Задайте свой статус",
|
||
"chat.yourStatusPrefix": "Ваш статус - ",
|
||
"chat.meshHint": "До 8 участников · P2P-сеть",
|
||
"chat.offline": "Офлайн",
|
||
"chat.noNetwork": "Нет сети · переподключение",
|
||
"chat.startVoiceCall": "Начать зашифрованный звонок",
|
||
"chat.startVideoCall": "Начать зашифрованный видеозвонок",
|
||
"chat.verifyForCalls": "Проверьте сеанс, чтобы включить звонки",
|
||
"chat.e2eeNote": "Каждое сообщение шифруется сквозным образом на вашем устройстве, прежде чем уйти.",
|
||
"chat.peersOnly": "Отправляется сквозным образом только подключённым участникам - никогда не хранится на сервере.",
|
||
"flow.invitationCreated": "Защищённое приглашение создано",
|
||
"flow.invitationCreatedBang": "Защищённое приглашение создано и зашифровано.",
|
||
"flow.responseCreated": "Защищённый ответ создан",
|
||
"flow.responseCreatedBang": "Защищённый ответ создан.",
|
||
"flow.sendInvitation": "Отправьте код приглашения собеседнику по защищённому каналу (звонок, SMS и т. п.).",
|
||
"flow.sendResponse": "Отправьте код ответа инициатору по защищённому каналу или дайте ему отсканировать QR-код ниже.",
|
||
"flow.sendEncryptedCode": "Отправить зашифрованный код",
|
||
"flow.sendTheResponse": "Отправить ответ",
|
||
"flow.pasteOrWrite": "Вставьте или введите код…",
|
||
"flow.processingInvitation": "Обработка защищённого приглашения…",
|
||
"flow.processingResponse": "Обработка защищённого ответа…",
|
||
"flow.finalizing": "Завершение защищённого соединения…",
|
||
"flow.channelEstablished": "Защищённый канал установлен",
|
||
"flow.channelReady": "Защищённый канал готов",
|
||
"flow.restoring": "Восстановление соединения…",
|
||
"flow.invitationCaptured": "Приглашение считано.",
|
||
"err.needInvitation": "Нужно вставить код приглашения от собеседника.",
|
||
"err.needResponse": "Нужно вставить код ответа от собеседника.",
|
||
"err.responseFormat": "Неверный формат ответа - проверьте код",
|
||
"err.responseNoKey": "Неверный код ответа - криптографический ключ отсутствует или повреждён. Проверьте код и попробуйте снова.",
|
||
"err.responseNoSignKey": "Неверный код ответа - не хватает ключа проверки подписи. Проверьте код и попробуйте снова.",
|
||
"err.responseOutdated": "Данные ответа устарели - воспользуйтесь новым приглашением",
|
||
"err.setupError": "Ошибка установки соединения",
|
||
"err.notReady": "Соединение ещё не готово",
|
||
"err.securityBreach": "Обнаружено нарушение безопасности - соединение отклонено",
|
||
"err.securityValidation": "Проверка безопасности не пройдена - возможна атака",
|
||
"err.retiredQr": "Этот QR-код использует устаревший формат, которым не удалось передать приглашение. Попросите новый или воспользуйтесь копированием.",
|
||
"err.compressedQrNote": "Сжатый QR может опустить SDP ради краткости. Если соединение не удаётся, воспользуйтесь копированием.",
|
||
"err.inviteNotConnected": "Приглашение не удалось отправить. Тот чат сейчас не подключён.",
|
||
"err.inviteNotConnectedRetry": "Приглашение не удалось отправить. Тот чат сейчас не подключён - откройте его снова и попробуйте ещё раз.",
|
||
"err.nobodyAccepted": "Никто не принял приглашение. Группа осталась без изменений.",
|
||
"err.noAudio": "Звук не записан - проверьте разрешение на микрофон и попробуйте снова.",
|
||
"err.voiceNeedsConnection": "Для голосового сообщения нужно активное защищённое соединение. Переподключитесь и попробуйте снова.",
|
||
"err.voiceRestoring": "Восстанавливаем соединение - попробуйте отправить голосовое сообщение через мгновение.",
|
||
"err.fileTooLarge": "Файл слишком большой",
|
||
"sas.safetyNumber": "Номер безопасности",
|
||
"sas.incorrect": "Неверный код. Сверьте его с собеседником и попробуйте снова.",
|
||
"sas.noMatch": "Коды не совпадают",
|
||
"sas.makeSure": "Убедитесь, что коды совпадают точно.",
|
||
"sas.tooManyAttempts": "Слишком много неверных попыток. Сеанс сброшен ради безопасности.",
|
||
"sas.verificationFailed": "Проверка не пройдена",
|
||
"sas.verified": "Проверено · совершенная прямая секретность",
|
||
"sas.runVerification": "Запустить проверку безопасности",
|
||
"sec.panelTitle": "Детали сети и криптографии",
|
||
"sec.security": "Безопасность",
|
||
"sec.transport": "Транспорт",
|
||
"sec.keyExchange": "Обмен ключами",
|
||
"sec.allEnabled": "Все функции безопасности включены по умолчанию",
|
||
"sec.realTimeNote": "Проверка в реальном времени настоящими криптографическими функциями - без выдуманных данных.",
|
||
"sec.simulatedWarning": "Внимание: соединение может быть не полностью установлено - значения могут быть смоделированы.",
|
||
"dl.title": "Скачать SecureBit",
|
||
"dl.free": "Бесплатно · открытый код",
|
||
"dl.soon": "Приложения для iOS и Android и расширения для Chrome, Firefox и Opera появятся скоро.",
|
||
"chatHdr.chat": "Чат",
|
||
"chatHdr.chats": "Чаты",
|
||
"chatHdr.newChat": "+ Новый",
|
||
"chatHdr.secure": "Защищено",
|
||
"chatHdr.p2pSub": "P2P · сквозное шифрование",
|
||
"chatHdr.save": "Сохранить",
|
||
"chatHdr.close": "Закрыть",
|
||
"chatHdr.expand": "Развернуть",
|
||
"chatHdr.you": "Вы",
|
||
"chatHdr.qrCode": "QR-код",
|
||
"chat.disconnected": "Разъединено",
|
||
"call.mute": "Выключить микрофон",
|
||
"call.endShort": "Завершить",
|
||
"group.add": "Добавить",
|
||
"group.send": "Отправить",
|
||
"sec.pfsShort": "Совершенная прямая секретность",
|
||
"sec.cipher": "Шифр",
|
||
"chat.close": "Закрыть",
|
||
"file.needConnection": "Для передачи файлов нужно открытое соединение",
|
||
"presence.available": "Доступен",
|
||
"presence.away": "Отошёл",
|
||
"presence.busy": "Занят",
|
||
"presence.offline": "Не в сети",
|
||
"presence.invisible": "Невидимый",
|
||
"presence.availableDesc": "В сети и на связи",
|
||
"presence.awayDesc": "Неактивен · отошёл",
|
||
"presence.busyDesc": "Не беспокоить",
|
||
"presence.invisibleDesc": "Выглядеть офлайн для собеседников",
|
||
"presence.online": "В сети",
|
||
"conn.p2p": "P2P · соединено",
|
||
"conn.verifying": "Проверка…",
|
||
"conn.connecting": "Соединение…",
|
||
"conn.reconnecting": "Переподключение…",
|
||
"conn.peerDisconnected": "Собеседник отключился",
|
||
"conn.disconnected": "Разъединено",
|
||
"chat.defaultLabel": "Чат",
|
||
"groupPhase.forming": "Формирование…",
|
||
"groupPhase.commitments": "Обмен обязательствами…",
|
||
"groupPhase.revealing": "Раскрытие…",
|
||
"groupPhase.compare": "Сверьте код группы",
|
||
"groupPhase.ready": "Группа готова",
|
||
"groupPhase.failed": "Группа не создана",
|
||
"call.qualityGood": "Хорошее",
|
||
"call.qualityFair": "Среднее",
|
||
"call.qualityWeak": "Слабое",
|
||
"msg.code": "Код",
|
||
"msg.timer": "Таймер",
|
||
"msg.voice": "Голос",
|
||
"msg.play": "Воспроизвести",
|
||
"msg.sent": "Отправлено",
|
||
"msg.read": "Прочитано",
|
||
"report.title": "Проверка безопасности в реальном времени",
|
||
"report.active": "Активно",
|
||
"report.testsPassed": "Пройдено проверок",
|
||
"report.verifiedAt": "Проверено",
|
||
"report.source": "Источник",
|
||
"secTest.verifyECDHKeyExchange": "Обмен ключами ECDH",
|
||
"secTest.verifyECDSASignatures": "Цифровые подписи ECDSA",
|
||
"secTest.verifyEncryption": "Шифрование AES-GCM",
|
||
"secTest.verifyMessageIntegrity": "Целостность сообщений",
|
||
"secTest.verifyPerfectForwardSecrecy": "Совершенная прямая секретность",
|
||
"secTest.verifyPFS": "Совершенная прямая секретность",
|
||
"secTest.verifyReplayProtection": "Защита от повторов",
|
||
"secTest.verifyDTLSFingerprint": "Отпечаток DTLS",
|
||
"secTest.verifySASVerification": "Проверка SAS",
|
||
"secTest.verifyMetadataProtection": "Защита метаданных",
|
||
"secTest.verifyTrafficObfuscation": "Маскировка трафика",
|
||
"secTest.verifyPacketPadding": "Дополнение пакетов",
|
||
"secTest.verifyNestedEncryption": "Вложенное шифрование",
|
||
"secTest.verifyNonExtractableKeys": "Ключи, которые нельзя извлечь",
|
||
"secTest.verifyRateLimiting": "Ограничение частоты",
|
||
"secTest.verifyMutualAuth": "Взаимная аутентификация",
|
||
"secTest.verifyAuthProof": "Доказательство аутентификации",
|
||
"secTest.verifyEnhancedValidation": "Усиленная проверка",
|
||
"secTest.verifyAdvancedFeatures": "Расширенные возможности",
|
||
"secTest.verifySignature": "Проверка подписи",
|
||
"secDetail.Security system initializing...": "Система безопасности запускается…",
|
||
"secDetail.Nested encryption active": "Вложенное шифрование активно",
|
||
"secDetail.Nested encryption failed": "Вложенное шифрование не удалось",
|
||
"secDetail.Packet padding active": "Дополнение пакетов активно",
|
||
"secDetail.Packet padding failed": "Дополнение пакетов не удалось",
|
||
"secDetail.Advanced features active": "Расширенные возможности активны",
|
||
"secDetail.Advanced features failed": "Расширенные возможности не работают",
|
||
"secDetail.No encryption key available": "Ключ шифрования недоступен",
|
||
"secDetail.AES-GCM encryption/decryption working correctly": "Шифрование и расшифрование AES-GCM работают правильно",
|
||
"secDetail.No ECDH key pair available": "Пара ключей ECDH недоступна",
|
||
"secDetail.Key derivation failed": "Вычисление ключа не удалось",
|
||
"secDetail.No ECDSA key pair available": "Пара ключей ECDSA недоступна",
|
||
"secDetail.ECDSA digital signatures working correctly": "Цифровые подписи ECDSA работают правильно",
|
||
"secDetail.MAC key not available or invalid": "Ключ MAC недоступен или неверен",
|
||
"secDetail.Rate limiter did not block a message over the limit": "Ограничитель не заблокировал сообщение сверх лимита",
|
||
"secDetail.Rate limiter is not available": "Ограничитель частоты недоступен",
|
||
"secDetail.Replay protection is working correctly": "Защита от повторов работает правильно",
|
||
"secDetail.Replay protection not enabled": "Защита от повторов не включена",
|
||
"secDetail.SAS code not available": "Код SAS недоступен",
|
||
"secDetail.SAS verification code is valid and available": "Код проверки SAS действителен и доступен",
|
||
"secDetail.Traffic obfuscation is working correctly": "Маскировка трафика работает правильно",
|
||
"secDetail.Traffic obfuscation not enabled": "Маскировка трафика не включена",
|
||
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "Для этого сеанса нет эфемерной пары ключей ECDH, которую нельзя извлечь",
|
||
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "Только сеансовая прямая секретность: ключи эфемерны для каждого сеанса, но Double Ratchet для этого соединения не активен (у собеседника более старая версия), поэтому скомпрометированный сеансовый ключ открывает весь разговор.",
|
||
"msg.pause": "Пауза",
|
||
"msg.failed": "Не удалось",
|
||
"groupErr.timeout": "Участник перестал отвечать, прежде чем код был готов.",
|
||
"groupErr.keyMismatch": "Ключ участника не совпал с личностью, которую для него заявили.",
|
||
"groupErr.revealMismatch": "Раскрытое значение участника не совпало с его обязательством.",
|
||
"groupErr.commitChanged": "Участник изменил своё обязательство посреди процесса.",
|
||
"groupErr.missingKey": "В списке был участник, чей ключ так и не пришёл.",
|
||
"groupErr.outsider": "Пришёл кадр от кого-то вне группы.",
|
||
"groupErr.limit": "Группа ограничена восемью участниками.",
|
||
"groupErr.tooLarge": "Сообщение было слишком большим, чтобы отправить его группе.",
|
||
"fileType.text": "Обычный текст",
|
||
"fileType.images": "Изображения",
|
||
"fileType.archives": "Архивы",
|
||
"fileType.voice": "Голосовые сообщения",
|
||
"fileType.unsupported": "Не поддерживается",
|
||
"qrScan.title": "Сканировать QR-код",
|
||
"qrScan.auto": "Автоматически",
|
||
"qrScan.reset": "Сбросить",
|
||
"qrScan.autoScroll": "Автопрокрутка включена",
|
||
"qrScan.starting": "Запуск камеры…",
|
||
"qrScan.point": "Наведите камеру на QR-код",
|
||
"qrScan.tapFocus": "Коснитесь экрана, чтобы сфокусировать",
|
||
"qrScan.focusing": "Фокусировка…",
|
||
"iceErr.notArray": "Список серверов должен быть массивом",
|
||
"iceErr.invalidJson": "Неверный JSON",
|
||
"iceErr.tooMany": "Слишком много серверов (максимум {max})",
|
||
"iceErr.invalidEntry": "{label}: неверная запись",
|
||
"iceErr.urlCount": "{label}: нужно от 1 до {max} URL",
|
||
"iceErr.turnCreds": "{label}: TURN-серверы обычно требуют имени пользователя и учётных данных",
|
||
"iceUrl.notString": "URL должен быть строкой",
|
||
"iceUrl.empty": "URL пустой",
|
||
"iceUrl.tooLong": "URL слишком длинный",
|
||
"iceUrl.badChars": "URL содержит недопустимые символы",
|
||
"iceUrl.badScheme": "URL должен начинаться с stun:, stuns:, turn: или turns:",
|
||
"iceUrl.badQuery": "URL содержит неверный запрос",
|
||
"iceUrl.noHost": "В URL не хватает хоста",
|
||
"iceUrl.badHost": "URL содержит неверный хост или порт",
|
||
"iceUrl.badTransport": "Запрос URL должен быть transport=udp или transport=tcp",
|
||
"msg.off": "Выключено",
|
||
"file.consentUnavailable": "Нет возможности получить согласие",
|
||
"secLevel.MAXIMUM": "МАКСИМУМ",
|
||
"secLevel.INITIALIZING": "ЗАПУСК",
|
||
"secLevel.ERROR": "ОШИБКА",
|
||
"secLevel.UNKNOWN": "НЕИЗВЕСТНО",
|
||
"status.error": "Ошибка",
|
||
"offline.disconnect": "Отключиться",
|
||
"offline.learnMore": "Подробнее",
|
||
"pwa.installApp": "Установить приложение",
|
||
"chat.onWeb": "Вы в веб-версии",
|
||
"groupCall.startVoice": "Начать групповой голосовой звонок",
|
||
"groupCall.startVideo": "Начать групповой видеозвонок",
|
||
"groupCall.join": "Присоединиться",
|
||
"groupCall.dismiss": "Не сейчас",
|
||
"groupCall.leave": "Выйти из звонка",
|
||
"groupCall.you": "Вы",
|
||
"groupCall.connecting": "Соединение…",
|
||
"groupCall.waitingLink": "Ожидание прямого соединения…",
|
||
"groupCall.legFailed": "Не удалось соединиться",
|
||
"groupCall.startedVoice": "{name} начал голосовой звонок",
|
||
"groupCall.startedVideo": "{name} начал видеозвонок",
|
||
"groupCall.inCall": "{count} в звонке",
|
||
"groupCall.err.permission_denied": "Звонок не начался - доступ к микрофону и камере заблокирован. Разрешите его для этого сайта и попробуйте снова.",
|
||
"groupCall.err.device_not_found": "Звонок не начался - на этом устройстве не найден микрофон.",
|
||
"groupCall.err.device_busy": "Звонок не начался - микрофон занят другим приложением. Закройте его и попробуйте снова.",
|
||
"groupCall.err.media_failed": "Звонок не начался - не удалось открыть микрофон.",
|
||
"groupCall.err.call_in_progress": "В этой группе уже идёт звонок. Присоединитесь к нему, а не начинайте новый.",
|
||
"groupCall.err.not_ready": "Сначала подтвердите код группы.",
|
||
"groupCall.speaking": "{name} говорит",
|
||
"groupCall.pin": "Показать {name} крупно",
|
||
"groupCall.unpin": "Вернуться ко всем",
|
||
"groupCall.showEveryone": "Все",
|
||
"msg.after5s": "5 с после прочтения",
|
||
"msg.after15s": "15 с после прочтения",
|
||
"msg.after30s": "30 с после прочтения",
|
||
"msg.after1m": "1 мин после прочтения",
|
||
"msg.sec30": "30 секунд",
|
||
"msg.min5": "5 минут",
|
||
"msg.hour1": "1 час",
|
||
"desktop.shareDesc": "Отправьте код собеседнику. Он одноразовый и скоро истечёт.",
|
||
"desktop.invitationCreated": "Защищённое приглашение создано - отправьте его собеседнику.",
|
||
"desktop.joinDesc": "Вставьте код приглашения собеседника, чтобы построить защищённый ответ.",
|
||
"desktop.offerTag": "приглашение · копировать текст",
|
||
"desktop.answerTag": "ответ · копировать текст",
|
||
"desktop.offerPlaceholder": "Здесь появится код приглашения…",
|
||
"desktop.answerPlaceholder": "Здесь появится код ответа…",
|
||
"desktop.backToChats": "Назад к чатам",
|
||
"desktop.sendFeedback": "Отправить отзыв",
|
||
"desktop.callsNeedVerified": "Для звонков нужен подтверждённый защищённый канал.",
|
||
"desktop.noOpenChannel": "Нет открытого защищённого канала.",
|
||
"desktop.chatCarriesCall": "Через этот чат идёт групповой звонок. Выйдите из группового звонка, прежде чем звонить один на один.",
|
||
"desktop.err.permission_denied": "Звонок не начался - доступ к микрофону и камере заблокирован. Разрешите его в системных настройках и попробуйте снова.",
|
||
"desktop.language": "Язык",
|
||
"desktop.languageHint": "Применяется сразу. Уже отправленные сообщения остаются на том языке, на котором их написали.",
|
||
"desktop.compareCode": "Сверьте код подтверждения с собеседником и подтвердите, если он совпадает.",
|
||
"desktop.verifyBeforeFiles": "Завершите проверку, прежде чем отправлять файлы.",
|
||
"desktop.verifyBeforeSending": "Завершите проверку, прежде чем отправлять сообщения.",
|
||
"desktop.disconnectedByBackend": "Соединение безопасно разорвано.",
|
||
"desktop.restoreFailed": "Не удалось восстановить соединение. Этот чат будет закрыт.",
|
||
"desktop.channelNotReady": "Канал данных ещё недоступен. Дождитесь установления соединения.",
|
||
"desktop.enterCode": "Введите код подтверждения.",
|
||
"desktop.noOffer": "Приглашение не найдено. Сначала создайте его.",
|
||
"desktop.notInitiator": "Вы не создавали это соединение, поэтому применять ответ не к чему.",
|
||
"desktop.decryptFailed": "Сообщение не удалось расшифровать, оно отброшено.",
|
||
"desktop.badMessageFormat": "Пришёл повреждённый кадр, он отброшен.",
|
||
"desktop.notSentNotReady": "Сообщение не отправлено: защищённый канал не готов. Дождитесь окончания проверки или переподключитесь.",
|
||
"desktop.micDenied": "Доступ к микрофону отклонён.",
|
||
"desktop.noChannelWait": "Нет открытого защищённого канала - дождитесь установления соединения.",
|
||
"desktop.sasFailed": "Проверка не пройдена. Возможен посредник, поэтому соединение прервано.",
|
||
"desktop.sasOk": "Проверка пройдена. Этот канал аутентифицирован сквозным образом.",
|
||
"desktop.iceForgotten": "Сохранённые серверы забыты. Используются публичные серверы ICE.",
|
||
"desktop.icePublic": "Используются публичные серверы ICE.",
|
||
"desktop.verificationInProgress": "Проверка безопасности ещё идёт. Дождитесь её завершения.",
|
||
"desktop.fileGone": "Этот файл больше недоступен для загрузки.",
|
||
"desktop.codeMismatch": "Коды подтверждения не совпадают. Отключаемся ради безопасности.",
|
||
"desktop.noLocalCode": "Проверка не удалась: нет локально вычисленного кода для сравнения. Отключаемся ради безопасности.",
|
||
"desktop.protocolViolation": "Собеседник заявил о подтверждении кода раньше, чем вы его подтвердили. Отключаемся ради безопасности.",
|
||
"desktop.verificationRejected": "Проверка отклонена. Соединение прервано ради безопасности.",
|
||
"secLevel.HIGH": "ВЫСОКИЙ",
|
||
"secLevel.MEDIUM": "СРЕДНИЙ",
|
||
"secLevel.LOW": "НИЗКИЙ",
|
||
"desktop.rerun": "Проверить снова",
|
||
"desktop.ice.customDesc": "До {max} серверов, по одному URL в строке или JSON.",
|
||
"desktop.ice.persistDesc": "Хранится локально на этом устройстве. Оставьте выключенным, чтобы использовать только в этом сеансе.",
|
||
"desktop.group.leaveNote": "Остальным участникам сообщат, что вы вышли. После этого на устройстве не остаётся ничего об этой группе - ни один сервер не хранит копию, чтобы вернуться, так что понадобится новое приглашение.",
|
||
"desktop.sec.ecdsaOk": "Подпись пакета ключей собеседника проверена при рукопожатии (ECDSA P-384 / SHA-384)",
|
||
"desktop.sec.ecdsaNone": "Рукопожатие не завершено",
|
||
"desktop.sec.ecdhOk": "Ключи сеанса выведены из эфемерного обмена ECDH P-384 через HKDF-SHA-256",
|
||
"desktop.sec.ecdhNone": "Ключи сеанса не выведены",
|
||
"desktop.sec.encryptionOk": "Шифрование и расшифрование AES-GCM проверены в ядре",
|
||
"desktop.sec.encryptionNa": "Самопроверку AES-GCM выполнить не удалось",
|
||
"desktop.sec.integrityOk": "Целостность сообщений проверена (аутентификация AES-GCM)",
|
||
"desktop.sec.integrityNa": "Самопроверку целостности выполнить не удалось",
|
||
"desktop.sec.pfsOk": "Double Ratchet активен - у каждого сообщения свой ключ",
|
||
"desktop.sec.pfsNa": "Не измерено",
|
||
"desktop.sec.replayOk": "Ключи сообщений рэтчета уничтожаются после использования, поэтому перехваченный кадр нельзя воспроизвести повторно",
|
||
"desktop.sec.replayNa": "Не измерено",
|
||
"desktop.sec.dtlsPinned": "Отпечаток DTLS собеседника закреплён: {fp}",
|
||
"desktop.sec.dtlsNone": "Отпечатка DTLS удалённой стороны нет",
|
||
"desktop.sec.sasBoth": "Обе стороны подтвердили код безопасности вне канала",
|
||
"desktop.sec.sasIncomplete": "Код безопасности подтвердили не обе стороны",
|
||
"desktop.sec.metadataOk": "Выведен отдельный ключ метаданных (HKDF metadata-protection-v4)",
|
||
"desktop.sec.metadataNone": "Ключа метаданных нет",
|
||
"desktop.sec.coverOn": "Прикрывающий трафик активен: случайные фальшивые кадры (32-128 Б каждые 15-30 с) в канале с рэтчетом",
|
||
"desktop.sec.coverOff": "Генератор прикрывающего трафика не работает",
|
||
"desktop.sec.coverUnsupported": "Прикрывающему трафику нужен сеанс Double Ratchet (у собеседника версия постарше)",
|
||
"desktop.tagline": "Сквозная свобода",
|
||
"desktop.callsNotHere": "Звонки в этой сборке пока недоступны. Сообщения, файлы и групповые чаты работают как обычно."
|
||
}
|
||
}
|