diff --git a/.htaccess b/.htaccess index 06d3e39..1d76599 100644 --- a/.htaccess +++ b/.htaccess @@ -104,6 +104,15 @@ +# The dictionary is imported by a bare path from a plain browser module, so nothing +# busts its cache. It must revalidate or translations freeze at whatever a visitor +# first loaded. + + + Header set Cache-Control "no-cache, must-revalidate" + + + # CSS files - long cache @@ -133,6 +142,13 @@ +# Crawler-facing files - short cache so search engines re-read them + + + Header set Cache-Control "public, max-age=3600" + + + # ============================================ # SECURITY # ============================================ @@ -186,6 +202,35 @@ # If file not found, redirect to index.html (for SPA routing) + # Locale shells first: a deep link under /de/ must fall back to the German page, + # not the English one. Rewritten by scripts/build-i18n.js from locales/site.json. + # BEGIN generated locale shells + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^de(/.*)?$ /de/index.html [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^fr(/.*)?$ /fr/index.html [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^es(/.*)?$ /es/index.html [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^uk(/.*)?$ /uk/index.html [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^ru(/.*)?$ /ru/index.html [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^zh(/.*)?$ /zh/index.html [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^ko(/.*)?$ /ko/index.html [L] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^hi(/.*)?$ /hi/index.html [L] + # END generated locale shells + RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/meta\.json$ diff --git a/CHANGELOG.md b/CHANGELOG.md index 933fa57..954be4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,72 @@ # Changelog +## v6.3.0 — Now it speaks your language + +The site is now available in German, French, Spanish, Ukrainian, Russian, +Chinese, Korean and Hindi, alongside English. + +**The language picker is a dropdown of short codes.** Nine full native names do +not fit a phone header, so the control shows the current code and opens a list. +The entries are still ordinary links, and they stay in the document whether the +menu is open or shut. + +**Each language has its own address.** German lives at `/de/`, Spanish at +`/es/`, and so on. That sounds like a detail, but it is the whole point: a page +that only changes language when you click a button has one address for every +language, so a search engine can only ever find one of them, and a link you send +someone opens in whichever language *they* happened to pick last. Now the link +you copy is the page you were reading, in the language you were reading it. + +**The language you asked for wins.** Open `/uk/` and you get Ukrainian, even if +you chose English here yesterday. Your choice is remembered for when you arrive +somewhere that doesn't say — but it never overrules an address you typed or a +link a friend sent you. + +**Nothing redirects you.** If your browser says it prefers Spanish, the site +does not throw you at the Spanish page — it offers. Automatic redirects are how +sites end up invisible to search engines outside one country, and how someone who +deliberately opened the English page keeps getting bounced away from it. + +**The translations were written, not machine-generated.** The landing page, the +key exchange, the safety-code check, the install prompt and every section below +them read as they should in each language - including all thirteen roadmap +entries and the ninety-four bullets under them. That is 623 strings per +language - 5,607 translations in all. + +**The update notice showed up on every page load.** "Back online" describes a +transition - being offline, then not - and on a fresh load no such transition had +happened, so the pill was announcing something that never occurred. It now +appears only when there is actually a problem. It became obvious once switching +language started reloading the page. + +**Build timestamps follow your language.** The update dialog formatted its dates +as 08/28/2026 for everyone; a German reader now sees a German date. + +**Long dashes are now plain hyphens.** Titles and descriptions used a typographic +em dash; they now read "SecureBit.chat - Private, Encrypted Messenger" in every +language. + +**Partner logos were pointing at the wrong place.** Their paths were written +relative to the page, so on `/de/` the browser looked for them under `/de/logo/` +and found nothing. There is now a test that fails on any relative asset path +anywhere in the source, because this is a bug you cannot see while you only ever +open the English page. + +**A search engine can finally see the site.** There was no `robots.txt` and no +`sitemap.xml` at all — now both exist, and the sitemap lists every language with +the right cross-references between them. + +**The people in the animation have local names.** The loop on the front page +shows two contacts joining a mesh. They were mara and tobi everywhere; now they +are lena and jonas in German, lucía and mateo in Spanish, 小红 and 小明 in +Chinese. The point of that animation is "someone you know just joined", and a +foreign-looking name quietly undercuts it. + +**The chat is translated too.** Not just the landing page: the composer, message +states, disappearing and view-once messages, voice notes, file transfers, calls, +group chats and their safety-code ceremony, the connection details panel, and +every error you can hit along the way. + ## v6.2.0 — The interface answers you now Most of this release you will feel rather than see. diff --git a/README.md b/README.md index ac38275..ad5c838 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ No accounts. No servers storing your messages. No installation required. [![License: MIT](https://img.shields.io/badge/License-MIT-f0892a.svg)](LICENSE) -[![Version](https://img.shields.io/badge/version-6.2.0-3ecf8e.svg)](CHANGELOG.md) +[![Version](https://img.shields.io/badge/version-6.3.0-3ecf8e.svg)](CHANGELOG.md) [![PWA](https://img.shields.io/badge/PWA-installable-3ecf8e.svg)](#install-as-an-app) [![Encryption](https://img.shields.io/badge/crypto-ECDH%20P--384%20%C2%B7%20AES--256--GCM-blue.svg)](#security-model) [![Forward secrecy](https://img.shields.io/badge/forward%20secrecy-Double%20Ratchet-3ecf8e.svg)](#forward-secrecy) diff --git a/de/index.html b/de/index.html new file mode 100644 index 0000000..abadf1f --- /dev/null +++ b/de/index.html @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SecureBit.chat - Privater, verschlüsselter Messenger + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/de/manifest.json b/de/manifest.json new file mode 100644 index 0000000..ca80f34 --- /dev/null +++ b/de/manifest.json @@ -0,0 +1,121 @@ +{ + "name": "SecureBit.chat - Privater, verschlüsselter Messenger", + "short_name": "SecureBit", + "description": "P2P-Messenger mit ECDH-, DTLS- und SAS-Absicherung und Kryptografie auf militärischem Niveau", + "start_url": "/de/", + "display": "standalone", + "background_color": "#1a1a1a", + "theme_color": "#ff6b35", + "orientation": "portrait-primary", + "scope": "/", + "lang": "de", + "dir": "ltr", + "categories": [ + "communication", + "security", + "productivity" + ], + "prefer_related_applications": false, + "icons": [ + { + "src": "/logo/icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-152x152.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-180x180.png", + "sizes": "180x180", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-256x256.png", + "sizes": "256x256", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/logo/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/logo/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "shortcuts": [ + { + "name": "Create Channel", + "short_name": "Create", + "description": "Create a new secure channel", + "url": "/de/?action=create", + "icons": [ + { + "src": "/logo/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" + } + ] + }, + { + "name": "Join Channel", + "short_name": "Join", + "description": "Join an existing secure channel", + "url": "/de/?action=join", + "icons": [ + { + "src": "/logo/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" + } + ] + } + ] +} diff --git a/deploy/nginx.conf b/deploy/nginx.conf index 90a88f0..bfbe3b6 100644 --- a/deploy/nginx.conf +++ b/deploy/nginx.conf @@ -54,6 +54,33 @@ http { # (e.g. qr-local.js ~1.2MB) when nothing changed, while still picking up # new releases immediately. ~^/dist/ "no-cache, must-revalidate"; + # The install prompt is a plain browser module and imports the dictionary by a + # bare path, so that import carries no ?v= to bust the cache with. Left on the + # default one-year immutable rule below, a visitor would keep the translations + # they first loaded for a year. + ~^/src/i18n/ "no-cache, must-revalidate"; + # Crawler-facing files must stay re-fetchable: the default below is a + # one-year immutable cache, which would freeze a sitemap for a year. + ~^/robots\.txt$ "public, max-age=3600"; + ~^/sitemap\.xml$ "public, max-age=3600"; + } + + # Which app shell an unmatched navigation falls back to. A request under /de/ must + # land on /de/index.html, not the English one — otherwise every deep link into a + # localized page silently switches language. The entries between the markers are + # rewritten by scripts/build-i18n.js from locales/site.json. + map $uri $sb_shell { + default /index.html; + # BEGIN generated locale shells + ~^/de/ /de/index.html; + ~^/fr/ /fr/index.html; + ~^/es/ /es/index.html; + ~^/uk/ /uk/index.html; + ~^/ru/ /ru/index.html; + ~^/zh/ /zh/index.html; + ~^/ko/ /ko/index.html; + ~^/hi/ /hi/index.html; + # END generated locale shells } # CDN-Cache-Control is read by Cloudflare (and other CDNs) *independently* of the @@ -71,6 +98,7 @@ http { ~^/meta\.json$ "no-store"; ~^/config/ice-servers\.js$ "no-store"; ~^/dist/ "no-store"; + ~^/src/i18n/ "no-store"; } server { @@ -99,13 +127,13 @@ http { # Real asset files must return 404 when missing — never fall back to the # HTML shell, which would be served with the wrong content type and break # module/script loading (e.g. a missing config/ice-servers.js). - location ~* \.(js|mjs|jsx|css|json|map|woff2?|ttf|otf|png|jpe?g|gif|webp|svg|ico|mp3|mp4|webm)$ { + location ~* \.(js|mjs|jsx|css|json|map|xml|txt|woff2?|ttf|otf|png|jpe?g|gif|webp|svg|ico|mp3|mp4|webm)$ { try_files $uri =404; } # SPA-style fallback so unknown navigation routes still load the app shell. location / { - try_files $uri $uri/ /index.html; + try_files $uri $uri/ $sb_shell; } } } diff --git a/dist/app-boot.js b/dist/app-boot.js index f09300b..f621c64 100644 --- a/dist/app-boot.js +++ b/dist/app-boot.js @@ -737,17 +737,17 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _iterableToArrayLimit(r, l) { - var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; - if (null != t) { + var t2 = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (null != t2) { var e, n, i, u, a = [], f = true, o = false; try { - if (i = (t = t.call(r)).next, 0 === l) ; - else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = true) ; + if (i = (t2 = t2.call(r)).next, 0 === l) ; + else for (; !(f = (e = i.call(t2)).done) && (a.push(e.value), a.length !== l); f = true) ; } catch (r2) { o = true, n = r2; } finally { try { - if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; + if (!f && null != t2.return && (u = t2.return(), Object(u) !== u)) return; } finally { if (o) throw n; } @@ -764,8 +764,8 @@ function _slicedToArray(r, e) { function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); - var t = {}.toString.call(r).slice(8, -1); - return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray(r, a) : void 0; } } var entries = Object.entries; @@ -4314,6 +4314,6902 @@ var EnhancedSecureCryptoUtils = class _EnhancedSecureCryptoUtils { } }; +// src/i18n/generated.js +var DEFAULT_LOCALE = "en"; +var SUPPORTED_LOCALES = ["en", "de", "fr", "es", "uk", "ru", "zh", "ko", "hi"]; +var LOCALE_META = { + "en": { + "htmlLang": "en", + "nativeName": "English", + "abbr": "EN", + "dir": "ltr", + "path": "/" + }, + "de": { + "htmlLang": "de", + "nativeName": "Deutsch", + "abbr": "DE", + "dir": "ltr", + "path": "/de/" + }, + "fr": { + "htmlLang": "fr", + "nativeName": "Fran\xE7ais", + "abbr": "FR", + "dir": "ltr", + "path": "/fr/" + }, + "es": { + "htmlLang": "es", + "nativeName": "Espa\xF1ol", + "abbr": "ES", + "dir": "ltr", + "path": "/es/" + }, + "uk": { + "htmlLang": "uk", + "nativeName": "\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430", + "abbr": "UK", + "dir": "ltr", + "path": "/uk/" + }, + "ru": { + "htmlLang": "ru", + "nativeName": "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", + "abbr": "RU", + "dir": "ltr", + "path": "/ru/" + }, + "zh": { + "htmlLang": "zh-Hans", + "nativeName": "\u7B80\u4F53\u4E2D\u6587", + "abbr": "ZH", + "dir": "ltr", + "path": "/zh/" + }, + "ko": { + "htmlLang": "ko", + "nativeName": "\uD55C\uAD6D\uC5B4", + "abbr": "KO", + "dir": "ltr", + "path": "/ko/" + }, + "hi": { + "htmlLang": "hi", + "nativeName": "\u0939\u093F\u0928\u094D\u0926\u0940", + "abbr": "HI", + "dir": "ltr", + "path": "/hi/" + } +}; +var DICTIONARIES = { + "en": { + "language.label": "Language", + "community.title": "Join the future of privacy", + "community.description": "SecureBit grows thanks to its community. Your ideas and feedback shape the future of secure communication - built in the open, with complete ASN.1 validation end-to-end.", + "community.github": "GitHub Repository", + "community.feedback": "Feedback", + "unique.eyebrow": "What sets us apart", + "unique.heading": "Why SecureBit is unique", + "unique.s1.titleTop": "Layered", + "unique.s1.titleBottom": "encryption core", + "unique.s1.collapsed": "Encryption core", + "unique.s1.desc": "ECDH P-384 key exchange, AES-256-GCM payloads, ECDSA signatures and full ASN.1 validation - composed into one hardened pipeline.", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "Pure P2P", + "unique.s2.titleBottom": "WebRTC", + "unique.s2.collapsed": "Pure P2P WebRTC", + "unique.s2.desc": "Messages travel directly between devices over WebRTC. No relay holds your data - the server only helps two peers find each other.", + "unique.s2.tags": [ + "DTLS 1.3", + "No relay" + ], + "unique.s3.titleTop": "Perfect", + "unique.s3.titleBottom": "forward secrecy", + "unique.s3.collapsed": "Forward secrecy", + "unique.s3.desc": "Session keys rotate continuously and are discarded after use, so a single compromised key can never unlock past conversations.", + "unique.s3.tags": [ + "Ephemeral keys", + "Auto-rotate" + ], + "unique.s4.titleTop": "Traffic", + "unique.s4.titleBottom": "obfuscation", + "unique.s4.collapsed": "Traffic obfuscation", + "unique.s4.desc": "Packet sizes and timing are padded and randomized, hiding metadata patterns from anyone watching the wire.", + "unique.s4.tags": [ + "Packet padding", + "Timing jitter" + ], + "unique.s5.titleTop": "Zero data", + "unique.s5.titleBottom": "collection", + "unique.s5.collapsed": "Zero data collection", + "unique.s5.desc": "No accounts, no logs, no message storage. There is nothing on a server to leak, subpoena, or sell.", + "unique.s5.tags": [ + "No accounts", + "No logs" + ], + "partners.eyebrow": "Partners & ecosystem", + "partners.heading": "Trusted by our partners", + "partners.aegis.desc": "Capital partner securing confidential financial communications across its portfolio.", + "partners.aegis.role": "Strategic backer", + "partners.furilabs.desc": "Privacy-first Linux phones that ship SecureBit as a default secure channel.", + "partners.furilabs.role": "Technology partner", + "partners.inviteTitle": "Become a partner", + "partners.inviteDesc": "Building privacy hardware or infrastructure? Let's integrate SecureBit.", + "partners.inviteCta": "Start a conversation", + "roadmap.eyebrow": "Development Roadmap", + "roadmap.heading": "The evolution of SecureBit", + "roadmap.subheading": "From the first prototype to a quantum-resistant, decentralized network - with complete ASN.1 validation at every layer.", + "roadmap.progress": "{shipped} of {total} milestones shipped", + "roadmap.upcoming": "{upcoming} on the way", + "roadmap.keyFeatures": "Key features", + "roadmap.status.released": "Released", + "roadmap.status.current": "Current", + "roadmap.status.dev": "In development", + "roadmap.status.planned": "Planned", + "roadmap.status.research": "Research", + "hero.headlineTop": "A direct line", + "hero.headlineBottom": "only you two can read.", + "hero.subheading": "Keys are generated on your device and exchanged peer-to-peer. No accounts, no servers storing your messages.", + "hero.diagramAlt": "A direct encrypted line to one peer, with two more peers joining the mesh", + "intro.createTitle": "Create a new channel", + "intro.createDesc": "Your device generates the keys and a one-time invitation. Nothing touches a server.", + "intro.createCta": "Generate keys & invitation", + "intro.joinTitle": "Join a channel", + "intro.scanTitle": "Scan QR with camera", + "intro.scanSubtitle": "Fastest - point at your peer's screen", + "intro.orPasteCode": "or paste code", + "intro.pastePlaceholder": "Paste invitation code here\u2026", + "intro.connect": "Connect", + "intro.connecting": "Processing\u2026", + "roadmap.r1.title": "Start of Development", + "roadmap.r1.sub": "Idea, prototype, and infrastructure setup", + "roadmap.r1.date": "Early 2025", + "roadmap.r1.features": [ + "Concept and requirements formation", + "Stack selection: WebRTC, P2P, cryptography", + "First messaging prototypes", + "Repository creation and CI", + "Basic encryption architecture", + "UX/UI design" + ], + "roadmap.r2.title": "Alpha Release", + "roadmap.r2.sub": "First public alpha: basic chat and key exchange", + "roadmap.r2.date": "Spring 2025", + "roadmap.r2.features": [ + "Basic P2P messaging via WebRTC", + "Simple E2E encryption (demo scheme)", + "Stable signaling and reconnection", + "Minimal UX for testing", + "Feedback collection from early testers" + ], + "roadmap.r3.title": "Security Hardened", + "roadmap.r3.sub": "Security strengthening and stable branch release", + "roadmap.r3.date": "Summer 2025", + "roadmap.r3.features": [ + "ECDH/ECDSA implementation in production", + "Perfect Forward Secrecy and key rotation", + "Improved authentication checks", + "File encryption and large payload transfers", + "Audit of basic cryptoprocesses" + ], + "roadmap.r4.title": "Scaling & Stability", + "roadmap.r4.sub": "Network scaling and stability improvements", + "roadmap.r4.date": "Fall 2025", + "roadmap.r4.features": [ + "Optimization of P2P connections and NAT traversal", + "Reconnection mechanisms and message queues", + "Reduced battery consumption on mobile", + "Multi-device synchronization support", + "Monitoring and logging tools for developers" + ], + "roadmap.r5.title": "Privacy-first Release", + "roadmap.r5.sub": "Focus on privacy: minimizing metadata", + "roadmap.r5.date": "Winter 2025", + "roadmap.r5.features": [ + "Metadata protection and fingerprint reduction", + "Experiments with onion routing and DHT", + "Options for anonymous connections", + "Preparation for open code audit", + "Improved user verification processes" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "18-layer military-grade cryptography with complete ASN.1 validation", + "roadmap.r6.date": "Late 2025", + "roadmap.r6.features": [ + "ECDH + DTLS + SAS triple-layer security", + "ECDH P-384 + AES-GCM 256-bit encryption", + "DTLS fingerprint verification", + "SAS (Short Authentication String) verification", + "Perfect Forward Secrecy with key rotation", + "Enhanced MITM attack prevention", + "Complete ASN.1 DER validation", + "OID and EC point verification", + "SPKI structure validation", + "P2P WebRTC architecture", + "Metadata protection", + "100% open source code" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "Native desktop apps for Windows, macOS, and Linux", + "roadmap.r7.date": "Early 2026", + "roadmap.r7.features": [ + "Windows desktop app (Tauri v2)", + "macOS desktop app (Tauri v2)", + "Linux AppImage support (Tauri v2)", + "Real-time notifications", + "Automatic reconnection", + "Cross-device synchronization", + "Improved UX/UI", + "Support for files up to 100MB" + ], + "roadmap.r8.title": "Secure Voice & Calls", + "roadmap.r8.sub": "Encrypted voice messages, audio calls, and video calls", + "roadmap.r8.date": "Early 2026", + "roadmap.r8.features": [ + "End-to-end encrypted voice messages", + "1:1 encrypted audio calls (WebRTC)", + "1:1 encrypted video calls (WebRTC)", + "Perfect Forward Secrecy for live media", + "SRTP/DTLS-protected media streams", + "In-call SAS verification", + "Call notifications and auto-reconnection", + "Low-latency P2P media" + ], + "roadmap.r9.title": "Group Communications", + "roadmap.r9.sub": "Group chats with preserved privacy", + "roadmap.r9.date": "Now", + "roadmap.r9.features": [ + "P2P group chats up to 8 participants", + "Mesh delivery with signed relay fallback", + "One group safety code, compared by everyone", + "Commit-then-reveal ceremony against code grinding", + "Per-group identity keys, ephemeral by design", + "Signed membership with epoch ordering", + "Signed messages, so a split transcript is provable", + "No server, no shared group key, no history" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "Native mobile apps for iOS and Android", + "roadmap.r10.date": "Q2 2027", + "roadmap.r10.features": [ + "iOS native app (Swift/SwiftUI)", + "Android native app (Kotlin/Jetpack Compose)", + "PWA support for mobile browsers", + "Real-time push notifications", + "Battery optimization", + "Mobile-optimized UX/UI", + "Offline message queuing", + "Biometric authentication" + ], + "roadmap.r11.title": "Quantum-Resistant Edition", + "roadmap.r11.sub": "Protection against quantum computers", + "roadmap.r11.date": "Q4 2027", + "roadmap.r11.features": [ + "Post-quantum cryptography CRYSTALS-Kyber", + "SPHINCS+ digital signatures", + "Hybrid scheme: classic + PQ", + "Quantum-safe key exchange", + "Updated hashing algorithms", + "Migration of existing sessions", + "Compatibility with v5.x", + "Quantum-resistant protocols" + ], + "roadmap.r12.title": "Decentralized Network", + "roadmap.r12.sub": "Fully decentralized network", + "roadmap.r12.date": "2028", + "roadmap.r12.features": [ + "Node mesh network", + "DHT for peer discovery", + "Built-in onion routing", + "Tokenomics and node incentives", + "Governance via DAO", + "Interoperability with other networks", + "Cross-platform compatibility", + "Self-healing network" + ], + "roadmap.r13.title": "AI Privacy Assistant", + "roadmap.r13.sub": "AI for privacy and security", + "roadmap.r13.date": "2028+", + "roadmap.r13.features": [ + "Local AI threat analysis", + "Automatic MITM detection", + "Adaptive cryptography", + "Personalized security recommendations", + "Zero-knowledge machine learning", + "Private AI assistant", + "Predictive security", + "Autonomous attack protection" + ], + "handshake.step1": "Generating ECDH P-384 key pair", + "handshake.step2": "Deriving verification code", + "handshake.step3": "Pinning Perfect Forward Secrecy", + "handshake.securingTitle": "Securing your channel", + "handshake.answerTitle": "Building your answer", + "handshake.securingDesc": "Forging keys strong enough to resist tampering.", + "handshake.shareTitle": "Share your invitation", + "handshake.sendAnswerTitle": "Send back your answer", + "handshake.shareDesc": "Show the QR or send the code to your peer. It is one-time and expires shortly.", + "handshake.sendAnswerDesc": "Give this answer to the channel creator so they can finish the handshake.", + "handshake.establish": "Establish connection", + "handshake.thenReceive": "Then receive the answer your peer sends back", + "handshake.pasteAnswerPlaceholder": "Paste peer's answer code\u2026", + "handshake.answerSentNote": "Send this answer to the creator, then wait - the chat opens once they connect.", + "handshake.qrHint": "Keep this open until your peer captures the code.", + "handshake.qrHintFrames": "The handshake is split across {frames} frames - keep this open until your peer captures all of them.", + "verify.title": "Security verification", + "verify.desc": "Compare this safety code with your peer over a separate channel (voice / in person), then type it to unlock the chat.", + "verify.enterLabel": "Enter the verified code", + "verify.placeholder": "Type code here", + "verify.confirm": "Confirm code", + "verify.confirmed": "Confirmed", + "verify.mismatch": "Don't match", + "verify.yours": "Your confirmation", + "verify.peer": "Peer confirmation", + "verify.pending": "Pending", + "verify.waiting": "Waiting for code\u2026", + "verify.verified": "Channel verified", + "verify.bothConfirmed": "Both parties confirmed. Opening the secure chat\u2026", + "pwa.bannerTitle": "Install SecureBit.chat", + "pwa.bannerDesc": "Get the native app experience with enhanced security", + "pwa.install": "Install", + "pwa.dismiss": "Dismiss", + "pwa.close": "Close", + "pwa.iosTitle": "Install on iOS", + "pwa.iosStep1": "Tap the Share button", + "pwa.iosStep1Hint": "Usually at the bottom of Safari", + "pwa.iosStep2": 'Find "Add to Home Screen"', + "pwa.iosStep2Hint": "Scroll down in the share menu", + "pwa.iosStep3": 'Tap "Add"', + "pwa.iosStep3Hint": "Confirm to install SecureBit.chat", + "pwa.genericTitle": "Install SecureBit", + "pwa.genericDesc": "Your browser handles installs its own way. Pick the steps that match yours.", + "pwa.gotIt": "Got it", + "pwa.installedTitle": "App Installed!", + "pwa.installedIos": "iOS App installed! Open from home screen.", + "pwa.installedGeneric": "SecureBit.chat is now on your device", + "pwa.anytimeTitle": "Install Anytime", + "pwa.anytimeDesc": "You can still install SecureBit.chat from your browser's menu for the best experience.", + "pwa.ok": "OK", + "step.open": "Step 1 \xB7 open a channel", + "step.exchange": "Step 2 \xB7 exchange", + "step.verification": "Step 3 \xB7 verification", + "action.create": "Create", + "action.join": "Join", + "action.back": "Back", + "action.copy": "Copy", + "action.copied": "Copied", + "action.scan": "Scan", + "action.downloadDesktop": "Download desktop app", + "action.advancedSettings": "Advanced settings", + "cred.offerTag": "offer \xB7 or copy text", + "cred.answerTag": "answer \xB7 or copy text", + "cred.reveal": "Click to reveal - keep this code private", + "qr.title": "Scan QR code", + "qr.subtitle": "Point your camera at their QR", + "qr.scanning": "Scanning\u2026", + "qr.hint": "Hold steady until all parts are captured. Camera access is local - nothing is uploaded.", + "mesh.you": "you", + "mesh.peer": "peer \xB7 session 1", + "mesh.joined2": "mara joined \xB7 +2", + "mesh.joined3": "tobi joined \xB7 +3", + "ice.title": "Network settings", + "ice.subtitle": "Configured locally - never shared with your peer", + "ice.intro": "SecureBit uses public STUN servers by default to negotiate the peer-to-peer link. Point it at your own STUN/TURN if you self-host.", + "ice.publicTitle": "Public servers (default)", + "ice.publicDesc": "Zero-config. Good for most users.", + "ice.customTitle": "My own STUN/TURN servers", + "ice.customDesc": "Up to {max} servers.", + "ice.turnNote": "A TURN relay sees both peers' IP and traffic timing - but never message contents, which stay end-to-end encrypted. Prefer ", + "ice.turnNoteTls": " (TLS).", + "ice.test": "Test servers", + "ice.testing": "Testing\u2026", + "ice.relayTitle": "Relay-only mode", + "ice.relayBadge": "MAX PRIVACY", + "ice.relayDesc": "Routes all traffic through TURN so your IP is never exposed to the peer. Requires a TURN server.", + "ice.relayWarning": "Relay-only is enabled but no TURN server is configured. The connection will not be able to start.", + "ice.persist": "Save on this device", + "ice.persistDesc": "Stored encrypted in this browser. Leave off to use only for this session.", + "ice.forget": "Forget saved", + "ice.cancel": "Cancel", + "ice.apply": "Apply", + "ice.errUnavailable": "WebRTC is not available in this browser", + "ice.errInvalid": "Invalid server configuration", + "update.title": "Update available", + "update.desc": "A newer version of SecureBit has been detected.", + "update.currentVersion": "Current version", + "update.newVersion": "New version", + "update.now": "Update now", + "update.later": "Later", + "update.unknown": "N/A", + "update.stepSaving": "Saving data...", + "update.stepSwCaches": "Clearing Service Worker caches...", + "update.stepSwUnregister": "Unregistering Service Workers...", + "update.stepBrowserCache": "Clearing browser cache...", + "update.stepVersion": "Updating version...", + "update.stepReload": "Reloading application...", + "update.error": "Update error. Please refresh the page manually (Ctrl+F5 or Cmd+Shift+R)", + "update.confirmSkip": "New version available. Update is recommended for security and stability. Continue without update?", + "offline.backOnline": "Back online", + "offline.mode": "Offline mode", + "offline.dismiss": "Dismiss", + "offline.lostTitle": "Connection lost", + "offline.lostDesc": "SecureBit is now in offline mode. Some features are limited, but your data stays safe.", + "offline.point1": "Your session and keys are preserved", + "offline.point2": "No data is stored on servers", + "offline.point3": "Messages & files sync when you reconnect", + "offline.continue": "Continue offline", + "offline.restoredTitle": "When you reconnect", + "offline.restoredDesc": "A dropped connection costs you nothing. SecureBit queues everything locally and resumes the encrypted session the instant you're back online.", + "offline.r1Title": "Your messages get delivered", + "offline.r1Desc": "Everything you wrote while offline is sent to your contact automatically.", + "offline.r2Title": "Files finish transferring", + "offline.r2Desc": "Uploads resume from where they stopped - no need to resend.", + "offline.r3Title": "Their messages & files arrive", + "offline.r3Desc": "Whatever your contact sent during the outage is delivered to you in order.", + "offline.r4Title": "Nothing is lost", + "offline.r4Desc": "After reconnect there's no gap - the conversation continues exactly where it paused.", + "offline.gotIt": "Got it", + "qr.showTitle": "Show QR code", + "qr.showSubtitle": "Full-screen \xB7 let your peer scan", + "qr.showSubtitleFrames": "Full-screen \xB7 let your peer scan all {frames} frames", + "notify.enabledBody": "Notifications enabled! You will receive alerts for new messages.", + "notify.workingBody": "Notifications are working! You will receive alerts for new messages.", + "pw.label": "Password input", + "pw.placeholder": "Enter password...", + "pw.decrypt": "Decrypt", + "pw.cancel": "Cancel", + "file.title": "File transfers", + "file.drop": "Drag & drop files here", + "file.dropHint": "Encrypted end-to-end before transfer \xB7 up to 100 MB", + "file.browse": "Browse device", + "file.incoming": "Incoming file request", + "file.accept": "Accept", + "file.reject": "Reject", + "file.download": "Download", + "file.notReady": "Connection not ready", + "file.tooLarge": "File too large", + "file.typeNotAllowed": "File type not allowed", + "file.maxConcurrent": "Maximum concurrent transfers", + "file.gone": "This file is no longer available for download.", + "call.incoming": "Incoming call", + "call.incomingVideo": "Incoming video call", + "call.encrypted": "Encrypted call", + "call.encryptedShort": "Encrypted", + "call.peer": "Secure peer", + "call.connecting": "Connecting\u2026", + "call.ringing": "Ringing\u2026", + "call.accept": "Accept", + "call.decline": "Decline", + "call.end": "End call", + "call.camera": "Camera", + "call.cameraOff": "Camera off", + "call.peerCameraOff": "Peer's camera is off", + "call.flipCamera": "Flip camera", + "call.addVideo": "Add video", + "call.video": "Video", + "call.muted": "Muted", + "call.expand": "Expand", + "call.minimize": "Minimize", + "call.quality": "Connection quality", + "call.qualityExcellent": "Excellent", + "call.videoPrefix": "Video \xB7 ", + "call.voicePrefix": "Voice \xB7 ", + "group.new": "New group", + "group.create": "Create group", + "group.join": "Join group", + "group.name": "Group name", + "group.nameTooLong": "The group name is too long.", + "group.capacity": "Up to {max} people, peer to peer. Everyone will compare one safety code before the group opens.", + "group.invite": "Invite", + "group.inviteMore": "Invite more members", + "group.invitePeople": "Invite {count} people", + "group.invitation": "Group invitation", + "group.addMembers": "Add members", + "group.roomFor": "Room for {remaining} more. Everyone will compare a new group code once they join.", + "group.membersCount": "{count} members", + "group.member": "Member", + "group.members": "Members", + "group.remove": "Remove {name}", + "group.message": "Message {name}", + "group.leave": "Leave", + "group.leaveThis": "Leave this group", + "group.cancel": "Cancel group", + "group.close": "Close", + "group.cancelBtn": "Cancel", + "group.decline": "Decline", + "group.working": "Working\u2026", + "group.sasTitle": "Group safety code", + "group.sasEveryone": "Everyone sees this code", + "group.sasCompare": "Compare the group code with every member to open this group.", + "group.sasReadAloud": "Read these digits aloud to ", + "group.sasWarning": "If even one member reads a different code, someone is sitting between you. Cancel the group - do not confirm.", + "group.confirmFirst": "Confirm the group code first", + "group.codeSuffix": " \xB7 code {code}", + "group.exchangingNonces": "Exchanging nonces\u2026", + "group.waitingCommit": "Waiting for every member to commit\u2026", + "group.waitingJoin": "Waiting for the other members to join\u2026", + "group.emptyChat": "Nothing here yet. Messages are signed by their sender and travel over each member's own encrypted link.", + "group.noVerified": "No verified chats yet. Open a 1:1 chat and compare its safety code first - a group is built out of connections you have already checked.", + "group.noMoreToAdd": "No other verified chats to add. Open a 1:1 chat and compare its safety code first.", + "group.directLink": "Direct peer-to-peer link", + "group.noDirectLink": "No direct link yet - messages are relayed by another member while one is being built", + "group.relayNote": "Some members have no direct link to you yet. Their messages travel through another member, who can see that you are talking but cannot read past the signature or change what you said. The group keeps trying to connect them directly.", + "group.relayOnlyOff": "Relay-only mode is off, so each member connects to you directly and learns your IP address - including members somebody else invited. Turn it on in network settings if that matters here.", + "group.memberOffline": "{name} is offline and will not receive messages. They are still a member - removing them re-keys the group.", + "group.joinNote": "Other members will learn your presence in this group. There is no message history to catch up on - a group starts empty.", + "group.inviteSentNote": "The group keeps working until they accept. There is no history for them to catch up on - they will only see what is sent from now on.", + "group.errNotCreated": "Group not created", + "group.errNobodyAccepted": "Nobody accepted the invitation in time.", + "group.errNothingSent": "Nothing was sent and nothing was verified. Close this and try again once everyone is connected.", + "group.errNotFormed": "This group could not be formed.", + "group.errFull": "This group is full.", + "group.errInviteFailed": "The invitation could not be sent - that chat is not connected.", + "group.errNoMemberList": "The group owner never sent the member list.", + "group.errUnsignedList": "The member list was not signed by the group owner. Do not retry - tell them.", + "group.errNotOwner": "Someone other than the group owner tried to change the members.", + "hdr.tagline": "End-to-end encrypted", + "hdr.netSettings": "Advanced network settings", + "hdr.netSettingsTitle": "Advanced network settings (STUN/TURN)", + "hdr.disconnect": "Disconnect", + "status.connected": "Connected", + "status.connecting": "Connecting...", + "status.notConnected": "Not connected", + "status.reconnecting": "Reconnecting...", + "status.retrying": "Retrying...", + "status.verifying": "Verifying...", + "status.peerDisconnected": "Peer disconnected", + "sec.replayProtection": "Replay Protection", + "sec.messageIntegrity": "Message Integrity (HMAC)", + "sec.forwardSecrecy": "Perfect Forward Secrecy", + "sec.metadataProtection": "Metadata Protection", + "sec.trafficObfuscation": "Traffic Obfuscation", + "sec.realTests": "Real Cryptographic Tests", + "sec.simulatedData": "Simulated Data", + "sec.testPassed": "Test passed", + "sec.testFailed": "Test failed or unavailable", + "sec.verificationDone": "Real cryptographic verification completed", + "sec.verificationInProgress": "Security verification in progress...", + "sec.verificationWait": "Security verification in progress...\nPlease wait for real-time cryptographic verification to complete.", + "sec.verificationUnavailable": "Security verification not available", + "chat.placeholder": "Type an encrypted message\u2026", + "chat.send": "Send message", + "chat.sendFiles": "Send files", + "chat.hideFiles": "Hide files", + "chat.recordVoice": "Record voice message", + "chat.sendVoice": "Send voice message", + "chat.discard": "Discard", + "chat.codeBlock": "Send as a code block (expands the input)", + "chat.codeHint": "Code snippet \xB7 formatting preserved \xB7 \u2318\u21B5 to send", + "chat.viewOnce": "View once", + "chat.viewOnceTitle": "View once - vanishes after the peer reads it", + "chat.viewOncePrefix": "View once \xB7 ", + "chat.viewOnceTap": "View once \xB7 tap to reveal", + "chat.viewedOnce": "Viewed once", + "chat.disappearing": "Disappearing message - deletes on both sides", + "chat.disappearAfter": "Disappear after", + "chat.visibleFor": "Visible for", + "chat.timerPrefix": "Timer \xB7 ", + "chat.expired": "This message has expired", + "chat.deleteForEveryone": "Delete for everyone", + "chat.sending": "Sending", + "chat.delivered": "Delivered", + "chat.notSent": "Not sent", + "chat.notSentReason": "Not sent - the secure channel is not ready. Reconnect to continue.", + "chat.encrypted": "Encrypted", + "chat.decrypted": "Decrypted", + "chat.encryptedOnDevice": "Encrypted on your device", + "chat.uploading": "Uploading", + "chat.downloading": "Downloading", + "chat.transferring": "Transferring\u2026", + "chat.copied": "Copied!", + "chat.collapse": "Collapse", + "chat.closeMenu": "Close menu", + "chat.newChat": "New chat", + "chat.newGroup": "New group", + "chat.createGroup": "Create a group", + "chat.groupChats": "Group chats", + "chat.secureChat": "Secure chat", + "chat.nameThis": "Name this chat", + "chat.rename": "Rename chat (local only)", + "chat.renameHint": "Double-click to rename", + "chat.localLabel": "Local label \xB7 stored only on this device", + "chat.setStatus": "Set your status", + "chat.yourStatusPrefix": "Your status - ", + "chat.meshHint": "Up to 8 peers \xB7 P2P mesh", + "chat.offline": "Offline", + "chat.noNetwork": "No network \xB7 reconnecting", + "chat.startVoiceCall": "Start encrypted voice call", + "chat.startVideoCall": "Start encrypted video call", + "chat.verifyForCalls": "Verify the session to enable calls", + "chat.e2eeNote": "Every message is end-to-end encrypted on your device before it leaves.", + "chat.peersOnly": "Sent end-to-end to connected peers only - never stored on a server.", + "flow.invitationCreated": "Secure invitation created", + "flow.invitationCreatedBang": "Secure invitation created and encrypted!", + "flow.responseCreated": "Secure response created", + "flow.responseCreatedBang": "Secure response created!", + "flow.sendInvitation": "Send the invitation code to your interlocutor via a secure channel (voice call, SMS, etc.).", + "flow.sendResponse": "Send the response code to the initiator via a secure channel or let them scan the QR code below.", + "flow.sendEncryptedCode": "Send the encrypted code", + "flow.sendTheResponse": "Send the response", + "flow.pasteOrWrite": "Paste or write code\u2026", + "flow.processingInvitation": "Processing the secure invitation...", + "flow.processingResponse": "Processing the secure response...", + "flow.finalizing": "Finalizing the secure connection...", + "flow.channelEstablished": "Secure channel established", + "flow.channelReady": "Secure channel is ready", + "flow.restoring": "Restoring connection\u2026", + "flow.invitationCaptured": "Invitation captured.", + "err.needInvitation": "You need to insert the invitation code from your interlocutor.", + "err.needResponse": "You need to insert the response code from your interlocutor.", + "err.responseFormat": "Invalid response format - please check the code", + "err.responseNoKey": "Invalid response code - missing or corrupted cryptographic key. Please check the code and try again.", + "err.responseNoSignKey": "Invalid response code - missing signature verification key. Please check the code and try again.", + "err.responseOutdated": "Response data is outdated - please use a fresh invitation", + "err.setupError": "Connection setup error", + "err.notReady": "Connection not ready", + "err.securityBreach": "Security breach detected - connection rejected", + "err.securityValidation": "Security validation failed - possible attack detected", + "err.retiredQr": "This QR code uses a retired format that could not transfer the invitation. Ask your peer to generate a new one, or use copy/paste.", + "err.compressedQrNote": "Compressed QR may omit SDP for brevity. Use copy/paste if connection fails.", + "err.inviteNotConnected": "The invitation could not be sent. That chat is not connected right now.", + "err.inviteNotConnectedRetry": "The invitation could not be sent. That chat is not connected right now - reopen it and try again.", + "err.nobodyAccepted": "Nobody accepted the invitation. The group is unchanged.", + "err.noAudio": "No audio captured - check microphone permission and try again.", + "err.voiceNeedsConnection": "Voice message needs an active secure connection. Reconnect and try again.", + "err.voiceRestoring": "Restoring the connection - try sending the voice message again in a moment.", + "err.fileTooLarge": "File too large", + "sas.safetyNumber": "Safety number", + "sas.incorrect": "Incorrect code. Check it with your peer and try again.", + "sas.noMatch": "The codes do not match", + "sas.makeSure": "Make sure the codes match exactly.", + "sas.tooManyAttempts": "Too many incorrect attempts. Session reset for safety.", + "sas.verificationFailed": "Verification failed", + "sas.verified": "Verified \xB7 Perfect Forward Secrecy", + "sas.runVerification": "Run security verification", + "sec.panelTitle": "Network & crypto details", + "sec.security": "Security", + "sec.transport": "Transport", + "sec.keyExchange": "Key exchange", + "sec.allEnabled": "All security features enabled by default", + "sec.realTimeNote": "Real-time verification using actual cryptographic functions - no mock data.", + "sec.simulatedWarning": "Warning: connection may not be fully established - values may be simulated.", + "dl.title": "Download SecureBit", + "dl.free": "Free \xB7 open source", + "dl.soon": "Mobile (iOS, Android) and browser extensions (Chrome, Firefox, Opera) are coming soon.", + "chatHdr.chat": "Chat", + "chatHdr.chats": "Chats", + "chatHdr.newChat": "+ New", + "chatHdr.secure": "Secure", + "chatHdr.p2pSub": "P2P \xB7 end-to-end encrypted", + "chatHdr.save": "Save", + "chatHdr.close": "Close", + "chatHdr.expand": "Expand", + "chatHdr.you": "You", + "chatHdr.qrCode": "QR code", + "chat.disconnected": "Disconnected", + "call.mute": "Mute", + "call.endShort": "End", + "group.add": "Add", + "group.send": "Send", + "sec.pfsShort": "Perfect Forward Secrecy", + "sec.cipher": "Cipher", + "chat.close": "Close", + "file.needConnection": "File transfer needs an open connection", + "presence.available": "Available", + "presence.away": "Away", + "presence.busy": "Busy", + "presence.offline": "Offline", + "presence.invisible": "Invisible", + "presence.availableDesc": "Online and reachable", + "presence.awayDesc": "Idle \xB7 stepped away", + "presence.busyDesc": "Do not disturb", + "presence.invisibleDesc": "Appear offline to peers", + "presence.online": "Online", + "conn.p2p": "P2P \xB7 connected", + "conn.verifying": "Verifying\u2026", + "conn.connecting": "Connecting\u2026", + "conn.reconnecting": "Reconnecting\u2026", + "conn.peerDisconnected": "Peer disconnected", + "conn.disconnected": "Disconnected", + "chat.defaultLabel": "Chat", + "groupPhase.forming": "Forming\u2026", + "groupPhase.commitments": "Exchanging commitments\u2026", + "groupPhase.revealing": "Revealing\u2026", + "groupPhase.compare": "Compare the group code", + "groupPhase.ready": "Group ready", + "groupPhase.failed": "Group failed", + "call.qualityGood": "Good", + "call.qualityFair": "Fair", + "call.qualityWeak": "Weak", + "msg.code": "Code", + "msg.timer": "Timer", + "msg.voice": "Voice", + "msg.play": "Play", + "msg.sent": "Sent", + "msg.read": "Read", + "report.title": "Real-time security verification", + "report.active": "Active", + "report.testsPassed": "Tests passed", + "report.verifiedAt": "Verified at", + "report.source": "Source", + "secTest.verifyECDHKeyExchange": "ECDH key exchange", + "secTest.verifyECDSASignatures": "ECDSA digital signatures", + "secTest.verifyEncryption": "AES-GCM encryption", + "secTest.verifyMessageIntegrity": "Message integrity", + "secTest.verifyPerfectForwardSecrecy": "Perfect forward secrecy", + "secTest.verifyPFS": "Perfect forward secrecy", + "secTest.verifyReplayProtection": "Replay protection", + "secTest.verifyDTLSFingerprint": "DTLS fingerprint", + "secTest.verifySASVerification": "SAS verification", + "secTest.verifyMetadataProtection": "Metadata protection", + "secTest.verifyTrafficObfuscation": "Traffic obfuscation", + "secTest.verifyPacketPadding": "Packet padding", + "secTest.verifyNestedEncryption": "Nested encryption", + "secTest.verifyNonExtractableKeys": "Non-extractable keys", + "secTest.verifyRateLimiting": "Rate limiting", + "secTest.verifyMutualAuth": "Mutual authentication", + "secTest.verifyAuthProof": "Authentication proof", + "secTest.verifyEnhancedValidation": "Enhanced validation", + "secTest.verifyAdvancedFeatures": "Advanced features", + "secTest.verifySignature": "Signature check", + "secDetail.Security system initializing...": "Security system initializing...", + "secDetail.Nested encryption active": "Nested encryption active", + "secDetail.Nested encryption failed": "Nested encryption failed", + "secDetail.Packet padding active": "Packet padding active", + "secDetail.Packet padding failed": "Packet padding failed", + "secDetail.Advanced features active": "Advanced features active", + "secDetail.Advanced features failed": "Advanced features failed", + "secDetail.No encryption key available": "No encryption key available", + "secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM encryption/decryption working correctly", + "secDetail.No ECDH key pair available": "No ECDH key pair available", + "secDetail.Key derivation failed": "Key derivation failed", + "secDetail.No ECDSA key pair available": "No ECDSA key pair available", + "secDetail.ECDSA digital signatures working correctly": "ECDSA digital signatures working correctly", + "secDetail.MAC key not available or invalid": "MAC key not available or invalid", + "secDetail.Rate limiter did not block a message over the limit": "Rate limiter did not block a message over the limit", + "secDetail.Rate limiter is not available": "Rate limiter is not available", + "secDetail.Replay protection is working correctly": "Replay protection is working correctly", + "secDetail.Replay protection not enabled": "Replay protection not enabled", + "secDetail.SAS code not available": "SAS code not available", + "secDetail.SAS verification code is valid and available": "SAS verification code is valid and available", + "secDetail.Traffic obfuscation is working correctly": "Traffic obfuscation is working correctly", + "secDetail.Traffic obfuscation not enabled": "Traffic obfuscation not enabled", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "No non-extractable ephemeral ECDH key pair for this session", + "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": "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", + "msg.pause": "Pause", + "msg.failed": "Failed", + "groupErr.timeout": "A member stopped responding before the code was ready.", + "groupErr.keyMismatch": "A member's key did not match the identity claimed for it.", + "groupErr.revealMismatch": "A member's revealed value did not match what they committed to.", + "groupErr.commitChanged": "A member changed their commitment part-way through.", + "groupErr.missingKey": "A member was listed whose key never arrived.", + "groupErr.outsider": "A frame arrived from someone outside the group.", + "groupErr.limit": "A group is limited to eight members.", + "groupErr.tooLarge": "A message was too large to send to the group.", + "fileType.text": "Plain text", + "fileType.images": "Images", + "fileType.archives": "Archives", + "fileType.voice": "Voice messages", + "fileType.unsupported": "Unsupported", + "qrScan.title": "Scan QR Code", + "qrScan.auto": "Auto Mode", + "qrScan.reset": "Reset", + "qrScan.autoScroll": "Auto-scrolling enabled", + "qrScan.starting": "Starting camera...", + "qrScan.point": "Point camera at QR code", + "qrScan.tapFocus": "Tap screen to focus", + "qrScan.focusing": "Focusing...", + "iceErr.notArray": "Server list must be an array", + "iceErr.invalidJson": "Invalid JSON", + "iceErr.tooMany": "Too many servers (max {max})", + "iceErr.invalidEntry": "{label}: invalid entry", + "iceErr.urlCount": "{label}: between 1 and {max} URLs required", + "iceErr.turnCreds": "{label}: TURN servers usually require a username and credential", + "iceUrl.notString": "URL must be a string", + "iceUrl.empty": "URL is empty", + "iceUrl.tooLong": "URL is too long", + "iceUrl.badChars": "URL contains invalid characters", + "iceUrl.badScheme": "URL must start with stun:, stuns:, turn: or turns:", + "iceUrl.badQuery": "URL has an invalid query", + "iceUrl.noHost": "URL is missing a host", + "iceUrl.badHost": "URL has an invalid host or port", + "iceUrl.badTransport": "URL query must be transport=udp or transport=tcp", + "msg.off": "Off", + "file.consentUnavailable": "User consent unavailable", + "secLevel.MAXIMUM": "MAXIMUM", + "secLevel.INITIALIZING": "INITIALIZING", + "secLevel.ERROR": "ERROR", + "secLevel.UNKNOWN": "UNKNOWN", + "status.error": "Error", + "offline.disconnect": "Disconnect", + "offline.learnMore": "Learn more", + "pwa.installApp": "Install App", + "chat.onWeb": "You're on Web" + }, + "de": { + "language.label": "Sprache", + "community.title": "Gestalten Sie die Zukunft der Privatsph\xE4re mit", + "community.description": "SecureBit w\xE4chst durch seine Community. Ihre Ideen und Ihr Feedback pr\xE4gen die Zukunft sicherer Kommunikation - offen entwickelt, mit vollst\xE4ndiger ASN.1-Validierung von Ende zu Ende.", + "community.github": "GitHub-Repository", + "community.feedback": "Feedback", + "unique.eyebrow": "Was uns unterscheidet", + "unique.heading": "Warum SecureBit einzigartig ist", + "unique.s1.titleTop": "Mehrschichtiger", + "unique.s1.titleBottom": "Verschl\xFCsselungskern", + "unique.s1.collapsed": "Verschl\xFCsselungskern", + "unique.s1.desc": "ECDH-P-384-Schl\xFCsselaustausch, AES-256-GCM-Nutzdaten, ECDSA-Signaturen und vollst\xE4ndige ASN.1-Validierung - zu einer geh\xE4rteten Pipeline verbunden.", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "Reines P2P", + "unique.s2.titleBottom": "\xFCber WebRTC", + "unique.s2.collapsed": "Reines P2P \xFCber WebRTC", + "unique.s2.desc": "Nachrichten laufen \xFCber WebRTC direkt von Ger\xE4t zu Ger\xE4t. Kein Relay h\xE4lt Ihre Daten - der Server hilft zwei Teilnehmern nur, sich zu finden.", + "unique.s2.tags": [ + "DTLS 1.3", + "Kein Relay" + ], + "unique.s3.titleTop": "Perfekte", + "unique.s3.titleBottom": "Forward Secrecy", + "unique.s3.collapsed": "Forward Secrecy", + "unique.s3.desc": "Sitzungsschl\xFCssel wechseln fortlaufend und werden nach Gebrauch verworfen. Ein einzelner kompromittierter Schl\xFCssel \xF6ffnet damit niemals fr\xFChere Gespr\xE4che.", + "unique.s3.tags": [ + "Ephemere Schl\xFCssel", + "Automatischer Wechsel" + ], + "unique.s4.titleTop": "Verschleierung", + "unique.s4.titleBottom": "des Datenverkehrs", + "unique.s4.collapsed": "Verkehrsverschleierung", + "unique.s4.desc": "Paketgr\xF6\xDFen und Zeitabst\xE4nde werden aufgef\xFCllt und zuf\xE4llig ver\xE4ndert. Metadatenmuster bleiben damit verborgen, auch f\xFCr jemanden, der die Leitung beobachtet.", + "unique.s4.tags": [ + "Paket-Padding", + "Zeit-Jitter" + ], + "unique.s5.titleTop": "Keinerlei", + "unique.s5.titleBottom": "Datenerfassung", + "unique.s5.collapsed": "Keine Datenerfassung", + "unique.s5.desc": "Keine Konten, keine Protokolle, keine gespeicherten Nachrichten. Auf einem Server liegt nichts, was durchsickern, beschlagnahmt oder verkauft werden k\xF6nnte.", + "unique.s5.tags": [ + "Keine Konten", + "Keine Protokolle" + ], + "partners.eyebrow": "Partner & \xD6kosystem", + "partners.heading": "Unsere Partner vertrauen uns", + "partners.aegis.desc": "Kapitalpartner, der vertrauliche Finanzkommunikation \xFCber sein gesamtes Portfolio absichert.", + "partners.aegis.role": "Strategischer Investor", + "partners.furilabs.desc": "Linux-Telefone mit Fokus auf Privatsph\xE4re, die SecureBit als sicheren Standardkanal mitliefern.", + "partners.furilabs.role": "Technologiepartner", + "partners.inviteTitle": "Partner werden", + "partners.inviteDesc": "Sie bauen Hardware oder Infrastruktur f\xFCr Privatsph\xE4re? Lassen Sie uns SecureBit integrieren.", + "partners.inviteCta": "Gespr\xE4ch beginnen", + "roadmap.eyebrow": "Entwicklungs-Roadmap", + "roadmap.heading": "Die Entwicklung von SecureBit", + "roadmap.subheading": "Vom ersten Prototyp zu einem quantensicheren, dezentralen Netzwerk - mit vollst\xE4ndiger ASN.1-Validierung auf jeder Ebene.", + "roadmap.progress": "{shipped} von {total} Meilensteinen erreicht", + "roadmap.upcoming": "{upcoming} in Arbeit", + "roadmap.keyFeatures": "Kernfunktionen", + "roadmap.status.released": "Ver\xF6ffentlicht", + "roadmap.status.current": "Aktuell", + "roadmap.status.dev": "In Entwicklung", + "roadmap.status.planned": "Geplant", + "roadmap.status.research": "Forschung", + "hero.headlineTop": "Eine direkte Leitung,", + "hero.headlineBottom": "die nur Sie beide lesen k\xF6nnen.", + "hero.subheading": "Die Schl\xFCssel entstehen auf Ihrem Ger\xE4t und werden direkt zwischen den Ger\xE4ten ausgetauscht. Keine Konten, keine Server, die Ihre Nachrichten speichern.", + "hero.diagramAlt": "Eine direkte verschl\xFCsselte Leitung zu einem Teilnehmer, zu der zwei weitere Teilnehmer hinzusto\xDFen", + "intro.createTitle": "Neuen Kanal erstellen", + "intro.createDesc": "Ihr Ger\xE4t erzeugt die Schl\xFCssel und eine einmalige Einladung. Nichts davon ber\xFChrt einen Server.", + "intro.createCta": "Schl\xFCssel & Einladung erzeugen", + "intro.joinTitle": "Kanal beitreten", + "intro.scanTitle": "QR-Code mit der Kamera scannen", + "intro.scanSubtitle": "Am schnellsten - auf den Bildschirm Ihres Gegen\xFCbers halten", + "intro.orPasteCode": "oder Code einf\xFCgen", + "intro.pastePlaceholder": "Einladungscode hier einf\xFCgen \u2026", + "intro.connect": "Verbinden", + "intro.connecting": "Wird verarbeitet \u2026", + "roadmap.r1.title": "Entwicklungsbeginn", + "roadmap.r1.sub": "Idee, Prototyp und Aufbau der Infrastruktur", + "roadmap.r1.date": "Anfang 2025", + "roadmap.r1.features": [ + "Konzept und Anforderungen festgelegt", + "Auswahl des Stacks: WebRTC, P2P, Kryptografie", + "Erste Messaging-Prototypen", + "Repository und CI eingerichtet", + "Grundlegende Verschl\xFCsselungsarchitektur", + "UX/UI-Design" + ], + "roadmap.r2.title": "Alpha-Release", + "roadmap.r2.sub": "Erste \xF6ffentliche Alpha: einfacher Chat und Schl\xFCsselaustausch", + "roadmap.r2.date": "Fr\xFChjahr 2025", + "roadmap.r2.features": [ + "Einfaches P2P-Messaging \xFCber WebRTC", + "Einfache Ende-zu-Ende-Verschl\xFCsselung (Demoverfahren)", + "Stabiles Signalling und Wiederverbindung", + "Minimale Oberfl\xE4che zum Testen", + "R\xFCckmeldungen der ersten Tester" + ], + "roadmap.r3.title": "Sicherheit geh\xE4rtet", + "roadmap.r3.sub": "Sicherheit gest\xE4rkt, stabiler Zweig ver\xF6ffentlicht", + "roadmap.r3.date": "Sommer 2025", + "roadmap.r3.features": [ + "ECDH/ECDSA im Produktivbetrieb", + "Perfect Forward Secrecy und Schl\xFCsselwechsel", + "Verbesserte Authentifizierungspr\xFCfungen", + "Dateiverschl\xFCsselung und \xDCbertragung gro\xDFer Nutzdaten", + "Pr\xFCfung der grundlegenden Kryptoabl\xE4ufe" + ], + "roadmap.r4.title": "Skalierung & Stabilit\xE4t", + "roadmap.r4.sub": "Skalierung des Netzwerks und mehr Stabilit\xE4t", + "roadmap.r4.date": "Herbst 2025", + "roadmap.r4.features": [ + "Optimierte P2P-Verbindungen und NAT-Traversal", + "Wiederverbindung und Nachrichtenwarteschlangen", + "Geringerer Akkuverbrauch auf Mobilger\xE4ten", + "Synchronisierung \xFCber mehrere Ger\xE4te", + "Monitoring- und Logging-Werkzeuge f\xFCr Entwickler" + ], + "roadmap.r5.title": "Privatsph\xE4re zuerst", + "roadmap.r5.sub": "Schwerpunkt Privatsph\xE4re: Metadaten minimieren", + "roadmap.r5.date": "Winter 2025", + "roadmap.r5.features": [ + "Metadatenschutz und weniger Fingerprinting", + "Experimente mit Onion-Routing und DHT", + "Optionen f\xFCr anonyme Verbindungen", + "Vorbereitung des offenen Code-Audits", + "Verbesserte Verifizierung der Teilnehmer" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "18-schichtige Kryptografie auf milit\xE4rischem Niveau mit vollst\xE4ndiger ASN.1-Validierung", + "roadmap.r6.date": "Ende 2025", + "roadmap.r6.features": [ + "Dreifache Absicherung: ECDH + DTLS + SAS", + "Verschl\xFCsselung mit ECDH P-384 und AES-GCM 256 Bit", + "Pr\xFCfung des DTLS-Fingerabdrucks", + "SAS-Verifizierung (Short Authentication String)", + "Perfect Forward Secrecy mit Schl\xFCsselwechsel", + "Verst\xE4rkter Schutz vor Man-in-the-Middle-Angriffen", + "Vollst\xE4ndige ASN.1-DER-Validierung", + "Pr\xFCfung von OID und EC-Punkten", + "Validierung der SPKI-Struktur", + "P2P-WebRTC-Architektur", + "Metadatenschutz", + "Zu 100 % quelloffener Code" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "Native Desktop-Apps f\xFCr Windows, macOS und Linux", + "roadmap.r7.date": "Anfang 2026", + "roadmap.r7.features": [ + "Windows-Desktop-App (Tauri v2)", + "macOS-Desktop-App (Tauri v2)", + "Linux-AppImage (Tauri v2)", + "Benachrichtigungen in Echtzeit", + "Automatische Wiederverbindung", + "Synchronisierung \xFCber Ger\xE4te hinweg", + "\xDCberarbeitete Oberfl\xE4che", + "Dateien bis 100 MB" + ], + "roadmap.r8.title": "Sichere Sprache & Anrufe", + "roadmap.r8.sub": "Verschl\xFCsselte Sprachnachrichten, Audio- und Videoanrufe", + "roadmap.r8.date": "Anfang 2026", + "roadmap.r8.features": [ + "Ende-zu-Ende-verschl\xFCsselte Sprachnachrichten", + "Verschl\xFCsselte Audioanrufe zu zweit (WebRTC)", + "Verschl\xFCsselte Videoanrufe zu zweit (WebRTC)", + "Perfect Forward Secrecy f\xFCr laufende Medien", + "Medienstr\xF6me \xFCber SRTP/DTLS gesch\xFCtzt", + "SAS-Verifizierung w\xE4hrend des Anrufs", + "Anrufbenachrichtigungen und automatische Wiederverbindung", + "P2P-Medien mit geringer Latenz" + ], + "roadmap.r9.title": "Gruppenkommunikation", + "roadmap.r9.sub": "Gruppenchats ohne Verlust der Privatsph\xE4re", + "roadmap.r9.date": "Jetzt", + "roadmap.r9.features": [ + "P2P-Gruppenchats mit bis zu 8 Teilnehmenden", + "Mesh-Zustellung mit signiertem Relay als R\xFCckfallebene", + "Ein Sicherheitscode f\xFCr die Gruppe, den alle vergleichen", + "Commit-then-Reveal-Verfahren gegen das Erraten von Codes", + "Gruppeneigene Identit\xE4tsschl\xFCssel, bewusst kurzlebig", + "Signierte Mitgliedschaft mit Epochenreihenfolge", + "Signierte Nachrichten - ein abweichender Verlauf ist damit beweisbar", + "Kein Server, kein gemeinsamer Gruppenschl\xFCssel, kein Verlauf" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "Native Apps f\xFCr iOS und Android", + "roadmap.r10.date": "Q2 2027", + "roadmap.r10.features": [ + "Native iOS-App (Swift/SwiftUI)", + "Native Android-App (Kotlin/Jetpack Compose)", + "PWA-Unterst\xFCtzung f\xFCr mobile Browser", + "Push-Benachrichtigungen in Echtzeit", + "Optimierter Akkuverbrauch", + "F\xFCr Mobilger\xE4te optimierte Oberfl\xE4che", + "Nachrichtenwarteschlange offline", + "Biometrische Anmeldung" + ], + "roadmap.r11.title": "Quantensichere Edition", + "roadmap.r11.sub": "Schutz vor Quantencomputern", + "roadmap.r11.date": "Q4 2027", + "roadmap.r11.features": [ + "Post-Quanten-Kryptografie CRYSTALS-Kyber", + "Digitale Signaturen mit SPHINCS+", + "Hybridverfahren: klassisch + Post-Quanten", + "Quantensicherer Schl\xFCsselaustausch", + "Aktualisierte Hash-Algorithmen", + "Migration bestehender Sitzungen", + "Kompatibilit\xE4t mit v5.x", + "Quantenresistente Protokolle" + ], + "roadmap.r12.title": "Dezentrales Netzwerk", + "roadmap.r12.sub": "Vollst\xE4ndig dezentrales Netzwerk", + "roadmap.r12.date": "2028", + "roadmap.r12.features": [ + "Mesh-Netzwerk aus Knoten", + "DHT zum Auffinden von Teilnehmern", + "Eingebautes Onion-Routing", + "Tokenomics und Anreize f\xFCr Knotenbetreiber", + "Steuerung \xFCber eine DAO", + "Zusammenspiel mit anderen Netzwerken", + "Plattform\xFCbergreifende Kompatibilit\xE4t", + "Selbstheilendes Netzwerk" + ], + "roadmap.r13.title": "KI-Assistent f\xFCr Privatsph\xE4re", + "roadmap.r13.sub": "KI f\xFCr Privatsph\xE4re und Sicherheit", + "roadmap.r13.date": "2028+", + "roadmap.r13.features": [ + "Lokale KI-Bedrohungsanalyse", + "Automatische MITM-Erkennung", + "Adaptive Kryptografie", + "Pers\xF6nliche Sicherheitsempfehlungen", + "Maschinelles Lernen ohne Wissenspreisgabe", + "Privater KI-Assistent", + "Vorausschauende Sicherheit", + "Autonomer Angriffsschutz" + ], + "handshake.step1": "ECDH-P-384-Schl\xFCsselpaar wird erzeugt", + "handshake.step2": "Verifizierungscode wird abgeleitet", + "handshake.step3": "Perfect Forward Secrecy wird festgelegt", + "handshake.securingTitle": "Ihr Kanal wird abgesichert", + "handshake.answerTitle": "Ihre Antwort wird erstellt", + "handshake.securingDesc": "Es entstehen Schl\xFCssel, die Manipulation standhalten.", + "handshake.shareTitle": "Teilen Sie Ihre Einladung", + "handshake.sendAnswerTitle": "Senden Sie Ihre Antwort zur\xFCck", + "handshake.shareDesc": "Zeigen Sie den QR-Code oder senden Sie den Code an Ihr Gegen\xFCber. Er gilt einmalig und l\xE4uft bald ab.", + "handshake.sendAnswerDesc": "Geben Sie diese Antwort dem Ersteller des Kanals, damit er den Handschlag abschlie\xDFen kann.", + "handshake.establish": "Verbindung herstellen", + "handshake.thenReceive": "Nehmen Sie danach die Antwort Ihres Gegen\xFCbers entgegen", + "handshake.pasteAnswerPlaceholder": "Antwortcode des Gegen\xFCbers einf\xFCgen \u2026", + "handshake.answerSentNote": "Senden Sie diese Antwort an den Ersteller und warten Sie - der Chat \xF6ffnet sich, sobald er sich verbindet.", + "handshake.qrHint": "Lassen Sie dies ge\xF6ffnet, bis Ihr Gegen\xFCber den Code erfasst hat.", + "handshake.qrHintFrames": "Der Handschlag ist auf {frames} Einzelbilder verteilt - lassen Sie dies ge\xF6ffnet, bis Ihr Gegen\xFCber alle erfasst hat.", + "verify.title": "Sicherheitspr\xFCfung", + "verify.desc": "Vergleichen Sie diesen Sicherheitscode \xFCber einen anderen Weg mit Ihrem Gegen\xFCber (Anruf oder pers\xF6nlich) und geben Sie ihn dann ein, um den Chat freizuschalten.", + "verify.enterLabel": "Gepr\xFCften Code eingeben", + "verify.placeholder": "Code hier eingeben", + "verify.confirm": "Code best\xE4tigen", + "verify.confirmed": "Best\xE4tigt", + "verify.mismatch": "Stimmt nicht \xFCberein", + "verify.yours": "Ihre Best\xE4tigung", + "verify.peer": "Best\xE4tigung des Gegen\xFCbers", + "verify.pending": "Ausstehend", + "verify.waiting": "Warten auf den Code \u2026", + "verify.verified": "Kanal gepr\xFCft", + "verify.bothConfirmed": "Beide Seiten haben best\xE4tigt. Der sichere Chat wird ge\xF6ffnet \u2026", + "pwa.bannerTitle": "SecureBit.chat installieren", + "pwa.bannerDesc": "Die App-Erfahrung mit zus\xE4tzlicher Sicherheit", + "pwa.install": "Installieren", + "pwa.dismiss": "Schlie\xDFen", + "pwa.close": "Schlie\xDFen", + "pwa.iosTitle": "Auf iOS installieren", + "pwa.iosStep1": "Auf \u201ETeilen\u201C tippen", + "pwa.iosStep1Hint": "Meist unten in Safari", + "pwa.iosStep2": "\u201EZum Home-Bildschirm\u201C suchen", + "pwa.iosStep2Hint": "Im Teilen-Men\xFC nach unten scrollen", + "pwa.iosStep3": "Auf \u201EHinzuf\xFCgen\u201C tippen", + "pwa.iosStep3Hint": "Best\xE4tigen, um SecureBit.chat zu installieren", + "pwa.genericTitle": "SecureBit installieren", + "pwa.genericDesc": "Jeder Browser installiert auf seine eigene Weise. W\xE4hlen Sie die Schritte, die zu Ihrem passen.", + "pwa.gotIt": "Verstanden", + "pwa.installedTitle": "App installiert!", + "pwa.installedIos": "iOS-App installiert! Vom Home-Bildschirm \xF6ffnen.", + "pwa.installedGeneric": "SecureBit.chat ist jetzt auf Ihrem Ger\xE4t", + "pwa.anytimeTitle": "Jederzeit installierbar", + "pwa.anytimeDesc": "Sie k\xF6nnen SecureBit.chat jederzeit \xFCber das Browsermen\xFC installieren - so l\xE4uft es am besten.", + "pwa.ok": "OK", + "step.open": "Schritt 1 \xB7 Kanal \xF6ffnen", + "step.exchange": "Schritt 2 \xB7 Austausch", + "step.verification": "Schritt 3 \xB7 Pr\xFCfung", + "action.create": "Erstellen", + "action.join": "Beitreten", + "action.back": "Zur\xFCck", + "action.copy": "Kopieren", + "action.copied": "Kopiert", + "action.scan": "Scannen", + "action.downloadDesktop": "Desktop-App laden", + "action.advancedSettings": "Erweiterte Einstellungen", + "cred.offerTag": "Angebot \xB7 oder Text kopieren", + "cred.answerTag": "Antwort \xB7 oder Text kopieren", + "cred.reveal": "Zum Anzeigen klicken - halten Sie diesen Code geheim", + "qr.title": "QR-Code scannen", + "qr.subtitle": "Richten Sie die Kamera auf den QR-Code", + "qr.scanning": "Wird gescannt \u2026", + "qr.hint": "Ruhig halten, bis alle Teile erfasst sind. Der Kamerazugriff bleibt lokal - nichts wird hochgeladen.", + "mesh.you": "Sie", + "mesh.peer": "Gegen\xFCber \xB7 Sitzung 1", + "mesh.joined2": "lena ist dabei \xB7 +2", + "mesh.joined3": "jonas ist dabei \xB7 +3", + "ice.title": "Netzwerkeinstellungen", + "ice.subtitle": "Lokal eingestellt - wird nie an Ihr Gegen\xFCber weitergegeben", + "ice.intro": "SecureBit nutzt standardm\xE4\xDFig \xF6ffentliche STUN-Server, um die direkte Verbindung auszuhandeln. Wenn Sie selbst hosten, tragen Sie Ihre eigenen STUN/TURN-Server ein.", + "ice.publicTitle": "\xD6ffentliche Server (Standard)", + "ice.publicDesc": "Ohne Einrichtung. F\xFCr die meisten passend.", + "ice.customTitle": "Eigene STUN/TURN-Server", + "ice.customDesc": "Bis zu {max} Server.", + "ice.turnNote": "Ein TURN-Relay sieht die IP-Adressen beider Seiten und das Timing des Verkehrs - nie aber die Inhalte, die Ende-zu-Ende verschl\xFCsselt bleiben. Bevorzugen Sie ", + "ice.turnNoteTls": " (TLS).", + "ice.test": "Server testen", + "ice.testing": "Wird getestet \u2026", + "ice.relayTitle": "Nur-Relay-Modus", + "ice.relayBadge": "MAXIMALE PRIVATSPH\xC4RE", + "ice.relayDesc": "Leitet den gesamten Verkehr \xFCber TURN, damit Ihr Gegen\xFCber Ihre IP nie zu sehen bekommt. Erfordert einen TURN-Server.", + "ice.relayWarning": "Nur-Relay ist aktiv, aber es ist kein TURN-Server eingetragen. Die Verbindung kann so nicht zustande kommen.", + "ice.persist": "Auf diesem Ger\xE4t speichern", + "ice.persistDesc": "Verschl\xFCsselt in diesem Browser abgelegt. Ausgeschaltet gilt die Einstellung nur f\xFCr diese Sitzung.", + "ice.forget": "Gespeichertes l\xF6schen", + "ice.cancel": "Abbrechen", + "ice.apply": "\xDCbernehmen", + "ice.errUnavailable": "WebRTC steht in diesem Browser nicht zur Verf\xFCgung", + "ice.errInvalid": "Ung\xFCltige Serverkonfiguration", + "update.title": "Update verf\xFCgbar", + "update.desc": "Es wurde eine neuere Version von SecureBit gefunden.", + "update.currentVersion": "Aktuelle Version", + "update.newVersion": "Neue Version", + "update.now": "Jetzt aktualisieren", + "update.later": "Sp\xE4ter", + "update.unknown": "k. A.", + "update.stepSaving": "Daten werden gesichert \u2026", + "update.stepSwCaches": "Service-Worker-Caches werden geleert \u2026", + "update.stepSwUnregister": "Service Worker werden abgemeldet \u2026", + "update.stepBrowserCache": "Browser-Cache wird geleert \u2026", + "update.stepVersion": "Version wird aktualisiert \u2026", + "update.stepReload": "Anwendung wird neu geladen \u2026", + "update.error": "Fehler beim Update. Bitte laden Sie die Seite manuell neu (Strg+F5 oder Cmd+Umschalt+R)", + "update.confirmSkip": "Eine neue Version ist verf\xFCgbar. Ein Update wird f\xFCr Sicherheit und Stabilit\xE4t empfohlen. Ohne Update fortfahren?", + "offline.backOnline": "Wieder online", + "offline.mode": "Offline-Modus", + "offline.dismiss": "Schlie\xDFen", + "offline.lostTitle": "Verbindung verloren", + "offline.lostDesc": "SecureBit l\xE4uft jetzt offline. Einiges ist eingeschr\xE4nkt, Ihre Daten bleiben aber sicher.", + "offline.point1": "Ihre Sitzung und die Schl\xFCssel bleiben erhalten", + "offline.point2": "Es liegen keine Daten auf Servern", + "offline.point3": "Nachrichten und Dateien gleichen sich nach der Wiederverbindung ab", + "offline.continue": "Offline fortfahren", + "offline.restoredTitle": "Wenn Sie wieder verbunden sind", + "offline.restoredDesc": "Ein Verbindungsabbruch kostet Sie nichts. SecureBit sammelt alles lokal und setzt die verschl\xFCsselte Sitzung fort, sobald Sie wieder online sind.", + "offline.r1Title": "Ihre Nachrichten kommen an", + "offline.r1Desc": "Alles, was Sie offline geschrieben haben, geht automatisch an Ihr Gegen\xFCber.", + "offline.r2Title": "Dateien werden zu Ende \xFCbertragen", + "offline.r2Desc": "\xDCbertragungen setzen dort fort, wo sie stehen geblieben sind - nichts muss erneut gesendet werden.", + "offline.r3Title": "Ihre Nachrichten und Dateien treffen ein", + "offline.r3Desc": "Was Ihr Gegen\xFCber w\xE4hrend der St\xF6rung gesendet hat, erreicht Sie der Reihe nach.", + "offline.r4Title": "Nichts geht verloren", + "offline.r4Desc": "Nach der Wiederverbindung bleibt keine L\xFCcke - das Gespr\xE4ch l\xE4uft genau dort weiter, wo es angehalten hat.", + "offline.gotIt": "Verstanden", + "qr.showTitle": "QR-Code anzeigen", + "qr.showSubtitle": "Vollbild \xB7 vom Gegen\xFCber scannen lassen", + "qr.showSubtitleFrames": "Vollbild \xB7 alle {frames} Einzelbilder vom Gegen\xFCber scannen lassen", + "notify.enabledBody": "Benachrichtigungen sind aktiv. Sie werden \xFCber neue Nachrichten informiert.", + "notify.workingBody": "Benachrichtigungen funktionieren. Sie werden \xFCber neue Nachrichten informiert.", + "pw.label": "Passworteingabe", + "pw.placeholder": "Passwort eingeben \u2026", + "pw.decrypt": "Entschl\xFCsseln", + "pw.cancel": "Abbrechen", + "file.title": "Datei\xFCbertragungen", + "file.drop": "Dateien hierher ziehen", + "file.dropHint": "Vor der \xDCbertragung Ende-zu-Ende verschl\xFCsselt \xB7 bis 100 MB", + "file.browse": "Ger\xE4t durchsuchen", + "file.incoming": "Eingehende Dateianfrage", + "file.accept": "Annehmen", + "file.reject": "Ablehnen", + "file.download": "Herunterladen", + "file.notReady": "Verbindung noch nicht bereit", + "file.tooLarge": "Datei zu gro\xDF", + "file.typeNotAllowed": "Dateityp nicht erlaubt", + "file.maxConcurrent": "H\xF6chstzahl gleichzeitiger \xDCbertragungen erreicht", + "file.gone": "Diese Datei steht nicht mehr zum Herunterladen bereit.", + "call.incoming": "Eingehender Anruf", + "call.incomingVideo": "Eingehender Videoanruf", + "call.encrypted": "Verschl\xFCsselter Anruf", + "call.encryptedShort": "Verschl\xFCsselt", + "call.peer": "Sicheres Gegen\xFCber", + "call.connecting": "Verbindung wird aufgebaut \u2026", + "call.ringing": "Es klingelt \u2026", + "call.accept": "Annehmen", + "call.decline": "Ablehnen", + "call.end": "Auflegen", + "call.camera": "Kamera", + "call.cameraOff": "Kamera aus", + "call.peerCameraOff": "Die Kamera des Gegen\xFCbers ist aus", + "call.flipCamera": "Kamera wechseln", + "call.addVideo": "Video hinzuf\xFCgen", + "call.video": "Video", + "call.muted": "Stumm", + "call.expand": "Vergr\xF6\xDFern", + "call.minimize": "Verkleinern", + "call.quality": "Verbindungsqualit\xE4t", + "call.qualityExcellent": "Ausgezeichnet", + "call.videoPrefix": "Video \xB7 ", + "call.voicePrefix": "Sprache \xB7 ", + "group.new": "Neue Gruppe", + "group.create": "Gruppe erstellen", + "group.join": "Gruppe beitreten", + "group.name": "Gruppenname", + "group.nameTooLong": "Der Gruppenname ist zu lang.", + "group.capacity": "Bis zu {max} Personen, direkt von Ger\xE4t zu Ger\xE4t. Alle vergleichen einen Sicherheitscode, bevor die Gruppe \xF6ffnet.", + "group.invite": "Einladen", + "group.inviteMore": "Weitere Mitglieder einladen", + "group.invitePeople": "{count} Personen einladen", + "group.invitation": "Gruppeneinladung", + "group.addMembers": "Mitglieder hinzuf\xFCgen", + "group.roomFor": "Platz f\xFCr {remaining} weitere. Nach dem Beitritt vergleichen alle einen neuen Gruppencode.", + "group.membersCount": "{count} Mitglieder", + "group.member": "Mitglied", + "group.members": "Mitglieder", + "group.remove": "{name} entfernen", + "group.message": "Nachricht an {name}", + "group.leave": "Verlassen", + "group.leaveThis": "Diese Gruppe verlassen", + "group.cancel": "Gruppe abbrechen", + "group.close": "Schlie\xDFen", + "group.cancelBtn": "Abbrechen", + "group.decline": "Ablehnen", + "group.working": "Wird ausgef\xFChrt \u2026", + "group.sasTitle": "Sicherheitscode der Gruppe", + "group.sasEveryone": "Alle sehen diesen Code", + "group.sasCompare": "Vergleichen Sie den Gruppencode mit jedem Mitglied, um die Gruppe zu \xF6ffnen.", + "group.sasReadAloud": "Lesen Sie diese Ziffern laut vor an ", + "group.sasWarning": "Liest auch nur ein Mitglied einen anderen Code vor, sitzt jemand dazwischen. Brechen Sie die Gruppe ab - best\xE4tigen Sie nicht.", + "group.confirmFirst": "Best\xE4tigen Sie zuerst den Gruppencode", + "group.codeSuffix": " \xB7 Code {code}", + "group.exchangingNonces": "Nonces werden ausgetauscht \u2026", + "group.waitingCommit": "Warten auf die Zusage aller Mitglieder \u2026", + "group.waitingJoin": "Warten auf die \xFCbrigen Mitglieder \u2026", + "group.emptyChat": "Hier ist noch nichts. Nachrichten sind von ihrem Absender signiert und laufen \xFCber die eigene verschl\xFCsselte Verbindung jedes Mitglieds.", + "group.noVerified": "Noch keine gepr\xFCften Chats. \xD6ffnen Sie zuerst einen Einzelchat und vergleichen Sie dessen Sicherheitscode - eine Gruppe entsteht aus bereits gepr\xFCften Verbindungen.", + "group.noMoreToAdd": "Keine weiteren gepr\xFCften Chats zum Hinzuf\xFCgen. \xD6ffnen Sie zuerst einen Einzelchat und vergleichen Sie dessen Sicherheitscode.", + "group.directLink": "Direkte Verbindung von Ger\xE4t zu Ger\xE4t", + "group.noDirectLink": "Noch keine direkte Verbindung - Nachrichten laufen \xFCber ein anderes Mitglied, w\xE4hrend eine aufgebaut wird", + "group.relayNote": "Zu einigen Mitgliedern besteht noch keine direkte Verbindung. Ihre Nachrichten laufen \xFCber ein anderes Mitglied, das sieht, dass Sie sprechen, aber weder mitlesen noch etwas \xE4ndern kann. Die Gruppe versucht weiterhin, sie direkt zu verbinden.", + "group.relayOnlyOff": "Der Nur-Relay-Modus ist aus, daher verbindet sich jedes Mitglied direkt mit Ihnen und erf\xE4hrt Ihre IP-Adresse - auch Mitglieder, die jemand anderes eingeladen hat. Schalten Sie ihn in den Netzwerkeinstellungen ein, wenn das hier z\xE4hlt.", + "group.memberOffline": "{name} ist offline und erh\xE4lt keine Nachrichten. Die Mitgliedschaft bleibt bestehen - ein Entfernen erneuert die Gruppenschl\xFCssel.", + "group.joinNote": "Die anderen Mitglieder erfahren, dass Sie in dieser Gruppe sind. Einen Nachrichtenverlauf zum Nachlesen gibt es nicht - eine Gruppe beginnt leer.", + "group.inviteSentNote": "Die Gruppe l\xE4uft weiter, bis sie annehmen. Einen Verlauf zum Nachlesen gibt es f\xFCr sie nicht - sie sehen nur, was ab jetzt gesendet wird.", + "group.errNotCreated": "Gruppe nicht erstellt", + "group.errNobodyAccepted": "Niemand hat die Einladung rechtzeitig angenommen.", + "group.errNothingSent": "Es wurde nichts gesendet und nichts gepr\xFCft. Schlie\xDFen Sie dies und versuchen Sie es erneut, sobald alle verbunden sind.", + "group.errNotFormed": "Diese Gruppe konnte nicht gebildet werden.", + "group.errFull": "Diese Gruppe ist voll.", + "group.errInviteFailed": "Die Einladung konnte nicht gesendet werden - dieser Chat ist nicht verbunden.", + "group.errNoMemberList": "Die Gruppeninhaberin oder der Gruppeninhaber hat die Mitgliederliste nie gesendet.", + "group.errUnsignedList": "Die Mitgliederliste wurde nicht von der Gruppeninhaberin oder dem Gruppeninhaber signiert. Nicht erneut versuchen - sagen Sie ihnen Bescheid.", + "group.errNotOwner": "Jemand anderes als die Gruppeninhaberin oder der Gruppeninhaber wollte die Mitglieder \xE4ndern.", + "hdr.tagline": "Ende-zu-Ende verschl\xFCsselt", + "hdr.netSettings": "Erweiterte Netzwerkeinstellungen", + "hdr.netSettingsTitle": "Erweiterte Netzwerkeinstellungen (STUN/TURN)", + "hdr.disconnect": "Trennen", + "status.connected": "Verbunden", + "status.connecting": "Verbindung wird aufgebaut \u2026", + "status.notConnected": "Nicht verbunden", + "status.reconnecting": "Neuverbindung \u2026", + "status.retrying": "Neuer Versuch \u2026", + "status.verifying": "Wird gepr\xFCft \u2026", + "status.peerDisconnected": "Gegen\xFCber hat die Verbindung getrennt", + "sec.replayProtection": "Schutz vor Wiedereinspielung", + "sec.messageIntegrity": "Nachrichtenintegrit\xE4t (HMAC)", + "sec.forwardSecrecy": "Perfect Forward Secrecy", + "sec.metadataProtection": "Metadatenschutz", + "sec.trafficObfuscation": "Verkehrsverschleierung", + "sec.realTests": "Echte kryptografische Pr\xFCfungen", + "sec.simulatedData": "Simulierte Daten", + "sec.testPassed": "Pr\xFCfung bestanden", + "sec.testFailed": "Pr\xFCfung fehlgeschlagen oder nicht verf\xFCgbar", + "sec.verificationDone": "Echte kryptografische Pr\xFCfung abgeschlossen", + "sec.verificationInProgress": "Sicherheitspr\xFCfung l\xE4uft \u2026", + "sec.verificationWait": "Sicherheitspr\xFCfung l\xE4uft \u2026\nBitte warten Sie, bis die kryptografische Pr\xFCfung in Echtzeit abgeschlossen ist.", + "sec.verificationUnavailable": "Sicherheitspr\xFCfung nicht verf\xFCgbar", + "chat.placeholder": "Verschl\xFCsselte Nachricht schreiben \u2026", + "chat.send": "Nachricht senden", + "chat.sendFiles": "Dateien senden", + "chat.hideFiles": "Dateien ausblenden", + "chat.recordVoice": "Sprachnachricht aufnehmen", + "chat.sendVoice": "Sprachnachricht senden", + "chat.discard": "Verwerfen", + "chat.codeBlock": "Als Codeblock senden (vergr\xF6\xDFert das Eingabefeld)", + "chat.codeHint": "Code-Ausschnitt \xB7 Formatierung bleibt erhalten \xB7 \u2318\u21B5 zum Senden", + "chat.viewOnce": "Einmal ansehen", + "chat.viewOnceTitle": "Einmal ansehen - verschwindet, sobald das Gegen\xFCber es gelesen hat", + "chat.viewOncePrefix": "Einmal ansehen \xB7 ", + "chat.viewOnceTap": "Einmal ansehen \xB7 zum Anzeigen tippen", + "chat.viewedOnce": "Bereits angesehen", + "chat.disappearing": "Verschwindende Nachricht - wird auf beiden Seiten gel\xF6scht", + "chat.disappearAfter": "Verschwindet nach", + "chat.visibleFor": "Sichtbar f\xFCr", + "chat.timerPrefix": "Timer \xB7 ", + "chat.expired": "Diese Nachricht ist abgelaufen", + "chat.deleteForEveryone": "F\xFCr alle l\xF6schen", + "chat.sending": "Wird gesendet", + "chat.delivered": "Zugestellt", + "chat.notSent": "Nicht gesendet", + "chat.notSentReason": "Nicht gesendet - der sichere Kanal ist nicht bereit. Verbinden Sie sich neu, um fortzufahren.", + "chat.encrypted": "Verschl\xFCsselt", + "chat.decrypted": "Entschl\xFCsselt", + "chat.encryptedOnDevice": "Auf Ihrem Ger\xE4t verschl\xFCsselt", + "chat.uploading": "Wird hochgeladen", + "chat.downloading": "Wird heruntergeladen", + "chat.transferring": "Wird \xFCbertragen \u2026", + "chat.copied": "Kopiert!", + "chat.collapse": "Einklappen", + "chat.closeMenu": "Men\xFC schlie\xDFen", + "chat.newChat": "Neuer Chat", + "chat.newGroup": "Neue Gruppe", + "chat.createGroup": "Gruppe erstellen", + "chat.groupChats": "Gruppenchats", + "chat.secureChat": "Sicherer Chat", + "chat.nameThis": "Diesem Chat einen Namen geben", + "chat.rename": "Chat umbenennen (nur lokal)", + "chat.renameHint": "Zum Umbenennen doppelklicken", + "chat.localLabel": "Lokale Bezeichnung \xB7 nur auf diesem Ger\xE4t gespeichert", + "chat.setStatus": "Status festlegen", + "chat.yourStatusPrefix": "Ihr Status - ", + "chat.meshHint": "Bis zu 8 Teilnehmende \xB7 P2P-Mesh", + "chat.offline": "Offline", + "chat.noNetwork": "Kein Netz \xB7 Neuverbindung", + "chat.startVoiceCall": "Verschl\xFCsselten Sprachanruf starten", + "chat.startVideoCall": "Verschl\xFCsselten Videoanruf starten", + "chat.verifyForCalls": "Pr\xFCfen Sie die Sitzung, um Anrufe freizuschalten", + "chat.e2eeNote": "Jede Nachricht wird auf Ihrem Ger\xE4t Ende-zu-Ende verschl\xFCsselt, bevor sie es verl\xE4sst.", + "chat.peersOnly": "Ende-zu-Ende nur an verbundene Teilnehmende gesendet - nie auf einem Server gespeichert.", + "flow.invitationCreated": "Sichere Einladung erstellt", + "flow.invitationCreatedBang": "Sichere Einladung erstellt und verschl\xFCsselt.", + "flow.responseCreated": "Sichere Antwort erstellt", + "flow.responseCreatedBang": "Sichere Antwort erstellt.", + "flow.sendInvitation": "Senden Sie den Einladungscode \xFCber einen sicheren Weg an Ihr Gegen\xFCber (Anruf, SMS o. \xC4.).", + "flow.sendResponse": "Senden Sie den Antwortcode \xFCber einen sicheren Weg an die Person, die den Kanal er\xF6ffnet hat, oder lassen Sie den QR-Code unten scannen.", + "flow.sendEncryptedCode": "Verschl\xFCsselten Code senden", + "flow.sendTheResponse": "Antwort senden", + "flow.pasteOrWrite": "Code einf\xFCgen oder eingeben \u2026", + "flow.processingInvitation": "Sichere Einladung wird verarbeitet \u2026", + "flow.processingResponse": "Sichere Antwort wird verarbeitet \u2026", + "flow.finalizing": "Sichere Verbindung wird abgeschlossen \u2026", + "flow.channelEstablished": "Sicherer Kanal aufgebaut", + "flow.channelReady": "Sicherer Kanal ist bereit", + "flow.restoring": "Verbindung wird wiederhergestellt \u2026", + "flow.invitationCaptured": "Einladung erfasst.", + "err.needInvitation": "Sie m\xFCssen den Einladungscode Ihres Gegen\xFCbers einf\xFCgen.", + "err.needResponse": "Sie m\xFCssen den Antwortcode Ihres Gegen\xFCbers einf\xFCgen.", + "err.responseFormat": "Ung\xFCltiges Antwortformat - bitte pr\xFCfen Sie den Code", + "err.responseNoKey": "Ung\xFCltiger Antwortcode - der kryptografische Schl\xFCssel fehlt oder ist besch\xE4digt. Bitte pr\xFCfen Sie den Code und versuchen Sie es erneut.", + "err.responseNoSignKey": "Ung\xFCltiger Antwortcode - der Schl\xFCssel zur Signaturpr\xFCfung fehlt. Bitte pr\xFCfen Sie den Code und versuchen Sie es erneut.", + "err.responseOutdated": "Die Antwortdaten sind veraltet - bitte verwenden Sie eine neue Einladung", + "err.setupError": "Fehler beim Verbindungsaufbau", + "err.notReady": "Verbindung noch nicht bereit", + "err.securityBreach": "Sicherheitsverletzung erkannt - Verbindung abgelehnt", + "err.securityValidation": "Sicherheitspr\xFCfung fehlgeschlagen - m\xF6glicher Angriff erkannt", + "err.retiredQr": "Dieser QR-Code nutzt ein altes Format, mit dem die Einladung nicht \xFCbertragen werden konnte. Bitten Sie Ihr Gegen\xFCber um einen neuen Code oder verwenden Sie Kopieren und Einf\xFCgen.", + "err.compressedQrNote": "Ein komprimierter QR-Code l\xE4sst SDP der K\xFCrze halber wom\xF6glich weg. Nutzen Sie Kopieren und Einf\xFCgen, falls die Verbindung scheitert.", + "err.inviteNotConnected": "Die Einladung konnte nicht gesendet werden. Dieser Chat ist gerade nicht verbunden.", + "err.inviteNotConnectedRetry": "Die Einladung konnte nicht gesendet werden. Dieser Chat ist gerade nicht verbunden - \xF6ffnen Sie ihn erneut und versuchen Sie es noch einmal.", + "err.nobodyAccepted": "Niemand hat die Einladung angenommen. Die Gruppe bleibt unver\xE4ndert.", + "err.noAudio": "Kein Ton aufgenommen - pr\xFCfen Sie die Mikrofonberechtigung und versuchen Sie es erneut.", + "err.voiceNeedsConnection": "F\xFCr eine Sprachnachricht braucht es eine aktive sichere Verbindung. Verbinden Sie sich neu und versuchen Sie es erneut.", + "err.voiceRestoring": "Die Verbindung wird wiederhergestellt - versuchen Sie die Sprachnachricht gleich noch einmal.", + "err.fileTooLarge": "Datei zu gro\xDF", + "sas.safetyNumber": "Sicherheitsnummer", + "sas.incorrect": "Falscher Code. Pr\xFCfen Sie ihn mit Ihrem Gegen\xFCber und versuchen Sie es erneut.", + "sas.noMatch": "Die Codes stimmen nicht \xFCberein", + "sas.makeSure": "Achten Sie darauf, dass die Codes exakt \xFCbereinstimmen.", + "sas.tooManyAttempts": "Zu viele Fehlversuche. Die Sitzung wurde aus Sicherheitsgr\xFCnden zur\xFCckgesetzt.", + "sas.verificationFailed": "Pr\xFCfung fehlgeschlagen", + "sas.verified": "Gepr\xFCft \xB7 Perfect Forward Secrecy", + "sas.runVerification": "Sicherheitspr\xFCfung starten", + "sec.panelTitle": "Netzwerk- und Kryptodetails", + "sec.security": "Sicherheit", + "sec.transport": "Transport", + "sec.keyExchange": "Schl\xFCsselaustausch", + "sec.allEnabled": "Alle Sicherheitsfunktionen sind standardm\xE4\xDFig aktiv", + "sec.realTimeNote": "Pr\xFCfung in Echtzeit mit echten kryptografischen Funktionen - keine Platzhalterdaten.", + "sec.simulatedWarning": "Achtung: Die Verbindung ist wom\xF6glich noch nicht vollst\xE4ndig aufgebaut - die Werte k\xF6nnen simuliert sein.", + "dl.title": "SecureBit herunterladen", + "dl.free": "Kostenlos \xB7 quelloffen", + "dl.soon": "Apps f\xFCr iOS und Android sowie Browser-Erweiterungen f\xFCr Chrome, Firefox und Opera folgen in K\xFCrze.", + "chatHdr.chat": "Chat", + "chatHdr.chats": "Chats", + "chatHdr.newChat": "+ Neu", + "chatHdr.secure": "Sicher", + "chatHdr.p2pSub": "P2P \xB7 Ende-zu-Ende verschl\xFCsselt", + "chatHdr.save": "Speichern", + "chatHdr.close": "Schlie\xDFen", + "chatHdr.expand": "Vergr\xF6\xDFern", + "chatHdr.you": "Sie", + "chatHdr.qrCode": "QR-Code", + "chat.disconnected": "Getrennt", + "call.mute": "Stummschalten", + "call.endShort": "Auflegen", + "group.add": "Hinzuf\xFCgen", + "group.send": "Senden", + "sec.pfsShort": "Perfect Forward Secrecy", + "sec.cipher": "Chiffre", + "chat.close": "Schlie\xDFen", + "file.needConnection": "F\xFCr die Datei\xFCbertragung braucht es eine offene Verbindung", + "presence.available": "Verf\xFCgbar", + "presence.away": "Abwesend", + "presence.busy": "Besch\xE4ftigt", + "presence.offline": "Offline", + "presence.invisible": "Unsichtbar", + "presence.availableDesc": "Online und erreichbar", + "presence.awayDesc": "Unt\xE4tig \xB7 kurz weg", + "presence.busyDesc": "Bitte nicht st\xF6ren", + "presence.invisibleDesc": "F\xFCr andere offline erscheinen", + "presence.online": "Online", + "conn.p2p": "P2P \xB7 verbunden", + "conn.verifying": "Wird gepr\xFCft \u2026", + "conn.connecting": "Verbindung wird aufgebaut \u2026", + "conn.reconnecting": "Neuverbindung \u2026", + "conn.peerDisconnected": "Gegen\xFCber hat die Verbindung getrennt", + "conn.disconnected": "Getrennt", + "chat.defaultLabel": "Chat", + "groupPhase.forming": "Wird gebildet \u2026", + "groupPhase.commitments": "Zusagen werden ausgetauscht \u2026", + "groupPhase.revealing": "Wird offengelegt \u2026", + "groupPhase.compare": "Gruppencode vergleichen", + "groupPhase.ready": "Gruppe bereit", + "groupPhase.failed": "Gruppe fehlgeschlagen", + "call.qualityGood": "Gut", + "call.qualityFair": "Mittelm\xE4\xDFig", + "call.qualityWeak": "Schwach", + "msg.code": "Code", + "msg.timer": "Timer", + "msg.voice": "Sprache", + "msg.play": "Abspielen", + "msg.sent": "Gesendet", + "msg.read": "Gelesen", + "report.title": "Sicherheitspr\xFCfung in Echtzeit", + "report.active": "Aktiv", + "report.testsPassed": "Bestandene Pr\xFCfungen", + "report.verifiedAt": "Gepr\xFCft am", + "report.source": "Quelle", + "secTest.verifyECDHKeyExchange": "ECDH-Schl\xFCsselaustausch", + "secTest.verifyECDSASignatures": "Digitale ECDSA-Signaturen", + "secTest.verifyEncryption": "AES-GCM-Verschl\xFCsselung", + "secTest.verifyMessageIntegrity": "Nachrichtenintegrit\xE4t", + "secTest.verifyPerfectForwardSecrecy": "Perfect Forward Secrecy", + "secTest.verifyPFS": "Perfect Forward Secrecy", + "secTest.verifyReplayProtection": "Schutz vor Wiedereinspielung", + "secTest.verifyDTLSFingerprint": "DTLS-Fingerabdruck", + "secTest.verifySASVerification": "SAS-Verifizierung", + "secTest.verifyMetadataProtection": "Metadatenschutz", + "secTest.verifyTrafficObfuscation": "Verkehrsverschleierung", + "secTest.verifyPacketPadding": "Paket-Padding", + "secTest.verifyNestedEncryption": "Verschachtelte Verschl\xFCsselung", + "secTest.verifyNonExtractableKeys": "Nicht auslesbare Schl\xFCssel", + "secTest.verifyRateLimiting": "Ratenbegrenzung", + "secTest.verifyMutualAuth": "Gegenseitige Authentifizierung", + "secTest.verifyAuthProof": "Authentifizierungsnachweis", + "secTest.verifyEnhancedValidation": "Erweiterte Pr\xFCfung", + "secTest.verifyAdvancedFeatures": "Erweiterte Funktionen", + "secTest.verifySignature": "Signaturpr\xFCfung", + "secDetail.Security system initializing...": "Sicherheitssystem startet \u2026", + "secDetail.Nested encryption active": "Verschachtelte Verschl\xFCsselung aktiv", + "secDetail.Nested encryption failed": "Verschachtelte Verschl\xFCsselung fehlgeschlagen", + "secDetail.Packet padding active": "Paket-Padding aktiv", + "secDetail.Packet padding failed": "Paket-Padding fehlgeschlagen", + "secDetail.Advanced features active": "Erweiterte Funktionen aktiv", + "secDetail.Advanced features failed": "Erweiterte Funktionen fehlgeschlagen", + "secDetail.No encryption key available": "Kein Verschl\xFCsselungsschl\xFCssel vorhanden", + "secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM-Ver- und -Entschl\xFCsselung funktionieren korrekt", + "secDetail.No ECDH key pair available": "Kein ECDH-Schl\xFCsselpaar vorhanden", + "secDetail.Key derivation failed": "Schl\xFCsselableitung fehlgeschlagen", + "secDetail.No ECDSA key pair available": "Kein ECDSA-Schl\xFCsselpaar vorhanden", + "secDetail.ECDSA digital signatures working correctly": "Digitale ECDSA-Signaturen funktionieren korrekt", + "secDetail.MAC key not available or invalid": "MAC-Schl\xFCssel fehlt oder ist ung\xFCltig", + "secDetail.Rate limiter did not block a message over the limit": "Die Ratenbegrenzung hat eine Nachricht \xFCber dem Limit nicht blockiert", + "secDetail.Rate limiter is not available": "Die Ratenbegrenzung ist nicht verf\xFCgbar", + "secDetail.Replay protection is working correctly": "Der Schutz vor Wiedereinspielung funktioniert korrekt", + "secDetail.Replay protection not enabled": "Schutz vor Wiedereinspielung nicht aktiv", + "secDetail.SAS code not available": "SAS-Code nicht verf\xFCgbar", + "secDetail.SAS verification code is valid and available": "Der SAS-Pr\xFCfcode ist g\xFCltig und vorhanden", + "secDetail.Traffic obfuscation is working correctly": "Die Verkehrsverschleierung funktioniert korrekt", + "secDetail.Traffic obfuscation not enabled": "Verkehrsverschleierung nicht aktiv", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "F\xFCr diese Sitzung gibt es kein nicht auslesbares, kurzlebiges ECDH-Schl\xFCsselpaar", + "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": "Nur Sitzungs-PFS: Die Schl\xFCssel sind pro Sitzung kurzlebig, aber der Double Ratchet ist f\xFCr diese Verbindung nicht aktiv (das Gegen\xFCber nutzt eine \xE4ltere Version). Ein kompromittierter Sitzungsschl\xFCssel legt damit das ganze Gespr\xE4ch offen.", + "msg.pause": "Pause", + "msg.failed": "Fehlgeschlagen", + "groupErr.timeout": "Ein Mitglied hat aufgeh\xF6rt zu antworten, bevor der Code fertig war.", + "groupErr.keyMismatch": "Der Schl\xFCssel eines Mitglieds passte nicht zu der Identit\xE4t, die daf\xFCr angegeben wurde.", + "groupErr.revealMismatch": "Der offengelegte Wert eines Mitglieds passte nicht zu seiner Zusage.", + "groupErr.commitChanged": "Ein Mitglied hat seine Zusage mittendrin ge\xE4ndert.", + "groupErr.missingKey": "Es wurde ein Mitglied gelistet, dessen Schl\xFCssel nie ankam.", + "groupErr.outsider": "Es kam ein Frame von jemandem au\xDFerhalb der Gruppe an.", + "groupErr.limit": "Eine Gruppe ist auf acht Mitglieder begrenzt.", + "groupErr.tooLarge": "Eine Nachricht war zu gro\xDF, um sie an die Gruppe zu senden.", + "fileType.text": "Reiner Text", + "fileType.images": "Bilder", + "fileType.archives": "Archive", + "fileType.voice": "Sprachnachrichten", + "fileType.unsupported": "Nicht unterst\xFCtzt", + "qrScan.title": "QR-Code scannen", + "qrScan.auto": "Automatik", + "qrScan.reset": "Zur\xFCcksetzen", + "qrScan.autoScroll": "Automatisches Scrollen aktiv", + "qrScan.starting": "Kamera wird gestartet \u2026", + "qrScan.point": "Kamera auf den QR-Code richten", + "qrScan.tapFocus": "Zum Fokussieren auf den Bildschirm tippen", + "qrScan.focusing": "Wird fokussiert \u2026", + "iceErr.notArray": "Die Serverliste muss ein Array sein", + "iceErr.invalidJson": "Ung\xFCltiges JSON", + "iceErr.tooMany": "Zu viele Server (h\xF6chstens {max})", + "iceErr.invalidEntry": "{label}: ung\xFCltiger Eintrag", + "iceErr.urlCount": "{label}: 1 bis {max} URLs erforderlich", + "iceErr.turnCreds": "{label}: TURN-Server brauchen \xFCblicherweise Benutzername und Zugangsdaten", + "iceUrl.notString": "Die URL muss eine Zeichenkette sein", + "iceUrl.empty": "Die URL ist leer", + "iceUrl.tooLong": "Die URL ist zu lang", + "iceUrl.badChars": "Die URL enth\xE4lt ung\xFCltige Zeichen", + "iceUrl.badScheme": "Die URL muss mit stun:, stuns:, turn: oder turns: beginnen", + "iceUrl.badQuery": "Die URL hat eine ung\xFCltige Abfrage", + "iceUrl.noHost": "In der URL fehlt der Host", + "iceUrl.badHost": "Die URL hat einen ung\xFCltigen Host oder Port", + "iceUrl.badTransport": "Die URL-Abfrage muss transport=udp oder transport=tcp lauten", + "msg.off": "Aus", + "file.consentUnavailable": "Keine Zustimmung m\xF6glich", + "secLevel.MAXIMUM": "MAXIMAL", + "secLevel.INITIALIZING": "WIRD GESTARTET", + "secLevel.ERROR": "FEHLER", + "secLevel.UNKNOWN": "UNBEKANNT", + "status.error": "Fehler", + "offline.disconnect": "Trennen", + "offline.learnMore": "Mehr erfahren", + "pwa.installApp": "App installieren", + "chat.onWeb": "Sie nutzen die Web-Version" + }, + "fr": { + "language.label": "Langue", + "community.title": "Construisez l'avenir de la vie priv\xE9e", + "community.description": "SecureBit grandit gr\xE2ce \xE0 sa communaut\xE9. Vos id\xE9es et vos retours fa\xE7onnent l'avenir des communications s\xE9curis\xE9es, d\xE9velopp\xE9es \xE0 ciel ouvert, avec une validation ASN.1 compl\xE8te de bout en bout.", + "community.github": "D\xE9p\xF4t GitHub", + "community.feedback": "Vos retours", + "unique.eyebrow": "Ce qui nous distingue", + "unique.heading": "Pourquoi SecureBit est unique", + "unique.s1.titleTop": "C\u0153ur de chiffrement", + "unique.s1.titleBottom": "en couches", + "unique.s1.collapsed": "C\u0153ur de chiffrement", + "unique.s1.desc": "\xC9change de cl\xE9s ECDH P-384, charges utiles en AES-256-GCM, signatures ECDSA et validation ASN.1 compl\xE8te, r\xE9unis en une seule cha\xEEne durcie.", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "Pur P2P", + "unique.s2.titleBottom": "sur WebRTC", + "unique.s2.collapsed": "Pur P2P sur WebRTC", + "unique.s2.desc": "Les messages passent directement d'un appareil \xE0 l'autre par WebRTC. Aucun relais ne retient vos donn\xE9es : le serveur aide seulement deux pairs \xE0 se trouver.", + "unique.s2.tags": [ + "DTLS 1.3", + "Sans relais" + ], + "unique.s3.titleTop": "Confidentialit\xE9", + "unique.s3.titleBottom": "persistante parfaite", + "unique.s3.collapsed": "Confidentialit\xE9 persistante", + "unique.s3.desc": "Les cl\xE9s de session tournent en continu et sont jet\xE9es apr\xE8s usage : une cl\xE9 compromise n'ouvre jamais les conversations pass\xE9es.", + "unique.s3.tags": [ + "Cl\xE9s \xE9ph\xE9m\xE8res", + "Rotation automatique" + ], + "unique.s4.titleTop": "Brouillage", + "unique.s4.titleBottom": "du trafic", + "unique.s4.collapsed": "Brouillage du trafic", + "unique.s4.desc": "La taille des paquets et leur cadence sont compl\xE9t\xE9es et rendues al\xE9atoires, ce qui masque les motifs de m\xE9tadonn\xE9es \xE0 quiconque observe la ligne.", + "unique.s4.tags": [ + "Remplissage de paquets", + "D\xE9calage temporel" + ], + "unique.s5.titleTop": "Aucune collecte", + "unique.s5.titleBottom": "de donn\xE9es", + "unique.s5.collapsed": "Aucune collecte de donn\xE9es", + "unique.s5.desc": "Aucun compte, aucun journal, aucun message conserv\xE9. Il n'y a rien sur un serveur \xE0 faire fuiter, \xE0 saisir ou \xE0 vendre.", + "unique.s5.tags": [ + "Sans compte", + "Sans journaux" + ], + "partners.eyebrow": "Partenaires et \xE9cosyst\xE8me", + "partners.heading": "Nos partenaires nous font confiance", + "partners.aegis.desc": "Partenaire financier qui prot\xE8ge les communications financi\xE8res confidentielles de tout son portefeuille.", + "partners.aegis.role": "Investisseur strat\xE9gique", + "partners.furilabs.desc": "T\xE9l\xE9phones Linux ax\xE9s sur la vie priv\xE9e, livr\xE9s avec SecureBit comme canal s\xE9curis\xE9 par d\xE9faut.", + "partners.furilabs.role": "Partenaire technologique", + "partners.inviteTitle": "Devenir partenaire", + "partners.inviteDesc": "Vous construisez du mat\xE9riel ou de l'infrastructure pour la vie priv\xE9e ? Int\xE9grons SecureBit.", + "partners.inviteCta": "Entamer la conversation", + "roadmap.eyebrow": "Feuille de route", + "roadmap.heading": "L'\xE9volution de SecureBit", + "roadmap.subheading": "Du premier prototype \xE0 un r\xE9seau d\xE9centralis\xE9 r\xE9sistant au quantique, avec une validation ASN.1 compl\xE8te \xE0 chaque couche.", + "roadmap.progress": "{shipped} jalons sur {total} atteints", + "roadmap.upcoming": "{upcoming} \xE0 venir", + "roadmap.keyFeatures": "Fonctions cl\xE9s", + "roadmap.status.released": "Publi\xE9", + "roadmap.status.current": "En cours", + "roadmap.status.dev": "En d\xE9veloppement", + "roadmap.status.planned": "Planifi\xE9", + "roadmap.status.research": "Recherche", + "hero.headlineTop": "Une ligne directe", + "hero.headlineBottom": "que vous seuls pouvez lire.", + "hero.subheading": "Les cl\xE9s sont cr\xE9\xE9es sur votre appareil et \xE9chang\xE9es directement entre pairs. Aucun compte, aucun serveur ne conserve vos messages.", + "hero.diagramAlt": "Une ligne chiffr\xE9e directe vers un pair, rejointe par deux autres pairs", + "intro.createTitle": "Cr\xE9er un canal", + "intro.createDesc": "Votre appareil g\xE9n\xE8re les cl\xE9s et une invitation \xE0 usage unique. Rien de tout cela ne passe par un serveur.", + "intro.createCta": "G\xE9n\xE9rer les cl\xE9s et l'invitation", + "intro.joinTitle": "Rejoindre un canal", + "intro.scanTitle": "Scanner le QR avec la cam\xE9ra", + "intro.scanSubtitle": "Le plus rapide : visez l'\xE9cran de votre correspondant", + "intro.orPasteCode": "ou collez le code", + "intro.pastePlaceholder": "Collez ici le code d'invitation\u2026", + "intro.connect": "Se connecter", + "intro.connecting": "Traitement\u2026", + "roadmap.r1.title": "D\xE9but du d\xE9veloppement", + "roadmap.r1.sub": "Id\xE9e, prototype et mise en place de l'infrastructure", + "roadmap.r1.date": "D\xE9but 2025", + "roadmap.r1.features": [ + "Concept et exigences d\xE9finis", + "Choix de la pile : WebRTC, P2P, cryptographie", + "Premiers prototypes de messagerie", + "Cr\xE9ation du d\xE9p\xF4t et de l'int\xE9gration continue", + "Architecture de chiffrement de base", + "Conception UX/UI" + ], + "roadmap.r2.title": "Version alpha", + "roadmap.r2.sub": "Premi\xE8re alpha publique : chat simple et \xE9change de cl\xE9s", + "roadmap.r2.date": "Printemps 2025", + "roadmap.r2.features": [ + "Messagerie P2P simple par WebRTC", + "Chiffrement de bout en bout simple (sch\xE9ma de d\xE9monstration)", + "Signalisation et reconnexion stables", + "Interface minimale pour les tests", + "Retours des premiers testeurs" + ], + "roadmap.r3.title": "S\xE9curit\xE9 durcie", + "roadmap.r3.sub": "Renforcement de la s\xE9curit\xE9 et publication de la branche stable", + "roadmap.r3.date": "\xC9t\xE9 2025", + "roadmap.r3.features": [ + "ECDH/ECDSA en production", + "Confidentialit\xE9 persistante et rotation des cl\xE9s", + "Contr\xF4les d'authentification am\xE9lior\xE9s", + "Chiffrement des fichiers et envoi de charges volumineuses", + "Audit des processus cryptographiques de base" + ], + "roadmap.r4.title": "Mont\xE9e en charge et stabilit\xE9", + "roadmap.r4.sub": "Mise \xE0 l'\xE9chelle du r\xE9seau et gains de stabilit\xE9", + "roadmap.r4.date": "Automne 2025", + "roadmap.r4.features": [ + "Optimisation des connexions P2P et du passage de NAT", + "M\xE9canismes de reconnexion et files de messages", + "Consommation de batterie r\xE9duite sur mobile", + "Synchronisation entre plusieurs appareils", + "Outils de supervision et de journalisation pour les d\xE9veloppeurs" + ], + "roadmap.r5.title": "La vie priv\xE9e d'abord", + "roadmap.r5.sub": "Priorit\xE9 \xE0 la vie priv\xE9e : r\xE9duire les m\xE9tadonn\xE9es", + "roadmap.r5.date": "Hiver 2025", + "roadmap.r5.features": [ + "Protection des m\xE9tadonn\xE9es et empreinte r\xE9duite", + "Exp\xE9riences de routage en oignon et de DHT", + "Options de connexion anonyme", + "Pr\xE9paration de l'audit de code ouvert", + "V\xE9rification des correspondants am\xE9lior\xE9e" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "Cryptographie de niveau militaire en 18 couches, avec validation ASN.1 compl\xE8te", + "roadmap.r6.date": "Fin 2025", + "roadmap.r6.features": [ + "Triple protection : ECDH + DTLS + SAS", + "Chiffrement ECDH P-384 et AES-GCM 256 bits", + "V\xE9rification de l'empreinte DTLS", + "V\xE9rification SAS (cha\xEEne d'authentification courte)", + "Confidentialit\xE9 persistante avec rotation des cl\xE9s", + "Protection renforc\xE9e contre les attaques de l'intercepteur", + "Validation ASN.1 DER compl\xE8te", + "V\xE9rification des OID et des points EC", + "Validation de la structure SPKI", + "Architecture P2P sur WebRTC", + "Protection des m\xE9tadonn\xE9es", + "Code ouvert \xE0 100 %" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "Applications de bureau natives pour Windows, macOS et Linux", + "roadmap.r7.date": "D\xE9but 2026", + "roadmap.r7.features": [ + "Application Windows (Tauri v2)", + "Application macOS (Tauri v2)", + "AppImage Linux (Tauri v2)", + "Notifications en temps r\xE9el", + "Reconnexion automatique", + "Synchronisation entre appareils", + "Interface remani\xE9e", + "Fichiers jusqu'\xE0 100 Mo" + ], + "roadmap.r8.title": "Voix et appels s\xE9curis\xE9s", + "roadmap.r8.sub": "Messages vocaux, appels audio et vid\xE9o chiffr\xE9s", + "roadmap.r8.date": "D\xE9but 2026", + "roadmap.r8.features": [ + "Messages vocaux chiffr\xE9s de bout en bout", + "Appels audio chiffr\xE9s en t\xEAte-\xE0-t\xEAte (WebRTC)", + "Appels vid\xE9o chiffr\xE9s en t\xEAte-\xE0-t\xEAte (WebRTC)", + "Confidentialit\xE9 persistante pour le flux en direct", + "Flux m\xE9dia prot\xE9g\xE9s par SRTP/DTLS", + "V\xE9rification SAS pendant l'appel", + "Notifications d'appel et reconnexion automatique", + "M\xE9dia P2P \xE0 faible latence" + ], + "roadmap.r9.title": "Communication de groupe", + "roadmap.r9.sub": "Discussions de groupe sans renoncer \xE0 la vie priv\xE9e", + "roadmap.r9.date": "Maintenant", + "roadmap.r9.features": [ + "Groupes P2P jusqu'\xE0 8 participants", + "Distribution en maillage, avec relais sign\xE9 en secours", + "Un seul code de s\xE9curit\xE9 de groupe, compar\xE9 par tous", + "C\xE9r\xE9monie d'engagement puis de r\xE9v\xE9lation, contre la recherche de codes", + "Cl\xE9s d'identit\xE9 propres au groupe, \xE9ph\xE9m\xE8res par conception", + "Composition sign\xE9e, ordonn\xE9e par \xE9poques", + "Messages sign\xE9s : une transcription divergente devient d\xE9montrable", + "Aucun serveur, aucune cl\xE9 de groupe partag\xE9e, aucun historique" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "Applications natives pour iOS et Android", + "roadmap.r10.date": "2e trimestre 2027", + "roadmap.r10.features": [ + "Application iOS native (Swift/SwiftUI)", + "Application Android native (Kotlin/Jetpack Compose)", + "Prise en charge PWA sur les navigateurs mobiles", + "Notifications push en temps r\xE9el", + "Optimisation de la batterie", + "Interface adapt\xE9e au mobile", + "File d'attente des messages hors ligne", + "Authentification biom\xE9trique" + ], + "roadmap.r11.title": "\xC9dition r\xE9sistante au quantique", + "roadmap.r11.sub": "Protection contre les ordinateurs quantiques", + "roadmap.r11.date": "4e trimestre 2027", + "roadmap.r11.features": [ + "Cryptographie post-quantique CRYSTALS-Kyber", + "Signatures num\xE9riques SPHINCS+", + "Sch\xE9ma hybride : classique et post-quantique", + "\xC9change de cl\xE9s r\xE9sistant au quantique", + "Algorithmes de hachage mis \xE0 jour", + "Migration des sessions existantes", + "Compatibilit\xE9 avec la v5.x", + "Protocoles r\xE9sistants au quantique" + ], + "roadmap.r12.title": "R\xE9seau d\xE9centralis\xE9", + "roadmap.r12.sub": "Un r\xE9seau enti\xE8rement d\xE9centralis\xE9", + "roadmap.r12.date": "2028", + "roadmap.r12.features": [ + "R\xE9seau maill\xE9 de n\u0153uds", + "DHT pour la d\xE9couverte des pairs", + "Routage en oignon int\xE9gr\xE9", + "Tokenomique et incitations pour les n\u0153uds", + "Gouvernance par une DAO", + "Interop\xE9rabilit\xE9 avec d'autres r\xE9seaux", + "Compatibilit\xE9 multiplateforme", + "R\xE9seau auto-r\xE9parateur" + ], + "roadmap.r13.title": "Assistant de confidentialit\xE9 par IA", + "roadmap.r13.sub": "L'IA au service de la vie priv\xE9e et de la s\xE9curit\xE9", + "roadmap.r13.date": "2028+", + "roadmap.r13.features": [ + "Analyse locale des menaces par IA", + "D\xE9tection automatique de l'intercepteur", + "Cryptographie adaptative", + "Recommandations de s\xE9curit\xE9 personnalis\xE9es", + "Apprentissage automatique \xE0 divulgation nulle", + "Assistant IA priv\xE9", + "S\xE9curit\xE9 pr\xE9dictive", + "Protection autonome contre les attaques" + ], + "handshake.step1": "G\xE9n\xE9ration de la paire de cl\xE9s ECDH P-384", + "handshake.step2": "D\xE9rivation du code de v\xE9rification", + "handshake.step3": "Fixation de la confidentialit\xE9 persistante", + "handshake.securingTitle": "S\xE9curisation de votre canal", + "handshake.answerTitle": "Pr\xE9paration de votre r\xE9ponse", + "handshake.securingDesc": "Nous forgeons des cl\xE9s assez solides pour r\xE9sister \xE0 toute alt\xE9ration.", + "handshake.shareTitle": "Partagez votre invitation", + "handshake.sendAnswerTitle": "Renvoyez votre r\xE9ponse", + "handshake.shareDesc": "Montrez le QR ou envoyez le code \xE0 votre correspondant. Il est \xE0 usage unique et expire vite.", + "handshake.sendAnswerDesc": "Donnez cette r\xE9ponse \xE0 la personne qui a cr\xE9\xE9 le canal pour qu'elle termine la poign\xE9e de main.", + "handshake.establish": "\xC9tablir la connexion", + "handshake.thenReceive": "Recevez ensuite la r\xE9ponse que votre correspondant renvoie", + "handshake.pasteAnswerPlaceholder": "Collez le code de r\xE9ponse\u2026", + "handshake.answerSentNote": "Envoyez cette r\xE9ponse \xE0 la personne qui a cr\xE9\xE9 le canal, puis patientez : la discussion s'ouvre d\xE8s qu'elle se connecte.", + "handshake.qrHint": "Gardez ceci ouvert jusqu'\xE0 ce que votre correspondant ait captur\xE9 le code.", + "handshake.qrHintFrames": "La poign\xE9e de main est r\xE9partie sur {frames} images : gardez ceci ouvert jusqu'\xE0 ce que votre correspondant les ait toutes captur\xE9es.", + "verify.title": "V\xE9rification de s\xE9curit\xE9", + "verify.desc": "Comparez ce code de s\xE9curit\xE9 avec votre correspondant par un autre canal (voix ou en personne), puis saisissez-le pour ouvrir la discussion.", + "verify.enterLabel": "Saisissez le code v\xE9rifi\xE9", + "verify.placeholder": "Tapez le code ici", + "verify.confirm": "Confirmer le code", + "verify.confirmed": "Confirm\xE9", + "verify.mismatch": "Ne correspond pas", + "verify.yours": "Votre confirmation", + "verify.peer": "Confirmation du correspondant", + "verify.pending": "En attente", + "verify.waiting": "En attente du code\u2026", + "verify.verified": "Canal v\xE9rifi\xE9", + "verify.bothConfirmed": "Les deux parties ont confirm\xE9. Ouverture de la discussion s\xE9curis\xE9e\u2026", + "pwa.bannerTitle": "Installer SecureBit.chat", + "pwa.bannerDesc": "Profitez de l'exp\xE9rience d'une application native, avec une s\xE9curit\xE9 renforc\xE9e", + "pwa.install": "Installer", + "pwa.dismiss": "Ignorer", + "pwa.close": "Fermer", + "pwa.iosTitle": "Installer sur iOS", + "pwa.iosStep1": "Touchez le bouton Partager", + "pwa.iosStep1Hint": "En g\xE9n\xE9ral en bas de Safari", + "pwa.iosStep2": "Trouvez \xAB Sur l'\xE9cran d'accueil \xBB", + "pwa.iosStep2Hint": "Faites d\xE9filer le menu de partage", + "pwa.iosStep3": "Touchez \xAB Ajouter \xBB", + "pwa.iosStep3Hint": "Confirmez pour installer SecureBit.chat", + "pwa.genericTitle": "Installer SecureBit", + "pwa.genericDesc": "Chaque navigateur installe \xE0 sa mani\xE8re. Choisissez les \xE9tapes qui correspondent au v\xF4tre.", + "pwa.gotIt": "Compris", + "pwa.installedTitle": "Application install\xE9e !", + "pwa.installedIos": "Application iOS install\xE9e ! Ouvrez-la depuis l'\xE9cran d'accueil.", + "pwa.installedGeneric": "SecureBit.chat est maintenant sur votre appareil", + "pwa.anytimeTitle": "Installable \xE0 tout moment", + "pwa.anytimeDesc": "Vous pouvez installer SecureBit.chat depuis le menu de votre navigateur quand vous voulez, pour la meilleure exp\xE9rience.", + "pwa.ok": "D'accord", + "step.open": "\xC9tape 1 \xB7 ouvrir un canal", + "step.exchange": "\xC9tape 2 \xB7 \xE9change", + "step.verification": "\xC9tape 3 \xB7 v\xE9rification", + "action.create": "Cr\xE9er", + "action.join": "Rejoindre", + "action.back": "Retour", + "action.copy": "Copier", + "action.copied": "Copi\xE9", + "action.scan": "Scanner", + "action.downloadDesktop": "T\xE9l\xE9charger l'application", + "action.advancedSettings": "R\xE9glages avanc\xE9s", + "cred.offerTag": "offre \xB7 ou copiez le texte", + "cred.answerTag": "r\xE9ponse \xB7 ou copiez le texte", + "cred.reveal": "Cliquez pour afficher - gardez ce code priv\xE9", + "qr.title": "Scanner le QR", + "qr.subtitle": "Visez le QR de votre correspondant", + "qr.scanning": "Lecture\u2026", + "qr.hint": "Restez stable jusqu'\xE0 ce que toutes les parties soient captur\xE9es. La cam\xE9ra reste locale - rien n'est envoy\xE9.", + "mesh.you": "vous", + "mesh.peer": "correspondant \xB7 session 1", + "mesh.joined2": "chlo\xE9 a rejoint \xB7 +2", + "mesh.joined3": "hugo a rejoint \xB7 +3", + "ice.title": "R\xE9glages r\xE9seau", + "ice.subtitle": "Configur\xE9 en local - jamais transmis \xE0 votre correspondant", + "ice.intro": "Par d\xE9faut, SecureBit utilise des serveurs STUN publics pour n\xE9gocier le lien pair-\xE0-pair. Indiquez vos propres STUN/TURN si vous les h\xE9bergez.", + "ice.publicTitle": "Serveurs publics (par d\xE9faut)", + "ice.publicDesc": "Sans configuration. Suffisant pour la plupart.", + "ice.customTitle": "Mes propres serveurs STUN/TURN", + "ice.customDesc": "Jusqu'\xE0 {max} serveurs.", + "ice.turnNote": "Un relais TURN voit l'adresse IP des deux pairs et le rythme du trafic, mais jamais le contenu des messages, qui reste chiffr\xE9 de bout en bout. Pr\xE9f\xE9rez ", + "ice.turnNoteTls": " (TLS).", + "ice.test": "Tester les serveurs", + "ice.testing": "Test en cours\u2026", + "ice.relayTitle": "Mode relais uniquement", + "ice.relayBadge": "CONFIDENTIALIT\xC9 MAXIMALE", + "ice.relayDesc": "Fait passer tout le trafic par TURN : votre correspondant ne voit jamais votre adresse IP. N\xE9cessite un serveur TURN.", + "ice.relayWarning": "Le mode relais uniquement est activ\xE9 mais aucun serveur TURN n'est configur\xE9. La connexion ne pourra pas d\xE9marrer.", + "ice.persist": "Enregistrer sur cet appareil", + "ice.persistDesc": "Stock\xE9 chiffr\xE9 dans ce navigateur. Laissez d\xE9sactiv\xE9 pour n'utiliser ces r\xE9glages que le temps de la session.", + "ice.forget": "Oublier l'enregistrement", + "ice.cancel": "Annuler", + "ice.apply": "Appliquer", + "ice.errUnavailable": "WebRTC n'est pas disponible dans ce navigateur", + "ice.errInvalid": "Configuration de serveur invalide", + "update.title": "Mise \xE0 jour disponible", + "update.desc": "Une version plus r\xE9cente de SecureBit a \xE9t\xE9 d\xE9tect\xE9e.", + "update.currentVersion": "Version actuelle", + "update.newVersion": "Nouvelle version", + "update.now": "Mettre \xE0 jour", + "update.later": "Plus tard", + "update.unknown": "n/d", + "update.stepSaving": "Enregistrement des donn\xE9es\u2026", + "update.stepSwCaches": "Vidage des caches du Service Worker\u2026", + "update.stepSwUnregister": "D\xE9sinscription des Service Workers\u2026", + "update.stepBrowserCache": "Vidage du cache du navigateur\u2026", + "update.stepVersion": "Mise \xE0 jour de la version\u2026", + "update.stepReload": "Rechargement de l'application\u2026", + "update.error": "Erreur de mise \xE0 jour. Rechargez la page manuellement (Ctrl+F5 ou Cmd+Maj+R)", + "update.confirmSkip": "Une nouvelle version est disponible. La mise \xE0 jour est recommand\xE9e pour la s\xE9curit\xE9 et la stabilit\xE9. Continuer sans mettre \xE0 jour ?", + "offline.backOnline": "De nouveau en ligne", + "offline.mode": "Mode hors ligne", + "offline.dismiss": "Fermer", + "offline.lostTitle": "Connexion perdue", + "offline.lostDesc": "SecureBit est maintenant hors ligne. Certaines fonctions sont limit\xE9es, mais vos donn\xE9es restent en s\xE9curit\xE9.", + "offline.point1": "Votre session et vos cl\xE9s sont conserv\xE9es", + "offline.point2": "Aucune donn\xE9e n'est stock\xE9e sur un serveur", + "offline.point3": "Messages et fichiers se synchronisent \xE0 la reconnexion", + "offline.continue": "Continuer hors ligne", + "offline.restoredTitle": "\xC0 la reconnexion", + "offline.restoredDesc": "Une coupure ne vous co\xFBte rien. SecureBit met tout en file d'attente en local et reprend la session chiffr\xE9e d\xE8s que vous revenez en ligne.", + "offline.r1Title": "Vos messages sont remis", + "offline.r1Desc": "Tout ce que vous avez \xE9crit hors ligne part automatiquement \xE0 votre correspondant.", + "offline.r2Title": "Les fichiers finissent de partir", + "offline.r2Desc": "Les envois reprennent l\xE0 o\xF9 ils s'\xE9taient arr\xEAt\xE9s - rien \xE0 renvoyer.", + "offline.r3Title": "Leurs messages et fichiers arrivent", + "offline.r3Desc": "Tout ce que votre correspondant a envoy\xE9 pendant la coupure vous parvient dans l'ordre.", + "offline.r4Title": "Rien n'est perdu", + "offline.r4Desc": "Apr\xE8s la reconnexion il n'y a aucun trou - la conversation reprend exactement l\xE0 o\xF9 elle s'\xE9tait arr\xEAt\xE9e.", + "offline.gotIt": "Compris", + "qr.showTitle": "Afficher le QR", + "qr.showSubtitle": "Plein \xE9cran \xB7 laissez votre correspondant scanner", + "qr.showSubtitleFrames": "Plein \xE9cran \xB7 laissez votre correspondant scanner les {frames} images", + "notify.enabledBody": "Notifications activ\xE9es. Vous serez pr\xE9venu des nouveaux messages.", + "notify.workingBody": "Les notifications fonctionnent. Vous serez pr\xE9venu des nouveaux messages.", + "pw.label": "Champ du mot de passe", + "pw.placeholder": "Saisissez le mot de passe\u2026", + "pw.decrypt": "D\xE9chiffrer", + "pw.cancel": "Annuler", + "file.title": "Transferts de fichiers", + "file.drop": "D\xE9posez les fichiers ici", + "file.dropHint": "Chiffr\xE9s de bout en bout avant l'envoi \xB7 jusqu'\xE0 100 Mo", + "file.browse": "Parcourir l'appareil", + "file.incoming": "Fichier entrant", + "file.accept": "Accepter", + "file.reject": "Refuser", + "file.download": "T\xE9l\xE9charger", + "file.notReady": "Connexion pas encore pr\xEAte", + "file.tooLarge": "Fichier trop volumineux", + "file.typeNotAllowed": "Type de fichier non autoris\xE9", + "file.maxConcurrent": "Nombre maximal de transferts simultan\xE9s atteint", + "file.gone": "Ce fichier n'est plus disponible au t\xE9l\xE9chargement.", + "call.incoming": "Appel entrant", + "call.incomingVideo": "Appel vid\xE9o entrant", + "call.encrypted": "Appel chiffr\xE9", + "call.encryptedShort": "Chiffr\xE9", + "call.peer": "Pair s\xE9curis\xE9", + "call.connecting": "Connexion\u2026", + "call.ringing": "Sonnerie\u2026", + "call.accept": "Accepter", + "call.decline": "Refuser", + "call.end": "Raccrocher", + "call.camera": "Cam\xE9ra", + "call.cameraOff": "Cam\xE9ra \xE9teinte", + "call.peerCameraOff": "La cam\xE9ra de votre correspondant est \xE9teinte", + "call.flipCamera": "Changer de cam\xE9ra", + "call.addVideo": "Ajouter la vid\xE9o", + "call.video": "Vid\xE9o", + "call.muted": "Micro coup\xE9", + "call.expand": "Agrandir", + "call.minimize": "R\xE9duire", + "call.quality": "Qualit\xE9 de la connexion", + "call.qualityExcellent": "Excellente", + "call.videoPrefix": "Vid\xE9o \xB7 ", + "call.voicePrefix": "Voix \xB7 ", + "group.new": "Nouveau groupe", + "group.create": "Cr\xE9er le groupe", + "group.join": "Rejoindre le groupe", + "group.name": "Nom du groupe", + "group.nameTooLong": "Le nom du groupe est trop long.", + "group.capacity": "Jusqu'\xE0 {max} personnes, en pair-\xE0-pair. Tout le monde comparera un seul code de s\xE9curit\xE9 avant l'ouverture du groupe.", + "group.invite": "Inviter", + "group.inviteMore": "Inviter d'autres membres", + "group.invitePeople": "Inviter {count} personnes", + "group.invitation": "Invitation au groupe", + "group.addMembers": "Ajouter des membres", + "group.roomFor": "Encore de la place pour {remaining}. \xC0 leur arriv\xE9e, tout le monde comparera un nouveau code de groupe.", + "group.membersCount": "{count} membres", + "group.member": "Membre", + "group.members": "Membres", + "group.remove": "Retirer {name}", + "group.message": "\xC9crire \xE0 {name}", + "group.leave": "Quitter", + "group.leaveThis": "Quitter ce groupe", + "group.cancel": "Annuler le groupe", + "group.close": "Fermer", + "group.cancelBtn": "Annuler", + "group.decline": "Refuser", + "group.working": "En cours\u2026", + "group.sasTitle": "Code de s\xE9curit\xE9 du groupe", + "group.sasEveryone": "Tout le monde voit ce code", + "group.sasCompare": "Comparez le code du groupe avec chaque membre pour ouvrir ce groupe.", + "group.sasReadAloud": "Lisez ces chiffres \xE0 voix haute \xE0 ", + "group.sasWarning": "Si ne serait-ce qu'un membre lit un code diff\xE9rent, quelqu'un se trouve entre vous. Annulez le groupe - ne confirmez pas.", + "group.confirmFirst": "Confirmez d'abord le code du groupe", + "group.codeSuffix": " \xB7 code {code}", + "group.exchangingNonces": "\xC9change des valeurs \xE0 usage unique\u2026", + "group.waitingCommit": "En attente de l'engagement de chaque membre\u2026", + "group.waitingJoin": "En attente des autres membres\u2026", + "group.emptyChat": "Rien ici pour l'instant. Chaque message est sign\xE9 par son exp\xE9diteur et passe par le lien chiffr\xE9 propre \xE0 chaque membre.", + "group.noVerified": "Aucune discussion v\xE9rifi\xE9e pour l'instant. Ouvrez d'abord une discussion en t\xEAte-\xE0-t\xEAte et comparez son code de s\xE9curit\xE9 - un groupe se construit \xE0 partir de connexions d\xE9j\xE0 v\xE9rifi\xE9es.", + "group.noMoreToAdd": "Aucune autre discussion v\xE9rifi\xE9e \xE0 ajouter. Ouvrez une discussion en t\xEAte-\xE0-t\xEAte et comparez d'abord son code de s\xE9curit\xE9.", + "group.directLink": "Lien pair-\xE0-pair direct", + "group.noDirectLink": "Pas encore de lien direct - les messages passent par un autre membre pendant qu'il s'\xE9tablit", + "group.relayNote": "Certains membres n'ont pas encore de lien direct avec vous. Leurs messages passent par un autre membre, qui voit que vous discutez mais ne peut ni lire au-del\xE0 de la signature ni modifier vos propos. Le groupe continue d'essayer de les connecter directement.", + "group.relayOnlyOff": "Le mode relais uniquement est d\xE9sactiv\xE9 : chaque membre se connecte directement \xE0 vous et apprend votre adresse IP, y compris ceux invit\xE9s par quelqu'un d'autre. Activez-le dans les r\xE9glages r\xE9seau si cela compte ici.", + "group.memberOffline": "{name} est hors ligne et ne recevra pas les messages. Cette personne reste membre : la retirer r\xE9g\xE9n\xE8re les cl\xE9s du groupe.", + "group.joinNote": "Les autres membres sauront que vous \xEAtes dans ce groupe. Il n'y a pas d'historique \xE0 rattraper - un groupe d\xE9marre vide.", + "group.inviteSentNote": "Le groupe continue de fonctionner jusqu'\xE0 leur acceptation. Il n'y a pas d'historique \xE0 rattraper pour eux : ils ne verront que ce qui sera envoy\xE9 \xE0 partir de maintenant.", + "group.errNotCreated": "Groupe non cr\xE9\xE9", + "group.errNobodyAccepted": "Personne n'a accept\xE9 l'invitation \xE0 temps.", + "group.errNothingSent": "Rien n'a \xE9t\xE9 envoy\xE9 ni v\xE9rifi\xE9. Fermez cette fen\xEAtre et r\xE9essayez une fois tout le monde connect\xE9.", + "group.errNotFormed": "Ce groupe n'a pas pu \xEAtre form\xE9.", + "group.errFull": "Ce groupe est complet.", + "group.errInviteFailed": "L'invitation n'a pas pu \xEAtre envoy\xE9e - cette discussion n'est pas connect\xE9e.", + "group.errNoMemberList": "La personne qui a cr\xE9\xE9 le groupe n'a jamais envoy\xE9 la liste des membres.", + "group.errUnsignedList": "La liste des membres n'a pas \xE9t\xE9 sign\xE9e par la personne qui a cr\xE9\xE9 le groupe. Ne r\xE9essayez pas - pr\xE9venez-la.", + "group.errNotOwner": "Quelqu'un d'autre que le propri\xE9taire du groupe a tent\xE9 de modifier les membres.", + "hdr.tagline": "Chiffr\xE9 de bout en bout", + "hdr.netSettings": "R\xE9glages r\xE9seau avanc\xE9s", + "hdr.netSettingsTitle": "R\xE9glages r\xE9seau avanc\xE9s (STUN/TURN)", + "hdr.disconnect": "Se d\xE9connecter", + "status.connected": "Connect\xE9", + "status.connecting": "Connexion\u2026", + "status.notConnected": "Non connect\xE9", + "status.reconnecting": "Reconnexion\u2026", + "status.retrying": "Nouvelle tentative\u2026", + "status.verifying": "V\xE9rification\u2026", + "status.peerDisconnected": "Le correspondant s'est d\xE9connect\xE9", + "sec.replayProtection": "Protection contre le rejeu", + "sec.messageIntegrity": "Int\xE9grit\xE9 des messages (HMAC)", + "sec.forwardSecrecy": "Confidentialit\xE9 persistante parfaite", + "sec.metadataProtection": "Protection des m\xE9tadonn\xE9es", + "sec.trafficObfuscation": "Brouillage du trafic", + "sec.realTests": "Tests cryptographiques r\xE9els", + "sec.simulatedData": "Donn\xE9es simul\xE9es", + "sec.testPassed": "Test r\xE9ussi", + "sec.testFailed": "Test \xE9chou\xE9 ou indisponible", + "sec.verificationDone": "V\xE9rification cryptographique r\xE9elle termin\xE9e", + "sec.verificationInProgress": "V\xE9rification de s\xE9curit\xE9 en cours\u2026", + "sec.verificationWait": "V\xE9rification de s\xE9curit\xE9 en cours\u2026\nAttendez la fin de la v\xE9rification cryptographique en temps r\xE9el.", + "sec.verificationUnavailable": "V\xE9rification de s\xE9curit\xE9 indisponible", + "chat.placeholder": "\xC9crivez un message chiffr\xE9\u2026", + "chat.send": "Envoyer le message", + "chat.sendFiles": "Envoyer des fichiers", + "chat.hideFiles": "Masquer les fichiers", + "chat.recordVoice": "Enregistrer un message vocal", + "chat.sendVoice": "Envoyer le message vocal", + "chat.discard": "Abandonner", + "chat.codeBlock": "Envoyer comme bloc de code (agrandit le champ)", + "chat.codeHint": "Extrait de code \xB7 mise en forme conserv\xE9e \xB7 \u2318\u21B5 pour envoyer", + "chat.viewOnce": "Vue unique", + "chat.viewOnceTitle": "Vue unique - dispara\xEEt d\xE8s que votre correspondant l'a lu", + "chat.viewOncePrefix": "Vue unique \xB7 ", + "chat.viewOnceTap": "Vue unique \xB7 touchez pour afficher", + "chat.viewedOnce": "D\xE9j\xE0 vu", + "chat.disappearing": "Message \xE9ph\xE9m\xE8re - supprim\xE9 des deux c\xF4t\xE9s", + "chat.disappearAfter": "Dispara\xEEt apr\xE8s", + "chat.visibleFor": "Visible pendant", + "chat.timerPrefix": "Minuteur \xB7 ", + "chat.expired": "Ce message a expir\xE9", + "chat.deleteForEveryone": "Supprimer pour tout le monde", + "chat.sending": "Envoi", + "chat.delivered": "Remis", + "chat.notSent": "Non envoy\xE9", + "chat.notSentReason": "Non envoy\xE9 - le canal s\xE9curis\xE9 n'est pas pr\xEAt. Reconnectez-vous pour continuer.", + "chat.encrypted": "Chiffr\xE9", + "chat.decrypted": "D\xE9chiffr\xE9", + "chat.encryptedOnDevice": "Chiffr\xE9 sur votre appareil", + "chat.uploading": "Envoi", + "chat.downloading": "T\xE9l\xE9chargement", + "chat.transferring": "Transfert\u2026", + "chat.copied": "Copi\xE9 !", + "chat.collapse": "Replier", + "chat.closeMenu": "Fermer le menu", + "chat.newChat": "Nouvelle discussion", + "chat.newGroup": "Nouveau groupe", + "chat.createGroup": "Cr\xE9er un groupe", + "chat.groupChats": "Groupes", + "chat.secureChat": "Discussion s\xE9curis\xE9e", + "chat.nameThis": "Nommez cette discussion", + "chat.rename": "Renommer la discussion (en local)", + "chat.renameHint": "Double-cliquez pour renommer", + "chat.localLabel": "Nom local \xB7 stock\xE9 uniquement sur cet appareil", + "chat.setStatus": "Choisissez votre statut", + "chat.yourStatusPrefix": "Votre statut - ", + "chat.meshHint": "Jusqu'\xE0 8 pairs \xB7 maillage P2P", + "chat.offline": "Hors ligne", + "chat.noNetwork": "Pas de r\xE9seau \xB7 reconnexion", + "chat.startVoiceCall": "Lancer un appel vocal chiffr\xE9", + "chat.startVideoCall": "Lancer un appel vid\xE9o chiffr\xE9", + "chat.verifyForCalls": "V\xE9rifiez la session pour activer les appels", + "chat.e2eeNote": "Chaque message est chiffr\xE9 de bout en bout sur votre appareil avant de partir.", + "chat.peersOnly": "Envoy\xE9 de bout en bout aux seuls pairs connect\xE9s - jamais stock\xE9 sur un serveur.", + "flow.invitationCreated": "Invitation s\xE9curis\xE9e cr\xE9\xE9e", + "flow.invitationCreatedBang": "Invitation s\xE9curis\xE9e cr\xE9\xE9e et chiffr\xE9e.", + "flow.responseCreated": "R\xE9ponse s\xE9curis\xE9e cr\xE9\xE9e", + "flow.responseCreatedBang": "R\xE9ponse s\xE9curis\xE9e cr\xE9\xE9e.", + "flow.sendInvitation": "Envoyez le code d'invitation \xE0 votre correspondant par un canal s\xFBr (appel, SMS, etc.).", + "flow.sendResponse": "Envoyez le code de r\xE9ponse \xE0 la personne qui a ouvert le canal par un canal s\xFBr, ou laissez-la scanner le QR ci-dessous.", + "flow.sendEncryptedCode": "Envoyer le code chiffr\xE9", + "flow.sendTheResponse": "Envoyer la r\xE9ponse", + "flow.pasteOrWrite": "Collez ou saisissez le code\u2026", + "flow.processingInvitation": "Traitement de l'invitation s\xE9curis\xE9e\u2026", + "flow.processingResponse": "Traitement de la r\xE9ponse s\xE9curis\xE9e\u2026", + "flow.finalizing": "Finalisation de la connexion s\xE9curis\xE9e\u2026", + "flow.channelEstablished": "Canal s\xE9curis\xE9 \xE9tabli", + "flow.channelReady": "Le canal s\xE9curis\xE9 est pr\xEAt", + "flow.restoring": "R\xE9tablissement de la connexion\u2026", + "flow.invitationCaptured": "Invitation captur\xE9e.", + "err.needInvitation": "Vous devez coller le code d'invitation de votre correspondant.", + "err.needResponse": "Vous devez coller le code de r\xE9ponse de votre correspondant.", + "err.responseFormat": "Format de r\xE9ponse invalide - v\xE9rifiez le code", + "err.responseNoKey": "Code de r\xE9ponse invalide - cl\xE9 cryptographique manquante ou ab\xEEm\xE9e. V\xE9rifiez le code et r\xE9essayez.", + "err.responseNoSignKey": "Code de r\xE9ponse invalide - cl\xE9 de v\xE9rification de signature manquante. V\xE9rifiez le code et r\xE9essayez.", + "err.responseOutdated": "Les donn\xE9es de r\xE9ponse sont p\xE9rim\xE9es - utilisez une invitation r\xE9cente", + "err.setupError": "Erreur lors de l'\xE9tablissement de la connexion", + "err.notReady": "Connexion pas encore pr\xEAte", + "err.securityBreach": "Faille de s\xE9curit\xE9 d\xE9tect\xE9e - connexion refus\xE9e", + "err.securityValidation": "\xC9chec du contr\xF4le de s\xE9curit\xE9 - attaque possible", + "err.retiredQr": "Ce QR utilise un format abandonn\xE9 qui n'a pas permis de transf\xE9rer l'invitation. Demandez-en un nouveau, ou utilisez le copier-coller.", + "err.compressedQrNote": "Un QR compress\xE9 peut omettre le SDP par concision. Utilisez le copier-coller si la connexion \xE9choue.", + "err.inviteNotConnected": "L'invitation n'a pas pu \xEAtre envoy\xE9e. Cette discussion n'est pas connect\xE9e pour le moment.", + "err.inviteNotConnectedRetry": "L'invitation n'a pas pu \xEAtre envoy\xE9e. Cette discussion n'est pas connect\xE9e pour le moment - rouvrez-la et r\xE9essayez.", + "err.nobodyAccepted": "Personne n'a accept\xE9 l'invitation. Le groupe est inchang\xE9.", + "err.noAudio": "Aucun son enregistr\xE9 - v\xE9rifiez l'autorisation du micro et r\xE9essayez.", + "err.voiceNeedsConnection": "Un message vocal demande une connexion s\xE9curis\xE9e active. Reconnectez-vous et r\xE9essayez.", + "err.voiceRestoring": "R\xE9tablissement de la connexion - r\xE9essayez d'envoyer le message vocal dans un instant.", + "err.fileTooLarge": "Fichier trop volumineux", + "sas.safetyNumber": "Num\xE9ro de s\xE9curit\xE9", + "sas.incorrect": "Code incorrect. V\xE9rifiez-le avec votre correspondant et r\xE9essayez.", + "sas.noMatch": "Les codes ne correspondent pas", + "sas.makeSure": "Assurez-vous que les codes correspondent exactement.", + "sas.tooManyAttempts": "Trop de tentatives incorrectes. La session a \xE9t\xE9 r\xE9initialis\xE9e par s\xE9curit\xE9.", + "sas.verificationFailed": "V\xE9rification \xE9chou\xE9e", + "sas.verified": "V\xE9rifi\xE9 \xB7 confidentialit\xE9 persistante parfaite", + "sas.runVerification": "Lancer la v\xE9rification de s\xE9curit\xE9", + "sec.panelTitle": "D\xE9tails r\xE9seau et cryptographie", + "sec.security": "S\xE9curit\xE9", + "sec.transport": "Transport", + "sec.keyExchange": "\xC9change de cl\xE9s", + "sec.allEnabled": "Toutes les protections sont actives par d\xE9faut", + "sec.realTimeNote": "V\xE9rification en temps r\xE9el avec de vraies fonctions cryptographiques - aucune donn\xE9e factice.", + "sec.simulatedWarning": "Attention : la connexion n'est peut-\xEAtre pas enti\xE8rement \xE9tablie - les valeurs peuvent \xEAtre simul\xE9es.", + "dl.title": "T\xE9l\xE9charger SecureBit", + "dl.free": "Gratuit \xB7 code ouvert", + "dl.soon": "Les applications mobiles (iOS, Android) et les extensions de navigateur (Chrome, Firefox, Opera) arrivent bient\xF4t.", + "chatHdr.chat": "Discussion", + "chatHdr.chats": "Discussions", + "chatHdr.newChat": "+ Nouvelle", + "chatHdr.secure": "S\xE9curis\xE9", + "chatHdr.p2pSub": "P2P \xB7 chiffr\xE9 de bout en bout", + "chatHdr.save": "Enregistrer", + "chatHdr.close": "Fermer", + "chatHdr.expand": "Agrandir", + "chatHdr.you": "Vous", + "chatHdr.qrCode": "QR code", + "chat.disconnected": "D\xE9connect\xE9", + "call.mute": "Couper le micro", + "call.endShort": "Fin", + "group.add": "Ajouter", + "group.send": "Envoyer", + "sec.pfsShort": "Confidentialit\xE9 persistante parfaite", + "sec.cipher": "Chiffrement", + "chat.close": "Fermer", + "file.needConnection": "Le transfert de fichiers demande une connexion ouverte", + "presence.available": "Disponible", + "presence.away": "Absent", + "presence.busy": "Occup\xE9", + "presence.offline": "Hors ligne", + "presence.invisible": "Invisible", + "presence.availableDesc": "En ligne et joignable", + "presence.awayDesc": "Inactif \xB7 momentan\xE9ment absent", + "presence.busyDesc": "Ne pas d\xE9ranger", + "presence.invisibleDesc": "Appara\xEEtre hors ligne pour les autres", + "presence.online": "En ligne", + "conn.p2p": "P2P \xB7 connect\xE9", + "conn.verifying": "V\xE9rification\u2026", + "conn.connecting": "Connexion\u2026", + "conn.reconnecting": "Reconnexion\u2026", + "conn.peerDisconnected": "Le correspondant s'est d\xE9connect\xE9", + "conn.disconnected": "D\xE9connect\xE9", + "chat.defaultLabel": "Discussion", + "groupPhase.forming": "Formation\u2026", + "groupPhase.commitments": "\xC9change des engagements\u2026", + "groupPhase.revealing": "R\xE9v\xE9lation\u2026", + "groupPhase.compare": "Comparez le code du groupe", + "groupPhase.ready": "Groupe pr\xEAt", + "groupPhase.failed": "Groupe non cr\xE9\xE9", + "call.qualityGood": "Bonne", + "call.qualityFair": "Correcte", + "call.qualityWeak": "Faible", + "msg.code": "Code", + "msg.timer": "Minuteur", + "msg.voice": "Voix", + "msg.play": "Lire", + "msg.sent": "Envoy\xE9", + "msg.read": "Lu", + "report.title": "V\xE9rification de s\xE9curit\xE9 en temps r\xE9el", + "report.active": "Actif", + "report.testsPassed": "Tests r\xE9ussis", + "report.verifiedAt": "V\xE9rifi\xE9 le", + "report.source": "Source", + "secTest.verifyECDHKeyExchange": "\xC9change de cl\xE9s ECDH", + "secTest.verifyECDSASignatures": "Signatures num\xE9riques ECDSA", + "secTest.verifyEncryption": "Chiffrement AES-GCM", + "secTest.verifyMessageIntegrity": "Int\xE9grit\xE9 des messages", + "secTest.verifyPerfectForwardSecrecy": "Confidentialit\xE9 persistante parfaite", + "secTest.verifyPFS": "Confidentialit\xE9 persistante parfaite", + "secTest.verifyReplayProtection": "Protection contre le rejeu", + "secTest.verifyDTLSFingerprint": "Empreinte DTLS", + "secTest.verifySASVerification": "V\xE9rification SAS", + "secTest.verifyMetadataProtection": "Protection des m\xE9tadonn\xE9es", + "secTest.verifyTrafficObfuscation": "Brouillage du trafic", + "secTest.verifyPacketPadding": "Remplissage de paquets", + "secTest.verifyNestedEncryption": "Chiffrement imbriqu\xE9", + "secTest.verifyNonExtractableKeys": "Cl\xE9s non extractibles", + "secTest.verifyRateLimiting": "Limitation du d\xE9bit", + "secTest.verifyMutualAuth": "Authentification mutuelle", + "secTest.verifyAuthProof": "Preuve d'authentification", + "secTest.verifyEnhancedValidation": "Validation renforc\xE9e", + "secTest.verifyAdvancedFeatures": "Fonctions avanc\xE9es", + "secTest.verifySignature": "Contr\xF4le de signature", + "secDetail.Security system initializing...": "D\xE9marrage du syst\xE8me de s\xE9curit\xE9\u2026", + "secDetail.Nested encryption active": "Chiffrement imbriqu\xE9 actif", + "secDetail.Nested encryption failed": "\xC9chec du chiffrement imbriqu\xE9", + "secDetail.Packet padding active": "Remplissage de paquets actif", + "secDetail.Packet padding failed": "\xC9chec du remplissage de paquets", + "secDetail.Advanced features active": "Fonctions avanc\xE9es actives", + "secDetail.Advanced features failed": "\xC9chec des fonctions avanc\xE9es", + "secDetail.No encryption key available": "Aucune cl\xE9 de chiffrement disponible", + "secDetail.AES-GCM encryption/decryption working correctly": "Le chiffrement et le d\xE9chiffrement AES-GCM fonctionnent correctement", + "secDetail.No ECDH key pair available": "Aucune paire de cl\xE9s ECDH disponible", + "secDetail.Key derivation failed": "\xC9chec de la d\xE9rivation de cl\xE9", + "secDetail.No ECDSA key pair available": "Aucune paire de cl\xE9s ECDSA disponible", + "secDetail.ECDSA digital signatures working correctly": "Les signatures num\xE9riques ECDSA fonctionnent correctement", + "secDetail.MAC key not available or invalid": "Cl\xE9 MAC absente ou invalide", + "secDetail.Rate limiter did not block a message over the limit": "Le limiteur n'a pas bloqu\xE9 un message au-del\xE0 de la limite", + "secDetail.Rate limiter is not available": "Le limiteur de d\xE9bit n'est pas disponible", + "secDetail.Replay protection is working correctly": "La protection contre le rejeu fonctionne correctement", + "secDetail.Replay protection not enabled": "Protection contre le rejeu inactive", + "secDetail.SAS code not available": "Code SAS indisponible", + "secDetail.SAS verification code is valid and available": "Le code de v\xE9rification SAS est valide et disponible", + "secDetail.Traffic obfuscation is working correctly": "Le brouillage du trafic fonctionne correctement", + "secDetail.Traffic obfuscation not enabled": "Brouillage du trafic inactif", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "Aucune paire de cl\xE9s ECDH \xE9ph\xE9m\xE8res non extractibles pour cette session", + "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": "Confidentialit\xE9 persistante au niveau de la session seulement : les cl\xE9s sont \xE9ph\xE9m\xE8res pour chaque session, mais le Double Ratchet n'est pas actif sur cette connexion (le correspondant utilise une version plus ancienne), donc une cl\xE9 de session compromise expose toute la conversation.", + "msg.pause": "Pause", + "msg.failed": "\xC9chec", + "groupErr.timeout": "Un membre a cess\xE9 de r\xE9pondre avant que le code soit pr\xEAt.", + "groupErr.keyMismatch": "La cl\xE9 d'un membre ne correspondait pas \xE0 l'identit\xE9 annonc\xE9e.", + "groupErr.revealMismatch": "La valeur r\xE9v\xE9l\xE9e par un membre ne correspondait pas \xE0 son engagement.", + "groupErr.commitChanged": "Un membre a chang\xE9 son engagement en cours de route.", + "groupErr.missingKey": "Un membre figurait sur la liste alors que sa cl\xE9 n'est jamais arriv\xE9e.", + "groupErr.outsider": "Une trame est arriv\xE9e de quelqu'un ext\xE9rieur au groupe.", + "groupErr.limit": "Un groupe est limit\xE9 \xE0 huit membres.", + "groupErr.tooLarge": "Un message \xE9tait trop volumineux pour \xEAtre envoy\xE9 au groupe.", + "fileType.text": "Texte brut", + "fileType.images": "Images", + "fileType.archives": "Archives", + "fileType.voice": "Messages vocaux", + "fileType.unsupported": "Non pris en charge", + "qrScan.title": "Scanner le QR", + "qrScan.auto": "Mode auto", + "qrScan.reset": "R\xE9initialiser", + "qrScan.autoScroll": "D\xE9filement automatique activ\xE9", + "qrScan.starting": "D\xE9marrage de la cam\xE9ra\u2026", + "qrScan.point": "Visez le QR de votre correspondant", + "qrScan.tapFocus": "Touchez l'\xE9cran pour faire la mise au point", + "qrScan.focusing": "Mise au point\u2026", + "iceErr.notArray": "La liste de serveurs doit \xEAtre un tableau", + "iceErr.invalidJson": "JSON invalide", + "iceErr.tooMany": "Trop de serveurs (maximum {max})", + "iceErr.invalidEntry": "{label} : entr\xE9e invalide", + "iceErr.urlCount": "{label} : entre 1 et {max} URL requises", + "iceErr.turnCreds": "{label} : les serveurs TURN demandent en g\xE9n\xE9ral un nom d'utilisateur et un identifiant", + "iceUrl.notString": "L'URL doit \xEAtre une cha\xEEne", + "iceUrl.empty": "L'URL est vide", + "iceUrl.tooLong": "L'URL est trop longue", + "iceUrl.badChars": "L'URL contient des caract\xE8res invalides", + "iceUrl.badScheme": "L'URL doit commencer par stun:, stuns:, turn: ou turns:", + "iceUrl.badQuery": "L'URL contient une requ\xEAte invalide", + "iceUrl.noHost": "Il manque un h\xF4te \xE0 l'URL", + "iceUrl.badHost": "L'URL a un h\xF4te ou un port invalide", + "iceUrl.badTransport": "La requ\xEAte de l'URL doit \xEAtre transport=udp ou transport=tcp", + "msg.off": "D\xE9sactiv\xE9", + "file.consentUnavailable": "Impossible de demander l'accord", + "secLevel.MAXIMUM": "MAXIMUM", + "secLevel.INITIALIZING": "D\xC9MARRAGE", + "secLevel.ERROR": "ERREUR", + "secLevel.UNKNOWN": "INCONNU", + "status.error": "Erreur", + "offline.disconnect": "Se d\xE9connecter", + "offline.learnMore": "En savoir plus", + "pwa.installApp": "Installer l'application", + "chat.onWeb": "Vous \xEAtes sur la version web" + }, + "es": { + "language.label": "Idioma", + "community.title": "Construye el futuro de la privacidad", + "community.description": "SecureBit crece gracias a su comunidad. Tus ideas y comentarios dan forma al futuro de la comunicaci\xF3n segura, desarrollada de forma abierta y con validaci\xF3n ASN.1 completa de extremo a extremo.", + "community.github": "Repositorio en GitHub", + "community.feedback": "Comentarios", + "unique.eyebrow": "Lo que nos distingue", + "unique.heading": "Por qu\xE9 SecureBit es \xFAnico", + "unique.s1.titleTop": "N\xFAcleo de cifrado", + "unique.s1.titleBottom": "por capas", + "unique.s1.collapsed": "N\xFAcleo de cifrado", + "unique.s1.desc": "Intercambio de claves ECDH P-384, carga \xFAtil AES-256-GCM, firmas ECDSA y validaci\xF3n ASN.1 completa, reunidos en una sola cadena reforzada.", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "P2P puro", + "unique.s2.titleBottom": "sobre WebRTC", + "unique.s2.collapsed": "P2P puro sobre WebRTC", + "unique.s2.desc": "Los mensajes viajan directamente entre dispositivos por WebRTC. Ning\xFAn relay retiene tus datos: el servidor solo ayuda a que dos pares se encuentren.", + "unique.s2.tags": [ + "DTLS 1.3", + "Sin relay" + ], + "unique.s3.titleTop": "Secreto perfecto", + "unique.s3.titleBottom": "hacia adelante", + "unique.s3.collapsed": "Secreto hacia adelante", + "unique.s3.desc": "Las claves de sesi\xF3n rotan continuamente y se descartan tras usarse, de modo que una clave comprometida nunca abre las conversaciones anteriores.", + "unique.s3.tags": [ + "Claves ef\xEDmeras", + "Rotaci\xF3n autom\xE1tica" + ], + "unique.s4.titleTop": "Ofuscaci\xF3n", + "unique.s4.titleBottom": "del tr\xE1fico", + "unique.s4.collapsed": "Ofuscaci\xF3n del tr\xE1fico", + "unique.s4.desc": "Los tama\xF1os de paquete y los tiempos se rellenan y se aleatorizan, ocultando los patrones de metadatos a quien observe la l\xEDnea.", + "unique.s4.tags": [ + "Relleno de paquetes", + "Variaci\xF3n de tiempos" + ], + "unique.s5.titleTop": "Cero recogida", + "unique.s5.titleBottom": "de datos", + "unique.s5.collapsed": "Cero recogida de datos", + "unique.s5.desc": "Sin cuentas, sin registros, sin mensajes almacenados. No hay nada en un servidor que filtrar, requisar o vender.", + "unique.s5.tags": [ + "Sin cuentas", + "Sin registros" + ], + "partners.eyebrow": "Socios y ecosistema", + "partners.heading": "Nuestros socios conf\xEDan en nosotros", + "partners.aegis.desc": "Socio de capital que protege las comunicaciones financieras confidenciales de toda su cartera.", + "partners.aegis.role": "Inversor estrat\xE9gico", + "partners.furilabs.desc": "Tel\xE9fonos Linux centrados en la privacidad que incluyen SecureBit como canal seguro por defecto.", + "partners.furilabs.role": "Socio tecnol\xF3gico", + "partners.inviteTitle": "Convi\xE9rtete en socio", + "partners.inviteDesc": "\xBFConstruyes hardware o infraestructura para la privacidad? Integremos SecureBit.", + "partners.inviteCta": "Iniciar una conversaci\xF3n", + "roadmap.eyebrow": "Hoja de ruta", + "roadmap.heading": "La evoluci\xF3n de SecureBit", + "roadmap.subheading": "Del primer prototipo a una red descentralizada y resistente a la computaci\xF3n cu\xE1ntica, con validaci\xF3n ASN.1 completa en cada capa.", + "roadmap.progress": "{shipped} de {total} hitos completados", + "roadmap.upcoming": "{upcoming} en camino", + "roadmap.keyFeatures": "Funciones clave", + "roadmap.status.released": "Publicado", + "roadmap.status.current": "Actual", + "roadmap.status.dev": "En desarrollo", + "roadmap.status.planned": "Planificado", + "roadmap.status.research": "Investigaci\xF3n", + "hero.headlineTop": "Una l\xEDnea directa", + "hero.headlineBottom": "que solo le\xE9is vosotros dos.", + "hero.subheading": "Las claves se generan en tu dispositivo y se intercambian directamente entre pares. Sin cuentas y sin servidores que guarden tus mensajes.", + "hero.diagramAlt": "Una l\xEDnea cifrada directa hacia un par, a la que se suman otros dos pares", + "intro.createTitle": "Crear un canal nuevo", + "intro.createDesc": "Tu dispositivo genera las claves y una invitaci\xF3n de un solo uso. Nada de esto pasa por un servidor.", + "intro.createCta": "Generar claves e invitaci\xF3n", + "intro.joinTitle": "Unirse a un canal", + "intro.scanTitle": "Escanear el QR con la c\xE1mara", + "intro.scanSubtitle": "Lo m\xE1s r\xE1pido: apunta a la pantalla de la otra persona", + "intro.orPasteCode": "o pega el c\xF3digo", + "intro.pastePlaceholder": "Pega aqu\xED el c\xF3digo de invitaci\xF3n\u2026", + "intro.connect": "Conectar", + "intro.connecting": "Procesando\u2026", + "roadmap.r1.title": "Inicio del desarrollo", + "roadmap.r1.sub": "Idea, prototipo y montaje de la infraestructura", + "roadmap.r1.date": "Principios de 2025", + "roadmap.r1.features": [ + "Definici\xF3n del concepto y los requisitos", + "Elecci\xF3n del stack: WebRTC, P2P, criptograf\xEDa", + "Primeros prototipos de mensajer\xEDa", + "Creaci\xF3n del repositorio y CI", + "Arquitectura b\xE1sica de cifrado", + "Dise\xF1o de UX/UI" + ], + "roadmap.r2.title": "Versi\xF3n alfa", + "roadmap.r2.sub": "Primera alfa p\xFAblica: chat b\xE1sico e intercambio de claves", + "roadmap.r2.date": "Primavera de 2025", + "roadmap.r2.features": [ + "Mensajer\xEDa P2P b\xE1sica por WebRTC", + "Cifrado de extremo a extremo sencillo (esquema de demostraci\xF3n)", + "Se\xF1alizaci\xF3n y reconexi\xF3n estables", + "Interfaz m\xEDnima para pruebas", + "Recogida de comentarios de los primeros probadores" + ], + "roadmap.r3.title": "Seguridad reforzada", + "roadmap.r3.sub": "Refuerzo de la seguridad y publicaci\xF3n de la rama estable", + "roadmap.r3.date": "Verano de 2025", + "roadmap.r3.features": [ + "ECDH/ECDSA en producci\xF3n", + "Secreto hacia adelante y rotaci\xF3n de claves", + "Comprobaciones de autenticaci\xF3n mejoradas", + "Cifrado de archivos y env\xEDo de cargas grandes", + "Auditor\xEDa de los procesos criptogr\xE1ficos b\xE1sicos" + ], + "roadmap.r4.title": "Escala y estabilidad", + "roadmap.r4.sub": "Escalado de la red y mejoras de estabilidad", + "roadmap.r4.date": "Oto\xF1o de 2025", + "roadmap.r4.features": [ + "Optimizaci\xF3n de las conexiones P2P y del NAT traversal", + "Mecanismos de reconexi\xF3n y colas de mensajes", + "Menor consumo de bater\xEDa en el m\xF3vil", + "Sincronizaci\xF3n entre varios dispositivos", + "Herramientas de monitorizaci\xF3n y registro para desarrolladores" + ], + "roadmap.r5.title": "La privacidad primero", + "roadmap.r5.sub": "Foco en la privacidad: reducir los metadatos", + "roadmap.r5.date": "Invierno de 2025", + "roadmap.r5.features": [ + "Protecci\xF3n de metadatos y menos huella identificable", + "Experimentos con enrutamiento cebolla y DHT", + "Opciones de conexi\xF3n an\xF3nima", + "Preparaci\xF3n de la auditor\xEDa de c\xF3digo abierto", + "Mejora de la verificaci\xF3n entre usuarios" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "Criptograf\xEDa de grado militar en 18 capas con validaci\xF3n ASN.1 completa", + "roadmap.r6.date": "Finales de 2025", + "roadmap.r6.features": [ + "Triple capa de seguridad: ECDH + DTLS + SAS", + "Cifrado ECDH P-384 y AES-GCM de 256 bits", + "Verificaci\xF3n de la huella DTLS", + "Verificaci\xF3n SAS (cadena corta de autenticaci\xF3n)", + "Secreto hacia adelante con rotaci\xF3n de claves", + "Mayor protecci\xF3n frente a ataques de intermediario", + "Validaci\xF3n ASN.1 DER completa", + "Verificaci\xF3n de OID y de puntos EC", + "Validaci\xF3n de la estructura SPKI", + "Arquitectura P2P sobre WebRTC", + "Protecci\xF3n de metadatos", + "C\xF3digo 100 % abierto" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "Aplicaciones nativas de escritorio para Windows, macOS y Linux", + "roadmap.r7.date": "Principios de 2026", + "roadmap.r7.features": [ + "Aplicaci\xF3n de escritorio para Windows (Tauri v2)", + "Aplicaci\xF3n de escritorio para macOS (Tauri v2)", + "AppImage para Linux (Tauri v2)", + "Notificaciones en tiempo real", + "Reconexi\xF3n autom\xE1tica", + "Sincronizaci\xF3n entre dispositivos", + "Interfaz renovada", + "Archivos de hasta 100 MB" + ], + "roadmap.r8.title": "Voz y llamadas seguras", + "roadmap.r8.sub": "Mensajes de voz, llamadas de audio y de v\xEDdeo cifrados", + "roadmap.r8.date": "Principios de 2026", + "roadmap.r8.features": [ + "Mensajes de voz cifrados de extremo a extremo", + "Llamadas de audio cifradas uno a uno (WebRTC)", + "Llamadas de v\xEDdeo cifradas uno a uno (WebRTC)", + "Secreto hacia adelante para el medio en directo", + "Flujos de medios protegidos con SRTP/DTLS", + "Verificaci\xF3n SAS durante la llamada", + "Avisos de llamada y reconexi\xF3n autom\xE1tica", + "Medios P2P de baja latencia" + ], + "roadmap.r9.title": "Comunicaci\xF3n en grupo", + "roadmap.r9.sub": "Chats de grupo sin renunciar a la privacidad", + "roadmap.r9.date": "Ahora", + "roadmap.r9.features": [ + "Chats de grupo P2P de hasta 8 participantes", + "Entrega en malla con relay firmado como alternativa", + "Un \xFAnico c\xF3digo de seguridad del grupo, comparado por todos", + "Ceremonia de compromiso y revelaci\xF3n contra el tanteo de c\xF3digos", + "Claves de identidad propias del grupo, ef\xEDmeras por dise\xF1o", + "Membres\xEDa firmada con orden por \xE9pocas", + "Mensajes firmados: una transcripci\xF3n divergente queda demostrada", + "Sin servidor, sin clave de grupo compartida, sin historial" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "Aplicaciones nativas para iOS y Android", + "roadmap.r10.date": "2.\xBA trimestre de 2027", + "roadmap.r10.features": [ + "Aplicaci\xF3n nativa de iOS (Swift/SwiftUI)", + "Aplicaci\xF3n nativa de Android (Kotlin/Jetpack Compose)", + "Soporte PWA en navegadores m\xF3viles", + "Notificaciones push en tiempo real", + "Optimizaci\xF3n de la bater\xEDa", + "Interfaz optimizada para el m\xF3vil", + "Cola de mensajes sin conexi\xF3n", + "Autenticaci\xF3n biom\xE9trica" + ], + "roadmap.r11.title": "Edici\xF3n resistente a la computaci\xF3n cu\xE1ntica", + "roadmap.r11.sub": "Protecci\xF3n frente a los ordenadores cu\xE1nticos", + "roadmap.r11.date": "4.\xBA trimestre de 2027", + "roadmap.r11.features": [ + "Criptograf\xEDa poscu\xE1ntica CRYSTALS-Kyber", + "Firmas digitales SPHINCS+", + "Esquema h\xEDbrido: cl\xE1sico y poscu\xE1ntico", + "Intercambio de claves seguro frente a lo cu\xE1ntico", + "Algoritmos de hash actualizados", + "Migraci\xF3n de las sesiones existentes", + "Compatibilidad con la v5.x", + "Protocolos resistentes a lo cu\xE1ntico" + ], + "roadmap.r12.title": "Red descentralizada", + "roadmap.r12.sub": "Red completamente descentralizada", + "roadmap.r12.date": "2028", + "roadmap.r12.features": [ + "Red en malla de nodos", + "DHT para descubrir pares", + "Enrutamiento cebolla integrado", + "Token\xF3mica e incentivos para los nodos", + "Gobernanza mediante DAO", + "Interoperabilidad con otras redes", + "Compatibilidad multiplataforma", + "Red que se repara sola" + ], + "roadmap.r13.title": "Asistente de privacidad con IA", + "roadmap.r13.sub": "IA para la privacidad y la seguridad", + "roadmap.r13.date": "2028+", + "roadmap.r13.features": [ + "An\xE1lisis local de amenazas con IA", + "Detecci\xF3n autom\xE1tica de intermediarios", + "Criptograf\xEDa adaptativa", + "Recomendaciones de seguridad personalizadas", + "Aprendizaje autom\xE1tico de conocimiento cero", + "Asistente de IA privado", + "Seguridad predictiva", + "Protecci\xF3n aut\xF3noma frente a ataques" + ], + "handshake.step1": "Generando el par de claves ECDH P-384", + "handshake.step2": "Derivando el c\xF3digo de verificaci\xF3n", + "handshake.step3": "Fijando el secreto hacia adelante", + "handshake.securingTitle": "Asegurando tu canal", + "handshake.answerTitle": "Preparando tu respuesta", + "handshake.securingDesc": "Creando claves lo bastante fuertes para resistir manipulaciones.", + "handshake.shareTitle": "Comparte tu invitaci\xF3n", + "handshake.sendAnswerTitle": "Devuelve tu respuesta", + "handshake.shareDesc": "Muestra el QR o env\xEDa el c\xF3digo a la otra persona. Es de un solo uso y caduca pronto.", + "handshake.sendAnswerDesc": "Entrega esta respuesta a quien cre\xF3 el canal para que complete el saludo.", + "handshake.establish": "Establecer la conexi\xF3n", + "handshake.thenReceive": "Despu\xE9s recibe la respuesta que te devuelva la otra persona", + "handshake.pasteAnswerPlaceholder": "Pega aqu\xED el c\xF3digo de respuesta\u2026", + "handshake.answerSentNote": "Env\xEDa esta respuesta a quien cre\xF3 el canal y espera: el chat se abrir\xE1 cuando conecte.", + "handshake.qrHint": "Mant\xE9n esto abierto hasta que la otra persona capture el c\xF3digo.", + "handshake.qrHintFrames": "El saludo se reparte en {frames} im\xE1genes: mant\xE9n esto abierto hasta que las capture todas.", + "verify.title": "Verificaci\xF3n de seguridad", + "verify.desc": "Compara este c\xF3digo de seguridad con la otra persona por otra v\xEDa (voz o en persona) y escr\xEDbelo para desbloquear el chat.", + "verify.enterLabel": "Introduce el c\xF3digo verificado", + "verify.placeholder": "Escribe el c\xF3digo aqu\xED", + "verify.confirm": "Confirmar el c\xF3digo", + "verify.confirmed": "Confirmado", + "verify.mismatch": "No coinciden", + "verify.yours": "Tu confirmaci\xF3n", + "verify.peer": "Confirmaci\xF3n de la otra persona", + "verify.pending": "Pendiente", + "verify.waiting": "Esperando el c\xF3digo\u2026", + "verify.verified": "Canal verificado", + "verify.bothConfirmed": "Ambas partes han confirmado. Abriendo el chat seguro\u2026", + "pwa.bannerTitle": "Instala SecureBit.chat", + "pwa.bannerDesc": "Disfruta de la experiencia de app nativa con m\xE1s seguridad", + "pwa.install": "Instalar", + "pwa.dismiss": "Descartar", + "pwa.close": "Cerrar", + "pwa.iosTitle": "Instalar en iOS", + "pwa.iosStep1": "Toca el bot\xF3n Compartir", + "pwa.iosStep1Hint": "Suele estar en la parte inferior de Safari", + "pwa.iosStep2": "Busca \xABA\xF1adir a pantalla de inicio\xBB", + "pwa.iosStep2Hint": "Despl\xE1zate hacia abajo en el men\xFA de compartir", + "pwa.iosStep3": "Toca \xABA\xF1adir\xBB", + "pwa.iosStep3Hint": "Confirma para instalar SecureBit.chat", + "pwa.genericTitle": "Instalar SecureBit", + "pwa.genericDesc": "Cada navegador instala a su manera. Elige los pasos que coincidan con el tuyo.", + "pwa.gotIt": "Entendido", + "pwa.installedTitle": "\xA1App instalada!", + "pwa.installedIos": "\xA1App de iOS instalada! \xC1brela desde la pantalla de inicio.", + "pwa.installedGeneric": "SecureBit.chat ya est\xE1 en tu dispositivo", + "pwa.anytimeTitle": "Inst\xE1lalo cuando quieras", + "pwa.anytimeDesc": "Puedes instalar SecureBit.chat desde el men\xFA de tu navegador cuando quieras, para la mejor experiencia.", + "pwa.ok": "Aceptar", + "step.open": "Paso 1 \xB7 abrir un canal", + "step.exchange": "Paso 2 \xB7 intercambio", + "step.verification": "Paso 3 \xB7 verificaci\xF3n", + "action.create": "Crear", + "action.join": "Unirse", + "action.back": "Atr\xE1s", + "action.copy": "Copiar", + "action.copied": "Copiado", + "action.scan": "Escanear", + "action.downloadDesktop": "Descargar la app de escritorio", + "action.advancedSettings": "Ajustes avanzados", + "cred.offerTag": "oferta \xB7 o copia el texto", + "cred.answerTag": "respuesta \xB7 o copia el texto", + "cred.reveal": "Haz clic para mostrarlo: mant\xE9n este c\xF3digo en privado", + "qr.title": "Escanear c\xF3digo QR", + "qr.subtitle": "Apunta la c\xE1mara a su c\xF3digo QR", + "qr.scanning": "Escaneando\u2026", + "qr.hint": "Mant\xE9n el pulso hasta capturar todas las partes. La c\xE1mara se usa en local: no se sube nada.", + "mesh.you": "t\xFA", + "mesh.peer": "par \xB7 sesi\xF3n 1", + "mesh.joined2": "luc\xEDa se ha unido \xB7 +2", + "mesh.joined3": "mateo se ha unido \xB7 +3", + "ice.title": "Ajustes de red", + "ice.subtitle": "Se configura en local: nunca se comparte con la otra persona", + "ice.intro": "SecureBit usa servidores STUN p\xFAblicos por defecto para negociar el enlace entre pares. Si tienes los tuyos, ap\xFAntalo a tu STUN/TURN.", + "ice.publicTitle": "Servidores p\xFAblicos (por defecto)", + "ice.publicDesc": "Sin configuraci\xF3n. Suficiente para la mayor\xEDa.", + "ice.customTitle": "Mis propios servidores STUN/TURN", + "ice.customDesc": "Hasta {max} servidores.", + "ice.turnNote": "Un relay TURN ve la IP de ambas partes y el ritmo del tr\xE1fico, pero nunca el contenido, que sigue cifrado de extremo a extremo. Es preferible ", + "ice.turnNoteTls": " (TLS).", + "ice.test": "Probar los servidores", + "ice.testing": "Probando\u2026", + "ice.relayTitle": "Modo solo relay", + "ice.relayBadge": "M\xC1XIMA PRIVACIDAD", + "ice.relayDesc": "Env\xEDa todo el tr\xE1fico por TURN, as\xED la otra persona nunca ve tu IP. Necesita un servidor TURN.", + "ice.relayWarning": "El modo solo relay est\xE1 activado pero no hay ning\xFAn servidor TURN configurado. La conexi\xF3n no podr\xE1 iniciarse.", + "ice.persist": "Guardar en este dispositivo", + "ice.persistDesc": "Se guarda cifrado en este navegador. D\xE9jalo apagado para usarlo solo en esta sesi\xF3n.", + "ice.forget": "Olvidar lo guardado", + "ice.cancel": "Cancelar", + "ice.apply": "Aplicar", + "ice.errUnavailable": "WebRTC no est\xE1 disponible en este navegador", + "ice.errInvalid": "Configuraci\xF3n de servidor no v\xE1lida", + "update.title": "Actualizaci\xF3n disponible", + "update.desc": "Se ha detectado una versi\xF3n m\xE1s reciente de SecureBit.", + "update.currentVersion": "Versi\xF3n actual", + "update.newVersion": "Versi\xF3n nueva", + "update.now": "Actualizar ahora", + "update.later": "M\xE1s tarde", + "update.unknown": "N/D", + "update.stepSaving": "Guardando los datos\u2026", + "update.stepSwCaches": "Vaciando las cach\xE9s del Service Worker\u2026", + "update.stepSwUnregister": "Dando de baja los Service Workers\u2026", + "update.stepBrowserCache": "Vaciando la cach\xE9 del navegador\u2026", + "update.stepVersion": "Actualizando la versi\xF3n\u2026", + "update.stepReload": "Recargando la aplicaci\xF3n\u2026", + "update.error": "Error al actualizar. Recarga la p\xE1gina manualmente (Ctrl+F5 o Cmd+May\xFAs+R)", + "update.confirmSkip": "Hay una versi\xF3n nueva. Se recomienda actualizar por seguridad y estabilidad. \xBFContinuar sin actualizar?", + "offline.backOnline": "De nuevo en l\xEDnea", + "offline.mode": "Modo sin conexi\xF3n", + "offline.dismiss": "Descartar", + "offline.lostTitle": "Se ha perdido la conexi\xF3n", + "offline.lostDesc": "SecureBit est\xE1 ahora sin conexi\xF3n. Algunas funciones se limitan, pero tus datos siguen a salvo.", + "offline.point1": "Tu sesi\xF3n y tus claves se conservan", + "offline.point2": "No se guarda nada en servidores", + "offline.point3": "Los mensajes y archivos se sincronizan al reconectar", + "offline.continue": "Seguir sin conexi\xF3n", + "offline.restoredTitle": "Cuando vuelvas a conectarte", + "offline.restoredDesc": "Perder la conexi\xF3n no te cuesta nada. SecureBit lo encola todo en local y retoma la sesi\xF3n cifrada en cuanto vuelves a estar en l\xEDnea.", + "offline.r1Title": "Tus mensajes se entregan", + "offline.r1Desc": "Todo lo que escribiste sin conexi\xF3n se env\xEDa autom\xE1ticamente a tu contacto.", + "offline.r2Title": "Los archivos terminan de enviarse", + "offline.r2Desc": "Las subidas contin\xFAan donde se quedaron: no hace falta reenviar nada.", + "offline.r3Title": "Llegan sus mensajes y archivos", + "offline.r3Desc": "Lo que tu contacto enviara durante el corte te llega en orden.", + "offline.r4Title": "No se pierde nada", + "offline.r4Desc": "Tras reconectar no queda ning\xFAn hueco: la conversaci\xF3n sigue justo donde se detuvo.", + "offline.gotIt": "Entendido", + "qr.showTitle": "Mostrar el c\xF3digo QR", + "qr.showSubtitle": "Pantalla completa \xB7 deja que lo escaneen", + "qr.showSubtitleFrames": "Pantalla completa \xB7 deja que escaneen las {frames} im\xE1genes", + "notify.enabledBody": "Notificaciones activadas. Te avisaremos de los mensajes nuevos.", + "notify.workingBody": "Las notificaciones funcionan. Te avisaremos de los mensajes nuevos.", + "pw.label": "Campo de contrase\xF1a", + "pw.placeholder": "Escribe la contrase\xF1a\u2026", + "pw.decrypt": "Descifrar", + "pw.cancel": "Cancelar", + "file.title": "Transferencias de archivos", + "file.drop": "Arrastra los archivos aqu\xED", + "file.dropHint": "Cifrados de extremo a extremo antes de enviarse \xB7 hasta 100 MB", + "file.browse": "Buscar en el dispositivo", + "file.incoming": "Solicitud de archivo entrante", + "file.accept": "Aceptar", + "file.reject": "Rechazar", + "file.download": "Descargar", + "file.notReady": "La conexi\xF3n a\xFAn no est\xE1 lista", + "file.tooLarge": "El archivo es demasiado grande", + "file.typeNotAllowed": "Tipo de archivo no permitido", + "file.maxConcurrent": "Se ha alcanzado el m\xE1ximo de transferencias simult\xE1neas", + "file.gone": "Este archivo ya no est\xE1 disponible para descargar.", + "call.incoming": "Llamada entrante", + "call.incomingVideo": "Videollamada entrante", + "call.encrypted": "Llamada cifrada", + "call.encryptedShort": "Cifrada", + "call.peer": "Par seguro", + "call.connecting": "Conectando\u2026", + "call.ringing": "Llamando\u2026", + "call.accept": "Aceptar", + "call.decline": "Rechazar", + "call.end": "Colgar", + "call.camera": "C\xE1mara", + "call.cameraOff": "C\xE1mara apagada", + "call.peerCameraOff": "La c\xE1mara de la otra persona est\xE1 apagada", + "call.flipCamera": "Cambiar de c\xE1mara", + "call.addVideo": "A\xF1adir v\xEDdeo", + "call.video": "V\xEDdeo", + "call.muted": "Silenciado", + "call.expand": "Ampliar", + "call.minimize": "Minimizar", + "call.quality": "Calidad de la conexi\xF3n", + "call.qualityExcellent": "Excelente", + "call.videoPrefix": "V\xEDdeo \xB7 ", + "call.voicePrefix": "Voz \xB7 ", + "group.new": "Grupo nuevo", + "group.create": "Crear el grupo", + "group.join": "Unirse al grupo", + "group.name": "Nombre del grupo", + "group.nameTooLong": "El nombre del grupo es demasiado largo.", + "group.capacity": "Hasta {max} personas, de par a par. Todos comparar\xE1n un \xFAnico c\xF3digo de seguridad antes de abrir el grupo.", + "group.invite": "Invitar", + "group.inviteMore": "Invitar a m\xE1s miembros", + "group.invitePeople": "Invitar a {count} personas", + "group.invitation": "Invitaci\xF3n al grupo", + "group.addMembers": "A\xF1adir miembros", + "group.roomFor": "Queda sitio para {remaining} m\xE1s. Al entrar, todos comparar\xE1n un c\xF3digo de grupo nuevo.", + "group.membersCount": "{count} miembros", + "group.member": "Miembro", + "group.members": "Miembros", + "group.remove": "Expulsar a {name}", + "group.message": "Escribir a {name}", + "group.leave": "Salir", + "group.leaveThis": "Salir de este grupo", + "group.cancel": "Cancelar el grupo", + "group.close": "Cerrar", + "group.cancelBtn": "Cancelar", + "group.decline": "Rechazar", + "group.working": "Trabajando\u2026", + "group.sasTitle": "C\xF3digo de seguridad del grupo", + "group.sasEveryone": "Todos ven este c\xF3digo", + "group.sasCompare": "Compara el c\xF3digo del grupo con cada miembro para abrir el grupo.", + "group.sasReadAloud": "Lee estos d\xEDgitos en voz alta a ", + "group.sasWarning": "Si aunque sea un miembro lee un c\xF3digo distinto, hay alguien en medio. Cancela el grupo: no confirmes.", + "group.confirmFirst": "Confirma antes el c\xF3digo del grupo", + "group.codeSuffix": " \xB7 c\xF3digo {code}", + "group.exchangingNonces": "Intercambiando nonces\u2026", + "group.waitingCommit": "Esperando el compromiso de todos los miembros\u2026", + "group.waitingJoin": "Esperando a que se unan los dem\xE1s miembros\u2026", + "group.emptyChat": "Aqu\xED todav\xEDa no hay nada. Cada mensaje va firmado por quien lo env\xEDa y viaja por el enlace cifrado propio de cada miembro.", + "group.noVerified": "A\xFAn no hay chats verificados. Abre primero un chat individual y compara su c\xF3digo de seguridad: un grupo se construye con conexiones que ya has comprobado.", + "group.noMoreToAdd": "No hay m\xE1s chats verificados que a\xF1adir. Abre un chat individual y compara su c\xF3digo de seguridad primero.", + "group.directLink": "Enlace directo entre pares", + "group.noDirectLink": "A\xFAn no hay enlace directo: los mensajes pasan por otro miembro mientras se establece uno", + "group.relayNote": "Con algunos miembros todav\xEDa no hay enlace directo. Sus mensajes pasan por otro miembro, que ve que est\xE1is hablando pero no puede leer m\xE1s all\xE1 de la firma ni cambiar lo dicho. El grupo sigue intentando conectarlos directamente.", + "group.relayOnlyOff": "El modo solo relay est\xE1 desactivado, as\xED que cada miembro se conecta directamente contigo y conoce tu IP, incluidos los que haya invitado otra persona. Act\xEDvalo en los ajustes de red si aqu\xED importa.", + "group.memberOffline": "{name} est\xE1 sin conexi\xF3n y no recibir\xE1 mensajes. Sigue siendo miembro: expulsarle vuelve a generar las claves del grupo.", + "group.joinNote": "Los dem\xE1s miembros sabr\xE1n que est\xE1s en este grupo. No hay historial que recuperar: un grupo empieza vac\xEDo.", + "group.inviteSentNote": "El grupo sigue funcionando hasta que acepten. No hay historial que puedan recuperar: solo ver\xE1n lo que se env\xEDe a partir de ahora.", + "group.errNotCreated": "El grupo no se ha creado", + "group.errNobodyAccepted": "Nadie acept\xF3 la invitaci\xF3n a tiempo.", + "group.errNothingSent": "No se envi\xF3 ni se verific\xF3 nada. Cierra esto e int\xE9ntalo de nuevo cuando todos est\xE9n conectados.", + "group.errNotFormed": "No se ha podido formar el grupo.", + "group.errFull": "Este grupo est\xE1 lleno.", + "group.errInviteFailed": "No se ha podido enviar la invitaci\xF3n: ese chat no est\xE1 conectado.", + "group.errNoMemberList": "Quien cre\xF3 el grupo nunca envi\xF3 la lista de miembros.", + "group.errUnsignedList": "La lista de miembros no la firm\xF3 quien cre\xF3 el grupo. No lo reintentes: av\xEDsale.", + "group.errNotOwner": "Alguien que no cre\xF3 el grupo intent\xF3 cambiar los miembros.", + "hdr.tagline": "Cifrado de extremo a extremo", + "hdr.netSettings": "Ajustes de red avanzados", + "hdr.netSettingsTitle": "Ajustes de red avanzados (STUN/TURN)", + "hdr.disconnect": "Desconectar", + "status.connected": "Conectado", + "status.connecting": "Conectando\u2026", + "status.notConnected": "Sin conexi\xF3n", + "status.reconnecting": "Reconectando\u2026", + "status.retrying": "Reintentando\u2026", + "status.verifying": "Verificando\u2026", + "status.peerDisconnected": "La otra persona se ha desconectado", + "sec.replayProtection": "Protecci\xF3n contra reenv\xEDo", + "sec.messageIntegrity": "Integridad de los mensajes (HMAC)", + "sec.forwardSecrecy": "Secreto perfecto hacia adelante", + "sec.metadataProtection": "Protecci\xF3n de metadatos", + "sec.trafficObfuscation": "Ofuscaci\xF3n del tr\xE1fico", + "sec.realTests": "Pruebas criptogr\xE1ficas reales", + "sec.simulatedData": "Datos simulados", + "sec.testPassed": "Prueba superada", + "sec.testFailed": "La prueba ha fallado o no est\xE1 disponible", + "sec.verificationDone": "Verificaci\xF3n criptogr\xE1fica real completada", + "sec.verificationInProgress": "Verificaci\xF3n de seguridad en curso\u2026", + "sec.verificationWait": "Verificaci\xF3n de seguridad en curso\u2026\nEspera a que termine la verificaci\xF3n criptogr\xE1fica en tiempo real.", + "sec.verificationUnavailable": "La verificaci\xF3n de seguridad no est\xE1 disponible", + "chat.placeholder": "Escribe un mensaje cifrado\u2026", + "chat.send": "Enviar el mensaje", + "chat.sendFiles": "Enviar archivos", + "chat.hideFiles": "Ocultar los archivos", + "chat.recordVoice": "Grabar un mensaje de voz", + "chat.sendVoice": "Enviar el mensaje de voz", + "chat.discard": "Descartar", + "chat.codeBlock": "Enviar como bloque de c\xF3digo (ampl\xEDa el campo)", + "chat.codeHint": "Fragmento de c\xF3digo \xB7 se conserva el formato \xB7 \u2318\u21B5 para enviar", + "chat.viewOnce": "Ver una vez", + "chat.viewOnceTitle": "Ver una vez: desaparece cuando la otra persona lo lee", + "chat.viewOncePrefix": "Ver una vez \xB7 ", + "chat.viewOnceTap": "Ver una vez \xB7 toca para mostrar", + "chat.viewedOnce": "Ya visto", + "chat.disappearing": "Mensaje ef\xEDmero: se borra en ambos lados", + "chat.disappearAfter": "Desaparece tras", + "chat.visibleFor": "Visible durante", + "chat.timerPrefix": "Temporizador \xB7 ", + "chat.expired": "Este mensaje ha caducado", + "chat.deleteForEveryone": "Eliminar para todos", + "chat.sending": "Enviando", + "chat.delivered": "Entregado", + "chat.notSent": "No enviado", + "chat.notSentReason": "No enviado: el canal seguro no est\xE1 listo. Vuelve a conectar para continuar.", + "chat.encrypted": "Cifrado", + "chat.decrypted": "Descifrado", + "chat.encryptedOnDevice": "Cifrado en tu dispositivo", + "chat.uploading": "Subiendo", + "chat.downloading": "Descargando", + "chat.transferring": "Transfiriendo\u2026", + "chat.copied": "\xA1Copiado!", + "chat.collapse": "Contraer", + "chat.closeMenu": "Cerrar el men\xFA", + "chat.newChat": "Chat nuevo", + "chat.newGroup": "Grupo nuevo", + "chat.createGroup": "Crear un grupo", + "chat.groupChats": "Chats de grupo", + "chat.secureChat": "Chat seguro", + "chat.nameThis": "Ponle nombre a este chat", + "chat.rename": "Renombrar el chat (solo en local)", + "chat.renameHint": "Haz doble clic para renombrar", + "chat.localLabel": "Etiqueta local \xB7 solo se guarda en este dispositivo", + "chat.setStatus": "Elige tu estado", + "chat.yourStatusPrefix": "Tu estado: ", + "chat.meshHint": "Hasta 8 pares \xB7 malla P2P", + "chat.offline": "Sin conexi\xF3n", + "chat.noNetwork": "Sin red \xB7 reconectando", + "chat.startVoiceCall": "Iniciar una llamada de voz cifrada", + "chat.startVideoCall": "Iniciar una videollamada cifrada", + "chat.verifyForCalls": "Verifica la sesi\xF3n para poder llamar", + "chat.e2eeNote": "Cada mensaje se cifra de extremo a extremo en tu dispositivo antes de salir.", + "chat.peersOnly": "Se env\xEDa de extremo a extremo solo a los pares conectados: nunca se guarda en un servidor.", + "flow.invitationCreated": "Invitaci\xF3n segura creada", + "flow.invitationCreatedBang": "Invitaci\xF3n segura creada y cifrada.", + "flow.responseCreated": "Respuesta segura creada", + "flow.responseCreatedBang": "Respuesta segura creada.", + "flow.sendInvitation": "Env\xEDa el c\xF3digo de invitaci\xF3n a la otra persona por un canal seguro (llamada, SMS, etc.).", + "flow.sendResponse": "Env\xEDa el c\xF3digo de respuesta a quien inici\xF3 el canal por un canal seguro, o deja que escanee el QR de abajo.", + "flow.sendEncryptedCode": "Enviar el c\xF3digo cifrado", + "flow.sendTheResponse": "Enviar la respuesta", + "flow.pasteOrWrite": "Pega o escribe el c\xF3digo\u2026", + "flow.processingInvitation": "Procesando la invitaci\xF3n segura\u2026", + "flow.processingResponse": "Procesando la respuesta segura\u2026", + "flow.finalizing": "Ultimando la conexi\xF3n segura\u2026", + "flow.channelEstablished": "Canal seguro establecido", + "flow.channelReady": "El canal seguro est\xE1 listo", + "flow.restoring": "Restableciendo la conexi\xF3n\u2026", + "flow.invitationCaptured": "Invitaci\xF3n capturada.", + "err.needInvitation": "Tienes que pegar el c\xF3digo de invitaci\xF3n de la otra persona.", + "err.needResponse": "Tienes que pegar el c\xF3digo de respuesta de la otra persona.", + "err.responseFormat": "Formato de respuesta no v\xE1lido: revisa el c\xF3digo", + "err.responseNoKey": "C\xF3digo de respuesta no v\xE1lido: falta la clave criptogr\xE1fica o est\xE1 da\xF1ada. Rev\xEDsalo e int\xE9ntalo de nuevo.", + "err.responseNoSignKey": "C\xF3digo de respuesta no v\xE1lido: falta la clave de verificaci\xF3n de firma. Rev\xEDsalo e int\xE9ntalo de nuevo.", + "err.responseOutdated": "Los datos de la respuesta est\xE1n caducados: usa una invitaci\xF3n nueva", + "err.setupError": "Error al establecer la conexi\xF3n", + "err.notReady": "La conexi\xF3n a\xFAn no est\xE1 lista", + "err.securityBreach": "Se ha detectado una brecha de seguridad: conexi\xF3n rechazada", + "err.securityValidation": "La validaci\xF3n de seguridad ha fallado: posible ataque", + "err.retiredQr": "Este QR usa un formato retirado con el que no se pudo transferir la invitaci\xF3n. Pide uno nuevo o usa copiar y pegar.", + "err.compressedQrNote": "El QR comprimido puede omitir el SDP por brevedad. Usa copiar y pegar si falla la conexi\xF3n.", + "err.inviteNotConnected": "No se ha podido enviar la invitaci\xF3n. Ese chat no est\xE1 conectado ahora mismo.", + "err.inviteNotConnectedRetry": "No se ha podido enviar la invitaci\xF3n. Ese chat no est\xE1 conectado ahora mismo: vuelve a abrirlo e int\xE9ntalo otra vez.", + "err.nobodyAccepted": "Nadie acept\xF3 la invitaci\xF3n. El grupo no ha cambiado.", + "err.noAudio": "No se ha grabado audio: revisa el permiso del micr\xF3fono e int\xE9ntalo de nuevo.", + "err.voiceNeedsConnection": "El mensaje de voz necesita una conexi\xF3n segura activa. Vuelve a conectar e int\xE9ntalo de nuevo.", + "err.voiceRestoring": "Restableciendo la conexi\xF3n: prueba a enviar el mensaje de voz en un momento.", + "err.fileTooLarge": "El archivo es demasiado grande", + "sas.safetyNumber": "N\xFAmero de seguridad", + "sas.incorrect": "C\xF3digo incorrecto. Compru\xE9balo con la otra persona e int\xE9ntalo de nuevo.", + "sas.noMatch": "Los c\xF3digos no coinciden", + "sas.makeSure": "Aseg\xFArate de que los c\xF3digos coinciden exactamente.", + "sas.tooManyAttempts": "Demasiados intentos incorrectos. La sesi\xF3n se ha reiniciado por seguridad.", + "sas.verificationFailed": "La verificaci\xF3n ha fallado", + "sas.verified": "Verificado \xB7 secreto perfecto hacia adelante", + "sas.runVerification": "Ejecutar la verificaci\xF3n de seguridad", + "sec.panelTitle": "Detalles de red y criptograf\xEDa", + "sec.security": "Seguridad", + "sec.transport": "Transporte", + "sec.keyExchange": "Intercambio de claves", + "sec.allEnabled": "Todas las funciones de seguridad est\xE1n activas por defecto", + "sec.realTimeNote": "Verificaci\xF3n en tiempo real con funciones criptogr\xE1ficas reales, sin datos simulados.", + "sec.simulatedWarning": "Aviso: puede que la conexi\xF3n no est\xE9 del todo establecida; los valores podr\xEDan ser simulados.", + "dl.title": "Descargar SecureBit", + "dl.free": "Gratis \xB7 c\xF3digo abierto", + "dl.soon": "Las apps para iOS y Android y las extensiones para Chrome, Firefox y Opera llegar\xE1n pronto.", + "chatHdr.chat": "Chat", + "chatHdr.chats": "Chats", + "chatHdr.newChat": "+ Nuevo", + "chatHdr.secure": "Seguro", + "chatHdr.p2pSub": "P2P \xB7 cifrado de extremo a extremo", + "chatHdr.save": "Guardar", + "chatHdr.close": "Cerrar", + "chatHdr.expand": "Ampliar", + "chatHdr.you": "T\xFA", + "chatHdr.qrCode": "C\xF3digo QR", + "chat.disconnected": "Desconectado", + "call.mute": "Silenciar", + "call.endShort": "Colgar", + "group.add": "A\xF1adir", + "group.send": "Enviar", + "sec.pfsShort": "Secreto perfecto hacia adelante", + "sec.cipher": "Cifrado", + "chat.close": "Cerrar", + "file.needConnection": "La transferencia de archivos necesita una conexi\xF3n abierta", + "presence.available": "Disponible", + "presence.away": "Ausente", + "presence.busy": "Ocupado", + "presence.offline": "Sin conexi\xF3n", + "presence.invisible": "Invisible", + "presence.availableDesc": "En l\xEDnea y disponible", + "presence.awayDesc": "Inactivo \xB7 se ha ausentado", + "presence.busyDesc": "No molestar", + "presence.invisibleDesc": "Aparecer sin conexi\xF3n para los dem\xE1s", + "presence.online": "En l\xEDnea", + "conn.p2p": "P2P \xB7 conectado", + "conn.verifying": "Verificando\u2026", + "conn.connecting": "Conectando\u2026", + "conn.reconnecting": "Reconectando\u2026", + "conn.peerDisconnected": "La otra persona se ha desconectado", + "conn.disconnected": "Desconectado", + "chat.defaultLabel": "Chat", + "groupPhase.forming": "Form\xE1ndose\u2026", + "groupPhase.commitments": "Intercambiando compromisos\u2026", + "groupPhase.revealing": "Revelando\u2026", + "groupPhase.compare": "Compara el c\xF3digo del grupo", + "groupPhase.ready": "El grupo est\xE1 listo", + "groupPhase.failed": "El grupo ha fallado", + "call.qualityGood": "Buena", + "call.qualityFair": "Aceptable", + "call.qualityWeak": "D\xE9bil", + "msg.code": "C\xF3digo", + "msg.timer": "Temporizador", + "msg.voice": "Voz", + "msg.play": "Reproducir", + "msg.sent": "Enviado", + "msg.read": "Le\xEDdo", + "report.title": "Verificaci\xF3n de seguridad en tiempo real", + "report.active": "Activo", + "report.testsPassed": "Pruebas superadas", + "report.verifiedAt": "Verificado el", + "report.source": "Origen", + "secTest.verifyECDHKeyExchange": "Intercambio de claves ECDH", + "secTest.verifyECDSASignatures": "Firmas digitales ECDSA", + "secTest.verifyEncryption": "Cifrado AES-GCM", + "secTest.verifyMessageIntegrity": "Integridad de los mensajes", + "secTest.verifyPerfectForwardSecrecy": "Secreto perfecto hacia adelante", + "secTest.verifyPFS": "Secreto perfecto hacia adelante", + "secTest.verifyReplayProtection": "Protecci\xF3n contra reenv\xEDo", + "secTest.verifyDTLSFingerprint": "Huella DTLS", + "secTest.verifySASVerification": "Verificaci\xF3n SAS", + "secTest.verifyMetadataProtection": "Protecci\xF3n de metadatos", + "secTest.verifyTrafficObfuscation": "Ofuscaci\xF3n del tr\xE1fico", + "secTest.verifyPacketPadding": "Relleno de paquetes", + "secTest.verifyNestedEncryption": "Cifrado anidado", + "secTest.verifyNonExtractableKeys": "Claves no extra\xEDbles", + "secTest.verifyRateLimiting": "L\xEDmite de frecuencia", + "secTest.verifyMutualAuth": "Autenticaci\xF3n mutua", + "secTest.verifyAuthProof": "Prueba de autenticaci\xF3n", + "secTest.verifyEnhancedValidation": "Validaci\xF3n reforzada", + "secTest.verifyAdvancedFeatures": "Funciones avanzadas", + "secTest.verifySignature": "Comprobaci\xF3n de firma", + "secDetail.Security system initializing...": "El sistema de seguridad se est\xE1 iniciando\u2026", + "secDetail.Nested encryption active": "Cifrado anidado activo", + "secDetail.Nested encryption failed": "El cifrado anidado ha fallado", + "secDetail.Packet padding active": "Relleno de paquetes activo", + "secDetail.Packet padding failed": "El relleno de paquetes ha fallado", + "secDetail.Advanced features active": "Funciones avanzadas activas", + "secDetail.Advanced features failed": "Las funciones avanzadas han fallado", + "secDetail.No encryption key available": "No hay clave de cifrado disponible", + "secDetail.AES-GCM encryption/decryption working correctly": "El cifrado y descifrado AES-GCM funcionan correctamente", + "secDetail.No ECDH key pair available": "No hay par de claves ECDH disponible", + "secDetail.Key derivation failed": "La derivaci\xF3n de claves ha fallado", + "secDetail.No ECDSA key pair available": "No hay par de claves ECDSA disponible", + "secDetail.ECDSA digital signatures working correctly": "Las firmas digitales ECDSA funcionan correctamente", + "secDetail.MAC key not available or invalid": "La clave MAC no est\xE1 disponible o no es v\xE1lida", + "secDetail.Rate limiter did not block a message over the limit": "El limitador no bloque\xF3 un mensaje por encima del l\xEDmite", + "secDetail.Rate limiter is not available": "El limitador de frecuencia no est\xE1 disponible", + "secDetail.Replay protection is working correctly": "La protecci\xF3n contra reenv\xEDo funciona correctamente", + "secDetail.Replay protection not enabled": "La protecci\xF3n contra reenv\xEDo no est\xE1 activada", + "secDetail.SAS code not available": "El c\xF3digo SAS no est\xE1 disponible", + "secDetail.SAS verification code is valid and available": "El c\xF3digo de verificaci\xF3n SAS es v\xE1lido y est\xE1 disponible", + "secDetail.Traffic obfuscation is working correctly": "La ofuscaci\xF3n del tr\xE1fico funciona correctamente", + "secDetail.Traffic obfuscation not enabled": "La ofuscaci\xF3n del tr\xE1fico no est\xE1 activada", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "No hay par de claves ECDH ef\xEDmeras no extra\xEDbles para esta sesi\xF3n", + "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": "Solo PFS a nivel de sesi\xF3n: las claves son ef\xEDmeras por sesi\xF3n, pero el Double Ratchet no est\xE1 activo en esta conexi\xF3n (la otra parte usa una versi\xF3n antigua), as\xED que una clave comprometida expone toda la conversaci\xF3n.", + "msg.pause": "Pausa", + "msg.failed": "Ha fallado", + "groupErr.timeout": "Un miembro dej\xF3 de responder antes de que el c\xF3digo estuviera listo.", + "groupErr.keyMismatch": "La clave de un miembro no coincid\xEDa con la identidad declarada.", + "groupErr.revealMismatch": "El valor revelado por un miembro no coincid\xEDa con su compromiso.", + "groupErr.commitChanged": "Un miembro cambi\xF3 su compromiso a mitad del proceso.", + "groupErr.missingKey": "Se list\xF3 a un miembro cuya clave nunca lleg\xF3.", + "groupErr.outsider": "Lleg\xF3 un fragmento de alguien ajeno al grupo.", + "groupErr.limit": "Un grupo admite como m\xE1ximo ocho miembros.", + "groupErr.tooLarge": "Un mensaje era demasiado grande para enviarlo al grupo.", + "fileType.text": "Texto plano", + "fileType.images": "Im\xE1genes", + "fileType.archives": "Archivos comprimidos", + "fileType.voice": "Mensajes de voz", + "fileType.unsupported": "No admitido", + "qrScan.title": "Escanear c\xF3digo QR", + "qrScan.auto": "Modo autom\xE1tico", + "qrScan.reset": "Reiniciar", + "qrScan.autoScroll": "Desplazamiento autom\xE1tico activado", + "qrScan.starting": "Iniciando la c\xE1mara\u2026", + "qrScan.point": "Apunta la c\xE1mara al c\xF3digo QR", + "qrScan.tapFocus": "Toca la pantalla para enfocar", + "qrScan.focusing": "Enfocando\u2026", + "iceErr.notArray": "La lista de servidores debe ser un array", + "iceErr.invalidJson": "JSON no v\xE1lido", + "iceErr.tooMany": "Demasiados servidores (m\xE1ximo {max})", + "iceErr.invalidEntry": "{label}: entrada no v\xE1lida", + "iceErr.urlCount": "{label}: se necesitan entre 1 y {max} URL", + "iceErr.turnCreds": "{label}: los servidores TURN suelen requerir usuario y credencial", + "iceUrl.notString": "La URL debe ser una cadena", + "iceUrl.empty": "La URL est\xE1 vac\xEDa", + "iceUrl.tooLong": "La URL es demasiado larga", + "iceUrl.badChars": "La URL contiene caracteres no v\xE1lidos", + "iceUrl.badScheme": "La URL debe empezar por stun:, stuns:, turn: o turns:", + "iceUrl.badQuery": "La URL tiene una consulta no v\xE1lida", + "iceUrl.noHost": "A la URL le falta el host", + "iceUrl.badHost": "La URL tiene un host o puerto no v\xE1lido", + "iceUrl.badTransport": "La consulta de la URL debe ser transport=udp o transport=tcp", + "msg.off": "Desactivado", + "file.consentUnavailable": "No se ha podido pedir permiso", + "secLevel.MAXIMUM": "M\xC1XIMO", + "secLevel.INITIALIZING": "INICIANDO", + "secLevel.ERROR": "ERROR", + "secLevel.UNKNOWN": "DESCONOCIDO", + "status.error": "Error", + "offline.disconnect": "Desconectar", + "offline.learnMore": "M\xE1s informaci\xF3n", + "pwa.installApp": "Instalar la app", + "chat.onWeb": "Est\xE1s en la versi\xF3n web" + }, + "uk": { + "language.label": "\u041C\u043E\u0432\u0430", + "community.title": "\u0414\u043E\u043B\u0443\u0447\u0430\u0439\u0442\u0435\u0441\u044F \u0434\u043E \u043C\u0430\u0439\u0431\u0443\u0442\u043D\u044C\u043E\u0433\u043E \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0456", + "community.description": "SecureBit \u0440\u043E\u0441\u0442\u0435 \u0437\u0430\u0432\u0434\u044F\u043A\u0438 \u0441\u0432\u043E\u0457\u0439 \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0442\u0456. \u0412\u0430\u0448\u0456 \u0456\u0434\u0435\u0457 \u0442\u0430 \u0432\u0456\u0434\u0433\u0443\u043A\u0438 \u0444\u043E\u0440\u043C\u0443\u044E\u0442\u044C \u043C\u0430\u0439\u0431\u0443\u0442\u043D\u0454 \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u043E\u0433\u043E \u0441\u043F\u0456\u043B\u043A\u0443\u0432\u0430\u043D\u043D\u044F - \u0440\u043E\u0437\u0440\u043E\u0431\u043A\u0430 \u0432\u0435\u0434\u0435\u0442\u044C\u0441\u044F \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u043E, \u0437 \u043F\u043E\u0432\u043D\u043E\u044E \u0432\u0430\u043B\u0456\u0434\u0430\u0446\u0456\u0454\u044E ASN.1 \u043D\u0430 \u0432\u0441\u044C\u043E\u043C\u0443 \u0448\u043B\u044F\u0445\u0443.", + "community.github": "\u0420\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0456\u0439 \u043D\u0430 GitHub", + "community.feedback": "\u0412\u0456\u0434\u0433\u0443\u043A", + "unique.eyebrow": "\u0427\u0438\u043C \u043C\u0438 \u0432\u0438\u0440\u0456\u0437\u043D\u044F\u0454\u043C\u043E\u0441\u044C", + "unique.heading": "\u0427\u043E\u043C\u0443 SecureBit - \u043E\u0441\u043E\u0431\u043B\u0438\u0432\u0438\u0439", + "unique.s1.titleTop": "\u0411\u0430\u0433\u0430\u0442\u043E\u0448\u0430\u0440\u043E\u0432\u0435", + "unique.s1.titleBottom": "\u044F\u0434\u0440\u043E \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F", + "unique.s1.collapsed": "\u042F\u0434\u0440\u043E \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F", + "unique.s1.desc": "\u041E\u0431\u043C\u0456\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438 ECDH P-384, \u043A\u043E\u0440\u0438\u0441\u043D\u0435 \u043D\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0432 AES-256-GCM, \u043F\u0456\u0434\u043F\u0438\u0441\u0438 ECDSA \u0456 \u043F\u043E\u0432\u043D\u0430 \u0432\u0430\u043B\u0456\u0434\u0430\u0446\u0456\u044F ASN.1 - \u0437\u0432\u0435\u0434\u0435\u043D\u0456 \u0432 \u043E\u0434\u0438\u043D \u0437\u0430\u0433\u0430\u0440\u0442\u043E\u0432\u0430\u043D\u0438\u0439 \u043A\u043E\u043D\u0432\u0435\u0454\u0440.", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "\u0427\u0438\u0441\u0442\u0438\u0439 P2P", + "unique.s2.titleBottom": "\u0447\u0435\u0440\u0435\u0437 WebRTC", + "unique.s2.collapsed": "\u0427\u0438\u0441\u0442\u0438\u0439 P2P \u0447\u0435\u0440\u0435\u0437 WebRTC", + "unique.s2.desc": "\u041F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0439\u0434\u0443\u0442\u044C \u043D\u0430\u043F\u0440\u044F\u043C\u0443 \u043C\u0456\u0436 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u044F\u043C\u0438 \u0447\u0435\u0440\u0435\u0437 WebRTC. \u0416\u043E\u0434\u0435\u043D relay \u043D\u0435 \u0442\u0440\u0438\u043C\u0430\u0454 \u0432\u0430\u0448\u0438\u0445 \u0434\u0430\u043D\u0438\u0445 - \u0441\u0435\u0440\u0432\u0435\u0440 \u043B\u0438\u0448\u0435 \u0434\u043E\u043F\u043E\u043C\u0430\u0433\u0430\u0454 \u0434\u0432\u043E\u043C \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430\u043C \u0437\u043D\u0430\u0439\u0442\u0438 \u043E\u0434\u043D\u0435 \u043E\u0434\u043D\u043E\u0433\u043E.", + "unique.s2.tags": [ + "DTLS 1.3", + "\u0411\u0435\u0437 relay" + ], + "unique.s3.titleTop": "\u0414\u043E\u0441\u043A\u043E\u043D\u0430\u043B\u0430", + "unique.s3.titleBottom": "\u043F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C", + "unique.s3.collapsed": "\u041F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C", + "unique.s3.desc": "\u0421\u0435\u0430\u043D\u0441\u043E\u0432\u0456 \u043A\u043B\u044E\u0447\u0456 \u0437\u043C\u0456\u043D\u044E\u044E\u0442\u044C\u0441\u044F \u0431\u0435\u0437\u043F\u0435\u0440\u0435\u0440\u0432\u043D\u043E \u0439 \u0432\u0456\u0434\u043A\u0438\u0434\u0430\u044E\u0442\u044C\u0441\u044F \u043F\u0456\u0441\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F, \u0442\u043E\u0436 \u043E\u0434\u0438\u043D \u0441\u043A\u043E\u043C\u043F\u0440\u043E\u043C\u0435\u0442\u043E\u0432\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u043D\u0456\u043A\u043E\u043B\u0438 \u043D\u0435 \u0432\u0456\u0434\u043A\u0440\u0438\u0454 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0445 \u0440\u043E\u0437\u043C\u043E\u0432.", + "unique.s3.tags": [ + "\u0415\u0444\u0435\u043C\u0435\u0440\u043D\u0456 \u043A\u043B\u044E\u0447\u0456", + "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u0430 \u0437\u043C\u0456\u043D\u0430" + ], + "unique.s4.titleTop": "\u041C\u0430\u0441\u043A\u0443\u0432\u0430\u043D\u043D\u044F", + "unique.s4.titleBottom": "\u0442\u0440\u0430\u0444\u0456\u043A\u0443", + "unique.s4.collapsed": "\u041C\u0430\u0441\u043A\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0440\u0430\u0444\u0456\u043A\u0443", + "unique.s4.desc": "\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u043F\u0430\u043A\u0435\u0442\u0456\u0432 \u0456 \u043F\u0430\u0443\u0437\u0438 \u043C\u0456\u0436 \u043D\u0438\u043C\u0438 \u0434\u043E\u043F\u043E\u0432\u043D\u044E\u044E\u0442\u044C\u0441\u044F \u0442\u0430 \u0440\u0430\u043D\u0434\u043E\u043C\u0456\u0437\u0443\u044E\u0442\u044C\u0441\u044F, \u0442\u043E\u0436 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u0456 \u043D\u0435 \u0441\u043A\u043B\u0430\u0434\u0430\u044E\u0442\u044C\u0441\u044F \u0432 \u043F\u043E\u043C\u0456\u0442\u043D\u0438\u0439 \u0432\u0456\u0437\u0435\u0440\u0443\u043D\u043E\u043A \u043D\u0430\u0432\u0456\u0442\u044C \u0434\u043B\u044F \u0442\u043E\u0433\u043E, \u0445\u0442\u043E \u0441\u0442\u0435\u0436\u0438\u0442\u044C \u0437\u0430 \u043A\u0430\u043D\u0430\u043B\u043E\u043C.", + "unique.s4.tags": [ + "\u0414\u043E\u043F\u043E\u0432\u043D\u0435\u043D\u043D\u044F \u043F\u0430\u043A\u0435\u0442\u0456\u0432", + "\u0420\u043E\u0437\u043A\u0438\u0434 \u0443 \u0447\u0430\u0441\u0456" + ], + "unique.s5.titleTop": "\u0416\u043E\u0434\u043D\u043E\u0433\u043E", + "unique.s5.titleBottom": "\u0437\u0431\u043E\u0440\u0443 \u0434\u0430\u043D\u0438\u0445", + "unique.s5.collapsed": "\u0416\u043E\u0434\u043D\u043E\u0433\u043E \u0437\u0431\u043E\u0440\u0443 \u0434\u0430\u043D\u0438\u0445", + "unique.s5.desc": "\u0411\u0435\u0437 \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0445 \u0437\u0430\u043F\u0438\u0441\u0456\u0432, \u0431\u0435\u0437 \u0436\u0443\u0440\u043D\u0430\u043B\u0456\u0432, \u0431\u0435\u0437 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C. \u041D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0456 \u043D\u0435\u043C\u0430\u0454 \u043D\u0456\u0447\u043E\u0433\u043E, \u0449\u043E \u043C\u043E\u0436\u043D\u0430 \u0437\u043B\u0438\u0442\u0438, \u0432\u0438\u043B\u0443\u0447\u0438\u0442\u0438 \u0437\u0430 \u0443\u0445\u0432\u0430\u043B\u043E\u044E \u0447\u0438 \u043F\u0440\u043E\u0434\u0430\u0442\u0438.", + "unique.s5.tags": [ + "\u0411\u0435\u0437 \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0445 \u0437\u0430\u043F\u0438\u0441\u0456\u0432", + "\u0411\u0435\u0437 \u0436\u0443\u0440\u043D\u0430\u043B\u0456\u0432" + ], + "partners.eyebrow": "\u041F\u0430\u0440\u0442\u043D\u0435\u0440\u0438 \u0442\u0430 \u0435\u043A\u043E\u0441\u0438\u0441\u0442\u0435\u043C\u0430", + "partners.heading": "\u041D\u0430\u043C \u0434\u043E\u0432\u0456\u0440\u044F\u044E\u0442\u044C \u043D\u0430\u0448\u0456 \u043F\u0430\u0440\u0442\u043D\u0435\u0440\u0438", + "partners.aegis.desc": "\u0406\u043D\u0432\u0435\u0441\u0442\u0438\u0446\u0456\u0439\u043D\u0438\u0439 \u043F\u0430\u0440\u0442\u043D\u0435\u0440, \u044F\u043A\u0438\u0439 \u0437\u0430\u0445\u0438\u0449\u0430\u0454 \u043A\u043E\u043D\u0444\u0456\u0434\u0435\u043D\u0446\u0456\u0439\u043D\u0456 \u0444\u0456\u043D\u0430\u043D\u0441\u043E\u0432\u0456 \u043A\u043E\u043C\u0443\u043D\u0456\u043A\u0430\u0446\u0456\u0457 \u0443 \u0441\u0432\u043E\u0454\u043C\u0443 \u043F\u043E\u0440\u0442\u0444\u0435\u043B\u0456.", + "partners.aegis.role": "\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u0447\u043D\u0438\u0439 \u0456\u043D\u0432\u0435\u0441\u0442\u043E\u0440", + "partners.furilabs.desc": "Linux-\u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0438 \u0437 \u043F\u0440\u0456\u043E\u0440\u0438\u0442\u0435\u0442\u043E\u043C \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0456, \u044F\u043A\u0456 \u043F\u043E\u0441\u0442\u0430\u0447\u0430\u044E\u0442\u044C SecureBit \u044F\u043A \u0442\u0438\u043F\u043E\u0432\u0438\u0439 \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u0439 \u043A\u0430\u043D\u0430\u043B.", + "partners.furilabs.role": "\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0456\u0447\u043D\u0438\u0439 \u043F\u0430\u0440\u0442\u043D\u0435\u0440", + "partners.inviteTitle": "\u0421\u0442\u0430\u0442\u0438 \u043F\u0430\u0440\u0442\u043D\u0435\u0440\u043E\u043C", + "partners.inviteDesc": "\u0421\u0442\u0432\u043E\u0440\u044E\u0454\u0442\u0435 \u043E\u0431\u043B\u0430\u0434\u043D\u0430\u043D\u043D\u044F \u0447\u0438 \u0456\u043D\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u0434\u043B\u044F \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0456? \u0406\u043D\u0442\u0435\u0433\u0440\u0443\u0439\u043C\u043E SecureBit.", + "partners.inviteCta": "\u041F\u043E\u0447\u0430\u0442\u0438 \u0440\u043E\u0437\u043C\u043E\u0432\u0443", + "roadmap.eyebrow": "\u0414\u043E\u0440\u043E\u0436\u043D\u044F \u043A\u0430\u0440\u0442\u0430", + "roadmap.heading": "\u042F\u043A \u0440\u043E\u0437\u0432\u0438\u0432\u0430\u0432\u0441\u044F SecureBit", + "roadmap.subheading": "\u0412\u0456\u0434 \u043F\u0435\u0440\u0448\u043E\u0433\u043E \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u0443 \u0434\u043E \u0434\u0435\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u043E\u0457 \u043C\u0435\u0440\u0435\u0436\u0456, \u0441\u0442\u0456\u0439\u043A\u043E\u0457 \u0434\u043E \u043A\u0432\u0430\u043D\u0442\u043E\u0432\u0438\u0445 \u043E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u044C, \u0437 \u043F\u043E\u0432\u043D\u043E\u044E \u0432\u0430\u043B\u0456\u0434\u0430\u0446\u0456\u0454\u044E ASN.1 \u043D\u0430 \u043A\u043E\u0436\u043D\u043E\u043C\u0443 \u0440\u0456\u0432\u043D\u0456.", + "roadmap.progress": "\u041F\u0440\u043E\u0439\u0434\u0435\u043D\u043E {shipped} \u0437 {total} \u0435\u0442\u0430\u043F\u0456\u0432", + "roadmap.upcoming": "{upcoming} \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u0443", + "roadmap.keyFeatures": "\u041A\u043B\u044E\u0447\u043E\u0432\u0456 \u043C\u043E\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456", + "roadmap.status.released": "\u0412\u0438\u043F\u0443\u0449\u0435\u043D\u043E", + "roadmap.status.current": "\u041F\u043E\u0442\u043E\u0447\u043D\u0438\u0439", + "roadmap.status.dev": "\u0423 \u0440\u043E\u0437\u0440\u043E\u0431\u0446\u0456", + "roadmap.status.planned": "\u0417\u0430\u043F\u043B\u0430\u043D\u043E\u0432\u0430\u043D\u043E", + "roadmap.status.research": "\u0414\u043E\u0441\u043B\u0456\u0434\u0436\u0435\u043D\u043D\u044F", + "hero.headlineTop": "\u041F\u0440\u044F\u043C\u0430 \u043B\u0456\u043D\u0456\u044F,", + "hero.headlineBottom": "\u044F\u043A\u0443 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0454\u0442\u0435 \u043B\u0438\u0448\u0435 \u0432\u0438 \u0434\u0432\u043E\u0454.", + "hero.subheading": "\u041A\u043B\u044E\u0447\u0456 \u0441\u0442\u0432\u043E\u0440\u044E\u044E\u0442\u044C\u0441\u044F \u043D\u0430 \u0432\u0430\u0448\u043E\u043C\u0443 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u0457 \u0439 \u043F\u0435\u0440\u0435\u0434\u0430\u044E\u0442\u044C\u0441\u044F \u043D\u0430\u043F\u0440\u044F\u043C\u0443 \u043C\u0456\u0436 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430\u043C\u0438. \u0411\u0435\u0437 \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0445 \u0437\u0430\u043F\u0438\u0441\u0456\u0432 \u0456 \u0431\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u0456\u0432, \u0449\u043E \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u044E\u0442\u044C \u0432\u0430\u0448\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F.", + "hero.diagramAlt": "\u041F\u0440\u044F\u043C\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0430 \u043B\u0456\u043D\u0456\u044F \u0434\u043E \u043E\u0434\u043D\u043E\u0433\u043E \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430, \u0434\u043E \u044F\u043A\u043E\u0457 \u0434\u043E\u043B\u0443\u0447\u0430\u044E\u0442\u044C\u0441\u044F \u0449\u0435 \u0434\u0432\u043E\u0454", + "intro.createTitle": "\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u043D\u043E\u0432\u0438\u0439 \u043A\u0430\u043D\u0430\u043B", + "intro.createDesc": "\u0412\u0430\u0448 \u043F\u0440\u0438\u0441\u0442\u0440\u0456\u0439 \u0441\u0442\u0432\u043E\u0440\u044E\u0454 \u043A\u043B\u044E\u0447\u0456 \u0442\u0430 \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u0435 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F. \u041D\u0456\u0449\u043E \u0437 \u0446\u044C\u043E\u0433\u043E \u043D\u0435 \u043F\u043E\u0442\u0440\u0430\u043F\u043B\u044F\u0454 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.", + "intro.createCta": "\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u043A\u043B\u044E\u0447\u0456 \u0442\u0430 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F", + "intro.joinTitle": "\u041F\u0440\u0438\u0454\u0434\u043D\u0430\u0442\u0438\u0441\u044F \u0434\u043E \u043A\u0430\u043D\u0430\u043B\u0443", + "intro.scanTitle": "\u0421\u043A\u0430\u043D\u0443\u0432\u0430\u0442\u0438 QR \u043A\u0430\u043C\u0435\u0440\u043E\u044E", + "intro.scanSubtitle": "\u041D\u0430\u0439\u0448\u0432\u0438\u0434\u0448\u0435 - \u043D\u0430\u0432\u0435\u0434\u0456\u0442\u044C \u043D\u0430 \u0435\u043A\u0440\u0430\u043D \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0430", + "intro.orPasteCode": "\u0430\u0431\u043E \u0432\u0441\u0442\u0430\u0432\u0442\u0435 \u043A\u043E\u0434", + "intro.pastePlaceholder": "\u0412\u0441\u0442\u0430\u0432\u0442\u0435 \u043A\u043E\u0434 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0441\u044E\u0434\u0438\u2026", + "intro.connect": "\u0417'\u0454\u0434\u043D\u0430\u0442\u0438\u0441\u044F", + "intro.connecting": "\u041E\u0431\u0440\u043E\u0431\u043A\u0430\u2026", + "roadmap.r1.title": "\u041F\u043E\u0447\u0430\u0442\u043E\u043A \u0440\u043E\u0437\u0440\u043E\u0431\u043A\u0438", + "roadmap.r1.sub": "\u0406\u0434\u0435\u044F, \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F \u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0456\u043D\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438", + "roadmap.r1.date": "\u041F\u043E\u0447\u0430\u0442\u043E\u043A 2025", + "roadmap.r1.features": [ + "\u0424\u043E\u0440\u043C\u0443\u0432\u0430\u043D\u043D\u044F \u043A\u043E\u043D\u0446\u0435\u043F\u0446\u0456\u0457 \u0442\u0430 \u0432\u0438\u043C\u043E\u0433", + "\u0412\u0438\u0431\u0456\u0440 \u0441\u0442\u0435\u043A\u0430: WebRTC, P2P, \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u044F", + "\u041F\u0435\u0440\u0448\u0456 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u0438 \u043E\u0431\u043C\u0456\u043D\u0443 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F\u043C\u0438", + "\u0421\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0456\u044E \u0442\u0430 CI", + "\u0411\u0430\u0437\u043E\u0432\u0430 \u0430\u0440\u0445\u0456\u0442\u0435\u043A\u0442\u0443\u0440\u0430 \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F", + "\u0414\u0438\u0437\u0430\u0439\u043D UX/UI" + ], + "roadmap.r2.title": "\u0410\u043B\u044C\u0444\u0430-\u0432\u0435\u0440\u0441\u0456\u044F", + "roadmap.r2.sub": "\u041F\u0435\u0440\u0448\u0430 \u043F\u0443\u0431\u043B\u0456\u0447\u043D\u0430 \u0430\u043B\u044C\u0444\u0430: \u0431\u0430\u0437\u043E\u0432\u0438\u0439 \u0447\u0430\u0442 \u0456 \u043E\u0431\u043C\u0456\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438", + "roadmap.r2.date": "\u0412\u0435\u0441\u043D\u0430 2025", + "roadmap.r2.features": [ + "\u0411\u0430\u0437\u043E\u0432\u0438\u0439 \u043E\u0431\u043C\u0456\u043D \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F\u043C\u0438 P2P \u0447\u0435\u0440\u0435\u0437 WebRTC", + "\u041F\u0440\u043E\u0441\u0442\u0435 \u043D\u0430\u0441\u043A\u0440\u0456\u0437\u043D\u0435 \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F (\u0434\u0435\u043C\u043E\u043D\u0441\u0442\u0440\u0430\u0446\u0456\u0439\u043D\u0430 \u0441\u0445\u0435\u043C\u0430)", + "\u0421\u0442\u0430\u0431\u0456\u043B\u044C\u043D\u0438\u0439 \u0441\u0438\u0433\u043D\u0430\u043B\u0456\u043D\u0433 \u0456 \u043F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F", + "\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043B\u044F \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043D\u043D\u044F", + "\u0417\u0431\u0456\u0440 \u0432\u0456\u0434\u0433\u0443\u043A\u0456\u0432 \u0432\u0456\u0434 \u043F\u0435\u0440\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u0443\u0432\u0430\u043B\u044C\u043D\u0438\u043A\u0456\u0432" + ], + "roadmap.r3.title": "\u041F\u043E\u0441\u0438\u043B\u0435\u043D\u0438\u0439 \u0437\u0430\u0445\u0438\u0441\u0442", + "roadmap.r3.sub": "\u0417\u043C\u0456\u0446\u043D\u0435\u043D\u043D\u044F \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u0442\u0430 \u0432\u0438\u043F\u0443\u0441\u043A \u0441\u0442\u0430\u0431\u0456\u043B\u044C\u043D\u043E\u0457 \u0433\u0456\u043B\u043A\u0438", + "roadmap.r3.date": "\u041B\u0456\u0442\u043E 2025", + "roadmap.r3.features": [ + "ECDH/ECDSA \u0443 \u043F\u0440\u043E\u043C\u0438\u0441\u043B\u043E\u0432\u0456\u0439 \u0435\u043A\u0441\u043F\u043B\u0443\u0430\u0442\u0430\u0446\u0456\u0457", + "\u041F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C \u0456 \u0437\u043C\u0456\u043D\u0430 \u043A\u043B\u044E\u0447\u0456\u0432", + "\u041F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u0456 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438 \u0430\u0432\u0442\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0446\u0456\u0457", + "\u0428\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432 \u0456 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043D\u043D\u044F \u0432\u0435\u043B\u0438\u043A\u0438\u0445 \u043E\u0431\u0441\u044F\u0433\u0456\u0432", + "\u0410\u0443\u0434\u0438\u0442 \u0431\u0430\u0437\u043E\u0432\u0438\u0445 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u0445 \u043F\u0440\u043E\u0446\u0435\u0441\u0456\u0432" + ], + "roadmap.r4.title": "\u041C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0430 \u0441\u0442\u0430\u0431\u0456\u043B\u044C\u043D\u0456\u0441\u0442\u044C", + "roadmap.r4.sub": "\u041C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043D\u043D\u044F \u043C\u0435\u0440\u0435\u0436\u0456 \u0442\u0430 \u043F\u0456\u0434\u0432\u0438\u0449\u0435\u043D\u043D\u044F \u0441\u0442\u0430\u0431\u0456\u043B\u044C\u043D\u043E\u0441\u0442\u0456", + "roadmap.r4.date": "\u041E\u0441\u0456\u043D\u044C 2025", + "roadmap.r4.features": [ + "\u041E\u043F\u0442\u0438\u043C\u0456\u0437\u0430\u0446\u0456\u044F P2P-\u0437'\u0454\u0434\u043D\u0430\u043D\u044C \u0456 \u043F\u0440\u043E\u0445\u043E\u0434\u0436\u0435\u043D\u043D\u044F NAT", + "\u041C\u0435\u0445\u0430\u043D\u0456\u0437\u043C\u0438 \u043F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0442\u0430 \u0447\u0435\u0440\u0433\u0438 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C", + "\u041C\u0435\u043D\u0448\u0435 \u0441\u043F\u043E\u0436\u0438\u0432\u0430\u043D\u043D\u044F \u0431\u0430\u0442\u0430\u0440\u0435\u0457 \u043D\u0430 \u043C\u043E\u0431\u0456\u043B\u044C\u043D\u0438\u0445", + "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0456\u0437\u0430\u0446\u0456\u044F \u043C\u0456\u0436 \u043A\u0456\u043B\u044C\u043A\u043E\u043C\u0430 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u044F\u043C\u0438", + "\u0406\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438 \u043C\u043E\u043D\u0456\u0442\u043E\u0440\u0438\u043D\u0433\u0443 \u0442\u0430 \u0436\u0443\u0440\u043D\u0430\u043B\u044E\u0432\u0430\u043D\u043D\u044F \u0434\u043B\u044F \u0440\u043E\u0437\u0440\u043E\u0431\u043D\u0438\u043A\u0456\u0432" + ], + "roadmap.r5.title": "\u041F\u0440\u0438\u0432\u0430\u0442\u043D\u0456\u0441\u0442\u044C \u043F\u0435\u0440\u0435\u0434\u0443\u0441\u0456\u043C", + "roadmap.r5.sub": "\u0424\u043E\u043A\u0443\u0441 \u043D\u0430 \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0456: \u0437\u043C\u0435\u043D\u0448\u0435\u043D\u043D\u044F \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u0438\u0445", + "roadmap.r5.date": "\u0417\u0438\u043C\u0430 2025", + "roadmap.r5.features": [ + "\u0417\u0430\u0445\u0438\u0441\u0442 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u0438\u0445 \u0456 \u0437\u043C\u0435\u043D\u0448\u0435\u043D\u043D\u044F \u0432\u0456\u0434\u0431\u0438\u0442\u043A\u0430", + "\u0415\u043A\u0441\u043F\u0435\u0440\u0438\u043C\u0435\u043D\u0442\u0438 \u0437 \u0446\u0438\u0431\u0443\u043B\u0435\u0432\u043E\u044E \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0456\u0454\u044E \u0442\u0430 DHT", + "\u0412\u0430\u0440\u0456\u0430\u043D\u0442\u0438 \u0430\u043D\u043E\u043D\u0456\u043C\u043D\u0438\u0445 \u0437'\u0454\u0434\u043D\u0430\u043D\u044C", + "\u041F\u0456\u0434\u0433\u043E\u0442\u043E\u0432\u043A\u0430 \u0434\u043E \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u043E\u0433\u043E \u0430\u0443\u0434\u0438\u0442\u0443 \u043A\u043E\u0434\u0443", + "\u041F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u0430 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "18-\u0448\u0430\u0440\u043E\u0432\u0430 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u044F \u0432\u0456\u0439\u0441\u044C\u043A\u043E\u0432\u043E\u0433\u043E \u0440\u0456\u0432\u043D\u044F \u0437 \u043F\u043E\u0432\u043D\u043E\u044E \u0432\u0430\u043B\u0456\u0434\u0430\u0446\u0456\u0454\u044E ASN.1", + "roadmap.r6.date": "\u041A\u0456\u043D\u0435\u0446\u044C 2025", + "roadmap.r6.features": [ + "\u041F\u043E\u0442\u0440\u0456\u0439\u043D\u0438\u0439 \u0437\u0430\u0445\u0438\u0441\u0442: ECDH + DTLS + SAS", + "\u0428\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F ECDH P-384 \u0456 AES-GCM 256 \u0431\u0456\u0442", + "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0432\u0456\u0434\u0431\u0438\u0442\u043A\u0430 DTLS", + "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 SAS (\u043A\u043E\u0440\u043E\u0442\u043A\u0438\u0439 \u0440\u044F\u0434\u043E\u043A \u0430\u0432\u0442\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0446\u0456\u0457)", + "\u041F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C \u0437\u0456 \u0437\u043C\u0456\u043D\u043E\u044E \u043A\u043B\u044E\u0447\u0456\u0432", + "\u041F\u043E\u0441\u0438\u043B\u0435\u043D\u0438\u0439 \u0437\u0430\u0445\u0438\u0441\u0442 \u0432\u0456\u0434 \u0430\u0442\u0430\u043A \xAB\u043B\u044E\u0434\u0438\u043D\u0430 \u043F\u043E\u0441\u0435\u0440\u0435\u0434\u0438\u043D\u0456\xBB", + "\u041F\u043E\u0432\u043D\u0430 \u0432\u0430\u043B\u0456\u0434\u0430\u0446\u0456\u044F ASN.1 DER", + "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 OID \u0456 \u0442\u043E\u0447\u043E\u043A EC", + "\u0412\u0430\u043B\u0456\u0434\u0430\u0446\u0456\u044F \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438 SPKI", + "\u0410\u0440\u0445\u0456\u0442\u0435\u043A\u0442\u0443\u0440\u0430 P2P \u043D\u0430 WebRTC", + "\u0417\u0430\u0445\u0438\u0441\u0442 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u0438\u0445", + "100 % \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438\u0439 \u043A\u043E\u0434" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "\u0412\u043B\u0430\u0441\u043D\u0456 \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043A\u0438 \u0434\u043B\u044F Windows, macOS \u0456 Linux", + "roadmap.r7.date": "\u041F\u043E\u0447\u0430\u0442\u043E\u043A 2026", + "roadmap.r7.features": [ + "\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A \u0434\u043B\u044F Windows (Tauri v2)", + "\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A \u0434\u043B\u044F macOS (Tauri v2)", + "AppImage \u0434\u043B\u044F Linux (Tauri v2)", + "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C\u0443 \u0447\u0430\u0441\u0456", + "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u0435 \u043F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F", + "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0456\u0437\u0430\u0446\u0456\u044F \u043C\u0456\u0436 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u044F\u043C\u0438", + "\u041E\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441", + "\u0424\u0430\u0439\u043B\u0438 \u0434\u043E 100 \u041C\u0411" + ], + "roadmap.r8.title": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u0439 \u0433\u043E\u043B\u043E\u0441 \u0456 \u0434\u0437\u0432\u0456\u043D\u043A\u0438", + "roadmap.r8.sub": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0456 \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F, \u0430\u0443\u0434\u0456\u043E- \u0442\u0430 \u0432\u0456\u0434\u0435\u043E\u0434\u0437\u0432\u0456\u043D\u043A\u0438", + "roadmap.r8.date": "\u041F\u043E\u0447\u0430\u0442\u043E\u043A 2026", + "roadmap.r8.features": [ + "\u0413\u043E\u043B\u043E\u0441\u043E\u0432\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0437 \u043D\u0430\u0441\u043A\u0440\u0456\u0437\u043D\u0438\u043C \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F\u043C", + "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0456 \u0430\u0443\u0434\u0456\u043E\u0434\u0437\u0432\u0456\u043D\u043A\u0438 \u0432\u0456\u0447-\u043D\u0430-\u0432\u0456\u0447 (WebRTC)", + "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0456 \u0432\u0456\u0434\u0435\u043E\u0434\u0437\u0432\u0456\u043D\u043A\u0438 \u0432\u0456\u0447-\u043D\u0430-\u0432\u0456\u0447 (WebRTC)", + "\u041F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C \u0434\u043B\u044F \u0436\u0438\u0432\u043E\u0433\u043E \u043F\u043E\u0442\u043E\u043A\u0443", + "\u041C\u0435\u0434\u0456\u0430\u043F\u043E\u0442\u043E\u043A\u0438 \u043F\u0456\u0434 \u0437\u0430\u0445\u0438\u0441\u0442\u043E\u043C SRTP/DTLS", + "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 SAS \u043F\u0456\u0434 \u0447\u0430\u0441 \u0434\u0437\u0432\u0456\u043D\u043A\u0430", + "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u043F\u0440\u043E \u0434\u0437\u0432\u0456\u043D\u043A\u0438 \u0442\u0430 \u0430\u0432\u0442\u043E\u043F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F", + "\u041C\u0435\u0434\u0456\u0430 P2P \u0437 \u043D\u0438\u0437\u044C\u043A\u043E\u044E \u0437\u0430\u0442\u0440\u0438\u043C\u043A\u043E\u044E" + ], + "roadmap.r9.title": "\u0413\u0440\u0443\u043F\u043E\u0432\u0435 \u0441\u043F\u0456\u043B\u043A\u0443\u0432\u0430\u043D\u043D\u044F", + "roadmap.r9.sub": "\u0413\u0440\u0443\u043F\u043E\u0432\u0456 \u0447\u0430\u0442\u0438 \u0431\u0435\u0437 \u0432\u0442\u0440\u0430\u0442\u0438 \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0456", + "roadmap.r9.date": "\u0417\u0430\u0440\u0430\u0437", + "roadmap.r9.features": [ + "\u0413\u0440\u0443\u043F\u043E\u0432\u0456 \u0447\u0430\u0442\u0438 P2P \u0434\u043E 8 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432", + "\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u0447\u0435\u0440\u0435\u0437 \u043C\u0435\u0440\u0435\u0436\u0443 \u0437 \u043F\u0456\u0434\u043F\u0438\u0441\u0430\u043D\u0438\u043C relay \u044F\u043A \u0437\u0430\u043F\u0430\u0441\u043D\u0438\u043C \u0448\u043B\u044F\u0445\u043E\u043C", + "\u041E\u0434\u0438\u043D \u043A\u043E\u0434 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u0433\u0440\u0443\u043F\u0438, \u044F\u043A\u0438\u0439 \u0437\u0432\u0456\u0440\u044F\u044E\u0442\u044C \u0443\u0441\u0456", + "\u0426\u0435\u0440\u0435\u043C\u043E\u043D\u0456\u044F \xAB\u0441\u043F\u0435\u0440\u0448\u0443 \u0437\u043E\u0431\u043E\u0432'\u044F\u0437\u0430\u043D\u043D\u044F, \u043F\u043E\u0442\u0456\u043C \u0440\u043E\u0437\u043A\u0440\u0438\u0442\u0442\u044F\xBB \u043F\u0440\u043E\u0442\u0438 \u0434\u043E\u0431\u043E\u0440\u0443 \u043A\u043E\u0434\u0456\u0432", + "\u0412\u043B\u0430\u0441\u043D\u0456 \u043A\u043B\u044E\u0447\u0456 \u043E\u0441\u043E\u0431\u0438 \u0432 \u0433\u0440\u0443\u043F\u0456, \u0435\u0444\u0435\u043C\u0435\u0440\u043D\u0456 \u0437\u0430 \u0437\u0430\u0434\u0443\u043C\u043E\u043C", + "\u041F\u0456\u0434\u043F\u0438\u0441\u0430\u043D\u0435 \u0447\u043B\u0435\u043D\u0441\u0442\u0432\u043E \u0437 \u0443\u043F\u043E\u0440\u044F\u0434\u043A\u0443\u0432\u0430\u043D\u043D\u044F\u043C \u0437\u0430 \u0435\u043F\u043E\u0445\u0430\u043C\u0438", + "\u041F\u0456\u0434\u043F\u0438\u0441\u0430\u043D\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F - \u0440\u043E\u0437\u0431\u0456\u0436\u043D\u0456\u0441\u0442\u044C \u0443 \u0441\u0442\u0435\u043D\u043E\u0433\u0440\u0430\u043C\u0456 \u043C\u043E\u0436\u043D\u0430 \u0434\u043E\u0432\u0435\u0441\u0442\u0438", + "\u0411\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0431\u0435\u0437 \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0433\u0440\u0443\u043F\u0438, \u0431\u0435\u0437 \u0456\u0441\u0442\u043E\u0440\u0456\u0457" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "\u0412\u043B\u0430\u0441\u043D\u0456 \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043A\u0438 \u0434\u043B\u044F iOS \u0442\u0430 Android", + "roadmap.r10.date": "II \u043A\u0432\u0430\u0440\u0442\u0430\u043B 2027", + "roadmap.r10.features": [ + "\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A \u0434\u043B\u044F iOS (Swift/SwiftUI)", + "\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A \u0434\u043B\u044F Android (Kotlin/Jetpack Compose)", + "\u041F\u0456\u0434\u0442\u0440\u0438\u043C\u043A\u0430 PWA \u0432 \u043C\u043E\u0431\u0456\u043B\u044C\u043D\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445", + "Push-\u0441\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C\u0443 \u0447\u0430\u0441\u0456", + "\u041E\u043F\u0442\u0438\u043C\u0456\u0437\u0430\u0446\u0456\u044F \u0432\u0438\u0442\u0440\u0430\u0442\u0438 \u0431\u0430\u0442\u0430\u0440\u0435\u0457", + "\u0406\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043F\u0440\u0438\u0441\u0442\u043E\u0441\u043E\u0432\u0430\u043D\u0438\u0439 \u0434\u043E \u043C\u043E\u0431\u0456\u043B\u044C\u043D\u0438\u0445", + "\u0427\u0435\u0440\u0433\u0430 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C \u043E\u0444\u043B\u0430\u0439\u043D", + "\u0411\u0456\u043E\u043C\u0435\u0442\u0440\u0438\u0447\u043D\u0430 \u0430\u0432\u0442\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0446\u0456\u044F" + ], + "roadmap.r11.title": "\u0421\u0442\u0456\u0439\u043A\u0456\u0441\u0442\u044C \u0434\u043E \u043A\u0432\u0430\u043D\u0442\u043E\u0432\u0438\u0445 \u043E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u044C", + "roadmap.r11.sub": "\u0417\u0430\u0445\u0438\u0441\u0442 \u0432\u0456\u0434 \u043A\u0432\u0430\u043D\u0442\u043E\u0432\u0438\u0445 \u043A\u043E\u043C\u043F'\u044E\u0442\u0435\u0440\u0456\u0432", + "roadmap.r11.date": "IV \u043A\u0432\u0430\u0440\u0442\u0430\u043B 2027", + "roadmap.r11.features": [ + "\u041F\u043E\u0441\u0442\u043A\u0432\u0430\u043D\u0442\u043E\u0432\u0430 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u044F CRYSTALS-Kyber", + "\u0426\u0438\u0444\u0440\u043E\u0432\u0456 \u043F\u0456\u0434\u043F\u0438\u0441\u0438 SPHINCS+", + "\u0413\u0456\u0431\u0440\u0438\u0434\u043D\u0430 \u0441\u0445\u0435\u043C\u0430: \u043A\u043B\u0430\u0441\u0438\u0447\u043D\u0430 \u0442\u0430 \u043F\u043E\u0441\u0442\u043A\u0432\u0430\u043D\u0442\u043E\u0432\u0430", + "\u041A\u0432\u0430\u043D\u0442\u043E\u0432\u043E \u0441\u0442\u0456\u0439\u043A\u0438\u0439 \u043E\u0431\u043C\u0456\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438", + "\u041E\u043D\u043E\u0432\u043B\u0435\u043D\u0456 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0438 \u0433\u0435\u0448\u0443\u0432\u0430\u043D\u043D\u044F", + "\u041C\u0456\u0433\u0440\u0430\u0446\u0456\u044F \u043D\u0430\u044F\u0432\u043D\u0438\u0445 \u0441\u0435\u0430\u043D\u0441\u0456\u0432", + "\u0421\u0443\u043C\u0456\u0441\u043D\u0456\u0441\u0442\u044C \u0456\u0437 v5.x", + "\u041A\u0432\u0430\u043D\u0442\u043E\u0432\u043E \u0441\u0442\u0456\u0439\u043A\u0456 \u043F\u0440\u043E\u0442\u043E\u043A\u043E\u043B\u0438" + ], + "roadmap.r12.title": "\u0414\u0435\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u0430 \u043C\u0435\u0440\u0435\u0436\u0430", + "roadmap.r12.sub": "\u041F\u043E\u0432\u043D\u0456\u0441\u0442\u044E \u0434\u0435\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u0430 \u043C\u0435\u0440\u0435\u0436\u0430", + "roadmap.r12.date": "2028", + "roadmap.r12.features": [ + "\u0421\u0456\u0442\u0447\u0430\u0441\u0442\u0430 \u043C\u0435\u0440\u0435\u0436\u0430 \u0432\u0443\u0437\u043B\u0456\u0432", + "DHT \u0434\u043B\u044F \u043F\u043E\u0448\u0443\u043A\u0443 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432", + "\u0412\u0431\u0443\u0434\u043E\u0432\u0430\u043D\u0430 \u0446\u0438\u0431\u0443\u043B\u0435\u0432\u0430 \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0456\u044F", + "\u0422\u043E\u043A\u0435\u043D\u043E\u043C\u0456\u043A\u0430 \u0442\u0430 \u0441\u0442\u0438\u043C\u0443\u043B\u0438 \u0434\u043B\u044F \u0432\u0443\u0437\u043B\u0456\u0432", + "\u0412\u0440\u044F\u0434\u0443\u0432\u0430\u043D\u043D\u044F \u0447\u0435\u0440\u0435\u0437 DAO", + "\u0412\u0437\u0430\u0454\u043C\u043E\u0434\u0456\u044F \u0437 \u0456\u043D\u0448\u0438\u043C\u0438 \u043C\u0435\u0440\u0435\u0436\u0430\u043C\u0438", + "\u0421\u0443\u043C\u0456\u0441\u043D\u0456\u0441\u0442\u044C \u043C\u0456\u0436 \u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u0430\u043C\u0438", + "\u041C\u0435\u0440\u0435\u0436\u0430, \u0449\u043E \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u044E\u0454\u0442\u044C\u0441\u044F \u0441\u0430\u043C\u0430" + ], + "roadmap.r13.title": "\u0428\u0406-\u043F\u043E\u043C\u0456\u0447\u043D\u0438\u043A \u0456\u0437 \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0456", + "roadmap.r13.sub": "\u0428\u0442\u0443\u0447\u043D\u0438\u0439 \u0456\u043D\u0442\u0435\u043B\u0435\u043A\u0442 \u0434\u043B\u044F \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0456 \u0442\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0438", + "roadmap.r13.date": "2028+", + "roadmap.r13.features": [ + "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u0438\u0439 \u0430\u043D\u0430\u043B\u0456\u0437 \u0437\u0430\u0433\u0440\u043E\u0437 \u0437\u0430 \u0434\u043E\u043F\u043E\u043C\u043E\u0433\u043E\u044E \u0428\u0406", + "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u0435 \u0432\u0438\u044F\u0432\u043B\u0435\u043D\u043D\u044F \u0430\u0442\u0430\u043A \xAB\u043B\u044E\u0434\u0438\u043D\u0430 \u043F\u043E\u0441\u0435\u0440\u0435\u0434\u0438\u043D\u0456\xBB", + "\u0410\u0434\u0430\u043F\u0442\u0438\u0432\u043D\u0430 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u044F", + "\u041F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u0456 \u043F\u043E\u0440\u0430\u0434\u0438 \u0437 \u0431\u0435\u0437\u043F\u0435\u043A\u0438", + "\u041C\u0430\u0448\u0438\u043D\u043D\u0435 \u043D\u0430\u0432\u0447\u0430\u043D\u043D\u044F \u0437 \u043D\u0443\u043B\u044C\u043E\u0432\u0438\u043C \u0440\u043E\u0437\u0433\u043E\u043B\u043E\u0448\u0435\u043D\u043D\u044F\u043C", + "\u041F\u0440\u0438\u0432\u0430\u0442\u043D\u0438\u0439 \u0428\u0406-\u043F\u043E\u043C\u0456\u0447\u043D\u0438\u043A", + "\u041F\u0435\u0440\u0435\u0434\u0431\u0430\u0447\u0443\u0432\u0430\u043B\u044C\u043D\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0430", + "\u0410\u0432\u0442\u043E\u043D\u043E\u043C\u043D\u0438\u0439 \u0437\u0430\u0445\u0438\u0441\u0442 \u0432\u0456\u0434 \u0430\u0442\u0430\u043A" + ], + "handshake.step1": "\u0421\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u043F\u0430\u0440\u0438 \u043A\u043B\u044E\u0447\u0456\u0432 ECDH P-384", + "handshake.step2": "\u041E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u044F \u043A\u043E\u0434\u0443 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438", + "handshake.step3": "\u0417\u0430\u043A\u0440\u0456\u043F\u043B\u0435\u043D\u043D\u044F \u043F\u0440\u044F\u043C\u043E\u0457 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u0456", + "handshake.securingTitle": "\u0417\u0430\u0445\u0438\u0449\u0430\u0454\u043C\u043E \u0432\u0430\u0448 \u043A\u0430\u043D\u0430\u043B", + "handshake.answerTitle": "\u0413\u043E\u0442\u0443\u0454\u043C\u043E \u0432\u0430\u0448\u0443 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C", + "handshake.securingDesc": "\u0421\u0442\u0432\u043E\u0440\u044E\u0454\u043C\u043E \u043A\u043B\u044E\u0447\u0456, \u0437\u0434\u0430\u0442\u043D\u0456 \u0432\u0438\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u0432\u0442\u0440\u0443\u0447\u0430\u043D\u043D\u044F.", + "handshake.shareTitle": "\u041F\u043E\u0434\u0456\u043B\u0456\u0442\u044C\u0441\u044F \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F\u043C", + "handshake.sendAnswerTitle": "\u041D\u0430\u0434\u0456\u0448\u043B\u0456\u0442\u044C \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C \u043D\u0430\u0437\u0430\u0434", + "handshake.shareDesc": "\u041F\u043E\u043A\u0430\u0436\u0456\u0442\u044C QR-\u043A\u043E\u0434 \u0430\u0431\u043E \u043D\u0430\u0434\u0456\u0448\u043B\u0456\u0442\u044C \u043A\u043E\u0434 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0443. \u0412\u0456\u043D \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u0438\u0439 \u0456 \u0441\u043A\u043E\u0440\u043E \u0432\u0442\u0440\u0430\u0442\u0438\u0442\u044C \u0447\u0438\u043D\u043D\u0456\u0441\u0442\u044C.", + "handshake.sendAnswerDesc": "\u041F\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u0446\u044E \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C \u0442\u043E\u043C\u0443, \u0445\u0442\u043E \u0441\u0442\u0432\u043E\u0440\u0438\u0432 \u043A\u0430\u043D\u0430\u043B, \u0449\u043E\u0431 \u0432\u0456\u043D \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0432 \u0440\u0443\u043A\u043E\u0441\u0442\u0438\u0441\u043A\u0430\u043D\u043D\u044F.", + "handshake.establish": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F", + "handshake.thenReceive": "\u041F\u043E\u0442\u0456\u043C \u043E\u0442\u0440\u0438\u043C\u0430\u0439\u0442\u0435 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C, \u044F\u043A\u0443 \u043D\u0430\u0434\u0456\u0448\u043B\u0435 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A", + "handshake.pasteAnswerPlaceholder": "\u0412\u0441\u0442\u0430\u0432\u0442\u0435 \u043A\u043E\u0434 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0456 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0430\u2026", + "handshake.answerSentNote": "\u041D\u0430\u0434\u0456\u0448\u043B\u0456\u0442\u044C \u0446\u044E \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C \u0441\u0442\u0432\u043E\u0440\u044E\u0432\u0430\u0447\u0443 \u0439 \u0437\u0430\u0447\u0435\u043A\u0430\u0439\u0442\u0435 - \u0447\u0430\u0442 \u0432\u0456\u0434\u043A\u0440\u0438\u0454\u0442\u044C\u0441\u044F, \u0449\u043E\u0439\u043D\u043E \u0432\u0456\u043D \u043F\u0440\u0438\u0454\u0434\u043D\u0430\u0454\u0442\u044C\u0441\u044F.", + "handshake.qrHint": "\u0422\u0440\u0438\u043C\u0430\u0439\u0442\u0435 \u0446\u0435 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438\u043C, \u0434\u043E\u043A\u0438 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u043D\u0435 \u0437\u0447\u0438\u0442\u0430\u0454 \u043A\u043E\u0434.", + "handshake.qrHintFrames": "\u0420\u0443\u043A\u043E\u0441\u0442\u0438\u0441\u043A\u0430\u043D\u043D\u044F \u0440\u043E\u0437\u0431\u0438\u0442\u0435 \u043D\u0430 {frames} \u043A\u0430\u0434\u0440\u0456\u0432 - \u0442\u0440\u0438\u043C\u0430\u0439\u0442\u0435 \u0446\u0435 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438\u043C, \u0434\u043E\u043A\u0438 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u043D\u0435 \u0437\u0447\u0438\u0442\u0430\u0454 \u0432\u0441\u0456.", + "verify.title": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0438", + "verify.desc": "\u0417\u0432\u0456\u0440\u0442\u0435 \u0446\u0435\u0439 \u043A\u043E\u0434 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u0437\u0456 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u043E\u043C \u0456\u043D\u0448\u0438\u043C \u043A\u0430\u043D\u0430\u043B\u043E\u043C (\u0433\u043E\u043B\u043E\u0441\u043E\u043C \u0430\u0431\u043E \u043E\u0441\u043E\u0431\u0438\u0441\u0442\u043E), \u043F\u043E\u0442\u0456\u043C \u0432\u0432\u0435\u0434\u0456\u0442\u044C \u0439\u043E\u0433\u043E, \u0449\u043E\u0431 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442.", + "verify.enterLabel": "\u0412\u0432\u0435\u0434\u0456\u0442\u044C \u0437\u0432\u0456\u0440\u0435\u043D\u0438\u0439 \u043A\u043E\u0434", + "verify.placeholder": "\u0412\u0432\u0435\u0434\u0456\u0442\u044C \u043A\u043E\u0434 \u0442\u0443\u0442", + "verify.confirm": "\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 \u043A\u043E\u0434", + "verify.confirmed": "\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043D\u043E", + "verify.mismatch": "\u041D\u0435 \u0437\u0431\u0456\u0433\u0430\u044E\u0442\u044C\u0441\u044F", + "verify.yours": "\u0412\u0430\u0448\u0435 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043D\u043D\u044F", + "verify.peer": "\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043D\u043D\u044F \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0430", + "verify.pending": "\u041E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F", + "verify.waiting": "\u041E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u044F \u043A\u043E\u0434\u0443\u2026", + "verify.verified": "\u041A\u0430\u043D\u0430\u043B \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E", + "verify.bothConfirmed": "\u041E\u0431\u0438\u0434\u0432\u0456 \u0441\u0442\u043E\u0440\u043E\u043D\u0438 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043B\u0438. \u0412\u0456\u0434\u043A\u0440\u0438\u0432\u0430\u0454\u043C\u043E \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u0439 \u0447\u0430\u0442\u2026", + "pwa.bannerTitle": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0456\u0442\u044C SecureBit.chat", + "pwa.bannerDesc": "\u0414\u043E\u0441\u0432\u0456\u0434 \u0432\u043B\u0430\u0441\u043D\u043E\u0433\u043E \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043A\u0443 \u0437 \u043F\u043E\u0441\u0438\u043B\u0435\u043D\u0438\u043C \u0437\u0430\u0445\u0438\u0441\u0442\u043E\u043C", + "pwa.install": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438", + "pwa.dismiss": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438", + "pwa.close": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438", + "pwa.iosTitle": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u043D\u0430 iOS", + "pwa.iosStep1": "\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C \u043A\u043D\u043E\u043F\u043A\u0443 \xAB\u041F\u043E\u0434\u0456\u043B\u0438\u0442\u0438\u0441\u044F\xBB", + "pwa.iosStep1Hint": "\u0417\u0430\u0437\u0432\u0438\u0447\u0430\u0439 \u0443\u043D\u0438\u0437\u0443 Safari", + "pwa.iosStep2": "\u0417\u043D\u0430\u0439\u0434\u0456\u0442\u044C \xAB\u041D\u0430 \u0435\u043A\u0440\u0430\u043D \xAB\u0414\u043E\u043C\u0456\u0432\xBB\xBB", + "pwa.iosStep2Hint": "\u041F\u0440\u043E\u0433\u043E\u0440\u043D\u0456\u0442\u044C \u043C\u0435\u043D\u044E \u043F\u043E\u0434\u0456\u043B\u0438\u0442\u0438\u0441\u044F \u0432\u043D\u0438\u0437", + "pwa.iosStep3": "\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C \xAB\u0414\u043E\u0434\u0430\u0442\u0438\xBB", + "pwa.iosStep3Hint": "\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0456\u0442\u044C, \u0449\u043E\u0431 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 SecureBit.chat", + "pwa.genericTitle": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 SecureBit", + "pwa.genericDesc": "\u041A\u043E\u0436\u0435\u043D \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u044E\u0454 \u043F\u043E-\u0441\u0432\u043E\u0454\u043C\u0443. \u041E\u0431\u0435\u0440\u0456\u0442\u044C \u043A\u0440\u043E\u043A\u0438, \u044F\u043A\u0456 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u044E\u0442\u044C \u0432\u0430\u0448\u043E\u043C\u0443.", + "pwa.gotIt": "\u0417\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u043E", + "pwa.installedTitle": "\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E!", + "pwa.installedIos": "\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A \u0434\u043B\u044F iOS \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E! \u0412\u0456\u0434\u043A\u0440\u0438\u0439\u0442\u0435 \u0439\u043E\u0433\u043E \u0437 \u0435\u043A\u0440\u0430\u043D\u0430 \xAB\u0414\u043E\u043C\u0456\u0432\xBB.", + "pwa.installedGeneric": "SecureBit.chat \u0442\u0435\u043F\u0435\u0440 \u043D\u0430 \u0432\u0430\u0448\u043E\u043C\u0443 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u0457", + "pwa.anytimeTitle": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0431\u0443\u0434\u044C-\u043A\u043E\u043B\u0438", + "pwa.anytimeDesc": "\u0412\u0438 \u0437\u0430\u0432\u0436\u0434\u0438 \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 SecureBit.chat \u0456\u0437 \u043C\u0435\u043D\u044E \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 - \u0442\u0430\u043A \u0432\u0456\u043D \u043F\u0440\u0430\u0446\u044E\u0454 \u043D\u0430\u0439\u043A\u0440\u0430\u0449\u0435.", + "pwa.ok": "\u0413\u0430\u0440\u0430\u0437\u0434", + "step.open": "\u041A\u0440\u043E\u043A 1 \xB7 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043A\u0430\u043D\u0430\u043B", + "step.exchange": "\u041A\u0440\u043E\u043A 2 \xB7 \u043E\u0431\u043C\u0456\u043D", + "step.verification": "\u041A\u0440\u043E\u043A 3 \xB7 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430", + "action.create": "\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438", + "action.join": "\u041F\u0440\u0438\u0454\u0434\u043D\u0430\u0442\u0438\u0441\u044F", + "action.back": "\u041D\u0430\u0437\u0430\u0434", + "action.copy": "\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438", + "action.copied": "\u0421\u043A\u043E\u043F\u0456\u0439\u043E\u0432\u0430\u043D\u043E", + "action.scan": "\u0421\u043A\u0430\u043D\u0443\u0432\u0430\u0442\u0438", + "action.downloadDesktop": "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A", + "action.advancedSettings": "\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F", + "cred.offerTag": "\u043F\u0440\u043E\u043F\u043E\u0437\u0438\u0446\u0456\u044F \xB7 \u0430\u0431\u043E \u0441\u043A\u043E\u043F\u0456\u044E\u0439\u0442\u0435 \u0442\u0435\u043A\u0441\u0442", + "cred.answerTag": "\u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C \xB7 \u0430\u0431\u043E \u0441\u043A\u043E\u043F\u0456\u044E\u0439\u0442\u0435 \u0442\u0435\u043A\u0441\u0442", + "cred.reveal": "\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 - \u0442\u0440\u0438\u043C\u0430\u0439\u0442\u0435 \u0446\u0435\u0439 \u043A\u043E\u0434 \u0443 \u0442\u0430\u0454\u043C\u043D\u0438\u0446\u0456", + "qr.title": "\u0421\u043A\u0430\u043D\u0443\u0432\u0430\u0442\u0438 QR-\u043A\u043E\u0434", + "qr.subtitle": "\u041D\u0430\u0432\u0435\u0434\u0456\u0442\u044C \u043A\u0430\u043C\u0435\u0440\u0443 \u043D\u0430 \u0457\u0445\u043D\u0456\u0439 QR-\u043A\u043E\u0434", + "qr.scanning": "\u0421\u043A\u0430\u043D\u0443\u0432\u0430\u043D\u043D\u044F\u2026", + "qr.hint": "\u0422\u0440\u0438\u043C\u0430\u0439\u0442\u0435 \u0440\u0456\u0432\u043D\u043E, \u0434\u043E\u043A\u0438 \u043D\u0435 \u0437\u0447\u0438\u0442\u0430\u044E\u0442\u044C\u0441\u044F \u0432\u0441\u0456 \u0447\u0430\u0441\u0442\u0438\u043D\u0438. \u041A\u0430\u043C\u0435\u0440\u0430 \u043F\u0440\u0430\u0446\u044E\u0454 \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E - \u043D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u043D\u0430\u0434\u0441\u0438\u043B\u0430\u0454\u0442\u044C\u0441\u044F.", + "mesh.you": "\u0432\u0438", + "mesh.peer": "\u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \xB7 \u0441\u0435\u0430\u043D\u0441 1", + "mesh.joined2": "\u043E\u043A\u0441\u0430\u043D\u0430 \u043F\u0440\u0438\u0454\u0434\u043D\u0430\u043B\u0430\u0441\u044F \xB7 +2", + "mesh.joined3": "\u0442\u0430\u0440\u0430\u0441 \u043F\u0440\u0438\u0454\u0434\u043D\u0430\u0432\u0441\u044F \xB7 +3", + "ice.title": "\u041C\u0435\u0440\u0435\u0436\u0435\u0432\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F", + "ice.subtitle": "\u041D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0443\u0454\u0442\u044C\u0441\u044F \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E - \u043D\u0456\u043A\u043E\u043B\u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0454\u0442\u044C\u0441\u044F \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0443", + "ice.intro": "\u0422\u0438\u043F\u043E\u0432\u043E SecureBit \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 \u043F\u0443\u0431\u043B\u0456\u0447\u043D\u0456 STUN-\u0441\u0435\u0440\u0432\u0435\u0440\u0438, \u0449\u043E\u0431 \u0443\u0437\u0433\u043E\u0434\u0438\u0442\u0438 \u043F\u0440\u044F\u043C\u0435 \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F. \u042F\u043A\u0449\u043E \u0442\u0440\u0438\u043C\u0430\u0454\u0442\u0435 \u0432\u043B\u0430\u0441\u043D\u0456, \u0432\u043A\u0430\u0436\u0456\u0442\u044C \u0441\u0432\u043E\u0457 STUN/TURN.", + "ice.publicTitle": "\u041F\u0443\u0431\u043B\u0456\u0447\u043D\u0456 \u0441\u0435\u0440\u0432\u0435\u0440\u0438 (\u0442\u0438\u043F\u043E\u0432\u043E)", + "ice.publicDesc": "\u0411\u0435\u0437 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F. \u041F\u0456\u0434\u0445\u043E\u0434\u0438\u0442\u044C \u0431\u0456\u043B\u044C\u0448\u043E\u0441\u0442\u0456.", + "ice.customTitle": "\u0412\u043B\u0430\u0441\u043D\u0456 STUN/TURN-\u0441\u0435\u0440\u0432\u0435\u0440\u0438", + "ice.customDesc": "\u0414\u043E {max} \u0441\u0435\u0440\u0432\u0435\u0440\u0456\u0432.", + "ice.turnNote": "TURN-relay \u0431\u0430\u0447\u0438\u0442\u044C IP \u043E\u0431\u043E\u0445 \u0441\u0442\u043E\u0440\u0456\u043D \u0456 \u0440\u0438\u0442\u043C \u0442\u0440\u0430\u0444\u0456\u043A\u0443 - \u0430\u043B\u0435 \u043D\u0456\u043A\u043E\u043B\u0438 \u0432\u043C\u0456\u0441\u0442 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C, \u044F\u043A\u0438\u0439 \u043B\u0438\u0448\u0430\u0454\u0442\u044C\u0441\u044F \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u043C \u043D\u0430\u0441\u043A\u0440\u0456\u0437\u043D\u043E. \u041A\u0440\u0430\u0449\u0435 ", + "ice.turnNoteTls": " (TLS).", + "ice.test": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0438\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0438", + "ice.testing": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430\u2026", + "ice.relayTitle": "\u0420\u0435\u0436\u0438\u043C \u043B\u0438\u0448\u0435 \u0447\u0435\u0440\u0435\u0437 relay", + "ice.relayBadge": "\u041C\u0410\u041A\u0421\u0418\u041C\u0423\u041C \u041F\u0420\u0418\u0412\u0410\u0422\u041D\u041E\u0421\u0422\u0406", + "ice.relayDesc": "\u041F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0454 \u0432\u0435\u0441\u044C \u0442\u0440\u0430\u0444\u0456\u043A \u0447\u0435\u0440\u0435\u0437 TURN, \u0442\u043E\u0436 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u043D\u0456\u043A\u043E\u043B\u0438 \u043D\u0435 \u043F\u043E\u0431\u0430\u0447\u0438\u0442\u044C \u0432\u0430\u0448\u043E\u0457 IP. \u041F\u043E\u0442\u0440\u0456\u0431\u0435\u043D TURN-\u0441\u0435\u0440\u0432\u0435\u0440.", + "ice.relayWarning": "\u0420\u0435\u0436\u0438\u043C \u043B\u0438\u0448\u0435 \u0447\u0435\u0440\u0435\u0437 relay \u0443\u0432\u0456\u043C\u043A\u043D\u0435\u043D\u043E, \u0430\u043B\u0435 TURN-\u0441\u0435\u0440\u0432\u0435\u0440 \u043D\u0435 \u0432\u043A\u0430\u0437\u0430\u043D\u043E. \u0417'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u043D\u0435 \u0437\u043C\u043E\u0436\u0435 \u043F\u043E\u0447\u0430\u0442\u0438\u0441\u044F.", + "ice.persist": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043D\u0430 \u0446\u044C\u043E\u043C\u0443 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u0457", + "ice.persistDesc": "\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044C\u0441\u044F \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E \u0432 \u0446\u044C\u043E\u043C\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456. \u041B\u0438\u0448\u0456\u0442\u044C \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u0438\u043C, \u0449\u043E\u0431 \u0434\u0456\u044F\u043B\u043E \u043B\u0438\u0448\u0435 \u0432 \u0446\u044C\u043E\u043C\u0443 \u0441\u0435\u0430\u043D\u0441\u0456.", + "ice.forget": "\u0417\u0430\u0431\u0443\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u0435", + "ice.cancel": "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438", + "ice.apply": "\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u0432\u0430\u0442\u0438", + "ice.errUnavailable": "WebRTC \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 \u0443 \u0446\u044C\u043E\u043C\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456", + "ice.errInvalid": "\u0425\u0438\u0431\u043D\u0430 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F \u0441\u0435\u0440\u0432\u0435\u0440\u0430", + "update.title": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0435 \u043E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F", + "update.desc": "\u0412\u0438\u044F\u0432\u043B\u0435\u043D\u043E \u043D\u043E\u0432\u0456\u0448\u0443 \u0432\u0435\u0440\u0441\u0456\u044E SecureBit.", + "update.currentVersion": "\u041F\u043E\u0442\u043E\u0447\u043D\u0430 \u0432\u0435\u0440\u0441\u0456\u044F", + "update.newVersion": "\u041D\u043E\u0432\u0430 \u0432\u0435\u0440\u0441\u0456\u044F", + "update.now": "\u041E\u043D\u043E\u0432\u0438\u0442\u0438 \u0437\u0430\u0440\u0430\u0437", + "update.later": "\u041F\u0456\u0437\u043D\u0456\u0448\u0435", + "update.unknown": "\u043D/\u0434", + "update.stepSaving": "\u0417\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u0434\u0430\u043D\u0438\u0445\u2026", + "update.stepSwCaches": "\u041E\u0447\u0438\u0449\u0435\u043D\u043D\u044F \u043A\u0435\u0448\u0456\u0432 Service Worker\u2026", + "update.stepSwUnregister": "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u043D\u043D\u044F \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u0457 Service Worker\u2026", + "update.stepBrowserCache": "\u041E\u0447\u0438\u0449\u0435\u043D\u043D\u044F \u043A\u0435\u0448\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u2026", + "update.stepVersion": "\u041E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0432\u0435\u0440\u0441\u0456\u0457\u2026", + "update.stepReload": "\u041F\u0435\u0440\u0435\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043A\u0443\u2026", + "update.error": "\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F. \u041F\u0435\u0440\u0435\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0442\u0435 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0432\u0440\u0443\u0447\u043D\u0443 (Ctrl+F5 \u0430\u0431\u043E Cmd+Shift+R)", + "update.confirmSkip": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u043D\u043E\u0432\u0430 \u0432\u0435\u0440\u0441\u0456\u044F. \u041E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u043E\u0432\u0430\u043D\u0435 \u0437\u0430\u0434\u043B\u044F \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u0442\u0430 \u0441\u0442\u0430\u0431\u0456\u043B\u044C\u043D\u043E\u0441\u0442\u0456. \u041F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438 \u0431\u0435\u0437 \u043E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F?", + "offline.backOnline": "\u0417\u043D\u043E\u0432\u0443 \u043E\u043D\u043B\u0430\u0439\u043D", + "offline.mode": "\u0420\u0435\u0436\u0438\u043C \u043E\u0444\u043B\u0430\u0439\u043D", + "offline.dismiss": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438", + "offline.lostTitle": "\u0417'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0432\u0442\u0440\u0430\u0447\u0435\u043D\u043E", + "offline.lostDesc": "SecureBit \u043F\u0440\u0430\u0446\u044E\u0454 \u043E\u0444\u043B\u0430\u0439\u043D. \u0414\u0435\u0449\u043E \u043E\u0431\u043C\u0435\u0436\u0435\u043D\u043E, \u0430\u043B\u0435 \u0432\u0430\u0448\u0456 \u0434\u0430\u043D\u0456 \u0432 \u0431\u0435\u0437\u043F\u0435\u0446\u0456.", + "offline.point1": "\u0412\u0430\u0448 \u0441\u0435\u0430\u043D\u0441 \u0456 \u043A\u043B\u044E\u0447\u0456 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043E", + "offline.point2": "\u0416\u043E\u0434\u043D\u0438\u0445 \u0434\u0430\u043D\u0438\u0445 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445", + "offline.point3": "\u041F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0439 \u0444\u0430\u0439\u043B\u0438 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0456\u0437\u0443\u044E\u0442\u044C\u0441\u044F \u043F\u0456\u0441\u043B\u044F \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u0432'\u044F\u0437\u043A\u0443", + "offline.continue": "\u041F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438 \u043E\u0444\u043B\u0430\u0439\u043D", + "offline.restoredTitle": "\u041A\u043E\u043B\u0438 \u0437\u0432'\u044F\u0437\u043E\u043A \u0432\u0456\u0434\u043D\u043E\u0432\u0438\u0442\u044C\u0441\u044F", + "offline.restoredDesc": "\u041E\u0431\u0440\u0438\u0432 \u0437\u0432'\u044F\u0437\u043A\u0443 \u043D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u043A\u043E\u0448\u0442\u0443\u0454. SecureBit \u0441\u043A\u043B\u0430\u0434\u0430\u0454 \u0432\u0441\u0435 \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E \u0432 \u0447\u0435\u0440\u0433\u0443 \u0439 \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u044E\u0454 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0439 \u0441\u0435\u0430\u043D\u0441, \u0449\u043E\u0439\u043D\u043E \u0432\u0438 \u0437\u043D\u043E\u0432\u0443 \u043E\u043D\u043B\u0430\u0439\u043D.", + "offline.r1Title": "\u0412\u0430\u0448\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0434\u0456\u0439\u0434\u0443\u0442\u044C", + "offline.r1Desc": "\u0423\u0441\u0435, \u0449\u043E \u0432\u0438 \u043D\u0430\u043F\u0438\u0441\u0430\u043B\u0438 \u043E\u0444\u043B\u0430\u0439\u043D, \u043D\u0430\u0434\u0441\u0438\u043B\u0430\u0454\u0442\u044C\u0441\u044F \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0443 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E.", + "offline.r2Title": "\u0424\u0430\u0439\u043B\u0438 \u0434\u043E\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0430\u0442\u044C\u0441\u044F", + "offline.r2Desc": "\u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043D\u043D\u044F \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u044C\u0441\u044F \u0437 \u043C\u0456\u0441\u0446\u044F \u0437\u0443\u043F\u0438\u043D\u043A\u0438 - \u043D\u0430\u0434\u0441\u0438\u043B\u0430\u0442\u0438 \u0437\u0430\u043D\u043E\u0432\u043E \u043D\u0435 \u0442\u0440\u0435\u0431\u0430.", + "offline.r3Title": "\u0407\u0445\u043D\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0439 \u0444\u0430\u0439\u043B\u0438 \u043D\u0430\u0434\u0456\u0439\u0434\u0443\u0442\u044C", + "offline.r3Desc": "\u0423\u0441\u0435, \u0449\u043E \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0432 \u043F\u0456\u0434 \u0447\u0430\u0441 \u043F\u0435\u0440\u0435\u0440\u0432\u0438, \u043D\u0430\u0434\u0456\u0439\u0434\u0435 \u0432\u0430\u043C \u043F\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0443.", + "offline.r4Title": "\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0432\u0442\u0440\u0430\u0447\u0430\u0454\u0442\u044C\u0441\u044F", + "offline.r4Desc": "\u041F\u0456\u0441\u043B\u044F \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u0432'\u044F\u0437\u043A\u0443 \u0440\u043E\u0437\u0440\u0438\u0432\u0443 \u043D\u0435 \u043B\u0438\u0448\u0430\u0454\u0442\u044C\u0441\u044F - \u0440\u043E\u0437\u043C\u043E\u0432\u0430 \u0442\u0440\u0438\u0432\u0430\u0454 \u0440\u0456\u0432\u043D\u043E \u0437 \u0442\u043E\u0433\u043E \u043C\u0456\u0441\u0446\u044F, \u0434\u0435 \u0441\u043F\u0438\u043D\u0438\u043B\u0430\u0441\u044F.", + "offline.gotIt": "\u0417\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u043E", + "qr.showTitle": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 QR-\u043A\u043E\u0434", + "qr.showSubtitle": "\u041D\u0430 \u0432\u0435\u0441\u044C \u0435\u043A\u0440\u0430\u043D \xB7 \u043D\u0435\u0445\u0430\u0439 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u0432\u0456\u0434\u0441\u043A\u0430\u043D\u0443\u0454", + "qr.showSubtitleFrames": "\u041D\u0430 \u0432\u0435\u0441\u044C \u0435\u043A\u0440\u0430\u043D \xB7 \u043D\u0435\u0445\u0430\u0439 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u0432\u0456\u0434\u0441\u043A\u0430\u043D\u0443\u0454 \u0432\u0441\u0456 {frames} \u043A\u0430\u0434\u0440\u0456\u0432", + "notify.enabledBody": "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u0443\u0432\u0456\u043C\u043A\u043D\u0435\u043D\u043E. \u0412\u0438 \u043E\u0442\u0440\u0438\u043C\u0443\u0432\u0430\u0442\u0438\u043C\u0435\u0442\u0435 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F \u043F\u0440\u043E \u043D\u043E\u0432\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F.", + "notify.workingBody": "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u043F\u0440\u0430\u0446\u044E\u044E\u0442\u044C. \u0412\u0438 \u043E\u0442\u0440\u0438\u043C\u0443\u0432\u0430\u0442\u0438\u043C\u0435\u0442\u0435 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F \u043F\u0440\u043E \u043D\u043E\u0432\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F.", + "pw.label": "\u041F\u043E\u043B\u0435 \u043F\u0430\u0440\u043E\u043B\u044F", + "pw.placeholder": "\u0412\u0432\u0435\u0434\u0456\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C\u2026", + "pw.decrypt": "\u0420\u043E\u0437\u0448\u0438\u0444\u0440\u0443\u0432\u0430\u0442\u0438", + "pw.cancel": "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438", + "file.title": "\u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432", + "file.drop": "\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0444\u0430\u0439\u043B\u0438 \u0441\u044E\u0434\u0438", + "file.dropHint": "\u0428\u0438\u0444\u0440\u0443\u044E\u0442\u044C\u0441\u044F \u043D\u0430\u0441\u043A\u0440\u0456\u0437\u043D\u043E \u043F\u0435\u0440\u0435\u0434 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043D\u043D\u044F\u043C \xB7 \u0434\u043E 100 \u041C\u0411", + "file.browse": "\u041E\u0433\u043B\u044F\u0434 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u044E", + "file.incoming": "\u0412\u0445\u0456\u0434\u043D\u0438\u0439 \u0437\u0430\u043F\u0438\u0442 \u043D\u0430 \u0444\u0430\u0439\u043B", + "file.accept": "\u041F\u0440\u0438\u0439\u043D\u044F\u0442\u0438", + "file.reject": "\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438", + "file.download": "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438", + "file.notReady": "\u0417'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0449\u0435 \u043D\u0435 \u0433\u043E\u0442\u043E\u0432\u0435", + "file.tooLarge": "\u0424\u0430\u0439\u043B \u0437\u0430\u0432\u0435\u043B\u0438\u043A\u0438\u0439", + "file.typeNotAllowed": "\u0422\u0438\u043F \u0444\u0430\u0439\u043B\u0443 \u043D\u0435 \u0434\u043E\u0437\u0432\u043E\u043B\u0435\u043D\u043E", + "file.maxConcurrent": "\u0414\u043E\u0441\u044F\u0433\u043D\u0443\u0442\u043E \u043C\u0435\u0436\u0443 \u043E\u0434\u043D\u043E\u0447\u0430\u0441\u043D\u0438\u0445 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043D\u044C", + "file.gone": "\u0426\u0435\u0439 \u0444\u0430\u0439\u043B \u0431\u0456\u043B\u044C\u0448\u0435 \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 \u0434\u043B\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F.", + "call.incoming": "\u0412\u0445\u0456\u0434\u043D\u0438\u0439 \u0434\u0437\u0432\u0456\u043D\u043E\u043A", + "call.incomingVideo": "\u0412\u0445\u0456\u0434\u043D\u0438\u0439 \u0432\u0456\u0434\u0435\u043E\u0434\u0437\u0432\u0456\u043D\u043E\u043A", + "call.encrypted": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0439 \u0434\u0437\u0432\u0456\u043D\u043E\u043A", + "call.encryptedShort": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E", + "call.peer": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u0439 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A", + "call.connecting": "\u0417'\u0454\u0434\u043D\u0430\u043D\u043D\u044F\u2026", + "call.ringing": "\u0414\u0437\u0432\u0456\u043D\u043E\u043A\u2026", + "call.accept": "\u041F\u0440\u0438\u0439\u043D\u044F\u0442\u0438", + "call.decline": "\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438", + "call.end": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0438 \u0434\u0437\u0432\u0456\u043D\u043E\u043A", + "call.camera": "\u041A\u0430\u043C\u0435\u0440\u0430", + "call.cameraOff": "\u041A\u0430\u043C\u0435\u0440\u0443 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u043E", + "call.peerCameraOff": "\u041A\u0430\u043C\u0435\u0440\u0443 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0430 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u043E", + "call.flipCamera": "\u041F\u0435\u0440\u0435\u043C\u043A\u043D\u0443\u0442\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", + "call.addVideo": "\u0414\u043E\u0434\u0430\u0442\u0438 \u0432\u0456\u0434\u0435\u043E", + "call.video": "\u0412\u0456\u0434\u0435\u043E", + "call.muted": "\u0411\u0435\u0437 \u0437\u0432\u0443\u043A\u0443", + "call.expand": "\u0420\u043E\u0437\u0433\u043E\u0440\u043D\u0443\u0442\u0438", + "call.minimize": "\u0417\u0433\u043E\u0440\u043D\u0443\u0442\u0438", + "call.quality": "\u042F\u043A\u0456\u0441\u0442\u044C \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F", + "call.qualityExcellent": "\u0412\u0456\u0434\u043C\u0456\u043D\u043D\u0430", + "call.videoPrefix": "\u0412\u0456\u0434\u0435\u043E \xB7 ", + "call.voicePrefix": "\u0413\u043E\u043B\u043E\u0441 \xB7 ", + "group.new": "\u041D\u043E\u0432\u0430 \u0433\u0440\u0443\u043F\u0430", + "group.create": "\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u0433\u0440\u0443\u043F\u0443", + "group.join": "\u041F\u0440\u0438\u0454\u0434\u043D\u0430\u0442\u0438\u0441\u044F \u0434\u043E \u0433\u0440\u0443\u043F\u0438", + "group.name": "\u041D\u0430\u0437\u0432\u0430 \u0433\u0440\u0443\u043F\u0438", + "group.nameTooLong": "\u041D\u0430\u0437\u0432\u0430 \u0433\u0440\u0443\u043F\u0438 \u0437\u0430\u0434\u043E\u0432\u0433\u0430.", + "group.capacity": "\u0414\u043E {max} \u043E\u0441\u0456\u0431, \u043D\u0430\u043F\u0440\u044F\u043C\u0443 \u043C\u0456\u0436 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u044F\u043C\u0438. \u0423\u0441\u0456 \u0437\u0432\u0456\u0440\u044F\u0442\u044C \u043E\u0434\u0438\u043D \u043A\u043E\u0434 \u0431\u0435\u0437\u043F\u0435\u043A\u0438, \u043F\u0435\u0440\u0448 \u043D\u0456\u0436 \u0433\u0440\u0443\u043F\u0430 \u0432\u0456\u0434\u043A\u0440\u0438\u0454\u0442\u044C\u0441\u044F.", + "group.invite": "\u0417\u0430\u043F\u0440\u043E\u0441\u0438\u0442\u0438", + "group.inviteMore": "\u0417\u0430\u043F\u0440\u043E\u0441\u0438\u0442\u0438 \u0449\u0435 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432", + "group.invitePeople": "\u0417\u0430\u043F\u0440\u043E\u0441\u0438\u0442\u0438 {count} \u043E\u0441\u0456\u0431", + "group.invitation": "\u0417\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0434\u043E \u0433\u0440\u0443\u043F\u0438", + "group.addMembers": "\u0414\u043E\u0434\u0430\u0442\u0438 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432", + "group.roomFor": "\u0404 \u043C\u0456\u0441\u0446\u0435 \u0449\u0435 \u0434\u043B\u044F {remaining}. \u041F\u0456\u0441\u043B\u044F \u043F\u0440\u0438\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0432\u0441\u0456 \u0437\u0432\u0456\u0440\u044F\u0442\u044C \u043D\u043E\u0432\u0438\u0439 \u043A\u043E\u0434 \u0433\u0440\u0443\u043F\u0438.", + "group.membersCount": "{count} \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432", + "group.member": "\u0423\u0447\u0430\u0441\u043D\u0438\u043A", + "group.members": "\u0423\u0447\u0430\u0441\u043D\u0438\u043A\u0438", + "group.remove": "\u0412\u0438\u043B\u0443\u0447\u0438\u0442\u0438 {name}", + "group.message": "\u041D\u0430\u043F\u0438\u0441\u0430\u0442\u0438 \u0432 \xAB{name}\xBB", + "group.leave": "\u0412\u0438\u0439\u0442\u0438", + "group.leaveThis": "\u0412\u0438\u0439\u0442\u0438 \u0437 \u0446\u0456\u0454\u0457 \u0433\u0440\u0443\u043F\u0438", + "group.cancel": "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438 \u0433\u0440\u0443\u043F\u0443", + "group.close": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438", + "group.cancelBtn": "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438", + "group.decline": "\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438", + "group.working": "\u0412\u0438\u043A\u043E\u043D\u0443\u0454\u0442\u044C\u0441\u044F\u2026", + "group.sasTitle": "\u041A\u043E\u0434 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u0433\u0440\u0443\u043F\u0438", + "group.sasEveryone": "\u0426\u0435\u0439 \u043A\u043E\u0434 \u0431\u0430\u0447\u0430\u0442\u044C \u0443\u0441\u0456", + "group.sasCompare": "\u0417\u0432\u0456\u0440\u0442\u0435 \u043A\u043E\u0434 \u0433\u0440\u0443\u043F\u0438 \u0437 \u043A\u043E\u0436\u043D\u0438\u043C \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u043E\u043C, \u0449\u043E\u0431 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0433\u0440\u0443\u043F\u0443.", + "group.sasReadAloud": "\u041F\u0440\u043E\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0446\u0456 \u0446\u0438\u0444\u0440\u0438 \u0432\u0433\u043E\u043B\u043E\u0441 \u0434\u043B\u044F ", + "group.sasWarning": "\u042F\u043A\u0449\u043E \u0431\u043E\u0434\u0430\u0439 \u043E\u0434\u0438\u043D \u0443\u0447\u0430\u0441\u043D\u0438\u043A \u0447\u0438\u0442\u0430\u0454 \u0456\u043D\u0448\u0438\u0439 \u043A\u043E\u0434, \u043C\u0456\u0436 \u0432\u0430\u043C\u0438 \u0445\u0442\u043E\u0441\u044C \u0454. \u0421\u043A\u0430\u0441\u0443\u0439\u0442\u0435 \u0433\u0440\u0443\u043F\u0443 - \u043D\u0435 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0443\u0439\u0442\u0435.", + "group.confirmFirst": "\u0421\u043F\u0435\u0440\u0448\u0443 \u043F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0456\u0442\u044C \u043A\u043E\u0434 \u0433\u0440\u0443\u043F\u0438", + "group.codeSuffix": " \xB7 \u043A\u043E\u0434 {code}", + "group.exchangingNonces": "\u041E\u0431\u043C\u0456\u043D \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u0438\u043C\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\u043C\u0438\u2026", + "group.waitingCommit": "\u041E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u044F \u0437\u043E\u0431\u043E\u0432'\u044F\u0437\u0430\u043D\u044C \u0432\u0456\u0434 \u0443\u0441\u0456\u0445 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432\u2026", + "group.waitingJoin": "\u041E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u044F \u043F\u0440\u0438\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0456\u043D\u0448\u0438\u0445 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432\u2026", + "group.emptyChat": "\u0422\u0443\u0442 \u043F\u043E\u043A\u0438 \u043D\u0456\u0447\u043E\u0433\u043E. \u041F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u043F\u0456\u0434\u043F\u0438\u0441\u0430\u043D\u0456 \u0432\u0456\u0434\u043F\u0440\u0430\u0432\u043D\u0438\u043A\u043E\u043C \u0456 \u0439\u0434\u0443\u0442\u044C \u0432\u043B\u0430\u0441\u043D\u0438\u043C \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u043C \u043A\u0430\u043D\u0430\u043B\u043E\u043C \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430.", + "group.noVerified": "\u0429\u0435 \u043D\u0435\u043C\u0430\u0454 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0438\u0445 \u0447\u0430\u0442\u0456\u0432. \u0421\u043F\u0435\u0440\u0448\u0443 \u0432\u0456\u0434\u043A\u0440\u0438\u0439\u0442\u0435 \u043E\u0441\u043E\u0431\u0438\u0441\u0442\u0438\u0439 \u0447\u0430\u0442 \u0456 \u0437\u0432\u0456\u0440\u0442\u0435 \u0439\u043E\u0433\u043E \u043A\u043E\u0434 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 - \u0433\u0440\u0443\u043F\u0430 \u0431\u0443\u0434\u0443\u0454\u0442\u044C\u0441\u044F \u0437 \u0443\u0436\u0435 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0438\u0445 \u0437'\u0454\u0434\u043D\u0430\u043D\u044C.", + "group.noMoreToAdd": "\u0406\u043D\u0448\u0438\u0445 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0438\u0445 \u0447\u0430\u0442\u0456\u0432 \u043D\u0435\u043C\u0430\u0454. \u0412\u0456\u0434\u043A\u0440\u0438\u0439\u0442\u0435 \u043E\u0441\u043E\u0431\u0438\u0441\u0442\u0438\u0439 \u0447\u0430\u0442 \u0456 \u0441\u043F\u0435\u0440\u0448\u0443 \u0437\u0432\u0456\u0440\u0442\u0435 \u0439\u043E\u0433\u043E \u043A\u043E\u0434 \u0431\u0435\u0437\u043F\u0435\u043A\u0438.", + "group.directLink": "\u041F\u0440\u044F\u043C\u0435 \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u043C\u0456\u0436 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u044F\u043C\u0438", + "group.noDirectLink": "\u041F\u0440\u044F\u043C\u043E\u0433\u043E \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0449\u0435 \u043D\u0435\u043C\u0430\u0454 - \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u043F\u0435\u0440\u0435\u0434\u0430\u0454 \u0456\u043D\u0448\u0438\u0439 \u0443\u0447\u0430\u0441\u043D\u0438\u043A, \u043F\u043E\u043A\u0438 \u0432\u043E\u043D\u043E \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u044E\u0454\u0442\u044C\u0441\u044F", + "group.relayNote": "\u0417 \u0434\u0435\u044F\u043A\u0438\u043C\u0438 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430\u043C\u0438 \u043F\u0440\u044F\u043C\u043E\u0433\u043E \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0449\u0435 \u043D\u0435\u043C\u0430\u0454. \u0407\u0445\u043D\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0439\u0434\u0443\u0442\u044C \u0447\u0435\u0440\u0435\u0437 \u0456\u043D\u0448\u043E\u0433\u043E \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430, \u044F\u043A\u0438\u0439 \u0431\u0430\u0447\u0438\u0442\u044C, \u0449\u043E \u0432\u0438 \u0441\u043F\u0456\u043B\u043A\u0443\u0454\u0442\u0435\u0441\u044C, \u0430\u043B\u0435 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0430\u043D\u0456 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u0438, \u0430\u043D\u0456 \u0437\u043C\u0456\u043D\u0438\u0442\u0438 \u0441\u043A\u0430\u0437\u0430\u043D\u0435. \u0413\u0440\u0443\u043F\u0430 \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0443\u0454 \u0437'\u0454\u0434\u043D\u0443\u0432\u0430\u0442\u0438 \u0457\u0445 \u043D\u0430\u043F\u0440\u044F\u043C\u0443.", + "group.relayOnlyOff": "\u0420\u0435\u0436\u0438\u043C \u043B\u0438\u0448\u0435 \u0447\u0435\u0440\u0435\u0437 relay \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u043E, \u0442\u043E\u0436 \u043A\u043E\u0436\u0435\u043D \u0443\u0447\u0430\u0441\u043D\u0438\u043A \u0437'\u0454\u0434\u043D\u0443\u0454\u0442\u044C\u0441\u044F \u0437 \u0432\u0430\u043C\u0438 \u043D\u0430\u043F\u0440\u044F\u043C\u0443 \u0439 \u0434\u0456\u0437\u043D\u0430\u0454\u0442\u044C\u0441\u044F \u0432\u0430\u0448\u0443 IP-\u0430\u0434\u0440\u0435\u0441\u0443 - \u0437\u043E\u043A\u0440\u0435\u043C\u0430 \u0442\u0456, \u043A\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0438\u0432 \u0445\u0442\u043E\u0441\u044C \u0456\u043D\u0448\u0438\u0439. \u0423\u0432\u0456\u043C\u043A\u043D\u0456\u0442\u044C \u0439\u043E\u0433\u043E \u0432 \u043C\u0435\u0440\u0435\u0436\u0435\u0432\u0438\u0445 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F\u0445, \u044F\u043A\u0449\u043E \u0446\u0435 \u0432\u0430\u0436\u043B\u0438\u0432\u043E.", + "group.memberOffline": "{name} \u043E\u0444\u043B\u0430\u0439\u043D \u0456 \u043D\u0435 \u043E\u0442\u0440\u0438\u043C\u0430\u0454 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C. \u0423\u0447\u0430\u0441\u043D\u0438\u0446\u0442\u0432\u043E \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044C\u0441\u044F - \u0432\u0438\u043B\u0443\u0447\u0435\u043D\u043D\u044F \u043F\u0435\u0440\u0435\u0433\u0430\u043D\u044F\u0454 \u043A\u043B\u044E\u0447\u0456 \u0433\u0440\u0443\u043F\u0438.", + "group.joinNote": "\u0406\u043D\u0448\u0456 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0438 \u0434\u0456\u0437\u043D\u0430\u044E\u0442\u044C\u0441\u044F, \u0449\u043E \u0432\u0438 \u0432 \u0446\u0456\u0439 \u0433\u0440\u0443\u043F\u0456. \u0406\u0441\u0442\u043E\u0440\u0456\u0457 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C \u043D\u0435\u043C\u0430\u0454 - \u0433\u0440\u0443\u043F\u0430 \u043F\u043E\u0447\u0438\u043D\u0430\u0454\u0442\u044C\u0441\u044F \u043F\u043E\u0440\u043E\u0436\u043D\u044C\u043E\u044E.", + "group.inviteSentNote": "\u0413\u0440\u0443\u043F\u0430 \u043F\u0440\u0430\u0446\u044E\u0454 \u0434\u0430\u043B\u0456, \u0434\u043E\u043A\u0438 \u0432\u043E\u043D\u0438 \u043D\u0435 \u043F\u0440\u0438\u0439\u043C\u0443\u0442\u044C. \u0406\u0441\u0442\u043E\u0440\u0456\u0457 \u0434\u043B\u044F \u043D\u0438\u0445 \u043D\u0435\u043C\u0430\u0454 - \u0432\u043E\u043D\u0438 \u043F\u043E\u0431\u0430\u0447\u0430\u0442\u044C \u043B\u0438\u0448\u0435 \u0442\u0435, \u0449\u043E \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u043D\u043E \u0432\u0456\u0434\u0442\u0435\u043F\u0435\u0440.", + "group.errNotCreated": "\u0413\u0440\u0443\u043F\u0443 \u043D\u0435 \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043E", + "group.errNobodyAccepted": "\u041D\u0456\u0445\u0442\u043E \u043D\u0435 \u043F\u0440\u0438\u0439\u043D\u044F\u0432 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0432\u0447\u0430\u0441\u043D\u043E.", + "group.errNothingSent": "\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u043D\u043E \u0439 \u043D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E. \u0417\u0430\u043A\u0440\u0438\u0439\u0442\u0435 \u0446\u0435 \u0439 \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0437\u043D\u043E\u0432\u0443, \u043A\u043E\u043B\u0438 \u0432\u0441\u0456 \u043F\u0456\u0434'\u0454\u0434\u043D\u0430\u044E\u0442\u044C\u0441\u044F.", + "group.errNotFormed": "\u0426\u044E \u0433\u0440\u0443\u043F\u0443 \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0441\u0444\u043E\u0440\u043C\u0443\u0432\u0430\u0442\u0438.", + "group.errFull": "\u0426\u044F \u0433\u0440\u0443\u043F\u0430 \u0437\u0430\u043F\u043E\u0432\u043D\u0435\u043D\u0430.", + "group.errInviteFailed": "\u0417\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 - \u0442\u043E\u0439 \u0447\u0430\u0442 \u043D\u0435 \u0437'\u0454\u0434\u043D\u0430\u043D\u043E.", + "group.errNoMemberList": "\u0412\u043B\u0430\u0441\u043D\u0438\u043A \u0433\u0440\u0443\u043F\u0438 \u0442\u0430\u043A \u0456 \u043D\u0435 \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0432 \u0441\u043F\u0438\u0441\u043E\u043A \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432.", + "group.errUnsignedList": "\u0421\u043F\u0438\u0441\u043E\u043A \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432 \u043D\u0435 \u043F\u0456\u0434\u043F\u0438\u0441\u0430\u043D\u043E \u0432\u043B\u0430\u0441\u043D\u0438\u043A\u043E\u043C \u0433\u0440\u0443\u043F\u0438. \u041D\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044E\u0439\u0442\u0435 - \u0441\u043A\u0430\u0436\u0456\u0442\u044C \u0457\u043C.", + "group.errNotOwner": "\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u0441\u043A\u043B\u0430\u0434 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432 \u043D\u0430\u043C\u0430\u0433\u0430\u0432\u0441\u044F \u043D\u0435 \u0432\u043B\u0430\u0441\u043D\u0438\u043A \u0433\u0440\u0443\u043F\u0438.", + "hdr.tagline": "\u041D\u0430\u0441\u043A\u0440\u0456\u0437\u043D\u0435 \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F", + "hdr.netSettings": "\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u0456 \u043C\u0435\u0440\u0435\u0436\u0435\u0432\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F", + "hdr.netSettingsTitle": "\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u0456 \u043C\u0435\u0440\u0435\u0436\u0435\u0432\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F (STUN/TURN)", + "hdr.disconnect": "\u0412\u0456\u0434'\u0454\u0434\u043D\u0430\u0442\u0438\u0441\u044F", + "status.connected": "\u0417'\u0454\u0434\u043D\u0430\u043D\u043E", + "status.connecting": "\u0417'\u0454\u0434\u043D\u0430\u043D\u043D\u044F\u2026", + "status.notConnected": "\u041D\u0435 \u0437'\u0454\u0434\u043D\u0430\u043D\u043E", + "status.reconnecting": "\u041F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F\u2026", + "status.retrying": "\u041F\u043E\u0432\u0442\u043E\u0440 \u0441\u043F\u0440\u043E\u0431\u0438\u2026", + "status.verifying": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430\u2026", + "status.peerDisconnected": "\u0421\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u0432\u0456\u0434'\u0454\u0434\u043D\u0430\u0432\u0441\u044F", + "sec.replayProtection": "\u0417\u0430\u0445\u0438\u0441\u0442 \u0432\u0456\u0434 \u043F\u043E\u0432\u0442\u043E\u0440\u0456\u0432", + "sec.messageIntegrity": "\u0426\u0456\u043B\u0456\u0441\u043D\u0456\u0441\u0442\u044C \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C (HMAC)", + "sec.forwardSecrecy": "\u0414\u043E\u0441\u043A\u043E\u043D\u0430\u043B\u0430 \u043F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C", + "sec.metadataProtection": "\u0417\u0430\u0445\u0438\u0441\u0442 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u0438\u0445", + "sec.trafficObfuscation": "\u041C\u0430\u0441\u043A\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0440\u0430\u0444\u0456\u043A\u0443", + "sec.realTests": "\u0421\u043F\u0440\u0430\u0432\u0436\u043D\u0456 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0456 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438", + "sec.simulatedData": "\u0417\u043C\u043E\u0434\u0435\u043B\u044C\u043E\u0432\u0430\u043D\u0456 \u0434\u0430\u043D\u0456", + "sec.testPassed": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0443 \u043F\u0440\u043E\u0439\u0434\u0435\u043D\u043E", + "sec.testFailed": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u043D\u0435 \u043F\u0440\u043E\u0439\u0434\u0435\u043D\u0430 \u0430\u0431\u043E \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430", + "sec.verificationDone": "\u0421\u043F\u0440\u0430\u0432\u0436\u043D\u044E \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0443 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E", + "sec.verificationInProgress": "\u0422\u0440\u0438\u0432\u0430\u0454 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0438\u2026", + "sec.verificationWait": "\u0422\u0440\u0438\u0432\u0430\u0454 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0438\u2026\n\u0417\u0430\u0447\u0435\u043A\u0430\u0439\u0442\u0435, \u0434\u043E\u043A\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\u0441\u044F \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0430 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C\u0443 \u0447\u0430\u0441\u0456.", + "sec.verificationUnavailable": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430", + "chat.placeholder": "\u041D\u0430\u043F\u0438\u0448\u0456\u0442\u044C \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0435 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F\u2026", + "chat.send": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F", + "chat.sendFiles": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 \u0444\u0430\u0439\u043B\u0438", + "chat.hideFiles": "\u0421\u0445\u043E\u0432\u0430\u0442\u0438 \u0444\u0430\u0439\u043B\u0438", + "chat.recordVoice": "\u0417\u0430\u043F\u0438\u0441\u0430\u0442\u0438 \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0435 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F", + "chat.sendVoice": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0435 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F", + "chat.discard": "\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438", + "chat.codeBlock": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 \u044F\u043A \u0431\u043B\u043E\u043A \u043A\u043E\u0434\u0443 (\u0440\u043E\u0437\u0448\u0438\u0440\u044E\u0454 \u043F\u043E\u043B\u0435)", + "chat.codeHint": "\u0424\u0440\u0430\u0433\u043C\u0435\u043D\u0442 \u043A\u043E\u0434\u0443 \xB7 \u0444\u043E\u0440\u043C\u0430\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043E \xB7 \u2318\u21B5 \u0449\u043E\u0431 \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438", + "chat.viewOnce": "\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0440\u0430\u0437", + "chat.viewOnceTitle": "\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0440\u0430\u0437 - \u0437\u043D\u0438\u043A\u0430\u0454, \u0449\u043E\u0439\u043D\u043E \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0454", + "chat.viewOncePrefix": "\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0440\u0430\u0437 \xB7 ", + "chat.viewOnceTap": "\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0440\u0430\u0437 \xB7 \u0442\u043E\u0440\u043A\u043D\u0456\u0442\u044C\u0441\u044F, \u0449\u043E\u0431 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u0438", + "chat.viewedOnce": "\u0423\u0436\u0435 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u043E", + "chat.disappearing": "\u0417\u043D\u0438\u043A\u043E\u043C\u0435 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F - \u0432\u0438\u0434\u0430\u043B\u044F\u0454\u0442\u044C\u0441\u044F \u0437 \u043E\u0431\u043E\u0445 \u0431\u043E\u043A\u0456\u0432", + "chat.disappearAfter": "\u0417\u043D\u0438\u043A\u043D\u0435 \u0447\u0435\u0440\u0435\u0437", + "chat.visibleFor": "\u0412\u0438\u0434\u043D\u043E", + "chat.timerPrefix": "\u0422\u0430\u0439\u043C\u0435\u0440 \xB7 ", + "chat.expired": "\u0426\u0435 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0432\u0442\u0440\u0430\u0442\u0438\u043B\u043E \u0447\u0438\u043D\u043D\u0456\u0441\u0442\u044C", + "chat.deleteForEveryone": "\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432 \u0443\u0441\u0456\u0445", + "chat.sending": "\u041D\u0430\u0434\u0441\u0438\u043B\u0430\u043D\u043D\u044F", + "chat.delivered": "\u0414\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E", + "chat.notSent": "\u041D\u0435 \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u043D\u043E", + "chat.notSentReason": "\u041D\u0435 \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u043D\u043E - \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u0439 \u043A\u0430\u043D\u0430\u043B \u043D\u0435 \u0433\u043E\u0442\u043E\u0432\u0438\u0439. \u041F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0456\u0442\u044C\u0441\u044F, \u0449\u043E\u0431 \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438.", + "chat.encrypted": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E", + "chat.decrypted": "\u0420\u043E\u0437\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E", + "chat.encryptedOnDevice": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E \u043D\u0430 \u0432\u0430\u0448\u043E\u043C\u0443 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u0457", + "chat.uploading": "\u041D\u0430\u0434\u0441\u0438\u043B\u0430\u043D\u043D\u044F", + "chat.downloading": "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F", + "chat.transferring": "\u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043D\u043D\u044F\u2026", + "chat.copied": "\u0421\u043A\u043E\u043F\u0456\u0439\u043E\u0432\u0430\u043D\u043E!", + "chat.collapse": "\u0417\u0433\u043E\u0440\u043D\u0443\u0442\u0438", + "chat.closeMenu": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u043C\u0435\u043D\u044E", + "chat.newChat": "\u041D\u043E\u0432\u0438\u0439 \u0447\u0430\u0442", + "chat.newGroup": "\u041D\u043E\u0432\u0430 \u0433\u0440\u0443\u043F\u0430", + "chat.createGroup": "\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u0433\u0440\u0443\u043F\u0443", + "chat.groupChats": "\u0413\u0440\u0443\u043F\u043E\u0432\u0456 \u0447\u0430\u0442\u0438", + "chat.secureChat": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u0439 \u0447\u0430\u0442", + "chat.nameThis": "\u041D\u0430\u0437\u0432\u0456\u0442\u044C \u0446\u0435\u0439 \u0447\u0430\u0442", + "chat.rename": "\u041F\u0435\u0440\u0435\u0439\u043C\u0435\u043D\u0443\u0432\u0430\u0442\u0438 \u0447\u0430\u0442 (\u043B\u0438\u0448\u0435 \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E)", + "chat.renameHint": "\u0414\u0432\u0456\u0447\u0456 \u043A\u043B\u0430\u0446\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u043F\u0435\u0440\u0435\u0439\u043C\u0435\u043D\u0443\u0432\u0430\u0442\u0438", + "chat.localLabel": "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u0430 \u043D\u0430\u0437\u0432\u0430 \xB7 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044C\u0441\u044F \u043B\u0438\u0448\u0435 \u043D\u0430 \u0446\u044C\u043E\u043C\u0443 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u0457", + "chat.setStatus": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0456\u0442\u044C \u0441\u0432\u0456\u0439 \u0441\u0442\u0430\u0442\u0443\u0441", + "chat.yourStatusPrefix": "\u0412\u0430\u0448 \u0441\u0442\u0430\u0442\u0443\u0441 - ", + "chat.meshHint": "\u0414\u043E 8 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432 \xB7 P2P-\u043C\u0435\u0440\u0435\u0436\u0430", + "chat.offline": "\u041E\u0444\u043B\u0430\u0439\u043D", + "chat.noNetwork": "\u041D\u0435\u043C\u0430\u0454 \u043C\u0435\u0440\u0435\u0436\u0456 \xB7 \u043F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F", + "chat.startVoiceCall": "\u041F\u043E\u0447\u0430\u0442\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0439 \u0434\u0437\u0432\u0456\u043D\u043E\u043A", + "chat.startVideoCall": "\u041F\u043E\u0447\u0430\u0442\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0439 \u0432\u0456\u0434\u0435\u043E\u0434\u0437\u0432\u0456\u043D\u043E\u043A", + "chat.verifyForCalls": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0441\u0435\u0430\u043D\u0441, \u0449\u043E\u0431 \u0443\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 \u0434\u0437\u0432\u0456\u043D\u043A\u0438", + "chat.e2eeNote": "\u041A\u043E\u0436\u043D\u0435 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0448\u0438\u0444\u0440\u0443\u0454\u0442\u044C\u0441\u044F \u043D\u0430\u0441\u043A\u0440\u0456\u0437\u043D\u043E \u043D\u0430 \u0432\u0430\u0448\u043E\u043C\u0443 \u043F\u0440\u0438\u0441\u0442\u0440\u043E\u0457, \u043F\u0435\u0440\u0448 \u043D\u0456\u0436 \u043F\u0456\u0434\u0435.", + "chat.peersOnly": "\u041D\u0430\u0434\u0441\u0438\u043B\u0430\u0454\u0442\u044C\u0441\u044F \u043D\u0430\u0441\u043A\u0440\u0456\u0437\u043D\u043E \u043B\u0438\u0448\u0435 \u043F\u0456\u0434'\u0454\u0434\u043D\u0430\u043D\u0438\u043C \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430\u043C - \u043D\u0456\u043A\u043E\u043B\u0438 \u043D\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044C\u0441\u044F \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0456.", + "flow.invitationCreated": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0435 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043E", + "flow.invitationCreatedBang": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0435 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043E \u0439 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E.", + "flow.responseCreated": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0443 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043E", + "flow.responseCreatedBang": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0443 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043E.", + "flow.sendInvitation": "\u041D\u0430\u0434\u0456\u0448\u043B\u0456\u0442\u044C \u043A\u043E\u0434 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0443 \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u043C \u043A\u0430\u043D\u0430\u043B\u043E\u043C (\u0434\u0437\u0432\u0456\u043D\u043E\u043A, SMS \u0442\u043E\u0449\u043E).", + "flow.sendResponse": "\u041D\u0430\u0434\u0456\u0448\u043B\u0456\u0442\u044C \u043A\u043E\u0434 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0456 \u0456\u043D\u0456\u0446\u0456\u0430\u0442\u043E\u0440\u0443 \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u043C \u043A\u0430\u043D\u0430\u043B\u043E\u043C \u0430\u0431\u043E \u0434\u0430\u0439\u0442\u0435 \u0439\u043E\u043C\u0443 \u0432\u0456\u0434\u0441\u043A\u0430\u043D\u0443\u0432\u0430\u0442\u0438 QR-\u043A\u043E\u0434 \u043D\u0438\u0436\u0447\u0435.", + "flow.sendEncryptedCode": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0439 \u043A\u043E\u0434", + "flow.sendTheResponse": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u044C", + "flow.pasteOrWrite": "\u0412\u0441\u0442\u0430\u0432\u0442\u0435 \u0430\u0431\u043E \u0432\u0432\u0435\u0434\u0456\u0442\u044C \u043A\u043E\u0434\u2026", + "flow.processingInvitation": "\u041E\u0431\u0440\u043E\u0431\u043A\u0430 \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F\u2026", + "flow.processingResponse": "\u041E\u0431\u0440\u043E\u0431\u043A\u0430 \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u043E\u0457 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0456\u2026", + "flow.finalizing": "\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u044F \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u043E\u0433\u043E \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F\u2026", + "flow.channelEstablished": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u0439 \u043A\u0430\u043D\u0430\u043B \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E", + "flow.channelReady": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u0438\u0439 \u043A\u0430\u043D\u0430\u043B \u0433\u043E\u0442\u043E\u0432\u0438\u0439", + "flow.restoring": "\u0412\u0456\u0434\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F\u2026", + "flow.invitationCaptured": "\u0417\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0437\u0447\u0438\u0442\u0430\u043D\u043E.", + "err.needInvitation": "\u041F\u043E\u0442\u0440\u0456\u0431\u043D\u043E \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043A\u043E\u0434 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u0432\u0456\u0434 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0430.", + "err.needResponse": "\u041F\u043E\u0442\u0440\u0456\u0431\u043D\u043E \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043A\u043E\u0434 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0456 \u0432\u0456\u0434 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0430.", + "err.responseFormat": "\u0425\u0438\u0431\u043D\u0438\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0456 - \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043A\u043E\u0434", + "err.responseNoKey": "\u0425\u0438\u0431\u043D\u0438\u0439 \u043A\u043E\u0434 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0456 - \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 \u0430\u0431\u043E \u043F\u043E\u0448\u043A\u043E\u0434\u0436\u0435\u043D\u0438\u0439. \u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043A\u043E\u0434 \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0449\u0435 \u0440\u0430\u0437.", + "err.responseNoSignKey": "\u0425\u0438\u0431\u043D\u0438\u0439 \u043A\u043E\u0434 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0456 - \u0431\u0440\u0430\u043A\u0443\u0454 \u043A\u043B\u044E\u0447\u0430 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438 \u043F\u0456\u0434\u043F\u0438\u0441\u0443. \u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043A\u043E\u0434 \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0449\u0435 \u0440\u0430\u0437.", + "err.responseOutdated": "\u0414\u0430\u043D\u0456 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0456 \u0437\u0430\u0441\u0442\u0430\u0440\u0456\u043B\u0438 - \u0441\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435\u0441\u044F \u043D\u043E\u0432\u0438\u043C \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F\u043C", + "err.setupError": "\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F", + "err.notReady": "\u0417'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0449\u0435 \u043D\u0435 \u0433\u043E\u0442\u043E\u0432\u0435", + "err.securityBreach": "\u0412\u0438\u044F\u0432\u043B\u0435\u043D\u043E \u043F\u043E\u0440\u0443\u0448\u0435\u043D\u043D\u044F \u0431\u0435\u0437\u043F\u0435\u043A\u0438 - \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0432\u0456\u0434\u0445\u0438\u043B\u0435\u043D\u043E", + "err.securityValidation": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u043D\u0435 \u043F\u0440\u043E\u0439\u0434\u0435\u043D\u0430 - \u043C\u043E\u0436\u043B\u0438\u0432\u0430 \u0430\u0442\u0430\u043A\u0430", + "err.retiredQr": "\u0426\u0435\u0439 QR-\u043A\u043E\u0434 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 \u0437\u0430\u0441\u0442\u0430\u0440\u0456\u043B\u0438\u0439 \u0444\u043E\u0440\u043C\u0430\u0442, \u044F\u043A\u0438\u043C \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043F\u0435\u0440\u0435\u0434\u0430\u0442\u0438 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F. \u041F\u043E\u043F\u0440\u043E\u0441\u0456\u0442\u044C \u043D\u043E\u0432\u0438\u0439 \u0430\u0431\u043E \u0441\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435\u0441\u044F \u043A\u043E\u043F\u0456\u044E\u0432\u0430\u043D\u043D\u044F\u043C.", + "err.compressedQrNote": "\u0421\u0442\u0438\u0441\u043D\u0435\u043D\u0438\u0439 QR \u043C\u043E\u0436\u0435 \u043E\u043F\u0443\u0441\u0442\u0438\u0442\u0438 SDP \u0437\u0430\u0434\u043B\u044F \u0441\u0442\u0438\u0441\u043B\u043E\u0441\u0442\u0456. \u042F\u043A\u0449\u043E \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u043D\u0435 \u0432\u0434\u0430\u0454\u0442\u044C\u0441\u044F, \u0441\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435\u0441\u044F \u043A\u043E\u043F\u0456\u044E\u0432\u0430\u043D\u043D\u044F\u043C.", + "err.inviteNotConnected": "\u0417\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438. \u0422\u043E\u0439 \u0447\u0430\u0442 \u0437\u0430\u0440\u0430\u0437 \u043D\u0435 \u0437'\u0454\u0434\u043D\u0430\u043D\u043E.", + "err.inviteNotConnectedRetry": "\u0417\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438. \u0422\u043E\u0439 \u0447\u0430\u0442 \u0437\u0430\u0440\u0430\u0437 \u043D\u0435 \u0437'\u0454\u0434\u043D\u0430\u043D\u043E - \u0432\u0456\u0434\u043A\u0440\u0438\u0439\u0442\u0435 \u0439\u043E\u0433\u043E \u0437\u043D\u043E\u0432\u0443 \u0439 \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0449\u0435 \u0440\u0430\u0437.", + "err.nobodyAccepted": "\u041D\u0456\u0445\u0442\u043E \u043D\u0435 \u043F\u0440\u0438\u0439\u043D\u044F\u0432 \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043D\u044F. \u0413\u0440\u0443\u043F\u0430 \u043B\u0438\u0448\u0438\u043B\u0430\u0441\u044F \u0431\u0435\u0437 \u0437\u043C\u0456\u043D.", + "err.noAudio": "\u0417\u0432\u0443\u043A \u043D\u0435 \u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E - \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0434\u043E\u0437\u0432\u0456\u043B \u043D\u0430 \u043C\u0456\u043A\u0440\u043E\u0444\u043E\u043D \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0449\u0435 \u0440\u0430\u0437.", + "err.voiceNeedsConnection": "\u0414\u043B\u044F \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0433\u043E \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u0435 \u0437\u0430\u0445\u0438\u0449\u0435\u043D\u0435 \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F. \u041F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0456\u0442\u044C\u0441\u044F \u0439 \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0449\u0435 \u0440\u0430\u0437.", + "err.voiceRestoring": "\u0412\u0456\u0434\u043D\u043E\u0432\u043B\u044E\u0454\u043C\u043E \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F - \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0435 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0437\u0430 \u043C\u0438\u0442\u044C.", + "err.fileTooLarge": "\u0424\u0430\u0439\u043B \u0437\u0430\u0432\u0435\u043B\u0438\u043A\u0438\u0439", + "sas.safetyNumber": "\u041D\u043E\u043C\u0435\u0440 \u0431\u0435\u0437\u043F\u0435\u043A\u0438", + "sas.incorrect": "\u0425\u0438\u0431\u043D\u0438\u0439 \u043A\u043E\u0434. \u0417\u0432\u0456\u0440\u0442\u0435 \u0439\u043E\u0433\u043E \u0437\u0456 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u043E\u043C \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0449\u0435 \u0440\u0430\u0437.", + "sas.noMatch": "\u041A\u043E\u0434\u0438 \u043D\u0435 \u0437\u0431\u0456\u0433\u0430\u044E\u0442\u044C\u0441\u044F", + "sas.makeSure": "\u041F\u0435\u0440\u0435\u043A\u043E\u043D\u0430\u0439\u0442\u0435\u0441\u044F, \u0449\u043E \u043A\u043E\u0434\u0438 \u0437\u0431\u0456\u0433\u0430\u044E\u0442\u044C\u0441\u044F \u0442\u043E\u0447\u043D\u043E.", + "sas.tooManyAttempts": "\u0417\u0430\u0431\u0430\u0433\u0430\u0442\u043E \u043D\u0435\u0432\u0434\u0430\u043B\u0438\u0445 \u0441\u043F\u0440\u043E\u0431. \u0421\u0435\u0430\u043D\u0441 \u0441\u043A\u0438\u043D\u0443\u0442\u043E \u0437\u0430\u0434\u043B\u044F \u0431\u0435\u0437\u043F\u0435\u043A\u0438.", + "sas.verificationFailed": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0443 \u043D\u0435 \u043F\u0440\u043E\u0439\u0434\u0435\u043D\u043E", + "sas.verified": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E \xB7 \u0434\u043E\u0441\u043A\u043E\u043D\u0430\u043B\u0430 \u043F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C", + "sas.runVerification": "\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0443 \u0431\u0435\u0437\u043F\u0435\u043A\u0438", + "sec.panelTitle": "\u0414\u0435\u0442\u0430\u043B\u0456 \u043C\u0435\u0440\u0435\u0436\u0456 \u0442\u0430 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u0457", + "sec.security": "\u0411\u0435\u0437\u043F\u0435\u043A\u0430", + "sec.transport": "\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442", + "sec.keyExchange": "\u041E\u0431\u043C\u0456\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438", + "sec.allEnabled": "\u0423\u0441\u0456 \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u0443\u0432\u0456\u043C\u043A\u043D\u0435\u043D\u043E \u0442\u0438\u043F\u043E\u0432\u043E", + "sec.realTimeNote": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C\u0443 \u0447\u0430\u0441\u0456 \u0441\u043F\u0440\u0430\u0432\u0436\u043D\u0456\u043C\u0438 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u043C\u0438 \u0444\u0443\u043D\u043A\u0446\u0456\u044F\u043C\u0438 - \u0431\u0435\u0437 \u0432\u0438\u0433\u0430\u0434\u0430\u043D\u0438\u0445 \u0434\u0430\u043D\u0438\u0445.", + "sec.simulatedWarning": "\u0423\u0432\u0430\u0433\u0430: \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043D\u0435 \u043F\u043E\u0432\u043D\u0456\u0441\u0442\u044E \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0435 - \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0437\u043C\u043E\u0434\u0435\u043B\u044C\u043E\u0432\u0430\u043D\u0456.", + "dl.title": "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 SecureBit", + "dl.free": "\u0411\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E \xB7 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438\u0439 \u043A\u043E\u0434", + "dl.soon": "\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043A\u0438 \u0434\u043B\u044F iOS \u0442\u0430 Android \u0456 \u0440\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u044F \u0434\u043B\u044F Chrome, Firefox \u0456 Opera \u0437'\u044F\u0432\u043B\u044F\u0442\u044C\u0441\u044F \u043D\u0435\u0437\u0430\u0431\u0430\u0440\u043E\u043C.", + "chatHdr.chat": "\u0427\u0430\u0442", + "chatHdr.chats": "\u0427\u0430\u0442\u0438", + "chatHdr.newChat": "+ \u041D\u043E\u0432\u0438\u0439", + "chatHdr.secure": "\u0417\u0430\u0445\u0438\u0449\u0435\u043D\u043E", + "chatHdr.p2pSub": "P2P \xB7 \u043D\u0430\u0441\u043A\u0440\u0456\u0437\u043D\u0435 \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F", + "chatHdr.save": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438", + "chatHdr.close": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438", + "chatHdr.expand": "\u0420\u043E\u0437\u0433\u043E\u0440\u043D\u0443\u0442\u0438", + "chatHdr.you": "\u0412\u0438", + "chatHdr.qrCode": "QR-\u043A\u043E\u0434", + "chat.disconnected": "\u0420\u043E\u0437'\u0454\u0434\u043D\u0430\u043D\u043E", + "call.mute": "\u0412\u0438\u043C\u043A\u043D\u0443\u0442\u0438 \u043C\u0456\u043A\u0440\u043E\u0444\u043E\u043D", + "call.endShort": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0438", + "group.add": "\u0414\u043E\u0434\u0430\u0442\u0438", + "group.send": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438", + "sec.pfsShort": "\u0414\u043E\u0441\u043A\u043E\u043D\u0430\u043B\u0430 \u043F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C", + "sec.cipher": "\u0428\u0438\u0444\u0440", + "chat.close": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438", + "file.needConnection": "\u0414\u043B\u044F \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432 \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u0435 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0435 \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F", + "presence.available": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439", + "presence.away": "\u0412\u0456\u0434\u0456\u0439\u0448\u043E\u0432", + "presence.busy": "\u0417\u0430\u0439\u043D\u044F\u0442\u0438\u0439", + "presence.offline": "\u041D\u0435 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456", + "presence.invisible": "\u041D\u0435\u0432\u0438\u0434\u0438\u043C\u0438\u0439", + "presence.availableDesc": "\u0423 \u043C\u0435\u0440\u0435\u0436\u0456 \u0439 \u043D\u0430 \u0437\u0432'\u044F\u0437\u043A\u0443", + "presence.awayDesc": "\u041D\u0435\u0430\u043A\u0442\u0438\u0432\u043D\u0438\u0439 \xB7 \u0432\u0456\u0434\u0456\u0439\u0448\u043E\u0432", + "presence.busyDesc": "\u041D\u0435 \u0442\u0443\u0440\u0431\u0443\u0432\u0430\u0442\u0438", + "presence.invisibleDesc": "\u0412\u0438\u0433\u043B\u044F\u0434\u0430\u0442\u0438 \u043E\u0444\u043B\u0430\u0439\u043D \u0434\u043B\u044F \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0456\u0432", + "presence.online": "\u0423 \u043C\u0435\u0440\u0435\u0436\u0456", + "conn.p2p": "P2P \xB7 \u0437'\u0454\u0434\u043D\u0430\u043D\u043E", + "conn.verifying": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430\u2026", + "conn.connecting": "\u0417'\u0454\u0434\u043D\u0430\u043D\u043D\u044F\u2026", + "conn.reconnecting": "\u041F\u0435\u0440\u0435\u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F\u2026", + "conn.peerDisconnected": "\u0421\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A \u0432\u0456\u0434'\u0454\u0434\u043D\u0430\u0432\u0441\u044F", + "conn.disconnected": "\u0420\u043E\u0437'\u0454\u0434\u043D\u0430\u043D\u043E", + "chat.defaultLabel": "\u0427\u0430\u0442", + "groupPhase.forming": "\u0424\u043E\u0440\u043C\u0443\u0432\u0430\u043D\u043D\u044F\u2026", + "groupPhase.commitments": "\u041E\u0431\u043C\u0456\u043D \u0437\u043E\u0431\u043E\u0432'\u044F\u0437\u0430\u043D\u043D\u044F\u043C\u0438\u2026", + "groupPhase.revealing": "\u0420\u043E\u0437\u043A\u0440\u0438\u0442\u0442\u044F\u2026", + "groupPhase.compare": "\u0417\u0432\u0456\u0440\u0442\u0435 \u043A\u043E\u0434 \u0433\u0440\u0443\u043F\u0438", + "groupPhase.ready": "\u0413\u0440\u0443\u043F\u0430 \u0433\u043E\u0442\u043E\u0432\u0430", + "groupPhase.failed": "\u0413\u0440\u0443\u043F\u0443 \u043D\u0435 \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043E", + "call.qualityGood": "\u0414\u043E\u0431\u0440\u0430", + "call.qualityFair": "\u041F\u043E\u0441\u0435\u0440\u0435\u0434\u043D\u044F", + "call.qualityWeak": "\u0421\u043B\u0430\u0431\u043A\u0430", + "msg.code": "\u041A\u043E\u0434", + "msg.timer": "\u0422\u0430\u0439\u043C\u0435\u0440", + "msg.voice": "\u0413\u043E\u043B\u043E\u0441", + "msg.play": "\u0412\u0456\u0434\u0442\u0432\u043E\u0440\u0438\u0442\u0438", + "msg.sent": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u043D\u043E", + "msg.read": "\u041F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043E", + "report.title": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C\u0443 \u0447\u0430\u0441\u0456", + "report.active": "\u0410\u043A\u0442\u0438\u0432\u043D\u043E", + "report.testsPassed": "\u041F\u0440\u043E\u0439\u0434\u0435\u043D\u043E \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043E\u043A", + "report.verifiedAt": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u043E", + "report.source": "\u0414\u0436\u0435\u0440\u0435\u043B\u043E", + "secTest.verifyECDHKeyExchange": "\u041E\u0431\u043C\u0456\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438 ECDH", + "secTest.verifyECDSASignatures": "\u0426\u0438\u0444\u0440\u043E\u0432\u0456 \u043F\u0456\u0434\u043F\u0438\u0441\u0438 ECDSA", + "secTest.verifyEncryption": "\u0428\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F AES-GCM", + "secTest.verifyMessageIntegrity": "\u0426\u0456\u043B\u0456\u0441\u043D\u0456\u0441\u0442\u044C \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C", + "secTest.verifyPerfectForwardSecrecy": "\u0414\u043E\u0441\u043A\u043E\u043D\u0430\u043B\u0430 \u043F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C", + "secTest.verifyPFS": "\u0414\u043E\u0441\u043A\u043E\u043D\u0430\u043B\u0430 \u043F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C", + "secTest.verifyReplayProtection": "\u0417\u0430\u0445\u0438\u0441\u0442 \u0432\u0456\u0434 \u043F\u043E\u0432\u0442\u043E\u0440\u0456\u0432", + "secTest.verifyDTLSFingerprint": "\u0412\u0456\u0434\u0431\u0438\u0442\u043E\u043A DTLS", + "secTest.verifySASVerification": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 SAS", + "secTest.verifyMetadataProtection": "\u0417\u0430\u0445\u0438\u0441\u0442 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u0438\u0445", + "secTest.verifyTrafficObfuscation": "\u041C\u0430\u0441\u043A\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0440\u0430\u0444\u0456\u043A\u0443", + "secTest.verifyPacketPadding": "\u0414\u043E\u043F\u043E\u0432\u043D\u0435\u043D\u043D\u044F \u043F\u0430\u043A\u0435\u0442\u0456\u0432", + "secTest.verifyNestedEncryption": "\u0412\u043A\u043B\u0430\u0434\u0435\u043D\u0435 \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F", + "secTest.verifyNonExtractableKeys": "\u041A\u043B\u044E\u0447\u0456, \u044F\u043A\u0456 \u043D\u0435 \u043C\u043E\u0436\u043D\u0430 \u0432\u0438\u0442\u044F\u0433\u0442\u0438", + "secTest.verifyRateLimiting": "\u041E\u0431\u043C\u0435\u0436\u0435\u043D\u043D\u044F \u0447\u0430\u0441\u0442\u043E\u0442\u0438", + "secTest.verifyMutualAuth": "\u0412\u0437\u0430\u0454\u043C\u043D\u0430 \u0430\u0432\u0442\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0446\u0456\u044F", + "secTest.verifyAuthProof": "\u0414\u043E\u043A\u0430\u0437 \u0430\u0432\u0442\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0446\u0456\u0457", + "secTest.verifyEnhancedValidation": "\u041F\u043E\u0441\u0438\u043B\u0435\u043D\u0430 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430", + "secTest.verifyAdvancedFeatures": "\u0420\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u0456 \u043C\u043E\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456", + "secTest.verifySignature": "\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u0443", + "secDetail.Security system initializing...": "\u0421\u0438\u0441\u0442\u0435\u043C\u0430 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0454\u0442\u044C\u0441\u044F\u2026", + "secDetail.Nested encryption active": "\u0412\u043A\u043B\u0430\u0434\u0435\u043D\u0435 \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u0435", + "secDetail.Nested encryption failed": "\u0412\u043A\u043B\u0430\u0434\u0435\u043D\u0435 \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F", + "secDetail.Packet padding active": "\u0414\u043E\u043F\u043E\u0432\u043D\u0435\u043D\u043D\u044F \u043F\u0430\u043A\u0435\u0442\u0456\u0432 \u0430\u043A\u0442\u0438\u0432\u043D\u0435", + "secDetail.Packet padding failed": "\u0414\u043E\u043F\u043E\u0432\u043D\u0435\u043D\u043D\u044F \u043F\u0430\u043A\u0435\u0442\u0456\u0432 \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F", + "secDetail.Advanced features active": "\u0420\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u0456 \u043C\u043E\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456 \u0430\u043A\u0442\u0438\u0432\u043D\u0456", + "secDetail.Advanced features failed": "\u0420\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u0456 \u043C\u043E\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456 \u043D\u0435 \u043F\u0440\u0430\u0446\u044E\u044E\u0442\u044C", + "secDetail.No encryption key available": "\u041A\u043B\u044E\u0447 \u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439", + "secDetail.AES-GCM encryption/decryption working correctly": "\u0428\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0430 \u0440\u043E\u0437\u0448\u0438\u0444\u0440\u0443\u0432\u0430\u043D\u043D\u044F AES-GCM \u043F\u0440\u0430\u0446\u044E\u044E\u0442\u044C \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E", + "secDetail.No ECDH key pair available": "\u041F\u0430\u0440\u0430 \u043A\u043B\u044E\u0447\u0456\u0432 ECDH \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430", + "secDetail.Key derivation failed": "\u041E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u044F \u043A\u043B\u044E\u0447\u0430 \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F", + "secDetail.No ECDSA key pair available": "\u041F\u0430\u0440\u0430 \u043A\u043B\u044E\u0447\u0456\u0432 ECDSA \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430", + "secDetail.ECDSA digital signatures working correctly": "\u0426\u0438\u0444\u0440\u043E\u0432\u0456 \u043F\u0456\u0434\u043F\u0438\u0441\u0438 ECDSA \u043F\u0440\u0430\u0446\u044E\u044E\u0442\u044C \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E", + "secDetail.MAC key not available or invalid": "\u041A\u043B\u044E\u0447 MAC \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 \u0430\u0431\u043E \u0445\u0438\u0431\u043D\u0438\u0439", + "secDetail.Rate limiter did not block a message over the limit": "\u041E\u0431\u043C\u0435\u0436\u0443\u0432\u0430\u0447 \u043D\u0435 \u0437\u0430\u0431\u043B\u043E\u043A\u0443\u0432\u0430\u0432 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u043F\u043E\u043D\u0430\u0434 \u043B\u0456\u043C\u0456\u0442", + "secDetail.Rate limiter is not available": "\u041E\u0431\u043C\u0435\u0436\u0443\u0432\u0430\u0447 \u0447\u0430\u0441\u0442\u043E\u0442\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439", + "secDetail.Replay protection is working correctly": "\u0417\u0430\u0445\u0438\u0441\u0442 \u0432\u0456\u0434 \u043F\u043E\u0432\u0442\u043E\u0440\u0456\u0432 \u043F\u0440\u0430\u0446\u044E\u0454 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E", + "secDetail.Replay protection not enabled": "\u0417\u0430\u0445\u0438\u0441\u0442 \u0432\u0456\u0434 \u043F\u043E\u0432\u0442\u043E\u0440\u0456\u0432 \u043D\u0435 \u0443\u0432\u0456\u043C\u043A\u043D\u0435\u043D\u043E", + "secDetail.SAS code not available": "\u041A\u043E\u0434 SAS \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439", + "secDetail.SAS verification code is valid and available": "\u041A\u043E\u0434 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438 SAS \u0434\u0456\u0439\u0441\u043D\u0438\u0439 \u0456 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439", + "secDetail.Traffic obfuscation is working correctly": "\u041C\u0430\u0441\u043A\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0440\u0430\u0444\u0456\u043A\u0443 \u043F\u0440\u0430\u0446\u044E\u0454 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E", + "secDetail.Traffic obfuscation not enabled": "\u041C\u0430\u0441\u043A\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0440\u0430\u0444\u0456\u043A\u0443 \u043D\u0435 \u0443\u0432\u0456\u043C\u043A\u043D\u0435\u043D\u043E", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "\u0414\u043B\u044F \u0446\u044C\u043E\u0433\u043E \u0441\u0435\u0430\u043D\u0441\u0443 \u043D\u0435\u043C\u0430\u0454 \u0435\u0444\u0435\u043C\u0435\u0440\u043D\u043E\u0457 \u043F\u0430\u0440\u0438 \u043A\u043B\u044E\u0447\u0456\u0432 ECDH, \u044F\u043A\u0443 \u043D\u0435 \u043C\u043E\u0436\u043D\u0430 \u0432\u0438\u0442\u044F\u0433\u0442\u0438", + "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": "\u041B\u0438\u0448\u0435 \u0441\u0435\u0430\u043D\u0441\u043E\u0432\u0430 \u043F\u0440\u044F\u043C\u0430 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u0456\u0441\u0442\u044C: \u043A\u043B\u044E\u0447\u0456 \u0435\u0444\u0435\u043C\u0435\u0440\u043D\u0456 \u0434\u043B\u044F \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0441\u0435\u0430\u043D\u0441\u0443, \u0430\u043B\u0435 Double Ratchet \u0434\u043B\u044F \u0446\u044C\u043E\u0433\u043E \u0437'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u0438\u0439 (\u0443 \u0441\u043F\u0456\u0432\u0440\u043E\u0437\u043C\u043E\u0432\u043D\u0438\u043A\u0430 \u0441\u0442\u0430\u0440\u0456\u0448\u0430 \u0432\u0435\u0440\u0441\u0456\u044F), \u0442\u043E\u0436 \u0441\u043A\u043E\u043C\u043F\u0440\u043E\u043C\u0435\u0442\u043E\u0432\u0430\u043D\u0438\u0439 \u0441\u0435\u0430\u043D\u0441\u043E\u0432\u0438\u0439 \u043A\u043B\u044E\u0447 \u0432\u0456\u0434\u043A\u0440\u0438\u0432\u0430\u0454 \u0432\u0441\u044E \u0440\u043E\u0437\u043C\u043E\u0432\u0443.", + "msg.pause": "\u041F\u0430\u0443\u0437\u0430", + "msg.failed": "\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F", + "groupErr.timeout": "\u0423\u0447\u0430\u0441\u043D\u0438\u043A \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u0432 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438, \u043F\u0435\u0440\u0448 \u043D\u0456\u0436 \u043A\u043E\u0434 \u0431\u0443\u0432 \u0433\u043E\u0442\u043E\u0432\u0438\u0439.", + "groupErr.keyMismatch": "\u041A\u043B\u044E\u0447 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430 \u043D\u0435 \u0437\u0431\u0456\u0433\u0441\u044F \u0437 \u043E\u0441\u043E\u0431\u043E\u044E, \u044F\u043A\u0443 \u0434\u043B\u044F \u043D\u044C\u043E\u0433\u043E \u0437\u0430\u044F\u0432\u0438\u043B\u0438.", + "groupErr.revealMismatch": "\u0420\u043E\u0437\u043A\u0440\u0438\u0442\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430 \u043D\u0435 \u0437\u0431\u0456\u0433\u043B\u043E\u0441\u044F \u0437 \u0439\u043E\u0433\u043E \u0437\u043E\u0431\u043E\u0432'\u044F\u0437\u0430\u043D\u043D\u044F\u043C.", + "groupErr.commitChanged": "\u0423\u0447\u0430\u0441\u043D\u0438\u043A \u0437\u043C\u0456\u043D\u0438\u0432 \u0441\u0432\u043E\u0454 \u0437\u043E\u0431\u043E\u0432'\u044F\u0437\u0430\u043D\u043D\u044F \u043F\u043E\u0441\u0435\u0440\u0435\u0434 \u043F\u0440\u043E\u0446\u0435\u0441\u0443.", + "groupErr.missingKey": "\u0423 \u0441\u043F\u0438\u0441\u043A\u0443 \u0431\u0443\u0432 \u0443\u0447\u0430\u0441\u043D\u0438\u043A, \u0447\u0438\u0439 \u043A\u043B\u044E\u0447 \u0442\u0430\u043A \u0456 \u043D\u0435 \u043D\u0430\u0434\u0456\u0439\u0448\u043E\u0432.", + "groupErr.outsider": "\u041D\u0430\u0434\u0456\u0439\u0448\u043E\u0432 \u043A\u0430\u0434\u0440 \u0432\u0456\u0434 \u043A\u043E\u0433\u043E\u0441\u044C \u043F\u043E\u0437\u0430 \u0433\u0440\u0443\u043F\u043E\u044E.", + "groupErr.limit": "\u0413\u0440\u0443\u043F\u0430 \u043E\u0431\u043C\u0435\u0436\u0435\u043D\u0430 \u0432\u0456\u0441\u044C\u043C\u043E\u043C\u0430 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0430\u043C\u0438.", + "groupErr.tooLarge": "\u041F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0431\u0443\u043B\u043E \u0437\u0430\u0432\u0435\u043B\u0438\u043A\u0435, \u0449\u043E\u0431 \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438 \u0439\u043E\u0433\u043E \u0433\u0440\u0443\u043F\u0456.", + "fileType.text": "\u0417\u0432\u0438\u0447\u0430\u0439\u043D\u0438\u0439 \u0442\u0435\u043A\u0441\u0442", + "fileType.images": "\u0417\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F", + "fileType.archives": "\u0410\u0440\u0445\u0456\u0432\u0438", + "fileType.voice": "\u0413\u043E\u043B\u043E\u0441\u043E\u0432\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F", + "fileType.unsupported": "\u041D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F", + "qrScan.title": "\u0421\u043A\u0430\u043D\u0443\u0432\u0430\u0442\u0438 QR-\u043A\u043E\u0434", + "qrScan.auto": "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E", + "qrScan.reset": "\u0421\u043A\u0438\u043D\u0443\u0442\u0438", + "qrScan.autoScroll": "\u0410\u0432\u0442\u043E\u043F\u0440\u043E\u043A\u0440\u0443\u0447\u0443\u0432\u0430\u043D\u043D\u044F \u0443\u0432\u0456\u043C\u043A\u043D\u0435\u043D\u043E", + "qrScan.starting": "\u0417\u0430\u043F\u0443\u0441\u043A \u043A\u0430\u043C\u0435\u0440\u0438\u2026", + "qrScan.point": "\u041D\u0430\u0432\u0435\u0434\u0456\u0442\u044C \u043A\u0430\u043C\u0435\u0440\u0443 \u043D\u0430 QR-\u043A\u043E\u0434", + "qrScan.tapFocus": "\u0422\u043E\u0440\u043A\u043D\u0456\u0442\u044C\u0441\u044F \u0435\u043A\u0440\u0430\u043D\u0430, \u0449\u043E\u0431 \u0441\u0444\u043E\u043A\u0443\u0441\u0443\u0432\u0430\u0442\u0438", + "qrScan.focusing": "\u0424\u043E\u043A\u0443\u0441\u0443\u0432\u0430\u043D\u043D\u044F\u2026", + "iceErr.notArray": "\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u0435\u0440\u0432\u0435\u0440\u0456\u0432 \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u043C\u0430\u0441\u0438\u0432\u043E\u043C", + "iceErr.invalidJson": "\u0425\u0438\u0431\u043D\u0438\u0439 JSON", + "iceErr.tooMany": "\u0417\u0430\u0431\u0430\u0433\u0430\u0442\u043E \u0441\u0435\u0440\u0432\u0435\u0440\u0456\u0432 (\u0449\u043E\u043D\u0430\u0439\u0431\u0456\u043B\u044C\u0448\u0435 {max})", + "iceErr.invalidEntry": "{label}: \u0445\u0438\u0431\u043D\u0438\u0439 \u0437\u0430\u043F\u0438\u0441", + "iceErr.urlCount": "{label}: \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u043E \u0432\u0456\u0434 1 \u0434\u043E {max} URL", + "iceErr.turnCreds": "{label}: TURN-\u0441\u0435\u0440\u0432\u0435\u0440\u0438 \u0437\u0430\u0437\u0432\u0438\u0447\u0430\u0439 \u043F\u043E\u0442\u0440\u0435\u0431\u0443\u044E\u0442\u044C \u0456\u043C\u0435\u043D\u0456 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u0442\u0430 \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0445 \u0434\u0430\u043D\u0438\u0445", + "iceUrl.notString": "URL \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0440\u044F\u0434\u043A\u043E\u043C", + "iceUrl.empty": "URL \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u0439", + "iceUrl.tooLong": "URL \u0437\u0430\u0434\u043E\u0432\u0433\u0438\u0439", + "iceUrl.badChars": "URL \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u043D\u0435\u043F\u0440\u0438\u043F\u0443\u0441\u0442\u0438\u043C\u0456 \u0441\u0438\u043C\u0432\u043E\u043B\u0438", + "iceUrl.badScheme": "URL \u043C\u0430\u0454 \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 stun:, stuns:, turn: \u0430\u0431\u043E turns:", + "iceUrl.badQuery": "URL \u043C\u0430\u0454 \u0445\u0438\u0431\u043D\u0438\u0439 \u0437\u0430\u043F\u0438\u0442", + "iceUrl.noHost": "\u0412 URL \u0431\u0440\u0430\u043A\u0443\u0454 \u0445\u043E\u0441\u0442\u0430", + "iceUrl.badHost": "URL \u043C\u0430\u0454 \u0445\u0438\u0431\u043D\u0438\u0439 \u0445\u043E\u0441\u0442 \u0430\u0431\u043E \u043F\u043E\u0440\u0442", + "iceUrl.badTransport": "\u0417\u0430\u043F\u0438\u0442 URL \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 transport=udp \u0430\u0431\u043E transport=tcp", + "msg.off": "\u0412\u0438\u043C\u043A\u043D\u0435\u043D\u043E", + "file.consentUnavailable": "\u041D\u0435\u043C\u0430\u0454 \u0437\u043C\u043E\u0433\u0438 \u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u0437\u0433\u043E\u0434\u0443", + "secLevel.MAXIMUM": "\u041C\u0410\u041A\u0421\u0418\u041C\u0423\u041C", + "secLevel.INITIALIZING": "\u0417\u0410\u041F\u0423\u0421\u041A", + "secLevel.ERROR": "\u041F\u041E\u041C\u0418\u041B\u041A\u0410", + "secLevel.UNKNOWN": "\u041D\u0415\u0412\u0406\u0414\u041E\u041C\u041E", + "status.error": "\u041F\u043E\u043C\u0438\u043B\u043A\u0430", + "offline.disconnect": "\u0412\u0456\u0434'\u0454\u0434\u043D\u0430\u0442\u0438\u0441\u044F", + "offline.learnMore": "\u0414\u043E\u043A\u043B\u0430\u0434\u043D\u0456\u0448\u0435", + "pwa.installApp": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u043D\u043E\u043A", + "chat.onWeb": "\u0412\u0438 \u0443 \u0432\u0435\u0431\u0432\u0435\u0440\u0441\u0456\u0457" + }, + "ru": { + "language.label": "\u042F\u0437\u044B\u043A", + "community.title": "\u041F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u044F\u0439\u0442\u0435\u0441\u044C \u043A \u0431\u0443\u0434\u0443\u0449\u0435\u043C\u0443 \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0438", + "community.description": "SecureBit \u0440\u0430\u0441\u0442\u0451\u0442 \u0431\u043B\u0430\u0433\u043E\u0434\u0430\u0440\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0443. \u0412\u0430\u0448\u0438 \u0438\u0434\u0435\u0438 \u0438 \u043E\u0442\u0437\u044B\u0432\u044B \u0444\u043E\u0440\u043C\u0438\u0440\u0443\u044E\u0442 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u0433\u043E \u043E\u0431\u0449\u0435\u043D\u0438\u044F - \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0432\u0435\u0434\u0451\u0442\u0441\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u043E, \u0441 \u043F\u043E\u043B\u043D\u043E\u0439 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u043E\u0439 ASN.1 \u043D\u0430 \u0432\u0441\u0451\u043C \u043F\u0443\u0442\u0438.", + "community.github": "\u0420\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u0439 \u043D\u0430 GitHub", + "community.feedback": "\u041E\u0431\u0440\u0430\u0442\u043D\u0430\u044F \u0441\u0432\u044F\u0437\u044C", + "unique.eyebrow": "\u0427\u0435\u043C \u043C\u044B \u043E\u0442\u043B\u0438\u0447\u0430\u0435\u043C\u0441\u044F", + "unique.heading": "\u041F\u043E\u0447\u0435\u043C\u0443 SecureBit \u043E\u0441\u043E\u0431\u0435\u043D\u043D\u044B\u0439", + "unique.s1.titleTop": "\u041C\u043D\u043E\u0433\u043E\u0441\u043B\u043E\u0439\u043D\u043E\u0435", + "unique.s1.titleBottom": "\u044F\u0434\u0440\u043E \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u044F", + "unique.s1.collapsed": "\u042F\u0434\u0440\u043E \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u044F", + "unique.s1.desc": "\u041E\u0431\u043C\u0435\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438 ECDH P-384, \u043F\u043E\u043B\u0435\u0437\u043D\u0430\u044F \u043D\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0432 AES-256-GCM, \u043F\u043E\u0434\u043F\u0438\u0441\u0438 ECDSA \u0438 \u043F\u043E\u043B\u043D\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 ASN.1 - \u0441\u043E\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0432 \u043E\u0434\u0438\u043D \u0443\u043A\u0440\u0435\u043F\u043B\u0451\u043D\u043D\u044B\u0439 \u043A\u043E\u043D\u0432\u0435\u0439\u0435\u0440.", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "\u0427\u0438\u0441\u0442\u044B\u0439 P2P", + "unique.s2.titleBottom": "\u0447\u0435\u0440\u0435\u0437 WebRTC", + "unique.s2.collapsed": "\u0427\u0438\u0441\u0442\u044B\u0439 P2P \u0447\u0435\u0440\u0435\u0437 WebRTC", + "unique.s2.desc": "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0438\u0434\u0443\u0442 \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E \u043C\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430\u043C\u0438 \u043F\u043E WebRTC. \u041D\u0438\u043A\u0430\u043A\u043E\u0439 relay \u043D\u0435 \u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0430\u0448\u0438 \u0434\u0430\u043D\u043D\u044B\u0435 - \u0441\u0435\u0440\u0432\u0435\u0440 \u043B\u0438\u0448\u044C \u043F\u043E\u043C\u043E\u0433\u0430\u0435\u0442 \u0434\u0432\u0443\u043C \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430\u043C \u043D\u0430\u0439\u0442\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430.", + "unique.s2.tags": [ + "DTLS 1.3", + "\u0411\u0435\u0437 relay" + ], + "unique.s3.titleTop": "\u0421\u043E\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u0430\u044F", + "unique.s3.titleBottom": "\u043F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C", + "unique.s3.collapsed": "\u041F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C", + "unique.s3.desc": "\u0421\u0435\u0430\u043D\u0441\u043E\u0432\u044B\u0435 \u043A\u043B\u044E\u0447\u0438 \u043C\u0435\u043D\u044F\u044E\u0442\u0441\u044F \u043D\u0435\u043F\u0440\u0435\u0440\u044B\u0432\u043D\u043E \u0438 \u043E\u0442\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043F\u043E\u0441\u043B\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u0434\u0438\u043D \u0441\u043A\u043E\u043C\u043F\u0440\u043E\u043C\u0435\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u043E\u0442\u043A\u0440\u043E\u0435\u0442 \u043F\u0440\u043E\u0448\u043B\u044B\u0435 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440\u044B.", + "unique.s3.tags": [ + "\u042D\u0444\u0435\u043C\u0435\u0440\u043D\u044B\u0435 \u043A\u043B\u044E\u0447\u0438", + "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u0441\u043C\u0435\u043D\u0430" + ], + "unique.s4.titleTop": "\u041C\u0430\u0441\u043A\u0438\u0440\u043E\u0432\u043A\u0430", + "unique.s4.titleBottom": "\u0442\u0440\u0430\u0444\u0438\u043A\u0430", + "unique.s4.collapsed": "\u041C\u0430\u0441\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0442\u0440\u0430\u0444\u0438\u043A\u0430", + "unique.s4.desc": "\u0420\u0430\u0437\u043C\u0435\u0440\u044B \u043F\u0430\u043A\u0435\u0442\u043E\u0432 \u0438 \u043F\u0430\u0443\u0437\u044B \u043C\u0435\u0436\u0434\u0443 \u043D\u0438\u043C\u0438 \u0434\u043E\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u0438 \u0440\u0430\u043D\u0434\u043E\u043C\u0438\u0437\u0438\u0440\u0443\u044E\u0442\u0441\u044F, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0435 \u043D\u0435 \u0441\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u0432 \u0443\u0437\u043D\u0430\u0432\u0430\u0435\u043C\u044B\u0439 \u0440\u0438\u0441\u0443\u043D\u043E\u043A \u0434\u0430\u0436\u0435 \u0434\u043B\u044F \u0442\u043E\u0433\u043E, \u043A\u0442\u043E \u0441\u043B\u0435\u0434\u0438\u0442 \u0437\u0430 \u043A\u0430\u043D\u0430\u043B\u043E\u043C.", + "unique.s4.tags": [ + "\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043F\u0430\u043A\u0435\u0442\u043E\u0432", + "\u0420\u0430\u0437\u0431\u0440\u043E\u0441 \u0432\u043E \u0432\u0440\u0435\u043C\u0435\u043D\u0438" + ], + "unique.s5.titleTop": "\u041D\u0438\u043A\u0430\u043A\u043E\u0433\u043E", + "unique.s5.titleBottom": "\u0441\u0431\u043E\u0440\u0430 \u0434\u0430\u043D\u043D\u044B\u0445", + "unique.s5.collapsed": "\u041D\u0438\u043A\u0430\u043A\u043E\u0433\u043E \u0441\u0431\u043E\u0440\u0430 \u0434\u0430\u043D\u043D\u044B\u0445", + "unique.s5.desc": "\u0411\u0435\u0437 \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0437\u0430\u043F\u0438\u0441\u0435\u0439, \u0431\u0435\u0437 \u0436\u0443\u0440\u043D\u0430\u043B\u043E\u0432, \u0431\u0435\u0437 \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439. \u041D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043D\u0435\u0442 \u043D\u0438\u0447\u0435\u0433\u043E, \u0447\u0442\u043E \u043C\u043E\u0436\u043D\u043E \u0443\u0442\u0435\u0447\u044C, \u0438\u0437\u044A\u044F\u0442\u044C \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443 \u0438\u043B\u0438 \u043F\u0440\u043E\u0434\u0430\u0442\u044C.", + "unique.s5.tags": [ + "\u0411\u0435\u0437 \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0437\u0430\u043F\u0438\u0441\u0435\u0439", + "\u0411\u0435\u0437 \u0436\u0443\u0440\u043D\u0430\u043B\u043E\u0432" + ], + "partners.eyebrow": "\u041F\u0430\u0440\u0442\u043D\u0451\u0440\u044B \u0438 \u044D\u043A\u043E\u0441\u0438\u0441\u0442\u0435\u043C\u0430", + "partners.heading": "\u041D\u0430\u043C \u0434\u043E\u0432\u0435\u0440\u044F\u044E\u0442 \u043D\u0430\u0448\u0438 \u043F\u0430\u0440\u0442\u043D\u0451\u0440\u044B", + "partners.aegis.desc": "\u0418\u043D\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043F\u0430\u0440\u0442\u043D\u0451\u0440, \u0437\u0430\u0449\u0438\u0449\u0430\u044E\u0449\u0438\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0444\u0438\u043D\u0430\u043D\u0441\u043E\u0432\u044B\u0435 \u043A\u043E\u043C\u043C\u0443\u043D\u0438\u043A\u0430\u0446\u0438\u0438 \u0432\u043E \u0432\u0441\u0451\u043C \u0441\u0432\u043E\u0451\u043C \u043F\u043E\u0440\u0442\u0444\u0435\u043B\u0435.", + "partners.aegis.role": "\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0438\u043D\u0432\u0435\u0441\u0442\u043E\u0440", + "partners.furilabs.desc": "Linux-\u0442\u0435\u043B\u0435\u0444\u043E\u043D\u044B \u0441 \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442\u043E\u043C \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0438, \u043F\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0449\u0438\u0435 SecureBit \u043A\u0430\u043A \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u043A\u0430\u043D\u0430\u043B \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E.", + "partners.furilabs.role": "\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043F\u0430\u0440\u0442\u043D\u0451\u0440", + "partners.inviteTitle": "\u0421\u0442\u0430\u0442\u044C \u043F\u0430\u0440\u0442\u043D\u0451\u0440\u043E\u043C", + "partners.inviteDesc": "\u0421\u043E\u0437\u0434\u0430\u0451\u0442\u0435 \u043E\u0431\u043E\u0440\u0443\u0434\u043E\u0432\u0430\u043D\u0438\u0435 \u0438\u043B\u0438 \u0438\u043D\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u0434\u043B\u044F \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0438? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u043D\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043C SecureBit.", + "partners.inviteCta": "\u041D\u0430\u0447\u0430\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440", + "roadmap.eyebrow": "\u0414\u043E\u0440\u043E\u0436\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u0430", + "roadmap.heading": "\u041A\u0430\u043A \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043B\u0441\u044F SecureBit", + "roadmap.subheading": "\u041E\u0442 \u043F\u0435\u0440\u0432\u043E\u0433\u043E \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u0430 \u0434\u043E \u0434\u0435\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u043E\u0439 \u0441\u0435\u0442\u0438, \u0443\u0441\u0442\u043E\u0439\u0447\u0438\u0432\u043E\u0439 \u043A \u043A\u0432\u0430\u043D\u0442\u043E\u0432\u044B\u043C \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F\u043C, \u0441 \u043F\u043E\u043B\u043D\u043E\u0439 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u043E\u0439 ASN.1 \u043D\u0430 \u043A\u0430\u0436\u0434\u043E\u043C \u0443\u0440\u043E\u0432\u043D\u0435.", + "roadmap.progress": "\u041F\u0440\u043E\u0439\u0434\u0435\u043D\u043E {shipped} \u0438\u0437 {total} \u044D\u0442\u0430\u043F\u043E\u0432", + "roadmap.upcoming": "{upcoming} \u0432\u043F\u0435\u0440\u0435\u0434\u0438", + "roadmap.keyFeatures": "\u041A\u043B\u044E\u0447\u0435\u0432\u044B\u0435 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0438", + "roadmap.status.released": "\u0412\u044B\u043F\u0443\u0449\u0435\u043D\u043E", + "roadmap.status.current": "\u0422\u0435\u043A\u0443\u0449\u0438\u0439", + "roadmap.status.dev": "\u0412 \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u043A\u0435", + "roadmap.status.planned": "\u0417\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E", + "roadmap.status.research": "\u0418\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u0435", + "hero.headlineTop": "\u041F\u0440\u044F\u043C\u0430\u044F \u043B\u0438\u043D\u0438\u044F,", + "hero.headlineBottom": "\u043A\u043E\u0442\u043E\u0440\u0443\u044E \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B \u0434\u0432\u043E\u0435.", + "hero.subheading": "\u041A\u043B\u044E\u0447\u0438 \u0441\u043E\u0437\u0434\u0430\u044E\u0442\u0441\u044F \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435 \u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u044E\u0442\u0441\u044F \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E \u043C\u0435\u0436\u0434\u0443 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430\u043C\u0438. \u0411\u0435\u0437 \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0437\u0430\u043F\u0438\u0441\u0435\u0439 \u0438 \u0431\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043E\u0432, \u0445\u0440\u0430\u043D\u044F\u0449\u0438\u0445 \u0432\u0430\u0448\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F.", + "hero.diagramAlt": "\u041F\u0440\u044F\u043C\u0430\u044F \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u0430\u044F \u043B\u0438\u043D\u0438\u044F \u043A \u043E\u0434\u043D\u043E\u043C\u0443 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0443, \u043A \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u044F\u044E\u0442\u0441\u044F \u0435\u0449\u0451 \u0434\u0432\u043E\u0435", + "intro.createTitle": "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u043A\u0430\u043D\u0430\u043B", + "intro.createDesc": "\u0412\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E \u0441\u043E\u0437\u0434\u0430\u0451\u0442 \u043A\u043B\u044E\u0447\u0438 \u0438 \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u043E\u0435 \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435. \u041D\u0438\u0447\u0442\u043E \u0438\u0437 \u044D\u0442\u043E\u0433\u043E \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.", + "intro.createCta": "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043A\u043B\u044E\u0447\u0438 \u0438 \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435", + "intro.joinTitle": "\u041F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C\u0441\u044F \u043A \u043A\u0430\u043D\u0430\u043B\u0443", + "intro.scanTitle": "\u0421\u043A\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C QR \u043A\u0430\u043C\u0435\u0440\u043E\u0439", + "intro.scanSubtitle": "\u0411\u044B\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043E - \u043D\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430 \u044D\u043A\u0440\u0430\u043D \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0430", + "intro.orPasteCode": "\u0438\u043B\u0438 \u0432\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u0434", + "intro.pastePlaceholder": "\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u0434 \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u044F \u0441\u044E\u0434\u0430\u2026", + "intro.connect": "\u0421\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C\u0441\u044F", + "intro.connecting": "\u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\u2026", + "roadmap.r1.title": "\u041D\u0430\u0447\u0430\u043B\u043E \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u043A\u0438", + "roadmap.r1.sub": "\u0418\u0434\u0435\u044F, \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F \u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0438\u043D\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B", + "roadmap.r1.date": "\u041D\u0430\u0447\u0430\u043B\u043E 2025", + "roadmap.r1.features": [ + "\u0424\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043A\u043E\u043D\u0446\u0435\u043F\u0446\u0438\u0438 \u0438 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u0439", + "\u0412\u044B\u0431\u043E\u0440 \u0441\u0442\u0435\u043A\u0430: WebRTC, P2P, \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u044F", + "\u041F\u0435\u0440\u0432\u044B\u0435 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u044B \u043E\u0431\u043C\u0435\u043D\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u043C\u0438", + "\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F \u0438 CI", + "\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u0430\u0440\u0445\u0438\u0442\u0435\u043A\u0442\u0443\u0440\u0430 \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u044F", + "\u0414\u0438\u0437\u0430\u0439\u043D UX/UI" + ], + "roadmap.r2.title": "\u0410\u043B\u044C\u0444\u0430-\u0432\u0435\u0440\u0441\u0438\u044F", + "roadmap.r2.sub": "\u041F\u0435\u0440\u0432\u0430\u044F \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u0430\u044F \u0430\u043B\u044C\u0444\u0430: \u0431\u0430\u0437\u043E\u0432\u044B\u0439 \u0447\u0430\u0442 \u0438 \u043E\u0431\u043C\u0435\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438", + "roadmap.r2.date": "\u0412\u0435\u0441\u043D\u0430 2025", + "roadmap.r2.features": [ + "\u0411\u0430\u0437\u043E\u0432\u044B\u0439 \u043E\u0431\u043C\u0435\u043D \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u043C\u0438 P2P \u0447\u0435\u0440\u0435\u0437 WebRTC", + "\u041F\u0440\u043E\u0441\u0442\u043E\u0435 \u0441\u043A\u0432\u043E\u0437\u043D\u043E\u0435 \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435 (\u0434\u0435\u043C\u043E\u043D\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u0430\u044F \u0441\u0445\u0435\u043C\u0430)", + "\u0421\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u044B\u0439 \u0441\u0438\u0433\u043D\u0430\u043B\u0438\u043D\u0433 \u0438 \u043F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435", + "\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043B\u044F \u0442\u0435\u0441\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F", + "\u0421\u0431\u043E\u0440 \u043E\u0442\u0437\u044B\u0432\u043E\u0432 \u043E\u0442 \u043F\u0435\u0440\u0432\u044B\u0445 \u0442\u0435\u0441\u0442\u0438\u0440\u043E\u0432\u0449\u0438\u043A\u043E\u0432" + ], + "roadmap.r3.title": "\u0423\u0441\u0438\u043B\u0435\u043D\u043D\u0430\u044F \u0437\u0430\u0449\u0438\u0442\u0430", + "roadmap.r3.sub": "\u0423\u043A\u0440\u0435\u043F\u043B\u0435\u043D\u0438\u0435 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u0438 \u0432\u044B\u043F\u0443\u0441\u043A \u0441\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u043E\u0439 \u0432\u0435\u0442\u043A\u0438", + "roadmap.r3.date": "\u041B\u0435\u0442\u043E 2025", + "roadmap.r3.features": [ + "ECDH/ECDSA \u0432 \u043F\u0440\u043E\u043C\u044B\u0448\u043B\u0435\u043D\u043D\u043E\u0439 \u044D\u043A\u0441\u043F\u043B\u0443\u0430\u0442\u0430\u0446\u0438\u0438", + "\u041F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C \u0438 \u0441\u043C\u0435\u043D\u0430 \u043A\u043B\u044E\u0447\u0435\u0439", + "\u0423\u043B\u0443\u0447\u0448\u0435\u043D\u043D\u044B\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438", + "\u0428\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u043E\u0432 \u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0431\u043E\u043B\u044C\u0448\u0438\u0445 \u043E\u0431\u044A\u0451\u043C\u043E\u0432", + "\u0410\u0443\u0434\u0438\u0442 \u0431\u0430\u0437\u043E\u0432\u044B\u0445 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0432" + ], + "roadmap.r4.title": "\u041C\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0438 \u0441\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u044C", + "roadmap.r4.sub": "\u041C\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u0435\u0442\u0438 \u0438 \u043F\u043E\u0432\u044B\u0448\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u0438", + "roadmap.r4.date": "\u041E\u0441\u0435\u043D\u044C 2025", + "roadmap.r4.features": [ + "\u041E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u044F P2P-\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0439 \u0438 \u043F\u0440\u043E\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u044F NAT", + "\u041C\u0435\u0445\u0430\u043D\u0438\u0437\u043C\u044B \u043F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0438 \u043E\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439", + "\u041C\u0435\u043D\u044C\u0448\u0438\u0439 \u0440\u0430\u0441\u0445\u043E\u0434 \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u043D\u0430 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0445", + "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u043C\u0435\u0436\u0434\u0443 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u043C\u0438 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430\u043C\u0438", + "\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u043C\u043E\u043D\u0438\u0442\u043E\u0440\u0438\u043D\u0433\u0430 \u0438 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u0432" + ], + "roadmap.r5.title": "\u041F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043E", + "roadmap.r5.sub": "\u0424\u043E\u043A\u0443\u0441 \u043D\u0430 \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0438: \u0443\u043C\u0435\u043D\u044C\u0448\u0435\u043D\u0438\u0435 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445", + "roadmap.r5.date": "\u0417\u0438\u043C\u0430 2025", + "roadmap.r5.features": [ + "\u0417\u0430\u0449\u0438\u0442\u0430 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0438 \u0441\u043D\u0438\u0436\u0435\u043D\u0438\u0435 \u043E\u0442\u043F\u0435\u0447\u0430\u0442\u043A\u0430", + "\u042D\u043A\u0441\u043F\u0435\u0440\u0438\u043C\u0435\u043D\u0442\u044B \u0441 \u043B\u0443\u043A\u043E\u0432\u043E\u0439 \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 DHT", + "\u0412\u0430\u0440\u0438\u0430\u043D\u0442\u044B \u0430\u043D\u043E\u043D\u0438\u043C\u043D\u044B\u0445 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0439", + "\u041F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043A\u0430 \u043A \u043E\u0442\u043A\u0440\u044B\u0442\u043E\u043C\u0443 \u0430\u0443\u0434\u0438\u0442\u0443 \u043A\u043E\u0434\u0430", + "\u0423\u043B\u0443\u0447\u0448\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "18-\u0441\u043B\u043E\u0439\u043D\u0430\u044F \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u044F \u0432\u043E\u0435\u043D\u043D\u043E\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F \u0441 \u043F\u043E\u043B\u043D\u043E\u0439 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u043E\u0439 ASN.1", + "roadmap.r6.date": "\u041A\u043E\u043D\u0435\u0446 2025", + "roadmap.r6.features": [ + "\u0422\u0440\u043E\u0439\u043D\u0430\u044F \u0437\u0430\u0449\u0438\u0442\u0430: ECDH + DTLS + SAS", + "\u0428\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435 ECDH P-384 \u0438 AES-GCM 256 \u0431\u0438\u0442", + "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043E\u0442\u043F\u0435\u0447\u0430\u0442\u043A\u0430 DTLS", + "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 SAS (\u043A\u043E\u0440\u043E\u0442\u043A\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438)", + "\u041F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C \u0441\u043E \u0441\u043C\u0435\u043D\u043E\u0439 \u043A\u043B\u044E\u0447\u0435\u0439", + "\u0423\u0441\u0438\u043B\u0435\u043D\u043D\u0430\u044F \u0437\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u0430\u0442\u0430\u043A \xAB\u0447\u0435\u043B\u043E\u0432\u0435\u043A \u043F\u043E\u0441\u0435\u0440\u0435\u0434\u0438\u043D\u0435\xBB", + "\u041F\u043E\u043B\u043D\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 ASN.1 DER", + "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 OID \u0438 \u0442\u043E\u0447\u0435\u043A EC", + "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B SPKI", + "\u0410\u0440\u0445\u0438\u0442\u0435\u043A\u0442\u0443\u0440\u0430 P2P \u043D\u0430 WebRTC", + "\u0417\u0430\u0449\u0438\u0442\u0430 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445", + "100 % \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u043A\u043E\u0434" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "\u041E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0434\u043B\u044F Windows, macOS \u0438 Linux", + "roadmap.r7.date": "\u041D\u0430\u0447\u0430\u043B\u043E 2026", + "roadmap.r7.features": [ + "\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0434\u043B\u044F Windows (Tauri v2)", + "\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0434\u043B\u044F macOS (Tauri v2)", + "AppImage \u0434\u043B\u044F Linux (Tauri v2)", + "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C \u0432\u0440\u0435\u043C\u0435\u043D\u0438", + "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u043F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435", + "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u043C\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430\u043C\u0438", + "\u041E\u0431\u043D\u043E\u0432\u043B\u0451\u043D\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441", + "\u0424\u0430\u0439\u043B\u044B \u0434\u043E 100 \u041C\u0411" + ], + "roadmap.r8.title": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u0433\u043E\u043B\u043E\u0441 \u0438 \u0437\u0432\u043E\u043D\u043A\u0438", + "roadmap.r8.sub": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F, \u0430\u0443\u0434\u0438\u043E- \u0438 \u0432\u0438\u0434\u0435\u043E\u0437\u0432\u043E\u043D\u043A\u0438", + "roadmap.r8.date": "\u041D\u0430\u0447\u0430\u043B\u043E 2026", + "roadmap.r8.features": [ + "\u0413\u043E\u043B\u043E\u0441\u043E\u0432\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0441\u043E \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C", + "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0430\u0443\u0434\u0438\u043E\u0437\u0432\u043E\u043D\u043A\u0438 \u043E\u0434\u0438\u043D \u043D\u0430 \u043E\u0434\u0438\u043D (WebRTC)", + "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0432\u0438\u0434\u0435\u043E\u0437\u0432\u043E\u043D\u043A\u0438 \u043E\u0434\u0438\u043D \u043D\u0430 \u043E\u0434\u0438\u043D (WebRTC)", + "\u041F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C \u0434\u043B\u044F \u0436\u0438\u0432\u043E\u0433\u043E \u043F\u043E\u0442\u043E\u043A\u0430", + "\u041C\u0435\u0434\u0438\u0430\u043F\u043E\u0442\u043E\u043A\u0438 \u043F\u043E\u0434 \u0437\u0430\u0449\u0438\u0442\u043E\u0439 SRTP/DTLS", + "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 SAS \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0437\u0432\u043E\u043D\u043A\u0430", + "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u043E \u0437\u0432\u043E\u043D\u043A\u0430\u0445 \u0438 \u0430\u0432\u0442\u043E\u043F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435", + "\u041C\u0435\u0434\u0438\u0430 P2P \u0441 \u043D\u0438\u0437\u043A\u043E\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043A\u043E\u0439" + ], + "roadmap.r9.title": "\u0413\u0440\u0443\u043F\u043F\u043E\u0432\u043E\u0435 \u043E\u0431\u0449\u0435\u043D\u0438\u0435", + "roadmap.r9.sub": "\u0413\u0440\u0443\u043F\u043F\u043E\u0432\u044B\u0435 \u0447\u0430\u0442\u044B \u0431\u0435\u0437 \u043F\u043E\u0442\u0435\u0440\u0438 \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0438", + "roadmap.r9.date": "\u0421\u0435\u0439\u0447\u0430\u0441", + "roadmap.r9.features": [ + "\u0413\u0440\u0443\u043F\u043F\u043E\u0432\u044B\u0435 \u0447\u0430\u0442\u044B P2P \u0434\u043E 8 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432", + "\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043F\u043E \u0441\u0435\u0442\u0438 \u0441 \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u043D\u044B\u043C relay \u043A\u0430\u043A \u0437\u0430\u043F\u0430\u0441\u043D\u044B\u043C \u043F\u0443\u0442\u0451\u043C", + "\u041E\u0434\u0438\u043D \u043A\u043E\u0434 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u0433\u0440\u0443\u043F\u043F\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0441\u0432\u0435\u0440\u044F\u044E\u0442 \u0432\u0441\u0435", + "\u0426\u0435\u0440\u0435\u043C\u043E\u043D\u0438\u044F \xAB\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u043E, \u043F\u043E\u0442\u043E\u043C \u0440\u0430\u0441\u043A\u0440\u044B\u0442\u0438\u0435\xBB \u043F\u0440\u043E\u0442\u0438\u0432 \u043F\u043E\u0434\u0431\u043E\u0440\u0430 \u043A\u043E\u0434\u043E\u0432", + "\u0421\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u043B\u044E\u0447\u0438 \u043B\u0438\u0447\u043D\u043E\u0441\u0442\u0438 \u0432 \u0433\u0440\u0443\u043F\u043F\u0435, \u044D\u0444\u0435\u043C\u0435\u0440\u043D\u044B\u0435 \u043F\u043E \u0437\u0430\u043C\u044B\u0441\u043B\u0443", + "\u041F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u043D\u043E\u0435 \u0447\u043B\u0435\u043D\u0441\u0442\u0432\u043E \u0441 \u0443\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0438\u0432\u0430\u043D\u0438\u0435\u043C \u043F\u043E \u044D\u043F\u043E\u0445\u0430\u043C", + "\u041F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u043D\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F - \u0440\u0430\u0441\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u0435 \u0432 \u0441\u0442\u0435\u043D\u043E\u0433\u0440\u0430\u043C\u043C\u0435 \u043C\u043E\u0436\u043D\u043E \u0434\u043E\u043A\u0430\u0437\u0430\u0442\u044C", + "\u0411\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0431\u0435\u0437 \u043E\u0431\u0449\u0435\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0433\u0440\u0443\u043F\u043F\u044B, \u0431\u0435\u0437 \u0438\u0441\u0442\u043E\u0440\u0438\u0438" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "\u041E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0434\u043B\u044F iOS \u0438 Android", + "roadmap.r10.date": "II \u043A\u0432\u0430\u0440\u0442\u0430\u043B 2027", + "roadmap.r10.features": [ + "\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0434\u043B\u044F iOS (Swift/SwiftUI)", + "\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0434\u043B\u044F Android (Kotlin/Jetpack Compose)", + "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430 PWA \u0432 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445", + "Push-\u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C \u0432\u0440\u0435\u043C\u0435\u043D\u0438", + "\u041E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u044F \u0440\u0430\u0441\u0445\u043E\u0434\u0430 \u0431\u0430\u0442\u0430\u0440\u0435\u0438", + "\u0418\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043F\u0440\u0438\u0441\u043F\u043E\u0441\u043E\u0431\u043B\u0435\u043D\u043D\u044B\u0439 \u043A \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u043C", + "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u043E\u0444\u043B\u0430\u0439\u043D", + "\u0411\u0438\u043E\u043C\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F" + ], + "roadmap.r11.title": "\u0421\u0442\u043E\u0439\u043A\u043E\u0441\u0442\u044C \u043A \u043A\u0432\u0430\u043D\u0442\u043E\u0432\u044B\u043C \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F\u043C", + "roadmap.r11.sub": "\u0417\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u043A\u0432\u0430\u043D\u0442\u043E\u0432\u044B\u0445 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043E\u0432", + "roadmap.r11.date": "IV \u043A\u0432\u0430\u0440\u0442\u0430\u043B 2027", + "roadmap.r11.features": [ + "\u041F\u043E\u0441\u0442\u043A\u0432\u0430\u043D\u0442\u043E\u0432\u0430\u044F \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u044F CRYSTALS-Kyber", + "\u0426\u0438\u0444\u0440\u043E\u0432\u044B\u0435 \u043F\u043E\u0434\u043F\u0438\u0441\u0438 SPHINCS+", + "\u0413\u0438\u0431\u0440\u0438\u0434\u043D\u0430\u044F \u0441\u0445\u0435\u043C\u0430: \u043A\u043B\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u0438 \u043F\u043E\u0441\u0442\u043A\u0432\u0430\u043D\u0442\u043E\u0432\u0430\u044F", + "\u041A\u0432\u0430\u043D\u0442\u043E\u0432\u043E \u0441\u0442\u043E\u0439\u043A\u0438\u0439 \u043E\u0431\u043C\u0435\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438", + "\u041E\u0431\u043D\u043E\u0432\u043B\u0451\u043D\u043D\u044B\u0435 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u044B \u0445\u0435\u0448\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F", + "\u041C\u0438\u0433\u0440\u0430\u0446\u0438\u044F \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0445 \u0441\u0435\u0430\u043D\u0441\u043E\u0432", + "\u0421\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u043E\u0441\u0442\u044C \u0441 v5.x", + "\u041A\u0432\u0430\u043D\u0442\u043E\u0432\u043E \u0441\u0442\u043E\u0439\u043A\u0438\u0435 \u043F\u0440\u043E\u0442\u043E\u043A\u043E\u043B\u044B" + ], + "roadmap.r12.title": "\u0414\u0435\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u0430\u044F \u0441\u0435\u0442\u044C", + "roadmap.r12.sub": "\u041F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E \u0434\u0435\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u0430\u044F \u0441\u0435\u0442\u044C", + "roadmap.r12.date": "2028", + "roadmap.r12.features": [ + "\u042F\u0447\u0435\u0438\u0441\u0442\u0430\u044F \u0441\u0435\u0442\u044C \u0443\u0437\u043B\u043E\u0432", + "DHT \u0434\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432", + "\u0412\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u0430\u044F \u043B\u0443\u043A\u043E\u0432\u0430\u044F \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044F", + "\u0422\u043E\u043A\u0435\u043D\u043E\u043C\u0438\u043A\u0430 \u0438 \u0441\u0442\u0438\u043C\u0443\u043B\u044B \u0434\u043B\u044F \u0443\u0437\u043B\u043E\u0432", + "\u0423\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 DAO", + "\u0412\u0437\u0430\u0438\u043C\u043E\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u0441\u0435\u0442\u044F\u043C\u0438", + "\u0421\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u043E\u0441\u0442\u044C \u043C\u0435\u0436\u0434\u0443 \u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u0430\u043C\u0438", + "\u0421\u0430\u043C\u043E\u0432\u043E\u0441\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u044E\u0449\u0430\u044F\u0441\u044F \u0441\u0435\u0442\u044C" + ], + "roadmap.r13.title": "\u0418\u0418-\u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A \u043F\u043E \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0438", + "roadmap.r13.sub": "\u0418\u0441\u043A\u0443\u0441\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u043B\u043B\u0435\u043A\u0442 \u0434\u043B\u044F \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u043E\u0441\u0442\u0438 \u0438 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438", + "roadmap.r13.date": "2028+", + "roadmap.r13.features": [ + "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0439 \u0430\u043D\u0430\u043B\u0438\u0437 \u0443\u0433\u0440\u043E\u0437 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0418\u0418", + "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u043E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u0438\u0435 \u0430\u0442\u0430\u043A \xAB\u0447\u0435\u043B\u043E\u0432\u0435\u043A \u043F\u043E\u0441\u0435\u0440\u0435\u0434\u0438\u043D\u0435\xBB", + "\u0410\u0434\u0430\u043F\u0442\u0438\u0432\u043D\u0430\u044F \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u044F", + "\u041F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u0441\u043E\u0432\u0435\u0442\u044B \u043F\u043E \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438", + "\u041C\u0430\u0448\u0438\u043D\u043D\u043E\u0435 \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435 \u0441 \u043D\u0443\u043B\u0435\u0432\u044B\u043C \u0440\u0430\u0437\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435\u043C", + "\u041F\u0440\u0438\u0432\u0430\u0442\u043D\u044B\u0439 \u0418\u0418-\u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A", + "\u041F\u0440\u0435\u0434\u0441\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u044C", + "\u0410\u0432\u0442\u043E\u043D\u043E\u043C\u043D\u0430\u044F \u0437\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u0430\u0442\u0430\u043A" + ], + "handshake.step1": "\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u043F\u0430\u0440\u044B \u043A\u043B\u044E\u0447\u0435\u0439 ECDH P-384", + "handshake.step2": "\u0412\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435 \u043A\u043E\u0434\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438", + "handshake.step3": "\u0417\u0430\u043A\u0440\u0435\u043F\u043B\u0435\u043D\u0438\u0435 \u043F\u0440\u044F\u043C\u043E\u0439 \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u0438", + "handshake.securingTitle": "\u0417\u0430\u0449\u0438\u0449\u0430\u0435\u043C \u0432\u0430\u0448 \u043A\u0430\u043D\u0430\u043B", + "handshake.answerTitle": "\u0413\u043E\u0442\u043E\u0432\u0438\u043C \u0432\u0430\u0448 \u043E\u0442\u0432\u0435\u0442", + "handshake.securingDesc": "\u0421\u043E\u0437\u0434\u0430\u0451\u043C \u043A\u043B\u044E\u0447\u0438, \u0441\u043F\u043E\u0441\u043E\u0431\u043D\u044B\u0435 \u0432\u044B\u0434\u0435\u0440\u0436\u0430\u0442\u044C \u0432\u043C\u0435\u0448\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u043E.", + "handshake.shareTitle": "\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u0435\u0441\u044C \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435\u043C", + "handshake.sendAnswerTitle": "\u041E\u0442\u043F\u0440\u0430\u0432\u044C\u0442\u0435 \u043E\u0442\u0432\u0435\u0442 \u043E\u0431\u0440\u0430\u0442\u043D\u043E", + "handshake.shareDesc": "\u041F\u043E\u043A\u0430\u0436\u0438\u0442\u0435 QR-\u043A\u043E\u0434 \u0438\u043B\u0438 \u043E\u0442\u043F\u0440\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u0434 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0443. \u041E\u043D \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u044B\u0439 \u0438 \u0441\u043A\u043E\u0440\u043E \u0441\u0442\u0430\u043D\u0435\u0442 \u043D\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u043C.", + "handshake.sendAnswerDesc": "\u041F\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u044D\u0442\u043E\u0442 \u043E\u0442\u0432\u0435\u0442 \u0441\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u044E \u043A\u0430\u043D\u0430\u043B\u0430, \u0447\u0442\u043E\u0431\u044B \u043E\u043D \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043B \u0440\u0443\u043A\u043E\u043F\u043E\u0436\u0430\u0442\u0438\u0435.", + "handshake.establish": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435", + "handshake.thenReceive": "\u0417\u0430\u0442\u0435\u043C \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043E\u0442\u0432\u0435\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043F\u0440\u0438\u0448\u043B\u0451\u0442 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A", + "handshake.pasteAnswerPlaceholder": "\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u0434 \u043E\u0442\u0432\u0435\u0442\u0430 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0430\u2026", + "handshake.answerSentNote": "\u041E\u0442\u043F\u0440\u0430\u0432\u044C\u0442\u0435 \u044D\u0442\u043E\u0442 \u043E\u0442\u0432\u0435\u0442 \u0441\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u044E \u0438 \u043F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435 - \u0447\u0430\u0442 \u043E\u0442\u043A\u0440\u043E\u0435\u0442\u0441\u044F, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u043D \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0441\u044F.", + "handshake.qrHint": "\u0414\u0435\u0440\u0436\u0438\u0442\u0435 \u044D\u0442\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C, \u043F\u043E\u043A\u0430 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043D\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043A\u043E\u0434.", + "handshake.qrHintFrames": "\u0420\u0443\u043A\u043E\u043F\u043E\u0436\u0430\u0442\u0438\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u043E \u043D\u0430 {frames} \u043A\u0430\u0434\u0440\u043E\u0432 - \u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u044D\u0442\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C, \u043F\u043E\u043A\u0430 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043D\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0432\u0441\u0435.", + "verify.title": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438", + "verify.desc": "\u0421\u0432\u0435\u0440\u044C\u0442\u0435 \u044D\u0442\u043E\u0442 \u043A\u043E\u0434 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u0441 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u043E\u043C \u043F\u043E \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u043A\u0430\u043D\u0430\u043B\u0443 (\u0433\u043E\u043B\u043E\u0441\u043E\u043C \u0438\u043B\u0438 \u043B\u0438\u0447\u043D\u043E), \u0437\u0430\u0442\u0435\u043C \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0435\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442.", + "verify.enterLabel": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0432\u0435\u0440\u0435\u043D\u043D\u044B\u0439 \u043A\u043E\u0434", + "verify.placeholder": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u043E\u0434 \u0437\u0434\u0435\u0441\u044C", + "verify.confirm": "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u043A\u043E\u0434", + "verify.confirmed": "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u043E", + "verify.mismatch": "\u041D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442", + "verify.yours": "\u0412\u0430\u0448\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435", + "verify.peer": "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0430", + "verify.pending": "\u041E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F", + "verify.waiting": "\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435 \u043A\u043E\u0434\u0430\u2026", + "verify.verified": "\u041A\u0430\u043D\u0430\u043B \u043F\u0440\u043E\u0432\u0435\u0440\u0435\u043D", + "verify.bothConfirmed": "\u041E\u0431\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043B\u0438. \u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u043C \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u0447\u0430\u0442\u2026", + "pwa.bannerTitle": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 SecureBit.chat", + "pwa.bannerDesc": "\u041E\u043F\u044B\u0442 \u043F\u043E\u043B\u043D\u043E\u0446\u0435\u043D\u043D\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0441 \u0443\u0441\u0438\u043B\u0435\u043D\u043D\u043E\u0439 \u0437\u0430\u0449\u0438\u0442\u043E\u0439", + "pwa.install": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C", + "pwa.dismiss": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", + "pwa.close": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", + "pwa.iosTitle": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u043D\u0430 iOS", + "pwa.iosStep1": "\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u043A\u043D\u043E\u043F\u043A\u0443 \xAB\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F\xBB", + "pwa.iosStep1Hint": "\u041E\u0431\u044B\u0447\u043D\u043E \u0432\u043D\u0438\u0437\u0443 Safari", + "pwa.iosStep2": "\u041D\u0430\u0439\u0434\u0438\u0442\u0435 \xAB\u041D\u0430 \u044D\u043A\u0440\u0430\u043D \xAB\u0414\u043E\u043C\u043E\u0439\xBB\xBB", + "pwa.iosStep2Hint": "\u041F\u0440\u043E\u043A\u0440\u0443\u0442\u0438\u0442\u0435 \u043C\u0435\u043D\u044E \xAB\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F\xBB \u0432\u043D\u0438\u0437", + "pwa.iosStep3": "\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \xAB\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\xBB", + "pwa.iosStep3Hint": "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C SecureBit.chat", + "pwa.genericTitle": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C SecureBit", + "pwa.genericDesc": "\u041A\u0430\u0436\u0434\u044B\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442 \u043F\u043E-\u0441\u0432\u043E\u0435\u043C\u0443. \u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0433\u0438, \u043F\u043E\u0434\u0445\u043E\u0434\u044F\u0449\u0438\u0435 \u0432\u0430\u0448\u0435\u043C\u0443.", + "pwa.gotIt": "\u041F\u043E\u043D\u044F\u0442\u043D\u043E", + "pwa.installedTitle": "\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E!", + "pwa.installedIos": "\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0434\u043B\u044F iOS \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E! \u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u0435\u0433\u043E \u0441 \u044D\u043A\u0440\u0430\u043D\u0430 \xAB\u0414\u043E\u043C\u043E\u0439\xBB.", + "pwa.installedGeneric": "SecureBit.chat \u0442\u0435\u043F\u0435\u0440\u044C \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435", + "pwa.anytimeTitle": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432 \u043B\u044E\u0431\u043E\u0439 \u043C\u043E\u043C\u0435\u043D\u0442", + "pwa.anytimeDesc": "\u0412\u044B \u0432\u0441\u0435\u0433\u0434\u0430 \u043C\u043E\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C SecureBit.chat \u0438\u0437 \u043C\u0435\u043D\u044E \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 - \u0442\u0430\u043A \u043E\u043D \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043B\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043E.", + "pwa.ok": "\u0425\u043E\u0440\u043E\u0448\u043E", + "step.open": "\u0428\u0430\u0433 1 \xB7 \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u043A\u0430\u043D\u0430\u043B", + "step.exchange": "\u0428\u0430\u0433 2 \xB7 \u043E\u0431\u043C\u0435\u043D", + "step.verification": "\u0428\u0430\u0433 3 \xB7 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430", + "action.create": "\u0421\u043E\u0437\u0434\u0430\u0442\u044C", + "action.join": "\u041F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C\u0441\u044F", + "action.back": "\u041D\u0430\u0437\u0430\u0434", + "action.copy": "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C", + "action.copied": "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E", + "action.scan": "\u0421\u043A\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C", + "action.downloadDesktop": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435", + "action.advancedSettings": "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", + "cred.offerTag": "\u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \xB7 \u0438\u043B\u0438 \u0441\u043A\u043E\u043F\u0438\u0440\u0443\u0439\u0442\u0435 \u0442\u0435\u043A\u0441\u0442", + "cred.answerTag": "\u043E\u0442\u0432\u0435\u0442 \xB7 \u0438\u043B\u0438 \u0441\u043A\u043E\u043F\u0438\u0440\u0443\u0439\u0442\u0435 \u0442\u0435\u043A\u0441\u0442", + "cred.reveal": "\u041D\u0430\u0436\u043C\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C - \u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u043A\u043E\u0434 \u0432 \u0442\u0430\u0439\u043D\u0435", + "qr.title": "\u0421\u043A\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C QR-\u043A\u043E\u0434", + "qr.subtitle": "\u041D\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u0430\u043C\u0435\u0440\u0443 \u043D\u0430 \u0438\u0445 QR-\u043A\u043E\u0434", + "qr.scanning": "\u0421\u043A\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u2026", + "qr.hint": "\u0414\u0435\u0440\u0436\u0438\u0442\u0435 \u0440\u043E\u0432\u043D\u043E, \u043F\u043E\u043A\u0430 \u043D\u0435 \u0441\u0447\u0438\u0442\u0430\u044E\u0442\u0441\u044F \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438. \u041A\u0430\u043C\u0435\u0440\u0430 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E - \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F.", + "mesh.you": "\u0432\u044B", + "mesh.peer": "\u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \xB7 \u0441\u0435\u0430\u043D\u0441 1", + "mesh.joined2": "\u043B\u0435\u043D\u0430 \u043F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u043B\u0430\u0441\u044C \xB7 +2", + "mesh.joined3": "\u043C\u0438\u0448\u0430 \u043F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u043B\u0441\u044F \xB7 +3", + "ice.title": "\u0421\u0435\u0442\u0435\u0432\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", + "ice.subtitle": "\u041D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E - \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044F \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0443", + "ice.intro": "\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E SecureBit \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 STUN-\u0441\u0435\u0440\u0432\u0435\u0440\u044B, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u044F\u043C\u043E\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435. \u0415\u0441\u043B\u0438 \u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u0441\u0432\u043E\u0438, \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 STUN/TURN.", + "ice.publicTitle": "\u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044B (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E)", + "ice.publicDesc": "\u0411\u0435\u0437 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438. \u041F\u043E\u0434\u0445\u043E\u0434\u0438\u0442 \u0431\u043E\u043B\u044C\u0448\u0438\u043D\u0441\u0442\u0432\u0443.", + "ice.customTitle": "\u0421\u0432\u043E\u0438 STUN/TURN-\u0441\u0435\u0440\u0432\u0435\u0440\u044B", + "ice.customDesc": "\u0414\u043E {max} \u0441\u0435\u0440\u0432\u0435\u0440\u043E\u0432.", + "ice.turnNote": "TURN-relay \u0432\u0438\u0434\u0438\u0442 IP \u043E\u0431\u0435\u0438\u0445 \u0441\u0442\u043E\u0440\u043E\u043D \u0438 \u0440\u0438\u0442\u043C \u0442\u0440\u0430\u0444\u0438\u043A\u0430 - \u043D\u043E \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u043E\u0441\u0442\u0430\u0451\u0442\u0441\u044F \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u043C \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C. \u041B\u0443\u0447\u0448\u0435 ", + "ice.turnNoteTls": " (TLS).", + "ice.test": "\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0441\u0435\u0440\u0432\u0435\u0440\u044B", + "ice.testing": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430\u2026", + "ice.relayTitle": "\u0420\u0435\u0436\u0438\u043C \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0435\u0440\u0435\u0437 relay", + "ice.relayBadge": "\u041C\u0410\u041A\u0421\u0418\u041C\u0423\u041C \u041F\u0420\u0418\u0412\u0410\u0422\u041D\u041E\u0421\u0422\u0418", + "ice.relayDesc": "\u041F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u0432\u0435\u0441\u044C \u0442\u0440\u0430\u0444\u0438\u043A \u0447\u0435\u0440\u0435\u0437 TURN, \u0442\u0430\u043A \u0447\u0442\u043E \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0443\u0432\u0438\u0434\u0438\u0442 \u0432\u0430\u0448\u0435\u0433\u043E IP. \u041D\u0443\u0436\u0435\u043D TURN-\u0441\u0435\u0440\u0432\u0435\u0440.", + "ice.relayWarning": "\u0420\u0435\u0436\u0438\u043C \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0435\u0440\u0435\u0437 relay \u0432\u043A\u043B\u044E\u0447\u0451\u043D, \u043D\u043E TURN-\u0441\u0435\u0440\u0432\u0435\u0440 \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D. \u0421\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u043D\u0435 \u0441\u043C\u043E\u0436\u0435\u0442 \u043D\u0430\u0447\u0430\u0442\u044C\u0441\u044F.", + "ice.persist": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043D\u0430 \u044D\u0442\u043E\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435", + "ice.persistDesc": "\u0425\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u043E \u0432 \u044D\u0442\u043E\u043C \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u043E\u0432\u0430\u043B\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u044D\u0442\u043E\u043C \u0441\u0435\u0430\u043D\u0441\u0435.", + "ice.forget": "\u0417\u0430\u0431\u044B\u0442\u044C \u0441\u043E\u0445\u0440\u0430\u043D\u0451\u043D\u043D\u043E\u0435", + "ice.cancel": "\u041E\u0442\u043C\u0435\u043D\u0430", + "ice.apply": "\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C", + "ice.errUnavailable": "WebRTC \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0432 \u044D\u0442\u043E\u043C \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435", + "ice.errInvalid": "\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u0441\u0435\u0440\u0432\u0435\u0440\u0430", + "update.title": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435", + "update.desc": "\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u0430 \u0431\u043E\u043B\u0435\u0435 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F SecureBit.", + "update.currentVersion": "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F", + "update.newVersion": "\u041D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F", + "update.now": "\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u0435\u0439\u0447\u0430\u0441", + "update.later": "\u041F\u043E\u0437\u0436\u0435", + "update.unknown": "\u043D/\u0434", + "update.stepSaving": "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0445\u2026", + "update.stepSwCaches": "\u041E\u0447\u0438\u0441\u0442\u043A\u0430 \u043A\u0435\u0448\u0435\u0439 Service Worker\u2026", + "update.stepSwUnregister": "\u041E\u0442\u043C\u0435\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 Service Worker\u2026", + "update.stepBrowserCache": "\u041E\u0447\u0438\u0441\u0442\u043A\u0430 \u043A\u0435\u0448\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u2026", + "update.stepVersion": "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438\u2026", + "update.stepReload": "\u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u2026", + "update.error": "\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F. \u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0432\u0440\u0443\u0447\u043D\u0443\u044E (Ctrl+F5 \u0438\u043B\u0438 Cmd+Shift+R)", + "update.confirmSkip": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F. \u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u0438 \u0441\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u0438. \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0431\u0435\u0437 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F?", + "offline.backOnline": "\u0421\u043D\u043E\u0432\u0430 \u043E\u043D\u043B\u0430\u0439\u043D", + "offline.mode": "\u0420\u0435\u0436\u0438\u043C \u043E\u0444\u043B\u0430\u0439\u043D", + "offline.dismiss": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", + "offline.lostTitle": "\u0421\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u043F\u043E\u0442\u0435\u0440\u044F\u043D\u043E", + "offline.lostDesc": "SecureBit \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043E\u0444\u043B\u0430\u0439\u043D. \u041A\u043E\u0435-\u0447\u0442\u043E \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u043E, \u043D\u043E \u0432\u0430\u0448\u0438 \u0434\u0430\u043D\u043D\u044B\u0435 \u0432 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438.", + "offline.point1": "\u0412\u0430\u0448 \u0441\u0435\u0430\u043D\u0441 \u0438 \u043A\u043B\u044E\u0447\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B", + "offline.point2": "\u041D\u0438\u043A\u0430\u043A\u0438\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445", + "offline.point3": "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0438 \u0444\u0430\u0439\u043B\u044B \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0438\u0440\u0443\u044E\u0442\u0441\u044F \u043F\u043E\u0441\u043B\u0435 \u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0441\u0432\u044F\u0437\u0438", + "offline.continue": "\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u043E\u0444\u043B\u0430\u0439\u043D", + "offline.restoredTitle": "\u041A\u043E\u0433\u0434\u0430 \u0441\u0432\u044F\u0437\u044C \u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F", + "offline.restoredDesc": "\u041E\u0431\u0440\u044B\u0432 \u0441\u0432\u044F\u0437\u0438 \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0441\u0442\u043E\u0438\u0442. SecureBit \u0441\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u0442 \u0432\u0441\u0451 \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E \u0432 \u043E\u0447\u0435\u0440\u0435\u0434\u044C \u0438 \u0432\u043E\u0437\u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0441\u0435\u0430\u043D\u0441, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B \u0441\u043D\u043E\u0432\u0430 \u043E\u043D\u043B\u0430\u0439\u043D.", + "offline.r1Title": "\u0412\u0430\u0448\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0434\u043E\u0439\u0434\u0443\u0442", + "offline.r1Desc": "\u0412\u0441\u0451, \u0447\u0442\u043E \u0432\u044B \u043D\u0430\u043F\u0438\u0441\u0430\u043B\u0438 \u043E\u0444\u043B\u0430\u0439\u043D, \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0443 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438.", + "offline.r2Title": "\u0424\u0430\u0439\u043B\u044B \u0434\u043E\u0437\u0430\u0433\u0440\u0443\u0437\u044F\u0442\u0441\u044F", + "offline.r2Desc": "\u041F\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u0441\u044F \u0441 \u043C\u0435\u0441\u0442\u0430 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 - \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0442\u044C \u0437\u0430\u043D\u043E\u0432\u043E \u043D\u0435 \u043D\u0443\u0436\u043D\u043E.", + "offline.r3Title": "\u0418\u0445 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0438 \u0444\u0430\u0439\u043B\u044B \u043F\u0440\u0438\u0434\u0443\u0442", + "offline.r3Desc": "\u0412\u0441\u0451, \u0447\u0442\u043E \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u043B \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u0435\u0440\u0435\u0440\u044B\u0432\u0430, \u043F\u0440\u0438\u0434\u0451\u0442 \u0432\u0430\u043C \u043F\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0443.", + "offline.r4Title": "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0442\u0435\u0440\u044F\u0435\u0442\u0441\u044F", + "offline.r4Desc": "\u041F\u043E\u0441\u043B\u0435 \u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0441\u0432\u044F\u0437\u0438 \u0440\u0430\u0437\u0440\u044B\u0432\u0430 \u043D\u0435 \u043E\u0441\u0442\u0430\u0451\u0442\u0441\u044F - \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0435\u0442\u0441\u044F \u0440\u043E\u0432\u043D\u043E \u0441 \u0442\u043E\u0433\u043E \u043C\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u043B\u0441\u044F.", + "offline.gotIt": "\u041F\u043E\u043D\u044F\u0442\u043D\u043E", + "qr.showTitle": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C QR-\u043A\u043E\u0434", + "qr.showSubtitle": "\u041D\u0430 \u0432\u0435\u0441\u044C \u044D\u043A\u0440\u0430\u043D \xB7 \u043F\u0443\u0441\u0442\u044C \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u0443\u0435\u0442", + "qr.showSubtitleFrames": "\u041D\u0430 \u0432\u0435\u0441\u044C \u044D\u043A\u0440\u0430\u043D \xB7 \u043F\u0443\u0441\u0442\u044C \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 {frames} \u043A\u0430\u0434\u0440\u043E\u0432", + "notify.enabledBody": "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u044B. \u0412\u044B \u0431\u0443\u0434\u0435\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u044F \u043E \u043D\u043E\u0432\u044B\u0445 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u0445.", + "notify.workingBody": "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442. \u0412\u044B \u0431\u0443\u0434\u0435\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u044F \u043E \u043D\u043E\u0432\u044B\u0445 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u0445.", + "pw.label": "\u041F\u043E\u043B\u0435 \u043F\u0430\u0440\u043E\u043B\u044F", + "pw.placeholder": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u0430\u0440\u043E\u043B\u044C\u2026", + "pw.decrypt": "\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u0442\u044C", + "pw.cancel": "\u041E\u0442\u043C\u0435\u043D\u0430", + "file.title": "\u041F\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0444\u0430\u0439\u043B\u043E\u0432", + "file.drop": "\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B \u0441\u044E\u0434\u0430", + "file.dropHint": "\u0428\u0438\u0444\u0440\u0443\u044E\u0442\u0441\u044F \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C \u043F\u0435\u0440\u0435\u0434 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \xB7 \u0434\u043E 100 \u041C\u0411", + "file.browse": "\u041E\u0431\u0437\u043E\u0440 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430", + "file.incoming": "\u0412\u0445\u043E\u0434\u044F\u0449\u0438\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u0444\u0430\u0439\u043B", + "file.accept": "\u041F\u0440\u0438\u043D\u044F\u0442\u044C", + "file.reject": "\u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C", + "file.download": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C", + "file.notReady": "\u0421\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u0435\u0449\u0451 \u043D\u0435 \u0433\u043E\u0442\u043E\u0432\u043E", + "file.tooLarge": "\u0424\u0430\u0439\u043B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439", + "file.typeNotAllowed": "\u0422\u0438\u043F \u0444\u0430\u0439\u043B\u0430 \u043D\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043D", + "file.maxConcurrent": "\u0414\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442 \u043F\u0440\u0435\u0434\u0435\u043B \u043E\u0434\u043D\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445 \u043F\u0435\u0440\u0435\u0434\u0430\u0447", + "file.gone": "\u042D\u0442\u043E\u0442 \u0444\u0430\u0439\u043B \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0434\u043B\u044F \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u044F.", + "call.incoming": "\u0412\u0445\u043E\u0434\u044F\u0449\u0438\u0439 \u0437\u0432\u043E\u043D\u043E\u043A", + "call.incomingVideo": "\u0412\u0445\u043E\u0434\u044F\u0449\u0438\u0439 \u0432\u0438\u0434\u0435\u043E\u0437\u0432\u043E\u043D\u043E\u043A", + "call.encrypted": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0437\u0432\u043E\u043D\u043E\u043A", + "call.encryptedShort": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E", + "call.peer": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A", + "call.connecting": "\u0421\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435\u2026", + "call.ringing": "\u0412\u044B\u0437\u043E\u0432\u2026", + "call.accept": "\u041F\u0440\u0438\u043D\u044F\u0442\u044C", + "call.decline": "\u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C", + "call.end": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C \u0437\u0432\u043E\u043D\u043E\u043A", + "call.camera": "\u041A\u0430\u043C\u0435\u0440\u0430", + "call.cameraOff": "\u041A\u0430\u043C\u0435\u0440\u0430 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0430", + "call.peerCameraOff": "\u041A\u0430\u043C\u0435\u0440\u0430 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0430 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0430", + "call.flipCamera": "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u043C\u0435\u0440\u0443", + "call.addVideo": "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0438\u0434\u0435\u043E", + "call.video": "\u0412\u0438\u0434\u0435\u043E", + "call.muted": "\u0411\u0435\u0437 \u0437\u0432\u0443\u043A\u0430", + "call.expand": "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C", + "call.minimize": "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C", + "call.quality": "\u041A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F", + "call.qualityExcellent": "\u041E\u0442\u043B\u0438\u0447\u043D\u043E\u0435", + "call.videoPrefix": "\u0412\u0438\u0434\u0435\u043E \xB7 ", + "call.voicePrefix": "\u0413\u043E\u043B\u043E\u0441 \xB7 ", + "group.new": "\u041D\u043E\u0432\u0430\u044F \u0433\u0440\u0443\u043F\u043F\u0430", + "group.create": "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0433\u0440\u0443\u043F\u043F\u0443", + "group.join": "\u041F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C\u0441\u044F \u043A \u0433\u0440\u0443\u043F\u043F\u0435", + "group.name": "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0433\u0440\u0443\u043F\u043F\u044B", + "group.nameTooLong": "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0433\u0440\u0443\u043F\u043F\u044B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0434\u043B\u0438\u043D\u043D\u043E\u0435.", + "group.capacity": "\u0414\u043E {max} \u0447\u0435\u043B\u043E\u0432\u0435\u043A, \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E \u043C\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430\u043C\u0438. \u0412\u0441\u0435 \u0441\u0432\u0435\u0440\u044F\u0442 \u043E\u0434\u0438\u043D \u043A\u043E\u0434 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438, \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u0433\u0440\u0443\u043F\u043F\u0430 \u043E\u0442\u043A\u0440\u043E\u0435\u0442\u0441\u044F.", + "group.invite": "\u041F\u0440\u0438\u0433\u043B\u0430\u0441\u0438\u0442\u044C", + "group.inviteMore": "\u041F\u0440\u0438\u0433\u043B\u0430\u0441\u0438\u0442\u044C \u0435\u0449\u0451 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432", + "group.invitePeople": "\u041F\u0440\u0438\u0433\u043B\u0430\u0441\u0438\u0442\u044C {count} \u0447\u0435\u043B\u043E\u0432\u0435\u043A", + "group.invitation": "\u041F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435 \u0432 \u0433\u0440\u0443\u043F\u043F\u0443", + "group.addMembers": "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432", + "group.roomFor": "\u0415\u0441\u0442\u044C \u043C\u0435\u0441\u0442\u043E \u0435\u0449\u0451 \u0434\u043B\u044F {remaining}. \u041F\u043E\u0441\u043B\u0435 \u043F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0432\u0441\u0435 \u0441\u0432\u0435\u0440\u044F\u0442 \u043D\u043E\u0432\u044B\u0439 \u043A\u043E\u0434 \u0433\u0440\u0443\u043F\u043F\u044B.", + "group.membersCount": "{count} \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432", + "group.member": "\u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A", + "group.members": "\u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438", + "group.remove": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C {name}", + "group.message": "\u041D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 \xAB{name}\xBB", + "group.leave": "\u0412\u044B\u0439\u0442\u0438", + "group.leaveThis": "\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u044D\u0442\u043E\u0439 \u0433\u0440\u0443\u043F\u043F\u044B", + "group.cancel": "\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0433\u0440\u0443\u043F\u043F\u0443", + "group.close": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", + "group.cancelBtn": "\u041E\u0442\u043C\u0435\u043D\u0430", + "group.decline": "\u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C", + "group.working": "\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F\u2026", + "group.sasTitle": "\u041A\u043E\u0434 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u0433\u0440\u0443\u043F\u043F\u044B", + "group.sasEveryone": "\u042D\u0442\u043E\u0442 \u043A\u043E\u0434 \u0432\u0438\u0434\u044F\u0442 \u0432\u0441\u0435", + "group.sasCompare": "\u0421\u0432\u0435\u0440\u044C\u0442\u0435 \u043A\u043E\u0434 \u0433\u0440\u0443\u043F\u043F\u044B \u0441 \u043A\u0430\u0436\u0434\u044B\u043C \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u043C, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0433\u0440\u0443\u043F\u043F\u0443.", + "group.sasReadAloud": "\u041F\u0440\u043E\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u044D\u0442\u0438 \u0446\u0438\u0444\u0440\u044B \u0432\u0441\u043B\u0443\u0445 \u0434\u043B\u044F ", + "group.sasWarning": "\u0415\u0441\u043B\u0438 \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u0438\u043D \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u043E\u0439 \u043A\u043E\u0434, \u043C\u0435\u0436\u0434\u0443 \u0432\u0430\u043C\u0438 \u043A\u0442\u043E-\u0442\u043E \u0435\u0441\u0442\u044C. \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u0435 \u0433\u0440\u0443\u043F\u043F\u0443 - \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0439\u0442\u0435.", + "group.confirmFirst": "\u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043A\u043E\u0434 \u0433\u0440\u0443\u043F\u043F\u044B", + "group.codeSuffix": " \xB7 \u043A\u043E\u0434 {code}", + "group.exchangingNonces": "\u041E\u0431\u043C\u0435\u043D \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u044B\u043C\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u043C\u0438\u2026", + "group.waitingCommit": "\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432 \u043E\u0442 \u0432\u0441\u0435\u0445 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432\u2026", + "group.waitingJoin": "\u041E\u0436\u0438\u0434\u0430\u043D\u0438\u0435 \u043F\u0440\u0438\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0445 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432\u2026", + "group.emptyChat": "\u0417\u0434\u0435\u0441\u044C \u043F\u043E\u043A\u0430 \u043D\u0438\u0447\u0435\u0433\u043E. \u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u044B \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u0435\u043B\u0435\u043C \u0438 \u0438\u0434\u0443\u0442 \u043F\u043E \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C\u0443 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u043C\u0443 \u043A\u0430\u043D\u0430\u043B\u0443 \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430.", + "group.noVerified": "\u041F\u043E\u043A\u0430 \u043D\u0435\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043D\u044B\u0445 \u0447\u0430\u0442\u043E\u0432. \u0421\u043D\u0430\u0447\u0430\u043B\u0430 \u043E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u0438 \u0441\u0432\u0435\u0440\u044C\u0442\u0435 \u0435\u0433\u043E \u043A\u043E\u0434 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 - \u0433\u0440\u0443\u043F\u043F\u0430 \u0441\u0442\u0440\u043E\u0438\u0442\u0441\u044F \u0438\u0437 \u0443\u0436\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043D\u044B\u0445 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0439.", + "group.noMoreToAdd": "\u0414\u0440\u0443\u0433\u0438\u0445 \u043F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043D\u044B\u0445 \u0447\u0430\u0442\u043E\u0432 \u043D\u0435\u0442. \u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u0438 \u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u0432\u0435\u0440\u044C\u0442\u0435 \u0435\u0433\u043E \u043A\u043E\u0434 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438.", + "group.directLink": "\u041F\u0440\u044F\u043C\u043E\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u043C\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430\u043C\u0438", + "group.noDirectLink": "\u041F\u0440\u044F\u043C\u043E\u0433\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0435\u0449\u0451 \u043D\u0435\u0442 - \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0440\u0443\u0433\u043E\u0439 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A, \u043F\u043E\u043A\u0430 \u043E\u043D\u043E \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u0442\u0441\u044F", + "group.relayNote": "\u0421 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u043C\u0438 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430\u043C\u0438 \u043F\u0440\u044F\u043C\u043E\u0433\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0435\u0449\u0451 \u043D\u0435\u0442. \u0418\u0445 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0443\u0433\u043E\u0433\u043E \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043E \u0432\u044B \u043E\u0431\u0449\u0430\u0435\u0442\u0435\u0441\u044C, \u043D\u043E \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u043D\u0438 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C, \u043D\u0438 \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0435. \u0413\u0440\u0443\u043F\u043F\u0430 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0435\u0442 \u0441\u043E\u0435\u0434\u0438\u043D\u044F\u0442\u044C \u0438\u0445 \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E.", + "group.relayOnlyOff": "\u0420\u0435\u0436\u0438\u043C \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0435\u0440\u0435\u0437 relay \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043A\u0430\u0436\u0434\u044B\u0439 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A \u0441\u043E\u0435\u0434\u0438\u043D\u044F\u0435\u0442\u0441\u044F \u0441 \u0432\u0430\u043C\u0438 \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E \u0438 \u0443\u0437\u043D\u0430\u0451\u0442 \u0432\u0430\u0448 IP-\u0430\u0434\u0440\u0435\u0441 - \u0432 \u0442\u043E\u043C \u0447\u0438\u0441\u043B\u0435 \u0442\u0435, \u043A\u043E\u0433\u043E \u043F\u0440\u0438\u0433\u043B\u0430\u0441\u0438\u043B \u043A\u0442\u043E-\u0442\u043E \u0434\u0440\u0443\u0433\u043E\u0439. \u0412\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u0435\u0433\u043E \u0432 \u0441\u0435\u0442\u0435\u0432\u044B\u0445 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445, \u0435\u0441\u043B\u0438 \u044D\u0442\u043E \u0432\u0430\u0436\u043D\u043E.", + "group.memberOffline": "{name} \u043E\u0444\u043B\u0430\u0439\u043D \u0438 \u043D\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439. \u0423\u0447\u0430\u0441\u0442\u0438\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442\u0441\u044F - \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u0432\u044B\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u043A\u043B\u044E\u0447\u0438 \u0433\u0440\u0443\u043F\u043F\u044B.", + "group.joinNote": "\u0414\u0440\u0443\u0433\u0438\u0435 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438 \u0443\u0437\u043D\u0430\u044E\u0442, \u0447\u0442\u043E \u0432\u044B \u0432 \u044D\u0442\u043E\u0439 \u0433\u0440\u0443\u043F\u043F\u0435. \u0418\u0441\u0442\u043E\u0440\u0438\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u043D\u0435\u0442 - \u0433\u0440\u0443\u043F\u043F\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u043F\u0443\u0441\u0442\u043E\u0439.", + "group.inviteSentNote": "\u0413\u0440\u0443\u043F\u043F\u0430 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0434\u0430\u043B\u044C\u0448\u0435, \u043F\u043E\u043A\u0430 \u043E\u043D\u0438 \u043D\u0435 \u043F\u0440\u0438\u043C\u0443\u0442. \u0418\u0441\u0442\u043E\u0440\u0438\u0438 \u0434\u043B\u044F \u043D\u0438\u0445 \u043D\u0435\u0442 - \u043E\u043D\u0438 \u0443\u0432\u0438\u0434\u044F\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u0442\u043E, \u0447\u0442\u043E \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u0441 \u044D\u0442\u043E\u0433\u043E \u043C\u043E\u043C\u0435\u043D\u0442\u0430.", + "group.errNotCreated": "\u0413\u0440\u0443\u043F\u043F\u0430 \u043D\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u0430", + "group.errNobodyAccepted": "\u041D\u0438\u043A\u0442\u043E \u043D\u0435 \u043F\u0440\u0438\u043D\u044F\u043B \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435 \u0432\u043E\u0432\u0440\u0435\u043C\u044F.", + "group.errNothingSent": "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u0438 \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043E. \u0417\u0430\u043A\u0440\u043E\u0439\u0442\u0435 \u044D\u0442\u043E \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430, \u043A\u043E\u0433\u0434\u0430 \u0432\u0441\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0442\u0441\u044F.", + "group.errNotFormed": "\u042D\u0442\u0443 \u0433\u0440\u0443\u043F\u043F\u0443 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C.", + "group.errFull": "\u042D\u0442\u0430 \u0433\u0440\u0443\u043F\u043F\u0430 \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u0430.", + "group.errInviteFailed": "\u041F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C - \u0442\u043E\u0442 \u0447\u0430\u0442 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D.", + "group.errNoMemberList": "\u0412\u043B\u0430\u0434\u0435\u043B\u0435\u0446 \u0433\u0440\u0443\u043F\u043F\u044B \u0442\u0430\u043A \u0438 \u043D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u043B \u0441\u043F\u0438\u0441\u043E\u043A \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432.", + "group.errUnsignedList": "\u0421\u043F\u0438\u0441\u043E\u043A \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432 \u043D\u0435 \u043F\u043E\u0434\u043F\u0438\u0441\u0430\u043D \u0432\u043B\u0430\u0434\u0435\u043B\u044C\u0446\u0435\u043C \u0433\u0440\u0443\u043F\u043F\u044B. \u041D\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0439\u0442\u0435 - \u0441\u043A\u0430\u0436\u0438\u0442\u0435 \u0438\u043C.", + "group.errNotOwner": "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u043E\u0441\u0442\u0430\u0432 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432 \u043F\u044B\u0442\u0430\u043B\u0441\u044F \u043D\u0435 \u0432\u043B\u0430\u0434\u0435\u043B\u0435\u0446 \u0433\u0440\u0443\u043F\u043F\u044B.", + "hdr.tagline": "\u0421\u043A\u0432\u043E\u0437\u043D\u043E\u0435 \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435", + "hdr.netSettings": "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0441\u0435\u0442\u0435\u0432\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", + "hdr.netSettingsTitle": "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0441\u0435\u0442\u0435\u0432\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 (STUN/TURN)", + "hdr.disconnect": "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F", + "status.connected": "\u0421\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u043E", + "status.connecting": "\u0421\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435\u2026", + "status.notConnected": "\u041D\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u043E", + "status.reconnecting": "\u041F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u2026", + "status.retrying": "\u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u043E\u043F\u044B\u0442\u043A\u0438\u2026", + "status.verifying": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430\u2026", + "status.peerDisconnected": "\u0421\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u043B\u0441\u044F", + "sec.replayProtection": "\u0417\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u043F\u043E\u0432\u0442\u043E\u0440\u043E\u0432", + "sec.messageIntegrity": "\u0426\u0435\u043B\u043E\u0441\u0442\u043D\u043E\u0441\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 (HMAC)", + "sec.forwardSecrecy": "\u0421\u043E\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C", + "sec.metadataProtection": "\u0417\u0430\u0449\u0438\u0442\u0430 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445", + "sec.trafficObfuscation": "\u041C\u0430\u0441\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0442\u0440\u0430\u0444\u0438\u043A\u0430", + "sec.realTests": "\u041D\u0430\u0441\u0442\u043E\u044F\u0449\u0438\u0435 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438", + "sec.simulatedData": "\u0421\u043C\u043E\u0434\u0435\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435", + "sec.testPassed": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043F\u0440\u043E\u0439\u0434\u0435\u043D\u0430", + "sec.testFailed": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043D\u0435 \u043F\u0440\u043E\u0439\u0434\u0435\u043D\u0430 \u0438\u043B\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430", + "sec.verificationDone": "\u041D\u0430\u0441\u0442\u043E\u044F\u0449\u0430\u044F \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430", + "sec.verificationInProgress": "\u0418\u0434\u0451\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438\u2026", + "sec.verificationWait": "\u0418\u0434\u0451\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438\u2026\n\u041F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435, \u043F\u043E\u043A\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044F \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C \u0432\u0440\u0435\u043C\u0435\u043D\u0438.", + "sec.verificationUnavailable": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430", + "chat.placeholder": "\u041D\u0430\u043F\u0438\u0448\u0438\u0442\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\u2026", + "chat.send": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435", + "chat.sendFiles": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0444\u0430\u0439\u043B\u044B", + "chat.hideFiles": "\u0421\u043A\u0440\u044B\u0442\u044C \u0444\u0430\u0439\u043B\u044B", + "chat.recordVoice": "\u0417\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435", + "chat.sendVoice": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435", + "chat.discard": "\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C", + "chat.codeBlock": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u043A \u0431\u043B\u043E\u043A \u043A\u043E\u0434\u0430 (\u0440\u0430\u0441\u0448\u0438\u0440\u044F\u0435\u0442 \u043F\u043E\u043B\u0435)", + "chat.codeHint": "\u0424\u0440\u0430\u0433\u043C\u0435\u043D\u0442 \u043A\u043E\u0434\u0430 \xB7 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043E \xB7 \u2318\u21B5 \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C", + "chat.viewOnce": "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043E\u0434\u0438\u043D \u0440\u0430\u0437", + "chat.viewOnceTitle": "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043E\u0434\u0438\u043D \u0440\u0430\u0437 - \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442, \u043A\u0430\u043A \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0435\u0442", + "chat.viewOncePrefix": "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043E\u0434\u0438\u043D \u0440\u0430\u0437 \xB7 ", + "chat.viewOnceTap": "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043E\u0434\u0438\u043D \u0440\u0430\u0437 \xB7 \u043A\u043E\u0441\u043D\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C", + "chat.viewedOnce": "\u0423\u0436\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u043E", + "chat.disappearing": "\u0418\u0441\u0447\u0435\u0437\u0430\u044E\u0449\u0435\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 - \u0443\u0434\u0430\u043B\u044F\u0435\u0442\u0441\u044F \u0441 \u043E\u0431\u0435\u0438\u0445 \u0441\u0442\u043E\u0440\u043E\u043D", + "chat.disappearAfter": "\u0418\u0441\u0447\u0435\u0437\u043D\u0435\u0442 \u0447\u0435\u0440\u0435\u0437", + "chat.visibleFor": "\u0412\u0438\u0434\u043D\u043E", + "chat.timerPrefix": "\u0422\u0430\u0439\u043C\u0435\u0440 \xB7 ", + "chat.expired": "\u042D\u0442\u043E \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0438\u0441\u0442\u0435\u043A\u043B\u043E", + "chat.deleteForEveryone": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0443 \u0432\u0441\u0435\u0445", + "chat.sending": "\u041E\u0442\u043F\u0440\u0430\u0432\u043A\u0430", + "chat.delivered": "\u0414\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E", + "chat.notSent": "\u041D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E", + "chat.notSentReason": "\u041D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E - \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u043A\u0430\u043D\u0430\u043B \u043D\u0435 \u0433\u043E\u0442\u043E\u0432. \u041F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C.", + "chat.encrypted": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E", + "chat.decrypted": "\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E", + "chat.encryptedOnDevice": "\u0417\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435", + "chat.uploading": "\u041E\u0442\u043F\u0440\u0430\u0432\u043A\u0430", + "chat.downloading": "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430", + "chat.transferring": "\u041F\u0435\u0440\u0435\u0434\u0430\u0447\u0430\u2026", + "chat.copied": "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E!", + "chat.collapse": "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C", + "chat.closeMenu": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043C\u0435\u043D\u044E", + "chat.newChat": "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442", + "chat.newGroup": "\u041D\u043E\u0432\u0430\u044F \u0433\u0440\u0443\u043F\u043F\u0430", + "chat.createGroup": "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0433\u0440\u0443\u043F\u043F\u0443", + "chat.groupChats": "\u0413\u0440\u0443\u043F\u043F\u043E\u0432\u044B\u0435 \u0447\u0430\u0442\u044B", + "chat.secureChat": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u0447\u0430\u0442", + "chat.nameThis": "\u041D\u0430\u0437\u043E\u0432\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u0447\u0430\u0442", + "chat.rename": "\u041F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u044C \u0447\u0430\u0442 (\u0442\u043E\u043B\u044C\u043A\u043E \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E)", + "chat.renameHint": "\u0414\u0432\u0430\u0436\u0434\u044B \u0449\u0451\u043B\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u044C", + "chat.localLabel": "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \xB7 \u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0430 \u044D\u0442\u043E\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435", + "chat.setStatus": "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0441\u0432\u043E\u0439 \u0441\u0442\u0430\u0442\u0443\u0441", + "chat.yourStatusPrefix": "\u0412\u0430\u0448 \u0441\u0442\u0430\u0442\u0443\u0441 - ", + "chat.meshHint": "\u0414\u043E 8 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432 \xB7 P2P-\u0441\u0435\u0442\u044C", + "chat.offline": "\u041E\u0444\u043B\u0430\u0439\u043D", + "chat.noNetwork": "\u041D\u0435\u0442 \u0441\u0435\u0442\u0438 \xB7 \u043F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435", + "chat.startVoiceCall": "\u041D\u0430\u0447\u0430\u0442\u044C \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0437\u0432\u043E\u043D\u043E\u043A", + "chat.startVideoCall": "\u041D\u0430\u0447\u0430\u0442\u044C \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0432\u0438\u0434\u0435\u043E\u0437\u0432\u043E\u043D\u043E\u043A", + "chat.verifyForCalls": "\u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u0441\u0435\u0430\u043D\u0441, \u0447\u0442\u043E\u0431\u044B \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0437\u0432\u043E\u043D\u043A\u0438", + "chat.e2eeNote": "\u041A\u0430\u0436\u0434\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044F \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C \u043D\u0430 \u0432\u0430\u0448\u0435\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435, \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u0443\u0439\u0442\u0438.", + "chat.peersOnly": "\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0441\u043A\u0432\u043E\u0437\u043D\u044B\u043C \u043E\u0431\u0440\u0430\u0437\u043E\u043C \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u044B\u043C \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430\u043C - \u043D\u0438\u043A\u043E\u0433\u0434\u0430 \u043D\u0435 \u0445\u0440\u0430\u043D\u0438\u0442\u0441\u044F \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.", + "flow.invitationCreated": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u0435 \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u043E", + "flow.invitationCreatedBang": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u0435 \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u043E \u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043E.", + "flow.responseCreated": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0441\u043E\u0437\u0434\u0430\u043D", + "flow.responseCreatedBang": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0441\u043E\u0437\u0434\u0430\u043D.", + "flow.sendInvitation": "\u041E\u0442\u043F\u0440\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u0434 \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u044F \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0443 \u043F\u043E \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u043C\u0443 \u043A\u0430\u043D\u0430\u043B\u0443 (\u0437\u0432\u043E\u043D\u043E\u043A, SMS \u0438 \u0442. \u043F.).", + "flow.sendResponse": "\u041E\u0442\u043F\u0440\u0430\u0432\u044C\u0442\u0435 \u043A\u043E\u0434 \u043E\u0442\u0432\u0435\u0442\u0430 \u0438\u043D\u0438\u0446\u0438\u0430\u0442\u043E\u0440\u0443 \u043F\u043E \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u043C\u0443 \u043A\u0430\u043D\u0430\u043B\u0443 \u0438\u043B\u0438 \u0434\u0430\u0439\u0442\u0435 \u0435\u043C\u0443 \u043E\u0442\u0441\u043A\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C QR-\u043A\u043E\u0434 \u043D\u0438\u0436\u0435.", + "flow.sendEncryptedCode": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0437\u0430\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u043A\u043E\u0434", + "flow.sendTheResponse": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u043E\u0442\u0432\u0435\u0442", + "flow.pasteOrWrite": "\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0438\u043B\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u043E\u0434\u2026", + "flow.processingInvitation": "\u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u0433\u043E \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u044F\u2026", + "flow.processingResponse": "\u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u0433\u043E \u043E\u0442\u0432\u0435\u0442\u0430\u2026", + "flow.finalizing": "\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0435 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u0433\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u2026", + "flow.channelEstablished": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u043A\u0430\u043D\u0430\u043B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D", + "flow.channelReady": "\u0417\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u044B\u0439 \u043A\u0430\u043D\u0430\u043B \u0433\u043E\u0442\u043E\u0432", + "flow.restoring": "\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u2026", + "flow.invitationCaptured": "\u041F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435 \u0441\u0447\u0438\u0442\u0430\u043D\u043E.", + "err.needInvitation": "\u041D\u0443\u0436\u043D\u043E \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u0434 \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u044F \u043E\u0442 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0430.", + "err.needResponse": "\u041D\u0443\u0436\u043D\u043E \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u0434 \u043E\u0442\u0432\u0435\u0442\u0430 \u043E\u0442 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0430.", + "err.responseFormat": "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u043E\u0442\u0432\u0435\u0442\u0430 - \u043F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043A\u043E\u0434", + "err.responseNoKey": "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043E\u0434 \u043E\u0442\u0432\u0435\u0442\u0430 - \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043A\u043B\u044E\u0447 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043B\u0438 \u043F\u043E\u0432\u0440\u0435\u0436\u0434\u0451\u043D. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043A\u043E\u0434 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", + "err.responseNoSignKey": "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043E\u0434 \u043E\u0442\u0432\u0435\u0442\u0430 - \u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043A\u043B\u044E\u0447\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u043F\u043E\u0434\u043F\u0438\u0441\u0438. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043A\u043E\u0434 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", + "err.responseOutdated": "\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0432\u0435\u0442\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u043B\u0438 - \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043D\u043E\u0432\u044B\u043C \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435\u043C", + "err.setupError": "\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F", + "err.notReady": "\u0421\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u0435\u0449\u0451 \u043D\u0435 \u0433\u043E\u0442\u043E\u0432\u043E", + "err.securityBreach": "\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043E \u043D\u0430\u0440\u0443\u0448\u0435\u043D\u0438\u0435 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 - \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u043E", + "err.securityValidation": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u043D\u0435 \u043F\u0440\u043E\u0439\u0434\u0435\u043D\u0430 - \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u0430 \u0430\u0442\u0430\u043A\u0430", + "err.retiredQr": "\u042D\u0442\u043E\u0442 QR-\u043A\u043E\u0434 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u0444\u043E\u0440\u043C\u0430\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u043C \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0435\u0440\u0435\u0434\u0430\u0442\u044C \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435. \u041F\u043E\u043F\u0440\u043E\u0441\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u0438\u043B\u0438 \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C.", + "err.compressedQrNote": "\u0421\u0436\u0430\u0442\u044B\u0439 QR \u043C\u043E\u0436\u0435\u0442 \u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C SDP \u0440\u0430\u0434\u0438 \u043A\u0440\u0430\u0442\u043A\u043E\u0441\u0442\u0438. \u0415\u0441\u043B\u0438 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044F, \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435\u0441\u044C \u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C.", + "err.inviteNotConnected": "\u041F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C. \u0422\u043E\u0442 \u0447\u0430\u0442 \u0441\u0435\u0439\u0447\u0430\u0441 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D.", + "err.inviteNotConnectedRetry": "\u041F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C. \u0422\u043E\u0442 \u0447\u0430\u0442 \u0441\u0435\u0439\u0447\u0430\u0441 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D - \u043E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u0435\u0433\u043E \u0441\u043D\u043E\u0432\u0430 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437.", + "err.nobodyAccepted": "\u041D\u0438\u043A\u0442\u043E \u043D\u0435 \u043F\u0440\u0438\u043D\u044F\u043B \u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435. \u0413\u0440\u0443\u043F\u043F\u0430 \u043E\u0441\u0442\u0430\u043B\u0430\u0441\u044C \u0431\u0435\u0437 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439.", + "err.noAudio": "\u0417\u0432\u0443\u043A \u043D\u0435 \u0437\u0430\u043F\u0438\u0441\u0430\u043D - \u043F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u043D\u0430 \u043C\u0438\u043A\u0440\u043E\u0444\u043E\u043D \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", + "err.voiceNeedsConnection": "\u0414\u043B\u044F \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0433\u043E \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043D\u0443\u0436\u043D\u043E \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0435 \u0437\u0430\u0449\u0438\u0449\u0451\u043D\u043D\u043E\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435. \u041F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u0441\u044C \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", + "err.voiceRestoring": "\u0412\u043E\u0441\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u043C \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 - \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043C\u0433\u043D\u043E\u0432\u0435\u043D\u0438\u0435.", + "err.fileTooLarge": "\u0424\u0430\u0439\u043B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439", + "sas.safetyNumber": "\u041D\u043E\u043C\u0435\u0440 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438", + "sas.incorrect": "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043E\u0434. \u0421\u0432\u0435\u0440\u044C\u0442\u0435 \u0435\u0433\u043E \u0441 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u043E\u043C \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.", + "sas.noMatch": "\u041A\u043E\u0434\u044B \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442", + "sas.makeSure": "\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u043A\u043E\u0434\u044B \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0442 \u0442\u043E\u0447\u043D\u043E.", + "sas.tooManyAttempts": "\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u043D\u043E\u0433\u043E \u043D\u0435\u0432\u0435\u0440\u043D\u044B\u0445 \u043F\u043E\u043F\u044B\u0442\u043E\u043A. \u0421\u0435\u0430\u043D\u0441 \u0441\u0431\u0440\u043E\u0448\u0435\u043D \u0440\u0430\u0434\u0438 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438.", + "sas.verificationFailed": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043D\u0435 \u043F\u0440\u043E\u0439\u0434\u0435\u043D\u0430", + "sas.verified": "\u041F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043E \xB7 \u0441\u043E\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C", + "sas.runVerification": "\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438", + "sec.panelTitle": "\u0414\u0435\u0442\u0430\u043B\u0438 \u0441\u0435\u0442\u0438 \u0438 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438", + "sec.security": "\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u044C", + "sec.transport": "\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442", + "sec.keyExchange": "\u041E\u0431\u043C\u0435\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438", + "sec.allEnabled": "\u0412\u0441\u0435 \u0444\u0443\u043D\u043A\u0446\u0438\u0438 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u044B \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E", + "sec.realTimeNote": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0438\u043C\u0438 \u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u043C\u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u043C\u0438 - \u0431\u0435\u0437 \u0432\u044B\u0434\u0443\u043C\u0430\u043D\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445.", + "sec.simulatedWarning": "\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435: \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043D\u0435 \u043F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E - \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0441\u043C\u043E\u0434\u0435\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u044B.", + "dl.title": "\u0421\u043A\u0430\u0447\u0430\u0442\u044C SecureBit", + "dl.free": "\u0411\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E \xB7 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u043A\u043E\u0434", + "dl.soon": "\u041F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0434\u043B\u044F iOS \u0438 Android \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F \u0434\u043B\u044F Chrome, Firefox \u0438 Opera \u043F\u043E\u044F\u0432\u044F\u0442\u0441\u044F \u0441\u043A\u043E\u0440\u043E.", + "chatHdr.chat": "\u0427\u0430\u0442", + "chatHdr.chats": "\u0427\u0430\u0442\u044B", + "chatHdr.newChat": "+ \u041D\u043E\u0432\u044B\u0439", + "chatHdr.secure": "\u0417\u0430\u0449\u0438\u0449\u0435\u043D\u043E", + "chatHdr.p2pSub": "P2P \xB7 \u0441\u043A\u0432\u043E\u0437\u043D\u043E\u0435 \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435", + "chatHdr.save": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", + "chatHdr.close": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", + "chatHdr.expand": "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C", + "chatHdr.you": "\u0412\u044B", + "chatHdr.qrCode": "QR-\u043A\u043E\u0434", + "chat.disconnected": "\u0420\u0430\u0437\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u043E", + "call.mute": "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043C\u0438\u043A\u0440\u043E\u0444\u043E\u043D", + "call.endShort": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C", + "group.add": "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C", + "group.send": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C", + "sec.pfsShort": "\u0421\u043E\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C", + "sec.cipher": "\u0428\u0438\u0444\u0440", + "chat.close": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", + "file.needConnection": "\u0414\u043B\u044F \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0444\u0430\u0439\u043B\u043E\u0432 \u043D\u0443\u0436\u043D\u043E \u043E\u0442\u043A\u0440\u044B\u0442\u043E\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435", + "presence.available": "\u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D", + "presence.away": "\u041E\u0442\u043E\u0448\u0451\u043B", + "presence.busy": "\u0417\u0430\u043D\u044F\u0442", + "presence.offline": "\u041D\u0435 \u0432 \u0441\u0435\u0442\u0438", + "presence.invisible": "\u041D\u0435\u0432\u0438\u0434\u0438\u043C\u044B\u0439", + "presence.availableDesc": "\u0412 \u0441\u0435\u0442\u0438 \u0438 \u043D\u0430 \u0441\u0432\u044F\u0437\u0438", + "presence.awayDesc": "\u041D\u0435\u0430\u043A\u0442\u0438\u0432\u0435\u043D \xB7 \u043E\u0442\u043E\u0448\u0451\u043B", + "presence.busyDesc": "\u041D\u0435 \u0431\u0435\u0441\u043F\u043E\u043A\u043E\u0438\u0442\u044C", + "presence.invisibleDesc": "\u0412\u044B\u0433\u043B\u044F\u0434\u0435\u0442\u044C \u043E\u0444\u043B\u0430\u0439\u043D \u0434\u043B\u044F \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u043E\u0432", + "presence.online": "\u0412 \u0441\u0435\u0442\u0438", + "conn.p2p": "P2P \xB7 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u043E", + "conn.verifying": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430\u2026", + "conn.connecting": "\u0421\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435\u2026", + "conn.reconnecting": "\u041F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u2026", + "conn.peerDisconnected": "\u0421\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u043B\u0441\u044F", + "conn.disconnected": "\u0420\u0430\u0437\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u043E", + "chat.defaultLabel": "\u0427\u0430\u0442", + "groupPhase.forming": "\u0424\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u2026", + "groupPhase.commitments": "\u041E\u0431\u043C\u0435\u043D \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u0430\u043C\u0438\u2026", + "groupPhase.revealing": "\u0420\u0430\u0441\u043A\u0440\u044B\u0442\u0438\u0435\u2026", + "groupPhase.compare": "\u0421\u0432\u0435\u0440\u044C\u0442\u0435 \u043A\u043E\u0434 \u0433\u0440\u0443\u043F\u043F\u044B", + "groupPhase.ready": "\u0413\u0440\u0443\u043F\u043F\u0430 \u0433\u043E\u0442\u043E\u0432\u0430", + "groupPhase.failed": "\u0413\u0440\u0443\u043F\u043F\u0430 \u043D\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u0430", + "call.qualityGood": "\u0425\u043E\u0440\u043E\u0448\u0435\u0435", + "call.qualityFair": "\u0421\u0440\u0435\u0434\u043D\u0435\u0435", + "call.qualityWeak": "\u0421\u043B\u0430\u0431\u043E\u0435", + "msg.code": "\u041A\u043E\u0434", + "msg.timer": "\u0422\u0430\u0439\u043C\u0435\u0440", + "msg.voice": "\u0413\u043E\u043B\u043E\u0441", + "msg.play": "\u0412\u043E\u0441\u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0441\u0442\u0438", + "msg.sent": "\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E", + "msg.read": "\u041F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043E", + "report.title": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C \u0432\u0440\u0435\u043C\u0435\u043D\u0438", + "report.active": "\u0410\u043A\u0442\u0438\u0432\u043D\u043E", + "report.testsPassed": "\u041F\u0440\u043E\u0439\u0434\u0435\u043D\u043E \u043F\u0440\u043E\u0432\u0435\u0440\u043E\u043A", + "report.verifiedAt": "\u041F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043E", + "report.source": "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A", + "secTest.verifyECDHKeyExchange": "\u041E\u0431\u043C\u0435\u043D \u043A\u043B\u044E\u0447\u0430\u043C\u0438 ECDH", + "secTest.verifyECDSASignatures": "\u0426\u0438\u0444\u0440\u043E\u0432\u044B\u0435 \u043F\u043E\u0434\u043F\u0438\u0441\u0438 ECDSA", + "secTest.verifyEncryption": "\u0428\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435 AES-GCM", + "secTest.verifyMessageIntegrity": "\u0426\u0435\u043B\u043E\u0441\u0442\u043D\u043E\u0441\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439", + "secTest.verifyPerfectForwardSecrecy": "\u0421\u043E\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C", + "secTest.verifyPFS": "\u0421\u043E\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C", + "secTest.verifyReplayProtection": "\u0417\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u043F\u043E\u0432\u0442\u043E\u0440\u043E\u0432", + "secTest.verifyDTLSFingerprint": "\u041E\u0442\u043F\u0435\u0447\u0430\u0442\u043E\u043A DTLS", + "secTest.verifySASVerification": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 SAS", + "secTest.verifyMetadataProtection": "\u0417\u0430\u0449\u0438\u0442\u0430 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445", + "secTest.verifyTrafficObfuscation": "\u041C\u0430\u0441\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0442\u0440\u0430\u0444\u0438\u043A\u0430", + "secTest.verifyPacketPadding": "\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043F\u0430\u043A\u0435\u0442\u043E\u0432", + "secTest.verifyNestedEncryption": "\u0412\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0435 \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435", + "secTest.verifyNonExtractableKeys": "\u041A\u043B\u044E\u0447\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435\u043B\u044C\u0437\u044F \u0438\u0437\u0432\u043B\u0435\u0447\u044C", + "secTest.verifyRateLimiting": "\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0435 \u0447\u0430\u0441\u0442\u043E\u0442\u044B", + "secTest.verifyMutualAuth": "\u0412\u0437\u0430\u0438\u043C\u043D\u0430\u044F \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F", + "secTest.verifyAuthProof": "\u0414\u043E\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u043E \u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438", + "secTest.verifyEnhancedValidation": "\u0423\u0441\u0438\u043B\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430", + "secTest.verifyAdvancedFeatures": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0438", + "secTest.verifySignature": "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u0438", + "secDetail.Security system initializing...": "\u0421\u0438\u0441\u0442\u0435\u043C\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442\u0441\u044F\u2026", + "secDetail.Nested encryption active": "\u0412\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0435 \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0430\u043A\u0442\u0438\u0432\u043D\u043E", + "secDetail.Nested encryption failed": "\u0412\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0435 \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C", + "secDetail.Packet padding active": "\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043F\u0430\u043A\u0435\u0442\u043E\u0432 \u0430\u043A\u0442\u0438\u0432\u043D\u043E", + "secDetail.Packet padding failed": "\u0414\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043F\u0430\u043A\u0435\u0442\u043E\u0432 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C", + "secDetail.Advanced features active": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u0430\u043A\u0442\u0438\u0432\u043D\u044B", + "secDetail.Advanced features failed": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442", + "secDetail.No encryption key available": "\u041A\u043B\u044E\u0447 \u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D", + "secDetail.AES-GCM encryption/decryption working correctly": "\u0428\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u0435 AES-GCM \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E", + "secDetail.No ECDH key pair available": "\u041F\u0430\u0440\u0430 \u043A\u043B\u044E\u0447\u0435\u0439 ECDH \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430", + "secDetail.Key derivation failed": "\u0412\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435 \u043A\u043B\u044E\u0447\u0430 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C", + "secDetail.No ECDSA key pair available": "\u041F\u0430\u0440\u0430 \u043A\u043B\u044E\u0447\u0435\u0439 ECDSA \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430", + "secDetail.ECDSA digital signatures working correctly": "\u0426\u0438\u0444\u0440\u043E\u0432\u044B\u0435 \u043F\u043E\u0434\u043F\u0438\u0441\u0438 ECDSA \u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E", + "secDetail.MAC key not available or invalid": "\u041A\u043B\u044E\u0447 MAC \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0438\u043B\u0438 \u043D\u0435\u0432\u0435\u0440\u0435\u043D", + "secDetail.Rate limiter did not block a message over the limit": "\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u0435\u043B\u044C \u043D\u0435 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043B \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0441\u0432\u0435\u0440\u0445 \u043B\u0438\u043C\u0438\u0442\u0430", + "secDetail.Rate limiter is not available": "\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u0435\u043B\u044C \u0447\u0430\u0441\u0442\u043E\u0442\u044B \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D", + "secDetail.Replay protection is working correctly": "\u0417\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u043F\u043E\u0432\u0442\u043E\u0440\u043E\u0432 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E", + "secDetail.Replay protection not enabled": "\u0417\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u043F\u043E\u0432\u0442\u043E\u0440\u043E\u0432 \u043D\u0435 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430", + "secDetail.SAS code not available": "\u041A\u043E\u0434 SAS \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D", + "secDetail.SAS verification code is valid and available": "\u041A\u043E\u0434 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 SAS \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u0435\u043D \u0438 \u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D", + "secDetail.Traffic obfuscation is working correctly": "\u041C\u0430\u0441\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0442\u0440\u0430\u0444\u0438\u043A\u0430 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E", + "secDetail.Traffic obfuscation not enabled": "\u041C\u0430\u0441\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0442\u0440\u0430\u0444\u0438\u043A\u0430 \u043D\u0435 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "\u0414\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0441\u0435\u0430\u043D\u0441\u0430 \u043D\u0435\u0442 \u044D\u0444\u0435\u043C\u0435\u0440\u043D\u043E\u0439 \u043F\u0430\u0440\u044B \u043A\u043B\u044E\u0447\u0435\u0439 ECDH, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u043D\u0435\u043B\u044C\u0437\u044F \u0438\u0437\u0432\u043B\u0435\u0447\u044C", + "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": "\u0422\u043E\u043B\u044C\u043A\u043E \u0441\u0435\u0430\u043D\u0441\u043E\u0432\u0430\u044F \u043F\u0440\u044F\u043C\u0430\u044F \u0441\u0435\u043A\u0440\u0435\u0442\u043D\u043E\u0441\u0442\u044C: \u043A\u043B\u044E\u0447\u0438 \u044D\u0444\u0435\u043C\u0435\u0440\u043D\u044B \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0441\u0435\u0430\u043D\u0441\u0430, \u043D\u043E Double Ratchet \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u0430\u043A\u0442\u0438\u0432\u0435\u043D (\u0443 \u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A\u0430 \u0431\u043E\u043B\u0435\u0435 \u0441\u0442\u0430\u0440\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F), \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0441\u043A\u043E\u043C\u043F\u0440\u043E\u043C\u0435\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0441\u0435\u0430\u043D\u0441\u043E\u0432\u044B\u0439 \u043A\u043B\u044E\u0447 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440.", + "msg.pause": "\u041F\u0430\u0443\u0437\u0430", + "msg.failed": "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C", + "groupErr.timeout": "\u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A \u043F\u0435\u0440\u0435\u0441\u0442\u0430\u043B \u043E\u0442\u0432\u0435\u0447\u0430\u0442\u044C, \u043F\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043C \u043A\u043E\u0434 \u0431\u044B\u043B \u0433\u043E\u0442\u043E\u0432.", + "groupErr.keyMismatch": "\u041A\u043B\u044E\u0447 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430 \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u043B \u0441 \u043B\u0438\u0447\u043D\u043E\u0441\u0442\u044C\u044E, \u043A\u043E\u0442\u043E\u0440\u0443\u044E \u0434\u043B\u044F \u043D\u0435\u0433\u043E \u0437\u0430\u044F\u0432\u0438\u043B\u0438.", + "groupErr.revealMismatch": "\u0420\u0430\u0441\u043A\u0440\u044B\u0442\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430 \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u043B\u043E \u0441 \u0435\u0433\u043E \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u043E\u043C.", + "groupErr.commitChanged": "\u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A \u0438\u0437\u043C\u0435\u043D\u0438\u043B \u0441\u0432\u043E\u0451 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u043E \u043F\u043E\u0441\u0440\u0435\u0434\u0438 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430.", + "groupErr.missingKey": "\u0412 \u0441\u043F\u0438\u0441\u043A\u0435 \u0431\u044B\u043B \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A, \u0447\u0435\u0439 \u043A\u043B\u044E\u0447 \u0442\u0430\u043A \u0438 \u043D\u0435 \u043F\u0440\u0438\u0448\u0451\u043B.", + "groupErr.outsider": "\u041F\u0440\u0438\u0448\u0451\u043B \u043A\u0430\u0434\u0440 \u043E\u0442 \u043A\u043E\u0433\u043E-\u0442\u043E \u0432\u043D\u0435 \u0433\u0440\u0443\u043F\u043F\u044B.", + "groupErr.limit": "\u0413\u0440\u0443\u043F\u043F\u0430 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0430 \u0432\u043E\u0441\u0435\u043C\u044C\u044E \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430\u043C\u0438.", + "groupErr.tooLarge": "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0431\u044B\u043B\u043E \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u0438\u043C, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0435\u0433\u043E \u0433\u0440\u0443\u043F\u043F\u0435.", + "fileType.text": "\u041E\u0431\u044B\u0447\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442", + "fileType.images": "\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F", + "fileType.archives": "\u0410\u0440\u0445\u0438\u0432\u044B", + "fileType.voice": "\u0413\u043E\u043B\u043E\u0441\u043E\u0432\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F", + "fileType.unsupported": "\u041D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F", + "qrScan.title": "\u0421\u043A\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C QR-\u043A\u043E\u0434", + "qrScan.auto": "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438", + "qrScan.reset": "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C", + "qrScan.autoScroll": "\u0410\u0432\u0442\u043E\u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430", + "qrScan.starting": "\u0417\u0430\u043F\u0443\u0441\u043A \u043A\u0430\u043C\u0435\u0440\u044B\u2026", + "qrScan.point": "\u041D\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u0430\u043C\u0435\u0440\u0443 \u043D\u0430 QR-\u043A\u043E\u0434", + "qrScan.tapFocus": "\u041A\u043E\u0441\u043D\u0438\u0442\u0435\u0441\u044C \u044D\u043A\u0440\u0430\u043D\u0430, \u0447\u0442\u043E\u0431\u044B \u0441\u0444\u043E\u043A\u0443\u0441\u0438\u0440\u043E\u0432\u0430\u0442\u044C", + "qrScan.focusing": "\u0424\u043E\u043A\u0443\u0441\u0438\u0440\u043E\u0432\u043A\u0430\u2026", + "iceErr.notArray": "\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u0435\u0440\u0432\u0435\u0440\u043E\u0432 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u043C", + "iceErr.invalidJson": "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 JSON", + "iceErr.tooMany": "\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u043D\u043E\u0433\u043E \u0441\u0435\u0440\u0432\u0435\u0440\u043E\u0432 (\u043C\u0430\u043A\u0441\u0438\u043C\u0443\u043C {max})", + "iceErr.invalidEntry": "{label}: \u043D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0437\u0430\u043F\u0438\u0441\u044C", + "iceErr.urlCount": "{label}: \u043D\u0443\u0436\u043D\u043E \u043E\u0442 1 \u0434\u043E {max} URL", + "iceErr.turnCreds": "{label}: TURN-\u0441\u0435\u0440\u0432\u0435\u0440\u044B \u043E\u0431\u044B\u0447\u043D\u043E \u0442\u0440\u0435\u0431\u0443\u044E\u0442 \u0438\u043C\u0435\u043D\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0438 \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445", + "iceUrl.notString": "URL \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u043E\u0439", + "iceUrl.empty": "URL \u043F\u0443\u0441\u0442\u043E\u0439", + "iceUrl.tooLong": "URL \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0434\u043B\u0438\u043D\u043D\u044B\u0439", + "iceUrl.badChars": "URL \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B", + "iceUrl.badScheme": "URL \u0434\u043E\u043B\u0436\u0435\u043D \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 stun:, stuns:, turn: \u0438\u043B\u0438 turns:", + "iceUrl.badQuery": "URL \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441", + "iceUrl.noHost": "\u0412 URL \u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0445\u043E\u0441\u0442\u0430", + "iceUrl.badHost": "URL \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0445\u043E\u0441\u0442 \u0438\u043B\u0438 \u043F\u043E\u0440\u0442", + "iceUrl.badTransport": "\u0417\u0430\u043F\u0440\u043E\u0441 URL \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C transport=udp \u0438\u043B\u0438 transport=tcp", + "msg.off": "\u0412\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u043E", + "file.consentUnavailable": "\u041D\u0435\u0442 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435", + "secLevel.MAXIMUM": "\u041C\u0410\u041A\u0421\u0418\u041C\u0423\u041C", + "secLevel.INITIALIZING": "\u0417\u0410\u041F\u0423\u0421\u041A", + "secLevel.ERROR": "\u041E\u0428\u0418\u0411\u041A\u0410", + "secLevel.UNKNOWN": "\u041D\u0415\u0418\u0417\u0412\u0415\u0421\u0422\u041D\u041E", + "status.error": "\u041E\u0448\u0438\u0431\u043A\u0430", + "offline.disconnect": "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F", + "offline.learnMore": "\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435", + "pwa.installApp": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435", + "chat.onWeb": "\u0412\u044B \u0432 \u0432\u0435\u0431-\u0432\u0435\u0440\u0441\u0438\u0438" + }, + "zh": { + "language.label": "\u8BED\u8A00", + "community.title": "\u4E00\u8D77\u6784\u7B51\u9690\u79C1\u7684\u672A\u6765", + "community.description": "SecureBit \u56E0\u793E\u533A\u800C\u6210\u957F\u3002\u4F60\u7684\u60F3\u6CD5\u4E0E\u53CD\u9988\u5851\u9020\u7740\u5B89\u5168\u901A\u8BAF\u7684\u672A\u6765 \u2014\u2014 \u5F00\u653E\u5F00\u53D1\uFF0C\u5168\u7A0B\u5B8C\u6574\u7684 ASN.1 \u6821\u9A8C\u3002", + "community.github": "GitHub \u4ED3\u5E93", + "community.feedback": "\u53CD\u9988", + "unique.eyebrow": "\u6211\u4EEC\u7684\u4E0D\u540C\u4E4B\u5904", + "unique.heading": "SecureBit \u4E3A\u4F55\u4E0E\u4F17\u4E0D\u540C", + "unique.s1.titleTop": "\u5206\u5C42\u7684", + "unique.s1.titleBottom": "\u52A0\u5BC6\u5185\u6838", + "unique.s1.collapsed": "\u52A0\u5BC6\u5185\u6838", + "unique.s1.desc": "ECDH P-384 \u5BC6\u94A5\u4EA4\u6362\u3001AES-256-GCM \u8F7D\u8377\u3001ECDSA \u7B7E\u540D\u4E0E\u5B8C\u6574\u7684 ASN.1 \u6821\u9A8C\uFF0C\u6C47\u6210\u4E00\u6761\u52A0\u56FA\u7684\u6D41\u6C34\u7EBF\u3002", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "\u7EAF\u7CB9\u7684 P2P", + "unique.s2.titleBottom": "\u57FA\u4E8E WebRTC", + "unique.s2.collapsed": "\u57FA\u4E8E WebRTC \u7684\u7EAF P2P", + "unique.s2.desc": "\u6D88\u606F\u901A\u8FC7 WebRTC \u5728\u8BBE\u5907\u4E4B\u95F4\u76F4\u63A5\u4F20\u9012\u3002\u6CA1\u6709\u4E2D\u7EE7\u4FDD\u5B58\u4F60\u7684\u6570\u636E \u2014\u2014 \u670D\u52A1\u5668\u53EA\u5E2E\u4E24\u7AEF\u5F7C\u6B64\u627E\u5230\u5BF9\u65B9\u3002", + "unique.s2.tags": [ + "DTLS 1.3", + "\u65E0\u4E2D\u7EE7" + ], + "unique.s3.titleTop": "\u5B8C\u7F8E\u7684", + "unique.s3.titleBottom": "\u524D\u5411\u4FDD\u5BC6", + "unique.s3.collapsed": "\u524D\u5411\u4FDD\u5BC6", + "unique.s3.desc": "\u4F1A\u8BDD\u5BC6\u94A5\u6301\u7EED\u8F6E\u6362\uFF0C\u7528\u540E\u5373\u5F03\uFF0C\u56E0\u6B64\u5355\u4E2A\u6CC4\u9732\u7684\u5BC6\u94A5\u6C38\u8FDC\u6253\u4E0D\u5F00\u6B64\u524D\u7684\u5BF9\u8BDD\u3002", + "unique.s3.tags": [ + "\u4E34\u65F6\u5BC6\u94A5", + "\u81EA\u52A8\u8F6E\u6362" + ], + "unique.s4.titleTop": "\u6D41\u91CF", + "unique.s4.titleBottom": "\u6DF7\u6DC6", + "unique.s4.collapsed": "\u6D41\u91CF\u6DF7\u6DC6", + "unique.s4.desc": "\u6570\u636E\u5305\u7684\u5927\u5C0F\u4E0E\u65F6\u95F4\u95F4\u9694\u4F1A\u88AB\u586B\u5145\u5E76\u968F\u673A\u5316\uFF0C\u5373\u4F7F\u6709\u4EBA\u76EF\u7740\u7EBF\u8DEF\uFF0C\u4E5F\u770B\u4E0D\u51FA\u5143\u6570\u636E\u7684\u89C4\u5F8B\u3002", + "unique.s4.tags": [ + "\u6570\u636E\u5305\u586B\u5145", + "\u65F6\u95F4\u6296\u52A8" + ], + "unique.s5.titleTop": "\u96F6\u6570\u636E", + "unique.s5.titleBottom": "\u6536\u96C6", + "unique.s5.collapsed": "\u96F6\u6570\u636E\u6536\u96C6", + "unique.s5.desc": "\u6CA1\u6709\u8D26\u53F7\uFF0C\u6CA1\u6709\u65E5\u5FD7\uFF0C\u4E0D\u4FDD\u5B58\u6D88\u606F\u3002\u670D\u52A1\u5668\u4E0A\u6CA1\u6709\u4EFB\u4F55\u53EF\u4EE5\u6CC4\u9732\u3001\u88AB\u8C03\u53D6\u6216\u88AB\u51FA\u552E\u7684\u4E1C\u897F\u3002", + "unique.s5.tags": [ + "\u65E0\u9700\u8D26\u53F7", + "\u6CA1\u6709\u65E5\u5FD7" + ], + "partners.eyebrow": "\u5408\u4F5C\u4F19\u4F34\u4E0E\u751F\u6001", + "partners.heading": "\u5408\u4F5C\u4F19\u4F34\u4FE1\u8D56\u6211\u4EEC", + "partners.aegis.desc": "\u8D44\u672C\u5408\u4F5C\u4F19\u4F34\uFF0C\u4E3A\u5176\u6295\u8D44\u7EC4\u5408\u4E2D\u7684\u673A\u5BC6\u91D1\u878D\u901A\u8BAF\u63D0\u4F9B\u4FDD\u969C\u3002", + "partners.aegis.role": "\u6218\u7565\u6295\u8D44\u65B9", + "partners.furilabs.desc": "\u4EE5\u9690\u79C1\u4E3A\u5148\u7684 Linux \u624B\u673A\uFF0C\u5185\u7F6E SecureBit \u4F5C\u4E3A\u9ED8\u8BA4\u5B89\u5168\u901A\u9053\u3002", + "partners.furilabs.role": "\u6280\u672F\u5408\u4F5C\u4F19\u4F34", + "partners.inviteTitle": "\u6210\u4E3A\u5408\u4F5C\u4F19\u4F34", + "partners.inviteDesc": "\u4F60\u5728\u505A\u9690\u79C1\u76F8\u5173\u7684\u786C\u4EF6\u6216\u57FA\u7840\u8BBE\u65BD\u5417\uFF1F\u6211\u4EEC\u4E00\u8D77\u96C6\u6210 SecureBit\u3002", + "partners.inviteCta": "\u5F00\u59CB\u6D3D\u8C08", + "roadmap.eyebrow": "\u5F00\u53D1\u8DEF\u7EBF\u56FE", + "roadmap.heading": "SecureBit \u7684\u6F14\u8FDB", + "roadmap.subheading": "\u4ECE\u7B2C\u4E00\u4E2A\u539F\u578B\u8D70\u5411\u6297\u91CF\u5B50\u7684\u53BB\u4E2D\u5FC3\u5316\u7F51\u7EDC\uFF0C\u6BCF\u4E00\u5C42\u90FD\u6709\u5B8C\u6574\u7684 ASN.1 \u6821\u9A8C\u3002", + "roadmap.progress": "\u5DF2\u5B8C\u6210 {total} \u4E2A\u91CC\u7A0B\u7891\u4E2D\u7684 {shipped} \u4E2A", + "roadmap.upcoming": "\u8FD8\u6709 {upcoming} \u4E2A", + "roadmap.keyFeatures": "\u6838\u5FC3\u529F\u80FD", + "roadmap.status.released": "\u5DF2\u53D1\u5E03", + "roadmap.status.current": "\u8FDB\u884C\u4E2D", + "roadmap.status.dev": "\u5F00\u53D1\u4E2D", + "roadmap.status.planned": "\u5DF2\u89C4\u5212", + "roadmap.status.research": "\u7814\u7A76\u4E2D", + "hero.headlineTop": "\u4E00\u6761\u53EA\u6709\u4F60\u4EEC\u4E24\u4EBA", + "hero.headlineBottom": "\u624D\u80FD\u8BFB\u61C2\u7684\u76F4\u8FDE\u7EBF\u8DEF\u3002", + "hero.subheading": "\u5BC6\u94A5\u5728\u4F60\u7684\u8BBE\u5907\u4E0A\u751F\u6210\uFF0C\u5E76\u5728\u4E24\u7AEF\u4E4B\u95F4\u76F4\u63A5\u4EA4\u6362\u3002\u65E0\u9700\u8D26\u53F7\uFF0C\u6CA1\u6709\u670D\u52A1\u5668\u4FDD\u5B58\u4F60\u7684\u6D88\u606F\u3002", + "hero.diagramAlt": "\u901A\u5411\u4E00\u4F4D\u8054\u7CFB\u4EBA\u7684\u76F4\u63A5\u52A0\u5BC6\u7EBF\u8DEF\uFF0C\u968F\u540E\u53C8\u6709\u4E24\u4F4D\u52A0\u5165", + "intro.createTitle": "\u521B\u5EFA\u65B0\u901A\u9053", + "intro.createDesc": "\u4F60\u7684\u8BBE\u5907\u4F1A\u751F\u6210\u5BC6\u94A5\u548C\u4E00\u6B21\u6027\u9080\u8BF7\u3002\u8FD9\u4E9B\u90FD\u4E0D\u4F1A\u7ECF\u8FC7\u4EFB\u4F55\u670D\u52A1\u5668\u3002", + "intro.createCta": "\u751F\u6210\u5BC6\u94A5\u4E0E\u9080\u8BF7", + "intro.joinTitle": "\u52A0\u5165\u901A\u9053", + "intro.scanTitle": "\u7528\u6444\u50CF\u5934\u626B\u63CF\u4E8C\u7EF4\u7801", + "intro.scanSubtitle": "\u6700\u5FEB\u7684\u65B9\u5F0F \u2014\u2014 \u5BF9\u51C6\u5BF9\u65B9\u7684\u5C4F\u5E55", + "intro.orPasteCode": "\u6216\u7C98\u8D34\u4EE3\u7801", + "intro.pastePlaceholder": "\u5728\u6B64\u7C98\u8D34\u9080\u8BF7\u7801\u2026", + "intro.connect": "\u8FDE\u63A5", + "intro.connecting": "\u5904\u7406\u4E2D\u2026", + "roadmap.r1.title": "\u5F00\u53D1\u542F\u52A8", + "roadmap.r1.sub": "\u6784\u60F3\u3001\u539F\u578B\u4E0E\u57FA\u7840\u8BBE\u65BD\u642D\u5EFA", + "roadmap.r1.date": "2025 \u5E74\u521D", + "roadmap.r1.features": [ + "\u786E\u5B9A\u6982\u5FF5\u4E0E\u9700\u6C42", + "\u9009\u5B9A\u6280\u672F\u6808\uFF1AWebRTC\u3001P2P\u3001\u5BC6\u7801\u5B66", + "\u9996\u6279\u6D88\u606F\u6536\u53D1\u539F\u578B", + "\u5EFA\u7ACB\u4ED3\u5E93\u4E0E\u6301\u7EED\u96C6\u6210", + "\u57FA\u7840\u52A0\u5BC6\u67B6\u6784", + "UX/UI \u8BBE\u8BA1" + ], + "roadmap.r2.title": "Alpha \u7248\u672C", + "roadmap.r2.sub": "\u9996\u4E2A\u516C\u5F00 Alpha\uFF1A\u57FA\u7840\u804A\u5929\u4E0E\u5BC6\u94A5\u4EA4\u6362", + "roadmap.r2.date": "2025 \u5E74\u6625", + "roadmap.r2.features": [ + "\u57FA\u4E8E WebRTC \u7684\u57FA\u7840 P2P \u6D88\u606F", + "\u7B80\u6613\u7AEF\u5230\u7AEF\u52A0\u5BC6\uFF08\u6F14\u793A\u65B9\u6848\uFF09", + "\u7A33\u5B9A\u7684\u4FE1\u4EE4\u4E0E\u91CD\u8FDE", + "\u7528\u4E8E\u6D4B\u8BD5\u7684\u6700\u7B80\u754C\u9762", + "\u6536\u96C6\u65E9\u671F\u6D4B\u8BD5\u8005\u7684\u53CD\u9988" + ], + "roadmap.r3.title": "\u5B89\u5168\u52A0\u56FA", + "roadmap.r3.sub": "\u5F3A\u5316\u5B89\u5168\u5E76\u53D1\u5E03\u7A33\u5B9A\u5206\u652F", + "roadmap.r3.date": "2025 \u5E74\u590F", + "roadmap.r3.features": [ + "ECDH/ECDSA \u6295\u5165\u751F\u4EA7", + "\u524D\u5411\u4FDD\u5BC6\u4E0E\u5BC6\u94A5\u8F6E\u6362", + "\u6539\u8FDB\u7684\u8EAB\u4EFD\u9A8C\u8BC1\u68C0\u67E5", + "\u6587\u4EF6\u52A0\u5BC6\u4E0E\u5927\u8F7D\u8377\u4F20\u8F93", + "\u57FA\u7840\u5BC6\u7801\u6D41\u7A0B\u5BA1\u8BA1" + ], + "roadmap.r4.title": "\u6269\u5C55\u4E0E\u7A33\u5B9A", + "roadmap.r4.sub": "\u7F51\u7EDC\u6269\u5C55\u4E0E\u7A33\u5B9A\u6027\u6539\u8FDB", + "roadmap.r4.date": "2025 \u5E74\u79CB", + "roadmap.r4.features": [ + "\u4F18\u5316 P2P \u8FDE\u63A5\u4E0E NAT \u7A7F\u900F", + "\u91CD\u8FDE\u673A\u5236\u4E0E\u6D88\u606F\u961F\u5217", + "\u964D\u4F4E\u79FB\u52A8\u7AEF\u8017\u7535", + "\u591A\u8BBE\u5907\u540C\u6B65", + "\u9762\u5411\u5F00\u53D1\u8005\u7684\u76D1\u63A7\u4E0E\u65E5\u5FD7\u5DE5\u5177" + ], + "roadmap.r5.title": "\u9690\u79C1\u4F18\u5148\u7248\u672C", + "roadmap.r5.sub": "\u805A\u7126\u9690\u79C1\uFF1A\u5C3D\u91CF\u51CF\u5C11\u5143\u6570\u636E", + "roadmap.r5.date": "2025 \u5E74\u51AC", + "roadmap.r5.features": [ + "\u5143\u6570\u636E\u4FDD\u62A4\u4E0E\u6307\u7EB9\u524A\u51CF", + "\u6D0B\u8471\u8DEF\u7531\u4E0E DHT \u5B9E\u9A8C", + "\u533F\u540D\u8FDE\u63A5\u9009\u9879", + "\u4E3A\u5F00\u6E90\u4EE3\u7801\u5BA1\u8BA1\u505A\u51C6\u5907", + "\u6539\u8FDB\u7684\u7528\u6237\u6821\u9A8C\u6D41\u7A0B" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "18 \u5C42\u519B\u7528\u7EA7\u5BC6\u7801\u5B66\uFF0C\u914D\u5408\u5B8C\u6574\u7684 ASN.1 \u6821\u9A8C", + "roadmap.r6.date": "2025 \u5E74\u672B", + "roadmap.r6.features": [ + "ECDH + DTLS + SAS \u4E09\u91CD\u9632\u62A4", + "ECDH P-384 \u4E0E AES-GCM 256 \u4F4D\u52A0\u5BC6", + "DTLS \u6307\u7EB9\u6821\u9A8C", + "SAS\uFF08\u77ED\u8BA4\u8BC1\u5B57\u7B26\u4E32\uFF09\u6821\u9A8C", + "\u5E26\u5BC6\u94A5\u8F6E\u6362\u7684\u524D\u5411\u4FDD\u5BC6", + "\u5F3A\u5316\u7684\u4E2D\u95F4\u4EBA\u653B\u51FB\u9632\u62A4", + "\u5B8C\u6574\u7684 ASN.1 DER \u6821\u9A8C", + "OID \u4E0E EC \u70B9\u6821\u9A8C", + "SPKI \u7ED3\u6784\u6821\u9A8C", + "P2P WebRTC \u67B6\u6784", + "\u5143\u6570\u636E\u4FDD\u62A4", + "100% \u5F00\u6E90\u4EE3\u7801" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "\u9762\u5411 Windows\u3001macOS \u4E0E Linux \u7684\u539F\u751F\u684C\u9762\u5E94\u7528", + "roadmap.r7.date": "2026 \u5E74\u521D", + "roadmap.r7.features": [ + "Windows \u684C\u9762\u5E94\u7528\uFF08Tauri v2\uFF09", + "macOS \u684C\u9762\u5E94\u7528\uFF08Tauri v2\uFF09", + "Linux AppImage\uFF08Tauri v2\uFF09", + "\u5B9E\u65F6\u901A\u77E5", + "\u81EA\u52A8\u91CD\u8FDE", + "\u8DE8\u8BBE\u5907\u540C\u6B65", + "\u6539\u8FDB\u7684\u754C\u9762", + "\u652F\u6301\u6700\u5927 100 MB \u7684\u6587\u4EF6" + ], + "roadmap.r8.title": "\u5B89\u5168\u8BED\u97F3\u4E0E\u901A\u8BDD", + "roadmap.r8.sub": "\u52A0\u5BC6\u8BED\u97F3\u6D88\u606F\u3001\u8BED\u97F3\u901A\u8BDD\u4E0E\u89C6\u9891\u901A\u8BDD", + "roadmap.r8.date": "2026 \u5E74\u521D", + "roadmap.r8.features": [ + "\u7AEF\u5230\u7AEF\u52A0\u5BC6\u7684\u8BED\u97F3\u6D88\u606F", + "\u4E00\u5BF9\u4E00\u52A0\u5BC6\u8BED\u97F3\u901A\u8BDD\uFF08WebRTC\uFF09", + "\u4E00\u5BF9\u4E00\u52A0\u5BC6\u89C6\u9891\u901A\u8BDD\uFF08WebRTC\uFF09", + "\u5B9E\u65F6\u5A92\u4F53\u7684\u524D\u5411\u4FDD\u5BC6", + "\u7531 SRTP/DTLS \u4FDD\u62A4\u7684\u5A92\u4F53\u6D41", + "\u901A\u8BDD\u4E2D\u7684 SAS \u6821\u9A8C", + "\u6765\u7535\u901A\u77E5\u4E0E\u81EA\u52A8\u91CD\u8FDE", + "\u4F4E\u5EF6\u8FDF\u7684 P2P \u5A92\u4F53" + ], + "roadmap.r9.title": "\u7FA4\u7EC4\u901A\u8BAF", + "roadmap.r9.sub": "\u5728\u4E0D\u727A\u7272\u9690\u79C1\u7684\u524D\u63D0\u4E0B\u8FDB\u884C\u7FA4\u804A", + "roadmap.r9.date": "\u5F53\u524D", + "roadmap.r9.features": [ + "\u6700\u591A 8 \u4EBA\u7684 P2P \u7FA4\u804A", + "\u7F51\u72B6\u6295\u9012\uFF0C\u5E76\u4EE5\u7B7E\u540D\u4E2D\u7EE7\u4F5C\u4E3A\u515C\u5E95", + "\u4E00\u4E2A\u7FA4\u7EC4\u5B89\u5168\u7801\uFF0C\u7531\u6240\u6709\u4EBA\u5171\u540C\u6838\u5BF9", + "\u5148\u627F\u8BFA\u540E\u63ED\u793A\u7684\u6D41\u7A0B\uFF0C\u62B5\u5FA1\u5BF9\u5B89\u5168\u7801\u7684\u66B4\u529B\u8BD5\u63A2", + "\u7FA4\u7EC4\u4E13\u5C5E\u8EAB\u4EFD\u5BC6\u94A5\uFF0C\u8BBE\u8BA1\u4E0A\u5373\u4E3A\u4E34\u65F6", + "\u5E26\u7EAA\u5143\u6392\u5E8F\u7684\u7B7E\u540D\u6210\u5458\u540D\u5355", + "\u6D88\u606F\u5E26\u7B7E\u540D\uFF0C\u56E0\u800C\u5206\u53C9\u7684\u8BB0\u5F55\u53EF\u88AB\u8BC1\u660E", + "\u6CA1\u6709\u670D\u52A1\u5668\uFF0C\u6CA1\u6709\u5171\u4EAB\u7FA4\u5BC6\u94A5\uFF0C\u6CA1\u6709\u5386\u53F2\u8BB0\u5F55" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "\u9762\u5411 iOS \u4E0E Android \u7684\u539F\u751F\u79FB\u52A8\u5E94\u7528", + "roadmap.r10.date": "2027 \u5E74\u7B2C\u4E8C\u5B63\u5EA6", + "roadmap.r10.features": [ + "iOS \u539F\u751F\u5E94\u7528\uFF08Swift/SwiftUI\uFF09", + "Android \u539F\u751F\u5E94\u7528\uFF08Kotlin/Jetpack Compose\uFF09", + "\u79FB\u52A8\u6D4F\u89C8\u5668\u7684 PWA \u652F\u6301", + "\u5B9E\u65F6\u63A8\u9001\u901A\u77E5", + "\u7535\u91CF\u4F18\u5316", + "\u4E3A\u79FB\u52A8\u7AEF\u4F18\u5316\u7684\u754C\u9762", + "\u79BB\u7EBF\u6D88\u606F\u961F\u5217", + "\u751F\u7269\u8BC6\u522B\u9A8C\u8BC1" + ], + "roadmap.r11.title": "\u6297\u91CF\u5B50\u7248\u672C", + "roadmap.r11.sub": "\u62B5\u5FA1\u91CF\u5B50\u8BA1\u7B97\u673A", + "roadmap.r11.date": "2027 \u5E74\u7B2C\u56DB\u5B63\u5EA6", + "roadmap.r11.features": [ + "\u540E\u91CF\u5B50\u5BC6\u7801\u5B66 CRYSTALS-Kyber", + "SPHINCS+ \u6570\u5B57\u7B7E\u540D", + "\u6DF7\u5408\u65B9\u6848\uFF1A\u7ECF\u5178\u4E0E\u540E\u91CF\u5B50\u5E76\u7528", + "\u6297\u91CF\u5B50\u7684\u5BC6\u94A5\u4EA4\u6362", + "\u66F4\u65B0\u7684\u54C8\u5E0C\u7B97\u6CD5", + "\u8FC1\u79FB\u73B0\u6709\u4F1A\u8BDD", + "\u517C\u5BB9 v5.x", + "\u6297\u91CF\u5B50\u534F\u8BAE" + ], + "roadmap.r12.title": "\u53BB\u4E2D\u5FC3\u5316\u7F51\u7EDC", + "roadmap.r12.sub": "\u5B8C\u5168\u53BB\u4E2D\u5FC3\u5316\u7684\u7F51\u7EDC", + "roadmap.r12.date": "2028 \u5E74", + "roadmap.r12.features": [ + "\u8282\u70B9\u7F51\u72B6\u7F51\u7EDC", + "\u7528\u4E8E\u53D1\u73B0\u5BF9\u7AEF\u7684 DHT", + "\u5185\u7F6E\u6D0B\u8471\u8DEF\u7531", + "\u4EE3\u5E01\u7ECF\u6D4E\u4E0E\u8282\u70B9\u6FC0\u52B1", + "\u901A\u8FC7 DAO \u6CBB\u7406", + "\u4E0E\u5176\u4ED6\u7F51\u7EDC\u4E92\u901A", + "\u8DE8\u5E73\u53F0\u517C\u5BB9", + "\u81EA\u6108\u7F51\u7EDC" + ], + "roadmap.r13.title": "AI \u9690\u79C1\u52A9\u624B", + "roadmap.r13.sub": "\u7528\u4EBA\u5DE5\u667A\u80FD\u5B88\u62A4\u9690\u79C1\u4E0E\u5B89\u5168", + "roadmap.r13.date": "2028 \u5E74\u4EE5\u540E", + "roadmap.r13.features": [ + "\u672C\u5730 AI \u5A01\u80C1\u5206\u6790", + "\u81EA\u52A8\u8BC6\u522B\u4E2D\u95F4\u4EBA\u653B\u51FB", + "\u81EA\u9002\u5E94\u5BC6\u7801\u5B66", + "\u4E2A\u6027\u5316\u5B89\u5168\u5EFA\u8BAE", + "\u96F6\u77E5\u8BC6\u673A\u5668\u5B66\u4E60", + "\u79C1\u6709 AI \u52A9\u624B", + "\u9884\u6D4B\u6027\u5B89\u5168", + "\u81EA\u4E3B\u7684\u653B\u51FB\u9632\u62A4" + ], + "handshake.step1": "\u6B63\u5728\u751F\u6210 ECDH P-384 \u5BC6\u94A5\u5BF9", + "handshake.step2": "\u6B63\u5728\u63A8\u5BFC\u6821\u9A8C\u7801", + "handshake.step3": "\u6B63\u5728\u56FA\u5B9A\u524D\u5411\u4FDD\u5BC6", + "handshake.securingTitle": "\u6B63\u5728\u4FDD\u62A4\u4F60\u7684\u901A\u9053", + "handshake.answerTitle": "\u6B63\u5728\u751F\u6210\u4F60\u7684\u5E94\u7B54", + "handshake.securingDesc": "\u6B63\u5728\u953B\u9020\u8DB3\u4EE5\u62B5\u5FA1\u7BE1\u6539\u7684\u5BC6\u94A5\u3002", + "handshake.shareTitle": "\u5206\u4EAB\u4F60\u7684\u9080\u8BF7", + "handshake.sendAnswerTitle": "\u628A\u5E94\u7B54\u53D1\u56DE\u53BB", + "handshake.shareDesc": "\u628A\u4E8C\u7EF4\u7801\u7ED9\u5BF9\u65B9\u770B\uFF0C\u6216\u628A\u4EE3\u7801\u53D1\u7ED9\u5BF9\u65B9\u3002\u5B83\u53EA\u80FD\u7528\u4E00\u6B21\uFF0C\u800C\u4E14\u5F88\u5FEB\u8FC7\u671F\u3002", + "handshake.sendAnswerDesc": "\u628A\u8FD9\u6BB5\u5E94\u7B54\u4EA4\u7ED9\u521B\u5EFA\u901A\u9053\u7684\u4EBA\uFF0C\u8BA9\u5BF9\u65B9\u5B8C\u6210\u63E1\u624B\u3002", + "handshake.establish": "\u5EFA\u7ACB\u8FDE\u63A5", + "handshake.thenReceive": "\u7136\u540E\u63A5\u6536\u5BF9\u65B9\u53D1\u56DE\u7684\u5E94\u7B54", + "handshake.pasteAnswerPlaceholder": "\u7C98\u8D34\u5BF9\u65B9\u7684\u5E94\u7B54\u7801\u2026", + "handshake.answerSentNote": "\u628A\u8FD9\u6BB5\u5E94\u7B54\u53D1\u7ED9\u521B\u5EFA\u8005\uFF0C\u7136\u540E\u7B49\u5F85 \u2014\u2014 \u5BF9\u65B9\u4E00\u8FDE\u4E0A\uFF0C\u804A\u5929\u5C31\u4F1A\u6253\u5F00\u3002", + "handshake.qrHint": "\u5728\u5BF9\u65B9\u8BFB\u53D6\u5B8C\u4EE3\u7801\u4E4B\u524D\uFF0C\u8BF7\u4FDD\u6301\u6B64\u754C\u9762\u6253\u5F00\u3002", + "handshake.qrHintFrames": "\u63E1\u624B\u88AB\u62C6\u6210 {frames} \u5E27 \u2014\u2014 \u5728\u5BF9\u65B9\u8BFB\u5B8C\u5168\u90E8\u5E27\u4E4B\u524D\uFF0C\u8BF7\u4FDD\u6301\u6B64\u754C\u9762\u6253\u5F00\u3002", + "verify.title": "\u5B89\u5168\u6821\u9A8C", + "verify.desc": "\u901A\u8FC7\u53E6\u4E00\u6761\u6E20\u9053\uFF08\u901A\u8BDD\u6216\u5F53\u9762\uFF09\u4E0E\u5BF9\u65B9\u6838\u5BF9\u8FD9\u4E2A\u5B89\u5168\u7801\uFF0C\u7136\u540E\u8F93\u5165\u5B83\u4EE5\u89E3\u9501\u804A\u5929\u3002", + "verify.enterLabel": "\u8F93\u5165\u6838\u5BF9\u8FC7\u7684\u5B89\u5168\u7801", + "verify.placeholder": "\u5728\u6B64\u8F93\u5165\u5B89\u5168\u7801", + "verify.confirm": "\u786E\u8BA4\u5B89\u5168\u7801", + "verify.confirmed": "\u5DF2\u786E\u8BA4", + "verify.mismatch": "\u4E0D\u4E00\u81F4", + "verify.yours": "\u4F60\u7684\u786E\u8BA4", + "verify.peer": "\u5BF9\u65B9\u7684\u786E\u8BA4", + "verify.pending": "\u7B49\u5F85\u4E2D", + "verify.waiting": "\u7B49\u5F85\u5B89\u5168\u7801\u2026", + "verify.verified": "\u901A\u9053\u5DF2\u6821\u9A8C", + "verify.bothConfirmed": "\u53CC\u65B9\u5747\u5DF2\u786E\u8BA4\u3002\u6B63\u5728\u6253\u5F00\u5B89\u5168\u804A\u5929\u2026", + "pwa.bannerTitle": "\u5B89\u88C5 SecureBit.chat", + "pwa.bannerDesc": "\u83B7\u5F97\u539F\u751F\u5E94\u7528\u822C\u7684\u4F53\u9A8C\uFF0C\u5B89\u5168\u6027\u66F4\u8FDB\u4E00\u6B65", + "pwa.install": "\u5B89\u88C5", + "pwa.dismiss": "\u5173\u95ED", + "pwa.close": "\u5173\u95ED", + "pwa.iosTitle": "\u5728 iOS \u4E0A\u5B89\u88C5", + "pwa.iosStep1": "\u70B9\u6309\u300C\u5206\u4EAB\u300D\u6309\u94AE", + "pwa.iosStep1Hint": "\u901A\u5E38\u5728 Safari \u5E95\u90E8", + "pwa.iosStep2": "\u627E\u5230\u300C\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u300D", + "pwa.iosStep2Hint": "\u5728\u5206\u4EAB\u83DC\u5355\u4E2D\u5411\u4E0B\u6EDA\u52A8", + "pwa.iosStep3": "\u70B9\u6309\u300C\u6DFB\u52A0\u300D", + "pwa.iosStep3Hint": "\u786E\u8BA4\u4EE5\u5B89\u88C5 SecureBit.chat", + "pwa.genericTitle": "\u5B89\u88C5 SecureBit", + "pwa.genericDesc": "\u6BCF\u79CD\u6D4F\u89C8\u5668\u7684\u5B89\u88C5\u65B9\u5F0F\u90FD\u4E0D\u4E00\u6837\u3002\u8BF7\u9009\u62E9\u4E0E\u4F60\u7684\u6D4F\u89C8\u5668\u76F8\u7B26\u7684\u6B65\u9AA4\u3002", + "pwa.gotIt": "\u77E5\u9053\u4E86", + "pwa.installedTitle": "\u5E94\u7528\u5DF2\u5B89\u88C5\uFF01", + "pwa.installedIos": "iOS \u5E94\u7528\u5DF2\u5B89\u88C5\uFF01\u8BF7\u4ECE\u4E3B\u5C4F\u5E55\u6253\u5F00\u3002", + "pwa.installedGeneric": "SecureBit.chat \u5DF2\u5728\u4F60\u7684\u8BBE\u5907\u4E0A", + "pwa.anytimeTitle": "\u968F\u65F6\u90FD\u80FD\u5B89\u88C5", + "pwa.anytimeDesc": "\u4F60\u968F\u65F6\u53EF\u4EE5\u4ECE\u6D4F\u89C8\u5668\u83DC\u5355\u5B89\u88C5 SecureBit.chat\uFF0C\u90A3\u6837\u4F53\u9A8C\u6700\u597D\u3002", + "pwa.ok": "\u597D", + "step.open": "\u7B2C 1 \u6B65 \xB7 \u5F00\u901A\u901A\u9053", + "step.exchange": "\u7B2C 2 \u6B65 \xB7 \u4EA4\u6362", + "step.verification": "\u7B2C 3 \u6B65 \xB7 \u6821\u9A8C", + "action.create": "\u521B\u5EFA", + "action.join": "\u52A0\u5165", + "action.back": "\u8FD4\u56DE", + "action.copy": "\u590D\u5236", + "action.copied": "\u5DF2\u590D\u5236", + "action.scan": "\u626B\u63CF", + "action.downloadDesktop": "\u4E0B\u8F7D\u684C\u9762\u5E94\u7528", + "action.advancedSettings": "\u9AD8\u7EA7\u8BBE\u7F6E", + "cred.offerTag": "\u9080\u8BF7 \xB7 \u6216\u590D\u5236\u6587\u672C", + "cred.answerTag": "\u5E94\u7B54 \xB7 \u6216\u590D\u5236\u6587\u672C", + "cred.reveal": "\u70B9\u51FB\u663E\u793A - \u8BF7\u52FF\u6CC4\u9732\u6B64\u4EE3\u7801", + "qr.title": "\u626B\u63CF\u4E8C\u7EF4\u7801", + "qr.subtitle": "\u628A\u6444\u50CF\u5934\u5BF9\u51C6\u5BF9\u65B9\u7684\u4E8C\u7EF4\u7801", + "qr.scanning": "\u626B\u63CF\u4E2D\u2026", + "qr.hint": "\u8BF7\u62FF\u7A33\uFF0C\u76F4\u5230\u6240\u6709\u90E8\u5206\u90FD\u88AB\u8BFB\u53D6\u3002\u6444\u50CF\u5934\u4EC5\u5728\u672C\u5730\u4F7F\u7528 - \u4E0D\u4F1A\u4E0A\u4F20\u4EFB\u4F55\u5185\u5BB9\u3002", + "mesh.you": "\u4F60", + "mesh.peer": "\u5BF9\u65B9 \xB7 \u4F1A\u8BDD 1", + "mesh.joined2": "\u5C0F\u7EA2 \u52A0\u5165 \xB7 +2", + "mesh.joined3": "\u5C0F\u660E \u52A0\u5165 \xB7 +3", + "ice.title": "\u7F51\u7EDC\u8BBE\u7F6E", + "ice.subtitle": "\u4EC5\u5728\u672C\u5730\u914D\u7F6E - \u6C38\u8FDC\u4E0D\u4F1A\u53D1\u7ED9\u5BF9\u65B9", + "ice.intro": "SecureBit \u9ED8\u8BA4\u4F7F\u7528\u516C\u5171 STUN \u670D\u52A1\u5668\u6765\u534F\u5546\u70B9\u5BF9\u70B9\u8FDE\u63A5\u3002\u5982\u679C\u4F60\u81EA\u5EFA\u670D\u52A1\uFF0C\u53EF\u4EE5\u6307\u5411\u81EA\u5DF1\u7684 STUN/TURN\u3002", + "ice.publicTitle": "\u516C\u5171\u670D\u52A1\u5668\uFF08\u9ED8\u8BA4\uFF09", + "ice.publicDesc": "\u65E0\u9700\u914D\u7F6E\uFF0C\u9002\u5408\u5927\u591A\u6570\u4EBA\u3002", + "ice.customTitle": "\u6211\u81EA\u5DF1\u7684 STUN/TURN \u670D\u52A1\u5668", + "ice.customDesc": "\u6700\u591A {max} \u4E2A\u670D\u52A1\u5668\u3002", + "ice.turnNote": "TURN \u4E2D\u7EE7\u80FD\u770B\u5230\u53CC\u65B9\u7684 IP \u4E0E\u6D41\u91CF\u8282\u594F\uFF0C\u4F46\u6C38\u8FDC\u770B\u4E0D\u5230\u6D88\u606F\u5185\u5BB9\uFF0C\u5185\u5BB9\u59CB\u7EC8\u7AEF\u5230\u7AEF\u52A0\u5BC6\u3002\u5EFA\u8BAE\u4F7F\u7528 ", + "ice.turnNoteTls": "\uFF08TLS\uFF09\u3002", + "ice.test": "\u6D4B\u8BD5\u670D\u52A1\u5668", + "ice.testing": "\u6D4B\u8BD5\u4E2D\u2026", + "ice.relayTitle": "\u4EC5\u4E2D\u7EE7\u6A21\u5F0F", + "ice.relayBadge": "\u9690\u79C1\u6700\u5F3A", + "ice.relayDesc": "\u8BA9\u6240\u6709\u6D41\u91CF\u90FD\u7ECF\u8FC7 TURN\uFF0C\u5BF9\u65B9\u6C38\u8FDC\u770B\u4E0D\u5230\u4F60\u7684 IP\u3002\u9700\u8981\u4E00\u53F0 TURN \u670D\u52A1\u5668\u3002", + "ice.relayWarning": "\u5DF2\u542F\u7528\u4EC5\u4E2D\u7EE7\u6A21\u5F0F\uFF0C\u4F46\u6CA1\u6709\u914D\u7F6E TURN \u670D\u52A1\u5668\u3002\u8FDE\u63A5\u5C06\u65E0\u6CD5\u5EFA\u7ACB\u3002", + "ice.persist": "\u4FDD\u5B58\u5728\u672C\u8BBE\u5907", + "ice.persistDesc": "\u4EE5\u52A0\u5BC6\u5F62\u5F0F\u4FDD\u5B58\u5728\u6B64\u6D4F\u89C8\u5668\u4E2D\u3002\u4FDD\u6301\u5173\u95ED\u5219\u4EC5\u5728\u672C\u6B21\u4F1A\u8BDD\u4E2D\u751F\u6548\u3002", + "ice.forget": "\u5FD8\u8BB0\u5DF2\u4FDD\u5B58\u7684\u8BBE\u7F6E", + "ice.cancel": "\u53D6\u6D88", + "ice.apply": "\u5E94\u7528", + "ice.errUnavailable": "\u6B64\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 WebRTC", + "ice.errInvalid": "\u670D\u52A1\u5668\u914D\u7F6E\u65E0\u6548", + "update.title": "\u6709\u53EF\u7528\u66F4\u65B0", + "update.desc": "\u68C0\u6D4B\u5230 SecureBit \u7684\u65B0\u7248\u672C\u3002", + "update.currentVersion": "\u5F53\u524D\u7248\u672C", + "update.newVersion": "\u65B0\u7248\u672C", + "update.now": "\u7ACB\u5373\u66F4\u65B0", + "update.later": "\u7A0D\u540E", + "update.unknown": "\u65E0", + "update.stepSaving": "\u6B63\u5728\u4FDD\u5B58\u6570\u636E\u2026", + "update.stepSwCaches": "\u6B63\u5728\u6E05\u7406 Service Worker \u7F13\u5B58\u2026", + "update.stepSwUnregister": "\u6B63\u5728\u6CE8\u9500 Service Worker\u2026", + "update.stepBrowserCache": "\u6B63\u5728\u6E05\u7406\u6D4F\u89C8\u5668\u7F13\u5B58\u2026", + "update.stepVersion": "\u6B63\u5728\u66F4\u65B0\u7248\u672C\u2026", + "update.stepReload": "\u6B63\u5728\u91CD\u65B0\u52A0\u8F7D\u5E94\u7528\u2026", + "update.error": "\u66F4\u65B0\u51FA\u9519\u3002\u8BF7\u624B\u52A8\u5237\u65B0\u9875\u9762\uFF08Ctrl+F5 \u6216 Cmd+Shift+R\uFF09", + "update.confirmSkip": "\u6709\u65B0\u7248\u672C\u53EF\u7528\u3002\u4E3A\u4E86\u5B89\u5168\u4E0E\u7A33\u5B9A\uFF0C\u5EFA\u8BAE\u66F4\u65B0\u3002\u8981\u4E0D\u66F4\u65B0\u7EE7\u7EED\u5417\uFF1F", + "offline.backOnline": "\u5DF2\u6062\u590D\u8054\u7F51", + "offline.mode": "\u79BB\u7EBF\u6A21\u5F0F", + "offline.dismiss": "\u5173\u95ED", + "offline.lostTitle": "\u8FDE\u63A5\u5DF2\u65AD\u5F00", + "offline.lostDesc": "SecureBit \u73B0\u5728\u5904\u4E8E\u79BB\u7EBF\u6A21\u5F0F\u3002\u90E8\u5206\u529F\u80FD\u53D7\u9650\uFF0C\u4F46\u4F60\u7684\u6570\u636E\u4F9D\u7136\u5B89\u5168\u3002", + "offline.point1": "\u4F60\u7684\u4F1A\u8BDD\u4E0E\u5BC6\u94A5\u90FD\u4F1A\u4FDD\u7559", + "offline.point2": "\u670D\u52A1\u5668\u4E0A\u4E0D\u5B58\u50A8\u4EFB\u4F55\u6570\u636E", + "offline.point3": "\u91CD\u65B0\u8054\u7F51\u540E\u6D88\u606F\u4E0E\u6587\u4EF6\u4F1A\u540C\u6B65", + "offline.continue": "\u7EE7\u7EED\u79BB\u7EBF\u4F7F\u7528", + "offline.restoredTitle": "\u91CD\u65B0\u8054\u7F51\u4E4B\u540E", + "offline.restoredDesc": "\u6389\u7EBF\u4E0D\u4F1A\u8BA9\u4F60\u635F\u5931\u4EC0\u4E48\u3002SecureBit \u4F1A\u628A\u4E00\u5207\u5148\u5728\u672C\u5730\u6392\u961F\uFF0C\u4E00\u65E6\u6062\u590D\u8054\u7F51\u5C31\u7EE7\u7EED\u52A0\u5BC6\u4F1A\u8BDD\u3002", + "offline.r1Title": "\u4F60\u7684\u6D88\u606F\u4F1A\u9001\u8FBE", + "offline.r1Desc": "\u4F60\u5728\u79BB\u7EBF\u65F6\u5199\u4E0B\u7684\u4E00\u5207\u90FD\u4F1A\u81EA\u52A8\u53D1\u7ED9\u5BF9\u65B9\u3002", + "offline.r2Title": "\u6587\u4EF6\u4F1A\u4F20\u5B8C", + "offline.r2Desc": "\u4E0A\u4F20\u4F1A\u4ECE\u4E2D\u65AD\u5904\u7EE7\u7EED - \u4E0D\u7528\u91CD\u65B0\u53D1\u9001\u3002", + "offline.r3Title": "\u5BF9\u65B9\u7684\u6D88\u606F\u4E0E\u6587\u4EF6\u4F1A\u5230\u8FBE", + "offline.r3Desc": "\u5BF9\u65B9\u5728\u4E2D\u65AD\u671F\u95F4\u53D1\u51FA\u7684\u5185\u5BB9\u4F1A\u6309\u987A\u5E8F\u9001\u5230\u4F60\u8FD9\u91CC\u3002", + "offline.r4Title": "\u4EC0\u4E48\u90FD\u4E0D\u4F1A\u4E22\u5931", + "offline.r4Desc": "\u91CD\u65B0\u8FDE\u4E0A\u540E\u4E0D\u4F1A\u7559\u4E0B\u7A7A\u6863 - \u5BF9\u8BDD\u4ECE\u4E2D\u65AD\u7684\u5730\u65B9\u63A5\u7740\u7EE7\u7EED\u3002", + "offline.gotIt": "\u77E5\u9053\u4E86", + "qr.showTitle": "\u663E\u793A\u4E8C\u7EF4\u7801", + "qr.showSubtitle": "\u5168\u5C4F \xB7 \u8BA9\u5BF9\u65B9\u626B\u63CF", + "qr.showSubtitleFrames": "\u5168\u5C4F \xB7 \u8BA9\u5BF9\u65B9\u626B\u63CF\u5168\u90E8 {frames} \u5E27", + "notify.enabledBody": "\u901A\u77E5\u5DF2\u5F00\u542F\u3002\u6709\u65B0\u6D88\u606F\u65F6\u4F60\u4F1A\u6536\u5230\u63D0\u9192\u3002", + "notify.workingBody": "\u901A\u77E5\u5DE5\u4F5C\u6B63\u5E38\u3002\u6709\u65B0\u6D88\u606F\u65F6\u4F60\u4F1A\u6536\u5230\u63D0\u9192\u3002", + "pw.label": "\u5BC6\u7801\u8F93\u5165\u6846", + "pw.placeholder": "\u8F93\u5165\u5BC6\u7801\u2026", + "pw.decrypt": "\u89E3\u5BC6", + "pw.cancel": "\u53D6\u6D88", + "file.title": "\u6587\u4EF6\u4F20\u8F93", + "file.drop": "\u628A\u6587\u4EF6\u62D6\u5230\u8FD9\u91CC", + "file.dropHint": "\u53D1\u9001\u524D\u5DF2\u7AEF\u5230\u7AEF\u52A0\u5BC6 \xB7 \u6700\u5927 100 MB", + "file.browse": "\u6D4F\u89C8\u8BBE\u5907", + "file.incoming": "\u6536\u5230\u6587\u4EF6\u8BF7\u6C42", + "file.accept": "\u63A5\u53D7", + "file.reject": "\u62D2\u7EDD", + "file.download": "\u4E0B\u8F7D", + "file.notReady": "\u8FDE\u63A5\u5C1A\u672A\u5C31\u7EEA", + "file.tooLarge": "\u6587\u4EF6\u8FC7\u5927", + "file.typeNotAllowed": "\u4E0D\u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B", + "file.maxConcurrent": "\u5DF2\u8FBE\u5230\u540C\u65F6\u4F20\u8F93\u7684\u4E0A\u9650", + "file.gone": "\u8BE5\u6587\u4EF6\u5DF2\u65E0\u6CD5\u4E0B\u8F7D\u3002", + "call.incoming": "\u6765\u7535", + "call.incomingVideo": "\u89C6\u9891\u6765\u7535", + "call.encrypted": "\u52A0\u5BC6\u901A\u8BDD", + "call.encryptedShort": "\u5DF2\u52A0\u5BC6", + "call.peer": "\u5B89\u5168\u5BF9\u7AEF", + "call.connecting": "\u8FDE\u63A5\u4E2D\u2026", + "call.ringing": "\u6B63\u5728\u547C\u53EB\u2026", + "call.accept": "\u63A5\u542C", + "call.decline": "\u62D2\u63A5", + "call.end": "\u6302\u65AD", + "call.camera": "\u6444\u50CF\u5934", + "call.cameraOff": "\u6444\u50CF\u5934\u5DF2\u5173\u95ED", + "call.peerCameraOff": "\u5BF9\u65B9\u7684\u6444\u50CF\u5934\u5DF2\u5173\u95ED", + "call.flipCamera": "\u5207\u6362\u6444\u50CF\u5934", + "call.addVideo": "\u52A0\u5165\u89C6\u9891", + "call.video": "\u89C6\u9891", + "call.muted": "\u5DF2\u9759\u97F3", + "call.expand": "\u653E\u5927", + "call.minimize": "\u7F29\u5C0F", + "call.quality": "\u8FDE\u63A5\u8D28\u91CF", + "call.qualityExcellent": "\u6781\u4F73", + "call.videoPrefix": "\u89C6\u9891 \xB7 ", + "call.voicePrefix": "\u8BED\u97F3 \xB7 ", + "group.new": "\u65B0\u5EFA\u7FA4\u7EC4", + "group.create": "\u521B\u5EFA\u7FA4\u7EC4", + "group.join": "\u52A0\u5165\u7FA4\u7EC4", + "group.name": "\u7FA4\u7EC4\u540D\u79F0", + "group.nameTooLong": "\u7FA4\u7EC4\u540D\u79F0\u8FC7\u957F\u3002", + "group.capacity": "\u6700\u591A {max} \u4EBA\uFF0C\u70B9\u5BF9\u70B9\u8FDE\u63A5\u3002\u7FA4\u7EC4\u5F00\u542F\u524D\uFF0C\u6240\u6709\u4EBA\u90FD\u4F1A\u6838\u5BF9\u540C\u4E00\u4E2A\u5B89\u5168\u7801\u3002", + "group.invite": "\u9080\u8BF7", + "group.inviteMore": "\u9080\u8BF7\u66F4\u591A\u6210\u5458", + "group.invitePeople": "\u9080\u8BF7 {count} \u4EBA", + "group.invitation": "\u7FA4\u7EC4\u9080\u8BF7", + "group.addMembers": "\u6DFB\u52A0\u6210\u5458", + "group.roomFor": "\u8FD8\u80FD\u518D\u52A0 {remaining} \u4EBA\u3002\u4ED6\u4EEC\u52A0\u5165\u540E\uFF0C\u6240\u6709\u4EBA\u4F1A\u6838\u5BF9\u4E00\u4E2A\u65B0\u7684\u7FA4\u7EC4\u5B89\u5168\u7801\u3002", + "group.membersCount": "{count} \u4F4D\u6210\u5458", + "group.member": "\u6210\u5458", + "group.members": "\u6210\u5458", + "group.remove": "\u79FB\u9664 {name}", + "group.message": "\u7ED9\u300C{name}\u300D\u53D1\u6D88\u606F", + "group.leave": "\u9000\u51FA", + "group.leaveThis": "\u9000\u51FA\u8BE5\u7FA4\u7EC4", + "group.cancel": "\u53D6\u6D88\u5EFA\u7FA4", + "group.close": "\u5173\u95ED", + "group.cancelBtn": "\u53D6\u6D88", + "group.decline": "\u62D2\u7EDD", + "group.working": "\u5904\u7406\u4E2D\u2026", + "group.sasTitle": "\u7FA4\u7EC4\u5B89\u5168\u7801", + "group.sasEveryone": "\u6240\u6709\u4EBA\u770B\u5230\u7684\u662F\u540C\u4E00\u4E2A\u5B89\u5168\u7801", + "group.sasCompare": "\u4E0E\u6BCF\u4F4D\u6210\u5458\u6838\u5BF9\u7FA4\u7EC4\u5B89\u5168\u7801\uFF0C\u624D\u80FD\u5F00\u542F\u8FD9\u4E2A\u7FA4\u7EC4\u3002", + "group.sasReadAloud": "\u628A\u8FD9\u4E9B\u6570\u5B57\u5FF5\u7ED9 ", + "group.sasWarning": "\u53EA\u8981\u6709\u4E00\u4F4D\u6210\u5458\u5FF5\u51FA\u4E0D\u540C\u7684\u5B89\u5168\u7801\uFF0C\u5C31\u8BF4\u660E\u6709\u4EBA\u5728\u4F60\u4EEC\u4E4B\u95F4\u3002\u8BF7\u53D6\u6D88\u5EFA\u7FA4 - \u4E0D\u8981\u786E\u8BA4\u3002", + "group.confirmFirst": "\u8BF7\u5148\u786E\u8BA4\u7FA4\u7EC4\u5B89\u5168\u7801", + "group.codeSuffix": " \xB7 \u5B89\u5168\u7801 {code}", + "group.exchangingNonces": "\u6B63\u5728\u4EA4\u6362\u4E00\u6B21\u6027\u968F\u673A\u6570\u2026", + "group.waitingCommit": "\u7B49\u5F85\u6BCF\u4F4D\u6210\u5458\u4F5C\u51FA\u627F\u8BFA\u2026", + "group.waitingJoin": "\u7B49\u5F85\u5176\u4ED6\u6210\u5458\u52A0\u5165\u2026", + "group.emptyChat": "\u8FD9\u91CC\u8FD8\u4EC0\u4E48\u90FD\u6CA1\u6709\u3002\u6BCF\u6761\u6D88\u606F\u90FD\u7531\u53D1\u9001\u8005\u7B7E\u540D\uFF0C\u5E76\u7ECF\u7531\u6BCF\u4F4D\u6210\u5458\u5404\u81EA\u7684\u52A0\u5BC6\u94FE\u8DEF\u4F20\u8F93\u3002", + "group.noVerified": "\u8FD8\u6CA1\u6709\u5DF2\u6821\u9A8C\u7684\u804A\u5929\u3002\u8BF7\u5148\u6253\u5F00\u4E00\u5BF9\u4E00\u804A\u5929\u5E76\u6838\u5BF9\u5176\u5B89\u5168\u7801 - \u7FA4\u7EC4\u662F\u7531\u4F60\u5DF2\u7ECF\u786E\u8BA4\u8FC7\u7684\u8FDE\u63A5\u642D\u8D77\u6765\u7684\u3002", + "group.noMoreToAdd": "\u6CA1\u6709\u5176\u4ED6\u5DF2\u6821\u9A8C\u7684\u804A\u5929\u53EF\u6DFB\u52A0\u3002\u8BF7\u5148\u6253\u5F00\u4E00\u5BF9\u4E00\u804A\u5929\u5E76\u6838\u5BF9\u5176\u5B89\u5168\u7801\u3002", + "group.directLink": "\u70B9\u5BF9\u70B9\u76F4\u63A5\u8FDE\u63A5", + "group.noDirectLink": "\u5C1A\u65E0\u76F4\u63A5\u8FDE\u63A5 - \u5728\u5EFA\u7ACB\u671F\u95F4\uFF0C\u6D88\u606F\u7531\u53E6\u4E00\u4F4D\u6210\u5458\u8F6C\u53D1", + "group.relayNote": "\u6709\u4E9B\u6210\u5458\u8FD8\u6CA1\u6709\u4E0E\u4F60\u5EFA\u7ACB\u76F4\u63A5\u8FDE\u63A5\u3002\u4ED6\u4EEC\u7684\u6D88\u606F\u7ECF\u7531\u53E6\u4E00\u4F4D\u6210\u5458\u8F6C\u53D1\uFF0C\u5BF9\u65B9\u80FD\u770B\u5230\u4F60\u4EEC\u5728\u4EA4\u8C08\uFF0C\u4F46\u65E2\u8BFB\u4E0D\u5230\u7B7E\u540D\u4E4B\u5916\u7684\u5185\u5BB9\uFF0C\u4E5F\u65E0\u6CD5\u6539\u52A8\u4F60\u8BF4\u8FC7\u7684\u8BDD\u3002\u7FA4\u7EC4\u4F1A\u6301\u7EED\u5C1D\u8BD5\u4E3A\u4ED6\u4EEC\u5EFA\u7ACB\u76F4\u8FDE\u3002", + "group.relayOnlyOff": "\u4EC5\u4E2D\u7EE7\u6A21\u5F0F\u5DF2\u5173\u95ED\uFF0C\u56E0\u6B64\u6BCF\u4F4D\u6210\u5458\u90FD\u4F1A\u76F4\u63A5\u8FDE\u5230\u4F60\uFF0C\u5E76\u5F97\u77E5\u4F60\u7684 IP \u5730\u5740 \u2014\u2014 \u5305\u62EC\u522B\u4EBA\u9080\u8BF7\u8FDB\u6765\u7684\u6210\u5458\u3002\u82E5\u8FD9\u4E00\u70B9\u5728\u6B64\u5904\u5F88\u91CD\u8981\uFF0C\u8BF7\u5728\u7F51\u7EDC\u8BBE\u7F6E\u4E2D\u5F00\u542F\u5B83\u3002", + "group.memberOffline": "{name} \u5904\u4E8E\u79BB\u7EBF\u72B6\u6001\uFF0C\u6536\u4E0D\u5230\u6D88\u606F\u3002\u5BF9\u65B9\u4ECD\u662F\u6210\u5458\uFF1A\u79FB\u9664\u4F1A\u8BA9\u7FA4\u7EC4\u91CD\u65B0\u751F\u6210\u5BC6\u94A5\u3002", + "group.joinNote": "\u5176\u4ED6\u6210\u5458\u4F1A\u77E5\u9053\u4F60\u5728\u8FD9\u4E2A\u7FA4\u91CC\u3002\u6CA1\u6709\u53EF\u4EE5\u8865\u770B\u7684\u5386\u53F2\u8BB0\u5F55 - \u7FA4\u7EC4\u4ECE\u7A7A\u767D\u5F00\u59CB\u3002", + "group.inviteSentNote": "\u5728\u5BF9\u65B9\u63A5\u53D7\u4E4B\u524D\uFF0C\u7FA4\u7EC4\u7167\u5E38\u8FD0\u4F5C\u3002\u4ED6\u4EEC\u6CA1\u6709\u5386\u53F2\u8BB0\u5F55\u53EF\u8865\u770B \u2014\u2014 \u53EA\u4F1A\u770B\u5230\u4ECE\u73B0\u5728\u8D77\u53D1\u9001\u7684\u5185\u5BB9\u3002", + "group.errNotCreated": "\u7FA4\u7EC4\u672A\u521B\u5EFA", + "group.errNobodyAccepted": "\u6CA1\u6709\u4EBA\u53CA\u65F6\u63A5\u53D7\u9080\u8BF7\u3002", + "group.errNothingSent": "\u4EC0\u4E48\u90FD\u6CA1\u6709\u53D1\u9001\uFF0C\u4E5F\u6CA1\u6709\u6821\u9A8C\u3002\u8BF7\u5173\u95ED\u6B64\u7A97\u53E3\uFF0C\u7B49\u6240\u6709\u4EBA\u90FD\u8FDE\u4E0A\u540E\u518D\u8BD5\u3002", + "group.errNotFormed": "\u65E0\u6CD5\u7EC4\u5EFA\u8FD9\u4E2A\u7FA4\u7EC4\u3002", + "group.errFull": "\u8FD9\u4E2A\u7FA4\u7EC4\u5DF2\u6EE1\u3002", + "group.errInviteFailed": "\u9080\u8BF7\u672A\u80FD\u53D1\u9001 - \u8BE5\u804A\u5929\u672A\u8FDE\u63A5\u3002", + "group.errNoMemberList": "\u7FA4\u4E3B\u59CB\u7EC8\u6CA1\u6709\u53D1\u9001\u6210\u5458\u540D\u5355\u3002", + "group.errUnsignedList": "\u6210\u5458\u540D\u5355\u6CA1\u6709\u7FA4\u4E3B\u7684\u7B7E\u540D\u3002\u8BF7\u4E0D\u8981\u91CD\u8BD5 - \u76F4\u63A5\u544A\u77E5\u5BF9\u65B9\u3002", + "group.errNotOwner": "\u6709\u975E\u7FA4\u4E3B\u7684\u4EBA\u8BD5\u56FE\u6539\u52A8\u6210\u5458\u540D\u5355\u3002", + "hdr.tagline": "\u7AEF\u5230\u7AEF\u52A0\u5BC6", + "hdr.netSettings": "\u9AD8\u7EA7\u7F51\u7EDC\u8BBE\u7F6E", + "hdr.netSettingsTitle": "\u9AD8\u7EA7\u7F51\u7EDC\u8BBE\u7F6E\uFF08STUN/TURN\uFF09", + "hdr.disconnect": "\u65AD\u5F00\u8FDE\u63A5", + "status.connected": "\u5DF2\u8FDE\u63A5", + "status.connecting": "\u8FDE\u63A5\u4E2D\u2026", + "status.notConnected": "\u672A\u8FDE\u63A5", + "status.reconnecting": "\u91CD\u65B0\u8FDE\u63A5\u4E2D\u2026", + "status.retrying": "\u91CD\u8BD5\u4E2D\u2026", + "status.verifying": "\u6821\u9A8C\u4E2D\u2026", + "status.peerDisconnected": "\u5BF9\u65B9\u5DF2\u65AD\u5F00", + "sec.replayProtection": "\u91CD\u653E\u653B\u51FB\u9632\u62A4", + "sec.messageIntegrity": "\u6D88\u606F\u5B8C\u6574\u6027\uFF08HMAC\uFF09", + "sec.forwardSecrecy": "\u5B8C\u7F8E\u524D\u5411\u4FDD\u5BC6", + "sec.metadataProtection": "\u5143\u6570\u636E\u4FDD\u62A4", + "sec.trafficObfuscation": "\u6D41\u91CF\u6DF7\u6DC6", + "sec.realTests": "\u771F\u5B9E\u7684\u5BC6\u7801\u5B66\u6D4B\u8BD5", + "sec.simulatedData": "\u6A21\u62DF\u6570\u636E", + "sec.testPassed": "\u6D4B\u8BD5\u901A\u8FC7", + "sec.testFailed": "\u6D4B\u8BD5\u5931\u8D25\u6216\u4E0D\u53EF\u7528", + "sec.verificationDone": "\u771F\u5B9E\u7684\u5BC6\u7801\u5B66\u6821\u9A8C\u5DF2\u5B8C\u6210", + "sec.verificationInProgress": "\u5B89\u5168\u6821\u9A8C\u8FDB\u884C\u4E2D\u2026", + "sec.verificationWait": "\u5B89\u5168\u6821\u9A8C\u8FDB\u884C\u4E2D\u2026\n\u8BF7\u7B49\u5F85\u5B9E\u65F6\u7684\u5BC6\u7801\u5B66\u6821\u9A8C\u5B8C\u6210\u3002", + "sec.verificationUnavailable": "\u65E0\u6CD5\u8FDB\u884C\u5B89\u5168\u6821\u9A8C", + "chat.placeholder": "\u5199\u4E00\u6761\u52A0\u5BC6\u6D88\u606F\u2026", + "chat.send": "\u53D1\u9001\u6D88\u606F", + "chat.sendFiles": "\u53D1\u9001\u6587\u4EF6", + "chat.hideFiles": "\u9690\u85CF\u6587\u4EF6", + "chat.recordVoice": "\u5F55\u5236\u8BED\u97F3\u6D88\u606F", + "chat.sendVoice": "\u53D1\u9001\u8BED\u97F3\u6D88\u606F", + "chat.discard": "\u653E\u5F03", + "chat.codeBlock": "\u4F5C\u4E3A\u4EE3\u7801\u5757\u53D1\u9001\uFF08\u4F1A\u5C55\u5F00\u8F93\u5165\u6846\uFF09", + "chat.codeHint": "\u4EE3\u7801\u7247\u6BB5 \xB7 \u4FDD\u7559\u683C\u5F0F \xB7 \u2318\u21B5 \u53D1\u9001", + "chat.viewOnce": "\u9605\u540E\u5373\u711A", + "chat.viewOnceTitle": "\u9605\u540E\u5373\u711A - \u5BF9\u65B9\u8BFB\u8FC7\u540E\u5373\u6D88\u5931", + "chat.viewOncePrefix": "\u9605\u540E\u5373\u711A \xB7 ", + "chat.viewOnceTap": "\u9605\u540E\u5373\u711A \xB7 \u8F7B\u89E6\u67E5\u770B", + "chat.viewedOnce": "\u5DF2\u67E5\u770B", + "chat.disappearing": "\u5B9A\u65F6\u6D88\u606F - \u53CC\u65B9\u90FD\u4F1A\u5220\u9664", + "chat.disappearAfter": "\u591A\u4E45\u540E\u6D88\u5931", + "chat.visibleFor": "\u53EF\u89C1\u65F6\u957F", + "chat.timerPrefix": "\u5B9A\u65F6 \xB7 ", + "chat.expired": "\u8FD9\u6761\u6D88\u606F\u5DF2\u8FC7\u671F", + "chat.deleteForEveryone": "\u4E3A\u6240\u6709\u4EBA\u5220\u9664", + "chat.sending": "\u53D1\u9001\u4E2D", + "chat.delivered": "\u5DF2\u9001\u8FBE", + "chat.notSent": "\u672A\u53D1\u9001", + "chat.notSentReason": "\u672A\u53D1\u9001 - \u5B89\u5168\u901A\u9053\u5C1A\u672A\u5C31\u7EEA\u3002\u8BF7\u91CD\u65B0\u8FDE\u63A5\u540E\u7EE7\u7EED\u3002", + "chat.encrypted": "\u5DF2\u52A0\u5BC6", + "chat.decrypted": "\u5DF2\u89E3\u5BC6", + "chat.encryptedOnDevice": "\u5DF2\u5728\u4F60\u7684\u8BBE\u5907\u4E0A\u52A0\u5BC6", + "chat.uploading": "\u4E0A\u4F20\u4E2D", + "chat.downloading": "\u4E0B\u8F7D\u4E2D", + "chat.transferring": "\u4F20\u8F93\u4E2D\u2026", + "chat.copied": "\u5DF2\u590D\u5236\uFF01", + "chat.collapse": "\u6536\u8D77", + "chat.closeMenu": "\u5173\u95ED\u83DC\u5355", + "chat.newChat": "\u65B0\u5EFA\u804A\u5929", + "chat.newGroup": "\u65B0\u5EFA\u7FA4\u7EC4", + "chat.createGroup": "\u521B\u5EFA\u7FA4\u7EC4", + "chat.groupChats": "\u7FA4\u804A", + "chat.secureChat": "\u5B89\u5168\u804A\u5929", + "chat.nameThis": "\u7ED9\u8FD9\u4E2A\u804A\u5929\u8D77\u4E2A\u540D\u5B57", + "chat.rename": "\u91CD\u547D\u540D\u804A\u5929\uFF08\u4EC5\u672C\u5730\uFF09", + "chat.renameHint": "\u53CC\u51FB\u53EF\u91CD\u547D\u540D", + "chat.localLabel": "\u672C\u5730\u540D\u79F0 \xB7 \u53EA\u4FDD\u5B58\u5728\u8FD9\u53F0\u8BBE\u5907\u4E0A", + "chat.setStatus": "\u8BBE\u7F6E\u4F60\u7684\u72B6\u6001", + "chat.yourStatusPrefix": "\u4F60\u7684\u72B6\u6001 - ", + "chat.meshHint": "\u6700\u591A 8 \u4EBA \xB7 P2P \u7F51\u72B6\u8FDE\u63A5", + "chat.offline": "\u79BB\u7EBF", + "chat.noNetwork": "\u65E0\u7F51\u7EDC \xB7 \u6B63\u5728\u91CD\u8FDE", + "chat.startVoiceCall": "\u53D1\u8D77\u52A0\u5BC6\u8BED\u97F3\u901A\u8BDD", + "chat.startVideoCall": "\u53D1\u8D77\u52A0\u5BC6\u89C6\u9891\u901A\u8BDD", + "chat.verifyForCalls": "\u5148\u6821\u9A8C\u4F1A\u8BDD\u624D\u80FD\u901A\u8BDD", + "chat.e2eeNote": "\u6BCF\u6761\u6D88\u606F\u5728\u79BB\u5F00\u4F60\u7684\u8BBE\u5907\u4E4B\u524D\u90FD\u4F1A\u88AB\u7AEF\u5230\u7AEF\u52A0\u5BC6\u3002", + "chat.peersOnly": "\u4EC5\u4EE5\u7AEF\u5230\u7AEF\u65B9\u5F0F\u53D1\u7ED9\u5DF2\u8FDE\u63A5\u7684\u5BF9\u7AEF - \u4ECE\u4E0D\u5B58\u653E\u5728\u670D\u52A1\u5668\u4E0A\u3002", + "flow.invitationCreated": "\u5DF2\u521B\u5EFA\u5B89\u5168\u9080\u8BF7", + "flow.invitationCreatedBang": "\u5B89\u5168\u9080\u8BF7\u5DF2\u521B\u5EFA\u5E76\u52A0\u5BC6\u3002", + "flow.responseCreated": "\u5DF2\u521B\u5EFA\u5B89\u5168\u5E94\u7B54", + "flow.responseCreatedBang": "\u5B89\u5168\u5E94\u7B54\u5DF2\u521B\u5EFA\u3002", + "flow.sendInvitation": "\u901A\u8FC7\u5B89\u5168\u6E20\u9053\uFF08\u901A\u8BDD\u3001\u77ED\u4FE1\u7B49\uFF09\u628A\u9080\u8BF7\u7801\u53D1\u7ED9\u5BF9\u65B9\u3002", + "flow.sendResponse": "\u901A\u8FC7\u5B89\u5168\u6E20\u9053\u628A\u5E94\u7B54\u7801\u53D1\u7ED9\u53D1\u8D77\u65B9\uFF0C\u6216\u8BA9\u5BF9\u65B9\u626B\u63CF\u4E0B\u65B9\u7684\u4E8C\u7EF4\u7801\u3002", + "flow.sendEncryptedCode": "\u53D1\u9001\u52A0\u5BC6\u4EE3\u7801", + "flow.sendTheResponse": "\u53D1\u9001\u5E94\u7B54", + "flow.pasteOrWrite": "\u7C98\u8D34\u6216\u8F93\u5165\u4EE3\u7801\u2026", + "flow.processingInvitation": "\u6B63\u5728\u5904\u7406\u5B89\u5168\u9080\u8BF7\u2026", + "flow.processingResponse": "\u6B63\u5728\u5904\u7406\u5B89\u5168\u5E94\u7B54\u2026", + "flow.finalizing": "\u6B63\u5728\u5B8C\u6210\u5B89\u5168\u8FDE\u63A5\u2026", + "flow.channelEstablished": "\u5B89\u5168\u901A\u9053\u5DF2\u5EFA\u7ACB", + "flow.channelReady": "\u5B89\u5168\u901A\u9053\u5DF2\u5C31\u7EEA", + "flow.restoring": "\u6B63\u5728\u6062\u590D\u8FDE\u63A5\u2026", + "flow.invitationCaptured": "\u5DF2\u8BFB\u53D6\u9080\u8BF7\u3002", + "err.needInvitation": "\u9700\u8981\u7C98\u8D34\u5BF9\u65B9\u7ED9\u4F60\u7684\u9080\u8BF7\u7801\u3002", + "err.needResponse": "\u9700\u8981\u7C98\u8D34\u5BF9\u65B9\u7ED9\u4F60\u7684\u5E94\u7B54\u7801\u3002", + "err.responseFormat": "\u5E94\u7B54\u683C\u5F0F\u65E0\u6548 - \u8BF7\u68C0\u67E5\u4EE3\u7801", + "err.responseNoKey": "\u5E94\u7B54\u7801\u65E0\u6548 - \u7F3A\u5C11\u6216\u635F\u574F\u4E86\u5BC6\u7801\u5B66\u5BC6\u94A5\u3002\u8BF7\u68C0\u67E5\u4EE3\u7801\u540E\u91CD\u8BD5\u3002", + "err.responseNoSignKey": "\u5E94\u7B54\u7801\u65E0\u6548 - \u7F3A\u5C11\u7B7E\u540D\u6821\u9A8C\u5BC6\u94A5\u3002\u8BF7\u68C0\u67E5\u4EE3\u7801\u540E\u91CD\u8BD5\u3002", + "err.responseOutdated": "\u5E94\u7B54\u6570\u636E\u5DF2\u8FC7\u671F - \u8BF7\u4F7F\u7528\u65B0\u7684\u9080\u8BF7", + "err.setupError": "\u5EFA\u7ACB\u8FDE\u63A5\u65F6\u51FA\u9519", + "err.notReady": "\u8FDE\u63A5\u5C1A\u672A\u5C31\u7EEA", + "err.securityBreach": "\u68C0\u6D4B\u5230\u5B89\u5168\u6F0F\u6D1E - \u8FDE\u63A5\u5DF2\u62D2\u7EDD", + "err.securityValidation": "\u5B89\u5168\u6821\u9A8C\u672A\u901A\u8FC7 - \u53EF\u80FD\u5B58\u5728\u653B\u51FB", + "err.retiredQr": "\u8FD9\u4E2A\u4E8C\u7EF4\u7801\u4F7F\u7528\u4E86\u5DF2\u5F03\u7528\u7684\u683C\u5F0F\uFF0C\u65E0\u6CD5\u4F20\u9012\u9080\u8BF7\u3002\u8BF7\u8BA9\u5BF9\u65B9\u91CD\u65B0\u751F\u6210\uFF0C\u6216\u6539\u7528\u590D\u5236\u7C98\u8D34\u3002", + "err.compressedQrNote": "\u538B\u7F29\u7684\u4E8C\u7EF4\u7801\u4E3A\u4E86\u7B80\u77ED\u53EF\u80FD\u7701\u7565 SDP\u3002\u5982\u679C\u8FDE\u63A5\u5931\u8D25\uFF0C\u8BF7\u6539\u7528\u590D\u5236\u7C98\u8D34\u3002", + "err.inviteNotConnected": "\u9080\u8BF7\u672A\u80FD\u53D1\u9001\u3002\u8BE5\u804A\u5929\u5F53\u524D\u672A\u8FDE\u63A5\u3002", + "err.inviteNotConnectedRetry": "\u9080\u8BF7\u672A\u80FD\u53D1\u9001\u3002\u8BE5\u804A\u5929\u5F53\u524D\u672A\u8FDE\u63A5 - \u8BF7\u91CD\u65B0\u6253\u5F00\u540E\u518D\u8BD5\u3002", + "err.nobodyAccepted": "\u6CA1\u6709\u4EBA\u63A5\u53D7\u9080\u8BF7\u3002\u7FA4\u7EC4\u4FDD\u6301\u4E0D\u53D8\u3002", + "err.noAudio": "\u6CA1\u6709\u5F55\u5230\u58F0\u97F3 - \u8BF7\u68C0\u67E5\u9EA6\u514B\u98CE\u6743\u9650\u540E\u91CD\u8BD5\u3002", + "err.voiceNeedsConnection": "\u53D1\u9001\u8BED\u97F3\u6D88\u606F\u9700\u8981\u5904\u4E8E\u6D3B\u52A8\u72B6\u6001\u7684\u5B89\u5168\u8FDE\u63A5\u3002\u8BF7\u91CD\u65B0\u8FDE\u63A5\u540E\u91CD\u8BD5\u3002", + "err.voiceRestoring": "\u6B63\u5728\u6062\u590D\u8FDE\u63A5 - \u8BF7\u7A0D\u540E\u518D\u8BD5\u7740\u53D1\u9001\u8BED\u97F3\u6D88\u606F\u3002", + "err.fileTooLarge": "\u6587\u4EF6\u8FC7\u5927", + "sas.safetyNumber": "\u5B89\u5168\u7801", + "sas.incorrect": "\u5B89\u5168\u7801\u4E0D\u6B63\u786E\u3002\u8BF7\u4E0E\u5BF9\u65B9\u6838\u5BF9\u540E\u91CD\u8BD5\u3002", + "sas.noMatch": "\u5B89\u5168\u7801\u4E0D\u4E00\u81F4", + "sas.makeSure": "\u8BF7\u786E\u8BA4\u4E24\u8FB9\u7684\u5B89\u5168\u7801\u5B8C\u5168\u4E00\u81F4\u3002", + "sas.tooManyAttempts": "\u9519\u8BEF\u6B21\u6570\u8FC7\u591A\u3002\u4E3A\u5B89\u5168\u8D77\u89C1\uFF0C\u4F1A\u8BDD\u5DF2\u91CD\u7F6E\u3002", + "sas.verificationFailed": "\u6821\u9A8C\u5931\u8D25", + "sas.verified": "\u5DF2\u6821\u9A8C \xB7 \u5B8C\u7F8E\u524D\u5411\u4FDD\u5BC6", + "sas.runVerification": "\u8FD0\u884C\u5B89\u5168\u6821\u9A8C", + "sec.panelTitle": "\u7F51\u7EDC\u4E0E\u5BC6\u7801\u5B66\u8BE6\u60C5", + "sec.security": "\u5B89\u5168", + "sec.transport": "\u4F20\u8F93", + "sec.keyExchange": "\u5BC6\u94A5\u4EA4\u6362", + "sec.allEnabled": "\u6240\u6709\u5B89\u5168\u529F\u80FD\u9ED8\u8BA4\u5F00\u542F", + "sec.realTimeNote": "\u4F7F\u7528\u771F\u5B9E\u5BC6\u7801\u5B66\u51FD\u6570\u8FDB\u884C\u5B9E\u65F6\u6821\u9A8C - \u6CA1\u6709\u4EFB\u4F55\u4F2A\u9020\u6570\u636E\u3002", + "sec.simulatedWarning": "\u6CE8\u610F\uFF1A\u8FDE\u63A5\u53EF\u80FD\u5C1A\u672A\u5B8C\u5168\u5EFA\u7ACB - \u8FD9\u4E9B\u6570\u503C\u53EF\u80FD\u662F\u6A21\u62DF\u7684\u3002", + "dl.title": "\u4E0B\u8F7D SecureBit", + "dl.free": "\u514D\u8D39 \xB7 \u5F00\u6E90", + "dl.soon": "\u79FB\u52A8\u7AEF\u5E94\u7528\uFF08iOS\u3001Android\uFF09\u4E0E\u6D4F\u89C8\u5668\u6269\u5C55\uFF08Chrome\u3001Firefox\u3001Opera\uFF09\u5373\u5C06\u63A8\u51FA\u3002", + "chatHdr.chat": "\u804A\u5929", + "chatHdr.chats": "\u804A\u5929", + "chatHdr.newChat": "+ \u65B0\u5EFA", + "chatHdr.secure": "\u5DF2\u52A0\u5BC6", + "chatHdr.p2pSub": "P2P \xB7 \u7AEF\u5230\u7AEF\u52A0\u5BC6", + "chatHdr.save": "\u4FDD\u5B58", + "chatHdr.close": "\u5173\u95ED", + "chatHdr.expand": "\u5C55\u5F00", + "chatHdr.you": "\u4F60", + "chatHdr.qrCode": "\u4E8C\u7EF4\u7801", + "chat.disconnected": "\u5DF2\u65AD\u5F00", + "call.mute": "\u9759\u97F3", + "call.endShort": "\u7ED3\u675F", + "group.add": "\u6DFB\u52A0", + "group.send": "\u53D1\u9001", + "sec.pfsShort": "\u5B8C\u7F8E\u524D\u5411\u4FDD\u5BC6", + "sec.cipher": "\u52A0\u5BC6\u7B97\u6CD5", + "chat.close": "\u5173\u95ED", + "file.needConnection": "\u6587\u4EF6\u4F20\u8F93\u9700\u8981\u5DF2\u5EFA\u7ACB\u7684\u8FDE\u63A5", + "presence.available": "\u5728\u7EBF", + "presence.away": "\u79BB\u5F00", + "presence.busy": "\u5FD9\u788C", + "presence.offline": "\u79BB\u7EBF", + "presence.invisible": "\u9690\u8EAB", + "presence.availableDesc": "\u5728\u7EBF\u4E14\u53EF\u8054\u7CFB", + "presence.awayDesc": "\u7A7A\u95F2 \xB7 \u6682\u65F6\u79BB\u5F00", + "presence.busyDesc": "\u8BF7\u52FF\u6253\u6270", + "presence.invisibleDesc": "\u5BF9\u4ED6\u4EBA\u663E\u793A\u4E3A\u79BB\u7EBF", + "presence.online": "\u5728\u7EBF", + "conn.p2p": "P2P \xB7 \u5DF2\u8FDE\u63A5", + "conn.verifying": "\u6821\u9A8C\u4E2D\u2026", + "conn.connecting": "\u8FDE\u63A5\u4E2D\u2026", + "conn.reconnecting": "\u91CD\u65B0\u8FDE\u63A5\u4E2D\u2026", + "conn.peerDisconnected": "\u5BF9\u65B9\u5DF2\u65AD\u5F00", + "conn.disconnected": "\u5DF2\u65AD\u5F00", + "chat.defaultLabel": "\u804A\u5929", + "groupPhase.forming": "\u6B63\u5728\u7EC4\u5EFA\u2026", + "groupPhase.commitments": "\u6B63\u5728\u4EA4\u6362\u627F\u8BFA\u2026", + "groupPhase.revealing": "\u6B63\u5728\u63ED\u793A\u2026", + "groupPhase.compare": "\u8BF7\u6838\u5BF9\u7FA4\u7EC4\u5B89\u5168\u7801", + "groupPhase.ready": "\u7FA4\u7EC4\u5DF2\u5C31\u7EEA", + "groupPhase.failed": "\u7FA4\u7EC4\u672A\u521B\u5EFA", + "call.qualityGood": "\u826F\u597D", + "call.qualityFair": "\u4E00\u822C", + "call.qualityWeak": "\u8F83\u5DEE", + "msg.code": "\u4EE3\u7801", + "msg.timer": "\u5B9A\u65F6", + "msg.voice": "\u8BED\u97F3", + "msg.play": "\u64AD\u653E", + "msg.sent": "\u5DF2\u53D1\u9001", + "msg.read": "\u5DF2\u8BFB", + "report.title": "\u5B9E\u65F6\u5B89\u5168\u6821\u9A8C", + "report.active": "\u8FD0\u884C\u4E2D", + "report.testsPassed": "\u901A\u8FC7\u7684\u6D4B\u8BD5", + "report.verifiedAt": "\u6821\u9A8C\u4E8E", + "report.source": "\u6765\u6E90", + "secTest.verifyECDHKeyExchange": "ECDH \u5BC6\u94A5\u4EA4\u6362", + "secTest.verifyECDSASignatures": "ECDSA \u6570\u5B57\u7B7E\u540D", + "secTest.verifyEncryption": "AES-GCM \u52A0\u5BC6", + "secTest.verifyMessageIntegrity": "\u6D88\u606F\u5B8C\u6574\u6027", + "secTest.verifyPerfectForwardSecrecy": "\u5B8C\u7F8E\u524D\u5411\u4FDD\u5BC6", + "secTest.verifyPFS": "\u5B8C\u7F8E\u524D\u5411\u4FDD\u5BC6", + "secTest.verifyReplayProtection": "\u91CD\u653E\u653B\u51FB\u9632\u62A4", + "secTest.verifyDTLSFingerprint": "DTLS \u6307\u7EB9", + "secTest.verifySASVerification": "SAS \u6821\u9A8C", + "secTest.verifyMetadataProtection": "\u5143\u6570\u636E\u4FDD\u62A4", + "secTest.verifyTrafficObfuscation": "\u6D41\u91CF\u6DF7\u6DC6", + "secTest.verifyPacketPadding": "\u6570\u636E\u5305\u586B\u5145", + "secTest.verifyNestedEncryption": "\u5D4C\u5957\u52A0\u5BC6", + "secTest.verifyNonExtractableKeys": "\u4E0D\u53EF\u5BFC\u51FA\u7684\u5BC6\u94A5", + "secTest.verifyRateLimiting": "\u901F\u7387\u9650\u5236", + "secTest.verifyMutualAuth": "\u53CC\u5411\u8EAB\u4EFD\u9A8C\u8BC1", + "secTest.verifyAuthProof": "\u8EAB\u4EFD\u9A8C\u8BC1\u51ED\u8BC1", + "secTest.verifyEnhancedValidation": "\u5F3A\u5316\u6821\u9A8C", + "secTest.verifyAdvancedFeatures": "\u9AD8\u7EA7\u529F\u80FD", + "secTest.verifySignature": "\u7B7E\u540D\u68C0\u67E5", + "secDetail.Security system initializing...": "\u5B89\u5168\u7CFB\u7EDF\u6B63\u5728\u542F\u52A8\u2026", + "secDetail.Nested encryption active": "\u5D4C\u5957\u52A0\u5BC6\u5DF2\u542F\u7528", + "secDetail.Nested encryption failed": "\u5D4C\u5957\u52A0\u5BC6\u5931\u8D25", + "secDetail.Packet padding active": "\u6570\u636E\u5305\u586B\u5145\u5DF2\u542F\u7528", + "secDetail.Packet padding failed": "\u6570\u636E\u5305\u586B\u5145\u5931\u8D25", + "secDetail.Advanced features active": "\u9AD8\u7EA7\u529F\u80FD\u5DF2\u542F\u7528", + "secDetail.Advanced features failed": "\u9AD8\u7EA7\u529F\u80FD\u5931\u8D25", + "secDetail.No encryption key available": "\u6CA1\u6709\u53EF\u7528\u7684\u52A0\u5BC6\u5BC6\u94A5", + "secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM \u52A0\u89E3\u5BC6\u5DE5\u4F5C\u6B63\u5E38", + "secDetail.No ECDH key pair available": "\u6CA1\u6709\u53EF\u7528\u7684 ECDH \u5BC6\u94A5\u5BF9", + "secDetail.Key derivation failed": "\u5BC6\u94A5\u63A8\u5BFC\u5931\u8D25", + "secDetail.No ECDSA key pair available": "\u6CA1\u6709\u53EF\u7528\u7684 ECDSA \u5BC6\u94A5\u5BF9", + "secDetail.ECDSA digital signatures working correctly": "ECDSA \u6570\u5B57\u7B7E\u540D\u5DE5\u4F5C\u6B63\u5E38", + "secDetail.MAC key not available or invalid": "MAC \u5BC6\u94A5\u7F3A\u5931\u6216\u65E0\u6548", + "secDetail.Rate limiter did not block a message over the limit": "\u901F\u7387\u9650\u5236\u5668\u672A\u62E6\u622A\u8D85\u51FA\u9650\u989D\u7684\u6D88\u606F", + "secDetail.Rate limiter is not available": "\u901F\u7387\u9650\u5236\u5668\u4E0D\u53EF\u7528", + "secDetail.Replay protection is working correctly": "\u91CD\u653E\u653B\u51FB\u9632\u62A4\u5DE5\u4F5C\u6B63\u5E38", + "secDetail.Replay protection not enabled": "\u672A\u542F\u7528\u91CD\u653E\u653B\u51FB\u9632\u62A4", + "secDetail.SAS code not available": "SAS \u5B89\u5168\u7801\u4E0D\u53EF\u7528", + "secDetail.SAS verification code is valid and available": "SAS \u6821\u9A8C\u7801\u6709\u6548\u4E14\u53EF\u7528", + "secDetail.Traffic obfuscation is working correctly": "\u6D41\u91CF\u6DF7\u6DC6\u5DE5\u4F5C\u6B63\u5E38", + "secDetail.Traffic obfuscation not enabled": "\u672A\u542F\u7528\u6D41\u91CF\u6DF7\u6DC6", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "\u672C\u6B21\u4F1A\u8BDD\u6CA1\u6709\u4E0D\u53EF\u5BFC\u51FA\u7684\u4E34\u65F6 ECDH \u5BC6\u94A5\u5BF9", + "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": "\u4EC5\u6709\u4F1A\u8BDD\u7EA7\u524D\u5411\u4FDD\u5BC6\uFF1A\u5BC6\u94A5\u6309\u4F1A\u8BDD\u4E34\u65F6\u751F\u6210\uFF0C\u4F46\u6B64\u8FDE\u63A5\u672A\u542F\u7528 Double Ratchet\uFF08\u5BF9\u65B9\u4F7F\u7528\u8F83\u65E7\u7248\u672C\uFF09\uFF0C\u56E0\u6B64\u4E00\u65E6\u4F1A\u8BDD\u5BC6\u94A5\u6CC4\u9732\uFF0C\u6574\u6BB5\u5BF9\u8BDD\u90FD\u4F1A\u66B4\u9732\u3002", + "msg.pause": "\u6682\u505C", + "msg.failed": "\u5931\u8D25", + "groupErr.timeout": "\u6709\u6210\u5458\u5728\u5B89\u5168\u7801\u51C6\u5907\u597D\u4E4B\u524D\u5C31\u4E0D\u518D\u54CD\u5E94\u3002", + "groupErr.keyMismatch": "\u67D0\u4F4D\u6210\u5458\u7684\u5BC6\u94A5\u4E0E\u5176\u58F0\u79F0\u7684\u8EAB\u4EFD\u4E0D\u7B26\u3002", + "groupErr.revealMismatch": "\u67D0\u4F4D\u6210\u5458\u63ED\u793A\u7684\u503C\u4E0E\u5176\u5148\u524D\u7684\u627F\u8BFA\u4E0D\u7B26\u3002", + "groupErr.commitChanged": "\u6709\u6210\u5458\u4E2D\u9014\u66F4\u6539\u4E86\u81EA\u5DF1\u7684\u627F\u8BFA\u3002", + "groupErr.missingKey": "\u540D\u5355\u91CC\u6709\u4E00\u4F4D\u6210\u5458\uFF0C\u5176\u5BC6\u94A5\u59CB\u7EC8\u6CA1\u6709\u9001\u5230\u3002", + "groupErr.outsider": "\u6536\u5230\u4E86\u6765\u81EA\u7FA4\u7EC4\u4E4B\u5916\u7684\u6570\u636E\u5E27\u3002", + "groupErr.limit": "\u4E00\u4E2A\u7FA4\u7EC4\u6700\u591A\u516B\u4F4D\u6210\u5458\u3002", + "groupErr.tooLarge": "\u6709\u4E00\u6761\u6D88\u606F\u8FC7\u5927\uFF0C\u65E0\u6CD5\u53D1\u9001\u7ED9\u7FA4\u7EC4\u3002", + "fileType.text": "\u7EAF\u6587\u672C", + "fileType.images": "\u56FE\u7247", + "fileType.archives": "\u538B\u7F29\u5305", + "fileType.voice": "\u8BED\u97F3\u6D88\u606F", + "fileType.unsupported": "\u4E0D\u652F\u6301", + "qrScan.title": "\u626B\u63CF\u4E8C\u7EF4\u7801", + "qrScan.auto": "\u81EA\u52A8\u6A21\u5F0F", + "qrScan.reset": "\u91CD\u7F6E", + "qrScan.autoScroll": "\u5DF2\u542F\u7528\u81EA\u52A8\u6EDA\u52A8", + "qrScan.starting": "\u6B63\u5728\u542F\u52A8\u6444\u50CF\u5934\u2026", + "qrScan.point": "\u628A\u6444\u50CF\u5934\u5BF9\u51C6\u5BF9\u65B9\u7684\u4E8C\u7EF4\u7801", + "qrScan.tapFocus": "\u8F7B\u89E6\u5C4F\u5E55\u5BF9\u7126", + "qrScan.focusing": "\u5BF9\u7126\u4E2D\u2026", + "iceErr.notArray": "\u670D\u52A1\u5668\u5217\u8868\u5FC5\u987B\u662F\u6570\u7EC4", + "iceErr.invalidJson": "JSON \u65E0\u6548", + "iceErr.tooMany": "\u670D\u52A1\u5668\u8FC7\u591A\uFF08\u6700\u591A {max} \u4E2A\uFF09", + "iceErr.invalidEntry": "{label}\uFF1A\u6761\u76EE\u65E0\u6548", + "iceErr.urlCount": "{label}\uFF1A\u9700\u8981 1 \u5230 {max} \u4E2A URL", + "iceErr.turnCreds": "{label}\uFF1ATURN \u670D\u52A1\u5668\u901A\u5E38\u9700\u8981\u7528\u6237\u540D\u4E0E\u51ED\u636E", + "iceUrl.notString": "URL \u5FC5\u987B\u662F\u5B57\u7B26\u4E32", + "iceUrl.empty": "URL \u4E3A\u7A7A", + "iceUrl.tooLong": "URL \u8FC7\u957F", + "iceUrl.badChars": "URL \u542B\u6709\u65E0\u6548\u5B57\u7B26", + "iceUrl.badScheme": "URL \u5FC5\u987B\u4EE5 stun:\u3001stuns:\u3001turn: \u6216 turns: \u5F00\u5934", + "iceUrl.badQuery": "URL \u7684\u67E5\u8BE2\u90E8\u5206\u65E0\u6548", + "iceUrl.noHost": "URL \u7F3A\u5C11\u4E3B\u673A", + "iceUrl.badHost": "URL \u7684\u4E3B\u673A\u6216\u7AEF\u53E3\u65E0\u6548", + "iceUrl.badTransport": "URL \u7684\u67E5\u8BE2\u5FC5\u987B\u662F transport=udp \u6216 transport=tcp", + "msg.off": "\u5173\u95ED", + "file.consentUnavailable": "\u65E0\u6CD5\u5F81\u5F97\u540C\u610F", + "secLevel.MAXIMUM": "\u6700\u9AD8", + "secLevel.INITIALIZING": "\u542F\u52A8\u4E2D", + "secLevel.ERROR": "\u9519\u8BEF", + "secLevel.UNKNOWN": "\u672A\u77E5", + "status.error": "\u9519\u8BEF", + "offline.disconnect": "\u65AD\u5F00\u8FDE\u63A5", + "offline.learnMore": "\u4E86\u89E3\u66F4\u591A", + "pwa.installApp": "\u5B89\u88C5\u5E94\u7528", + "chat.onWeb": "\u4F60\u6B63\u5728\u4F7F\u7528\u7F51\u9875\u7248" + }, + "ko": { + "language.label": "\uC5B8\uC5B4", + "community.title": "\uD504\uB77C\uC774\uBC84\uC2DC\uC758 \uBBF8\uB798\uB97C \uD568\uAED8 \uB9CC\uB4ED\uB2C8\uB2E4", + "community.description": "SecureBit\uC740 \uCEE4\uBBA4\uB2C8\uD2F0 \uB355\uBD84\uC5D0 \uC790\uB78D\uB2C8\uB2E4. \uC5EC\uB7EC\uBD84\uC758 \uC544\uC774\uB514\uC5B4\uC640 \uC758\uACAC\uC774 \uC548\uC804\uD55C \uC18C\uD1B5\uC758 \uBBF8\uB798\uB97C \uB9CC\uB4ED\uB2C8\uB2E4 - \uBAA8\uB4E0 \uACFC\uC815\uC774 \uACF5\uAC1C\uB418\uC5B4 \uC788\uACE0, \uC804 \uAD6C\uAC04\uC5D0\uC11C ASN.1 \uAC80\uC99D\uC744 \uC218\uD589\uD569\uB2C8\uB2E4.", + "community.github": "GitHub \uC800\uC7A5\uC18C", + "community.feedback": "\uC758\uACAC \uBCF4\uB0B4\uAE30", + "unique.eyebrow": "\uBB34\uC5C7\uC774 \uB2E4\uB978\uAC00", + "unique.heading": "SecureBit\uC774 \uD2B9\uBCC4\uD55C \uC774\uC720", + "unique.s1.titleTop": "\uACC4\uCE35\uC73C\uB85C \uC313\uC740", + "unique.s1.titleBottom": "\uC554\uD638\uD654 \uCF54\uC5B4", + "unique.s1.collapsed": "\uC554\uD638\uD654 \uCF54\uC5B4", + "unique.s1.desc": "ECDH P-384 \uD0A4 \uAD50\uD658, AES-256-GCM \uD398\uC774\uB85C\uB4DC, ECDSA \uC11C\uBA85, \uADF8\uB9AC\uACE0 \uC644\uC804\uD55C ASN.1 \uAC80\uC99D\uC744 \uD558\uB098\uC758 \uACAC\uACE0\uD55C \uD30C\uC774\uD504\uB77C\uC778\uC73C\uB85C \uBB36\uC5C8\uC2B5\uB2C8\uB2E4.", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "\uC21C\uC218 P2P", + "unique.s2.titleBottom": "WebRTC \uAE30\uBC18", + "unique.s2.collapsed": "WebRTC \uAE30\uBC18 \uC21C\uC218 P2P", + "unique.s2.desc": "\uBA54\uC2DC\uC9C0\uB294 WebRTC\uB97C \uD1B5\uD574 \uAE30\uAE30\uC5D0\uC11C \uAE30\uAE30\uB85C \uACE7\uC7A5 \uC624\uAC11\uB2C8\uB2E4. \uB370\uC774\uD130\uB97C \uBD99\uB4E4\uACE0 \uC788\uB294 \uB9B4\uB808\uC774\uB294 \uC5C6\uACE0, \uC11C\uBC84\uB294 \uB450 \uC0AC\uB78C\uC774 \uC11C\uB85C\uB97C \uCC3E\uB3C4\uB85D \uB3D5\uAE30\uB9CC \uD569\uB2C8\uB2E4.", + "unique.s2.tags": [ + "DTLS 1.3", + "\uB9B4\uB808\uC774 \uC5C6\uC74C" + ], + "unique.s3.titleTop": "\uC644\uC804\uD55C", + "unique.s3.titleBottom": "\uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "unique.s3.collapsed": "\uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "unique.s3.desc": "\uC138\uC158 \uD0A4\uB294 \uB04A\uC784\uC5C6\uC774 \uAD50\uCCB4\uB418\uACE0 \uC0AC\uC6A9 \uD6C4 \uD3D0\uAE30\uB429\uB2C8\uB2E4. \uADF8\uB798\uC11C \uD0A4 \uD558\uB098\uAC00 \uC720\uCD9C\uB418\uC5B4\uB3C4 \uC9C0\uB09C \uB300\uD654\uB294 \uC5F4\uB9AC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", + "unique.s3.tags": [ + "\uC77C\uD68C\uC6A9 \uD0A4", + "\uC790\uB3D9 \uAD50\uCCB4" + ], + "unique.s4.titleTop": "\uD2B8\uB798\uD53D", + "unique.s4.titleBottom": "\uB09C\uB3C5\uD654", + "unique.s4.collapsed": "\uD2B8\uB798\uD53D \uB09C\uB3C5\uD654", + "unique.s4.desc": "\uD328\uD0B7 \uD06C\uAE30\uC640 \uC804\uC1A1 \uAC04\uACA9\uC744 \uCC44\uC6B0\uACE0 \uBB34\uC791\uC704\uB85C \uD750\uD2B8\uB7EC\uB728\uB824, \uD68C\uC120\uC744 \uB4E4\uC5EC\uB2E4\uBCF4\uB294 \uCABD\uC5D0\uC11C\uB3C4 \uBA54\uD0C0\uB370\uC774\uD130\uC758 \uADDC\uCE59\uC774 \uB4DC\uB7EC\uB098\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", + "unique.s4.tags": [ + "\uD328\uD0B7 \uD328\uB529", + "\uC2DC\uAC04 \uC9C0\uD130" + ], + "unique.s5.titleTop": "\uB370\uC774\uD130 \uC218\uC9D1", + "unique.s5.titleBottom": "\uC804\uD600 \uC5C6\uC74C", + "unique.s5.collapsed": "\uB370\uC774\uD130 \uC218\uC9D1 \uC5C6\uC74C", + "unique.s5.desc": "\uACC4\uC815\uB3C4, \uB85C\uADF8\uB3C4, \uC800\uC7A5\uB41C \uBA54\uC2DC\uC9C0\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4. \uC11C\uBC84\uC5D0\uB294 \uC720\uCD9C\uB418\uAC70\uB098 \uC555\uC218\uB418\uAC70\uB098 \uD314\uB9B4 \uAC83\uC774 \uC544\uBB34\uAC83\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4.", + "unique.s5.tags": [ + "\uACC4\uC815 \uC5C6\uC74C", + "\uB85C\uADF8 \uC5C6\uC74C" + ], + "partners.eyebrow": "\uD30C\uD2B8\uB108\uC640 \uC0DD\uD0DC\uACC4", + "partners.heading": "\uD30C\uD2B8\uB108\uB4E4\uC774 \uC2E0\uB8B0\uD569\uB2C8\uB2E4", + "partners.aegis.desc": "\uD3EC\uD2B8\uD3F4\uB9AC\uC624 \uC804\uBC18\uC758 \uAE30\uBC00 \uAE08\uC735 \uC18C\uD1B5\uC744 \uC9C0\uD0A4\uB294 \uC790\uBCF8 \uD30C\uD2B8\uB108\uC785\uB2C8\uB2E4.", + "partners.aegis.role": "\uC804\uB7B5\uC801 \uD22C\uC790\uC790", + "partners.furilabs.desc": "\uD504\uB77C\uC774\uBC84\uC2DC\uB97C \uC55E\uC138\uC6B4 \uB9AC\uB205\uC2A4 \uD3F0\uC73C\uB85C, SecureBit\uC744 \uAE30\uBCF8 \uBCF4\uC548 \uCC44\uB110\uB85C \uD568\uAED8 \uC81C\uACF5\uD569\uB2C8\uB2E4.", + "partners.furilabs.role": "\uAE30\uC220 \uD30C\uD2B8\uB108", + "partners.inviteTitle": "\uD30C\uD2B8\uB108 \uB418\uAE30", + "partners.inviteDesc": "\uD504\uB77C\uC774\uBC84\uC2DC\uB97C \uC704\uD55C \uD558\uB4DC\uC6E8\uC5B4\uB098 \uC778\uD504\uB77C\uB97C \uB9CC\uB4E4\uACE0 \uACC4\uC2E0\uAC00\uC694? SecureBit\uC744 \uD568\uAED8 \uBD99\uC5EC\uBD05\uC2DC\uB2E4.", + "partners.inviteCta": "\uC774\uC57C\uAE30 \uC2DC\uC791\uD558\uAE30", + "roadmap.eyebrow": "\uAC1C\uBC1C \uB85C\uB4DC\uB9F5", + "roadmap.heading": "SecureBit\uC758 \uBC1C\uC790\uCDE8", + "roadmap.subheading": "\uCCAB \uD504\uB85C\uD1A0\uD0C0\uC785\uC5D0\uC11C \uC591\uC790 \uB0B4\uC131 \uBD84\uC0B0 \uB124\uD2B8\uC6CC\uD06C\uAE4C\uC9C0, \uBAA8\uB4E0 \uACC4\uCE35\uC5D0\uC11C \uC644\uC804\uD55C ASN.1 \uAC80\uC99D\uACFC \uD568\uAED8.", + "roadmap.progress": "{total}\uAC1C \uC911 {shipped}\uAC1C \uC644\uB8CC", + "roadmap.upcoming": "{upcoming}\uAC1C \uB0A8\uC74C", + "roadmap.keyFeatures": "\uC8FC\uC694 \uAE30\uB2A5", + "roadmap.status.released": "\uCD9C\uC2DC\uB428", + "roadmap.status.current": "\uC9C4\uD589 \uC911", + "roadmap.status.dev": "\uAC1C\uBC1C \uC911", + "roadmap.status.planned": "\uC608\uC815", + "roadmap.status.research": "\uC5F0\uAD6C", + "hero.headlineTop": "\uB450 \uC0AC\uB78C\uB9CC \uC77D\uC744 \uC218 \uC788\uB294", + "hero.headlineBottom": "\uC9C1\uD1B5 \uD68C\uC120.", + "hero.subheading": "\uD0A4\uB294 \uC5EC\uB7EC\uBD84\uC758 \uAE30\uAE30\uC5D0\uC11C \uB9CC\uB4E4\uC5B4\uC9C0\uACE0 \uB450 \uAE30\uAE30 \uC0AC\uC774\uC5D0\uC11C \uACE7\uBC14\uB85C \uAD50\uD658\uB429\uB2C8\uB2E4. \uACC4\uC815\uB3C4 \uC5C6\uACE0 \uBA54\uC2DC\uC9C0\uB97C \uBCF4\uAD00\uD558\uB294 \uC11C\uBC84\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4.", + "hero.diagramAlt": "\uD55C \uC0C1\uB300\uC640 \uC774\uC5B4\uC9C4 \uC9C1\uD1B5 \uC554\uD638\uD654 \uD68C\uC120, \uADF8\uB9AC\uACE0 \uB4A4\uC774\uC5B4 \uD569\uB958\uD558\uB294 \uB450 \uC0AC\uB78C", + "intro.createTitle": "\uC0C8 \uCC44\uB110 \uB9CC\uB4E4\uAE30", + "intro.createDesc": "\uC5EC\uB7EC\uBD84\uC758 \uAE30\uAE30\uAC00 \uD0A4\uC640 \uC77C\uD68C\uC6A9 \uCD08\uB300\uC7A5\uC744 \uB9CC\uB4ED\uB2C8\uB2E4. \uADF8 \uC5B4\uB290 \uAC83\uB3C4 \uC11C\uBC84\uB97C \uAC70\uCE58\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", + "intro.createCta": "\uD0A4\uC640 \uCD08\uB300\uC7A5 \uB9CC\uB4E4\uAE30", + "intro.joinTitle": "\uCC44\uB110 \uCC38\uC5EC\uD558\uAE30", + "intro.scanTitle": "\uCE74\uBA54\uB77C\uB85C QR \uC2A4\uCE94", + "intro.scanSubtitle": "\uAC00\uC7A5 \uBE60\uB985\uB2C8\uB2E4 - \uC0C1\uB300\uC758 \uD654\uBA74\uC744 \uBE44\uCD94\uC138\uC694", + "intro.orPasteCode": "\uB610\uB294 \uCF54\uB4DC \uBD99\uC5EC\uB123\uAE30", + "intro.pastePlaceholder": "\uC5EC\uAE30\uC5D0 \uCD08\uB300 \uCF54\uB4DC\uB97C \uBD99\uC5EC\uB123\uC73C\uC138\uC694\u2026", + "intro.connect": "\uC5F0\uACB0", + "intro.connecting": "\uCC98\uB9AC \uC911\u2026", + "roadmap.r1.title": "\uAC1C\uBC1C \uC2DC\uC791", + "roadmap.r1.sub": "\uC544\uC774\uB514\uC5B4, \uD504\uB85C\uD1A0\uD0C0\uC785, \uC778\uD504\uB77C \uAD6C\uCD95", + "roadmap.r1.date": "2025\uB144 \uCD08", + "roadmap.r1.features": [ + "\uAC1C\uB150\uACFC \uC694\uAD6C\uC0AC\uD56D \uC815\uB9AC", + "\uAE30\uC220 \uC2A4\uD0DD \uC120\uC815: WebRTC, P2P, \uC554\uD638\uD559", + "\uCCAB \uBA54\uC2DC\uC9D5 \uD504\uB85C\uD1A0\uD0C0\uC785", + "\uC800\uC7A5\uC18C\uC640 CI \uAD6C\uCD95", + "\uAE30\uBCF8 \uC554\uD638\uD654 \uAD6C\uC870", + "UX/UI \uC124\uACC4" + ], + "roadmap.r2.title": "\uC54C\uD30C \uACF5\uAC1C", + "roadmap.r2.sub": "\uCCAB \uACF5\uAC1C \uC54C\uD30C: \uAE30\uBCF8 \uCC44\uD305\uACFC \uD0A4 \uAD50\uD658", + "roadmap.r2.date": "2025\uB144 \uBD04", + "roadmap.r2.features": [ + "WebRTC \uAE30\uBC18 \uAE30\uBCF8 P2P \uBA54\uC2DC\uC9D5", + "\uAC04\uB2E8\uD55C \uC885\uB2E8 \uAC04 \uC554\uD638\uD654 (\uC2DC\uC5F0\uC6A9 \uBC29\uC2DD)", + "\uC548\uC815\uC801\uC778 \uC2DC\uADF8\uB110\uB9C1\uACFC \uC7AC\uC5F0\uACB0", + "\uD14C\uC2A4\uD2B8\uB97C \uC704\uD55C \uCD5C\uC18C \uD654\uBA74", + "\uCD08\uAE30 \uD14C\uC2A4\uD130 \uC758\uACAC \uC218\uC9D1" + ], + "roadmap.r3.title": "\uBCF4\uC548 \uAC15\uD654", + "roadmap.r3.sub": "\uBCF4\uC548\uC744 \uB2E4\uC9C0\uACE0 \uC548\uC815 \uBE0C\uB79C\uCE58 \uACF5\uAC1C", + "roadmap.r3.date": "2025\uB144 \uC5EC\uB984", + "roadmap.r3.features": [ + "ECDH/ECDSA \uC2E4\uC0AC\uC6A9 \uC801\uC6A9", + "\uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131\uACFC \uD0A4 \uAD50\uCCB4", + "\uC778\uC99D \uAC80\uC0AC \uAC1C\uC120", + "\uD30C\uC77C \uC554\uD638\uD654\uC640 \uB300\uC6A9\uB7C9 \uC804\uC1A1", + "\uAE30\uBCF8 \uC554\uD638 \uCC98\uB9AC \uAC10\uC0AC" + ], + "roadmap.r4.title": "\uD655\uC7A5\uACFC \uC548\uC815\uC131", + "roadmap.r4.sub": "\uB124\uD2B8\uC6CC\uD06C \uD655\uC7A5\uACFC \uC548\uC815\uC131 \uAC1C\uC120", + "roadmap.r4.date": "2025\uB144 \uAC00\uC744", + "roadmap.r4.features": [ + "P2P \uC5F0\uACB0\uACFC NAT \uD1B5\uACFC \uCD5C\uC801\uD654", + "\uC7AC\uC5F0\uACB0 \uAD6C\uC870\uC640 \uBA54\uC2DC\uC9C0 \uB300\uAE30\uC5F4", + "\uBAA8\uBC14\uC77C \uBC30\uD130\uB9AC \uC18C\uBAA8 \uAC10\uC18C", + "\uC5EC\uB7EC \uAE30\uAE30 \uAC04 \uB3D9\uAE30\uD654", + "\uAC1C\uBC1C\uC790\uB97C \uC704\uD55C \uBAA8\uB2C8\uD130\uB9C1\uACFC \uB85C\uAE45 \uB3C4\uAD6C" + ], + "roadmap.r5.title": "\uD504\uB77C\uC774\uBC84\uC2DC \uC6B0\uC120", + "roadmap.r5.sub": "\uD504\uB77C\uC774\uBC84\uC2DC\uC5D0 \uC9D1\uC911: \uBA54\uD0C0\uB370\uC774\uD130 \uCD5C\uC18C\uD654", + "roadmap.r5.date": "2025\uB144 \uACA8\uC6B8", + "roadmap.r5.features": [ + "\uBA54\uD0C0\uB370\uC774\uD130 \uBCF4\uD638\uC640 \uC9C0\uBB38 \uCD95\uC18C", + "\uC5B4\uB2C8\uC5B8 \uB77C\uC6B0\uD305\uACFC DHT \uC2E4\uD5D8", + "\uC775\uBA85 \uC5F0\uACB0 \uC635\uC158", + "\uACF5\uAC1C \uCF54\uB4DC \uAC10\uC0AC \uC900\uBE44", + "\uC0AC\uC6A9\uC790 \uD655\uC778 \uC808\uCC28 \uAC1C\uC120" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "\uC644\uC804\uD55C ASN.1 \uAC80\uC99D\uC744 \uAC16\uCD98 18\uACB9 \uAD70\uC6A9 \uC218\uC900 \uC554\uD638\uD654", + "roadmap.r6.date": "2025\uB144 \uB9D0", + "roadmap.r6.features": [ + "ECDH + DTLS + SAS \uC0BC\uC911 \uBCF4\uC548", + "ECDH P-384\uC640 AES-GCM 256\uBE44\uD2B8 \uC554\uD638\uD654", + "DTLS \uC9C0\uBB38 \uD655\uC778", + "SAS(\uC9E7\uC740 \uC778\uC99D \uBB38\uC790\uC5F4) \uD655\uC778", + "\uD0A4 \uAD50\uCCB4\uB97C \uB3D9\uBC18\uD55C \uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "\uC911\uAC04\uC790 \uACF5\uACA9 \uBC29\uC5B4 \uAC15\uD654", + "\uC644\uC804\uD55C ASN.1 DER \uAC80\uC99D", + "OID\uC640 EC \uC810 \uD655\uC778", + "SPKI \uAD6C\uC870 \uAC80\uC99D", + "P2P WebRTC \uAD6C\uC870", + "\uBA54\uD0C0\uB370\uC774\uD130 \uBCF4\uD638", + "100% \uACF5\uAC1C \uC18C\uC2A4" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "Windows, macOS, Linux\uC6A9 \uB124\uC774\uD2F0\uBE0C \uB370\uC2A4\uD06C\uD1B1 \uC571", + "roadmap.r7.date": "2026\uB144 \uCD08", + "roadmap.r7.features": [ + "Windows \uB370\uC2A4\uD06C\uD1B1 \uC571 (Tauri v2)", + "macOS \uB370\uC2A4\uD06C\uD1B1 \uC571 (Tauri v2)", + "Linux AppImage (Tauri v2)", + "\uC2E4\uC2DC\uAC04 \uC54C\uB9BC", + "\uC790\uB3D9 \uC7AC\uC5F0\uACB0", + "\uAE30\uAE30 \uAC04 \uB3D9\uAE30\uD654", + "\uAC1C\uC120\uB41C \uD654\uBA74", + "\uCD5C\uB300 100MB \uD30C\uC77C \uC9C0\uC6D0" + ], + "roadmap.r8.title": "\uC548\uC804\uD55C \uC74C\uC131\uACFC \uD1B5\uD654", + "roadmap.r8.sub": "\uC554\uD638\uD654\uB41C \uC74C\uC131 \uBA54\uC2DC\uC9C0, \uC74C\uC131 \uD1B5\uD654, \uC601\uC0C1 \uD1B5\uD654", + "roadmap.r8.date": "2026\uB144 \uCD08", + "roadmap.r8.features": [ + "\uC885\uB2E8 \uAC04 \uC554\uD638\uD654\uB41C \uC74C\uC131 \uBA54\uC2DC\uC9C0", + "1:1 \uC554\uD638\uD654 \uC74C\uC131 \uD1B5\uD654 (WebRTC)", + "1:1 \uC554\uD638\uD654 \uC601\uC0C1 \uD1B5\uD654 (WebRTC)", + "\uC2E4\uC2DC\uAC04 \uBBF8\uB514\uC5B4\uC758 \uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "SRTP/DTLS\uB85C \uBCF4\uD638\uB418\uB294 \uBBF8\uB514\uC5B4 \uC2A4\uD2B8\uB9BC", + "\uD1B5\uD654 \uC911 SAS \uD655\uC778", + "\uD1B5\uD654 \uC54C\uB9BC\uACFC \uC790\uB3D9 \uC7AC\uC5F0\uACB0", + "\uC9C0\uC5F0\uC774 \uC801\uC740 P2P \uBBF8\uB514\uC5B4" + ], + "roadmap.r9.title": "\uADF8\uB8F9 \uC18C\uD1B5", + "roadmap.r9.sub": "\uD504\uB77C\uC774\uBC84\uC2DC\uB97C \uC9C0\uD0A4\uB294 \uADF8\uB8F9 \uCC44\uD305", + "roadmap.r9.date": "\uC9C0\uAE08", + "roadmap.r9.features": [ + "\uCD5C\uB300 8\uBA85\uAE4C\uC9C0 P2P \uADF8\uB8F9 \uCC44\uD305", + "\uBA54\uC2DC \uC804\uB2EC\uACFC \uC11C\uBA85\uB41C \uB9B4\uB808\uC774 \uB300\uCCB4 \uACBD\uB85C", + "\uBAA8\uB450\uAC00 \uD568\uAED8 \uB300\uC870\uD558\uB294 \uD558\uB098\uC758 \uADF8\uB8F9 \uC548\uC804 \uCF54\uB4DC", + "\uCF54\uB4DC \uCD94\uCE21\uC744 \uB9C9\uB294 \uCEE4\uBC0B \uD6C4 \uACF5\uAC1C \uC808\uCC28", + "\uC124\uACC4\uC0C1 \uC77C\uD68C\uC6A9\uC778 \uADF8\uB8F9 \uC804\uC6A9 \uC2E0\uC6D0 \uD0A4", + "\uC5D0\uD3EC\uD06C \uC21C\uC11C\uB97C \uAC16\uCD98 \uC11C\uBA85\uB41C \uAD6C\uC131\uC6D0 \uBA85\uB2E8", + "\uC11C\uBA85\uB41C \uBA54\uC2DC\uC9C0 - \uAE30\uB85D\uC774 \uAC08\uB77C\uC9C0\uBA74 \uC99D\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4", + "\uC11C\uBC84 \uC5C6\uC74C, \uACF5\uC720 \uADF8\uB8F9 \uD0A4 \uC5C6\uC74C, \uAE30\uB85D \uC5C6\uC74C" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "iOS\uC640 Android\uC6A9 \uB124\uC774\uD2F0\uBE0C \uBAA8\uBC14\uC77C \uC571", + "roadmap.r10.date": "2027\uB144 2\uBD84\uAE30", + "roadmap.r10.features": [ + "iOS \uB124\uC774\uD2F0\uBE0C \uC571 (Swift/SwiftUI)", + "Android \uB124\uC774\uD2F0\uBE0C \uC571 (Kotlin/Jetpack Compose)", + "\uBAA8\uBC14\uC77C \uBE0C\uB77C\uC6B0\uC800 PWA \uC9C0\uC6D0", + "\uC2E4\uC2DC\uAC04 \uD478\uC2DC \uC54C\uB9BC", + "\uBC30\uD130\uB9AC \uCD5C\uC801\uD654", + "\uBAA8\uBC14\uC77C\uC5D0 \uB9DE\uCD98 \uD654\uBA74", + "\uC624\uD504\uB77C\uC778 \uBA54\uC2DC\uC9C0 \uB300\uAE30\uC5F4", + "\uC0DD\uCCB4 \uC778\uC99D" + ], + "roadmap.r11.title": "\uC591\uC790 \uB0B4\uC131 \uC5D0\uB514\uC158", + "roadmap.r11.sub": "\uC591\uC790 \uCEF4\uD4E8\uD130\uC5D0 \uB300\uD55C \uB300\uBE44", + "roadmap.r11.date": "2027\uB144 4\uBD84\uAE30", + "roadmap.r11.features": [ + "\uD3EC\uC2A4\uD2B8 \uC591\uC790 \uC554\uD638 CRYSTALS-Kyber", + "SPHINCS+ \uC804\uC790 \uC11C\uBA85", + "\uACE0\uC804\uACFC \uD3EC\uC2A4\uD2B8 \uC591\uC790\uB97C \uD568\uAED8 \uC4F0\uB294 \uD63C\uD569 \uBC29\uC2DD", + "\uC591\uC790\uC5D0 \uC548\uC804\uD55C \uD0A4 \uAD50\uD658", + "\uAC31\uC2E0\uB41C \uD574\uC2DC \uC54C\uACE0\uB9AC\uC998", + "\uAE30\uC874 \uC138\uC158 \uC774\uC804", + "v5.x \uD638\uD658", + "\uC591\uC790 \uB0B4\uC131 \uD504\uB85C\uD1A0\uCF5C" + ], + "roadmap.r12.title": "\uBD84\uC0B0 \uB124\uD2B8\uC6CC\uD06C", + "roadmap.r12.sub": "\uC644\uC804\uD788 \uBD84\uC0B0\uB41C \uB124\uD2B8\uC6CC\uD06C", + "roadmap.r12.date": "2028\uB144", + "roadmap.r12.features": [ + "\uB178\uB4DC \uBA54\uC2DC \uB124\uD2B8\uC6CC\uD06C", + "\uD53C\uC5B4 \uD0D0\uC0C9\uC744 \uC704\uD55C DHT", + "\uB0B4\uC7A5 \uC5B4\uB2C8\uC5B8 \uB77C\uC6B0\uD305", + "\uD1A0\uD06C\uB178\uBBF9\uC2A4\uC640 \uB178\uB4DC \uBCF4\uC0C1", + "DAO\uB97C \uD1B5\uD55C \uAC70\uBC84\uB10C\uC2A4", + "\uB2E4\uB978 \uB124\uD2B8\uC6CC\uD06C\uC640\uC758 \uC0C1\uD638 \uC6B4\uC6A9", + "\uD50C\uB7AB\uD3FC \uAC04 \uD638\uD658", + "\uC2A4\uC2A4\uB85C \uBCF5\uAD6C\uD558\uB294 \uB124\uD2B8\uC6CC\uD06C" + ], + "roadmap.r13.title": "AI \uD504\uB77C\uC774\uBC84\uC2DC \uB3C4\uC6B0\uBBF8", + "roadmap.r13.sub": "\uD504\uB77C\uC774\uBC84\uC2DC\uC640 \uBCF4\uC548\uC744 \uC704\uD55C \uC778\uACF5\uC9C0\uB2A5", + "roadmap.r13.date": "2028\uB144 \uC774\uD6C4", + "roadmap.r13.features": [ + "\uAE30\uAE30 \uC548\uC5D0\uC11C \uC774\uB8E8\uC5B4\uC9C0\uB294 AI \uC704\uD611 \uBD84\uC11D", + "\uC911\uAC04\uC790 \uACF5\uACA9 \uC790\uB3D9 \uAC10\uC9C0", + "\uC801\uC751\uD615 \uC554\uD638\uD654", + "\uB9DE\uCDA4\uD615 \uBCF4\uC548 \uAD8C\uACE0", + "\uC601\uC9C0\uC2DD \uAE30\uACC4 \uD559\uC2B5", + "\uAC1C\uC778\uC6A9 AI \uB3C4\uC6B0\uBBF8", + "\uC608\uCE21 \uAE30\uBC18 \uBCF4\uC548", + "\uC790\uC728\uC801\uC778 \uACF5\uACA9 \uBC29\uC5B4" + ], + "handshake.step1": "ECDH P-384 \uD0A4 \uC30D \uC0DD\uC131 \uC911", + "handshake.step2": "\uD655\uC778 \uCF54\uB4DC \uC720\uB3C4 \uC911", + "handshake.step3": "\uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131 \uACE0\uC815 \uC911", + "handshake.securingTitle": "\uCC44\uB110\uC744 \uBCF4\uD638\uD558\uB294 \uC911", + "handshake.answerTitle": "\uC751\uB2F5\uC744 \uB9CC\uB4DC\uB294 \uC911", + "handshake.securingDesc": "\uBCC0\uC870\uB97C \uACAC\uB51C \uB9CC\uD07C \uB2E8\uB2E8\uD55C \uD0A4\uB97C \uBCBC\uB9AC\uB294 \uC911\uC785\uB2C8\uB2E4.", + "handshake.shareTitle": "\uCD08\uB300\uC7A5 \uACF5\uC720\uD558\uAE30", + "handshake.sendAnswerTitle": "\uC751\uB2F5 \uB3CC\uB824\uBCF4\uB0B4\uAE30", + "handshake.shareDesc": "QR\uC744 \uBCF4\uC5EC\uC8FC\uAC70\uB098 \uCF54\uB4DC\uB97C \uC0C1\uB300\uC5D0\uAC8C \uBCF4\uB0B4\uC138\uC694. \uD55C \uBC88\uB9CC \uC4F8 \uC218 \uC788\uACE0 \uACE7 \uB9CC\uB8CC\uB429\uB2C8\uB2E4.", + "handshake.sendAnswerDesc": "\uCC44\uB110\uC744 \uB9CC\uB4E0 \uC0AC\uB78C\uC5D0\uAC8C \uC774 \uC751\uB2F5\uC744 \uC804\uD574 \uC545\uC218\uB97C \uB9C8\uCE58\uB3C4\uB85D \uD558\uC138\uC694.", + "handshake.establish": "\uC5F0\uACB0 \uB9FA\uAE30", + "handshake.thenReceive": "\uADF8\uB2E4\uC74C \uC0C1\uB300\uAC00 \uBCF4\uB0B4\uB294 \uC751\uB2F5\uC744 \uBC1B\uC73C\uC138\uC694", + "handshake.pasteAnswerPlaceholder": "\uC0C1\uB300\uC758 \uC751\uB2F5 \uCF54\uB4DC\uB97C \uBD99\uC5EC\uB123\uC73C\uC138\uC694\u2026", + "handshake.answerSentNote": "\uC774 \uC751\uB2F5\uC744 \uB9CC\uB4E0 \uC0AC\uB78C\uC5D0\uAC8C \uBCF4\uB0B4\uACE0 \uAE30\uB2E4\uB9AC\uC138\uC694 - \uC0C1\uB300\uAC00 \uC5F0\uACB0\uB418\uBA74 \uB300\uD654\uAC00 \uC5F4\uB9BD\uB2C8\uB2E4.", + "handshake.qrHint": "\uC0C1\uB300\uAC00 \uCF54\uB4DC\uB97C \uB2E4 \uC77D\uC744 \uB54C\uAE4C\uC9C0 \uC774 \uD654\uBA74\uC744 \uC5F4\uC5B4 \uB450\uC138\uC694.", + "handshake.qrHintFrames": "\uC545\uC218\uAC00 {frames}\uAC1C \uD654\uBA74\uC73C\uB85C \uB098\uB258\uC5B4 \uC788\uC2B5\uB2C8\uB2E4 - \uC0C1\uB300\uAC00 \uC804\uBD80 \uC77D\uC744 \uB54C\uAE4C\uC9C0 \uC5F4\uC5B4 \uB450\uC138\uC694.", + "verify.title": "\uBCF4\uC548 \uD655\uC778", + "verify.desc": "\uB2E4\uB978 \uACBD\uB85C(\uD1B5\uD654\uB098 \uB300\uBA74)\uB85C \uC0C1\uB300\uC640 \uC774 \uC548\uC804 \uCF54\uB4DC\uB97C \uB300\uC870\uD55C \uB4A4, \uC785\uB825\uD574\uC11C \uB300\uD654\uB97C \uC5EC\uC138\uC694.", + "verify.enterLabel": "\uB300\uC870\uD55C \uCF54\uB4DC\uB97C \uC785\uB825\uD558\uC138\uC694", + "verify.placeholder": "\uC5EC\uAE30\uC5D0 \uCF54\uB4DC \uC785\uB825", + "verify.confirm": "\uCF54\uB4DC \uD655\uC778", + "verify.confirmed": "\uD655\uC778\uB428", + "verify.mismatch": "\uC77C\uCE58\uD558\uC9C0 \uC54A\uC74C", + "verify.yours": "\uB0B4 \uD655\uC778", + "verify.peer": "\uC0C1\uB300\uC758 \uD655\uC778", + "verify.pending": "\uB300\uAE30 \uC911", + "verify.waiting": "\uCF54\uB4DC \uB300\uAE30 \uC911\u2026", + "verify.verified": "\uCC44\uB110 \uD655\uC778 \uC644\uB8CC", + "verify.bothConfirmed": "\uC591\uCABD \uBAA8\uB450 \uD655\uC778\uD588\uC2B5\uB2C8\uB2E4. \uC548\uC804\uD55C \uB300\uD654\uB97C \uC5EC\uB294 \uC911\u2026", + "pwa.bannerTitle": "SecureBit.chat \uC124\uCE58", + "pwa.bannerDesc": "\uBCF4\uC548\uC774 \uAC15\uD654\uB41C \uB124\uC774\uD2F0\uBE0C \uC571 \uACBD\uD5D8\uC744 \uB204\uB9AC\uC138\uC694", + "pwa.install": "\uC124\uCE58", + "pwa.dismiss": "\uB2EB\uAE30", + "pwa.close": "\uB2EB\uAE30", + "pwa.iosTitle": "iOS\uC5D0 \uC124\uCE58\uD558\uAE30", + "pwa.iosStep1": "\uACF5\uC720 \uBC84\uD2BC\uC744 \uB204\uB974\uC138\uC694", + "pwa.iosStep1Hint": "\uBCF4\uD1B5 Safari \uC544\uB798\uCABD\uC5D0 \uC788\uC2B5\uB2C8\uB2E4", + "pwa.iosStep2": "'\uD648 \uD654\uBA74\uC5D0 \uCD94\uAC00'\uB97C \uCC3E\uC73C\uC138\uC694", + "pwa.iosStep2Hint": "\uACF5\uC720 \uBA54\uB274\uB97C \uC544\uB798\uB85C \uB0B4\uB824\uBCF4\uC138\uC694", + "pwa.iosStep3": "'\uCD94\uAC00'\uB97C \uB204\uB974\uC138\uC694", + "pwa.iosStep3Hint": "\uD655\uC778\uD558\uBA74 SecureBit.chat\uC774 \uC124\uCE58\uB429\uB2C8\uB2E4", + "pwa.genericTitle": "SecureBit \uC124\uCE58", + "pwa.genericDesc": "\uBE0C\uB77C\uC6B0\uC800\uB9C8\uB2E4 \uC124\uCE58 \uBC29\uBC95\uC774 \uB2E4\uB985\uB2C8\uB2E4. \uC4F0\uC2DC\uB294 \uBE0C\uB77C\uC6B0\uC800\uC5D0 \uB9DE\uB294 \uC21C\uC11C\uB97C \uACE0\uB974\uC138\uC694.", + "pwa.gotIt": "\uC54C\uACA0\uC2B5\uB2C8\uB2E4", + "pwa.installedTitle": "\uC571\uC774 \uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4", + "pwa.installedIos": "iOS \uC571\uC774 \uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uD648 \uD654\uBA74\uC5D0\uC11C \uC5F4\uC5B4\uBCF4\uC138\uC694.", + "pwa.installedGeneric": "\uC774\uC81C SecureBit.chat\uC774 \uAE30\uAE30\uC5D0 \uC788\uC2B5\uB2C8\uB2E4", + "pwa.anytimeTitle": "\uC5B8\uC81C\uB4E0 \uC124\uCE58\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4", + "pwa.anytimeDesc": "\uAC00\uC7A5 \uC88B\uC740 \uACBD\uD5D8\uC744 \uC704\uD574, \uBE0C\uB77C\uC6B0\uC800 \uBA54\uB274\uC5D0\uC11C \uC5B8\uC81C\uB4E0 SecureBit.chat\uC744 \uC124\uCE58\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.", + "pwa.ok": "\uD655\uC778", + "step.open": "1\uB2E8\uACC4 \xB7 \uCC44\uB110 \uC5F4\uAE30", + "step.exchange": "2\uB2E8\uACC4 \xB7 \uAD50\uD658", + "step.verification": "3\uB2E8\uACC4 \xB7 \uD655\uC778", + "action.create": "\uB9CC\uB4E4\uAE30", + "action.join": "\uCC38\uC5EC", + "action.back": "\uB4A4\uB85C", + "action.copy": "\uBCF5\uC0AC", + "action.copied": "\uBCF5\uC0AC\uB428", + "action.scan": "\uC2A4\uCE94", + "action.downloadDesktop": "\uB370\uC2A4\uD06C\uD1B1 \uC571 \uB0B4\uB824\uBC1B\uAE30", + "action.advancedSettings": "\uACE0\uAE09 \uC124\uC815", + "cred.offerTag": "\uCD08\uB300 \xB7 \uB610\uB294 \uD14D\uC2A4\uD2B8 \uBCF5\uC0AC", + "cred.answerTag": "\uC751\uB2F5 \xB7 \uB610\uB294 \uD14D\uC2A4\uD2B8 \uBCF5\uC0AC", + "cred.reveal": "\uB20C\uB7EC\uC11C \uBCF4\uAE30 - \uC774 \uCF54\uB4DC\uB294 \uB0A8\uC5D0\uAC8C \uC54C\uB9AC\uC9C0 \uB9C8\uC138\uC694", + "qr.title": "QR \uCF54\uB4DC \uC2A4\uCE94", + "qr.subtitle": "\uC0C1\uB300\uC758 QR\uC5D0 \uCE74\uBA54\uB77C\uB97C \uB9DE\uCD94\uC138\uC694", + "qr.scanning": "\uC77D\uB294 \uC911\u2026", + "qr.hint": "\uBAA8\uB4E0 \uC870\uAC01\uC744 \uC77D\uC744 \uB54C\uAE4C\uC9C0 \uD754\uB4E4\uB9AC\uC9C0 \uC54A\uAC8C \uC720\uC9C0\uD558\uC138\uC694. \uCE74\uBA54\uB77C\uB294 \uAE30\uAE30 \uC548\uC5D0\uC11C\uB9CC \uC4F0\uC774\uBA70 - \uC544\uBB34\uAC83\uB3C4 \uC804\uC1A1\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", + "mesh.you": "\uB098", + "mesh.peer": "\uC0C1\uB300 \xB7 \uC138\uC158 1", + "mesh.joined2": "\uC9C0\uBBFC \uD569\uB958 \xB7 +2", + "mesh.joined3": "\uBBFC\uC900 \uD569\uB958 \xB7 +3", + "ice.title": "\uB124\uD2B8\uC6CC\uD06C \uC124\uC815", + "ice.subtitle": "\uAE30\uAE30 \uC548\uC5D0\uC11C\uB9CC \uC124\uC815\uB429\uB2C8\uB2E4 - \uC0C1\uB300\uC5D0\uAC8C \uC804\uB2EC\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + "ice.intro": "SecureBit\uC740 \uAE30\uBCF8\uC801\uC73C\uB85C \uACF5\uAC1C STUN \uC11C\uBC84\uB85C P2P \uC5F0\uACB0\uC744 \uB9FA\uC2B5\uB2C8\uB2E4. \uC9C1\uC811 \uC6B4\uC601\uD558\uC2E0\uB2E4\uBA74 \uC790\uC2E0\uC758 STUN/TURN\uC744 \uC9C0\uC815\uD558\uC138\uC694.", + "ice.publicTitle": "\uACF5\uAC1C \uC11C\uBC84 (\uAE30\uBCF8\uAC12)", + "ice.publicDesc": "\uC124\uC815\uC774 \uD544\uC694 \uC5C6\uC2B5\uB2C8\uB2E4. \uB300\uBD80\uBD84\uC5D0\uAC8C \uCDA9\uBD84\uD569\uB2C8\uB2E4.", + "ice.customTitle": "\uB0B4 STUN/TURN \uC11C\uBC84", + "ice.customDesc": "\uCD5C\uB300 {max}\uAC1C\uAE4C\uC9C0.", + "ice.turnNote": "TURN \uB9B4\uB808\uC774\uB294 \uC591\uCABD\uC758 IP\uC640 \uD2B8\uB798\uD53D \uD750\uB984\uC740 \uBCFC \uC218 \uC788\uC9C0\uB9CC, \uC885\uB2E8 \uAC04 \uC554\uD638\uD654\uB41C \uBA54\uC2DC\uC9C0 \uB0B4\uC6A9\uC740 \uACB0\uCF54 \uBCFC \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB418\uB3C4\uB85D ", + "ice.turnNoteTls": " (TLS)\uB97C \uC4F0\uC138\uC694.", + "ice.test": "\uC11C\uBC84 \uC2DC\uD5D8", + "ice.testing": "\uC2DC\uD5D8 \uC911\u2026", + "ice.relayTitle": "\uB9B4\uB808\uC774 \uC804\uC6A9 \uBAA8\uB4DC", + "ice.relayBadge": "\uCD5C\uB300 \uD504\uB77C\uC774\uBC84\uC2DC", + "ice.relayDesc": "\uBAA8\uB4E0 \uD2B8\uB798\uD53D\uC744 TURN\uC73C\uB85C \uBCF4\uB0B4 \uC0C1\uB300\uAC00 \uC5EC\uB7EC\uBD84\uC758 IP\uB97C \uACB0\uCF54 \uC54C \uC218 \uC5C6\uAC8C \uD569\uB2C8\uB2E4. TURN \uC11C\uBC84\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4.", + "ice.relayWarning": "\uB9B4\uB808\uC774 \uC804\uC6A9 \uBAA8\uB4DC\uAC00 \uCF1C\uC838 \uC788\uC9C0\uB9CC TURN \uC11C\uBC84\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uC5F0\uACB0\uC744 \uC2DC\uC791\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.", + "ice.persist": "\uC774 \uAE30\uAE30\uC5D0 \uC800\uC7A5", + "ice.persistDesc": "\uC774 \uBE0C\uB77C\uC6B0\uC800\uC5D0 \uC554\uD638\uD654\uB418\uC5B4 \uC800\uC7A5\uB429\uB2C8\uB2E4. \uAEBC\uB450\uBA74 \uC774\uBC88 \uC138\uC158\uC5D0\uB9CC \uC801\uC6A9\uB429\uB2C8\uB2E4.", + "ice.forget": "\uC800\uC7A5\uB41C \uC124\uC815 \uC9C0\uC6B0\uAE30", + "ice.cancel": "\uCDE8\uC18C", + "ice.apply": "\uC801\uC6A9", + "ice.errUnavailable": "\uC774 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C\uB294 WebRTC\uB97C \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4", + "ice.errInvalid": "\uC11C\uBC84 \uC124\uC815\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + "update.title": "\uC5C5\uB370\uC774\uD2B8\uAC00 \uC788\uC2B5\uB2C8\uB2E4", + "update.desc": "SecureBit\uC758 \uC0C8 \uBC84\uC804\uC774 \uD655\uC778\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", + "update.currentVersion": "\uD604\uC7AC \uBC84\uC804", + "update.newVersion": "\uC0C8 \uBC84\uC804", + "update.now": "\uC9C0\uAE08 \uC5C5\uB370\uC774\uD2B8", + "update.later": "\uB098\uC911\uC5D0", + "update.unknown": "\uC5C6\uC74C", + "update.stepSaving": "\uB370\uC774\uD130\uB97C \uC800\uC7A5\uD558\uB294 \uC911\u2026", + "update.stepSwCaches": "Service Worker \uCE90\uC2DC\uB97C \uBE44\uC6B0\uB294 \uC911\u2026", + "update.stepSwUnregister": "Service Worker \uB4F1\uB85D\uC744 \uD574\uC81C\uD558\uB294 \uC911\u2026", + "update.stepBrowserCache": "\uBE0C\uB77C\uC6B0\uC800 \uCE90\uC2DC\uB97C \uBE44\uC6B0\uB294 \uC911\u2026", + "update.stepVersion": "\uBC84\uC804\uC744 \uAC31\uC2E0\uD558\uB294 \uC911\u2026", + "update.stepReload": "\uC571\uC744 \uB2E4\uC2DC \uBD88\uB7EC\uC624\uB294 \uC911\u2026", + "update.error": "\uC5C5\uB370\uC774\uD2B8 \uC624\uB958. \uD398\uC774\uC9C0\uB97C \uC9C1\uC811 \uC0C8\uB85C\uACE0\uCE68\uD558\uC138\uC694 (Ctrl+F5 \uB610\uB294 Cmd+Shift+R)", + "update.confirmSkip": "\uC0C8 \uBC84\uC804\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uBCF4\uC548\uACFC \uC548\uC815\uC131\uC744 \uC704\uD574 \uC5C5\uB370\uC774\uD2B8\uB97C \uAD8C\uD569\uB2C8\uB2E4. \uC5C5\uB370\uC774\uD2B8 \uC5C6\uC774 \uACC4\uC18D\uD560\uAE4C\uC694?", + "offline.backOnline": "\uB2E4\uC2DC \uC5F0\uACB0\uB428", + "offline.mode": "\uC624\uD504\uB77C\uC778 \uBAA8\uB4DC", + "offline.dismiss": "\uB2EB\uAE30", + "offline.lostTitle": "\uC5F0\uACB0\uC774 \uB04A\uC5B4\uC84C\uC2B5\uB2C8\uB2E4", + "offline.lostDesc": "SecureBit\uC774 \uC624\uD504\uB77C\uC778 \uC0C1\uD0DC\uC785\uB2C8\uB2E4. \uC77C\uBD80 \uAE30\uB2A5\uC774 \uC81C\uD55C\uB418\uC9C0\uB9CC \uB370\uC774\uD130\uB294 \uC548\uC804\uD569\uB2C8\uB2E4.", + "offline.point1": "\uC138\uC158\uACFC \uD0A4\uB294 \uADF8\uB300\uB85C \uC720\uC9C0\uB429\uB2C8\uB2E4", + "offline.point2": "\uC11C\uBC84\uC5D0\uB294 \uC544\uBB34 \uB370\uC774\uD130\uB3C4 \uC800\uC7A5\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + "offline.point3": "\uB2E4\uC2DC \uC5F0\uACB0\uB418\uBA74 \uBA54\uC2DC\uC9C0\uC640 \uD30C\uC77C\uC774 \uB3D9\uAE30\uD654\uB429\uB2C8\uB2E4", + "offline.continue": "\uC624\uD504\uB77C\uC778\uC73C\uB85C \uACC4\uC18D", + "offline.restoredTitle": "\uB2E4\uC2DC \uC5F0\uACB0\uB418\uBA74", + "offline.restoredDesc": "\uC5F0\uACB0\uC774 \uB04A\uACA8\uB3C4 \uC783\uB294 \uAC83\uC740 \uC5C6\uC2B5\uB2C8\uB2E4. SecureBit\uC740 \uBAA8\uB4E0 \uAC83\uC744 \uAE30\uAE30 \uC548\uC5D0 \uB300\uAE30\uC2DC\uCF1C \uB450\uC5C8\uB2E4\uAC00, \uB2E4\uC2DC \uC628\uB77C\uC778\uC774 \uB418\uB294 \uC989\uC2DC \uC554\uD638\uD654\uB41C \uC138\uC158\uC744 \uC774\uC5B4\uAC11\uB2C8\uB2E4.", + "offline.r1Title": "\uBCF4\uB0B8 \uBA54\uC2DC\uC9C0\uB294 \uC804\uB2EC\uB429\uB2C8\uB2E4", + "offline.r1Desc": "\uC624\uD504\uB77C\uC778\uC77C \uB54C \uC4F4 \uB0B4\uC6A9\uC740 \uC790\uB3D9\uC73C\uB85C \uC0C1\uB300\uC5D0\uAC8C \uC804\uC1A1\uB429\uB2C8\uB2E4.", + "offline.r2Title": "\uD30C\uC77C \uC804\uC1A1\uC774 \uB9C8\uBB34\uB9AC\uB429\uB2C8\uB2E4", + "offline.r2Desc": "\uC804\uC1A1\uC740 \uBA48\uCD98 \uC9C0\uC810\uBD80\uD130 \uC774\uC5B4\uC9D1\uB2C8\uB2E4 - \uB2E4\uC2DC \uBCF4\uB0BC \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.", + "offline.r3Title": "\uC0C1\uB300\uC758 \uBA54\uC2DC\uC9C0\uC640 \uD30C\uC77C\uC774 \uB3C4\uCC29\uD569\uB2C8\uB2E4", + "offline.r3Desc": "\uB04A\uAE34 \uB3D9\uC548 \uC0C1\uB300\uAC00 \uBCF4\uB0B8 \uAC83\uB4E4\uC774 \uC21C\uC11C\uB300\uB85C \uB3C4\uCC29\uD569\uB2C8\uB2E4.", + "offline.r4Title": "\uC544\uBB34\uAC83\uB3C4 \uC0AC\uB77C\uC9C0\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + "offline.r4Desc": "\uB2E4\uC2DC \uC5F0\uACB0\uB418\uC5B4\uB3C4 \uBE48\uD2C8\uC740 \uC5C6\uC2B5\uB2C8\uB2E4 - \uB300\uD654\uB294 \uBA48\uCD98 \uADF8 \uC790\uB9AC\uC5D0\uC11C \uC774\uC5B4\uC9D1\uB2C8\uB2E4.", + "offline.gotIt": "\uC54C\uACA0\uC2B5\uB2C8\uB2E4", + "qr.showTitle": "QR \uCF54\uB4DC \uBCF4\uC5EC\uC8FC\uAE30", + "qr.showSubtitle": "\uC804\uCCB4 \uD654\uBA74 \xB7 \uC0C1\uB300\uAC00 \uC2A4\uCE94\uD558\uB3C4\uB85D", + "qr.showSubtitleFrames": "\uC804\uCCB4 \uD654\uBA74 \xB7 \uC0C1\uB300\uAC00 {frames}\uAC1C \uD654\uBA74\uC744 \uBAA8\uB450 \uC2A4\uCE94\uD558\uB3C4\uB85D", + "notify.enabledBody": "\uC54C\uB9BC\uC774 \uCF1C\uC84C\uC2B5\uB2C8\uB2E4. \uC0C8 \uBA54\uC2DC\uC9C0\uAC00 \uC624\uBA74 \uC54C\uB824\uB4DC\uB9BD\uB2C8\uB2E4.", + "notify.workingBody": "\uC54C\uB9BC\uC774 \uC815\uC0C1 \uC791\uB3D9\uD569\uB2C8\uB2E4. \uC0C8 \uBA54\uC2DC\uC9C0\uAC00 \uC624\uBA74 \uC54C\uB824\uB4DC\uB9BD\uB2C8\uB2E4.", + "pw.label": "\uBE44\uBC00\uBC88\uD638 \uC785\uB825\uB780", + "pw.placeholder": "\uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694\u2026", + "pw.decrypt": "\uBCF5\uD638\uD654", + "pw.cancel": "\uCDE8\uC18C", + "file.title": "\uD30C\uC77C \uC804\uC1A1", + "file.drop": "\uC5EC\uAE30\uC5D0 \uD30C\uC77C\uC744 \uB193\uC73C\uC138\uC694", + "file.dropHint": "\uBCF4\uB0B4\uAE30 \uC804\uC5D0 \uC885\uB2E8 \uAC04 \uC554\uD638\uD654 \xB7 \uCD5C\uB300 100MB", + "file.browse": "\uAE30\uAE30\uC5D0\uC11C \uCC3E\uAE30", + "file.incoming": "\uD30C\uC77C \uC694\uCCAD\uC774 \uC654\uC2B5\uB2C8\uB2E4", + "file.accept": "\uC218\uB77D", + "file.reject": "\uAC70\uC808", + "file.download": "\uB0B4\uB824\uBC1B\uAE30", + "file.notReady": "\uC5F0\uACB0\uC774 \uC544\uC9C1 \uC900\uBE44\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4", + "file.tooLarge": "\uD30C\uC77C\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4", + "file.typeNotAllowed": "\uD5C8\uC6A9\uB418\uC9C0 \uC54A\uB294 \uD30C\uC77C \uD615\uC2DD", + "file.maxConcurrent": "\uB3D9\uC2DC \uC804\uC1A1 \uD55C\uB3C4\uC5D0 \uB3C4\uB2EC\uD588\uC2B5\uB2C8\uB2E4", + "file.gone": "\uC774 \uD30C\uC77C\uC740 \uB354 \uC774\uC0C1 \uB0B4\uB824\uBC1B\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.", + "call.incoming": "\uAC78\uB824\uC628 \uC804\uD654", + "call.incomingVideo": "\uAC78\uB824\uC628 \uC601\uC0C1 \uD1B5\uD654", + "call.encrypted": "\uC554\uD638\uD654\uB41C \uD1B5\uD654", + "call.encryptedShort": "\uC554\uD638\uD654\uB428", + "call.peer": "\uBCF4\uC548 \uC0C1\uB300", + "call.connecting": "\uC5F0\uACB0 \uC911\u2026", + "call.ringing": "\uC2E0\uD638 \uAC00\uB294 \uC911\u2026", + "call.accept": "\uBC1B\uAE30", + "call.decline": "\uAC70\uC808", + "call.end": "\uD1B5\uD654 \uC885\uB8CC", + "call.camera": "\uCE74\uBA54\uB77C", + "call.cameraOff": "\uCE74\uBA54\uB77C \uAEBC\uC9D0", + "call.peerCameraOff": "\uC0C1\uB300\uC758 \uCE74\uBA54\uB77C\uAC00 \uAEBC\uC838 \uC788\uC2B5\uB2C8\uB2E4", + "call.flipCamera": "\uCE74\uBA54\uB77C \uC804\uD658", + "call.addVideo": "\uC601\uC0C1 \uCD94\uAC00", + "call.video": "\uC601\uC0C1", + "call.muted": "\uC74C\uC18C\uAC70\uB428", + "call.expand": "\uD06C\uAC8C", + "call.minimize": "\uC791\uAC8C", + "call.quality": "\uC5F0\uACB0 \uD488\uC9C8", + "call.qualityExcellent": "\uC544\uC8FC \uC88B\uC74C", + "call.videoPrefix": "\uC601\uC0C1 \xB7 ", + "call.voicePrefix": "\uC74C\uC131 \xB7 ", + "group.new": "\uC0C8 \uADF8\uB8F9", + "group.create": "\uADF8\uB8F9 \uB9CC\uB4E4\uAE30", + "group.join": "\uADF8\uB8F9 \uCC38\uC5EC", + "group.name": "\uADF8\uB8F9 \uC774\uB984", + "group.nameTooLong": "\uADF8\uB8F9 \uC774\uB984\uC774 \uB108\uBB34 \uAE41\uB2C8\uB2E4.", + "group.capacity": "\uCD5C\uB300 {max}\uBA85\uAE4C\uC9C0, \uAE30\uAE30\uC640 \uAE30\uAE30\uAC00 \uC9C1\uC811 \uC5F0\uACB0\uB429\uB2C8\uB2E4. \uADF8\uB8F9\uC774 \uC5F4\uB9AC\uAE30 \uC804\uC5D0 \uBAA8\uB450\uAC00 \uD558\uB098\uC758 \uC548\uC804 \uCF54\uB4DC\uB97C \uB300\uC870\uD569\uB2C8\uB2E4.", + "group.invite": "\uCD08\uB300", + "group.inviteMore": "\uAD6C\uC131\uC6D0 \uB354 \uCD08\uB300\uD558\uAE30", + "group.invitePeople": "{count}\uBA85 \uCD08\uB300", + "group.invitation": "\uADF8\uB8F9 \uCD08\uB300", + "group.addMembers": "\uAD6C\uC131\uC6D0 \uCD94\uAC00", + "group.roomFor": "{remaining}\uBA85 \uB354 \uB4E4\uC5B4\uC62C \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB4E4\uC774 \uD569\uB958\uD558\uBA74 \uBAA8\uB450\uAC00 \uC0C8 \uADF8\uB8F9 \uCF54\uB4DC\uB97C \uB300\uC870\uD569\uB2C8\uB2E4.", + "group.membersCount": "\uAD6C\uC131\uC6D0 {count}\uBA85", + "group.member": "\uAD6C\uC131\uC6D0", + "group.members": "\uAD6C\uC131\uC6D0", + "group.remove": "{name} \uB0B4\uBCF4\uB0B4\uAE30", + "group.message": "'{name}'\uC5D0 \uBA54\uC2DC\uC9C0 \uBCF4\uB0B4\uAE30", + "group.leave": "\uB098\uAC00\uAE30", + "group.leaveThis": "\uC774 \uADF8\uB8F9\uC5D0\uC11C \uB098\uAC00\uAE30", + "group.cancel": "\uADF8\uB8F9 \uCDE8\uC18C", + "group.close": "\uB2EB\uAE30", + "group.cancelBtn": "\uCDE8\uC18C", + "group.decline": "\uAC70\uC808", + "group.working": "\uCC98\uB9AC \uC911\u2026", + "group.sasTitle": "\uADF8\uB8F9 \uC548\uC804 \uCF54\uB4DC", + "group.sasEveryone": "\uBAA8\uB450\uC5D0\uAC8C \uAC19\uC740 \uCF54\uB4DC\uAC00 \uBCF4\uC785\uB2C8\uB2E4", + "group.sasCompare": "\uC774 \uADF8\uB8F9\uC744 \uC5F4\uB824\uBA74 \uBAA8\uB4E0 \uAD6C\uC131\uC6D0\uACFC \uADF8\uB8F9 \uCF54\uB4DC\uB97C \uB300\uC870\uD558\uC138\uC694.", + "group.sasReadAloud": "\uC774 \uC22B\uC790\uB4E4\uC744 \uC18C\uB9AC \uB0B4\uC5B4 \uC77D\uC5B4\uC8FC\uC138\uC694 - ", + "group.sasWarning": "\uD55C \uC0AC\uB78C\uC774\uB77C\uB3C4 \uB2E4\uB978 \uCF54\uB4DC\uB97C \uC77D\uB294\uB2E4\uBA74, \uB204\uAD70\uAC00 \uC0AC\uC774\uC5D0 \uB07C\uC5B4 \uC788\uB294 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB8F9\uC744 \uCDE8\uC18C\uD558\uC138\uC694 - \uD655\uC778\uD558\uC9C0 \uB9C8\uC138\uC694.", + "group.confirmFirst": "\uBA3C\uC800 \uADF8\uB8F9 \uCF54\uB4DC\uB97C \uD655\uC778\uD558\uC138\uC694", + "group.codeSuffix": " \xB7 \uCF54\uB4DC {code}", + "group.exchangingNonces": "\uC77C\uD68C\uC6A9 \uAC12\uC744 \uC8FC\uACE0\uBC1B\uB294 \uC911\u2026", + "group.waitingCommit": "\uBAA8\uB4E0 \uAD6C\uC131\uC6D0\uC758 \uD655\uC57D\uC744 \uAE30\uB2E4\uB9AC\uB294 \uC911\u2026", + "group.waitingJoin": "\uB2E4\uB978 \uAD6C\uC131\uC6D0\uC758 \uD569\uB958\uB97C \uAE30\uB2E4\uB9AC\uB294 \uC911\u2026", + "group.emptyChat": "\uC544\uC9C1 \uC544\uBB34\uAC83\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4. \uBAA8\uB4E0 \uBA54\uC2DC\uC9C0\uB294 \uBCF4\uB0B8 \uC0AC\uB78C\uC774 \uC11C\uBA85\uD558\uBA70, \uAD6C\uC131\uC6D0 \uAC01\uC790\uC758 \uC554\uD638\uD654\uB41C \uD68C\uC120\uC744 \uD1B5\uD574 \uC624\uAC11\uB2C8\uB2E4.", + "group.noVerified": "\uC544\uC9C1 \uD655\uC778\uB41C \uB300\uD654\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uBA3C\uC800 1:1 \uB300\uD654\uB97C \uC5F4\uC5B4 \uC548\uC804 \uCF54\uB4DC\uB97C \uB300\uC870\uD558\uC138\uC694 - \uADF8\uB8F9\uC740 \uC774\uBBF8 \uD655\uC778\uD55C \uC5F0\uACB0\uB85C \uB9CC\uB4E4\uC5B4\uC9D1\uB2C8\uB2E4.", + "group.noMoreToAdd": "\uCD94\uAC00\uD560 \uB2E4\uB978 \uD655\uC778\uB41C \uB300\uD654\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. 1:1 \uB300\uD654\uB97C \uC5F4\uC5B4 \uBA3C\uC800 \uC548\uC804 \uCF54\uB4DC\uB97C \uB300\uC870\uD558\uC138\uC694.", + "group.directLink": "\uAE30\uAE30 \uAC04 \uC9C1\uC811 \uC5F0\uACB0", + "group.noDirectLink": "\uC544\uC9C1 \uC9C1\uC811 \uC5F0\uACB0\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 - \uC5F0\uACB0\uC774 \uB9CC\uB4E4\uC5B4\uC9C0\uB294 \uB3D9\uC548 \uBA54\uC2DC\uC9C0\uB294 \uB2E4\uB978 \uAD6C\uC131\uC6D0\uC744 \uAC70\uCE69\uB2C8\uB2E4", + "group.relayNote": "\uC77C\uBD80 \uAD6C\uC131\uC6D0\uACFC\uB294 \uC544\uC9C1 \uC9C1\uC811 \uC5F0\uACB0\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uADF8\uB4E4\uC758 \uBA54\uC2DC\uC9C0\uB294 \uB2E4\uB978 \uAD6C\uC131\uC6D0\uC744 \uAC70\uCCD0 \uC624\uAC00\uB294\uB370, \uADF8 \uC0AC\uB78C\uC740 \uB300\uD654\uAC00 \uC624\uAC04\uB2E4\uB294 \uC0AC\uC2E4\uC740 \uC54C \uC218 \uC788\uC9C0\uB9CC \uC11C\uBA85 \uB108\uBA38\uC758 \uB0B4\uC6A9\uC744 \uC77D\uAC70\uB098 \uBC14\uAFC0 \uC218\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uADF8\uB8F9\uC740 \uACC4\uC18D\uD574\uC11C \uC9C1\uC811 \uC5F0\uACB0\uC744 \uC2DC\uB3C4\uD569\uB2C8\uB2E4.", + "group.relayOnlyOff": "\uB9B4\uB808\uC774 \uC804\uC6A9 \uBAA8\uB4DC\uAC00 \uAEBC\uC838 \uC788\uC5B4, \uBAA8\uB4E0 \uAD6C\uC131\uC6D0\uC774 \uC5EC\uB7EC\uBD84\uC5D0\uAC8C \uC9C1\uC811 \uC5F0\uACB0\uB418\uBA70 IP \uC8FC\uC18C\uB97C \uC54C\uAC8C \uB429\uB2C8\uB2E4 - \uB2E4\uB978 \uC0AC\uB78C\uC774 \uCD08\uB300\uD55C \uAD6C\uC131\uC6D0\uB3C4 \uB9C8\uCC2C\uAC00\uC9C0\uC785\uB2C8\uB2E4. \uADF8\uAC83\uC774 \uC911\uC694\uD558\uB2E4\uBA74 \uB124\uD2B8\uC6CC\uD06C \uC124\uC815\uC5D0\uC11C \uCF1C\uC138\uC694.", + "group.memberOffline": "{name}\uB2D8\uC740 \uC624\uD504\uB77C\uC778\uC774\uB77C \uBA54\uC2DC\uC9C0\uB97C \uBC1B\uC9C0 \uBABB\uD569\uB2C8\uB2E4. \uC5EC\uC804\uD788 \uAD6C\uC131\uC6D0\uC774\uBA70, \uB0B4\uBCF4\uB0B4\uBA74 \uADF8\uB8F9 \uD0A4\uAC00 \uC0C8\uB85C \uB9CC\uB4E4\uC5B4\uC9D1\uB2C8\uB2E4.", + "group.joinNote": "\uB2E4\uB978 \uAD6C\uC131\uC6D0\uB4E4\uC774 \uC5EC\uB7EC\uBD84\uC774 \uC774 \uADF8\uB8F9\uC5D0 \uC788\uB2E4\uB294 \uAC83\uC744 \uC54C\uAC8C \uB429\uB2C8\uB2E4. \uB530\uB77C\uC7A1\uC744 \uB300\uD654 \uAE30\uB85D\uC740 \uC5C6\uC2B5\uB2C8\uB2E4 - \uADF8\uB8F9\uC740 \uBE44\uC5B4 \uC788\uB294 \uC0C1\uD0DC\uB85C \uC2DC\uC791\uD569\uB2C8\uB2E4.", + "group.inviteSentNote": "\uC0C1\uB300\uAC00 \uC218\uB77D\uD560 \uB54C\uAE4C\uC9C0 \uADF8\uB8F9\uC740 \uADF8\uB300\uB85C \uB3D9\uC791\uD569\uB2C8\uB2E4. \uADF8\uB4E4\uC774 \uB530\uB77C\uC7A1\uC744 \uAE30\uB85D\uC740 \uC5C6\uACE0, \uC9C0\uAE08\uBD80\uD130 \uBCF4\uB0B4\uB294 \uAC83\uB9CC \uBCF4\uAC8C \uB429\uB2C8\uB2E4.", + "group.errNotCreated": "\uADF8\uB8F9\uC774 \uB9CC\uB4E4\uC5B4\uC9C0\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4", + "group.errNobodyAccepted": "\uC81C\uB54C \uCD08\uB300\uB97C \uC218\uB77D\uD55C \uC0AC\uB78C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.", + "group.errNothingSent": "\uC544\uBB34\uAC83\uB3C4 \uC804\uC1A1\uB418\uAC70\uB098 \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uC774 \uCC3D\uC744 \uB2EB\uACE0 \uBAA8\uB450\uAC00 \uC5F0\uACB0\uB41C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.", + "group.errNotFormed": "\uC774 \uADF8\uB8F9\uC744 \uB9CC\uB4E4 \uC218 \uC5C6\uC5C8\uC2B5\uB2C8\uB2E4.", + "group.errFull": "\uC774 \uADF8\uB8F9\uC740 \uAC00\uB4DD \uCC3C\uC2B5\uB2C8\uB2E4.", + "group.errInviteFailed": "\uCD08\uB300\uB97C \uBCF4\uB0B4\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4 - \uADF8 \uB300\uD654\uB294 \uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", + "group.errNoMemberList": "\uADF8\uB8F9\uC744 \uB9CC\uB4E0 \uC0AC\uB78C\uC774 \uAD6C\uC131\uC6D0 \uBA85\uB2E8\uC744 \uB05D\uB0B4 \uBCF4\uB0B4\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.", + "group.errUnsignedList": "\uAD6C\uC131\uC6D0 \uBA85\uB2E8\uC5D0 \uADF8\uB8F9\uC744 \uB9CC\uB4E0 \uC0AC\uB78C\uC758 \uC11C\uBA85\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC9C0 \uB9D0\uACE0 - \uADF8 \uC0AC\uB78C\uC5D0\uAC8C \uC54C\uB9AC\uC138\uC694.", + "group.errNotOwner": "\uADF8\uB8F9 \uC18C\uC720\uC790\uAC00 \uC544\uB2CC \uB204\uAD70\uAC00\uAC00 \uAD6C\uC131\uC6D0\uC744 \uBC14\uAFB8\uB824 \uD588\uC2B5\uB2C8\uB2E4.", + "hdr.tagline": "\uC885\uB2E8 \uAC04 \uC554\uD638\uD654", + "hdr.netSettings": "\uACE0\uAE09 \uB124\uD2B8\uC6CC\uD06C \uC124\uC815", + "hdr.netSettingsTitle": "\uACE0\uAE09 \uB124\uD2B8\uC6CC\uD06C \uC124\uC815 (STUN/TURN)", + "hdr.disconnect": "\uC5F0\uACB0 \uB04A\uAE30", + "status.connected": "\uC5F0\uACB0\uB428", + "status.connecting": "\uC5F0\uACB0 \uC911\u2026", + "status.notConnected": "\uC5F0\uACB0\uB418\uC9C0 \uC54A\uC74C", + "status.reconnecting": "\uB2E4\uC2DC \uC5F0\uACB0 \uC911\u2026", + "status.retrying": "\uB2E4\uC2DC \uC2DC\uB3C4 \uC911\u2026", + "status.verifying": "\uD655\uC778 \uC911\u2026", + "status.peerDisconnected": "\uC0C1\uB300\uAC00 \uC5F0\uACB0\uC744 \uB04A\uC5C8\uC2B5\uB2C8\uB2E4", + "sec.replayProtection": "\uC7AC\uC804\uC1A1 \uACF5\uACA9 \uBC29\uC5B4", + "sec.messageIntegrity": "\uBA54\uC2DC\uC9C0 \uBB34\uACB0\uC131 (HMAC)", + "sec.forwardSecrecy": "\uC644\uC804 \uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "sec.metadataProtection": "\uBA54\uD0C0\uB370\uC774\uD130 \uBCF4\uD638", + "sec.trafficObfuscation": "\uD2B8\uB798\uD53D \uB09C\uB3C5\uD654", + "sec.realTests": "\uC2E4\uC81C \uC554\uD638\uD559 \uAC80\uC0AC", + "sec.simulatedData": "\uBAA8\uC758 \uB370\uC774\uD130", + "sec.testPassed": "\uAC80\uC0AC \uD1B5\uACFC", + "sec.testFailed": "\uAC80\uC0AC \uC2E4\uD328 \uB610\uB294 \uC0AC\uC6A9 \uBD88\uAC00", + "sec.verificationDone": "\uC2E4\uC81C \uC554\uD638\uD559 \uAC80\uC99D\uC774 \uB05D\uB0AC\uC2B5\uB2C8\uB2E4", + "sec.verificationInProgress": "\uBCF4\uC548 \uAC80\uC99D \uC9C4\uD589 \uC911\u2026", + "sec.verificationWait": "\uBCF4\uC548 \uAC80\uC99D \uC9C4\uD589 \uC911\u2026\n\uC2E4\uC2DC\uAC04 \uC554\uD638\uD559 \uAC80\uC99D\uC774 \uB05D\uB0A0 \uB54C\uAE4C\uC9C0 \uAE30\uB2E4\uB824 \uC8FC\uC138\uC694.", + "sec.verificationUnavailable": "\uBCF4\uC548 \uAC80\uC99D\uC744 \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4", + "chat.placeholder": "\uC554\uD638\uD654\uB41C \uBA54\uC2DC\uC9C0\uB97C \uC4F0\uC138\uC694\u2026", + "chat.send": "\uBA54\uC2DC\uC9C0 \uBCF4\uB0B4\uAE30", + "chat.sendFiles": "\uD30C\uC77C \uBCF4\uB0B4\uAE30", + "chat.hideFiles": "\uD30C\uC77C \uC228\uAE30\uAE30", + "chat.recordVoice": "\uC74C\uC131 \uBA54\uC2DC\uC9C0 \uB179\uC74C", + "chat.sendVoice": "\uC74C\uC131 \uBA54\uC2DC\uC9C0 \uBCF4\uB0B4\uAE30", + "chat.discard": "\uCDE8\uC18C", + "chat.codeBlock": "\uCF54\uB4DC \uBE14\uB85D\uC73C\uB85C \uBCF4\uB0B4\uAE30 (\uC785\uB825\uCC3D\uC774 \uB113\uC5B4\uC9D1\uB2C8\uB2E4)", + "chat.codeHint": "\uCF54\uB4DC \uC870\uAC01 \xB7 \uC11C\uC2DD \uC720\uC9C0 \xB7 \u2318\u21B5 \uB85C \uC804\uC1A1", + "chat.viewOnce": "\uD55C \uBC88\uB9CC \uBCF4\uAE30", + "chat.viewOnceTitle": "\uD55C \uBC88\uB9CC \uBCF4\uAE30 - \uC0C1\uB300\uAC00 \uC77D\uC73C\uBA74 \uC0AC\uB77C\uC9D1\uB2C8\uB2E4", + "chat.viewOncePrefix": "\uD55C \uBC88\uB9CC \uBCF4\uAE30 \xB7 ", + "chat.viewOnceTap": "\uD55C \uBC88\uB9CC \uBCF4\uAE30 \xB7 \uB20C\uB7EC\uC11C \uD655\uC778", + "chat.viewedOnce": "\uC774\uBBF8 \uD655\uC778\uD568", + "chat.disappearing": "\uC0AC\uB77C\uC9C0\uB294 \uBA54\uC2DC\uC9C0 - \uC591\uCABD\uC5D0\uC11C \uC0AD\uC81C\uB429\uB2C8\uB2E4", + "chat.disappearAfter": "\uC0AC\uB77C\uC9C0\uAE30\uAE4C\uC9C0", + "chat.visibleFor": "\uD45C\uC2DC \uC2DC\uAC04", + "chat.timerPrefix": "\uD0C0\uC774\uBA38 \xB7 ", + "chat.expired": "\uC774 \uBA54\uC2DC\uC9C0\uB294 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4", + "chat.deleteForEveryone": "\uBAA8\uB450\uC5D0\uAC8C\uC11C \uC0AD\uC81C", + "chat.sending": "\uBCF4\uB0B4\uB294 \uC911", + "chat.delivered": "\uC804\uB2EC\uB428", + "chat.notSent": "\uBCF4\uB0B4\uC9C0 \uBABB\uD568", + "chat.notSentReason": "\uBCF4\uB0B4\uC9C0 \uBABB\uD568 - \uBCF4\uC548 \uCC44\uB110\uC774 \uC544\uC9C1 \uC900\uBE44\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC5F0\uACB0\uD55C \uB4A4 \uACC4\uC18D\uD558\uC138\uC694.", + "chat.encrypted": "\uC554\uD638\uD654\uB428", + "chat.decrypted": "\uBCF5\uD638\uD654\uB428", + "chat.encryptedOnDevice": "\uAE30\uAE30\uC5D0\uC11C \uC554\uD638\uD654\uB428", + "chat.uploading": "\uC62C\uB9AC\uB294 \uC911", + "chat.downloading": "\uB0B4\uB824\uBC1B\uB294 \uC911", + "chat.transferring": "\uC804\uC1A1 \uC911\u2026", + "chat.copied": "\uBCF5\uC0AC\uD588\uC2B5\uB2C8\uB2E4", + "chat.collapse": "\uC811\uAE30", + "chat.closeMenu": "\uBA54\uB274 \uB2EB\uAE30", + "chat.newChat": "\uC0C8 \uB300\uD654", + "chat.newGroup": "\uC0C8 \uADF8\uB8F9", + "chat.createGroup": "\uADF8\uB8F9 \uB9CC\uB4E4\uAE30", + "chat.groupChats": "\uADF8\uB8F9 \uB300\uD654", + "chat.secureChat": "\uC548\uC804\uD55C \uB300\uD654", + "chat.nameThis": "\uC774 \uB300\uD654\uC5D0 \uC774\uB984 \uBD99\uC774\uAE30", + "chat.rename": "\uB300\uD654 \uC774\uB984 \uBC14\uAFB8\uAE30 (\uAE30\uAE30 \uC548\uC5D0\uC11C\uB9CC)", + "chat.renameHint": "\uB450 \uBC88 \uB20C\uB7EC \uC774\uB984 \uBC14\uAFB8\uAE30", + "chat.localLabel": "\uAE30\uAE30 \uC548 \uC774\uB984 \xB7 \uC774 \uAE30\uAE30\uC5D0\uB9CC \uC800\uC7A5\uB429\uB2C8\uB2E4", + "chat.setStatus": "\uC0C1\uD0DC \uC124\uC815", + "chat.yourStatusPrefix": "\uB0B4 \uC0C1\uD0DC - ", + "chat.meshHint": "\uCD5C\uB300 8\uBA85 \xB7 P2P \uBA54\uC2DC", + "chat.offline": "\uC624\uD504\uB77C\uC778", + "chat.noNetwork": "\uB124\uD2B8\uC6CC\uD06C \uC5C6\uC74C \xB7 \uC7AC\uC5F0\uACB0 \uC911", + "chat.startVoiceCall": "\uC554\uD638\uD654 \uC74C\uC131 \uD1B5\uD654 \uAC78\uAE30", + "chat.startVideoCall": "\uC554\uD638\uD654 \uC601\uC0C1 \uD1B5\uD654 \uAC78\uAE30", + "chat.verifyForCalls": "\uD1B5\uD654\uB97C \uC4F0\uB824\uBA74 \uBA3C\uC800 \uC138\uC158\uC744 \uD655\uC778\uD558\uC138\uC694", + "chat.e2eeNote": "\uBAA8\uB4E0 \uBA54\uC2DC\uC9C0\uB294 \uAE30\uAE30\uB97C \uB5A0\uB098\uAE30 \uC804\uC5D0 \uC885\uB2E8 \uAC04 \uC554\uD638\uD654\uB429\uB2C8\uB2E4.", + "chat.peersOnly": "\uC5F0\uACB0\uB41C \uC0C1\uB300\uC5D0\uAC8C\uB9CC \uC885\uB2E8 \uAC04\uC73C\uB85C \uC804\uC1A1\uB418\uBA70 - \uC11C\uBC84\uC5D0 \uC800\uC7A5\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", + "flow.invitationCreated": "\uC548\uC804\uD55C \uCD08\uB300\uB97C \uB9CC\uB4E4\uC5C8\uC2B5\uB2C8\uB2E4", + "flow.invitationCreatedBang": "\uC548\uC804\uD55C \uCD08\uB300\uB97C \uB9CC\uB4E4\uACE0 \uC554\uD638\uD654\uD588\uC2B5\uB2C8\uB2E4.", + "flow.responseCreated": "\uC548\uC804\uD55C \uC751\uB2F5\uC744 \uB9CC\uB4E4\uC5C8\uC2B5\uB2C8\uB2E4", + "flow.responseCreatedBang": "\uC548\uC804\uD55C \uC751\uB2F5\uC744 \uB9CC\uB4E4\uC5C8\uC2B5\uB2C8\uB2E4.", + "flow.sendInvitation": "\uC548\uC804\uD55C \uACBD\uB85C(\uD1B5\uD654, \uBB38\uC790 \uB4F1)\uB85C \uCD08\uB300 \uCF54\uB4DC\uB97C \uC0C1\uB300\uC5D0\uAC8C \uBCF4\uB0B4\uC138\uC694.", + "flow.sendResponse": "\uC548\uC804\uD55C \uACBD\uB85C\uB85C \uC751\uB2F5 \uCF54\uB4DC\uB97C \uCC98\uC74C \uC5F0 \uC0AC\uB78C\uC5D0\uAC8C \uBCF4\uB0B4\uAC70\uB098, \uC544\uB798 QR\uC744 \uC2A4\uCE94\uD558\uAC8C \uD558\uC138\uC694.", + "flow.sendEncryptedCode": "\uC554\uD638\uD654\uB41C \uCF54\uB4DC \uBCF4\uB0B4\uAE30", + "flow.sendTheResponse": "\uC751\uB2F5 \uBCF4\uB0B4\uAE30", + "flow.pasteOrWrite": "\uCF54\uB4DC\uB97C \uBD99\uC5EC\uB123\uAC70\uB098 \uC785\uB825\uD558\uC138\uC694\u2026", + "flow.processingInvitation": "\uC548\uC804\uD55C \uCD08\uB300\uB97C \uCC98\uB9AC\uD558\uB294 \uC911\u2026", + "flow.processingResponse": "\uC548\uC804\uD55C \uC751\uB2F5\uC744 \uCC98\uB9AC\uD558\uB294 \uC911\u2026", + "flow.finalizing": "\uC548\uC804\uD55C \uC5F0\uACB0\uC744 \uB9C8\uBB34\uB9AC\uD558\uB294 \uC911\u2026", + "flow.channelEstablished": "\uC548\uC804\uD55C \uCC44\uB110\uC774 \uB9CC\uB4E4\uC5B4\uC84C\uC2B5\uB2C8\uB2E4", + "flow.channelReady": "\uC548\uC804\uD55C \uCC44\uB110\uC774 \uC900\uBE44\uB418\uC5C8\uC2B5\uB2C8\uB2E4", + "flow.restoring": "\uC5F0\uACB0\uC744 \uB418\uC0B4\uB9AC\uB294 \uC911\u2026", + "flow.invitationCaptured": "\uCD08\uB300\uB97C \uC77D\uC5C8\uC2B5\uB2C8\uB2E4.", + "err.needInvitation": "\uC0C1\uB300\uAC00 \uC900 \uCD08\uB300 \uCF54\uB4DC\uB97C \uBD99\uC5EC\uB123\uC5B4\uC57C \uD569\uB2C8\uB2E4.", + "err.needResponse": "\uC0C1\uB300\uAC00 \uC900 \uC751\uB2F5 \uCF54\uB4DC\uB97C \uBD99\uC5EC\uB123\uC5B4\uC57C \uD569\uB2C8\uB2E4.", + "err.responseFormat": "\uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 - \uCF54\uB4DC\uB97C \uD655\uC778\uD558\uC138\uC694", + "err.responseNoKey": "\uC751\uB2F5 \uCF54\uB4DC\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 - \uC554\uD638 \uD0A4\uAC00 \uC5C6\uAC70\uB098 \uC190\uC0C1\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uCF54\uB4DC\uB97C \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.", + "err.responseNoSignKey": "\uC751\uB2F5 \uCF54\uB4DC\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 - \uC11C\uBA85 \uD655\uC778 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uCF54\uB4DC\uB97C \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.", + "err.responseOutdated": "\uC751\uB2F5 \uB370\uC774\uD130\uAC00 \uC624\uB798\uB418\uC5C8\uC2B5\uB2C8\uB2E4 - \uC0C8 \uCD08\uB300\uB97C \uC0AC\uC6A9\uD558\uC138\uC694", + "err.setupError": "\uC5F0\uACB0\uC744 \uB9FA\uB294 \uC911 \uC624\uB958\uAC00 \uB0AC\uC2B5\uB2C8\uB2E4", + "err.notReady": "\uC5F0\uACB0\uC774 \uC544\uC9C1 \uC900\uBE44\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4", + "err.securityBreach": "\uBCF4\uC548 \uCE68\uD574\uAC00 \uAC10\uC9C0\uB418\uC5B4 \uC5F0\uACB0\uC744 \uAC70\uBD80\uD588\uC2B5\uB2C8\uB2E4", + "err.securityValidation": "\uBCF4\uC548 \uAC80\uC99D\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4 - \uACF5\uACA9\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4", + "err.retiredQr": "\uC774 QR\uC740 \uB354 \uC774\uC0C1 \uC4F0\uC9C0 \uC54A\uB294 \uD615\uC2DD\uC774\uB77C \uCD08\uB300\uB97C \uC804\uB2EC\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uC0C1\uB300\uC5D0\uAC8C \uC0C8\uB85C \uB9CC\uB4E4\uC5B4 \uB2EC\uB77C\uACE0 \uD558\uAC70\uB098 \uBCF5\uC0AC\xB7\uBD99\uC5EC\uB123\uAE30\uB97C \uC4F0\uC138\uC694.", + "err.compressedQrNote": "\uC555\uCD95\uB41C QR\uC740 \uAC04\uACB0\uD568\uC744 \uC704\uD574 SDP\uB97C \uC0DD\uB7B5\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC5F0\uACB0\uC5D0 \uC2E4\uD328\uD558\uBA74 \uBCF5\uC0AC\xB7\uBD99\uC5EC\uB123\uAE30\uB97C \uC4F0\uC138\uC694.", + "err.inviteNotConnected": "\uCD08\uB300\uB97C \uBCF4\uB0B4\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uADF8 \uB300\uD654\uB294 \uC9C0\uAE08 \uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", + "err.inviteNotConnectedRetry": "\uCD08\uB300\uB97C \uBCF4\uB0B4\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uADF8 \uB300\uD654\uB294 \uC9C0\uAE08 \uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 - \uB2E4\uC2DC \uC5F4\uACE0 \uC2DC\uB3C4\uD558\uC138\uC694.", + "err.nobodyAccepted": "\uC544\uBB34\uB3C4 \uCD08\uB300\uB97C \uC218\uB77D\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uADF8\uB8F9\uC740 \uADF8\uB300\uB85C\uC785\uB2C8\uB2E4.", + "err.noAudio": "\uC18C\uB9AC\uAC00 \uB179\uC74C\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4 - \uB9C8\uC774\uD06C \uAD8C\uD55C\uC744 \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.", + "err.voiceNeedsConnection": "\uC74C\uC131 \uBA54\uC2DC\uC9C0\uB97C \uBCF4\uB0B4\uB824\uBA74 \uD65C\uC131\uD654\uB41C \uC548\uC804\uD55C \uC5F0\uACB0\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uB2E4\uC2DC \uC5F0\uACB0\uD55C \uB4A4 \uC2DC\uB3C4\uD558\uC138\uC694.", + "err.voiceRestoring": "\uC5F0\uACB0\uC744 \uB418\uC0B4\uB9AC\uB294 \uC911\uC785\uB2C8\uB2E4 - \uC7A0\uC2DC \uB4A4\uC5D0 \uC74C\uC131 \uBA54\uC2DC\uC9C0\uB97C \uB2E4\uC2DC \uBCF4\uB0B4\uBCF4\uC138\uC694.", + "err.fileTooLarge": "\uD30C\uC77C\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4", + "sas.safetyNumber": "\uC548\uC804 \uBC88\uD638", + "sas.incorrect": "\uCF54\uB4DC\uAC00 \uB9DE\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC0C1\uB300\uC640 \uB300\uC870\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.", + "sas.noMatch": "\uCF54\uB4DC\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + "sas.makeSure": "\uB450 \uCF54\uB4DC\uAC00 \uC815\uD655\uD788 \uAC19\uC740\uC9C0 \uD655\uC778\uD558\uC138\uC694.", + "sas.tooManyAttempts": "\uC798\uBABB\uB41C \uC2DC\uB3C4\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uC548\uC804\uC744 \uC704\uD574 \uC138\uC158\uC744 \uCD08\uAE30\uD654\uD588\uC2B5\uB2C8\uB2E4.", + "sas.verificationFailed": "\uD655\uC778 \uC2E4\uD328", + "sas.verified": "\uD655\uC778\uB428 \xB7 \uC644\uC804 \uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "sas.runVerification": "\uBCF4\uC548 \uAC80\uC99D \uC2E4\uD589", + "sec.panelTitle": "\uB124\uD2B8\uC6CC\uD06C\uC640 \uC554\uD638\uD559 \uC0C1\uC138", + "sec.security": "\uBCF4\uC548", + "sec.transport": "\uC804\uC1A1", + "sec.keyExchange": "\uD0A4 \uAD50\uD658", + "sec.allEnabled": "\uBAA8\uB4E0 \uBCF4\uC548 \uAE30\uB2A5\uC774 \uAE30\uBCF8\uC73C\uB85C \uCF1C\uC838 \uC788\uC2B5\uB2C8\uB2E4", + "sec.realTimeNote": "\uC2E4\uC81C \uC554\uD638\uD559 \uD568\uC218\uB85C \uC2E4\uC2DC\uAC04 \uAC80\uC99D\uD569\uB2C8\uB2E4 - \uAFB8\uBA70\uB0B8 \uB370\uC774\uD130\uB294 \uC5C6\uC2B5\uB2C8\uB2E4.", + "sec.simulatedWarning": "\uC8FC\uC758: \uC5F0\uACB0\uC774 \uC544\uC9C1 \uC644\uC804\uD788 \uB9FA\uC5B4\uC9C0\uC9C0 \uC54A\uC558\uC744 \uC218 \uC788\uC5B4 - \uAC12\uC774 \uBAA8\uC758\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.", + "dl.title": "SecureBit \uB0B4\uB824\uBC1B\uAE30", + "dl.free": "\uBB34\uB8CC \xB7 \uACF5\uAC1C \uC18C\uC2A4", + "dl.soon": "\uBAA8\uBC14\uC77C \uC571(iOS, Android)\uACFC \uBE0C\uB77C\uC6B0\uC800 \uD655\uC7A5(Chrome, Firefox, Opera)\uC774 \uACE7 \uB098\uC635\uB2C8\uB2E4.", + "chatHdr.chat": "\uB300\uD654", + "chatHdr.chats": "\uB300\uD654", + "chatHdr.newChat": "+ \uC0C8\uB85C", + "chatHdr.secure": "\uBCF4\uC548", + "chatHdr.p2pSub": "P2P \xB7 \uC885\uB2E8 \uAC04 \uC554\uD638\uD654", + "chatHdr.save": "\uC800\uC7A5", + "chatHdr.close": "\uB2EB\uAE30", + "chatHdr.expand": "\uB113\uAC8C \uBCF4\uAE30", + "chatHdr.you": "\uB098", + "chatHdr.qrCode": "QR \uCF54\uB4DC", + "chat.disconnected": "\uC5F0\uACB0 \uB04A\uAE40", + "call.mute": "\uC74C\uC18C\uAC70", + "call.endShort": "\uC885\uB8CC", + "group.add": "\uCD94\uAC00", + "group.send": "\uBCF4\uB0B4\uAE30", + "sec.pfsShort": "\uC644\uC804 \uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "sec.cipher": "\uC554\uD638", + "chat.close": "\uB2EB\uAE30", + "file.needConnection": "\uD30C\uC77C \uC804\uC1A1\uC5D0\uB294 \uC5F0\uACB0\uC774 \uD544\uC694\uD569\uB2C8\uB2E4", + "presence.available": "\uB300\uD654 \uAC00\uB2A5", + "presence.away": "\uC790\uB9AC \uBE44\uC6C0", + "presence.busy": "\uBC14\uC068", + "presence.offline": "\uC624\uD504\uB77C\uC778", + "presence.invisible": "\uC228\uAE40", + "presence.availableDesc": "\uC628\uB77C\uC778\uC774\uBA70 \uC5F0\uB77D \uAC00\uB2A5", + "presence.awayDesc": "\uC790\uB9AC \uBE44\uC6C0 \xB7 \uC7A0\uC2DC \uB098\uAC10", + "presence.busyDesc": "\uBC29\uD574 \uAE08\uC9C0", + "presence.invisibleDesc": "\uB2E4\uB978 \uC0AC\uB78C\uC5D0\uAC8C \uC624\uD504\uB77C\uC778\uC73C\uB85C \uBCF4\uC774\uAE30", + "presence.online": "\uC628\uB77C\uC778", + "conn.p2p": "P2P \xB7 \uC5F0\uACB0\uB428", + "conn.verifying": "\uD655\uC778 \uC911\u2026", + "conn.connecting": "\uC5F0\uACB0 \uC911\u2026", + "conn.reconnecting": "\uB2E4\uC2DC \uC5F0\uACB0 \uC911\u2026", + "conn.peerDisconnected": "\uC0C1\uB300\uAC00 \uC5F0\uACB0\uC744 \uB04A\uC5C8\uC2B5\uB2C8\uB2E4", + "conn.disconnected": "\uC5F0\uACB0 \uB04A\uAE40", + "chat.defaultLabel": "\uB300\uD654", + "groupPhase.forming": "\uAD6C\uC131\uD558\uB294 \uC911\u2026", + "groupPhase.commitments": "\uD655\uC57D\uC744 \uC8FC\uACE0\uBC1B\uB294 \uC911\u2026", + "groupPhase.revealing": "\uACF5\uAC1C\uD558\uB294 \uC911\u2026", + "groupPhase.compare": "\uADF8\uB8F9 \uCF54\uB4DC\uB97C \uB300\uC870\uD558\uC138\uC694", + "groupPhase.ready": "\uADF8\uB8F9 \uC900\uBE44 \uC644\uB8CC", + "groupPhase.failed": "\uADF8\uB8F9\uC774 \uB9CC\uB4E4\uC5B4\uC9C0\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4", + "call.qualityGood": "\uC88B\uC74C", + "call.qualityFair": "\uBCF4\uD1B5", + "call.qualityWeak": "\uC57D\uD568", + "msg.code": "\uCF54\uB4DC", + "msg.timer": "\uD0C0\uC774\uBA38", + "msg.voice": "\uC74C\uC131", + "msg.play": "\uC7AC\uC0DD", + "msg.sent": "\uBCF4\uB0C4", + "msg.read": "\uC77D\uC74C", + "report.title": "\uC2E4\uC2DC\uAC04 \uBCF4\uC548 \uAC80\uC99D", + "report.active": "\uB3D9\uC791 \uC911", + "report.testsPassed": "\uD1B5\uACFC\uD55C \uAC80\uC0AC", + "report.verifiedAt": "\uAC80\uC99D \uC2DC\uAC01", + "report.source": "\uCD9C\uCC98", + "secTest.verifyECDHKeyExchange": "ECDH \uD0A4 \uAD50\uD658", + "secTest.verifyECDSASignatures": "ECDSA \uC804\uC790 \uC11C\uBA85", + "secTest.verifyEncryption": "AES-GCM \uC554\uD638\uD654", + "secTest.verifyMessageIntegrity": "\uBA54\uC2DC\uC9C0 \uBB34\uACB0\uC131", + "secTest.verifyPerfectForwardSecrecy": "\uC644\uC804 \uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "secTest.verifyPFS": "\uC644\uC804 \uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131", + "secTest.verifyReplayProtection": "\uC7AC\uC804\uC1A1 \uACF5\uACA9 \uBC29\uC5B4", + "secTest.verifyDTLSFingerprint": "DTLS \uC9C0\uBB38", + "secTest.verifySASVerification": "SAS \uD655\uC778", + "secTest.verifyMetadataProtection": "\uBA54\uD0C0\uB370\uC774\uD130 \uBCF4\uD638", + "secTest.verifyTrafficObfuscation": "\uD2B8\uB798\uD53D \uB09C\uB3C5\uD654", + "secTest.verifyPacketPadding": "\uD328\uD0B7 \uD328\uB529", + "secTest.verifyNestedEncryption": "\uC911\uCCA9 \uC554\uD638\uD654", + "secTest.verifyNonExtractableKeys": "\uCD94\uCD9C \uBD88\uAC00 \uD0A4", + "secTest.verifyRateLimiting": "\uC18D\uB3C4 \uC81C\uD55C", + "secTest.verifyMutualAuth": "\uC0C1\uD638 \uC778\uC99D", + "secTest.verifyAuthProof": "\uC778\uC99D \uC99D\uBA85", + "secTest.verifyEnhancedValidation": "\uAC15\uD654\uB41C \uAC80\uC99D", + "secTest.verifyAdvancedFeatures": "\uACE0\uAE09 \uAE30\uB2A5", + "secTest.verifySignature": "\uC11C\uBA85 \uAC80\uC0AC", + "secDetail.Security system initializing...": "\uBCF4\uC548 \uC2DC\uC2A4\uD15C\uC744 \uC2DC\uC791\uD558\uB294 \uC911\u2026", + "secDetail.Nested encryption active": "\uC911\uCCA9 \uC554\uD638\uD654\uAC00 \uCF1C\uC838 \uC788\uC2B5\uB2C8\uB2E4", + "secDetail.Nested encryption failed": "\uC911\uCCA9 \uC554\uD638\uD654 \uC2E4\uD328", + "secDetail.Packet padding active": "\uD328\uD0B7 \uD328\uB529\uC774 \uCF1C\uC838 \uC788\uC2B5\uB2C8\uB2E4", + "secDetail.Packet padding failed": "\uD328\uD0B7 \uD328\uB529 \uC2E4\uD328", + "secDetail.Advanced features active": "\uACE0\uAE09 \uAE30\uB2A5\uC774 \uCF1C\uC838 \uC788\uC2B5\uB2C8\uB2E4", + "secDetail.Advanced features failed": "\uACE0\uAE09 \uAE30\uB2A5 \uC2E4\uD328", + "secDetail.No encryption key available": "\uC4F8 \uC218 \uC788\uB294 \uC554\uD638\uD654 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", + "secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM \uC554\uD638\uD654\uC640 \uBCF5\uD638\uD654\uAC00 \uC815\uC0C1 \uB3D9\uC791\uD569\uB2C8\uB2E4", + "secDetail.No ECDH key pair available": "\uC4F8 \uC218 \uC788\uB294 ECDH \uD0A4 \uC30D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4", + "secDetail.Key derivation failed": "\uD0A4 \uC720\uB3C4\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4", + "secDetail.No ECDSA key pair available": "\uC4F8 \uC218 \uC788\uB294 ECDSA \uD0A4 \uC30D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4", + "secDetail.ECDSA digital signatures working correctly": "ECDSA \uC804\uC790 \uC11C\uBA85\uC774 \uC815\uC0C1 \uB3D9\uC791\uD569\uB2C8\uB2E4", + "secDetail.MAC key not available or invalid": "MAC \uD0A4\uAC00 \uC5C6\uAC70\uB098 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + "secDetail.Rate limiter did not block a message over the limit": "\uC18D\uB3C4 \uC81C\uD55C\uAE30\uAC00 \uD55C\uB3C4\uB97C \uB118\uC740 \uBA54\uC2DC\uC9C0\uB97C \uB9C9\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4", + "secDetail.Rate limiter is not available": "\uC18D\uB3C4 \uC81C\uD55C\uAE30\uB97C \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4", + "secDetail.Replay protection is working correctly": "\uC7AC\uC804\uC1A1 \uACF5\uACA9 \uBC29\uC5B4\uAC00 \uC815\uC0C1 \uB3D9\uC791\uD569\uB2C8\uB2E4", + "secDetail.Replay protection not enabled": "\uC7AC\uC804\uC1A1 \uACF5\uACA9 \uBC29\uC5B4\uAC00 \uAEBC\uC838 \uC788\uC2B5\uB2C8\uB2E4", + "secDetail.SAS code not available": "SAS \uCF54\uB4DC\uB97C \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4", + "secDetail.SAS verification code is valid and available": "SAS \uD655\uC778 \uCF54\uB4DC\uAC00 \uC720\uD6A8\uD558\uBA70 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4", + "secDetail.Traffic obfuscation is working correctly": "\uD2B8\uB798\uD53D \uB09C\uB3C5\uD654\uAC00 \uC815\uC0C1 \uB3D9\uC791\uD569\uB2C8\uB2E4", + "secDetail.Traffic obfuscation not enabled": "\uD2B8\uB798\uD53D \uB09C\uB3C5\uD654\uAC00 \uAEBC\uC838 \uC788\uC2B5\uB2C8\uB2E4", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "\uC774 \uC138\uC158\uC5D0\uB294 \uCD94\uCD9C\uD560 \uC218 \uC5C6\uB294 \uC77C\uD68C\uC6A9 ECDH \uD0A4 \uC30D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4", + "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": "\uC138\uC158 \uB2E8\uC704 \uC21C\uBC29\uD5A5 \uBE44\uBC00\uC131\uB9CC \uC801\uC6A9\uB429\uB2C8\uB2E4. \uD0A4\uB294 \uC138\uC158\uB9C8\uB2E4 \uC77C\uD68C\uC6A9\uC774\uC9C0\uB9CC \uC774 \uC5F0\uACB0\uC5D0\uC11C\uB294 Double Ratchet\uC774 \uB3D9\uC791\uD558\uC9C0 \uC54A\uC544(\uC0C1\uB300\uAC00 \uC774\uC804 \uBC84\uC804 \uC0AC\uC6A9), \uC138\uC158 \uD0A4\uAC00 \uC720\uCD9C\uB418\uBA74 \uB300\uD654 \uC804\uCCB4\uAC00 \uB4DC\uB7EC\uB0A9\uB2C8\uB2E4.", + "msg.pause": "\uC77C\uC2DC\uC815\uC9C0", + "msg.failed": "\uC2E4\uD328", + "groupErr.timeout": "\uCF54\uB4DC\uAC00 \uC900\uBE44\uB418\uAE30 \uC804\uC5D0 \uC5B4\uB5A4 \uAD6C\uC131\uC6D0\uC774 \uC751\uB2F5\uC744 \uBA48\uCDC4\uC2B5\uB2C8\uB2E4.", + "groupErr.keyMismatch": "\uC5B4\uB5A4 \uAD6C\uC131\uC6D0\uC758 \uD0A4\uAC00 \uBC1D\uD78C \uC2E0\uC6D0\uACFC \uB9DE\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.", + "groupErr.revealMismatch": "\uC5B4\uB5A4 \uAD6C\uC131\uC6D0\uC774 \uACF5\uAC1C\uD55C \uAC12\uC774 \uC55E\uC11C \uD655\uC57D\uD55C \uAC83\uACFC \uB9DE\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.", + "groupErr.commitChanged": "\uC5B4\uB5A4 \uAD6C\uC131\uC6D0\uC774 \uB3C4\uC911\uC5D0 \uD655\uC57D\uC744 \uBC14\uAFE8\uC2B5\uB2C8\uB2E4.", + "groupErr.missingKey": "\uBA85\uB2E8\uC5D0 \uC788\uB358 \uAD6C\uC131\uC6D0\uC758 \uD0A4\uAC00 \uB05D\uB0B4 \uB3C4\uCC29\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.", + "groupErr.outsider": "\uADF8\uB8F9 \uBC16\uC758 \uB204\uAD70\uAC00\uC5D0\uAC8C\uC11C \uD504\uB808\uC784\uC774 \uB3C4\uCC29\uD588\uC2B5\uB2C8\uB2E4.", + "groupErr.limit": "\uADF8\uB8F9\uC740 \uCD5C\uB300 \uC5EC\uB35F \uBA85\uAE4C\uC9C0\uC785\uB2C8\uB2E4.", + "groupErr.tooLarge": "\uBA54\uC2DC\uC9C0\uAC00 \uB108\uBB34 \uCEE4\uC11C \uADF8\uB8F9\uC5D0 \uBCF4\uB0BC \uC218 \uC5C6\uC5C8\uC2B5\uB2C8\uB2E4.", + "fileType.text": "\uC77C\uBC18 \uD14D\uC2A4\uD2B8", + "fileType.images": "\uC774\uBBF8\uC9C0", + "fileType.archives": "\uC555\uCD95 \uD30C\uC77C", + "fileType.voice": "\uC74C\uC131 \uBA54\uC2DC\uC9C0", + "fileType.unsupported": "\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC74C", + "qrScan.title": "QR \uCF54\uB4DC \uC2A4\uCE94", + "qrScan.auto": "\uC790\uB3D9 \uBAA8\uB4DC", + "qrScan.reset": "\uCD08\uAE30\uD654", + "qrScan.autoScroll": "\uC790\uB3D9 \uC2A4\uD06C\uB864\uC774 \uCF1C\uC84C\uC2B5\uB2C8\uB2E4", + "qrScan.starting": "\uCE74\uBA54\uB77C\uB97C \uCF1C\uB294 \uC911\u2026", + "qrScan.point": "\uC0C1\uB300\uC758 QR\uC5D0 \uCE74\uBA54\uB77C\uB97C \uB9DE\uCD94\uC138\uC694", + "qrScan.tapFocus": "\uD654\uBA74\uC744 \uB20C\uB7EC \uCD08\uC810\uC744 \uB9DE\uCD94\uC138\uC694", + "qrScan.focusing": "\uCD08\uC810 \uB9DE\uCD94\uB294 \uC911\u2026", + "iceErr.notArray": "\uC11C\uBC84 \uBAA9\uB85D\uC740 \uBC30\uC5F4\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4", + "iceErr.invalidJson": "\uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 JSON", + "iceErr.tooMany": "\uC11C\uBC84\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4 (\uCD5C\uB300 {max}\uAC1C)", + "iceErr.invalidEntry": "{label}: \uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uD56D\uBAA9", + "iceErr.urlCount": "{label}: URL\uC774 1\uAC1C\uC5D0\uC11C {max}\uAC1C \uC0AC\uC774\uC5EC\uC57C \uD569\uB2C8\uB2E4", + "iceErr.turnCreds": "{label}: TURN \uC11C\uBC84\uB294 \uBCF4\uD1B5 \uC0AC\uC6A9\uC790 \uC774\uB984\uACFC \uC790\uACA9 \uC99D\uBA85\uC774 \uD544\uC694\uD569\uB2C8\uB2E4", + "iceUrl.notString": "URL\uC740 \uBB38\uC790\uC5F4\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4", + "iceUrl.empty": "URL\uC774 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4", + "iceUrl.tooLong": "URL\uC774 \uB108\uBB34 \uAE41\uB2C8\uB2E4", + "iceUrl.badChars": "URL\uC5D0 \uC4F8 \uC218 \uC5C6\uB294 \uBB38\uC790\uAC00 \uC788\uC2B5\uB2C8\uB2E4", + "iceUrl.badScheme": "URL\uC740 stun:, stuns:, turn: \uB610\uB294 turns: \uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4", + "iceUrl.badQuery": "URL\uC758 \uC9C8\uC758\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + "iceUrl.noHost": "URL\uC5D0 \uD638\uC2A4\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", + "iceUrl.badHost": "URL\uC758 \uD638\uC2A4\uD2B8\uB098 \uD3EC\uD2B8\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4", + "iceUrl.badTransport": "URL \uC9C8\uC758\uB294 transport=udp \uB610\uB294 transport=tcp \uC5EC\uC57C \uD569\uB2C8\uB2E4", + "msg.off": "\uB054", + "file.consentUnavailable": "\uB3D9\uC758\uB97C \uAD6C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4", + "secLevel.MAXIMUM": "\uCD5C\uACE0", + "secLevel.INITIALIZING": "\uC2DC\uC791 \uC911", + "secLevel.ERROR": "\uC624\uB958", + "secLevel.UNKNOWN": "\uC54C \uC218 \uC5C6\uC74C", + "status.error": "\uC624\uB958", + "offline.disconnect": "\uC5F0\uACB0 \uB04A\uAE30", + "offline.learnMore": "\uC790\uC138\uD788 \uBCF4\uAE30", + "pwa.installApp": "\uC571 \uC124\uCE58", + "chat.onWeb": "\uC6F9 \uBC84\uC804\uC744 \uC4F0\uACE0 \uC788\uC2B5\uB2C8\uB2E4" + }, + "hi": { + "language.label": "\u092D\u093E\u0937\u093E", + "community.title": "\u0928\u093F\u091C\u0924\u093E \u0915\u0947 \u092D\u0935\u093F\u0937\u094D\u092F \u092E\u0947\u0902 \u0936\u093E\u092E\u093F\u0932 \u0939\u094B\u0902", + "community.description": "SecureBit \u0905\u092A\u0928\u0947 \u0938\u092E\u0941\u0926\u093E\u092F \u0938\u0947 \u092C\u0922\u093C\u0924\u093E \u0939\u0948\u0964 \u0906\u092A\u0915\u0947 \u0935\u093F\u091A\u093E\u0930 \u0914\u0930 \u0938\u0941\u091D\u093E\u0935 \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0938\u0902\u0935\u093E\u0926 \u0915\u093E \u092D\u0935\u093F\u0937\u094D\u092F \u0917\u0922\u093C\u0924\u0947 \u0939\u0948\u0902 - \u0916\u0941\u0932\u0947 \u092E\u0947\u0902 \u092C\u0928\u093E, \u0914\u0930 \u092A\u0942\u0930\u0947 \u0930\u093E\u0938\u094D\u0924\u0947 \u092A\u0942\u0930\u0940 ASN.1 \u091C\u093E\u0901\u091A \u0915\u0947 \u0938\u093E\u0925\u0964", + "community.github": "GitHub \u0930\u093F\u092A\u0949\u091C\u093C\u093F\u091F\u0930\u0940", + "community.feedback": "\u092A\u094D\u0930\u0924\u093F\u0915\u094D\u0930\u093F\u092F\u093E", + "unique.eyebrow": "\u0939\u092E \u0905\u0932\u0917 \u0915\u0948\u0938\u0947 \u0939\u0948\u0902", + "unique.heading": "SecureBit \u0916\u093C\u093E\u0938 \u0915\u094D\u092F\u094B\u0902 \u0939\u0948", + "unique.s1.titleTop": "\u092A\u0930\u0924\u0926\u093E\u0930", + "unique.s1.titleBottom": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u0915\u094B\u0930", + "unique.s1.collapsed": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u0915\u094B\u0930", + "unique.s1.desc": "ECDH P-384 \u0915\u0941\u0902\u091C\u0940 \u0935\u093F\u0928\u093F\u092E\u092F, AES-256-GCM \u092A\u0947\u0932\u094B\u0921, ECDSA \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0914\u0930 \u092A\u0942\u0930\u0940 ASN.1 \u091C\u093E\u0901\u091A - \u0938\u092C \u090F\u0915 \u092E\u091C\u093C\u092C\u0942\u0924 \u0936\u094D\u0930\u0943\u0902\u0916\u0932\u093E \u092E\u0947\u0902 \u092A\u093F\u0930\u094B\u090F \u0939\u0941\u090F\u0964", + "unique.s1.tags": [ + "ECDH P-384", + "AES-256-GCM", + "ECDSA", + "ASN.1" + ], + "unique.s2.titleTop": "\u0936\u0941\u0926\u094D\u0927 P2P", + "unique.s2.titleBottom": "WebRTC \u092A\u0930", + "unique.s2.collapsed": "WebRTC \u092A\u0930 \u0936\u0941\u0926\u094D\u0927 P2P", + "unique.s2.desc": "\u0938\u0902\u0926\u0947\u0936 WebRTC \u0915\u0947 \u091C\u093C\u0930\u093F\u090F \u0938\u0940\u0927\u0947 \u090F\u0915 \u0909\u092A\u0915\u0930\u0923 \u0938\u0947 \u0926\u0942\u0938\u0930\u0947 \u0924\u0915 \u091C\u093E\u0924\u0947 \u0939\u0948\u0902\u0964 \u0915\u094B\u0908 \u0930\u093F\u0932\u0947 \u0906\u092A\u0915\u093E \u0921\u0947\u091F\u093E \u0928\u0939\u0940\u0902 \u0930\u0916\u0924\u093E - \u0938\u0930\u094D\u0935\u0930 \u092C\u0938 \u0926\u094B\u0928\u094B\u0902 \u092A\u0915\u094D\u0937\u094B\u0902 \u0915\u094B \u090F\u0915-\u0926\u0942\u0938\u0930\u0947 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A\u0928\u0947 \u092E\u0947\u0902 \u092E\u0926\u0926 \u0915\u0930\u0924\u093E \u0939\u0948\u0964", + "unique.s2.tags": [ + "DTLS 1.3", + "\u0915\u094B\u0908 \u0930\u093F\u0932\u0947 \u0928\u0939\u0940\u0902" + ], + "unique.s3.titleTop": "\u092A\u0942\u0930\u094D\u0923 \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940", + "unique.s3.titleBottom": "\u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "unique.s3.collapsed": "\u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "unique.s3.desc": "\u0938\u0924\u094D\u0930 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u0932\u0917\u093E\u0924\u093E\u0930 \u092C\u0926\u0932\u0924\u0940 \u0930\u0939\u0924\u0940 \u0939\u0948\u0902 \u0914\u0930 \u0909\u092A\u092F\u094B\u0917 \u0915\u0947 \u092C\u093E\u0926 \u0939\u091F\u093E \u0926\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902, \u0907\u0938\u0932\u093F\u090F \u090F\u0915 \u0915\u0941\u0902\u091C\u0940 \u0932\u0940\u0915 \u0939\u094B\u0928\u0947 \u092A\u0930 \u092D\u0940 \u092A\u0941\u0930\u093E\u0928\u0940 \u092C\u093E\u0924\u091A\u0940\u0924 \u0928\u0939\u0940\u0902 \u0916\u0941\u0932\u0924\u0940\u0964", + "unique.s3.tags": [ + "\u0915\u094D\u0937\u0923\u093F\u0915 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901", + "\u0938\u094D\u0935\u0924\u0903 \u092C\u0926\u0932\u093E\u0935" + ], + "unique.s4.titleTop": "\u091F\u094D\u0930\u0948\u092B\u093C\u093F\u0915", + "unique.s4.titleBottom": "\u0905\u0938\u094D\u092A\u0937\u094D\u091F\u0940\u0915\u0930\u0923", + "unique.s4.collapsed": "\u091F\u094D\u0930\u0948\u092B\u093C\u093F\u0915 \u0905\u0938\u094D\u092A\u0937\u094D\u091F\u0940\u0915\u0930\u0923", + "unique.s4.desc": "\u092A\u0948\u0915\u0947\u091F \u0915\u093E \u0906\u0915\u093E\u0930 \u0914\u0930 \u0938\u092E\u092F \u092D\u0930\u093E \u0914\u0930 \u092F\u093E\u0926\u0943\u091A\u094D\u091B\u093F\u0915 \u0915\u093F\u092F\u093E \u091C\u093E\u0924\u093E \u0939\u0948, \u091C\u093F\u0938\u0938\u0947 \u0932\u093E\u0907\u0928 \u0926\u0947\u0916 \u0930\u0939\u0947 \u0915\u093F\u0938\u0940 \u092D\u0940 \u0935\u094D\u092F\u0915\u094D\u0924\u093F \u0915\u094B \u092E\u0947\u091F\u093E\u0921\u0947\u091F\u093E \u0915\u093E \u0922\u0930\u094D\u0930\u093E \u0926\u093F\u0916\u093E\u0908 \u0928\u0939\u0940\u0902 \u0926\u0947\u0924\u093E\u0964", + "unique.s4.tags": [ + "\u092A\u0948\u0915\u0947\u091F \u092A\u0948\u0921\u093F\u0902\u0917", + "\u0938\u092E\u092F \u092E\u0947\u0902 \u0909\u0924\u093E\u0930-\u091A\u0922\u093C\u093E\u0935" + ], + "unique.s5.titleTop": "\u0936\u0942\u0928\u094D\u092F \u0921\u0947\u091F\u093E", + "unique.s5.titleBottom": "\u0938\u0902\u0917\u094D\u0930\u0939", + "unique.s5.collapsed": "\u0936\u0942\u0928\u094D\u092F \u0921\u0947\u091F\u093E \u0938\u0902\u0917\u094D\u0930\u0939", + "unique.s5.desc": "\u0928 \u0916\u093E\u0924\u0947, \u0928 \u0932\u0949\u0917, \u0928 \u0938\u0902\u0926\u0947\u0936\u094B\u0902 \u0915\u093E \u092D\u0902\u0921\u093E\u0930\u0923\u0964 \u0938\u0930\u094D\u0935\u0930 \u092A\u0930 \u0910\u0938\u093E \u0915\u0941\u091B \u0939\u0948 \u0939\u0940 \u0928\u0939\u0940\u0902 \u091C\u094B \u0932\u0940\u0915 \u0939\u094B, \u091C\u093C\u092C\u094D\u0924 \u0939\u094B \u092F\u093E \u092C\u0947\u091A\u093E \u091C\u093E \u0938\u0915\u0947\u0964", + "unique.s5.tags": [ + "\u0915\u094B\u0908 \u0916\u093E\u0924\u093E \u0928\u0939\u0940\u0902", + "\u0915\u094B\u0908 \u0932\u0949\u0917 \u0928\u0939\u0940\u0902" + ], + "partners.eyebrow": "\u0938\u093E\u091D\u0947\u0926\u093E\u0930 \u0914\u0930 \u092A\u0930\u093F\u0924\u0902\u0924\u094D\u0930", + "partners.heading": "\u0939\u092E\u093E\u0930\u0947 \u0938\u093E\u091D\u0947\u0926\u093E\u0930 \u0939\u092E \u092A\u0930 \u092D\u0930\u094B\u0938\u093E \u0915\u0930\u0924\u0947 \u0939\u0948\u0902", + "partners.aegis.desc": "\u092A\u0942\u0901\u091C\u0940 \u0938\u093E\u091D\u0947\u0926\u093E\u0930, \u091C\u094B \u0905\u092A\u0928\u0947 \u092A\u0942\u0930\u0947 \u092A\u094B\u0930\u094D\u091F\u092B\u093C\u094B\u0932\u093F\u092F\u094B \u092E\u0947\u0902 \u0917\u094B\u092A\u0928\u0940\u092F \u0935\u093F\u0924\u094D\u0924\u0940\u092F \u0938\u0902\u0935\u093E\u0926 \u0915\u0940 \u0930\u0915\u094D\u0937\u093E \u0915\u0930\u0924\u093E \u0939\u0948\u0964", + "partners.aegis.role": "\u0930\u0923\u0928\u0940\u0924\u093F\u0915 \u0928\u093F\u0935\u0947\u0936\u0915", + "partners.furilabs.desc": "\u0928\u093F\u091C\u0924\u093E \u0915\u094B \u092A\u0939\u0932\u0947 \u0930\u0916\u0928\u0947 \u0935\u093E\u0932\u0947 \u0932\u093F\u0928\u0915\u094D\u0938 \u092B\u093C\u094B\u0928, \u091C\u093F\u0928\u092E\u0947\u0902 SecureBit \u0921\u093F\u092B\u093C\u0949\u0932\u094D\u091F \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091A\u0948\u0928\u0932 \u0915\u0947 \u0930\u0942\u092A \u092E\u0947\u0902 \u0906\u0924\u093E \u0939\u0948\u0964", + "partners.furilabs.role": "\u092A\u094D\u0930\u094C\u0926\u094D\u092F\u094B\u0917\u093F\u0915\u0940 \u0938\u093E\u091D\u0947\u0926\u093E\u0930", + "partners.inviteTitle": "\u0938\u093E\u091D\u0947\u0926\u093E\u0930 \u092C\u0928\u0947\u0902", + "partners.inviteDesc": "\u0915\u094D\u092F\u093E \u0906\u092A \u0928\u093F\u091C\u0924\u093E \u0915\u0947 \u0932\u093F\u090F \u0939\u093E\u0930\u094D\u0921\u0935\u0947\u092F\u0930 \u092F\u093E \u092C\u0941\u0928\u093F\u092F\u093E\u0926\u0940 \u0922\u093E\u0901\u091A\u093E \u092C\u0928\u093E \u0930\u0939\u0947 \u0939\u0948\u0902? \u0906\u0907\u090F SecureBit \u091C\u094B\u0921\u093C\u0947\u0902\u0964", + "partners.inviteCta": "\u092C\u093E\u0924\u091A\u0940\u0924 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", + "roadmap.eyebrow": "\u0935\u093F\u0915\u093E\u0938 \u0915\u0940 \u0930\u0942\u092A\u0930\u0947\u0916\u093E", + "roadmap.heading": "SecureBit \u0915\u093E \u0938\u092B\u093C\u0930", + "roadmap.subheading": "\u092A\u0939\u0932\u0947 \u092A\u094D\u0930\u094B\u091F\u094B\u091F\u093E\u0907\u092A \u0938\u0947 \u0932\u0947\u0915\u0930 \u0915\u094D\u0935\u093E\u0902\u091F\u092E-\u092A\u094D\u0930\u0924\u093F\u0930\u094B\u0927\u0940, \u0935\u093F\u0915\u0947\u0902\u0926\u094D\u0930\u093F\u0924 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0924\u0915 - \u0939\u0930 \u092A\u0930\u0924 \u092A\u0930 \u092A\u0942\u0930\u0940 ASN.1 \u091C\u093E\u0901\u091A \u0915\u0947 \u0938\u093E\u0925\u0964", + "roadmap.progress": "{total} \u092E\u0947\u0902 \u0938\u0947 {shipped} \u092A\u0921\u093C\u093E\u0935 \u092A\u0942\u0930\u0947", + "roadmap.upcoming": "{upcoming} \u092C\u093E\u0915\u093C\u0940", + "roadmap.keyFeatures": "\u092E\u0941\u0916\u094D\u092F \u0935\u093F\u0936\u0947\u0937\u0924\u093E\u090F\u0901", + "roadmap.status.released": "\u091C\u093E\u0930\u0940", + "roadmap.status.current": "\u0905\u092D\u0940 \u091A\u093E\u0932\u0942", + "roadmap.status.dev": "\u0935\u093F\u0915\u093E\u0938 \u092E\u0947\u0902", + "roadmap.status.planned": "\u0928\u093F\u092F\u094B\u091C\u093F\u0924", + "roadmap.status.research": "\u0936\u094B\u0927", + "hero.headlineTop": "\u090F\u0915 \u0938\u0940\u0927\u0940 \u0932\u093E\u0907\u0928,", + "hero.headlineBottom": "\u091C\u093F\u0938\u0947 \u0938\u093F\u0930\u094D\u092B\u093C \u0906\u092A \u0926\u094B\u0928\u094B\u0902 \u092A\u0922\u093C \u0938\u0915\u0947\u0902\u0964", + "hero.subheading": "\u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u0906\u092A\u0915\u0947 \u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u092C\u0928\u0924\u0940 \u0939\u0948\u0902 \u0914\u0930 \u0938\u0940\u0927\u0947 \u0926\u094B\u0928\u094B\u0902 \u092A\u0915\u094D\u0937\u094B\u0902 \u0915\u0947 \u092C\u0940\u091A \u092C\u0926\u0932\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964 \u0928 \u0915\u094B\u0908 \u0916\u093E\u0924\u093E, \u0928 \u0915\u094B\u0908 \u0938\u0930\u094D\u0935\u0930 \u091C\u094B \u0906\u092A\u0915\u0947 \u0938\u0902\u0926\u0947\u0936 \u0930\u0916\u0947\u0964", + "hero.diagramAlt": "\u090F\u0915 \u0938\u093E\u0925\u0940 \u0924\u0915 \u0938\u0940\u0927\u0940 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0932\u093E\u0907\u0928, \u091C\u093F\u0938\u092E\u0947\u0902 \u0906\u0917\u0947 \u0926\u094B \u0914\u0930 \u0932\u094B\u0917 \u091C\u0941\u0921\u093C\u0924\u0947 \u0939\u0948\u0902", + "intro.createTitle": "\u0928\u092F\u093E \u091A\u0948\u0928\u0932 \u092C\u0928\u093E\u090F\u0901", + "intro.createDesc": "\u0906\u092A\u0915\u093E \u0909\u092A\u0915\u0930\u0923 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u0914\u0930 \u090F\u0915 \u092C\u093E\u0930 \u0915\u093E\u092E \u0906\u0928\u0947 \u0935\u093E\u0932\u093E \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u092C\u0928\u093E\u0924\u093E \u0939\u0948\u0964 \u0907\u0928\u092E\u0947\u0902 \u0938\u0947 \u0915\u0941\u091B \u092D\u0940 \u0915\u093F\u0938\u0940 \u0938\u0930\u094D\u0935\u0930 \u0924\u0915 \u0928\u0939\u0940\u0902 \u091C\u093E\u0924\u093E\u0964", + "intro.createCta": "\u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u0914\u0930 \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u092C\u0928\u093E\u090F\u0901", + "intro.joinTitle": "\u091A\u0948\u0928\u0932 \u092E\u0947\u0902 \u0936\u093E\u092E\u093F\u0932 \u0939\u094B\u0902", + "intro.scanTitle": "\u0915\u0948\u092E\u0930\u0947 \u0938\u0947 QR \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902", + "intro.scanSubtitle": "\u0938\u092C\u0938\u0947 \u0924\u0947\u091C\u093C - \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u0940 \u0938\u094D\u0915\u094D\u0930\u0940\u0928 \u092A\u0930 \u0915\u0948\u092E\u0930\u093E \u0930\u0916\u0947\u0902", + "intro.orPasteCode": "\u092F\u093E \u0915\u094B\u0921 \u091A\u093F\u092A\u0915\u093E\u090F\u0901", + "intro.pastePlaceholder": "\u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0915\u094B\u0921 \u092F\u0939\u093E\u0901 \u091A\u093F\u092A\u0915\u093E\u090F\u0901\u2026", + "intro.connect": "\u091C\u094B\u0921\u093C\u0947\u0902", + "intro.connecting": "\u092A\u094D\u0930\u0915\u094D\u0930\u093F\u092F\u093E \u091C\u093E\u0930\u0940\u2026", + "roadmap.r1.title": "\u0935\u093F\u0915\u093E\u0938 \u0915\u0940 \u0936\u0941\u0930\u0941\u0906\u0924", + "roadmap.r1.sub": "\u0935\u093F\u091A\u093E\u0930, \u092A\u094D\u0930\u094B\u091F\u094B\u091F\u093E\u0907\u092A \u0914\u0930 \u092C\u0941\u0928\u093F\u092F\u093E\u0926\u0940 \u0922\u093E\u0901\u091A\u093E", + "roadmap.r1.date": "2025 \u0915\u0940 \u0936\u0941\u0930\u0941\u0906\u0924", + "roadmap.r1.features": [ + "\u0905\u0935\u0927\u093E\u0930\u0923\u093E \u0914\u0930 \u0906\u0935\u0936\u094D\u092F\u0915\u0924\u093E\u090F\u0901 \u0924\u092F \u0939\u0941\u0908\u0902", + "\u0924\u0915\u0928\u0940\u0915\u0940 \u091A\u092F\u0928: WebRTC, P2P, \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u0940", + "\u0938\u0902\u0926\u0947\u0936 \u092D\u0947\u091C\u0928\u0947 \u0915\u0947 \u092A\u0939\u0932\u0947 \u092A\u094D\u0930\u094B\u091F\u094B\u091F\u093E\u0907\u092A", + "\u0930\u093F\u092A\u0949\u091C\u093C\u093F\u091F\u0930\u0940 \u0914\u0930 CI \u0915\u0940 \u0938\u094D\u0925\u093E\u092A\u0928\u093E", + "\u092C\u0941\u0928\u093F\u092F\u093E\u0926\u0940 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u0922\u093E\u0901\u091A\u093E", + "UX/UI \u0921\u093F\u091C\u093C\u093E\u0907\u0928" + ], + "roadmap.r2.title": "\u0905\u0932\u094D\u092B\u093C\u093E \u0930\u093F\u0932\u0940\u091C\u093C", + "roadmap.r2.sub": "\u092A\u0939\u0932\u093E \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0905\u0932\u094D\u092B\u093C\u093E: \u092C\u0941\u0928\u093F\u092F\u093E\u0926\u0940 \u091A\u0948\u091F \u0914\u0930 \u0915\u0941\u0902\u091C\u0940 \u0935\u093F\u0928\u093F\u092E\u092F", + "roadmap.r2.date": "\u0935\u0938\u0902\u0924 2025", + "roadmap.r2.features": [ + "WebRTC \u092A\u0930 \u092C\u0941\u0928\u093F\u092F\u093E\u0926\u0940 P2P \u0938\u0902\u0926\u0947\u0936", + "\u0938\u0930\u0932 \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 (\u092A\u094D\u0930\u0926\u0930\u094D\u0936\u0928 \u092F\u094B\u091C\u0928\u093E)", + "\u0938\u094D\u0925\u093F\u0930 \u0938\u093F\u0917\u094D\u0928\u0932\u093F\u0902\u0917 \u0914\u0930 \u092A\u0941\u0928\u0903 \u091C\u0941\u0921\u093C\u093E\u0935", + "\u092A\u0930\u0940\u0915\u094D\u0937\u0923 \u0915\u0947 \u0932\u093F\u090F \u0928\u094D\u092F\u0942\u0928\u0924\u092E \u0907\u0902\u091F\u0930\u092B\u093C\u0947\u0938", + "\u0936\u0941\u0930\u0941\u0906\u0924\u0940 \u092A\u0930\u0940\u0915\u094D\u0937\u0915\u094B\u0902 \u0938\u0947 \u092A\u094D\u0930\u0924\u093F\u0915\u094D\u0930\u093F\u092F\u093E" + ], + "roadmap.r3.title": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u092E\u091C\u093C\u092C\u0942\u0924 \u0939\u0941\u0908", + "roadmap.r3.sub": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u094B \u0915\u0938\u093E \u0917\u092F\u093E \u0914\u0930 \u0938\u094D\u0925\u093F\u0930 \u0936\u093E\u0916\u093E \u091C\u093E\u0930\u0940 \u0939\u0941\u0908", + "roadmap.r3.date": "\u0917\u0930\u094D\u092E\u0940 2025", + "roadmap.r3.features": [ + "ECDH/ECDSA \u0915\u093E \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u0909\u092A\u092F\u094B\u0917", + "\u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E \u0914\u0930 \u0915\u0941\u0902\u091C\u0940 \u092C\u0926\u0932\u093E\u0935", + "\u092C\u0947\u0939\u0924\u0930 \u092A\u094D\u0930\u092E\u093E\u0923\u0940\u0915\u0930\u0923 \u091C\u093E\u0901\u091A", + "\u092B\u093C\u093E\u0907\u0932 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u0914\u0930 \u092C\u0921\u093C\u0947 \u0921\u0947\u091F\u093E \u0915\u093E \u0938\u094D\u0925\u093E\u0928\u093E\u0902\u0924\u0930\u0923", + "\u092C\u0941\u0928\u093F\u092F\u093E\u0926\u0940 \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B \u092A\u094D\u0930\u0915\u094D\u0930\u093F\u092F\u093E\u0913\u0902 \u0915\u093E \u0911\u0921\u093F\u091F" + ], + "roadmap.r4.title": "\u0935\u093F\u0938\u094D\u0924\u093E\u0930 \u0914\u0930 \u0938\u094D\u0925\u093F\u0930\u0924\u093E", + "roadmap.r4.sub": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0915\u093E \u0935\u093F\u0938\u094D\u0924\u093E\u0930 \u0914\u0930 \u0938\u094D\u0925\u093F\u0930\u0924\u093E \u092E\u0947\u0902 \u0938\u0941\u0927\u093E\u0930", + "roadmap.r4.date": "\u092A\u0924\u091D\u0921\u093C 2025", + "roadmap.r4.features": [ + "P2P \u091C\u0941\u0921\u093C\u093E\u0935 \u0914\u0930 NAT \u092A\u093E\u0930 \u0915\u0930\u0928\u0947 \u0915\u093E \u0905\u0928\u0941\u0915\u0942\u0932\u0928", + "\u092A\u0941\u0928\u0903 \u091C\u0941\u0921\u093C\u093E\u0935 \u0915\u0940 \u0935\u094D\u092F\u0935\u0938\u094D\u0925\u093E \u0914\u0930 \u0938\u0902\u0926\u0947\u0936 \u0915\u0924\u093E\u0930\u0947\u0902", + "\u092E\u094B\u092C\u093E\u0907\u0932 \u092A\u0930 \u0915\u092E \u092C\u0948\u091F\u0930\u0940 \u0916\u092A\u0924", + "\u0915\u0908 \u0909\u092A\u0915\u0930\u0923\u094B\u0902 \u0915\u0947 \u092C\u0940\u091A \u0924\u093E\u0932\u092E\u0947\u0932", + "\u0921\u0947\u0935\u0932\u092A\u0930\u094D\u0938 \u0915\u0947 \u0932\u093F\u090F \u0928\u093F\u0917\u0930\u093E\u0928\u0940 \u0914\u0930 \u0932\u0949\u0917\u093F\u0902\u0917 \u0909\u092A\u0915\u0930\u0923" + ], + "roadmap.r5.title": "\u0928\u093F\u091C\u0924\u093E \u0938\u092C\u0938\u0947 \u092A\u0939\u0932\u0947", + "roadmap.r5.sub": "\u0927\u094D\u092F\u093E\u0928 \u0928\u093F\u091C\u0924\u093E \u092A\u0930: \u092E\u0947\u091F\u093E\u0921\u0947\u091F\u093E \u0918\u091F\u093E\u0928\u093E", + "roadmap.r5.date": "\u0938\u0930\u094D\u0926\u0940 2025", + "roadmap.r5.features": [ + "\u092E\u0947\u091F\u093E\u0921\u0947\u091F\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0914\u0930 \u092A\u0939\u091A\u093E\u0928-\u091A\u093F\u0939\u094D\u0928 \u092E\u0947\u0902 \u0915\u092E\u0940", + "\u0911\u0928\u093F\u092F\u0928 \u0930\u0942\u091F\u093F\u0902\u0917 \u0914\u0930 DHT \u0915\u0947 \u092A\u094D\u0930\u092F\u094B\u0917", + "\u0917\u0941\u092E\u0928\u093E\u092E \u091C\u0941\u0921\u093C\u093E\u0935 \u0915\u0947 \u0935\u093F\u0915\u0932\u094D\u092A", + "\u0916\u0941\u0932\u0947 \u0915\u094B\u0921 \u0911\u0921\u093F\u091F \u0915\u0940 \u0924\u0948\u092F\u093E\u0930\u0940", + "\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u092E\u0947\u0902 \u0938\u0941\u0927\u093E\u0930" + ], + "roadmap.r6.title": "Enhanced Security Edition", + "roadmap.r6.sub": "\u092A\u0942\u0930\u0940 ASN.1 \u091C\u093E\u0901\u091A \u0915\u0947 \u0938\u093E\u0925 18 \u092A\u0930\u0924\u094B\u0902 \u0935\u093E\u0932\u0940 \u0938\u0948\u0928\u094D\u092F \u0938\u094D\u0924\u0930 \u0915\u0940 \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u0940", + "roadmap.r6.date": "2025 \u0915\u093E \u0905\u0902\u0924", + "roadmap.r6.features": [ + "\u0924\u093F\u0939\u0930\u0940 \u0938\u0941\u0930\u0915\u094D\u0937\u093E: ECDH + DTLS + SAS", + "ECDH P-384 \u0914\u0930 AES-GCM 256-\u092C\u093F\u091F \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928", + "DTLS \u092B\u093C\u093F\u0902\u0917\u0930\u092A\u094D\u0930\u093F\u0902\u091F \u0915\u0940 \u091C\u093E\u0901\u091A", + "SAS (\u0932\u0918\u0941 \u092A\u094D\u0930\u092E\u093E\u0923\u0940\u0915\u0930\u0923 \u0938\u094D\u091F\u094D\u0930\u093F\u0902\u0917) \u0938\u0924\u094D\u092F\u093E\u092A\u0928", + "\u0915\u0941\u0902\u091C\u0940 \u092C\u0926\u0932\u093E\u0935 \u0915\u0947 \u0938\u093E\u0925 \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "\u092C\u0940\u091A \u092E\u0947\u0902 \u092C\u0948\u0920\u0947 \u0939\u092E\u0932\u093E\u0935\u0930 \u0938\u0947 \u092E\u091C\u093C\u092C\u0942\u0924 \u092C\u091A\u093E\u0935", + "\u092A\u0942\u0930\u0940 ASN.1 DER \u091C\u093E\u0901\u091A", + "OID \u0914\u0930 EC \u092C\u093F\u0902\u0926\u0941\u0913\u0902 \u0915\u0940 \u091C\u093E\u0901\u091A", + "SPKI \u0938\u0902\u0930\u091A\u0928\u093E \u0915\u0940 \u091C\u093E\u0901\u091A", + "P2P WebRTC \u0922\u093E\u0901\u091A\u093E", + "\u092E\u0947\u091F\u093E\u0921\u0947\u091F\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093E", + "100% \u0916\u0941\u0932\u093E \u0938\u094D\u0930\u094B\u0924 \u0915\u094B\u0921" + ], + "roadmap.r7.title": "Desktop Edition", + "roadmap.r7.sub": "Windows, macOS \u0914\u0930 Linux \u0915\u0947 \u0932\u093F\u090F \u092E\u0942\u0932 \u0921\u0947\u0938\u094D\u0915\u091F\u0949\u092A \u0910\u092A", + "roadmap.r7.date": "2026 \u0915\u0940 \u0936\u0941\u0930\u0941\u0906\u0924", + "roadmap.r7.features": [ + "Windows \u0921\u0947\u0938\u094D\u0915\u091F\u0949\u092A \u0910\u092A (Tauri v2)", + "macOS \u0921\u0947\u0938\u094D\u0915\u091F\u0949\u092A \u0910\u092A (Tauri v2)", + "Linux AppImage (Tauri v2)", + "\u0924\u0924\u094D\u0915\u093E\u0932 \u0938\u0942\u091A\u0928\u093E\u090F\u0901", + "\u0938\u094D\u0935\u0924\u0903 \u092A\u0941\u0928\u0903 \u091C\u0941\u0921\u093C\u093E\u0935", + "\u0909\u092A\u0915\u0930\u0923\u094B\u0902 \u0915\u0947 \u092C\u0940\u091A \u0924\u093E\u0932\u092E\u0947\u0932", + "\u092C\u0947\u0939\u0924\u0930 \u0907\u0902\u091F\u0930\u092B\u093C\u0947\u0938", + "100 MB \u0924\u0915 \u0915\u0940 \u092B\u093C\u093E\u0907\u0932\u0947\u0902" + ], + "roadmap.r8.title": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0906\u0935\u093E\u091C\u093C \u0914\u0930 \u0915\u0949\u0932", + "roadmap.r8.sub": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0935\u0949\u0907\u0938 \u0938\u0902\u0926\u0947\u0936, \u0911\u0921\u093F\u092F\u094B \u0914\u0930 \u0935\u0940\u0921\u093F\u092F\u094B \u0915\u0949\u0932", + "roadmap.r8.date": "2026 \u0915\u0940 \u0936\u0941\u0930\u0941\u0906\u0924", + "roadmap.r8.features": [ + "\u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0935\u0949\u0907\u0938 \u0938\u0902\u0926\u0947\u0936", + "\u0906\u092E\u0928\u0947-\u0938\u093E\u092E\u0928\u0947 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0911\u0921\u093F\u092F\u094B \u0915\u0949\u0932 (WebRTC)", + "\u0906\u092E\u0928\u0947-\u0938\u093E\u092E\u0928\u0947 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0935\u0940\u0921\u093F\u092F\u094B \u0915\u0949\u0932 (WebRTC)", + "\u0932\u093E\u0907\u0935 \u092E\u0940\u0921\u093F\u092F\u093E \u0915\u0947 \u0932\u093F\u090F \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "SRTP/DTLS \u0938\u0947 \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u092E\u0940\u0921\u093F\u092F\u093E \u0927\u093E\u0930\u093E\u090F\u0901", + "\u0915\u0949\u0932 \u0915\u0947 \u0926\u094C\u0930\u093E\u0928 SAS \u0938\u0924\u094D\u092F\u093E\u092A\u0928", + "\u0915\u0949\u0932 \u0938\u0942\u091A\u0928\u093E\u090F\u0901 \u0914\u0930 \u0938\u094D\u0935\u0924\u0903 \u092A\u0941\u0928\u0903 \u091C\u0941\u0921\u093C\u093E\u0935", + "\u0915\u092E \u0935\u093F\u0932\u0902\u092C \u0935\u093E\u0932\u093E P2P \u092E\u0940\u0921\u093F\u092F\u093E" + ], + "roadmap.r9.title": "\u0938\u092E\u0942\u0939 \u0938\u0902\u0935\u093E\u0926", + "roadmap.r9.sub": "\u0928\u093F\u091C\u0924\u093E \u092C\u0928\u093E\u090F \u0930\u0916\u0924\u0947 \u0939\u0941\u090F \u0938\u092E\u0942\u0939 \u091A\u0948\u091F", + "roadmap.r9.date": "\u0905\u092D\u0940", + "roadmap.r9.features": [ + "8 \u0932\u094B\u0917\u094B\u0902 \u0924\u0915 P2P \u0938\u092E\u0942\u0939 \u091A\u0948\u091F", + "\u092E\u0947\u0936 \u0935\u093F\u0924\u0930\u0923, \u0914\u0930 \u0935\u093F\u0915\u0932\u094D\u092A \u092E\u0947\u0902 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930\u093F\u0924 \u0930\u093F\u0932\u0947", + "\u090F\u0915 \u0939\u0940 \u0938\u092E\u0942\u0939 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u094B\u0921, \u091C\u093F\u0938\u0947 \u0938\u092C \u092E\u093F\u0932\u093E\u0924\u0947 \u0939\u0948\u0902", + "\u0915\u094B\u0921 \u0905\u0928\u0941\u092E\u093E\u0928 \u0932\u0917\u093E\u0928\u0947 \u0938\u0947 \u092C\u091A\u093E\u0935 \u0915\u0947 \u0932\u093F\u090F \u092A\u0939\u0932\u0947 \u0935\u091A\u0928, \u092B\u093F\u0930 \u092A\u094D\u0930\u0915\u091F\u0940\u0915\u0930\u0923", + "\u0938\u092E\u0942\u0939 \u0915\u0940 \u0905\u092A\u0928\u0940 \u092A\u0939\u091A\u093E\u0928 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901, \u092C\u0928\u093E\u0935\u091F \u0938\u0947 \u0939\u0940 \u0915\u094D\u0937\u0923\u093F\u0915", + "\u092F\u0941\u0917-\u0915\u094D\u0930\u092E \u0915\u0947 \u0938\u093E\u0925 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930\u093F\u0924 \u0938\u0926\u0938\u094D\u092F \u0938\u0942\u091A\u0940", + "\u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930\u093F\u0924 \u0938\u0902\u0926\u0947\u0936, \u0924\u093E\u0915\u093F \u0905\u0932\u0917-\u0905\u0932\u0917 \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0938\u093F\u0926\u094D\u0927 \u0915\u093F\u092F\u093E \u091C\u093E \u0938\u0915\u0947", + "\u0928 \u0938\u0930\u094D\u0935\u0930, \u0928 \u0938\u093E\u091D\u093E \u0938\u092E\u0942\u0939 \u0915\u0941\u0902\u091C\u0940, \u0928 \u0907\u0924\u093F\u0939\u093E\u0938" + ], + "roadmap.r10.title": "Mobile Edition", + "roadmap.r10.sub": "iOS \u0914\u0930 Android \u0915\u0947 \u0932\u093F\u090F \u092E\u0942\u0932 \u092E\u094B\u092C\u093E\u0907\u0932 \u0910\u092A", + "roadmap.r10.date": "2027 \u0915\u0940 \u0926\u0942\u0938\u0930\u0940 \u0924\u093F\u092E\u093E\u0939\u0940", + "roadmap.r10.features": [ + "iOS \u092E\u0942\u0932 \u0910\u092A (Swift/SwiftUI)", + "Android \u092E\u0942\u0932 \u0910\u092A (Kotlin/Jetpack Compose)", + "\u092E\u094B\u092C\u093E\u0907\u0932 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 PWA \u0938\u092E\u0930\u094D\u0925\u0928", + "\u0924\u0924\u094D\u0915\u093E\u0932 \u092A\u0941\u0936 \u0938\u0942\u091A\u0928\u093E\u090F\u0901", + "\u092C\u0948\u091F\u0930\u0940 \u0905\u0928\u0941\u0915\u0942\u0932\u0928", + "\u092E\u094B\u092C\u093E\u0907\u0932 \u0915\u0947 \u0932\u093F\u090F \u092C\u0928\u093E \u0907\u0902\u091F\u0930\u092B\u093C\u0947\u0938", + "\u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u0938\u0902\u0926\u0947\u0936 \u0915\u0924\u093E\u0930", + "\u092C\u093E\u092F\u094B\u092E\u0947\u091F\u094D\u0930\u093F\u0915 \u092A\u094D\u0930\u092E\u093E\u0923\u0940\u0915\u0930\u0923" + ], + "roadmap.r11.title": "\u0915\u094D\u0935\u093E\u0902\u091F\u092E-\u092A\u094D\u0930\u0924\u093F\u0930\u094B\u0927\u0940 \u0938\u0902\u0938\u094D\u0915\u0930\u0923", + "roadmap.r11.sub": "\u0915\u094D\u0935\u093E\u0902\u091F\u092E \u0915\u0902\u092A\u094D\u092F\u0942\u091F\u0930\u094B\u0902 \u0938\u0947 \u092C\u091A\u093E\u0935", + "roadmap.r11.date": "2027 \u0915\u0940 \u091A\u094C\u0925\u0940 \u0924\u093F\u092E\u093E\u0939\u0940", + "roadmap.r11.features": [ + "\u092A\u094B\u0938\u094D\u091F-\u0915\u094D\u0935\u093E\u0902\u091F\u092E \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u0940 CRYSTALS-Kyber", + "SPHINCS+ \u0921\u093F\u091C\u093F\u091F\u0932 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930", + "\u092E\u093F\u0936\u094D\u0930\u093F\u0924 \u092F\u094B\u091C\u0928\u093E: \u092A\u093E\u0930\u0902\u092A\u0930\u093F\u0915 \u0914\u0930 \u092A\u094B\u0938\u094D\u091F-\u0915\u094D\u0935\u093E\u0902\u091F\u092E", + "\u0915\u094D\u0935\u093E\u0902\u091F\u092E-\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0915\u0941\u0902\u091C\u0940 \u0935\u093F\u0928\u093F\u092E\u092F", + "\u0905\u0926\u094D\u092F\u0924\u0928 \u0939\u0948\u0936\u093F\u0902\u0917 \u090F\u0932\u094D\u0917\u094B\u0930\u093F\u0926\u092E", + "\u092E\u094C\u091C\u0942\u0926\u093E \u0938\u0924\u094D\u0930\u094B\u0902 \u0915\u093E \u0938\u094D\u0925\u093E\u0928\u093E\u0902\u0924\u0930\u0923", + "v5.x \u0915\u0947 \u0938\u093E\u0925 \u0938\u0902\u0917\u0924\u0924\u093E", + "\u0915\u094D\u0935\u093E\u0902\u091F\u092E-\u092A\u094D\u0930\u0924\u093F\u0930\u094B\u0927\u0940 \u092A\u094D\u0930\u094B\u091F\u094B\u0915\u0949\u0932" + ], + "roadmap.r12.title": "\u0935\u093F\u0915\u0947\u0902\u0926\u094D\u0930\u093F\u0924 \u0928\u0947\u091F\u0935\u0930\u094D\u0915", + "roadmap.r12.sub": "\u092A\u0942\u0930\u0940 \u0924\u0930\u0939 \u0935\u093F\u0915\u0947\u0902\u0926\u094D\u0930\u093F\u0924 \u0928\u0947\u091F\u0935\u0930\u094D\u0915", + "roadmap.r12.date": "2028", + "roadmap.r12.features": [ + "\u0928\u094B\u0921\u094D\u0938 \u0915\u093E \u092E\u0947\u0936 \u0928\u0947\u091F\u0935\u0930\u094D\u0915", + "\u0938\u093E\u0925\u0940 \u0916\u094B\u091C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F DHT", + "\u0905\u0902\u0924\u0930\u094D\u0928\u093F\u0939\u093F\u0924 \u0911\u0928\u093F\u092F\u0928 \u0930\u0942\u091F\u093F\u0902\u0917", + "\u091F\u094B\u0915\u0928\u0949\u092E\u093F\u0915\u094D\u0938 \u0914\u0930 \u0928\u094B\u0921 \u092A\u094D\u0930\u094B\u0924\u094D\u0938\u093E\u0939\u0928", + "DAO \u0915\u0947 \u091C\u093C\u0930\u093F\u090F \u0938\u0902\u091A\u093E\u0932\u0928", + "\u0905\u0928\u094D\u092F \u0928\u0947\u091F\u0935\u0930\u094D\u0915\u094B\u0902 \u0915\u0947 \u0938\u093E\u0925 \u0905\u0902\u0924\u0930-\u0938\u0902\u091A\u093E\u0932\u0928", + "\u092E\u0902\u091A\u094B\u0902 \u0915\u0947 \u092C\u0940\u091A \u0938\u0902\u0917\u0924\u0924\u093E", + "\u0938\u094D\u0935\u092F\u0902 \u0920\u0940\u0915 \u0939\u094B\u0928\u0947 \u0935\u093E\u0932\u093E \u0928\u0947\u091F\u0935\u0930\u094D\u0915" + ], + "roadmap.r13.title": "AI \u0928\u093F\u091C\u0924\u093E \u0938\u0939\u093E\u092F\u0915", + "roadmap.r13.sub": "\u0928\u093F\u091C\u0924\u093E \u0914\u0930 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u0947 \u0932\u093F\u090F \u0915\u0943\u0924\u094D\u0930\u093F\u092E \u092C\u0941\u0926\u094D\u0927\u093F\u092E\u0924\u094D\u0924\u093E", + "roadmap.r13.date": "2028 \u0915\u0947 \u092C\u093E\u0926", + "roadmap.r13.features": [ + "\u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u0939\u0940 AI \u0938\u0947 \u0916\u093C\u0924\u0930\u0947 \u0915\u093E \u0935\u093F\u0936\u094D\u0932\u0947\u0937\u0923", + "\u092C\u0940\u091A \u092E\u0947\u0902 \u092C\u0948\u0920\u0947 \u0939\u092E\u0932\u093E\u0935\u0930 \u0915\u0940 \u0938\u094D\u0935\u0924\u0903 \u092A\u0939\u091A\u093E\u0928", + "\u0905\u0928\u0941\u0915\u0942\u0932\u0940 \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u0940", + "\u0906\u092A\u0915\u0947 \u0905\u0928\u0941\u0930\u0942\u092A \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0941\u091D\u093E\u0935", + "\u0936\u0942\u0928\u094D\u092F-\u091C\u094D\u091E\u093E\u0928 \u092E\u0936\u0940\u0928 \u0932\u0930\u094D\u0928\u093F\u0902\u0917", + "\u0928\u093F\u091C\u0940 AI \u0938\u0939\u093E\u092F\u0915", + "\u092A\u0942\u0930\u094D\u0935\u093E\u0928\u0941\u092E\u093E\u0928 \u0906\u0927\u093E\u0930\u093F\u0924 \u0938\u0941\u0930\u0915\u094D\u0937\u093E", + "\u0939\u092E\u0932\u094B\u0902 \u0938\u0947 \u0938\u094D\u0935\u093E\u092F\u0924\u094D\u0924 \u092C\u091A\u093E\u0935" + ], + "handshake.step1": "ECDH P-384 \u0915\u0941\u0902\u091C\u0940 \u092F\u0941\u0917\u094D\u092E \u092C\u0928 \u0930\u0939\u093E \u0939\u0948", + "handshake.step2": "\u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u0915\u094B\u0921 \u0928\u093F\u0915\u093E\u0932\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948", + "handshake.step3": "\u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E \u0924\u092F \u0915\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948", + "handshake.securingTitle": "\u0906\u092A\u0915\u093E \u091A\u0948\u0928\u0932 \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0915\u093F\u092F\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948", + "handshake.answerTitle": "\u0906\u092A\u0915\u093E \u0909\u0924\u094D\u0924\u0930 \u092C\u0928\u093E\u092F\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948", + "handshake.securingDesc": "\u0910\u0938\u0940 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u0917\u0922\u093C\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948\u0902 \u091C\u094B \u091B\u0947\u0921\u093C\u091B\u093E\u0921\u093C \u091D\u0947\u0932 \u0938\u0915\u0947\u0902\u0964", + "handshake.shareTitle": "\u0905\u092A\u0928\u093E \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0938\u093E\u091D\u093E \u0915\u0930\u0947\u0902", + "handshake.sendAnswerTitle": "\u0905\u092A\u0928\u093E \u0909\u0924\u094D\u0924\u0930 \u0935\u093E\u092A\u0938 \u092D\u0947\u091C\u0947\u0902", + "handshake.shareDesc": "QR \u0926\u093F\u0916\u093E\u0907\u090F \u092F\u093E \u0915\u094B\u0921 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u092D\u0947\u091C\u093F\u090F\u0964 \u092F\u0939 \u090F\u0915 \u0939\u0940 \u092C\u093E\u0930 \u0915\u093E\u092E \u0906\u0924\u093E \u0939\u0948 \u0914\u0930 \u091C\u0932\u094D\u0926\u0940 \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B \u091C\u093E\u0924\u093E \u0939\u0948\u0964", + "handshake.sendAnswerDesc": "\u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u0909\u0938 \u0935\u094D\u092F\u0915\u094D\u0924\u093F \u0915\u094B \u0926\u0940\u091C\u093F\u090F \u091C\u093F\u0938\u0928\u0947 \u091A\u0948\u0928\u0932 \u092C\u0928\u093E\u092F\u093E, \u0924\u093E\u0915\u093F \u0935\u0939 \u0939\u093E\u0925 \u092E\u093F\u0932\u093E\u0928\u093E \u092A\u0942\u0930\u093E \u0915\u0930 \u0938\u0915\u0947\u0964", + "handshake.establish": "\u091C\u0941\u0921\u093C\u093E\u0935 \u092C\u0928\u093E\u090F\u0901", + "handshake.thenReceive": "\u092B\u093F\u0930 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u093E \u092D\u0947\u091C\u093E \u0909\u0924\u094D\u0924\u0930 \u0932\u0940\u091C\u093F\u090F", + "handshake.pasteAnswerPlaceholder": "\u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u093E \u0909\u0924\u094D\u0924\u0930 \u0915\u094B\u0921 \u091A\u093F\u092A\u0915\u093E\u090F\u0901\u2026", + "handshake.answerSentNote": "\u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u091A\u0948\u0928\u0932 \u092C\u0928\u093E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u092D\u0947\u091C\u093F\u090F \u0914\u0930 \u0930\u0941\u0915\u093F\u090F - \u091C\u0948\u0938\u0947 \u0939\u0940 \u0935\u0947 \u091C\u0941\u0921\u093C\u0947\u0902\u0917\u0947, \u091A\u0948\u091F \u0916\u0941\u0932 \u091C\u093E\u090F\u0917\u0940\u0964", + "handshake.qrHint": "\u091C\u092C \u0924\u0915 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u093E \u0915\u094B\u0921 \u092A\u0922\u093C \u0928 \u0932\u0947, \u0907\u0938\u0947 \u0916\u0941\u0932\u093E \u0930\u0916\u093F\u090F\u0964", + "handshake.qrHintFrames": "\u0939\u093E\u0925 \u092E\u093F\u0932\u093E\u0928\u093E {frames} \u092B\u093C\u094D\u0930\u0947\u092E\u094B\u0902 \u092E\u0947\u0902 \u092C\u0901\u091F\u093E \u0939\u0948 - \u091C\u092C \u0924\u0915 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u093E \u0938\u092C \u092A\u0922\u093C \u0928 \u0932\u0947, \u0907\u0938\u0947 \u0916\u0941\u0932\u093E \u0930\u0916\u093F\u090F\u0964", + "verify.title": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0924\u094D\u092F\u093E\u092A\u0928", + "verify.desc": "\u0907\u0938 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u094B\u0921 \u0915\u094B \u0915\u093F\u0938\u0940 \u0926\u0942\u0938\u0930\u0947 \u0930\u093E\u0938\u094D\u0924\u0947 \u0938\u0947 (\u0906\u0935\u093E\u091C\u093C \u092A\u0930 \u092F\u093E \u0906\u092E\u0928\u0947-\u0938\u093E\u092E\u0928\u0947) \u092E\u093F\u0932\u093E\u0907\u090F, \u092B\u093F\u0930 \u0909\u0938\u0947 \u0932\u093F\u0916\u0915\u0930 \u091A\u0948\u091F \u0916\u094B\u0932\u093F\u090F\u0964", + "verify.enterLabel": "\u092E\u093F\u0932\u093E\u092F\u093E \u0939\u0941\u0906 \u0915\u094B\u0921 \u0932\u093F\u0916\u0947\u0902", + "verify.placeholder": "\u0915\u094B\u0921 \u092F\u0939\u093E\u0901 \u0932\u093F\u0916\u0947\u0902", + "verify.confirm": "\u0915\u094B\u0921 \u092A\u0915\u094D\u0915\u093E \u0915\u0930\u0947\u0902", + "verify.confirmed": "\u092A\u0915\u094D\u0915\u093E \u0939\u0941\u0906", + "verify.mismatch": "\u092E\u0947\u0932 \u0928\u0939\u0940\u0902 \u0916\u093E\u0924\u093E", + "verify.yours": "\u0906\u092A\u0915\u0940 \u092A\u0941\u0937\u094D\u091F\u093F", + "verify.peer": "\u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u0940 \u092A\u0941\u0937\u094D\u091F\u093F", + "verify.pending": "\u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u092E\u0947\u0902", + "verify.waiting": "\u0915\u094B\u0921 \u0915\u0940 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E\u2026", + "verify.verified": "\u091A\u0948\u0928\u0932 \u0938\u0924\u094D\u092F\u093E\u092A\u093F\u0924", + "verify.bothConfirmed": "\u0926\u094B\u0928\u094B\u0902 \u092A\u0915\u094D\u0937\u094B\u0902 \u0928\u0947 \u092A\u0941\u0937\u094D\u091F\u093F \u0915\u0930 \u0926\u0940\u0964 \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091A\u0948\u091F \u0916\u0941\u0932 \u0930\u0939\u0940 \u0939\u0948\u2026", + "pwa.bannerTitle": "SecureBit.chat \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", + "pwa.bannerDesc": "\u092C\u0947\u0939\u0924\u0930 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u0947 \u0938\u093E\u0925 \u092E\u0942\u0932 \u0910\u092A \u091C\u0948\u0938\u093E \u0905\u0928\u0941\u092D\u0935 \u092A\u093E\u0907\u090F", + "pwa.install": "\u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", + "pwa.dismiss": "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902", + "pwa.close": "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902", + "pwa.iosTitle": "iOS \u092A\u0930 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", + "pwa.iosStep1": "\u0938\u093E\u091D\u093E \u0915\u0930\u0947\u0902 \u092C\u091F\u0928 \u0926\u092C\u093E\u0907\u090F", + "pwa.iosStep1Hint": "\u0906\u092E\u0924\u094C\u0930 \u092A\u0930 Safari \u092E\u0947\u0902 \u0928\u0940\u091A\u0947", + "pwa.iosStep2": "\xAB\u0939\u094B\u092E \u0938\u094D\u0915\u094D\u0930\u0940\u0928 \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0947\u0902\xBB \u0922\u0942\u0901\u0922\u093F\u090F", + "pwa.iosStep2Hint": "\u0938\u093E\u091D\u093E \u092E\u0947\u0928\u094D\u092F\u0942 \u092E\u0947\u0902 \u0928\u0940\u091A\u0947 \u0924\u0915 \u091C\u093E\u0907\u090F", + "pwa.iosStep3": "\xAB\u091C\u094B\u0921\u093C\u0947\u0902\xBB \u0926\u092C\u093E\u0907\u090F", + "pwa.iosStep3Hint": "\u092A\u0941\u0937\u094D\u091F\u093F \u0915\u0940\u091C\u093F\u090F, SecureBit.chat \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u094B \u091C\u093E\u090F\u0917\u093E", + "pwa.genericTitle": "SecureBit \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", + "pwa.genericDesc": "\u0939\u0930 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0905\u092A\u0928\u0947 \u0924\u0930\u0940\u0915\u093C\u0947 \u0938\u0947 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u0905\u092A\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0938\u0947 \u092E\u0947\u0932 \u0916\u093E\u0924\u0947 \u091A\u0930\u0923 \u091A\u0941\u0928\u093F\u090F\u0964", + "pwa.gotIt": "\u0938\u092E\u091D \u0917\u092F\u093E", + "pwa.installedTitle": "\u0910\u092A \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u094B \u0917\u092F\u093E!", + "pwa.installedIos": "iOS \u0910\u092A \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0939\u094B \u0917\u092F\u093E! \u0939\u094B\u092E \u0938\u094D\u0915\u094D\u0930\u0940\u0928 \u0938\u0947 \u0916\u094B\u0932\u093F\u090F\u0964", + "pwa.installedGeneric": "SecureBit.chat \u0905\u092C \u0906\u092A\u0915\u0947 \u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u0939\u0948", + "pwa.anytimeTitle": "\u091C\u092C \u091A\u093E\u0939\u0947\u0902 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", + "pwa.anytimeDesc": "\u0938\u092C\u0938\u0947 \u0905\u091A\u094D\u091B\u0947 \u0905\u0928\u0941\u092D\u0935 \u0915\u0947 \u0932\u093F\u090F, \u0906\u092A SecureBit.chat \u0915\u094B \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0915\u0947 \u092E\u0947\u0928\u094D\u092F\u0942 \u0938\u0947 \u0915\u092D\u0940 \u092D\u0940 \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", + "pwa.ok": "\u0920\u0940\u0915 \u0939\u0948", + "step.open": "\u091A\u0930\u0923 1 \xB7 \u091A\u0948\u0928\u0932 \u0916\u094B\u0932\u0947\u0902", + "step.exchange": "\u091A\u0930\u0923 2 \xB7 \u0906\u0926\u093E\u0928-\u092A\u094D\u0930\u0926\u093E\u0928", + "step.verification": "\u091A\u0930\u0923 3 \xB7 \u0938\u0924\u094D\u092F\u093E\u092A\u0928", + "action.create": "\u092C\u0928\u093E\u090F\u0901", + "action.join": "\u0936\u093E\u092E\u093F\u0932 \u0939\u094B\u0902", + "action.back": "\u092A\u0940\u091B\u0947", + "action.copy": "\u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902", + "action.copied": "\u0915\u0949\u092A\u0940 \u0939\u0941\u0906", + "action.scan": "\u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902", + "action.downloadDesktop": "\u0921\u0947\u0938\u094D\u0915\u091F\u0949\u092A \u0910\u092A \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902", + "action.advancedSettings": "\u0909\u0928\u094D\u0928\u0924 \u0938\u0947\u091F\u093F\u0902\u0917\u094D\u0938", + "cred.offerTag": "\u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \xB7 \u092F\u093E \u092A\u093E\u0920 \u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902", + "cred.answerTag": "\u0909\u0924\u094D\u0924\u0930 \xB7 \u092F\u093E \u092A\u093E\u0920 \u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902", + "cred.reveal": "\u0926\u0947\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u092C\u093E\u090F\u0901 - \u092F\u0939 \u0915\u094B\u0921 \u0915\u093F\u0938\u0940 \u0915\u094B \u0928 \u092C\u0924\u093E\u090F\u0901", + "qr.title": "QR \u0915\u094B\u0921 \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902", + "qr.subtitle": "\u0915\u0948\u092E\u0930\u093E \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u0947 QR \u092A\u0930 \u0930\u0916\u0947\u0902", + "qr.scanning": "\u092A\u0922\u093C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026", + "qr.hint": "\u091C\u092C \u0924\u0915 \u0938\u093E\u0930\u0947 \u0939\u093F\u0938\u094D\u0938\u0947 \u092A\u0922\u093C \u0928 \u0932\u093F\u090F \u091C\u093E\u090F\u0901, \u0938\u094D\u0925\u093F\u0930 \u0930\u0916\u093F\u090F\u0964 \u0915\u0948\u092E\u0930\u093E \u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u0939\u0940 \u091A\u0932\u0924\u093E \u0939\u0948 - \u0915\u0941\u091B \u092D\u0940 \u092D\u0947\u091C\u093E \u0928\u0939\u0940\u0902 \u091C\u093E\u0924\u093E\u0964", + "mesh.you": "\u0906\u092A", + "mesh.peer": "\u0938\u093E\u0925\u0940 \xB7 \u0938\u0924\u094D\u0930 1", + "mesh.joined2": "\u092A\u094D\u0930\u093F\u092F\u093E \u091C\u0941\u0921\u093C\u0940\u0902 \xB7 +2", + "mesh.joined3": "\u0905\u0930\u094D\u091C\u0941\u0928 \u091C\u0941\u0921\u093C\u0947 \xB7 +3", + "ice.title": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0938\u0947\u091F\u093F\u0902\u0917\u094D\u0938", + "ice.subtitle": "\u092F\u0939\u0940\u0902 \u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u0924\u092F \u0939\u094B\u0924\u093E \u0939\u0948 - \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u0915\u092D\u0940 \u0928\u0939\u0940\u0902 \u092D\u0947\u091C\u093E \u091C\u093E\u0924\u093E", + "ice.intro": "SecureBit \u0921\u093F\u092B\u093C\u0949\u0932\u094D\u091F \u0930\u0942\u092A \u0938\u0947 \u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 STUN \u0938\u0930\u094D\u0935\u0930\u094B\u0902 \u0938\u0947 \u092A\u0940\u092F\u0930-\u091F\u0942-\u092A\u0940\u092F\u0930 \u091C\u0941\u0921\u093C\u093E\u0935 \u0924\u092F \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u0905\u0917\u0930 \u0906\u092A \u0916\u093C\u0941\u0926 \u091A\u0932\u093E\u0924\u0947 \u0939\u0948\u0902, \u0924\u094B \u0905\u092A\u0928\u0947 STUN/TURN \u092C\u0924\u093E\u0907\u090F\u0964", + "ice.publicTitle": "\u0938\u093E\u0930\u094D\u0935\u091C\u0928\u093F\u0915 \u0938\u0930\u094D\u0935\u0930 (\u0921\u093F\u092B\u093C\u0949\u0932\u094D\u091F)", + "ice.publicDesc": "\u0915\u094B\u0908 \u0938\u0947\u091F\u093F\u0902\u0917 \u0928\u0939\u0940\u0902 \u091A\u093E\u0939\u093F\u090F\u0964 \u091C\u093C\u094D\u092F\u093E\u0926\u093E\u0924\u0930 \u0932\u094B\u0917\u094B\u0902 \u0915\u0947 \u0932\u093F\u090F \u0915\u093E\u092B\u093C\u0940\u0964", + "ice.customTitle": "\u092E\u0947\u0930\u0947 \u0905\u092A\u0928\u0947 STUN/TURN \u0938\u0930\u094D\u0935\u0930", + "ice.customDesc": "\u0905\u0927\u093F\u0915\u0924\u092E {max} \u0938\u0930\u094D\u0935\u0930\u0964", + "ice.turnNote": "TURN \u0930\u093F\u0932\u0947 \u0926\u094B\u0928\u094B\u0902 \u092A\u0915\u094D\u0937\u094B\u0902 \u0915\u093E IP \u0914\u0930 \u091F\u094D\u0930\u0948\u092B\u093C\u093F\u0915 \u0915\u0940 \u091A\u093E\u0932 \u0926\u0947\u0916 \u0938\u0915\u0924\u093E \u0939\u0948, \u092A\u0930 \u0938\u0902\u0926\u0947\u0936\u094B\u0902 \u0915\u0940 \u0938\u093E\u092E\u0917\u094D\u0930\u0940 \u0915\u092D\u0940 \u0928\u0939\u0940\u0902, \u091C\u094B \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0930\u0939\u0924\u0940 \u0939\u0948\u0964 \u092C\u0947\u0939\u0924\u0930 \u0939\u0948 ", + "ice.turnNoteTls": " (TLS)\u0964", + "ice.test": "\u0938\u0930\u094D\u0935\u0930 \u091C\u093E\u0901\u091A\u0947\u0902", + "ice.testing": "\u091C\u093E\u0901\u091A \u091C\u093E\u0930\u0940\u2026", + "ice.relayTitle": "\u0915\u0947\u0935\u0932-\u0930\u093F\u0932\u0947 \u092E\u094B\u0921", + "ice.relayBadge": "\u0905\u0927\u093F\u0915\u0924\u092E \u0928\u093F\u091C\u0924\u093E", + "ice.relayDesc": "\u0938\u093E\u0930\u093E \u091F\u094D\u0930\u0948\u092B\u093C\u093F\u0915 TURN \u0938\u0947 \u092D\u0947\u091C\u0924\u093E \u0939\u0948, \u0924\u093E\u0915\u093F \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u0906\u092A\u0915\u093E IP \u0915\u092D\u0940 \u0928 \u092A\u0924\u093E \u091A\u0932\u0947\u0964 \u0907\u0938\u0915\u0947 \u0932\u093F\u090F TURN \u0938\u0930\u094D\u0935\u0930 \u091A\u093E\u0939\u093F\u090F\u0964", + "ice.relayWarning": "\u0915\u0947\u0935\u0932-\u0930\u093F\u0932\u0947 \u092E\u094B\u0921 \u091A\u093E\u0932\u0942 \u0939\u0948 \u092A\u0930 \u0915\u094B\u0908 TURN \u0938\u0930\u094D\u0935\u0930 \u0924\u092F \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u091C\u0941\u0921\u093C\u093E\u0935 \u0936\u0941\u0930\u0942 \u0939\u0940 \u0928\u0939\u0940\u0902 \u0939\u094B \u092A\u093E\u090F\u0917\u093E\u0964", + "ice.persist": "\u0907\u0938\u0940 \u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u0938\u0939\u0947\u091C\u0947\u0902", + "ice.persistDesc": "\u0907\u0938 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0930\u0942\u092A \u092E\u0947\u0902 \u0938\u0939\u0947\u091C\u093E \u091C\u093E\u0924\u093E \u0939\u0948\u0964 \u092C\u0902\u0926 \u0930\u0916\u0928\u0947 \u092A\u0930 \u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0938\u0940 \u0938\u0924\u094D\u0930 \u0915\u0947 \u0932\u093F\u090F \u0932\u093E\u0917\u0942 \u0939\u094B\u0917\u093E\u0964", + "ice.forget": "\u0938\u0939\u0947\u091C\u093E \u0939\u0941\u0906 \u092D\u0942\u0932 \u091C\u093E\u090F\u0901", + "ice.cancel": "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902", + "ice.apply": "\u0932\u093E\u0917\u0942 \u0915\u0930\u0947\u0902", + "ice.errUnavailable": "\u0907\u0938 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 WebRTC \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 \u0939\u0948", + "ice.errInvalid": "\u0938\u0930\u094D\u0935\u0930 \u0915\u0940 \u0938\u0947\u091F\u093F\u0902\u0917 \u0917\u093C\u0932\u0924 \u0939\u0948", + "update.title": "\u0928\u092F\u093E \u0905\u092A\u0921\u0947\u091F \u0909\u092A\u0932\u092C\u094D\u0927 \u0939\u0948", + "update.desc": "SecureBit \u0915\u093E \u0928\u092F\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u092E\u093F\u0932\u093E \u0939\u0948\u0964", + "update.currentVersion": "\u092E\u094C\u091C\u0942\u0926\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923", + "update.newVersion": "\u0928\u092F\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923", + "update.now": "\u0905\u092D\u0940 \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902", + "update.later": "\u092C\u093E\u0926 \u092E\u0947\u0902", + "update.unknown": "\u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", + "update.stepSaving": "\u0921\u0947\u091F\u093E \u0938\u0939\u0947\u091C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026", + "update.stepSwCaches": "Service Worker \u0915\u0947 \u0915\u0948\u0936 \u0938\u093E\u092B\u093C \u0939\u094B \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", + "update.stepSwUnregister": "Service Worker \u0939\u091F\u093E\u090F \u091C\u093E \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", + "update.stepBrowserCache": "\u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u0915\u093E \u0915\u0948\u0936 \u0938\u093E\u092B\u093C \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", + "update.stepVersion": "\u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0905\u092A\u0921\u0947\u091F \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", + "update.stepReload": "\u0910\u092A \u092B\u093F\u0930 \u0938\u0947 \u0932\u094B\u0921 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", + "update.error": "\u0905\u092A\u0921\u0947\u091F \u092E\u0947\u0902 \u0917\u0921\u093C\u092C\u0921\u093C\u0940\u0964 \u092A\u0947\u091C \u0916\u093C\u0941\u0926 \u0924\u093E\u091C\u093C\u093E \u0915\u0930\u0947\u0902 (Ctrl+F5 \u092F\u093E Cmd+Shift+R)", + "update.confirmSkip": "\u0928\u092F\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u0909\u092A\u0932\u092C\u094D\u0927 \u0939\u0948\u0964 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0914\u0930 \u0938\u094D\u0925\u093F\u0930\u0924\u093E \u0915\u0947 \u0932\u093F\u090F \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0928\u093E \u092C\u0947\u0939\u0924\u0930 \u0939\u0948\u0964 \u092C\u093F\u0928\u093E \u0905\u092A\u0921\u0947\u091F \u0915\u0947 \u0906\u0917\u0947 \u092C\u0922\u093C\u0947\u0902?", + "offline.backOnline": "\u092B\u093F\u0930 \u0938\u0947 \u0911\u0928\u0932\u093E\u0907\u0928", + "offline.mode": "\u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u092E\u094B\u0921", + "offline.dismiss": "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902", + "offline.lostTitle": "\u091C\u0941\u0921\u093C\u093E\u0935 \u091F\u0942\u091F \u0917\u092F\u093E", + "offline.lostDesc": "SecureBit \u0905\u092D\u0940 \u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u0939\u0948\u0964 \u0915\u0941\u091B \u0938\u0941\u0935\u093F\u0927\u093E\u090F\u0901 \u0938\u0940\u092E\u093F\u0924 \u0939\u0948\u0902, \u092A\u0930 \u0906\u092A\u0915\u093E \u0921\u0947\u091F\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0939\u0948\u0964", + "offline.point1": "\u0906\u092A\u0915\u093E \u0938\u0924\u094D\u0930 \u0914\u0930 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u092C\u0928\u0940 \u0930\u0939\u0924\u0940 \u0939\u0948\u0902", + "offline.point2": "\u0938\u0930\u094D\u0935\u0930 \u092A\u0930 \u0915\u094B\u0908 \u0921\u0947\u091F\u093E \u0928\u0939\u0940\u0902 \u0930\u0916\u093E \u091C\u093E\u0924\u093E", + "offline.point3": "\u0926\u094B\u092C\u093E\u0930\u093E \u091C\u0941\u0921\u093C\u0924\u0947 \u0939\u0940 \u0938\u0902\u0926\u0947\u0936 \u0914\u0930 \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092E\u093F\u0932 \u091C\u093E\u090F\u0901\u0917\u0940", + "offline.continue": "\u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u091C\u093E\u0930\u0940 \u0930\u0916\u0947\u0902", + "offline.restoredTitle": "\u091C\u092C \u0906\u092A \u0926\u094B\u092C\u093E\u0930\u093E \u091C\u0941\u0921\u093C\u0947\u0902\u0917\u0947", + "offline.restoredDesc": "\u091C\u0941\u0921\u093C\u093E\u0935 \u091F\u0942\u091F\u0928\u0947 \u0938\u0947 \u0915\u0941\u091B \u0928\u0939\u0940\u0902 \u091C\u093E\u0924\u093E\u0964 SecureBit \u0938\u092C \u0915\u0941\u091B \u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u0939\u0940 \u0915\u0924\u093E\u0930 \u092E\u0947\u0902 \u0930\u0916\u0924\u093E \u0939\u0948 \u0914\u0930 \u0911\u0928\u0932\u093E\u0907\u0928 \u0939\u094B\u0924\u0947 \u0939\u0940 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0938\u0924\u094D\u0930 \u0935\u0939\u0940\u0902 \u0938\u0947 \u091A\u0932\u093E\u0924\u093E \u0939\u0948\u0964", + "offline.r1Title": "\u0906\u092A\u0915\u0947 \u0938\u0902\u0926\u0947\u0936 \u092A\u0939\u0941\u0901\u091A \u091C\u093E\u090F\u0901\u0917\u0947", + "offline.r1Desc": "\u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u092E\u0947\u0902 \u0932\u093F\u0916\u093E \u0938\u092C \u0915\u0941\u091B \u0905\u092A\u0928\u0947 \u0906\u092A \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u091A\u0932\u093E \u091C\u093E\u090F\u0917\u093E\u0964", + "offline.r2Title": "\u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092A\u0942\u0930\u0940 \u091A\u0932\u0940 \u091C\u093E\u090F\u0901\u0917\u0940", + "offline.r2Desc": "\u092D\u0947\u091C\u0928\u093E \u0935\u0939\u0940\u0902 \u0938\u0947 \u091C\u093E\u0930\u0940 \u0939\u094B\u0917\u093E \u091C\u0939\u093E\u0901 \u0930\u0941\u0915\u093E \u0925\u093E - \u0926\u094B\u092C\u093E\u0930\u093E \u092D\u0947\u091C\u0928\u0947 \u0915\u0940 \u091C\u093C\u0930\u0942\u0930\u0924 \u0928\u0939\u0940\u0902\u0964", + "offline.r3Title": "\u0909\u0928\u0915\u0947 \u0938\u0902\u0926\u0947\u0936 \u0914\u0930 \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u0906 \u091C\u093E\u090F\u0901\u0917\u0940", + "offline.r3Desc": "\u0930\u0941\u0915\u093E\u0935\u091F \u0915\u0947 \u0926\u094C\u0930\u093E\u0928 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0928\u0947 \u091C\u094B \u092D\u0947\u091C\u093E, \u0935\u0939 \u0915\u094D\u0930\u092E \u0938\u0947 \u0906\u092A\u0915\u094B \u092E\u093F\u0932 \u091C\u093E\u090F\u0917\u093E\u0964", + "offline.r4Title": "\u0915\u0941\u091B \u092D\u0940 \u0928\u0939\u0940\u0902 \u0916\u094B\u0924\u093E", + "offline.r4Desc": "\u0926\u094B\u092C\u093E\u0930\u093E \u091C\u0941\u0921\u093C\u0928\u0947 \u092A\u0930 \u0915\u094B\u0908 \u0916\u093E\u0932\u0940 \u091C\u0917\u0939 \u0928\u0939\u0940\u0902 \u0930\u0939\u0924\u0940 - \u092C\u093E\u0924\u091A\u0940\u0924 \u0935\u0939\u0940\u0902 \u0938\u0947 \u091A\u0932\u0924\u0940 \u0939\u0948 \u091C\u0939\u093E\u0901 \u0930\u0941\u0915\u0940 \u0925\u0940\u0964", + "offline.gotIt": "\u0938\u092E\u091D \u0917\u092F\u093E", + "qr.showTitle": "QR \u0915\u094B\u0921 \u0926\u093F\u0916\u093E\u090F\u0901", + "qr.showSubtitle": "\u092A\u0942\u0930\u0940 \u0938\u094D\u0915\u094D\u0930\u0940\u0928 \xB7 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0928\u0947 \u0926\u0947\u0902", + "qr.showSubtitleFrames": "\u092A\u0942\u0930\u0940 \u0938\u094D\u0915\u094D\u0930\u0940\u0928 \xB7 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u0938\u092D\u0940 {frames} \u092B\u093C\u094D\u0930\u0947\u092E \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0928\u0947 \u0926\u0947\u0902", + "notify.enabledBody": "\u0938\u0942\u091A\u0928\u093E\u090F\u0901 \u091A\u093E\u0932\u0942 \u0939\u094B \u0917\u0908\u0902\u0964 \u0928\u090F \u0938\u0902\u0926\u0947\u0936\u094B\u0902 \u092A\u0930 \u0906\u092A\u0915\u094B \u092C\u0924\u093E\u092F\u093E \u091C\u093E\u090F\u0917\u093E\u0964", + "notify.workingBody": "\u0938\u0942\u091A\u0928\u093E\u090F\u0901 \u0915\u093E\u092E \u0915\u0930 \u0930\u0939\u0940 \u0939\u0948\u0902\u0964 \u0928\u090F \u0938\u0902\u0926\u0947\u0936\u094B\u0902 \u092A\u0930 \u0906\u092A\u0915\u094B \u092C\u0924\u093E\u092F\u093E \u091C\u093E\u090F\u0917\u093E\u0964", + "pw.label": "\u092A\u093E\u0938\u0935\u0930\u094D\u0921 \u0915\u093E \u0916\u093C\u093E\u0928\u093E", + "pw.placeholder": "\u092A\u093E\u0938\u0935\u0930\u094D\u0921 \u0932\u093F\u0916\u0947\u0902\u2026", + "pw.decrypt": "\u0921\u093F\u0915\u094D\u0930\u093F\u092A\u094D\u091F \u0915\u0930\u0947\u0902", + "pw.cancel": "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902", + "file.title": "\u092B\u093C\u093E\u0907\u0932 \u0938\u094D\u0925\u093E\u0928\u093E\u0902\u0924\u0930\u0923", + "file.drop": "\u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092F\u0939\u093E\u0901 \u091B\u094B\u0921\u093C\u0947\u0902", + "file.dropHint": "\u092D\u0947\u091C\u0928\u0947 \u0938\u0947 \u092A\u0939\u0932\u0947 \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \xB7 100 MB \u0924\u0915", + "file.browse": "\u0909\u092A\u0915\u0930\u0923 \u092E\u0947\u0902 \u0926\u0947\u0916\u0947\u0902", + "file.incoming": "\u092B\u093C\u093E\u0907\u0932 \u0915\u093E \u0905\u0928\u0941\u0930\u094B\u0927 \u0906\u092F\u093E \u0939\u0948", + "file.accept": "\u0938\u094D\u0935\u0940\u0915\u093E\u0930\u0947\u0902", + "file.reject": "\u0905\u0938\u094D\u0935\u0940\u0915\u093E\u0930\u0947\u0902", + "file.download": "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902", + "file.notReady": "\u091C\u0941\u0921\u093C\u093E\u0935 \u0905\u092D\u0940 \u0924\u0948\u092F\u093E\u0930 \u0928\u0939\u0940\u0902", + "file.tooLarge": "\u092B\u093C\u093E\u0907\u0932 \u092C\u0939\u0941\u0924 \u092C\u0921\u093C\u0940 \u0939\u0948", + "file.typeNotAllowed": "\u0907\u0938 \u0924\u0930\u0939 \u0915\u0940 \u092B\u093C\u093E\u0907\u0932 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0928\u0939\u0940\u0902", + "file.maxConcurrent": "\u090F\u0915 \u0938\u093E\u0925 \u0938\u094D\u0925\u093E\u0928\u093E\u0902\u0924\u0930\u0923 \u0915\u0940 \u0938\u0940\u092E\u093E \u092A\u0942\u0930\u0940 \u0939\u094B \u0917\u0908", + "file.gone": "\u092F\u0939 \u092B\u093C\u093E\u0907\u0932 \u0905\u092C \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964", + "call.incoming": "\u0906\u0924\u0940 \u0939\u0941\u0908 \u0915\u0949\u0932", + "call.incomingVideo": "\u0906\u0924\u0940 \u0939\u0941\u0908 \u0935\u0940\u0921\u093F\u092F\u094B \u0915\u0949\u0932", + "call.encrypted": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0915\u0949\u0932", + "call.encryptedShort": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921", + "call.peer": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0938\u093E\u0925\u0940", + "call.connecting": "\u091C\u0941\u0921\u093C \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", + "call.ringing": "\u0918\u0902\u091F\u0940 \u092C\u091C \u0930\u0939\u0940 \u0939\u0948\u2026", + "call.accept": "\u0909\u0920\u093E\u090F\u0901", + "call.decline": "\u092E\u0928\u093E \u0915\u0930\u0947\u0902", + "call.end": "\u0915\u0949\u0932 \u0938\u092E\u093E\u092A\u094D\u0924 \u0915\u0930\u0947\u0902", + "call.camera": "\u0915\u0948\u092E\u0930\u093E", + "call.cameraOff": "\u0915\u0948\u092E\u0930\u093E \u092C\u0902\u0926", + "call.peerCameraOff": "\u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u093E \u0915\u0948\u092E\u0930\u093E \u092C\u0902\u0926 \u0939\u0948", + "call.flipCamera": "\u0915\u0948\u092E\u0930\u093E \u092C\u0926\u0932\u0947\u0902", + "call.addVideo": "\u0935\u0940\u0921\u093F\u092F\u094B \u091C\u094B\u0921\u093C\u0947\u0902", + "call.video": "\u0935\u0940\u0921\u093F\u092F\u094B", + "call.muted": "\u0906\u0935\u093E\u091C\u093C \u092C\u0902\u0926", + "call.expand": "\u092C\u0921\u093C\u093E \u0915\u0930\u0947\u0902", + "call.minimize": "\u091B\u094B\u091F\u093E \u0915\u0930\u0947\u0902", + "call.quality": "\u091C\u0941\u0921\u093C\u093E\u0935 \u0915\u0940 \u0917\u0941\u0923\u0935\u0924\u094D\u0924\u093E", + "call.qualityExcellent": "\u092C\u0939\u0941\u0924 \u0905\u091A\u094D\u091B\u0940", + "call.videoPrefix": "\u0935\u0940\u0921\u093F\u092F\u094B \xB7 ", + "call.voicePrefix": "\u0906\u0935\u093E\u091C\u093C \xB7 ", + "group.new": "\u0928\u092F\u093E \u0938\u092E\u0942\u0939", + "group.create": "\u0938\u092E\u0942\u0939 \u092C\u0928\u093E\u090F\u0901", + "group.join": "\u0938\u092E\u0942\u0939 \u092E\u0947\u0902 \u0936\u093E\u092E\u093F\u0932 \u0939\u094B\u0902", + "group.name": "\u0938\u092E\u0942\u0939 \u0915\u093E \u0928\u093E\u092E", + "group.nameTooLong": "\u0938\u092E\u0942\u0939 \u0915\u093E \u0928\u093E\u092E \u092C\u0939\u0941\u0924 \u0932\u0902\u092C\u093E \u0939\u0948\u0964", + "group.capacity": "{max} \u0932\u094B\u0917\u094B\u0902 \u0924\u0915, \u0938\u0940\u0927\u0947 \u0909\u092A\u0915\u0930\u0923 \u0938\u0947 \u0909\u092A\u0915\u0930\u0923\u0964 \u0938\u092E\u0942\u0939 \u0916\u0941\u0932\u0928\u0947 \u0938\u0947 \u092A\u0939\u0932\u0947 \u0938\u092C \u090F\u0915 \u0939\u0940 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u094B\u0921 \u092E\u093F\u0932\u093E\u090F\u0901\u0917\u0947\u0964", + "group.invite": "\u092C\u0941\u0932\u093E\u090F\u0901", + "group.inviteMore": "\u0914\u0930 \u0938\u0926\u0938\u094D\u092F\u094B\u0902 \u0915\u094B \u092C\u0941\u0932\u093E\u090F\u0901", + "group.invitePeople": "{count} \u0932\u094B\u0917\u094B\u0902 \u0915\u094B \u092C\u0941\u0932\u093E\u090F\u0901", + "group.invitation": "\u0938\u092E\u0942\u0939 \u0915\u093E \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923", + "group.addMembers": "\u0938\u0926\u0938\u094D\u092F \u091C\u094B\u0921\u093C\u0947\u0902", + "group.roomFor": "{remaining} \u0914\u0930 \u0932\u094B\u0917\u094B\u0902 \u0915\u0940 \u091C\u0917\u0939 \u0939\u0948\u0964 \u0909\u0928\u0915\u0947 \u0906\u0928\u0947 \u092A\u0930 \u0938\u092C \u090F\u0915 \u0928\u092F\u093E \u0938\u092E\u0942\u0939 \u0915\u094B\u0921 \u092E\u093F\u0932\u093E\u090F\u0901\u0917\u0947\u0964", + "group.membersCount": "{count} \u0938\u0926\u0938\u094D\u092F", + "group.member": "\u0938\u0926\u0938\u094D\u092F", + "group.members": "\u0938\u0926\u0938\u094D\u092F", + "group.remove": "{name} \u0915\u094B \u0939\u091F\u093E\u090F\u0901", + "group.message": "\xAB{name}\xBB \u092E\u0947\u0902 \u0938\u0902\u0926\u0947\u0936 \u092D\u0947\u091C\u0947\u0902", + "group.leave": "\u091B\u094B\u0921\u093C\u0947\u0902", + "group.leaveThis": "\u092F\u0939 \u0938\u092E\u0942\u0939 \u091B\u094B\u0921\u093C\u0947\u0902", + "group.cancel": "\u0938\u092E\u0942\u0939 \u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902", + "group.close": "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902", + "group.cancelBtn": "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902", + "group.decline": "\u092E\u0928\u093E \u0915\u0930\u0947\u0902", + "group.working": "\u0915\u093E\u092E \u091C\u093E\u0930\u0940\u2026", + "group.sasTitle": "\u0938\u092E\u0942\u0939 \u0915\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u094B\u0921", + "group.sasEveryone": "\u092F\u0939 \u0915\u094B\u0921 \u0938\u092C\u0915\u094B \u090F\u0915 \u091C\u0948\u0938\u093E \u0926\u093F\u0916\u0924\u093E \u0939\u0948", + "group.sasCompare": "\u092F\u0939 \u0938\u092E\u0942\u0939 \u0916\u094B\u0932\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0939\u0930 \u0938\u0926\u0938\u094D\u092F \u0915\u0947 \u0938\u093E\u0925 \u0938\u092E\u0942\u0939 \u0915\u094B\u0921 \u092E\u093F\u0932\u093E\u0907\u090F\u0964", + "group.sasReadAloud": "\u092F\u0947 \u0905\u0902\u0915 \u091C\u093C\u094B\u0930 \u0938\u0947 \u092A\u0922\u093C\u0915\u0930 \u0938\u0941\u0928\u093E\u0907\u090F - ", + "group.sasWarning": "\u0905\u0917\u0930 \u090F\u0915 \u092D\u0940 \u0938\u0926\u0938\u094D\u092F \u0905\u0932\u0917 \u0915\u094B\u0921 \u092A\u0922\u093C\u0924\u093E \u0939\u0948, \u0924\u094B \u0915\u094B\u0908 \u092C\u0940\u091A \u092E\u0947\u0902 \u092C\u0948\u0920\u093E \u0939\u0948\u0964 \u0938\u092E\u0942\u0939 \u0930\u0926\u094D\u0926 \u0915\u0940\u091C\u093F\u090F - \u092A\u0941\u0937\u094D\u091F\u093F \u092E\u0924 \u0915\u0940\u091C\u093F\u090F\u0964", + "group.confirmFirst": "\u092A\u0939\u0932\u0947 \u0938\u092E\u0942\u0939 \u0915\u094B\u0921 \u0915\u0940 \u092A\u0941\u0937\u094D\u091F\u093F \u0915\u0930\u0947\u0902", + "group.codeSuffix": " \xB7 \u0915\u094B\u0921 {code}", + "group.exchangingNonces": "\u090F\u0915-\u092C\u093E\u0930 \u0915\u0947 \u092E\u093E\u0928 \u092C\u0926\u0932\u0947 \u091C\u093E \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", + "group.waitingCommit": "\u0939\u0930 \u0938\u0926\u0938\u094D\u092F \u0915\u0947 \u0935\u091A\u0928 \u0915\u0940 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E\u2026", + "group.waitingJoin": "\u092C\u093E\u0915\u093C\u0940 \u0938\u0926\u0938\u094D\u092F\u094B\u0902 \u0915\u0947 \u091C\u0941\u0921\u093C\u0928\u0947 \u0915\u0940 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E\u2026", + "group.emptyChat": "\u092F\u0939\u093E\u0901 \u0905\u092D\u0940 \u0915\u0941\u091B \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0939\u0930 \u0938\u0902\u0926\u0947\u0936 \u092D\u0947\u091C\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u0947 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0915\u0947 \u0938\u093E\u0925 \u0906\u0924\u093E \u0939\u0948 \u0914\u0930 \u0939\u0930 \u0938\u0926\u0938\u094D\u092F \u0915\u0940 \u0905\u092A\u0928\u0940 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0932\u093E\u0907\u0928 \u0938\u0947 \u0917\u0941\u091C\u093C\u0930\u0924\u093E \u0939\u0948\u0964", + "group.noVerified": "\u0905\u092D\u0940 \u0915\u094B\u0908 \u0938\u0924\u094D\u092F\u093E\u092A\u093F\u0924 \u091A\u0948\u091F \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u092A\u0939\u0932\u0947 \u0906\u092E\u0928\u0947-\u0938\u093E\u092E\u0928\u0947 \u0915\u0940 \u091A\u0948\u091F \u0916\u094B\u0932\u093F\u090F \u0914\u0930 \u0909\u0938\u0915\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u094B\u0921 \u092E\u093F\u0932\u093E\u0907\u090F - \u0938\u092E\u0942\u0939 \u0909\u0928\u094D\u0939\u0940\u0902 \u091C\u0941\u0921\u093C\u093E\u0935\u094B\u0902 \u0938\u0947 \u092C\u0928\u0924\u093E \u0939\u0948 \u091C\u093F\u0928\u094D\u0939\u0947\u0902 \u0906\u092A \u092A\u0939\u0932\u0947 \u091C\u093E\u0901\u091A \u091A\u0941\u0915\u0947 \u0939\u0948\u0902\u0964", + "group.noMoreToAdd": "\u091C\u094B\u0921\u093C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0914\u0930 \u0915\u094B\u0908 \u0938\u0924\u094D\u092F\u093E\u092A\u093F\u0924 \u091A\u0948\u091F \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u092A\u0939\u0932\u0947 \u0906\u092E\u0928\u0947-\u0938\u093E\u092E\u0928\u0947 \u0915\u0940 \u091A\u0948\u091F \u0916\u094B\u0932\u093F\u090F \u0914\u0930 \u0909\u0938\u0915\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u094B\u0921 \u092E\u093F\u0932\u093E\u0907\u090F\u0964", + "group.directLink": "\u0938\u0940\u0927\u093E \u092A\u0940\u092F\u0930-\u091F\u0942-\u092A\u0940\u092F\u0930 \u091C\u0941\u0921\u093C\u093E\u0935", + "group.noDirectLink": "\u0905\u092D\u0940 \u0938\u0940\u0927\u093E \u091C\u0941\u0921\u093C\u093E\u0935 \u0928\u0939\u0940\u0902 \u0939\u0948 - \u092C\u0928\u0928\u0947 \u0924\u0915 \u0938\u0902\u0926\u0947\u0936 \u0915\u093F\u0938\u0940 \u0914\u0930 \u0938\u0926\u0938\u094D\u092F \u0915\u0947 \u091C\u093C\u0930\u093F\u090F \u091C\u093E\u0924\u0947 \u0939\u0948\u0902", + "group.relayNote": "\u0915\u0941\u091B \u0938\u0926\u0938\u094D\u092F\u094B\u0902 \u0938\u0947 \u0905\u092D\u0940 \u0938\u0940\u0927\u093E \u091C\u0941\u0921\u093C\u093E\u0935 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0909\u0928\u0915\u0947 \u0938\u0902\u0926\u0947\u0936 \u0915\u093F\u0938\u0940 \u0914\u0930 \u0938\u0926\u0938\u094D\u092F \u0938\u0947 \u0939\u094B\u0915\u0930 \u091C\u093E\u0924\u0947 \u0939\u0948\u0902, \u091C\u094B \u092F\u0939 \u0924\u094B \u0926\u0947\u0916 \u0938\u0915\u0924\u093E \u0939\u0948 \u0915\u093F \u092C\u093E\u0924\u091A\u0940\u0924 \u0939\u094B \u0930\u0939\u0940 \u0939\u0948, \u092A\u0930 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0915\u0947 \u0906\u0917\u0947 \u0928 \u092A\u0922\u093C \u0938\u0915\u0924\u093E \u0939\u0948 \u0928 \u0915\u0939\u0940 \u0939\u0941\u0908 \u092C\u093E\u0924 \u092C\u0926\u0932 \u0938\u0915\u0924\u093E \u0939\u0948\u0964 \u0938\u092E\u0942\u0939 \u0909\u0928\u094D\u0939\u0947\u0902 \u0938\u0940\u0927\u0947 \u091C\u094B\u0921\u093C\u0928\u0947 \u0915\u0940 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0924\u093E \u0930\u0939\u0924\u093E \u0939\u0948\u0964", + "group.relayOnlyOff": "\u0915\u0947\u0935\u0932-\u0930\u093F\u0932\u0947 \u092E\u094B\u0921 \u092C\u0902\u0926 \u0939\u0948, \u0907\u0938\u0932\u093F\u090F \u0939\u0930 \u0938\u0926\u0938\u094D\u092F \u0906\u092A\u0938\u0947 \u0938\u0940\u0927\u0947 \u091C\u0941\u0921\u093C\u0924\u093E \u0939\u0948 \u0914\u0930 \u0906\u092A\u0915\u093E IP \u092A\u0924\u093E \u091C\u093E\u0928 \u0932\u0947\u0924\u093E \u0939\u0948 - \u0909\u0928\u092E\u0947\u0902 \u0935\u0947 \u092D\u0940 \u0939\u0948\u0902 \u091C\u093F\u0928\u094D\u0939\u0947\u0902 \u0915\u093F\u0938\u0940 \u0914\u0930 \u0928\u0947 \u092C\u0941\u0932\u093E\u092F\u093E\u0964 \u0905\u0917\u0930 \u092F\u0939 \u092F\u0939\u093E\u0901 \u092E\u093E\u092F\u0928\u0947 \u0930\u0916\u0924\u093E \u0939\u0948, \u0924\u094B \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0938\u0947\u091F\u093F\u0902\u0917\u094D\u0938 \u092E\u0947\u0902 \u0907\u0938\u0947 \u091A\u093E\u0932\u0942 \u0915\u0940\u091C\u093F\u090F\u0964", + "group.memberOffline": "{name} \u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u0939\u0948\u0902 \u0914\u0930 \u0938\u0902\u0926\u0947\u0936 \u0928\u0939\u0940\u0902 \u092A\u093E\u090F\u0901\u0917\u0947\u0964 \u0935\u0947 \u0905\u092C \u092D\u0940 \u0938\u0926\u0938\u094D\u092F \u0939\u0948\u0902 - \u0939\u091F\u093E\u0928\u0947 \u092A\u0930 \u0938\u092E\u0942\u0939 \u0915\u0940 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u0928\u090F \u0938\u093F\u0930\u0947 \u0938\u0947 \u092C\u0928\u0924\u0940 \u0939\u0948\u0902\u0964", + "group.joinNote": "\u092C\u093E\u0915\u093C\u0940 \u0938\u0926\u0938\u094D\u092F\u094B\u0902 \u0915\u094B \u092A\u0924\u093E \u091A\u0932\u0947\u0917\u093E \u0915\u093F \u0906\u092A \u0907\u0938 \u0938\u092E\u0942\u0939 \u092E\u0947\u0902 \u0939\u0948\u0902\u0964 \u092A\u0940\u091B\u0947 \u0915\u093E \u0915\u094B\u0908 \u0907\u0924\u093F\u0939\u093E\u0938 \u0928\u0939\u0940\u0902 \u0939\u0948 - \u0938\u092E\u0942\u0939 \u0916\u093C\u093E\u0932\u0940 \u0938\u0947 \u0936\u0941\u0930\u0942 \u0939\u094B\u0924\u093E \u0939\u0948\u0964", + "group.inviteSentNote": "\u091C\u092C \u0924\u0915 \u0935\u0947 \u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0928\u0939\u0940\u0902 \u0915\u0930\u0924\u0947, \u0938\u092E\u0942\u0939 \u091A\u0932\u0924\u093E \u0930\u0939\u0924\u093E \u0939\u0948\u0964 \u0909\u0928\u0915\u0947 \u0932\u093F\u090F \u092A\u0940\u091B\u0947 \u0915\u093E \u0915\u094B\u0908 \u0907\u0924\u093F\u0939\u093E\u0938 \u0928\u0939\u0940\u0902 \u0939\u0948 - \u0935\u0947 \u0938\u093F\u0930\u094D\u092B\u093C \u0905\u092C \u0938\u0947 \u092D\u0947\u091C\u093E \u0917\u092F\u093E \u0926\u0947\u0916\u0947\u0902\u0917\u0947\u0964", + "group.errNotCreated": "\u0938\u092E\u0942\u0939 \u0928\u0939\u0940\u0902 \u092C\u0928\u093E", + "group.errNobodyAccepted": "\u0938\u092E\u092F \u0930\u0939\u0924\u0947 \u0915\u093F\u0938\u0940 \u0928\u0947 \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E\u0964", + "group.errNothingSent": "\u0928 \u0915\u0941\u091B \u092D\u0947\u091C\u093E \u0917\u092F\u093E, \u0928 \u0915\u0941\u091B \u0938\u0924\u094D\u092F\u093E\u092A\u093F\u0924 \u0939\u0941\u0906\u0964 \u0907\u0938\u0947 \u092C\u0902\u0926 \u0915\u0940\u091C\u093F\u090F \u0914\u0930 \u0938\u092C\u0915\u0947 \u091C\u0941\u0921\u093C\u0928\u0947 \u092A\u0930 \u0926\u094B\u092C\u093E\u0930\u093E \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u091C\u093F\u090F\u0964", + "group.errNotFormed": "\u092F\u0939 \u0938\u092E\u0942\u0939 \u0928\u0939\u0940\u0902 \u092C\u0928 \u0938\u0915\u093E\u0964", + "group.errFull": "\u092F\u0939 \u0938\u092E\u0942\u0939 \u092D\u0930 \u091A\u0941\u0915\u093E \u0939\u0948\u0964", + "group.errInviteFailed": "\u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0928\u0939\u0940\u0902 \u092D\u0947\u091C\u093E \u091C\u093E \u0938\u0915\u093E - \u0935\u0939 \u091A\u0948\u091F \u091C\u0941\u0921\u093C\u0940 \u0939\u0941\u0908 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964", + "group.errNoMemberList": "\u0938\u092E\u0942\u0939 \u092C\u0928\u093E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0928\u0947 \u0938\u0926\u0938\u094D\u092F\u094B\u0902 \u0915\u0940 \u0938\u0942\u091A\u0940 \u0915\u092D\u0940 \u092D\u0947\u091C\u0940 \u0939\u0940 \u0928\u0939\u0940\u0902\u0964", + "group.errUnsignedList": "\u0938\u0926\u0938\u094D\u092F \u0938\u0942\u091A\u0940 \u092A\u0930 \u0938\u092E\u0942\u0939 \u092C\u0928\u093E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u0947 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0928\u0939\u0940\u0902 \u0939\u0948\u0902\u0964 \u0926\u094B\u092C\u093E\u0930\u093E \u0915\u094B\u0936\u093F\u0936 \u092E\u0924 \u0915\u0940\u091C\u093F\u090F - \u0909\u0928\u094D\u0939\u0947\u0902 \u092C\u0924\u093E\u0907\u090F\u0964", + "group.errNotOwner": "\u0938\u092E\u0942\u0939 \u0915\u0947 \u0938\u094D\u0935\u093E\u092E\u0940 \u0915\u0947 \u0905\u0932\u093E\u0935\u093E \u0915\u093F\u0938\u0940 \u0914\u0930 \u0928\u0947 \u0938\u0926\u0938\u094D\u092F \u092C\u0926\u0932\u0928\u0947 \u0915\u0940 \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u0964", + "hdr.tagline": "\u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921", + "hdr.netSettings": "\u0909\u0928\u094D\u0928\u0924 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0938\u0947\u091F\u093F\u0902\u0917\u094D\u0938", + "hdr.netSettingsTitle": "\u0909\u0928\u094D\u0928\u0924 \u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0938\u0947\u091F\u093F\u0902\u0917\u094D\u0938 (STUN/TURN)", + "hdr.disconnect": "\u091C\u0941\u0921\u093C\u093E\u0935 \u0924\u094B\u0921\u093C\u0947\u0902", + "status.connected": "\u091C\u0941\u0921\u093C \u0917\u092F\u093E", + "status.connecting": "\u091C\u0941\u0921\u093C \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", + "status.notConnected": "\u091C\u0941\u0921\u093C\u093E \u0928\u0939\u0940\u0902 \u0939\u0948", + "status.reconnecting": "\u0926\u094B\u092C\u093E\u0930\u093E \u091C\u0941\u0921\u093C \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", + "status.retrying": "\u092B\u093F\u0930 \u0915\u094B\u0936\u093F\u0936\u2026", + "status.verifying": "\u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u091C\u093E\u0930\u0940\u2026", + "status.peerDisconnected": "\u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u093E \u091C\u0941\u0921\u093C\u093E\u0935 \u091F\u0942\u091F\u093E", + "sec.replayProtection": "\u092A\u0941\u0928\u0930\u093E\u0935\u0943\u0924\u094D\u0924\u093F \u0939\u092E\u0932\u0947 \u0938\u0947 \u092C\u091A\u093E\u0935", + "sec.messageIntegrity": "\u0938\u0902\u0926\u0947\u0936 \u0915\u0940 \u0905\u0916\u0902\u0921\u0924\u093E (HMAC)", + "sec.forwardSecrecy": "\u092A\u0942\u0930\u094D\u0923 \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "sec.metadataProtection": "\u092E\u0947\u091F\u093E\u0921\u0947\u091F\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093E", + "sec.trafficObfuscation": "\u091F\u094D\u0930\u0948\u092B\u093C\u093F\u0915 \u0905\u0938\u094D\u092A\u0937\u094D\u091F\u0940\u0915\u0930\u0923", + "sec.realTests": "\u0905\u0938\u0932\u0940 \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915 \u091C\u093E\u0901\u091A\u0947\u0902", + "sec.simulatedData": "\u092C\u0928\u093E\u0935\u091F\u0940 \u0921\u0947\u091F\u093E", + "sec.testPassed": "\u091C\u093E\u0901\u091A \u092A\u093E\u0938", + "sec.testFailed": "\u091C\u093E\u0901\u091A \u0935\u093F\u092B\u0932 \u092F\u093E \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", + "sec.verificationDone": "\u0905\u0938\u0932\u0940 \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915 \u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u092A\u0942\u0930\u093E \u0939\u0941\u0906", + "sec.verificationInProgress": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u091C\u093E\u0930\u0940\u2026", + "sec.verificationWait": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u091C\u093E\u0930\u0940\u2026\n\u0915\u0943\u092A\u092F\u093E \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u0938\u092E\u092F \u0915\u0940 \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915 \u091C\u093E\u0901\u091A \u092A\u0942\u0930\u0940 \u0939\u094B\u0928\u0947 \u0924\u0915 \u0930\u0941\u0915\u093F\u090F\u0964", + "sec.verificationUnavailable": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", + "chat.placeholder": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0938\u0902\u0926\u0947\u0936 \u0932\u093F\u0916\u0947\u0902\u2026", + "chat.send": "\u0938\u0902\u0926\u0947\u0936 \u092D\u0947\u091C\u0947\u0902", + "chat.sendFiles": "\u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092D\u0947\u091C\u0947\u0902", + "chat.hideFiles": "\u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u091B\u093F\u092A\u093E\u090F\u0901", + "chat.recordVoice": "\u0935\u0949\u0907\u0938 \u0938\u0902\u0926\u0947\u0936 \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0915\u0930\u0947\u0902", + "chat.sendVoice": "\u0935\u0949\u0907\u0938 \u0938\u0902\u0926\u0947\u0936 \u092D\u0947\u091C\u0947\u0902", + "chat.discard": "\u091B\u094B\u0921\u093C\u0947\u0902", + "chat.codeBlock": "\u0915\u094B\u0921 \u092C\u094D\u0932\u0949\u0915 \u0915\u0947 \u0930\u0942\u092A \u092E\u0947\u0902 \u092D\u0947\u091C\u0947\u0902 (\u0907\u0928\u092A\u0941\u091F \u092C\u0921\u093C\u093E \u0939\u094B \u091C\u093E\u090F\u0917\u093E)", + "chat.codeHint": "\u0915\u094B\u0921 \u0915\u093E \u0905\u0902\u0936 \xB7 \u0930\u0942\u092A-\u0938\u091C\u094D\u091C\u093E \u092C\u0928\u0940 \u0930\u0939\u0947\u0917\u0940 \xB7 \u092D\u0947\u091C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u2318\u21B5", + "chat.viewOnce": "\u090F\u0915 \u092C\u093E\u0930 \u0926\u0947\u0916\u0947\u0902", + "chat.viewOnceTitle": "\u090F\u0915 \u092C\u093E\u0930 \u0926\u0947\u0916\u0947\u0902 - \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u0947 \u092A\u0922\u093C\u0924\u0947 \u0939\u0940 \u092E\u093F\u091F \u091C\u093E\u090F\u0917\u093E", + "chat.viewOncePrefix": "\u090F\u0915 \u092C\u093E\u0930 \u0926\u0947\u0916\u0947\u0902 \xB7 ", + "chat.viewOnceTap": "\u090F\u0915 \u092C\u093E\u0930 \u0926\u0947\u0916\u0947\u0902 \xB7 \u0926\u093F\u0916\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u092C\u093E\u090F\u0901", + "chat.viewedOnce": "\u0926\u0947\u0916\u093E \u091C\u093E \u091A\u0941\u0915\u093E", + "chat.disappearing": "\u092E\u093F\u091F\u0928\u0947 \u0935\u093E\u0932\u093E \u0938\u0902\u0926\u0947\u0936 - \u0926\u094B\u0928\u094B\u0902 \u0913\u0930 \u0938\u0947 \u0939\u091F \u091C\u093E\u0924\u093E \u0939\u0948", + "chat.disappearAfter": "\u0907\u0924\u0928\u0947 \u0938\u092E\u092F \u092C\u093E\u0926 \u092E\u093F\u091F\u0947", + "chat.visibleFor": "\u0907\u0924\u0928\u0940 \u0926\u0947\u0930 \u0926\u093F\u0916\u0947", + "chat.timerPrefix": "\u091F\u093E\u0907\u092E\u0930 \xB7 ", + "chat.expired": "\u092F\u0939 \u0938\u0902\u0926\u0947\u0936 \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B \u091A\u0941\u0915\u093E \u0939\u0948", + "chat.deleteForEveryone": "\u0938\u092C\u0915\u0947 \u0932\u093F\u090F \u0939\u091F\u093E\u090F\u0901", + "chat.sending": "\u092D\u0947\u091C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948", + "chat.delivered": "\u092A\u0939\u0941\u0901\u091A \u0917\u092F\u093E", + "chat.notSent": "\u0928\u0939\u0940\u0902 \u092D\u0947\u091C\u093E \u0917\u092F\u093E", + "chat.notSentReason": "\u0928\u0939\u0940\u0902 \u092D\u0947\u091C\u093E \u0917\u092F\u093E - \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091A\u0948\u0928\u0932 \u0905\u092D\u0940 \u0924\u0948\u092F\u093E\u0930 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0906\u0917\u0947 \u092C\u0922\u093C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u094B\u092C\u093E\u0930\u093E \u091C\u0941\u0921\u093C\u093F\u090F\u0964", + "chat.encrypted": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921", + "chat.decrypted": "\u0921\u093F\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921", + "chat.encryptedOnDevice": "\u0906\u092A\u0915\u0947 \u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F \u0939\u0941\u0906", + "chat.uploading": "\u092D\u0947\u091C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948", + "chat.downloading": "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0939\u094B \u0930\u0939\u093E \u0939\u0948", + "chat.transferring": "\u0938\u094D\u0925\u093E\u0928\u093E\u0902\u0924\u0930\u0923 \u091C\u093E\u0930\u0940\u2026", + "chat.copied": "\u0915\u0949\u092A\u0940 \u0939\u094B \u0917\u092F\u093E!", + "chat.collapse": "\u0938\u092E\u0947\u091F\u0947\u0902", + "chat.closeMenu": "\u092E\u0947\u0928\u094D\u092F\u0942 \u092C\u0902\u0926 \u0915\u0930\u0947\u0902", + "chat.newChat": "\u0928\u0908 \u091A\u0948\u091F", + "chat.newGroup": "\u0928\u092F\u093E \u0938\u092E\u0942\u0939", + "chat.createGroup": "\u0938\u092E\u0942\u0939 \u092C\u0928\u093E\u090F\u0901", + "chat.groupChats": "\u0938\u092E\u0942\u0939 \u091A\u0948\u091F", + "chat.secureChat": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091A\u0948\u091F", + "chat.nameThis": "\u0907\u0938 \u091A\u0948\u091F \u0915\u094B \u0928\u093E\u092E \u0926\u0947\u0902", + "chat.rename": "\u091A\u0948\u091F \u0915\u093E \u0928\u093E\u092E \u092C\u0926\u0932\u0947\u0902 (\u0915\u0947\u0935\u0932 \u0907\u0938 \u0909\u092A\u0915\u0930\u0923 \u092A\u0930)", + "chat.renameHint": "\u0928\u093E\u092E \u092C\u0926\u0932\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u094B \u092C\u093E\u0930 \u0915\u094D\u0932\u093F\u0915 \u0915\u0930\u0947\u0902", + "chat.localLabel": "\u0938\u094D\u0925\u093E\u0928\u0940\u092F \u0928\u093E\u092E \xB7 \u0938\u093F\u0930\u094D\u092B\u093C \u0907\u0938\u0940 \u0909\u092A\u0915\u0930\u0923 \u092A\u0930 \u0938\u0939\u0947\u091C\u093E \u0917\u092F\u093E", + "chat.setStatus": "\u0905\u092A\u0928\u0940 \u0938\u094D\u0925\u093F\u0924\u093F \u091A\u0941\u0928\u0947\u0902", + "chat.yourStatusPrefix": "\u0906\u092A\u0915\u0940 \u0938\u094D\u0925\u093F\u0924\u093F - ", + "chat.meshHint": "8 \u0938\u093E\u0925\u093F\u092F\u094B\u0902 \u0924\u0915 \xB7 P2P \u092E\u0947\u0936", + "chat.offline": "\u0911\u092B\u093C\u0932\u093E\u0907\u0928", + "chat.noNetwork": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0928\u0939\u0940\u0902 \xB7 \u0926\u094B\u092C\u093E\u0930\u093E \u091C\u0941\u0921\u093C \u0930\u0939\u0947 \u0939\u0948\u0902", + "chat.startVoiceCall": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0935\u0949\u0907\u0938 \u0915\u0949\u0932 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", + "chat.startVideoCall": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0935\u0940\u0921\u093F\u092F\u094B \u0915\u0949\u0932 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", + "chat.verifyForCalls": "\u0915\u0949\u0932 \u0915\u0947 \u0932\u093F\u090F \u092A\u0939\u0932\u0947 \u0938\u0924\u094D\u0930 \u0938\u0924\u094D\u092F\u093E\u092A\u093F\u0924 \u0915\u0930\u0947\u0902", + "chat.e2eeNote": "\u0939\u0930 \u0938\u0902\u0926\u0947\u0936 \u0906\u092A\u0915\u0947 \u0909\u092A\u0915\u0930\u0923 \u0938\u0947 \u0928\u093F\u0915\u0932\u0928\u0947 \u0938\u0947 \u092A\u0939\u0932\u0947 \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F \u0939\u094B \u091C\u093E\u0924\u093E \u0939\u0948\u0964", + "chat.peersOnly": "\u0915\u0947\u0935\u0932 \u091C\u0941\u0921\u093C\u0947 \u0939\u0941\u090F \u0938\u093E\u0925\u093F\u092F\u094B\u0902 \u0915\u094B \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u092D\u0947\u091C\u093E \u091C\u093E\u0924\u093E \u0939\u0948 - \u0915\u093F\u0938\u0940 \u0938\u0930\u094D\u0935\u0930 \u092A\u0930 \u0915\u092D\u0940 \u0928\u0939\u0940\u0902 \u0930\u0916\u093E \u091C\u093E\u0924\u093E\u0964", + "flow.invitationCreated": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u092C\u0928 \u0917\u092F\u093E", + "flow.invitationCreatedBang": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u092C\u0928\u093E \u0914\u0930 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F \u0939\u094B \u0917\u092F\u093E\u0964", + "flow.responseCreated": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0909\u0924\u094D\u0924\u0930 \u092C\u0928 \u0917\u092F\u093E", + "flow.responseCreatedBang": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0909\u0924\u094D\u0924\u0930 \u092C\u0928 \u0917\u092F\u093E\u0964", + "flow.sendInvitation": "\u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0915\u094B\u0921 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u0915\u093F\u0938\u0940 \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0930\u093E\u0938\u094D\u0924\u0947 \u0938\u0947 \u092D\u0947\u091C\u093F\u090F (\u0915\u0949\u0932, SMS \u0935\u0917\u093C\u0948\u0930\u0939)\u0964", + "flow.sendResponse": "\u0909\u0924\u094D\u0924\u0930 \u0915\u094B\u0921 \u091A\u0948\u0928\u0932 \u0936\u0941\u0930\u0942 \u0915\u0930\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u094B \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0930\u093E\u0938\u094D\u0924\u0947 \u0938\u0947 \u092D\u0947\u091C\u093F\u090F, \u092F\u093E \u0909\u0928\u094D\u0939\u0947\u0902 \u0928\u0940\u091A\u0947 \u0915\u093E QR \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0928\u0947 \u0926\u0940\u091C\u093F\u090F\u0964", + "flow.sendEncryptedCode": "\u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921 \u0915\u094B\u0921 \u092D\u0947\u091C\u0947\u0902", + "flow.sendTheResponse": "\u0909\u0924\u094D\u0924\u0930 \u092D\u0947\u091C\u0947\u0902", + "flow.pasteOrWrite": "\u0915\u094B\u0921 \u091A\u093F\u092A\u0915\u093E\u090F\u0901 \u092F\u093E \u0932\u093F\u0916\u0947\u0902\u2026", + "flow.processingInvitation": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0938\u0902\u0938\u093E\u0927\u093F\u0924 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", + "flow.processingResponse": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u0909\u0924\u094D\u0924\u0930 \u0938\u0902\u0938\u093E\u0927\u093F\u0924 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", + "flow.finalizing": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091C\u0941\u0921\u093C\u093E\u0935 \u092A\u0942\u0930\u093E \u0915\u093F\u092F\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026", + "flow.channelEstablished": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091A\u0948\u0928\u0932 \u092C\u0928 \u0917\u092F\u093E", + "flow.channelReady": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091A\u0948\u0928\u0932 \u0924\u0948\u092F\u093E\u0930 \u0939\u0948", + "flow.restoring": "\u091C\u0941\u0921\u093C\u093E\u0935 \u092C\u0939\u093E\u0932 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", + "flow.invitationCaptured": "\u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u092A\u0922\u093C \u0932\u093F\u092F\u093E \u0917\u092F\u093E\u0964", + "err.needInvitation": "\u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u093E \u0926\u093F\u092F\u093E \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0915\u094B\u0921 \u091A\u093F\u092A\u0915\u093E\u0928\u093E \u091C\u093C\u0930\u0942\u0930\u0940 \u0939\u0948\u0964", + "err.needResponse": "\u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u093E \u0926\u093F\u092F\u093E \u0909\u0924\u094D\u0924\u0930 \u0915\u094B\u0921 \u091A\u093F\u092A\u0915\u093E\u0928\u093E \u091C\u093C\u0930\u0942\u0930\u0940 \u0939\u0948\u0964", + "err.responseFormat": "\u0909\u0924\u094D\u0924\u0930 \u0915\u093E \u092A\u094D\u0930\u093E\u0930\u0942\u092A \u0917\u093C\u0932\u0924 \u0939\u0948 - \u0915\u094B\u0921 \u091C\u093E\u0901\u091A\u093F\u090F", + "err.responseNoKey": "\u0909\u0924\u094D\u0924\u0930 \u0915\u094B\u0921 \u0917\u093C\u0932\u0924 \u0939\u0948 - \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915 \u0915\u0941\u0902\u091C\u0940 \u0928\u0939\u0940\u0902 \u0939\u0948 \u092F\u093E \u0916\u093C\u0930\u093E\u092C \u0939\u0948\u0964 \u0915\u094B\u0921 \u091C\u093E\u0901\u091A\u0915\u0930 \u0926\u094B\u092C\u093E\u0930\u093E \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u091C\u093F\u090F\u0964", + "err.responseNoSignKey": "\u0909\u0924\u094D\u0924\u0930 \u0915\u094B\u0921 \u0917\u093C\u0932\u0924 \u0939\u0948 - \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u091C\u093E\u0901\u091A\u0928\u0947 \u0915\u0940 \u0915\u0941\u0902\u091C\u0940 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0915\u094B\u0921 \u091C\u093E\u0901\u091A\u0915\u0930 \u0926\u094B\u092C\u093E\u0930\u093E \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u091C\u093F\u090F\u0964", + "err.responseOutdated": "\u0909\u0924\u094D\u0924\u0930 \u0915\u093E \u0921\u0947\u091F\u093E \u092A\u0941\u0930\u093E\u0928\u093E \u0939\u0948 - \u0928\u092F\u093E \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0907\u0938\u094D\u0924\u0947\u092E\u093E\u0932 \u0915\u0940\u091C\u093F\u090F", + "err.setupError": "\u091C\u0941\u0921\u093C\u093E\u0935 \u092C\u0928\u093E\u0924\u0947 \u0938\u092E\u092F \u0917\u0921\u093C\u092C\u0921\u093C\u0940", + "err.notReady": "\u091C\u0941\u0921\u093C\u093E\u0935 \u0905\u092D\u0940 \u0924\u0948\u092F\u093E\u0930 \u0928\u0939\u0940\u0902", + "err.securityBreach": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u092E\u0947\u0902 \u0938\u0947\u0902\u0927 \u092E\u093F\u0932\u0940 - \u091C\u0941\u0921\u093C\u093E\u0935 \u0905\u0938\u094D\u0935\u0940\u0915\u093E\u0930", + "err.securityValidation": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u091C\u093E\u0901\u091A \u0935\u093F\u092B\u0932 - \u0939\u092E\u0932\u093E \u0939\u094B \u0938\u0915\u0924\u093E \u0939\u0948", + "err.retiredQr": "\u092F\u0939 QR \u0910\u0938\u0947 \u092A\u0941\u0930\u093E\u0928\u0947 \u092A\u094D\u0930\u093E\u0930\u0942\u092A \u0915\u093E \u0939\u0948 \u091C\u093F\u0938\u0938\u0947 \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0928\u0939\u0940\u0902 \u092D\u0947\u091C\u093E \u091C\u093E \u0938\u0915\u093E\u0964 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0938\u0947 \u0928\u092F\u093E \u092C\u0928\u0935\u093E\u0907\u090F, \u092F\u093E \u0915\u0949\u092A\u0940-\u092A\u0947\u0938\u094D\u091F \u0915\u0940\u091C\u093F\u090F\u0964", + "err.compressedQrNote": "\u0938\u0902\u0915\u094D\u0937\u0947\u092A \u0915\u0947 \u0932\u093F\u090F \u0926\u092C\u093E\u092F\u093E \u0939\u0941\u0906 QR \u0915\u092D\u0940-\u0915\u092D\u0940 SDP \u091B\u094B\u0921\u093C \u0926\u0947\u0924\u093E \u0939\u0948\u0964 \u091C\u0941\u0921\u093C\u093E\u0935 \u0928 \u092C\u0928\u0947 \u0924\u094B \u0915\u0949\u092A\u0940-\u092A\u0947\u0938\u094D\u091F \u0915\u0940\u091C\u093F\u090F\u0964", + "err.inviteNotConnected": "\u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0928\u0939\u0940\u0902 \u092D\u0947\u091C\u093E \u091C\u093E \u0938\u0915\u093E\u0964 \u0935\u0939 \u091A\u0948\u091F \u0905\u092D\u0940 \u091C\u0941\u0921\u093C\u0940 \u0939\u0941\u0908 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964", + "err.inviteNotConnectedRetry": "\u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0928\u0939\u0940\u0902 \u092D\u0947\u091C\u093E \u091C\u093E \u0938\u0915\u093E\u0964 \u0935\u0939 \u091A\u0948\u091F \u0905\u092D\u0940 \u091C\u0941\u0921\u093C\u0940 \u0939\u0941\u0908 \u0928\u0939\u0940\u0902 \u0939\u0948 - \u0909\u0938\u0947 \u0926\u094B\u092C\u093E\u0930\u093E \u0916\u094B\u0932\u0915\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u091C\u093F\u090F\u0964", + "err.nobodyAccepted": "\u0915\u093F\u0938\u0940 \u0928\u0947 \u0928\u093F\u092E\u0902\u0924\u094D\u0930\u0923 \u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E\u0964 \u0938\u092E\u0942\u0939 \u0935\u0948\u0938\u093E \u0939\u0940 \u0939\u0948\u0964", + "err.noAudio": "\u0915\u094B\u0908 \u0906\u0935\u093E\u091C\u093C \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0928\u0939\u0940\u0902 \u0939\u0941\u0908 - \u092E\u093E\u0907\u0915\u094D\u0930\u094B\u092B\u093C\u094B\u0928 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u091C\u093E\u0901\u091A\u0915\u0930 \u0926\u094B\u092C\u093E\u0930\u093E \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u091C\u093F\u090F\u0964", + "err.voiceNeedsConnection": "\u0935\u0949\u0907\u0938 \u0938\u0902\u0926\u0947\u0936 \u0915\u0947 \u0932\u093F\u090F \u091A\u093E\u0932\u0942 \u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924 \u091C\u0941\u0921\u093C\u093E\u0935 \u091A\u093E\u0939\u093F\u090F\u0964 \u0926\u094B\u092C\u093E\u0930\u093E \u091C\u0941\u0921\u093C\u0915\u0930 \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u091C\u093F\u090F\u0964", + "err.voiceRestoring": "\u091C\u0941\u0921\u093C\u093E\u0935 \u092C\u0939\u093E\u0932 \u0939\u094B \u0930\u0939\u093E \u0939\u0948 - \u0925\u094B\u0921\u093C\u0940 \u0926\u0947\u0930 \u092E\u0947\u0902 \u0935\u0949\u0907\u0938 \u0938\u0902\u0926\u0947\u0936 \u0926\u094B\u092C\u093E\u0930\u093E \u092D\u0947\u091C\u0928\u0947 \u0915\u0940 \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u091C\u093F\u090F\u0964", + "err.fileTooLarge": "\u092B\u093C\u093E\u0907\u0932 \u092C\u0939\u0941\u0924 \u092C\u0921\u093C\u0940 \u0939\u0948", + "sas.safetyNumber": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0902\u0916\u094D\u092F\u093E", + "sas.incorrect": "\u0915\u094B\u0921 \u0917\u093C\u0932\u0924 \u0939\u0948\u0964 \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0938\u0947 \u092E\u093F\u0932\u093E\u0915\u0930 \u0926\u094B\u092C\u093E\u0930\u093E \u0915\u094B\u0936\u093F\u0936 \u0915\u0940\u091C\u093F\u090F\u0964", + "sas.noMatch": "\u0915\u094B\u0921 \u092E\u0947\u0932 \u0928\u0939\u0940\u0902 \u0916\u093E\u0924\u0947", + "sas.makeSure": "\u092A\u0915\u094D\u0915\u093E \u0915\u0940\u091C\u093F\u090F \u0915\u093F \u0926\u094B\u0928\u094B\u0902 \u0915\u094B\u0921 \u092C\u093F\u0932\u094D\u0915\u0941\u0932 \u090F\u0915 \u091C\u0948\u0938\u0947 \u0939\u0948\u0902\u0964", + "sas.tooManyAttempts": "\u092C\u0939\u0941\u0924 \u092C\u093E\u0930 \u0917\u093C\u0932\u0924 \u0915\u094B\u0936\u093F\u0936 \u0939\u0941\u0908\u0964 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0915\u0947 \u0932\u093F\u090F \u0938\u0924\u094D\u0930 \u0930\u0940\u0938\u0947\u091F \u0915\u0930 \u0926\u093F\u092F\u093E \u0917\u092F\u093E\u0964", + "sas.verificationFailed": "\u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u0935\u093F\u092B\u0932", + "sas.verified": "\u0938\u0924\u094D\u092F\u093E\u092A\u093F\u0924 \xB7 \u092A\u0942\u0930\u094D\u0923 \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "sas.runVerification": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u091A\u0932\u093E\u090F\u0901", + "sec.panelTitle": "\u0928\u0947\u091F\u0935\u0930\u094D\u0915 \u0914\u0930 \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B \u0915\u093E \u092C\u094D\u092F\u094B\u0930\u093E", + "sec.security": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E", + "sec.transport": "\u092A\u0930\u093F\u0935\u0939\u0928", + "sec.keyExchange": "\u0915\u0941\u0902\u091C\u0940 \u0935\u093F\u0928\u093F\u092E\u092F", + "sec.allEnabled": "\u0938\u092D\u0940 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0941\u0935\u093F\u0927\u093E\u090F\u0901 \u0921\u093F\u092B\u093C\u0949\u0932\u094D\u091F \u0930\u0942\u092A \u0938\u0947 \u091A\u093E\u0932\u0942 \u0939\u0948\u0902", + "sec.realTimeNote": "\u0905\u0938\u0932\u0940 \u0915\u094D\u0930\u093F\u092A\u094D\u091F\u094B\u0917\u094D\u0930\u093E\u092B\u093C\u093F\u0915 \u092B\u093C\u0902\u0915\u094D\u0936\u0928\u094B\u0902 \u0938\u0947 \u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u0938\u092E\u092F \u092E\u0947\u0902 \u091C\u093E\u0901\u091A - \u0915\u094B\u0908 \u092C\u0928\u093E\u0935\u091F\u0940 \u0921\u0947\u091F\u093E \u0928\u0939\u0940\u0902\u0964", + "sec.simulatedWarning": "\u0927\u094D\u092F\u093E\u0928 \u0926\u0947\u0902: \u091C\u0941\u0921\u093C\u093E\u0935 \u0936\u093E\u092F\u0926 \u092A\u0942\u0930\u0940 \u0924\u0930\u0939 \u092C\u0928\u093E \u0928\u0939\u0940\u0902 \u0939\u0948 - \u092E\u093E\u0928 \u092C\u0928\u093E\u0935\u091F\u0940 \u0939\u094B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964", + "dl.title": "SecureBit \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902", + "dl.free": "\u092E\u0941\u092B\u093C\u094D\u0924 \xB7 \u0916\u0941\u0932\u093E \u0938\u094D\u0930\u094B\u0924", + "dl.soon": "\u092E\u094B\u092C\u093E\u0907\u0932 \u0910\u092A (iOS, Android) \u0914\u0930 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u090F\u0915\u094D\u0938\u091F\u0947\u0902\u0936\u0928 (Chrome, Firefox, Opera) \u091C\u0932\u094D\u0926 \u0906 \u0930\u0939\u0947 \u0939\u0948\u0902\u0964", + "chatHdr.chat": "\u091A\u0948\u091F", + "chatHdr.chats": "\u091A\u0948\u091F", + "chatHdr.newChat": "+ \u0928\u0908", + "chatHdr.secure": "\u0938\u0941\u0930\u0915\u094D\u0937\u093F\u0924", + "chatHdr.p2pSub": "P2P \xB7 \u090F\u0902\u0921-\u091F\u0942-\u090F\u0902\u0921 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u091F\u0947\u0921", + "chatHdr.save": "\u0938\u0939\u0947\u091C\u0947\u0902", + "chatHdr.close": "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902", + "chatHdr.expand": "\u092C\u0921\u093C\u093E \u0915\u0930\u0947\u0902", + "chatHdr.you": "\u0906\u092A", + "chatHdr.qrCode": "QR \u0915\u094B\u0921", + "chat.disconnected": "\u091C\u0941\u0921\u093C\u093E\u0935 \u091F\u0942\u091F\u093E", + "call.mute": "\u0906\u0935\u093E\u091C\u093C \u092C\u0902\u0926 \u0915\u0930\u0947\u0902", + "call.endShort": "\u0938\u092E\u093E\u092A\u094D\u0924", + "group.add": "\u091C\u094B\u0921\u093C\u0947\u0902", + "group.send": "\u092D\u0947\u091C\u0947\u0902", + "sec.pfsShort": "\u092A\u0942\u0930\u094D\u0923 \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "sec.cipher": "\u0938\u093F\u092B\u093C\u0930", + "chat.close": "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902", + "file.needConnection": "\u092B\u093C\u093E\u0907\u0932 \u092D\u0947\u091C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091C\u0941\u0921\u093C\u093E\u0935 \u091A\u093E\u0939\u093F\u090F", + "presence.available": "\u0909\u092A\u0932\u092C\u094D\u0927", + "presence.away": "\u0926\u0942\u0930", + "presence.busy": "\u0935\u094D\u092F\u0938\u094D\u0924", + "presence.offline": "\u0911\u092B\u093C\u0932\u093E\u0907\u0928", + "presence.invisible": "\u0905\u0926\u0943\u0936\u094D\u092F", + "presence.availableDesc": "\u0911\u0928\u0932\u093E\u0907\u0928 \u0914\u0930 \u0909\u092A\u0932\u092C\u094D\u0927", + "presence.awayDesc": "\u0928\u093F\u0937\u094D\u0915\u094D\u0930\u093F\u092F \xB7 \u0925\u094B\u0921\u093C\u0940 \u0926\u0947\u0930 \u0915\u0947 \u0932\u093F\u090F \u0926\u0942\u0930", + "presence.busyDesc": "\u092A\u0930\u0947\u0936\u093E\u0928 \u0928 \u0915\u0930\u0947\u0902", + "presence.invisibleDesc": "\u0926\u0942\u0938\u0930\u094B\u0902 \u0915\u094B \u0911\u092B\u093C\u0932\u093E\u0907\u0928 \u0926\u093F\u0916\u0947\u0902", + "presence.online": "\u0911\u0928\u0932\u093E\u0907\u0928", + "conn.p2p": "P2P \xB7 \u091C\u0941\u0921\u093C\u093E \u0939\u0941\u0906", + "conn.verifying": "\u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u091C\u093E\u0930\u0940\u2026", + "conn.connecting": "\u091C\u0941\u0921\u093C \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", + "conn.reconnecting": "\u0926\u094B\u092C\u093E\u0930\u093E \u091C\u0941\u0921\u093C \u0930\u0939\u0947 \u0939\u0948\u0902\u2026", + "conn.peerDisconnected": "\u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u093E \u091C\u0941\u0921\u093C\u093E\u0935 \u091F\u0942\u091F\u093E", + "conn.disconnected": "\u091C\u0941\u0921\u093C\u093E\u0935 \u091F\u0942\u091F\u093E", + "chat.defaultLabel": "\u091A\u0948\u091F", + "groupPhase.forming": "\u092C\u0928 \u0930\u0939\u093E \u0939\u0948\u2026", + "groupPhase.commitments": "\u0935\u091A\u0928\u094B\u0902 \u0915\u093E \u0906\u0926\u093E\u0928-\u092A\u094D\u0930\u0926\u093E\u0928\u2026", + "groupPhase.revealing": "\u092A\u094D\u0930\u0915\u091F \u0915\u093F\u092F\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\u2026", + "groupPhase.compare": "\u0938\u092E\u0942\u0939 \u0915\u094B\u0921 \u092E\u093F\u0932\u093E\u0907\u090F", + "groupPhase.ready": "\u0938\u092E\u0942\u0939 \u0924\u0948\u092F\u093E\u0930", + "groupPhase.failed": "\u0938\u092E\u0942\u0939 \u0928\u0939\u0940\u0902 \u092C\u0928\u093E", + "call.qualityGood": "\u0905\u091A\u094D\u091B\u0940", + "call.qualityFair": "\u0920\u0940\u0915-\u0920\u093E\u0915", + "call.qualityWeak": "\u0915\u092E\u091C\u093C\u094B\u0930", + "msg.code": "\u0915\u094B\u0921", + "msg.timer": "\u091F\u093E\u0907\u092E\u0930", + "msg.voice": "\u0906\u0935\u093E\u091C\u093C", + "msg.play": "\u091A\u0932\u093E\u090F\u0901", + "msg.sent": "\u092D\u0947\u091C\u093E \u0917\u092F\u093E", + "msg.read": "\u092A\u0922\u093C \u0932\u093F\u092F\u093E", + "report.title": "\u0935\u093E\u0938\u094D\u0924\u0935\u093F\u0915 \u0938\u092E\u092F \u092E\u0947\u0902 \u0938\u0941\u0930\u0915\u094D\u0937\u093E \u0938\u0924\u094D\u092F\u093E\u092A\u0928", + "report.active": "\u0938\u0915\u094D\u0930\u093F\u092F", + "report.testsPassed": "\u092A\u093E\u0938 \u0939\u0941\u0908 \u091C\u093E\u0901\u091A\u0947\u0902", + "report.verifiedAt": "\u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u0915\u093E \u0938\u092E\u092F", + "report.source": "\u0938\u094D\u0930\u094B\u0924", + "secTest.verifyECDHKeyExchange": "ECDH \u0915\u0941\u0902\u091C\u0940 \u0935\u093F\u0928\u093F\u092E\u092F", + "secTest.verifyECDSASignatures": "ECDSA \u0921\u093F\u091C\u093F\u091F\u0932 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930", + "secTest.verifyEncryption": "AES-GCM \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928", + "secTest.verifyMessageIntegrity": "\u0938\u0902\u0926\u0947\u0936 \u0915\u0940 \u0905\u0916\u0902\u0921\u0924\u093E", + "secTest.verifyPerfectForwardSecrecy": "\u092A\u0942\u0930\u094D\u0923 \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "secTest.verifyPFS": "\u092A\u0942\u0930\u094D\u0923 \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E", + "secTest.verifyReplayProtection": "\u092A\u0941\u0928\u0930\u093E\u0935\u0943\u0924\u094D\u0924\u093F \u0939\u092E\u0932\u0947 \u0938\u0947 \u092C\u091A\u093E\u0935", + "secTest.verifyDTLSFingerprint": "DTLS \u092B\u093C\u093F\u0902\u0917\u0930\u092A\u094D\u0930\u093F\u0902\u091F", + "secTest.verifySASVerification": "SAS \u0938\u0924\u094D\u092F\u093E\u092A\u0928", + "secTest.verifyMetadataProtection": "\u092E\u0947\u091F\u093E\u0921\u0947\u091F\u093E \u0938\u0941\u0930\u0915\u094D\u0937\u093E", + "secTest.verifyTrafficObfuscation": "\u091F\u094D\u0930\u0948\u092B\u093C\u093F\u0915 \u0905\u0938\u094D\u092A\u0937\u094D\u091F\u0940\u0915\u0930\u0923", + "secTest.verifyPacketPadding": "\u092A\u0948\u0915\u0947\u091F \u092A\u0948\u0921\u093F\u0902\u0917", + "secTest.verifyNestedEncryption": "\u092A\u0930\u0924\u0926\u093E\u0930 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928", + "secTest.verifyNonExtractableKeys": "\u0928 \u0928\u093F\u0915\u093E\u0932\u0940 \u091C\u093E \u0938\u0915\u0928\u0947 \u0935\u093E\u0932\u0940 \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901", + "secTest.verifyRateLimiting": "\u0926\u0930 \u0938\u0940\u092E\u093E", + "secTest.verifyMutualAuth": "\u092A\u093E\u0930\u0938\u094D\u092A\u0930\u093F\u0915 \u092A\u094D\u0930\u092E\u093E\u0923\u0940\u0915\u0930\u0923", + "secTest.verifyAuthProof": "\u092A\u094D\u0930\u092E\u093E\u0923\u0940\u0915\u0930\u0923 \u0915\u093E \u092A\u094D\u0930\u092E\u093E\u0923", + "secTest.verifyEnhancedValidation": "\u0909\u0928\u094D\u0928\u0924 \u091C\u093E\u0901\u091A", + "secTest.verifyAdvancedFeatures": "\u0909\u0928\u094D\u0928\u0924 \u0938\u0941\u0935\u093F\u0927\u093E\u090F\u0901", + "secTest.verifySignature": "\u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0915\u0940 \u091C\u093E\u0901\u091A", + "secDetail.Security system initializing...": "\u0938\u0941\u0930\u0915\u094D\u0937\u093E \u092A\u094D\u0930\u0923\u093E\u0932\u0940 \u0936\u0941\u0930\u0942 \u0939\u094B \u0930\u0939\u0940 \u0939\u0948\u2026", + "secDetail.Nested encryption active": "\u092A\u0930\u0924\u0926\u093E\u0930 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u091A\u093E\u0932\u0942 \u0939\u0948", + "secDetail.Nested encryption failed": "\u092A\u0930\u0924\u0926\u093E\u0930 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u0935\u093F\u092B\u0932", + "secDetail.Packet padding active": "\u092A\u0948\u0915\u0947\u091F \u092A\u0948\u0921\u093F\u0902\u0917 \u091A\u093E\u0932\u0942 \u0939\u0948", + "secDetail.Packet padding failed": "\u092A\u0948\u0915\u0947\u091F \u092A\u0948\u0921\u093F\u0902\u0917 \u0935\u093F\u092B\u0932", + "secDetail.Advanced features active": "\u0909\u0928\u094D\u0928\u0924 \u0938\u0941\u0935\u093F\u0927\u093E\u090F\u0901 \u091A\u093E\u0932\u0942 \u0939\u0948\u0902", + "secDetail.Advanced features failed": "\u0909\u0928\u094D\u0928\u0924 \u0938\u0941\u0935\u093F\u0927\u093E\u090F\u0901 \u0935\u093F\u092B\u0932", + "secDetail.No encryption key available": "\u0915\u094B\u0908 \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u0915\u0941\u0902\u091C\u0940 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", + "secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM \u090F\u0928\u094D\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u0914\u0930 \u0921\u093F\u0915\u094D\u0930\u093F\u092A\u094D\u0936\u0928 \u0938\u0939\u0940 \u0915\u093E\u092E \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902", + "secDetail.No ECDH key pair available": "\u0915\u094B\u0908 ECDH \u0915\u0941\u0902\u091C\u0940 \u092F\u0941\u0917\u094D\u092E \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", + "secDetail.Key derivation failed": "\u0915\u0941\u0902\u091C\u0940 \u0928\u093F\u0915\u093E\u0932\u0928\u093E \u0935\u093F\u092B\u0932 \u0930\u0939\u093E", + "secDetail.No ECDSA key pair available": "\u0915\u094B\u0908 ECDSA \u0915\u0941\u0902\u091C\u0940 \u092F\u0941\u0917\u094D\u092E \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", + "secDetail.ECDSA digital signatures working correctly": "ECDSA \u0921\u093F\u091C\u093F\u091F\u0932 \u0939\u0938\u094D\u0924\u093E\u0915\u094D\u0937\u0930 \u0938\u0939\u0940 \u0915\u093E\u092E \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902", + "secDetail.MAC key not available or invalid": "MAC \u0915\u0941\u0902\u091C\u0940 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 \u092F\u093E \u0905\u092E\u093E\u0928\u094D\u092F \u0939\u0948", + "secDetail.Rate limiter did not block a message over the limit": "\u0926\u0930 \u0938\u0940\u092E\u0915 \u0928\u0947 \u0938\u0940\u092E\u093E \u0938\u0947 \u0905\u0927\u093F\u0915 \u0938\u0902\u0926\u0947\u0936 \u0915\u094B \u0928\u0939\u0940\u0902 \u0930\u094B\u0915\u093E", + "secDetail.Rate limiter is not available": "\u0926\u0930 \u0938\u0940\u092E\u0915 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 \u0939\u0948", + "secDetail.Replay protection is working correctly": "\u092A\u0941\u0928\u0930\u093E\u0935\u0943\u0924\u094D\u0924\u093F \u0939\u092E\u0932\u0947 \u0938\u0947 \u092C\u091A\u093E\u0935 \u0938\u0939\u0940 \u0915\u093E\u092E \u0915\u0930 \u0930\u0939\u093E \u0939\u0948", + "secDetail.Replay protection not enabled": "\u092A\u0941\u0928\u0930\u093E\u0935\u0943\u0924\u094D\u0924\u093F \u0939\u092E\u0932\u0947 \u0938\u0947 \u092C\u091A\u093E\u0935 \u091A\u093E\u0932\u0942 \u0928\u0939\u0940\u0902 \u0939\u0948", + "secDetail.SAS code not available": "SAS \u0915\u094B\u0921 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902", + "secDetail.SAS verification code is valid and available": "SAS \u0938\u0924\u094D\u092F\u093E\u092A\u0928 \u0915\u094B\u0921 \u0935\u0948\u0927 \u0914\u0930 \u0909\u092A\u0932\u092C\u094D\u0927 \u0939\u0948", + "secDetail.Traffic obfuscation is working correctly": "\u091F\u094D\u0930\u0948\u092B\u093C\u093F\u0915 \u0905\u0938\u094D\u092A\u0937\u094D\u091F\u0940\u0915\u0930\u0923 \u0938\u0939\u0940 \u0915\u093E\u092E \u0915\u0930 \u0930\u0939\u093E \u0939\u0948", + "secDetail.Traffic obfuscation not enabled": "\u091F\u094D\u0930\u0948\u092B\u093C\u093F\u0915 \u0905\u0938\u094D\u092A\u0937\u094D\u091F\u0940\u0915\u0930\u0923 \u091A\u093E\u0932\u0942 \u0928\u0939\u0940\u0902 \u0939\u0948", + "secDetail.No non-extractable ephemeral ECDH key pair for this session": "\u0907\u0938 \u0938\u0924\u094D\u0930 \u0915\u0947 \u0932\u093F\u090F \u0910\u0938\u0940 \u0915\u094D\u0937\u0923\u093F\u0915 ECDH \u0915\u0941\u0902\u091C\u0940 \u092F\u0941\u0917\u094D\u092E \u0928\u0939\u0940\u0902 \u0939\u0948 \u091C\u093F\u0938\u0947 \u0928\u093F\u0915\u093E\u0932\u093E \u0928 \u091C\u093E \u0938\u0915\u0947", + "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": "\u0915\u0947\u0935\u0932 \u0938\u0924\u094D\u0930-\u0938\u094D\u0924\u0930 \u0915\u0940 \u0905\u0917\u094D\u0930\u0917\u093E\u092E\u0940 \u0917\u094B\u092A\u0928\u0940\u092F\u0924\u093E: \u0915\u0941\u0902\u091C\u093F\u092F\u093E\u0901 \u0939\u0930 \u0938\u0924\u094D\u0930 \u0915\u0947 \u0932\u093F\u090F \u0915\u094D\u0937\u0923\u093F\u0915 \u0939\u0948\u0902, \u092A\u0930 \u0907\u0938 \u091C\u0941\u0921\u093C\u093E\u0935 \u092E\u0947\u0902 Double Ratchet \u091A\u093E\u0932\u0942 \u0928\u0939\u0940\u0902 \u0939\u0948 (\u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u093E \u092A\u0941\u0930\u093E\u0928\u093E \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u091A\u0932\u093E \u0930\u0939\u093E \u0939\u0948), \u0907\u0938\u0932\u093F\u090F \u0938\u0924\u094D\u0930 \u0915\u0941\u0902\u091C\u0940 \u0932\u0940\u0915 \u0939\u094B\u0928\u0947 \u092A\u0930 \u092A\u0942\u0930\u0940 \u092C\u093E\u0924\u091A\u0940\u0924 \u0916\u0941\u0932 \u091C\u093E\u0924\u0940 \u0939\u0948\u0964", + "msg.pause": "\u0930\u094B\u0915\u0947\u0902", + "msg.failed": "\u0935\u093F\u092B\u0932", + "groupErr.timeout": "\u0915\u094B\u0921 \u0924\u0948\u092F\u093E\u0930 \u0939\u094B\u0928\u0947 \u0938\u0947 \u092A\u0939\u0932\u0947 \u0939\u0940 \u090F\u0915 \u0938\u0926\u0938\u094D\u092F \u0928\u0947 \u091C\u0935\u093E\u092C \u0926\u0947\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u093F\u092F\u093E\u0964", + "groupErr.keyMismatch": "\u090F\u0915 \u0938\u0926\u0938\u094D\u092F \u0915\u0940 \u0915\u0941\u0902\u091C\u0940 \u0909\u0938\u0915\u0940 \u092C\u0924\u093E\u0908 \u092A\u0939\u091A\u093E\u0928 \u0938\u0947 \u092E\u0947\u0932 \u0928\u0939\u0940\u0902 \u0916\u093E\u0908\u0964", + "groupErr.revealMismatch": "\u090F\u0915 \u0938\u0926\u0938\u094D\u092F \u0928\u0947 \u091C\u094B \u092E\u093E\u0928 \u092C\u0924\u093E\u092F\u093E, \u0935\u0939 \u0909\u0938\u0915\u0947 \u092A\u0939\u0932\u0947 \u0926\u093F\u090F \u0935\u091A\u0928 \u0938\u0947 \u092E\u0947\u0932 \u0928\u0939\u0940\u0902 \u0916\u093E\u092F\u093E\u0964", + "groupErr.commitChanged": "\u090F\u0915 \u0938\u0926\u0938\u094D\u092F \u0928\u0947 \u092C\u0940\u091A \u092E\u0947\u0902 \u0905\u092A\u0928\u093E \u0935\u091A\u0928 \u092C\u0926\u0932 \u0926\u093F\u092F\u093E\u0964", + "groupErr.missingKey": "\u0938\u0942\u091A\u0940 \u092E\u0947\u0902 \u090F\u0915 \u0938\u0926\u0938\u094D\u092F \u0925\u093E \u091C\u093F\u0938\u0915\u0940 \u0915\u0941\u0902\u091C\u0940 \u0915\u092D\u0940 \u0906\u0908 \u0939\u0940 \u0928\u0939\u0940\u0902\u0964", + "groupErr.outsider": "\u0938\u092E\u0942\u0939 \u0915\u0947 \u092C\u093E\u0939\u0930 \u0938\u0947 \u0915\u093F\u0938\u0940 \u0915\u093E \u092B\u093C\u094D\u0930\u0947\u092E \u0906\u092F\u093E\u0964", + "groupErr.limit": "\u090F\u0915 \u0938\u092E\u0942\u0939 \u092E\u0947\u0902 \u0905\u0927\u093F\u0915\u0924\u092E \u0906\u0920 \u0938\u0926\u0938\u094D\u092F \u0939\u094B\u0924\u0947 \u0939\u0948\u0902\u0964", + "groupErr.tooLarge": "\u090F\u0915 \u0938\u0902\u0926\u0947\u0936 \u0907\u0924\u0928\u093E \u092C\u0921\u093C\u093E \u0925\u093E \u0915\u093F \u0938\u092E\u0942\u0939 \u0915\u094B \u0928\u0939\u0940\u0902 \u092D\u0947\u091C\u093E \u091C\u093E \u0938\u0915\u093E\u0964", + "fileType.text": "\u0938\u093E\u0926\u093E \u092A\u093E\u0920", + "fileType.images": "\u091A\u093F\u0924\u094D\u0930", + "fileType.archives": "\u0938\u0902\u0917\u094D\u0930\u0939 \u092B\u093C\u093E\u0907\u0932\u0947\u0902", + "fileType.voice": "\u0935\u0949\u0907\u0938 \u0938\u0902\u0926\u0947\u0936", + "fileType.unsupported": "\u0938\u092E\u0930\u094D\u0925\u093F\u0924 \u0928\u0939\u0940\u0902", + "qrScan.title": "QR \u0915\u094B\u0921 \u0938\u094D\u0915\u0948\u0928 \u0915\u0930\u0947\u0902", + "qrScan.auto": "\u0938\u094D\u0935\u0924\u0903 \u092E\u094B\u0921", + "qrScan.reset": "\u0930\u0940\u0938\u0947\u091F", + "qrScan.autoScroll": "\u0938\u094D\u0935\u0924\u0903 \u0938\u094D\u0915\u094D\u0930\u0949\u0932 \u091A\u093E\u0932\u0942 \u0939\u0948", + "qrScan.starting": "\u0915\u0948\u092E\u0930\u093E \u0936\u0941\u0930\u0942 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", + "qrScan.point": "\u0915\u0948\u092E\u0930\u093E \u0938\u093E\u092E\u0928\u0947 \u0935\u093E\u0932\u0947 \u0915\u0947 QR \u092A\u0930 \u0930\u0916\u0947\u0902", + "qrScan.tapFocus": "\u092B\u093C\u094B\u0915\u0938 \u0915\u0947 \u0932\u093F\u090F \u0938\u094D\u0915\u094D\u0930\u0940\u0928 \u0926\u092C\u093E\u090F\u0901", + "qrScan.focusing": "\u092B\u093C\u094B\u0915\u0938 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026", + "iceErr.notArray": "\u0938\u0930\u094D\u0935\u0930\u094B\u0902 \u0915\u0940 \u0938\u0942\u091A\u0940 \u090F\u0915 \u0938\u0930\u0923\u0940 \u0939\u094B\u0928\u0940 \u091A\u093E\u0939\u093F\u090F", + "iceErr.invalidJson": "\u0917\u093C\u0932\u0924 JSON", + "iceErr.tooMany": "\u092C\u0939\u0941\u0924 \u091C\u093C\u094D\u092F\u093E\u0926\u093E \u0938\u0930\u094D\u0935\u0930 (\u0905\u0927\u093F\u0915\u0924\u092E {max})", + "iceErr.invalidEntry": "{label}: \u0917\u093C\u0932\u0924 \u092A\u094D\u0930\u0935\u093F\u0937\u094D\u091F\u093F", + "iceErr.urlCount": "{label}: 1 \u0938\u0947 {max} \u0924\u0915 URL \u091A\u093E\u0939\u093F\u090F", + "iceErr.turnCreds": "{label}: TURN \u0938\u0930\u094D\u0935\u0930\u094B\u0902 \u0915\u094B \u0906\u092E\u0924\u094C\u0930 \u092A\u0930 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0928\u093E\u092E \u0914\u0930 \u092A\u094D\u0930\u092E\u093E\u0923 \u091A\u093E\u0939\u093F\u090F", + "iceUrl.notString": "URL \u090F\u0915 \u0938\u094D\u091F\u094D\u0930\u093F\u0902\u0917 \u0939\u094B\u0928\u093E \u091A\u093E\u0939\u093F\u090F", + "iceUrl.empty": "URL \u0916\u093C\u093E\u0932\u0940 \u0939\u0948", + "iceUrl.tooLong": "URL \u092C\u0939\u0941\u0924 \u0932\u0902\u092C\u093E \u0939\u0948", + "iceUrl.badChars": "URL \u092E\u0947\u0902 \u0905\u092E\u093E\u0928\u094D\u092F \u0905\u0915\u094D\u0937\u0930 \u0939\u0948\u0902", + "iceUrl.badScheme": "URL stun:, stuns:, turn: \u092F\u093E turns: \u0938\u0947 \u0936\u0941\u0930\u0942 \u0939\u094B\u0928\u093E \u091A\u093E\u0939\u093F\u090F", + "iceUrl.badQuery": "URL \u0915\u0940 \u0915\u094D\u0935\u0947\u0930\u0940 \u0917\u093C\u0932\u0924 \u0939\u0948", + "iceUrl.noHost": "URL \u092E\u0947\u0902 \u0939\u094B\u0938\u094D\u091F \u0928\u0939\u0940\u0902 \u0939\u0948", + "iceUrl.badHost": "URL \u0915\u093E \u0939\u094B\u0938\u094D\u091F \u092F\u093E \u092A\u094B\u0930\u094D\u091F \u0917\u093C\u0932\u0924 \u0939\u0948", + "iceUrl.badTransport": "URL \u0915\u0940 \u0915\u094D\u0935\u0947\u0930\u0940 transport=udp \u092F\u093E transport=tcp \u0939\u094B\u0928\u0940 \u091A\u093E\u0939\u093F\u090F", + "msg.off": "\u092C\u0902\u0926", + "file.consentUnavailable": "\u0938\u0939\u092E\u0924\u093F \u0928\u0939\u0940\u0902 \u0932\u0940 \u091C\u093E \u0938\u0915\u0940", + "secLevel.MAXIMUM": "\u0905\u0927\u093F\u0915\u0924\u092E", + "secLevel.INITIALIZING": "\u0936\u0941\u0930\u0942 \u0939\u094B \u0930\u0939\u093E \u0939\u0948", + "secLevel.ERROR": "\u0924\u094D\u0930\u0941\u091F\u093F", + "secLevel.UNKNOWN": "\u0905\u091C\u094D\u091E\u093E\u0924", + "status.error": "\u0924\u094D\u0930\u0941\u091F\u093F", + "offline.disconnect": "\u091C\u0941\u0921\u093C\u093E\u0935 \u0924\u094B\u0921\u093C\u0947\u0902", + "offline.learnMore": "\u0914\u0930 \u091C\u093E\u0928\u0947\u0902", + "pwa.installApp": "\u0910\u092A \u0907\u0902\u0938\u094D\u091F\u0949\u0932 \u0915\u0930\u0947\u0902", + "chat.onWeb": "\u0906\u092A \u0935\u0947\u092C \u0938\u0902\u0938\u094D\u0915\u0930\u0923 \u092A\u0930 \u0939\u0948\u0902" + } +}; + +// src/i18n/index.js +var STORAGE_KEY = "securebit-locale"; +function localeFromPathname(pathname = "/") { + const segment = String(pathname).split("/")[1]; + return SUPPORTED_LOCALES.includes(segment) && segment !== DEFAULT_LOCALE ? segment : null; +} +function localeFromLanguages(languages = []) { + for (const tag of languages) { + const lower = String(tag).toLowerCase(); + const exact = SUPPORTED_LOCALES.find((code) => code.toLowerCase() === lower); + if (exact) return exact; + const base = lower.split("-")[0]; + const partial = SUPPORTED_LOCALES.find((code) => code.toLowerCase().split("-")[0] === base); + if (partial) return partial; + } + return null; +} +function detectLocale({ pathname = "/", stored = null, languages = [] } = {}) { + const fromPath = localeFromPathname(pathname); + if (fromPath) return fromPath; + if (isLocaleRoot(pathname)) return DEFAULT_LOCALE; + if (stored && SUPPORTED_LOCALES.includes(stored)) return stored; + return localeFromLanguages(languages) || DEFAULT_LOCALE; +} +function isLocaleRoot(pathname) { + return pathname === "/" || pathname === "/index.html"; +} +function localeHref(code, pathname = "/") { + const current = localeFromPathname(pathname); + const rest = current ? String(pathname).slice(current.length + 1) : String(pathname); + const tail = rest.replace(/^\/+/, ""); + return code === DEFAULT_LOCALE ? `/${tail}` : `/${code}/${tail}`; +} +function rememberLocale(code) { + try { + localStorage.setItem(STORAGE_KEY, code); + } catch (_) { + } +} +function storedLocale() { + try { + return localStorage.getItem(STORAGE_KEY); + } catch (_) { + return null; + } +} +var resolvedLocale = null; +function currentLocale() { + if (resolvedLocale) return resolvedLocale; + const w = typeof window === "undefined" ? null : window; + if (!w || !w.location) return DEFAULT_LOCALE; + resolvedLocale = detectLocale({ + pathname: w.location.pathname || "/", + stored: storedLocale(), + languages: w.navigator?.languages || [] + }); + return resolvedLocale; +} +function tList(key, locale = currentLocale()) { + const value = DICTIONARIES[locale]?.[key] ?? DICTIONARIES[DEFAULT_LOCALE]?.[key]; + return Array.isArray(value) ? value : []; +} +function languageLinks({ pathname = "/", active = DEFAULT_LOCALE } = {}) { + return SUPPORTED_LOCALES.map((code) => ({ + code, + href: localeHref(code, pathname), + hrefLang: LOCALE_META[code]?.htmlLang || code, + // Listed in its own language: someone looking for German is looking for + // "Deutsch", not for the English word for it. + label: LOCALE_META[code]?.nativeName || code, + // Short code for the collapsed switcher. + abbr: LOCALE_META[code]?.abbr || code.toUpperCase(), + isCurrent: code === active + })); +} +function t(key, vars, locale = currentLocale()) { + const template = DICTIONARIES[locale]?.[key] ?? DICTIONARIES[DEFAULT_LOCALE]?.[key] ?? key; + if (!vars) return template; + return String(template).replace( + /\{(\w+)\}/g, + (match, name) => Object.prototype.hasOwnProperty.call(vars, name) ? String(vars[name]) : match + ); +} + // src/transfer/EnhancedSecureFileTransfer.js var SecureFileTransferContext = class _SecureFileTransferContext { static #instance = null; @@ -4553,7 +11449,7 @@ var EnhancedSecureFileTransfer = class { extensions: [".txt"], mimeTypes: ["text/plain", "application/txt"], maxSize: 10 * 1024 * 1024, - category: "Plain text", + category: t("fileType.text"), description: "TXT" }, images: { @@ -4572,7 +11468,7 @@ var EnhancedSecureFileTransfer = class { ], maxSize: 25 * 1024 * 1024, // 25 MB - category: "Images", + category: t("fileType.images"), description: "JPG, JPEG, PNG, GIF, WEBP, BMP, ICO" }, archives: { @@ -4585,7 +11481,7 @@ var EnhancedSecureFileTransfer = class { ], maxSize: 100 * 1024 * 1024, // 100 MB - category: "Archives", + category: t("fileType.archives"), description: "ZIP" }, // Encrypted voice messages. Recorded in-browser via MediaRecorder and @@ -4609,7 +11505,7 @@ var EnhancedSecureFileTransfer = class { maxSize: 20 * 1024 * 1024, // 20 MB (well beyond any sane voice note) category: "Voice", - description: "Voice messages" + description: t("fileType.voice") } }; this.BLOCKED_EXTENSIONS = /* @__PURE__ */ new Set([ @@ -4682,7 +11578,7 @@ var EnhancedSecureFileTransfer = class { } return { type: "blocked", - category: "Unsupported", + category: t("fileType.unsupported"), description: "Allowed: JPG, JPEG, PNG, GIF, WEBP, BMP, ICO, PDF, TXT, ZIP", maxSize: this.MAX_FILE_SIZE, allowed: false, @@ -5440,7 +12336,7 @@ var EnhancedSecureFileTransfer = class { voice: pendingMetadata.voice || null }); } else { - await this.rejectIncomingFile(metadata.fileId, "User consent unavailable"); + await this.rejectIncomingFile(metadata.fileId, t("file.consentUnavailable")); } } catch (error) { const safeError = SecurityErrorHandler.sanitizeError(error); @@ -7444,9 +14340,9 @@ function parseSdp(sdp) { let tcptype = 0; if (transport === "tcp") { const idx = p.indexOf("tcptype"); - const t = idx >= 0 ? TCPTYPE.indexOf(p[idx + 1]) : -1; - if (t <= 0) continue; - tcptype = t; + const t2 = idx >= 0 ? TCPTYPE.indexOf(p[idx + 1]) : -1; + if (t2 <= 0) continue; + tcptype = t2; } else if (transport !== "udp") { continue; } @@ -7912,9 +14808,9 @@ function encodeText(bytes) { } function decodeText(text2) { if (typeof text2 !== "string") fail("payload must be a string"); - const t = text2.trim(); - if (!t.startsWith(TEXT_PREFIX)) fail("not an SB2 descriptor"); - return fromBase64Url(t.slice(TEXT_PREFIX.length)); + const t2 = text2.trim(); + if (!t2.startsWith(TEXT_PREFIX)) fail("not an SB2 descriptor"); + return fromBase64Url(t2.slice(TEXT_PREFIX.length)); } // src/network/descriptor/keyexchange.js @@ -19820,13 +26716,13 @@ var EnhancedSecureWebRTCManager = class _EnhancedSecureWebRTCManager { _refreshRemoteStream() { const pc = this.peerConnection; if (!pc || typeof pc.getReceivers !== "function") return; - const live = pc.getReceivers().map((r) => r.track).filter((t) => t && (t.kind === "audio" || t.kind === "video") && t.readyState === "live"); + const live = pc.getReceivers().map((r) => r.track).filter((t2) => t2 && (t2.kind === "audio" || t2.kind === "video") && t2.readyState === "live"); const prev = this.remoteMediaStream ? this.remoteMediaStream.getTracks() : []; - const unchanged = prev.length === live.length && prev.every((t) => live.includes(t)); + const unchanged = prev.length === live.length && prev.every((t2) => live.includes(t2)); if (!unchanged) { this.remoteMediaStream = new MediaStream(live); } - this._updateCallState({ remoteHasVideo: live.some((t) => t.kind === "video") }); + this._updateCallState({ remoteHasVideo: live.some((t2) => t2.kind === "video") }); } // Remote tracks can take a beat to go 'live' after setRemoteDescription, and // ontrack may not fire for reused transceivers — so refresh now and shortly @@ -19904,9 +26800,9 @@ var EnhancedSecureWebRTCManager = class _EnhancedSecureWebRTCManager { _stopLocalMediaPermanently() { try { if (this.localMediaStream) { - for (const t of this.localMediaStream.getTracks()) { + for (const t2 of this.localMediaStream.getTracks()) { try { - t.stop(); + t2.stop(); } catch (_) { } } @@ -19920,9 +26816,9 @@ var EnhancedSecureWebRTCManager = class _EnhancedSecureWebRTCManager { _applyCallCodecPrefs() { try { const trs = this.peerConnection?.getTransceivers?.() || []; - const audioTr = trs.find((t) => t.sender && t.sender === this._callAudioSender); + const audioTr = trs.find((t2) => t2.sender && t2.sender === this._callAudioSender); if (audioTr) applyAudioCodecPreferences(audioTr); - const videoTr = trs.find((t) => t.sender && t.sender === this._callVideoSender); + const videoTr = trs.find((t2) => t2.sender && t2.sender === this._callVideoSender); if (videoTr) applyVideoCodecPreferences(videoTr); } catch (_) { } @@ -20177,8 +27073,8 @@ var EnhancedSecureWebRTCManager = class _EnhancedSecureWebRTCManager { // Mute / unmute the microphone (no renegotiation — just toggles the track). setMicEnabled(enabled) { if (this.localMediaStream) { - this.localMediaStream.getAudioTracks().forEach((t) => { - t.enabled = enabled; + this.localMediaStream.getAudioTracks().forEach((t2) => { + t2.enabled = enabled; }); } this._updateCallState({ micEnabled: enabled }); @@ -20191,8 +27087,8 @@ var EnhancedSecureWebRTCManager = class _EnhancedSecureWebRTCManager { async setCameraEnabled(enabled) { if (!enabled) { if (this.localMediaStream) { - this.localMediaStream.getVideoTracks().forEach((t) => { - t.enabled = false; + this.localMediaStream.getVideoTracks().forEach((t2) => { + t2.enabled = false; }); } this._updateCallState({ cameraEnabled: false }); @@ -20200,8 +27096,8 @@ var EnhancedSecureWebRTCManager = class _EnhancedSecureWebRTCManager { } const existing = this.localMediaStream?.getVideoTracks?.() || []; if (existing.length) { - existing.forEach((t) => { - t.enabled = true; + existing.forEach((t2) => { + t2.enabled = true; }); this._updateCallState({ cameraEnabled: true, withVideo: true }); return; @@ -21332,7 +28228,126 @@ var SecureMasterKeyManager = class { var import_NotificationIntegration = __toESM(require_NotificationIntegration()); // package.json -var version = "6.2.0"; +var version = "6.3.0"; + +// src/components/ui/LanguageSwitcher.jsx +var LanguageSwitcher = () => { + if (SUPPORTED_LOCALES.length < 2) return null; + const [open, setOpen] = React.useState(false); + const rootRef = React.useRef(null); + const pathname = typeof window !== "undefined" ? window.location.pathname : "/"; + const links = languageLinks({ pathname, active: currentLocale() }); + const active = links.find((l) => l.isCurrent) || links[0]; + React.useEffect(() => { + if (!open) return void 0; + const onDown = (e) => { + if (rootRef.current && !rootRef.current.contains(e.target)) setOpen(false); + }; + const onKey = (e) => { + if (e.key === "Escape") setOpen(false); + }; + document.addEventListener("pointerdown", onDown); + document.addEventListener("keydown", onKey); + return () => { + document.removeEventListener("pointerdown", onDown); + document.removeEventListener("keydown", onKey); + }; + }, [open]); + const trigger = React.createElement("button", { + key: "trigger", + type: "button", + onClick: () => setOpen((v) => !v), + "aria-haspopup": "menu", + "aria-expanded": open ? "true" : "false", + "aria-label": t("language.label"), + style: { + display: "flex", + alignItems: "center", + gap: "6px", + padding: "7px 10px", + borderRadius: "9px", + border: "1px solid rgba(255,255,255,0.07)", + background: open ? "rgba(255,255,255,0.06)" : "rgba(255,255,255,0.02)", + color: "#cfcfd4", + font: "inherit", + fontSize: "12.5px", + fontWeight: 600, + cursor: "pointer", + transition: "background .15s, color .15s" + } + }, [ + React.createElement("span", { key: "c" }, active ? active.abbr : ""), + React.createElement("svg", { + key: "v", + width: 11, + height: 11, + viewBox: "0 0 24 24", + fill: "none", + stroke: "currentColor", + strokeWidth: 2.4, + strokeLinecap: "round", + strokeLinejoin: "round", + style: { transform: open ? "rotate(180deg)" : "none", transition: "transform .18s" }, + dangerouslySetInnerHTML: { __html: '' } + }) + ]); + const menu = React.createElement("div", { + key: "menu", + role: "menu", + // Kept in the DOM when shut: the links stay followable and the menu costs nothing + // to reopen. + style: { + position: "absolute", + top: "calc(100% + 6px)", + right: 0, + zIndex: 60, + display: open ? "block" : "none", + minWidth: "170px", + padding: "5px", + borderRadius: "11px", + border: "1px solid rgba(255,255,255,0.08)", + background: "#161618", + boxShadow: "0 14px 34px rgba(0,0,0,0.45)" + } + }, links.map((link) => React.createElement("a", { + key: link.code, + href: link.href, + hrefLang: link.hrefLang, + lang: link.hrefLang, + role: "menuitem", + // aria-current names the page you are on for a screen reader; the weight and + // contrast below say the same thing to everyone else. + "aria-current": link.isCurrent ? "page" : void 0, + // Remember the choice, then let the browser navigate. The click is deliberately + // not intercepted — the next locale is a different document. + onClick: () => rememberLocale(link.code), + style: { + display: "flex", + alignItems: "center", + gap: "10px", + padding: "8px 10px", + borderRadius: "8px", + fontSize: "13px", + fontWeight: link.isCurrent ? 600 : 500, + color: link.isCurrent ? "#e8e8eb" : "#9a9aa2", + background: link.isCurrent ? "rgba(255,255,255,0.06)" : "transparent", + textDecoration: "none", + whiteSpace: "nowrap" + } + }, [ + React.createElement("span", { + key: "a", + style: { fontSize: "11px", fontWeight: 700, letterSpacing: "0.4px", color: "#6b6b73", width: "22px" } + }, link.abbr), + React.createElement("span", { key: "n" }, link.label) + ]))); + return React.createElement("nav", { + ref: rootRef, + "aria-label": t("language.label"), + style: { position: "relative", display: "inline-flex" } + }, [trigger, menu]); +}; +window.LanguageSwitcher = LanguageSwitcher; // src/components/ui/Header.jsx var APP_VERSION = `v${version}`; @@ -21502,7 +28517,7 @@ var EnhancedMinimalHeader = ({ } else { } if (!realTestResults && !realSecurityLevel) { - alert("Security verification in progress...\nPlease wait for real-time cryptographic verification to complete."); + alert(t("sec.verificationWait")); return; } let securityData = realTestResults || realSecurityLevel; @@ -21513,7 +28528,7 @@ var EnhancedMinimalHeader = ({ color: "gray", verificationResults: {}, timestamp: Date.now(), - details: "Security verification not available", + details: t("sec.verificationUnavailable"), isRealData: false, passedChecks: 0, totalChecks: 0 @@ -21526,7 +28541,7 @@ var EnhancedMinimalHeader = ({ `; message += `Verification Time: ${new Date(securityData.timestamp).toLocaleTimeString()} `; - message += `Data Source: ${securityData.isRealData ? "Real Cryptographic Tests" : "Simulated Data"} + message += `Data Source: ${securityData.isRealData ? t("sec.realTests") : t("sec.simulatedData")} `; if (securityData.verificationResults) { @@ -21538,7 +28553,7 @@ var EnhancedMinimalHeader = ({ message += "PASSED TESTS:\n"; passedTests.forEach(([key, result]) => { const testName = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase()); - message += ` ${testName}: ${result.details || "Test passed"} + message += ` ${testName}: ${result.details || t("sec.testPassed")} `; }); message += "\n"; @@ -21547,7 +28562,7 @@ var EnhancedMinimalHeader = ({ message += "FAILED/UNAVAILABLE TESTS:\n"; failedTests.forEach(([key, result]) => { const testName = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase()); - message += ` ${testName}: ${result.details || "Test failed or unavailable"} + message += ` ${testName}: ${result.details || t("sec.testFailed")} `; }); message += "\n"; @@ -21568,13 +28583,13 @@ var EnhancedMinimalHeader = ({ "ECDSA Digital Signatures": securityData.verificationResults.verifyECDSASignatures?.passed || false, "ECDH Key Exchange": securityData.verificationResults.verifyECDHKeyExchange?.passed || false, "AES-GCM Encryption": securityData.verificationResults.verifyEncryption?.passed || false, - "Message Integrity (HMAC)": securityData.verificationResults.verifyMessageIntegrity?.passed || false, - "Perfect Forward Secrecy": securityData.verificationResults.verifyPerfectForwardSecrecy?.passed || false, - "Replay Protection": securityData.verificationResults.verifyReplayProtection?.passed || false, + [t("sec.messageIntegrity")]: securityData.verificationResults.verifyMessageIntegrity?.passed || false, + [t("sec.forwardSecrecy")]: securityData.verificationResults.verifyPerfectForwardSecrecy?.passed || false, + [t("sec.replayProtection")]: securityData.verificationResults.verifyReplayProtection?.passed || false, "DTLS Fingerprint": securityData.verificationResults.verifyDTLSFingerprint?.passed || false, "SAS Verification": securityData.verificationResults.verifySASVerification?.passed || false, - "Metadata Protection": securityData.verificationResults.verifyMetadataProtection?.passed || false, - "Traffic Obfuscation": securityData.verificationResults.verifyTrafficObfuscation?.passed || false + [t("sec.metadataProtection")]: securityData.verificationResults.verifyMetadataProtection?.passed || false, + [t("sec.trafficObfuscation")]: securityData.verificationResults.verifyTrafficObfuscation?.passed || false }; Object.entries(features).forEach(([feature, isEnabled]) => { message += `${isEnabled ? "\u2705" : "\u274C"} ${feature} @@ -21603,7 +28618,7 @@ var EnhancedMinimalHeader = ({ `; } message += ` -${securityData.details || "Real cryptographic verification completed"}`; +${securityData.details || t("sec.verificationDone")}`; if (securityData.isRealData) { message += "\n\n\u2705 This is REAL-TIME verification using actual cryptographic functions."; } else { @@ -21655,49 +28670,49 @@ ${securityData.details || "Real cryptographic verification completed"}`; switch (status) { case "connected": return { - text: "Connected", + text: t("status.connected"), className: "status-connected", badgeClass: "bg-green-500/10 text-green-400 border-green-500/20" }; case "verifying": return { - text: "Verifying...", + text: t("status.verifying"), className: "status-verifying", badgeClass: "bg-purple-500/10 text-purple-400 border-purple-500/20" }; case "connecting": return { - text: "Connecting...", + text: t("status.connecting"), className: "status-connecting", badgeClass: "bg-blue-500/10 text-blue-400 border-blue-500/20" }; case "retrying": return { - text: "Retrying...", + text: t("status.retrying"), className: "status-connecting", badgeClass: "bg-yellow-500/10 text-yellow-400 border-yellow-500/20" }; case "failed": return { - text: "Error", + text: t("status.error"), className: "status-failed", badgeClass: "bg-red-500/10 text-red-400 border-red-500/20" }; case "reconnecting": return { - text: "Reconnecting...", + text: t("status.reconnecting"), className: "status-connecting", badgeClass: "bg-yellow-500/10 text-yellow-400 border-yellow-500/20" }; case "peer_disconnected": return { - text: "Peer disconnected", + text: t("status.peerDisconnected"), className: "status-failed", badgeClass: "bg-orange-500/10 text-orange-400 border-orange-500/20" }; default: return { - text: "Not connected", + text: t("status.notConnected"), className: "status-disconnected", badgeClass: "bg-gray-500/10 text-gray-400 border-gray-500/20" }; @@ -21708,7 +28723,7 @@ ${securityData.details || "Real cryptographic verification completed"}`; const getSecurityIndicatorDetails = () => { if (!displaySecurityLevel) { return { - tooltip: "Security verification in progress...", + tooltip: t("sec.verificationInProgress"), isVerified: false, dataSource: "loading" }; @@ -21780,17 +28795,20 @@ Right-click or Ctrl+click to disconnect`, React.createElement("span", { key: "n", style: { fontSize: "16px", fontWeight: 800, letterSpacing: "-0.3px", color: "#e8e8eb" } }, "SecureBit"), React.createElement("span", { key: "v", style: { fontFamily: MONO, fontSize: "10px", fontWeight: 500, color: "#56565e" } }, APP_VERSION) ]), - React.createElement("div", { key: "r2", className: "hidden sm:block", style: { fontSize: "11px", color: "#6b6b73", fontWeight: 500 } }, "End-to-end encrypted") + React.createElement("div", { key: "r2", className: "hidden sm:block", style: { fontSize: "11px", color: "#6b6b73", fontWeight: 500 } }, t("hdr.tagline")) ]) ]), // Right: controls React.createElement("div", { key: "right", style: { display: "flex", alignItems: "center", gap: "9px" } }, [ + // Landing only: switching locale reloads the document, which would + // tear down an live peer connection if offered inside the chat. + onLanding && React.createElement(LanguageSwitcher, { key: "lang" }), !onLanding && React.createElement("button", { key: "net", type: "button", onClick: () => window.dispatchEvent(new CustomEvent("securebit:open-network-settings")), - title: "Advanced network settings (STUN/TURN)", - "aria-label": "Advanced network settings", + title: t("hdr.netSettingsTitle"), + "aria-label": t("hdr.netSettings"), className: "sb-disconnect", style: { display: "grid", placeItems: "center", width: "38px", height: "38px", borderRadius: "9px", border: "1px solid rgba(255,255,255,0.07)", background: "rgba(255,255,255,0.02)", color: "#9a9aa2", cursor: "pointer", transition: "all .15s" } }, React.createElement("i", { className: "fas fa-network-wired", style: { fontSize: "13px" } })), @@ -21806,7 +28824,7 @@ Right-click or Ctrl+click to disconnect`, style: { display: "flex", alignItems: "center", gap: "8px", padding: "7px 12px", borderRadius: "9px", border: "1px solid rgba(255,255,255,0.07)", background: "rgba(255,255,255,0.02)", cursor: "pointer" } }, [ React.createElement("i", { key: "i", className: "fas fa-shield-halved", style: { fontSize: "13px", color: secColor } }), - React.createElement("span", { key: "l", className: "hidden sm:inline", style: { fontSize: "12.5px", fontWeight: 600, color: "#e8e8eb" } }, String(displaySecurityLevel.level)), + React.createElement("span", { key: "l", className: "hidden sm:inline", style: { fontSize: "12.5px", fontWeight: 600, color: "#e8e8eb" } }, t(`secLevel.${displaySecurityLevel.level}`) === `secLevel.${displaySecurityLevel.level}` ? String(displaySecurityLevel.level) : t(`secLevel.${displaySecurityLevel.level}`)), React.createElement("span", { key: "s", style: { fontFamily: MONO, fontSize: "11.5px", color: "#8a8a92" } }, displaySecurityLevel.score + "%") ]), !onLanding && React.createElement("div", { key: "status", style: { display: "flex", alignItems: "center", gap: "8px", padding: "8px 13px", borderRadius: "9px", border: "1px solid rgba(255,255,255,0.07)", background: "rgba(255,255,255,0.02)" } }, [ @@ -21820,7 +28838,7 @@ Right-click or Ctrl+click to disconnect`, style: { display: "flex", alignItems: "center", gap: "7px", padding: "8px 14px", borderRadius: "9px", border: "1px solid rgba(255,255,255,0.08)", background: "transparent", color: "#9a9aa2", fontFamily: "inherit", fontSize: "13px", fontWeight: 600, cursor: "pointer", transition: "all .15s" } }, [ React.createElement("i", { key: "i", className: "fas fa-power-off", style: { fontSize: "12px" } }), - React.createElement("span", { key: "t", className: "sb-hide-sm" }, "Disconnect") + React.createElement("span", { key: "t", className: "sb-hide-sm" }, t("hdr.disconnect")) ]) ]) ]) @@ -21931,21 +28949,21 @@ var BecomePartner = () => { { id: "aegis", name: "Aegis Investment", - logo: "logo/aegis.png", + logo: "/logo/aegis.png", logoHeight: "42px", url: "https://aegis-investment.com/", - desc: "Capital partner securing confidential financial communications across its portfolio.", - role: "Strategic backer", + desc: t("partners.aegis.desc"), + role: t("partners.aegis.role"), delay: ".5s" }, { id: "furi", name: "FuriLabs", - logo: "logo/furi.png", + logo: "/logo/furi.png", logoHeight: "54px", url: "https://furilabs.com/", - desc: "Privacy-first Linux phones that ship SecureBit as a default secure channel.", - role: "Technology partner", + desc: t("partners.furilabs.desc"), + role: t("partners.furilabs.role"), delay: ".56s" } ]; @@ -22039,8 +29057,8 @@ var BecomePartner = () => { key: "icon", style: { width: "48px", height: "48px", borderRadius: "13px", display: "grid", placeItems: "center", background: "rgba(240,137,42,0.12)", border: "1px solid rgba(240,137,42,0.28)", marginBottom: "24px" } }, svg2('', 23, ACCENT, 1.9)), - React.createElement("h3", { key: "title", style: { margin: "0 0 8px", fontSize: "21px", fontWeight: 800, letterSpacing: "-0.4px", color: "#f4f4f6" } }, "Become a partner"), - React.createElement("p", { key: "desc", style: { margin: 0, fontSize: "14.5px", lineHeight: 1.6, color: "#8a8a92" } }, "Building privacy hardware or infrastructure? Let's integrate SecureBit.") + React.createElement("h3", { key: "title", style: { margin: "0 0 8px", fontSize: "21px", fontWeight: 800, letterSpacing: "-0.4px", color: "#f4f4f6" } }, t("partners.inviteTitle")), + React.createElement("p", { key: "desc", style: { margin: 0, fontSize: "14.5px", lineHeight: 1.6, color: "#8a8a92" } }, t("partners.inviteDesc")) ]), React.createElement("span", { key: "btn", @@ -22065,7 +29083,7 @@ var BecomePartner = () => { transition: "background .2s cubic-bezier(.2,.7,.3,1), transform .2s cubic-bezier(.2,.7,.3,1)" } }, [ - "Start a conversation", + t("partners.inviteCta"), svg2('', 17, "currentColor", 2.2) ]) ]); @@ -22078,20 +29096,13 @@ var BecomePartner = () => { React.createElement("div", { key: "eyebrow", style: { fontFamily: MONO, fontSize: "11px", fontWeight: 600, color: "#6b6b73", textTransform: "uppercase", letterSpacing: "1.6px", marginBottom: "14px" } - }, "Partners & ecosystem"), - React.createElement("div", { - key: "row", - style: { display: "flex", alignItems: "flex-end", justifyContent: "space-between", gap: "32px", flexWrap: "wrap" } - }, [ - React.createElement("h2", { - key: "h2", - style: { margin: 0, fontSize: isMobile ? "30px" : "40px", fontWeight: 800, letterSpacing: "-1.1px", lineHeight: 1.04, color: "#f4f4f6" } - }, "Trusted by our partners"), - React.createElement("p", { - key: "sub", - style: { margin: "0 0 4px", fontSize: "15px", lineHeight: 1.55, color: "#8a8a92", maxWidth: "360px" } - }, "A small, vetted circle \u2014 no pay-to-list logos and no badges we can't stand behind.") - ]) + }, t("partners.eyebrow")), + // The heading used to share a flex row with a strapline; with that gone the + // row had one child and nothing left to arrange. + React.createElement("h2", { + key: "h2", + style: { margin: 0, fontSize: isMobile ? "30px" : "40px", fontWeight: 800, letterSpacing: "-1.1px", lineHeight: 1.04, color: "#f4f4f6" } + }, t("partners.heading")) ]), // Cards React.createElement("div", { @@ -22141,42 +29152,42 @@ var UniqueFeatureSlider = () => { const slides = [ { num: "01", - title: ["Layered", "encryption core"], - collapsed: "Encryption core", - desc: "ECDH P-384 key exchange, AES-256-GCM payloads, ECDSA signatures and full ASN.1 validation \u2014 composed into one hardened pipeline.", - tags: ["ECDH P-384", "AES-256-GCM", "ECDSA", "ASN.1"], + title: [t("unique.s1.titleTop"), t("unique.s1.titleBottom")], + collapsed: t("unique.s1.collapsed"), + desc: t("unique.s1.desc"), + tags: tList("unique.s1.tags"), icon: '' }, { num: "02", - title: ["Pure P2P", "WebRTC"], - collapsed: "Pure P2P WebRTC", - desc: "Messages travel directly between devices over WebRTC. No relay holds your data \u2014 the server only helps two peers find each other.", - tags: ["DTLS 1.3", "No relay"], + title: [t("unique.s2.titleTop"), t("unique.s2.titleBottom")], + collapsed: t("unique.s2.collapsed"), + desc: t("unique.s2.desc"), + tags: tList("unique.s2.tags"), icon: '' }, { num: "03", - title: ["Perfect", "forward secrecy"], - collapsed: "Forward secrecy", - desc: "Session keys rotate continuously and are discarded after use, so a single compromised key can never unlock past conversations.", - tags: ["Ephemeral keys", "Auto-rotate"], + title: [t("unique.s3.titleTop"), t("unique.s3.titleBottom")], + collapsed: t("unique.s3.collapsed"), + desc: t("unique.s3.desc"), + tags: tList("unique.s3.tags"), icon: '' }, { num: "04", - title: ["Traffic", "obfuscation"], - collapsed: "Traffic obfuscation", - desc: "Packet sizes and timing are padded and randomized, hiding metadata patterns from anyone watching the wire.", - tags: ["Packet padding", "Timing jitter"], + title: [t("unique.s4.titleTop"), t("unique.s4.titleBottom")], + collapsed: t("unique.s4.collapsed"), + desc: t("unique.s4.desc"), + tags: tList("unique.s4.tags"), icon: '' }, { num: "05", - title: ["Zero data", "collection"], - collapsed: "Zero data collection", - desc: "No accounts, no logs, no message storage. There is nothing on a server to leak, subpoena, or sell.", - tags: ["No accounts", "No logs"], + title: [t("unique.s5.titleTop"), t("unique.s5.titleBottom")], + collapsed: t("unique.s5.collapsed"), + desc: t("unique.s5.desc"), + tags: tList("unique.s5.tags"), icon: '' } ]; @@ -22337,11 +29348,11 @@ var UniqueFeatureSlider = () => { React.createElement("div", { key: "eyebrow", style: { fontFamily: MONO, fontSize: "11px", fontWeight: 600, color: "#6b6b73", textTransform: "uppercase", letterSpacing: "1.4px", marginBottom: "12px" } - }, "What sets us apart"), + }, t("unique.eyebrow")), React.createElement("h2", { key: "h2", style: { margin: 0, fontSize: isMobile ? "28px" : "38px", fontWeight: 800, letterSpacing: "-1.1px", lineHeight: 1.05, color: "#f4f4f6" } - }, "Why SecureBit is unique") + }, t("unique.heading")) ]), React.createElement("div", { key: "nav", style: { display: "flex", alignItems: "center", gap: "10px", flex: "none" } }, [ navBtn("prev", () => go(-1), ''), @@ -22390,117 +29401,34 @@ function Roadmap() { const MONO = "'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace"; const SANS = "'Manrope', system-ui, -apple-system, sans-serif"; const DATA = [ - { - v: "v1.0", - title: "Start of Development", - sub: "Idea, prototype, and infrastructure setup", - status: "released", - date: "Early 2025", - features: ["Concept and requirements formation", "Stack selection: WebRTC, P2P, cryptography", "First messaging prototypes", "Repository creation and CI", "Basic encryption architecture", "UX/UI design"] - }, - { - v: "v1.5", - title: "Alpha Release", - sub: "First public alpha: basic chat and key exchange", - status: "released", - date: "Spring 2025", - features: ["Basic P2P messaging via WebRTC", "Simple E2E encryption (demo scheme)", "Stable signaling and reconnection", "Minimal UX for testing", "Feedback collection from early testers"] - }, - { - v: "v2.0", - title: "Security Hardened", - sub: "Security strengthening and stable branch release", - status: "released", - date: "Summer 2025", - features: ["ECDH/ECDSA implementation in production", "Perfect Forward Secrecy and key rotation", "Improved authentication checks", "File encryption and large payload transfers", "Audit of basic cryptoprocesses"] - }, - { - v: "v3.0", - title: "Scaling & Stability", - sub: "Network scaling and stability improvements", - status: "released", - date: "Fall 2025", - features: ["Optimization of P2P connections and NAT traversal", "Reconnection mechanisms and message queues", "Reduced battery consumption on mobile", "Multi-device synchronization support", "Monitoring and logging tools for developers"] - }, - { - v: "v3.5", - title: "Privacy-first Release", - sub: "Focus on privacy: minimizing metadata", - status: "released", - date: "Winter 2025", - features: ["Metadata protection and fingerprint reduction", "Experiments with onion routing and DHT", "Options for anonymous connections", "Preparation for open code audit", "Improved user verification processes"] - }, - { - v: "v4.5", - title: "Enhanced Security Edition", - sub: "18-layer military-grade cryptography with complete ASN.1 validation", - status: "released", - date: "Late 2025", - features: ["ECDH + DTLS + SAS triple-layer security", "ECDH P-384 + AES-GCM 256-bit encryption", "DTLS fingerprint verification", "SAS (Short Authentication String) verification", "Perfect Forward Secrecy with key rotation", "Enhanced MITM attack prevention", "Complete ASN.1 DER validation", "OID and EC point verification", "SPKI structure validation", "P2P WebRTC architecture", "Metadata protection", "100% open source code"] - }, - { - v: "v5.0", - title: "Desktop Edition", - sub: "Native desktop apps for Windows, macOS, and Linux", - status: "released", - date: "Early 2026", - features: ["Windows desktop app (Tauri v2)", "macOS desktop app (Tauri v2)", "Linux AppImage support (Tauri v2)", "Real-time notifications", "Automatic reconnection", "Cross-device synchronization", "Improved UX/UI", "Support for files up to 100MB"] - }, - { - v: "v5.5", - title: "Secure Voice & Calls", - sub: "Encrypted voice messages, audio calls, and video calls", - status: "released", - date: "Early 2026", - features: ["End-to-end encrypted voice messages", "1:1 encrypted audio calls (WebRTC)", "1:1 encrypted video calls (WebRTC)", "Perfect Forward Secrecy for live media", "SRTP/DTLS-protected media streams", "In-call SAS verification", "Call notifications and auto-reconnection", "Low-latency P2P media"] - }, - { - v: "v6.0", - title: "Group Communications", - sub: "Group chats with preserved privacy", - status: "current", - date: "Now", - features: ["P2P group chats up to 8 participants", "Mesh delivery with signed relay fallback", "One group safety code, compared by everyone", "Commit-then-reveal ceremony against code grinding", "Per-group identity keys, ephemeral by design", "Signed membership with epoch ordering", "Signed messages, so a split transcript is provable", "No server, no shared group key, no history"] - }, - { - v: "v6.5", - title: "Mobile Edition", - sub: "Native mobile apps for iOS and Android", - status: "dev", - date: "Q2 2027", - features: ["iOS native app (Swift/SwiftUI)", "Android native app (Kotlin/Jetpack Compose)", "PWA support for mobile browsers", "Real-time push notifications", "Battery optimization", "Mobile-optimized UX/UI", "Offline message queuing", "Biometric authentication"] - }, - { - v: "v7.0", - title: "Quantum-Resistant Edition", - sub: "Protection against quantum computers", - status: "planned", - date: "Q4 2027", - features: ["Post-quantum cryptography CRYSTALS-Kyber", "SPHINCS+ digital signatures", "Hybrid scheme: classic + PQ", "Quantum-safe key exchange", "Updated hashing algorithms", "Migration of existing sessions", "Compatibility with v5.x", "Quantum-resistant protocols"] - }, - { - v: "v7.5", - title: "Decentralized Network", - sub: "Fully decentralized network", - status: "research", - date: "2028", - features: ["Node mesh network", "DHT for peer discovery", "Built-in onion routing", "Tokenomics and node incentives", "Governance via DAO", "Interoperability with other networks", "Cross-platform compatibility", "Self-healing network"] - }, - { - v: "v8.0", - title: "AI Privacy Assistant", - sub: "AI for privacy and security", - status: "research", - date: "2028+", - features: ["Local AI threat analysis", "Automatic MITM detection", "Adaptive cryptography", "Personalized security recommendations", "Zero-knowledge machine learning", "Private AI assistant", "Predictive security", "Autonomous attack protection"] - } - ]; + { v: "v1.0", k: "r1", status: "released" }, + { v: "v1.5", k: "r2", status: "released" }, + { v: "v2.0", k: "r3", status: "released" }, + { v: "v3.0", k: "r4", status: "released" }, + { v: "v3.5", k: "r5", status: "released" }, + { v: "v4.5", k: "r6", status: "released" }, + { v: "v5.0", k: "r7", status: "released" }, + { v: "v5.5", k: "r8", status: "released" }, + { v: "v6.0", k: "r9", status: "current" }, + { v: "v6.5", k: "r10", status: "dev" }, + { v: "v7.0", k: "r11", status: "planned" }, + { v: "v7.5", k: "r12", status: "research" }, + { v: "v8.0", k: "r13", status: "research" } + ].map((d) => ({ + ...d, + // Version tag and status are identifiers, not copy; everything a reader + // actually reads comes from the locale file. + title: t(`roadmap.${d.k}.title`), + sub: t(`roadmap.${d.k}.sub`), + date: t(`roadmap.${d.k}.date`), + features: tList(`roadmap.${d.k}.features`) + })); const META = { - released: { word: "Released", color: "#3ecf8e", line: "rgba(62,207,142,0.32)" }, - current: { word: "Current", color: "#f0892a", line: "rgba(240,137,42,0.32)" }, - dev: { word: "In development", color: "#e3b341", line: "rgba(255,255,255,0.08)" }, - planned: { word: "Planned", color: "#8a8a92", line: "rgba(255,255,255,0.08)" }, - research: { word: "Research", color: "#6b6b73", line: "rgba(255,255,255,0.08)" } + released: { word: t("roadmap.status.released"), color: "#3ecf8e", line: "rgba(62,207,142,0.32)" }, + current: { word: t("roadmap.status.current"), color: "#f0892a", line: "rgba(240,137,42,0.32)" }, + dev: { word: t("roadmap.status.dev"), color: "#e3b341", line: "rgba(255,255,255,0.08)" }, + planned: { word: t("roadmap.status.planned"), color: "#8a8a92", line: "rgba(255,255,255,0.08)" }, + research: { word: t("roadmap.status.research"), color: "#6b6b73", line: "rgba(255,255,255,0.08)" } }; const [open, setOpen] = React.useState({}); const isOpen = (i) => open[i] === void 0 ? DATA[i].status === "current" : open[i]; @@ -22513,6 +29441,7 @@ function Roadmap() { const shipped = DATA.filter((d) => d.status === "released" || d.status === "current").length; const upcoming = total - shipped; const shippedPct = (shipped / total * 100).toFixed(1) + "%"; + const [progressBefore, progressAfter] = t("roadmap.progress", { total }).split("{shipped}"); const renderNode = (status) => { if (status === "released") { return /* @__PURE__ */ React.createElement("div", { style: { position: "absolute", left: "13px", top: "16px", width: "28px", height: "28px", borderRadius: "50%", display: "grid", placeItems: "center", background: "linear-gradient(rgba(62,207,142,0.16),rgba(62,207,142,0.16)), #0f0f11", border: "1px solid rgba(62,207,142,0.4)", zIndex: 2 } }, /* @__PURE__ */ React.createElement("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "#3ecf8e", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React.createElement("path", { d: "M5 13l4 4 10-11" }))); @@ -22525,7 +29454,7 @@ function Roadmap() { } return /* @__PURE__ */ React.createElement("div", { style: { position: "absolute", left: "13px", top: "16px", width: "28px", height: "28px", borderRadius: "50%", display: "grid", placeItems: "center", background: "#0f0f11", border: `1px ${status === "research" ? "dashed" : "solid"} rgba(255,255,255,0.18)`, zIndex: 2 } }, /* @__PURE__ */ React.createElement("span", { style: { width: "7px", height: "7px", borderRadius: "50%", background: META[status].color } })); }; - return /* @__PURE__ */ React.createElement("section", { style: { width: "100%", color: "#e8e8eb", fontFamily: SANS, padding: isMobile ? "48px 0" : "64px 0", background: "radial-gradient(1200px 720px at 50% -8%, rgba(240,137,42,0.05), transparent 60%), #0f0f11" } }, /* @__PURE__ */ React.createElement("style", { dangerouslySetInnerHTML: { __html: "@keyframes rmExp{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes rmPulse{0%,100%{box-shadow:0 0 0 0 rgba(240,137,42,0.18)}60%{box-shadow:0 0 0 9px rgba(240,137,42,0)}}" } }), /* @__PURE__ */ React.createElement("div", { style: { maxWidth: "1040px", margin: "0 auto", padding: isMobile ? "0 18px" : "0 40px" } }, /* @__PURE__ */ React.createElement("div", { style: { marginBottom: "30px" } }, /* @__PURE__ */ React.createElement("div", { style: { fontFamily: MONO, fontSize: "11px", fontWeight: 600, color: "#6b6b73", textTransform: "uppercase", letterSpacing: "1.6px", marginBottom: "13px" } }, "Development Roadmap"), /* @__PURE__ */ React.createElement("h2", { style: { margin: "0 0 14px", fontSize: isMobile ? "27px" : "34px", fontWeight: 800, letterSpacing: "-1px", lineHeight: 1.08, color: "#f4f4f6" } }, "The evolution of SecureBit"), /* @__PURE__ */ React.createElement("p", { style: { margin: 0, fontSize: "15.5px", lineHeight: 1.6, color: "#8a8a92", maxWidth: "660px" } }, "From the first prototype to a quantum-resistant, decentralized network \u2014 with complete ASN.1 validation at every layer.")), /* @__PURE__ */ React.createElement("div", { style: { display: "flex", alignItems: "center", gap: "18px", flexWrap: "wrap", padding: "18px 22px", borderRadius: "14px", background: "#141416", border: "1px solid rgba(255,255,255,0.06)", marginBottom: "36px" } }, /* @__PURE__ */ React.createElement("div", { style: { fontFamily: MONO, fontSize: "12px", fontWeight: 600, color: "#e8e8eb", whiteSpace: "nowrap" } }, /* @__PURE__ */ React.createElement("span", { style: { color: "#3ecf8e" } }, shipped), " of ", total, " milestones shipped"), /* @__PURE__ */ React.createElement("div", { style: { flex: "1 1 240px", minWidth: "200px", height: "8px", borderRadius: "99px", background: "#0c0c0e", border: "1px solid rgba(255,255,255,0.06)", overflow: "hidden" } }, /* @__PURE__ */ React.createElement("div", { style: { height: "100%", width: shippedPct, background: "linear-gradient(90deg, #3ecf8e, #f0892a)" } })), /* @__PURE__ */ React.createElement("div", { style: { fontFamily: MONO, fontSize: "11px", fontWeight: 600, color: "#6b6b73", textTransform: "uppercase", letterSpacing: "0.8px", whiteSpace: "nowrap" } }, upcoming, " on the way")), DATA.map((d, i) => { + return /* @__PURE__ */ React.createElement("section", { style: { width: "100%", color: "#e8e8eb", fontFamily: SANS, padding: isMobile ? "48px 0" : "64px 0", background: "radial-gradient(1200px 720px at 50% -8%, rgba(240,137,42,0.05), transparent 60%), #0f0f11" } }, /* @__PURE__ */ React.createElement("style", { dangerouslySetInnerHTML: { __html: "@keyframes rmExp{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes rmPulse{0%,100%{box-shadow:0 0 0 0 rgba(240,137,42,0.18)}60%{box-shadow:0 0 0 9px rgba(240,137,42,0)}}" } }), /* @__PURE__ */ React.createElement("div", { style: { maxWidth: "1040px", margin: "0 auto", padding: isMobile ? "0 18px" : "0 40px" } }, /* @__PURE__ */ React.createElement("div", { style: { marginBottom: "30px" } }, /* @__PURE__ */ React.createElement("div", { style: { fontFamily: MONO, fontSize: "11px", fontWeight: 600, color: "#6b6b73", textTransform: "uppercase", letterSpacing: "1.6px", marginBottom: "13px" } }, t("roadmap.eyebrow")), /* @__PURE__ */ React.createElement("h2", { style: { margin: "0 0 14px", fontSize: isMobile ? "27px" : "34px", fontWeight: 800, letterSpacing: "-1px", lineHeight: 1.08, color: "#f4f4f6" } }, t("roadmap.heading")), /* @__PURE__ */ React.createElement("p", { style: { margin: 0, fontSize: "15.5px", lineHeight: 1.6, color: "#8a8a92", maxWidth: "660px" } }, t("roadmap.subheading"))), /* @__PURE__ */ React.createElement("div", { style: { display: "flex", alignItems: "center", gap: "18px", flexWrap: "wrap", padding: "18px 22px", borderRadius: "14px", background: "#141416", border: "1px solid rgba(255,255,255,0.06)", marginBottom: "36px" } }, /* @__PURE__ */ React.createElement("div", { style: { fontFamily: MONO, fontSize: "12px", fontWeight: 600, color: "#e8e8eb", whiteSpace: "nowrap" } }, progressBefore, /* @__PURE__ */ React.createElement("span", { style: { color: "#3ecf8e" } }, shipped), progressAfter), /* @__PURE__ */ React.createElement("div", { style: { flex: "1 1 240px", minWidth: "200px", height: "8px", borderRadius: "99px", background: "#0c0c0e", border: "1px solid rgba(255,255,255,0.06)", overflow: "hidden" } }, /* @__PURE__ */ React.createElement("div", { style: { height: "100%", width: shippedPct, background: "linear-gradient(90deg, #3ecf8e, #f0892a)" } })), /* @__PURE__ */ React.createElement("div", { style: { fontFamily: MONO, fontSize: "11px", fontWeight: 600, color: "#6b6b73", textTransform: "uppercase", letterSpacing: "0.8px", whiteSpace: "nowrap" } }, t("roadmap.upcoming", { upcoming }))), DATA.map((d, i) => { const meta = META[d.status]; const opened = isOpen(i); const notLast = i < total - 1; @@ -22544,7 +29473,7 @@ function Roadmap() { /* @__PURE__ */ React.createElement("div", { style: { flex: "none", minWidth: "52px", textAlign: "center", padding: "7px 10px", borderRadius: "9px", background: "#0c0c0e", border: "1px solid rgba(255,255,255,0.07)", fontFamily: MONO, fontSize: "13px", fontWeight: 700, color: d.status === "current" ? "#f0892a" : "#cfcfd4" } }, d.v), /* @__PURE__ */ React.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ React.createElement("div", { style: { fontSize: isMobile ? "15.5px" : "17px", fontWeight: 800, letterSpacing: "-0.4px", color: "#f4f4f6" } }, d.title), !isMobile && /* @__PURE__ */ React.createElement("div", { style: { marginTop: "3px", fontSize: "13.5px", color: "#9a9aa2" } }, d.sub)), /* @__PURE__ */ React.createElement("div", { style: { flex: "none", display: "flex", alignItems: "center", gap: isMobile ? "8px" : "14px" } }, /* @__PURE__ */ React.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: "7px", padding: "6px 11px", borderRadius: "8px", background: hexA(meta.color, 0.1), border: `1px solid ${hexA(meta.color, 0.22)}`, fontFamily: MONO, fontSize: "10.5px", fontWeight: 600, color: meta.color, textTransform: "uppercase", letterSpacing: "0.8px", whiteSpace: "nowrap" } }, /* @__PURE__ */ React.createElement("span", { style: { width: "6px", height: "6px", borderRadius: "50%", background: meta.color } }), !isMobile && meta.word), !isMobile && /* @__PURE__ */ React.createElement("span", { style: { fontFamily: MONO, fontSize: "12px", fontWeight: 500, color: "#8a8a92", whiteSpace: "nowrap", minWidth: "74px", textAlign: "right" } }, d.date), /* @__PURE__ */ React.createElement("span", { style: { color: "#6b6b73", display: "inline-flex", transition: "transform .22s cubic-bezier(.2,.7,.3,1)", transform: opened ? "rotate(180deg)" : "rotate(0deg)" } }, /* @__PURE__ */ React.createElement("svg", { width: "17", height: "17", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.1", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React.createElement("path", { d: "M6 9l6 6 6-6" })))) - ), opened && /* @__PURE__ */ React.createElement("div", { style: { padding: "4px 22px 22px 22px", animation: "rmExp .24s cubic-bezier(.2,.7,.3,1)" } }, /* @__PURE__ */ React.createElement("div", { style: { fontFamily: MONO, fontSize: "10px", fontWeight: 600, color: "#56565e", textTransform: "uppercase", letterSpacing: "1.2px", marginBottom: "14px", paddingTop: "14px", borderTop: "1px solid rgba(255,255,255,0.05)" } }, "Key features"), /* @__PURE__ */ React.createElement("div", { style: { display: "grid", gridTemplateColumns: isMobile ? "1fr" : "1fr 1fr", gap: "11px 28px" } }, d.features.map((f, fi) => /* @__PURE__ */ React.createElement("div", { key: fi, style: { display: "flex", alignItems: "flex-start", gap: "10px" } }, /* @__PURE__ */ React.createElement("span", { style: { flex: "none", marginTop: "7px", width: "5px", height: "5px", borderRadius: "50%", background: meta.color } }), /* @__PURE__ */ React.createElement("span", { style: { fontSize: "13.5px", lineHeight: 1.5, color: "#cfcfd4" } }, f))))))); + ), opened && /* @__PURE__ */ React.createElement("div", { style: { padding: "4px 22px 22px 22px", animation: "rmExp .24s cubic-bezier(.2,.7,.3,1)" } }, /* @__PURE__ */ React.createElement("div", { style: { fontFamily: MONO, fontSize: "10px", fontWeight: 600, color: "#56565e", textTransform: "uppercase", letterSpacing: "1.2px", marginBottom: "14px", paddingTop: "14px", borderTop: "1px solid rgba(255,255,255,0.05)" } }, t("roadmap.keyFeatures")), /* @__PURE__ */ React.createElement("div", { style: { display: "grid", gridTemplateColumns: isMobile ? "1fr" : "1fr 1fr", gap: "11px 28px" } }, d.features.map((f, fi) => /* @__PURE__ */ React.createElement("div", { key: fi, style: { display: "flex", alignItems: "flex-start", gap: "10px" } }, /* @__PURE__ */ React.createElement("span", { style: { flex: "none", marginTop: "7px", width: "5px", height: "5px", borderRadius: "50%", background: meta.color } }), /* @__PURE__ */ React.createElement("span", { style: { fontSize: "13.5px", lineHeight: 1.5, color: "#cfcfd4" } }, f))))))); }))); } window.Roadmap = Roadmap; @@ -22563,7 +29492,6 @@ var CommunityCTA = () => { }; }, []); const ACCENT = "#f0892a"; - const MONO = "'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace"; const SANS = "'Manrope', system-ui, -apple-system, sans-serif"; const githubUrl = "https://github.com/SecureBitChat/securebit-chat/"; const feedbackUrl = "mailto:lockbitchat@tutanota.com"; @@ -22605,7 +29533,7 @@ var CommunityCTA = () => { fill: "currentColor", dangerouslySetInnerHTML: { __html: '' } }), - "GitHub Repository" + t("community.github") ]); const feedbackBtn = React.createElement("a", { key: "fb", @@ -22648,14 +29576,7 @@ var CommunityCTA = () => { strokeLinejoin: "round", dangerouslySetInnerHTML: { __html: '' } }), - "Feedback" - ]); - const chip = (label) => React.createElement("span", { - key: label, - style: { display: "inline-flex", alignItems: "center", gap: "7px" } - }, [ - React.createElement("span", { key: "d", style: { width: "5px", height: "5px", borderRadius: "50%", background: "#3ecf8e" } }), - label + t("community.feedback") ]); const card = React.createElement("div", { key: "card", @@ -22684,31 +29605,21 @@ var CommunityCTA = () => { alt: "SecureBit", style: { display: "inline-block", width: "64px", height: "64px", objectFit: "contain", marginBottom: "22px", animation: "ccUp .4s cubic-bezier(.2,.7,.3,1)" } }), - // eyebrow - React.createElement("div", { - key: "eyebrow", - style: { fontFamily: MONO, fontSize: "11px", fontWeight: 600, color: "#6b6b73", textTransform: "uppercase", letterSpacing: "1.8px", marginBottom: "14px" } - }, "Open source \xB7 community-driven"), // title React.createElement("h2", { key: "title", style: { margin: "0 0 16px", fontSize: isMobile ? "28px" : "36px", fontWeight: 800, letterSpacing: "-1px", lineHeight: 1.05, color: "#f4f4f6" } - }, "Join the future of privacy"), + }, t("community.title")), // description React.createElement("p", { key: "desc", style: { margin: "0 auto 32px", maxWidth: "560px", fontSize: "16px", lineHeight: 1.65, color: "#9a9aa2" } - }, "SecureBit grows thanks to its community. Your ideas and feedback shape the future of secure communication \u2014 built in the open, with complete ASN.1 validation end\u2011to\u2011end."), + }, t("community.description")), // buttons React.createElement("div", { key: "btns", style: { display: "flex", gap: "14px", justifyContent: "center", flexWrap: "wrap" } - }, [githubBtn, feedbackBtn]), - // trust chips - React.createElement("div", { - key: "chips", - style: { display: "flex", gap: "10px 22px", justifyContent: "center", flexWrap: "wrap", marginTop: "30px", fontFamily: MONO, fontSize: "11px", fontWeight: 500, color: "#56565e", textTransform: "uppercase", letterSpacing: "1px" } - }, [chip("MIT licensed"), chip("No tracking"), chip("Auditable cryptography")]) + }, [githubBtn, feedbackBtn]) ]); return React.createElement("section", { style: { @@ -22764,13 +29675,13 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles } await webrtcManager.sendFile(file); } catch (error) { - if (error.message.includes("Connection not ready")) { + if (error.message.includes(t("file.notReady"))) { alert(`\u0424\u0430\u0439\u043B ${file.name} \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D \u0441\u0435\u0439\u0447\u0430\u0441. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0441\u043D\u043E\u0432\u0430.`); - } else if (error.message.includes("File too large") || error.message.includes("exceeds maximum")) { + } else if (error.message.includes(t("file.tooLarge")) || error.message.includes("exceeds maximum")) { alert(`\u0424\u0430\u0439\u043B ${file.name} \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439: ${error.message}`); - } else if (error.message.includes("Maximum concurrent transfers")) { + } else if (error.message.includes(t("file.maxConcurrent"))) { alert(`\u0414\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442 \u043B\u0438\u043C\u0438\u0442 \u043E\u0434\u043D\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445 \u043F\u0435\u0440\u0435\u0434\u0430\u0447. \u0414\u043E\u0436\u0434\u0438\u0442\u0435\u0441\u044C \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0443\u0449\u0438\u0445 \u043F\u0435\u0440\u0435\u0434\u0430\u0447.`); - } else if (error.message.includes("File type not allowed")) { + } else if (error.message.includes(t("file.typeNotAllowed"))) { alert(`\u0422\u0438\u043F \u0444\u0430\u0439\u043B\u0430 ${file.name} \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F: ${error.message}`); } else { alert(`\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438 \u0444\u0430\u0439\u043B\u0430 ${file.name}: ${error.message}`); @@ -22881,7 +29792,7 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles ]) ]); }; - const i_done = (t) => t.status === "completed"; + const i_done = (t2) => t2.status === "completed"; const handleIncomingDecision = async (fileId, accepted) => { if (typeof onIncomingDecision === "function") { await onIncomingDecision(fileId, accepted); @@ -22891,7 +29802,7 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles if (!isConnected) { return React.createElement("div", { className: "p-4 text-center text-muted" - }, "\u041F\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0444\u0430\u0439\u043B\u043E\u0432 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u043E\u043C \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0438"); + }, t("file.needConnection")); } const isConnectionReady = webrtcManager && webrtcManager.isConnected() && webrtcManager.isVerified; if (!isConnectionReady) { @@ -22929,8 +29840,8 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles key: "icon-box", style: { width: "42px", height: "42px", margin: "0 auto 10px", borderRadius: "12px", display: "grid", placeItems: "center", background: "rgba(255,255,255,0.04)", border: "1px solid rgba(255,255,255,0.08)" } }, React.createElement("i", { className: "fas fa-arrow-up-from-bracket", style: { color: "#9a9aa2", fontSize: "18px" } })), - React.createElement("div", { key: "title", style: { fontSize: "14px", fontWeight: 700, color: "#e8e8eb" } }, "Drag & drop files here"), - React.createElement("div", { key: "sub", style: { fontSize: "12px", color: "#7b7b83", marginTop: "4px" } }, "Encrypted end-to-end before transfer \xB7 up to 100 MB"), + React.createElement("div", { key: "title", style: { fontSize: "14px", fontWeight: 700, color: "#e8e8eb" } }, t("file.drop")), + React.createElement("div", { key: "sub", style: { fontSize: "12px", color: "#7b7b83", marginTop: "4px" } }, t("file.dropHint")), React.createElement("button", { key: "browse", type: "button", @@ -22939,7 +29850,7 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles style: { marginTop: "14px", display: "inline-flex", alignItems: "center", gap: "7px", padding: "9px 16px", borderRadius: "9px", border: "none", background: "#f0892a", color: "#1a0f04", fontFamily: "inherit", fontSize: "13px", fontWeight: 700, cursor: "pointer" } }, [ React.createElement("i", { key: "i", className: "fas fa-folder-open", style: { fontSize: "13px" } }), - "Browse device" + t("file.browse") ]) ]), // Hidden file input @@ -22971,7 +29882,7 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles React.createElement("div", { key: "title", style: { fontSize: "13px", fontWeight: 600, color: "#e8e8eb" } - }, "Incoming file request"), + }, t("file.incoming")), React.createElement("div", { key: "meta", style: { fontSize: "11.5px", color: "#7b7b83", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" } @@ -22986,12 +29897,12 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles key: "accept", onClick: () => handleIncomingDecision(file.fileId, true), style: { display: "inline-flex", alignItems: "center", gap: "6px", borderRadius: "8px", border: "none", background: "#f0892a", color: "#1a0f04", padding: "8px 14px", fontSize: "13px", fontWeight: 700, cursor: "pointer" } - }, [React.createElement("i", { key: "i", className: "fas fa-check", style: { fontSize: "12px" } }), "Accept"]), + }, [React.createElement("i", { key: "i", className: "fas fa-check", style: { fontSize: "12px" } }), t("file.accept")]), React.createElement("button", { key: "reject", onClick: () => handleIncomingDecision(file.fileId, false), style: { display: "inline-flex", alignItems: "center", gap: "6px", borderRadius: "8px", border: "1px solid rgba(229,114,122,0.3)", background: "rgba(229,114,122,0.08)", color: "#e5727a", padding: "8px 14px", fontSize: "13px", fontWeight: 600, cursor: "pointer" } - }, [React.createElement("i", { key: "i", className: "fas fa-xmark", style: { fontSize: "12px" } }), "Reject"]) + }, [React.createElement("i", { key: "i", className: "fas fa-xmark", style: { fontSize: "12px" } }), t("file.reject")]) ]) ]))), // Active Transfers @@ -23008,7 +29919,7 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles className: "fas fa-right-left", style: { fontSize: "12px" } }), - "File transfers" + t("file.title") ]), // Sending files ...transfers.sending.map( @@ -23091,7 +30002,7 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles try { const url = await webrtcManager.getReceivedFileObjectURL(transfer.fileId); if (!url) { - alert("This file is no longer available for download."); + alert(t("file.gone")); return; } const a = document.createElement("a"); @@ -23100,12 +30011,12 @@ var FileTransferComponent = ({ webrtcManager, isConnected, pendingIncomingFiles a.click(); setTimeout(() => webrtcManager.revokeReceivedFileObjectURL(url), 1e4); } catch (e) { - alert(e.message || "This file is no longer available for download."); + alert(e.message || t("file.gone")); } } }, [ React.createElement("i", { key: "i", className: "fas fa-download mr-1" }), - "Download" + t("file.download") ]) : null, React.createElement("button", { key: "cancel", @@ -23144,22 +30055,22 @@ function hasControlChars(value) { return false; } function validateIceUrl(url) { - if (typeof url !== "string") return "URL must be a string"; + if (typeof url !== "string") return t("iceUrl.notString"); const trimmed = url.trim(); - if (!trimmed) return "URL is empty"; - if (trimmed.length > ICE_LIMITS.MAX_STRING_LENGTH) return "URL is too long"; - if (hasControlChars(trimmed)) return "URL contains invalid characters"; + if (!trimmed) return t("iceUrl.empty"); + if (trimmed.length > ICE_LIMITS.MAX_STRING_LENGTH) return t("iceUrl.tooLong"); + if (hasControlChars(trimmed)) return t("iceUrl.badChars"); const scheme = trimmed.match(SCHEME_RE); if (!scheme) { - return "URL must start with stun:, stuns:, turn: or turns:"; + return t("iceUrl.badScheme"); } const rest = trimmed.slice(scheme[0].length); const [hostPort, query, ...extra] = rest.split("?"); - if (extra.length > 0) return "URL has an invalid query"; - if (!hostPort) return "URL is missing a host"; - if (!HOST_RE.test(hostPort)) return "URL has an invalid host or port"; + if (extra.length > 0) return t("iceUrl.badQuery"); + if (!hostPort) return t("iceUrl.noHost"); + if (!HOST_RE.test(hostPort)) return t("iceUrl.badHost"); if (query !== void 0 && !TRANSPORT_RE.test(query)) { - return "URL query must be transport=udp or transport=tcp"; + return t("iceUrl.badTransport"); } return null; } @@ -23178,24 +30089,24 @@ function normalizeIceServers(entries2) { const warnings = []; const servers = []; if (!Array.isArray(entries2)) { - return { servers: [], errors: ["Server list must be an array"], warnings: [] }; + return { servers: [], errors: [t("iceErr.notArray")], warnings: [] }; } if (entries2.length === 0) { return { servers: [], errors: [], warnings: [] }; } if (entries2.length > ICE_LIMITS.MAX_SERVERS) { - errors.push(`Too many servers (max ${ICE_LIMITS.MAX_SERVERS})`); + errors.push(t("iceErr.tooMany", { max: ICE_LIMITS.MAX_SERVERS })); return { servers: [], errors, warnings }; } entries2.forEach((entry, index) => { const label = `Server #${index + 1}`; if (!entry || typeof entry !== "object") { - errors.push(`${label}: invalid entry`); + errors.push(t("iceErr.invalidEntry", { label })); return; } const rawUrls = Array.isArray(entry.urls) ? entry.urls : [entry.urls]; if (rawUrls.length === 0 || rawUrls.length > ICE_LIMITS.MAX_URLS_PER_SERVER) { - errors.push(`${label}: between 1 and ${ICE_LIMITS.MAX_URLS_PER_SERVER} URLs required`); + errors.push(t("iceErr.urlCount", { label, max: ICE_LIMITS.MAX_URLS_PER_SERVER })); return; } const cleanUrls = []; @@ -23219,7 +30130,7 @@ function normalizeIceServers(entries2) { if (entry.username) server.username = String(entry.username); if (entry.credential) server.credential = String(entry.credential); if (entryHasTurn && (!server.username || !server.credential)) { - warnings.push(`${label}: TURN servers usually require a username and credential`); + warnings.push(t("iceErr.turnCreds", { label })); } servers.push(server); }); @@ -23235,7 +30146,7 @@ function parseIceServersInput(text2) { try { parsed = JSON.parse(trimmed); } catch { - return { servers: [], errors: ["Invalid JSON"], warnings: [] }; + return { servers: [], errors: [t("iceErr.invalidJson")], warnings: [] }; } const arr = Array.isArray(parsed) ? parsed : [parsed]; return normalizeIceServers(arr); @@ -23264,13 +30175,13 @@ var PLACEHOLDER = [ async function testIceServers(servers, timeoutMs = 6e3) { const found = { host: 0, srflx: 0, relay: 0 }; if (typeof RTCPeerConnection === "undefined") { - return { ...found, error: "WebRTC is not available in this browser" }; + return { ...found, error: t("ice.errUnavailable") }; } let pc; try { pc = new RTCPeerConnection({ iceServers: servers }); } catch (error) { - return { ...found, error: error.message || "Invalid server configuration" }; + return { ...found, error: error.message || t("ice.errInvalid") }; } return new Promise((resolve) => { let settled = false; @@ -23408,10 +30319,10 @@ var IceServerSettings = ({ isOpen, onClose, initial, hasSaved, onApply, onForget body.push(h( "p", { key: "intro", style: { margin: "0 0 18px", fontSize: "13.5px", lineHeight: 1.6, color: "#9a9aa2" } }, - "SecureBit uses public STUN servers by default to negotiate the peer-to-peer link. Point it at your own STUN/TURN if you self-host." + t("ice.intro") )); - body.push(radioCard(!useCustom, () => setUseCustom(false), "Public servers (default)", "Zero-config. Good for most users.")); - body.push(radioCard(useCustom, () => setUseCustom(true), "My own STUN/TURN servers", `Up to ${ICE_LIMITS.MAX_SERVERS} servers.`, useCustom ? { marginBottom: "14px" } : null)); + body.push(radioCard(!useCustom, () => setUseCustom(false), t("ice.publicTitle"), t("ice.publicDesc"))); + body.push(radioCard(useCustom, () => setUseCustom(true), t("ice.customTitle"), t("ice.customDesc", { max: ICE_LIMITS.MAX_SERVERS }), useCustom ? { marginBottom: "14px" } : null)); if (useCustom) { const custom = []; custom.push(h( @@ -23451,9 +30362,9 @@ var IceServerSettings = ({ isOpen, onClose, initial, hasSaved, onApply, onForget custom.push(h("div", { key: "note", style: { display: "flex", alignItems: "flex-start", gap: "9px", padding: "12px 13px", borderRadius: "11px", border: "1px solid rgba(62,207,142,0.18)", background: "rgba(62,207,142,0.05)", marginBottom: "12px" } }, [ h("i", { key: "i", className: "fas fa-info-circle", style: { color: C_GREEN, fontSize: "13px", marginTop: "2px", flex: "none" } }), h("span", { key: "t", style: { fontSize: "12px", lineHeight: 1.55, color: "#a8b8ae" } }, [ - "A TURN relay sees both peers\u2019 IP and traffic timing \u2014 but never message contents, which stay end-to-end encrypted. Prefer ", + t("ice.turnNote"), h("span", { key: "m", style: { fontFamily: MONO, color: C_GREEN } }, "turns:"), - " (TLS)." + t("ice.turnNoteTls") ]) ])); const testColor = testState === "done" && testResult && !testResult.error ? C_GREEN : "#cfcfd4"; @@ -23466,7 +30377,7 @@ var IceServerSettings = ({ isOpen, onClose, initial, hasSaved, onApply, onForget style: { display: "inline-flex", alignItems: "center", gap: "8px", padding: "10px 15px", borderRadius: "10px", border: `1px solid ${testState === "done" && testResult && !testResult.error ? "rgba(62,207,142,0.4)" : "rgba(255,255,255,0.1)"}`, background: testState === "done" && testResult && !testResult.error ? "rgba(62,207,142,0.08)" : "rgba(255,255,255,0.04)", color: testColor, fontFamily: "inherit", fontSize: "13px", fontWeight: 600, cursor: !canApply || testState === "running" ? "not-allowed" : "pointer", opacity: !canApply || testState === "running" ? 0.6 : 1 } }, [ h("i", { key: "i", className: testState === "running" ? "fas fa-circle-notch" : "fas fa-play-circle", style: testState === "running" ? { animation: "sbSpin 1s linear infinite" } : null }), - testState === "running" ? "Testing\u2026" : "Test servers" + testState === "running" ? t("ice.testing") : t("ice.test") ]), testState === "done" && testResult ? h( "span", @@ -23479,23 +30390,23 @@ var IceServerSettings = ({ isOpen, onClose, initial, hasSaved, onApply, onForget body.push(toggleRow( relayOnly, () => setRelayOnly(!relayOnly), - "Relay-only mode", - "Routes all traffic through TURN so your IP is never exposed to the peer. Requires a TURN server.", + t("ice.relayTitle"), + t("ice.relayDesc"), C_GREEN, - "MAX PRIVACY" + t("ice.relayBadge") )); if (relayOnly && useCustom && !hasTurn) { body.push(h( "p", { key: "relaywarn", style: { margin: "-4px 0 10px", fontSize: "12.5px", color: "#e3c84e" } }, - "Relay-only is enabled but no TURN server is configured. The connection will not be able to start." + t("ice.relayWarning") )); } body.push(toggleRow( persist, () => setPersist(!persist), - "Save on this device", - "Stored encrypted in this browser. Leave off to use only for this session.", + t("ice.persist"), + t("ice.persistDesc"), C_ORANGE )); const footerBtns = []; @@ -23505,14 +30416,14 @@ var IceServerSettings = ({ isOpen, onClose, initial, hasSaved, onApply, onForget type: "button", onClick: handleForget, style: { marginRight: "auto", padding: "11px 18px", borderRadius: "11px", border: "1px solid rgba(229,114,122,0.3)", background: "transparent", color: "#e5727a", fontFamily: "inherit", fontSize: "13.5px", fontWeight: 600, cursor: "pointer" } - }, "Forget saved")); + }, t("ice.forget"))); } footerBtns.push(h("button", { key: "cancel", type: "button", onClick: onClose, style: { padding: "11px 18px", borderRadius: "11px", border: "1px solid rgba(255,255,255,0.1)", background: "transparent", color: "#b3b3ba", fontFamily: "inherit", fontSize: "13.5px", fontWeight: 600, cursor: "pointer" } - }, "Cancel")); + }, t("ice.cancel"))); footerBtns.push(h("button", { key: "apply", type: "button", @@ -23521,7 +30432,7 @@ var IceServerSettings = ({ isOpen, onClose, initial, hasSaved, onApply, onForget style: { display: "inline-flex", alignItems: "center", gap: "8px", padding: "11px 20px", borderRadius: "11px", border: "none", background: C_ORANGE, color: "#1a0f04", fontFamily: "inherit", fontSize: "13.5px", fontWeight: 700, cursor: canApply ? "pointer" : "not-allowed", opacity: canApply ? 1 : 0.5, boxShadow: "0 6px 18px rgba(240,137,42,0.28)" } }, [ h("i", { key: "i", className: "fas fa-check" }), - "Apply" + t("ice.apply") ])); const wrapperStyle = embedded ? { position: "absolute", inset: 0, zIndex: 60, display: "flex", flexDirection: "column", background: "#0f0f11", animation: "sbSlideUp .32s cubic-bezier(.2,.7,.3,1)" } : { position: "fixed", inset: 0, zIndex: 60, display: "flex", flexDirection: "column", alignItems: "stretch", background: "#0f0f11", animation: "sbSlideUp .32s cubic-bezier(.2,.7,.3,1)" }; return h("div", { className: "sb-ice-overlay", style: wrapperStyle }, [ @@ -23534,8 +30445,8 @@ var IceServerSettings = ({ isOpen, onClose, initial, hasSaved, onApply, onForget h("i", { className: "fas fa-sliders-h", style: { color: "#cfcfd4", fontSize: "15px" } }) ), h("div", { key: "tx", style: { flex: 1, lineHeight: 1.25 } }, [ - h("div", { key: "t", style: { fontSize: "16.5px", fontWeight: 800, letterSpacing: "-0.3px", color: "#f4f4f6" } }, "Network settings"), - h("div", { key: "s", style: { fontSize: "12px", color: "#7b7b83" } }, "Configured locally \u2014 never shared with your peer") + h("div", { key: "t", style: { fontSize: "16.5px", fontWeight: 800, letterSpacing: "-0.3px", color: "#f4f4f6" } }, t("ice.title")), + h("div", { key: "s", style: { fontSize: "12px", color: "#7b7b83" } }, t("ice.subtitle")) ]), h( "button", @@ -23624,8 +30535,8 @@ var CallUIComponent = ({ webrtcManager, peerTitle }) => { if (!active || phase === "idle" || phase === "ended") return null; const fmt = (s) => `${String(Math.floor(s / 60)).padStart(2, "0")}:${String(s % 60).padStart(2, "0")}`; const ringing = phase === "outgoing" || phase === "connecting"; - const callStatus = phase === "outgoing" ? "Ringing\u2026" : phase === "connecting" ? "Connecting\u2026" : phase === "active" ? fmt(seconds) : "Ringing\u2026"; - const name = peerTitle || "Secure peer"; + const callStatus = phase === "outgoing" ? t("call.ringing") : phase === "connecting" ? t("call.connecting") : phase === "active" ? fmt(seconds) : t("call.ringing"); + const name = peerTitle || t("call.peer"); const ctrlBase = { width: "56px", height: "56px", @@ -23667,13 +30578,13 @@ var CallUIComponent = ({ webrtcManager, peerTitle }) => { const encBadge = h( "span", { key: "enc", style: { display: "inline-flex", alignItems: "center", gap: "4px", fontSize: "11px", fontWeight: 600, color: "#3ecf8e" } }, - [svg2(ICON.lock, 11, 2), "Encrypted"] + [svg2(ICON.lock, 11, 2), t("call.encryptedShort")] ); const QUALITY = { - excellent: { bars: 4, color: "#3ecf8e", label: "Excellent" }, - good: { bars: 3, color: "#3ecf8e", label: "Good" }, - fair: { bars: 2, color: "#e3c84e", label: "Fair" }, - poor: { bars: 1, color: "#e5727a", label: "Weak" } + excellent: { bars: 4, color: "#3ecf8e", label: t("call.qualityExcellent") }, + good: { bars: 3, color: "#3ecf8e", label: t("call.qualityGood") }, + fair: { bars: 2, color: "#e3c84e", label: t("call.qualityFair") }, + poor: { bars: 1, color: "#e5727a", label: t("call.qualityWeak") } }; const qualityIndicator = (compact) => { const q = QUALITY[call.quality]; @@ -23687,7 +30598,7 @@ var CallUIComponent = ({ webrtcManager, peerTitle }) => { })) ); if (compact) return bars; - return h("span", { key: "q", title: "Connection quality", style: { display: "inline-flex", alignItems: "center", gap: "6px", fontSize: "11.5px", fontWeight: 600, color: q.color } }, [bars, q.label]); + return h("span", { key: "q", title: t("call.quality"), style: { display: "inline-flex", alignItems: "center", gap: "6px", fontSize: "11.5px", fontWeight: 600, color: q.color } }, [bars, q.label]); }; const doAccept = () => webrtcManager?.acceptCall?.(); const doDecline = () => webrtcManager?.declineCall?.(); @@ -23716,16 +30627,16 @@ var CallUIComponent = ({ webrtcManager, peerTitle }) => { h( "div", { key: "top", style: { flex: "none", display: "flex", alignItems: "center", justifyContent: "flex-start", padding: "16px 18px" } }, - h("span", { style: { display: "inline-flex", alignItems: "center", gap: "7px", fontSize: "12px", fontWeight: 600, color: "#3ecf8e" } }, [svg2(ICON.lock, 13, 2), "Encrypted call"]) + h("span", { style: { display: "inline-flex", alignItems: "center", gap: "7px", fontSize: "12px", fontWeight: 600, color: "#3ecf8e" } }, [svg2(ICON.lock, 13, 2), t("call.encrypted")]) ), h("div", { key: "mid", style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center" } }, [ avatarDisc(46, true), h("div", { key: "nm", style: { fontSize: "24px", fontWeight: 800, letterSpacing: "-0.5px", color: "#f4f4f6" } }, name), - h("div", { key: "st", style: { fontFamily: MONO, fontSize: "14px", fontWeight: 500, color: "#9a9aa2", marginTop: "8px" } }, call.withVideo ? "Incoming video call" : "Incoming call") + h("div", { key: "st", style: { fontFamily: MONO, fontSize: "14px", fontWeight: 500, color: "#9a9aa2", marginTop: "8px" } }, call.withVideo ? t("call.incomingVideo") : t("call.incoming")) ]), h("div", { key: "ctrls", style: { flex: "none", display: "flex", alignItems: "flex-start", justifyContent: "center", gap: "48px", padding: "28px 24px 40px" } }, [ - labeled("dec", h("button", { onClick: doDecline, title: "Decline", style: { ...endBtn, width: "62px", height: "62px" } }, svg2(ICON.phoneHangup, 24, 1.9)), "Decline"), - labeled("acc", h("button", { onClick: doAccept, title: "Accept", style: { width: "62px", height: "62px", borderRadius: "50%", display: "grid", placeItems: "center", border: "none", background: "#3ecf8e", color: "#06231a", cursor: "pointer", boxShadow: "0 8px 24px rgba(62,207,142,0.35)" } }, svg2(ICON.phone, 24, 1.9)), "Accept") + labeled("dec", h("button", { onClick: doDecline, title: t("call.decline"), style: { ...endBtn, width: "62px", height: "62px" } }, svg2(ICON.phoneHangup, 24, 1.9)), t("call.decline")), + labeled("acc", h("button", { onClick: doAccept, title: t("call.accept"), style: { width: "62px", height: "62px", borderRadius: "50%", display: "grid", placeItems: "center", border: "none", background: "#3ecf8e", color: "#06231a", cursor: "pointer", boxShadow: "0 8px 24px rgba(62,207,142,0.35)" } }, svg2(ICON.phone, 24, 1.9)), t("call.accept")) ]) ]); } @@ -23742,12 +30653,12 @@ var CallUIComponent = ({ webrtcManager, peerTitle }) => { h("div", { key: "tx", style: { flex: 1, minWidth: 0 } }, [ h("div", { key: "n", style: { fontSize: "13px", fontWeight: 700, color: "#f4f4f6", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" } }, name), h("div", { key: "s", style: { display: "flex", alignItems: "center", gap: "7px", fontFamily: MONO, fontSize: "11px", color: "#9a9aa2" } }, [ - (isVideo ? "Video \xB7 " : "Voice \xB7 ") + callStatus, + (isVideo ? t("call.videoPrefix") : t("call.voicePrefix")) + callStatus, phase === "active" && qualityIndicator(true) ]) ]), - h("button", { key: "exp", onClick: () => setMinimized(false), title: "Expand", style: { flex: "none", width: "32px", height: "32px", borderRadius: "8px", display: "grid", placeItems: "center", border: "none", background: "rgba(255,255,255,0.05)", color: "#cfcfd4", cursor: "pointer", transition: "all .15s" } }, svg2(ICON.expand, 15, 2)), - h("button", { key: "end", onClick: doEnd, title: "End call", style: { flex: "none", width: "32px", height: "32px", borderRadius: "8px", display: "grid", placeItems: "center", border: "none", background: "#e5484d", color: "#fff", cursor: "pointer", transition: "transform .15s" } }, svg2(ICON.phoneHangup, 15, 2)) + h("button", { key: "exp", onClick: () => setMinimized(false), title: t("call.expand"), style: { flex: "none", width: "32px", height: "32px", borderRadius: "8px", display: "grid", placeItems: "center", border: "none", background: "rgba(255,255,255,0.05)", color: "#cfcfd4", cursor: "pointer", transition: "all .15s" } }, svg2(ICON.expand, 15, 2)), + h("button", { key: "end", onClick: doEnd, title: t("call.end"), style: { flex: "none", width: "32px", height: "32px", borderRadius: "8px", display: "grid", placeItems: "center", border: "none", background: "#e5484d", color: "#fff", cursor: "pointer", transition: "transform .15s" } }, svg2(ICON.phoneHangup, 15, 2)) ]) ]); } @@ -23756,7 +30667,7 @@ var CallUIComponent = ({ webrtcManager, peerTitle }) => { hiddenAudio, call.remoteHasVideo ? h("video", { key: "rv", ref: remoteVideoRef, autoPlay: true, muted: true, playsInline: true, style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", background: "#0a0a0c" } }) : h("div", { key: "ph", style: { position: "absolute", inset: 0, background: "linear-gradient(120deg, #15151b, #1d1a24, #161620)", backgroundSize: "200% 200%", animation: "sbLiveBg 9s ease-in-out infinite", display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "18px" } }, [ h("div", { key: "a", style: { width: "120px", height: "120px", borderRadius: "50%", display: "grid", placeItems: "center", background: "radial-gradient(circle at 35% 30%, #2a2a30, #161618)", border: "1px solid rgba(255,255,255,0.1)", color: "#9a9aa2" } }, svg2(ICON.user, 54, 1.5)), - h("div", { key: "t", style: { fontSize: "15px", fontWeight: 600, color: "#8a8a92" } }, "Peer's camera is off") + h("div", { key: "t", style: { fontSize: "15px", fontWeight: 600, color: "#8a8a92" } }, t("call.peerCameraOff")) ]), // Top bar h("div", { key: "top", style: { position: "absolute", top: 0, left: 0, right: 0, display: "flex", alignItems: "flex-start", justifyContent: "space-between", gap: "14px", padding: "18px 20px", background: "linear-gradient(180deg, rgba(0,0,0,0.55), transparent)" } }, [ @@ -23768,30 +30679,30 @@ var CallUIComponent = ({ webrtcManager, peerTitle }) => { phase === "active" && qualityIndicator(false) ]) ]), - h("button", { key: "min", onClick: () => setMinimized(true), title: "Minimize", style: { flex: "none", ...minimizeBtn(true) } }, svg2(ICON.minimize, 16, 2)) + h("button", { key: "min", onClick: () => setMinimized(true), title: t("call.minimize"), style: { flex: "none", ...minimizeBtn(true) } }, svg2(ICON.minimize, 16, 2)) ]), // Self-cam PiP h("div", { key: "self", style: { position: "absolute", bottom: "108px", right: "18px", width: "132px", height: "176px", borderRadius: "14px", overflow: "hidden", border: "1px solid rgba(255,255,255,0.16)", boxShadow: "0 12px 30px rgba(0,0,0,0.5)", background: "#111" } }, [ h("video", { key: "sv", ref: selfVideoRef, autoPlay: true, muted: true, playsInline: true, style: { width: "100%", height: "100%", objectFit: "cover", transform: "scaleX(-1)", display: "block" } }), !call.cameraEnabled && h("div", { key: "off", style: { position: "absolute", inset: 0, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: "8px", background: "#161618", color: "#6b6b73" } }, [ svg2(ICON.camOff, 24, 1.8), - h("span", { key: "t", style: { fontSize: "10.5px", color: "#6b6b73", fontFamily: MONO } }, "Camera off") + h("span", { key: "t", style: { fontSize: "10.5px", color: "#6b6b73", fontFamily: MONO } }, t("call.cameraOff")) ]) ]), // Control bar h("div", { key: "ctrls", style: { position: "absolute", bottom: 0, left: 0, right: 0, display: "flex", alignItems: "center", justifyContent: "center", gap: "18px", padding: "22px 24px 28px", background: "linear-gradient(0deg, rgba(0,0,0,0.6), transparent)" } }, [ - h("button", { key: "mute", onClick: doMute, title: "Mute", style: call.micEnabled ? ctrlBase : dangerCtrl }, svg2(call.micEnabled ? ICON.micOn : ICON.micOff, 21, 1.9)), - h("button", { key: "cam", onClick: doCamera, title: "Camera", style: call.cameraEnabled ? ctrlBase : dangerCtrl }, svg2(call.cameraEnabled ? ICON.camOn : ICON.camOff, 21, 1.8)), - h("button", { key: "flip", onClick: doFlip, title: "Flip camera", style: ctrlBase }, svg2(ICON.flip, 21, 1.8)), - h("button", { key: "end", onClick: doEnd, title: "End call", style: endBtn }, svg2(ICON.phoneHangup, 22, 1.9)) + h("button", { key: "mute", onClick: doMute, title: t("call.mute"), style: call.micEnabled ? ctrlBase : dangerCtrl }, svg2(call.micEnabled ? ICON.micOn : ICON.micOff, 21, 1.9)), + h("button", { key: "cam", onClick: doCamera, title: t("call.camera"), style: call.cameraEnabled ? ctrlBase : dangerCtrl }, svg2(call.cameraEnabled ? ICON.camOn : ICON.camOff, 21, 1.8)), + h("button", { key: "flip", onClick: doFlip, title: t("call.flipCamera"), style: ctrlBase }, svg2(ICON.flip, 21, 1.8)), + h("button", { key: "end", onClick: doEnd, title: t("call.end"), style: endBtn }, svg2(ICON.phoneHangup, 22, 1.9)) ]) ]); } return h("div", { style: { position: "absolute", inset: 0, zIndex: 40, display: "flex", flexDirection: "column", background: "radial-gradient(680px 460px at 50% 36%, rgba(240,137,42,0.08), transparent 70%), #0d0d0f", animation: "sbExpand .2s ease" } }, [ hiddenAudio, h("div", { key: "top", style: { flex: "none", display: "flex", alignItems: "center", justifyContent: "space-between", padding: "16px 18px" } }, [ - h("span", { key: "enc", style: { display: "inline-flex", alignItems: "center", gap: "7px", fontSize: "12px", fontWeight: 600, color: "#3ecf8e" } }, [svg2(ICON.lock, 13, 2), "Encrypted call"]), - h("button", { key: "min", onClick: () => setMinimized(true), title: "Minimize", style: minimizeBtn(false) }, svg2(ICON.minimize, 16, 2)) + h("span", { key: "enc", style: { display: "inline-flex", alignItems: "center", gap: "7px", fontSize: "12px", fontWeight: 600, color: "#3ecf8e" } }, [svg2(ICON.lock, 13, 2), t("call.encrypted")]), + h("button", { key: "min", onClick: () => setMinimized(true), title: t("call.minimize"), style: minimizeBtn(false) }, svg2(ICON.minimize, 16, 2)) ]), h("div", { key: "mid", style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center" } }, [ avatarDisc(46, ringing), @@ -23800,9 +30711,9 @@ var CallUIComponent = ({ webrtcManager, peerTitle }) => { phase === "active" && h("div", { key: "q", style: { marginTop: "12px" } }, qualityIndicator(false)) ]), h("div", { key: "ctrls", style: { flex: "none", display: "flex", alignItems: "flex-start", justifyContent: "center", gap: "26px", padding: "28px 24px 34px" } }, [ - labeled("mute", h("button", { onClick: doMute, title: "Mute", style: call.micEnabled ? ctrlBase : dangerCtrl }, svg2(call.micEnabled ? ICON.micOn : ICON.micOff, 22, 1.9)), call.micEnabled ? "Mute" : "Muted"), - labeled("video", h("button", { onClick: doUpgrade, title: "Add video", style: ctrlBase }, svg2(ICON.camOn, 22, 1.8)), "Video"), - labeled("end", h("button", { onClick: doEnd, title: "End call", style: endBtn }, svg2(ICON.phoneHangup, 22, 1.9)), "End") + labeled("mute", h("button", { onClick: doMute, title: t("call.mute"), style: call.micEnabled ? ctrlBase : dangerCtrl }, svg2(call.micEnabled ? ICON.micOn : ICON.micOff, 22, 1.9)), call.micEnabled ? "Mute" : t("call.muted")), + labeled("video", h("button", { onClick: doUpgrade, title: t("call.addVideo"), style: ctrlBase }, svg2(ICON.camOn, 22, 1.8)), t("call.video")), + labeled("end", h("button", { onClick: doEnd, title: t("call.end"), style: endBtn }, svg2(ICON.phoneHangup, 22, 1.9)), t("call.endShort")) ]) ]); }; diff --git a/dist/app-boot.js.map b/dist/app-boot.js.map index d71fdf7..f0e58be 100644 --- a/dist/app-boot.js.map +++ b/dist/app-boot.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/notifications/SecureNotificationManager.js", "../src/notifications/NotificationIntegration.js", "../node_modules/dompurify/src/utils.ts", "../node_modules/dompurify/src/tags.ts", "../node_modules/dompurify/src/attrs.ts", "../node_modules/dompurify/src/regexp.ts", "../node_modules/dompurify/src/purify.ts", "../src/crypto/EnhancedSecureCryptoUtils.js", "../src/transfer/EnhancedSecureFileTransfer.js", "../src/network/webrtc/config.js", "../src/network/webrtc/sdp.js", "../src/network/webrtc/audio.js", "../src/network/webrtc/video.js", "../src/network/webrtc/adaptation/metrics.js", "../src/network/webrtc/adaptation/controller.js", "../src/crypto/DoubleRatchet.js", "../src/network/descriptor/sbq2.js", "../src/network/descriptor/keyexchange.js", "../src/network/EnhancedSecureWebRTCManager.js", "../src/scripts/app-boot.js", "../package.json", "../src/components/ui/Header.jsx", "../src/components/ui/DownloadApps.jsx", "../src/components/ui/BecomePartner.jsx", "../src/components/ui/UniqueFeatureSlider.jsx", "../src/components/ui/Roadmap.jsx", "../src/components/ui/CommunityCTA.jsx", "../src/components/ui/FileTransfer.jsx", "../src/network/iceServers.js", "../src/components/ui/IceServerSettings.jsx", "../src/components/ui/CallUI.jsx"], - "sourcesContent": ["/**\n * Secure and Reliable Notification Manager for P2P WebRTC Chat\n * Follows best practices: OWASP, MDN, Chrome DevRel\n * \n * @version 1.0.0\n * @author SecureBit Team\n * @license MIT\n */\n\nclass SecureChatNotificationManager {\n constructor(config = {}) {\n // Safely read Notification permission (iOS Safari may not define Notification)\n this.permission = (typeof Notification !== 'undefined' && Notification && typeof Notification.permission === 'string')\n ? Notification.permission\n : 'denied';\n this.isTabActive = this.checkTabActive(); // Initialize with proper check\n this.unreadCount = 0;\n this.originalTitle = document.title;\n this.notificationQueue = [];\n this.maxQueueSize = config.maxQueueSize || 5;\n this.rateLimitMs = config.rateLimitMs || 2000; // Spam protection\n this.lastNotificationTime = 0;\n this.trustedOrigins = config.trustedOrigins || [];\n \n // Secure context flag\n this.isSecureContext = window.isSecureContext;\n \n // Cross-browser compatibility for Page Visibility API\n this.hidden = this.getHiddenProperty();\n this.visibilityChange = this.getVisibilityChangeEvent();\n \n this.initVisibilityTracking();\n this.initSecurityChecks();\n }\n\n /**\n * Initialize security checks and validation\n * @private\n */\n initSecurityChecks() {\n // Security checks are performed silently\n }\n\n /**\n * Get hidden property name for cross-browser compatibility\n * @returns {string} Hidden property name\n * @private\n */\n getHiddenProperty() {\n if (typeof document.hidden !== \"undefined\") {\n return \"hidden\";\n } else if (typeof document.msHidden !== \"undefined\") {\n return \"msHidden\";\n } else if (typeof document.webkitHidden !== \"undefined\") {\n return \"webkitHidden\";\n }\n return \"hidden\"; // fallback\n }\n\n /**\n * Get visibility change event name for cross-browser compatibility\n * @returns {string} Visibility change event name\n * @private\n */\n getVisibilityChangeEvent() {\n if (typeof document.hidden !== \"undefined\") {\n return \"visibilitychange\";\n } else if (typeof document.msHidden !== \"undefined\") {\n return \"msvisibilitychange\";\n } else if (typeof document.webkitHidden !== \"undefined\") {\n return \"webkitvisibilitychange\";\n }\n return \"visibilitychange\"; // fallback\n }\n\n /**\n * Check if tab is currently active using multiple methods\n * @returns {boolean} True if tab is active\n * @private\n */\n checkTabActive() {\n // Primary method: Page Visibility API\n if (this.hidden && typeof document[this.hidden] !== \"undefined\") {\n return !document[this.hidden];\n }\n \n // Fallback method: document.hasFocus()\n if (typeof document.hasFocus === \"function\") {\n return document.hasFocus();\n }\n \n // Ultimate fallback: assume active\n return true;\n }\n\n /**\n * Initialize page visibility tracking (Page Visibility API)\n * @private\n */\n initVisibilityTracking() {\n // Primary method: Page Visibility API with cross-browser support\n if (typeof document.addEventListener !== \"undefined\" && typeof document[this.hidden] !== \"undefined\") {\n document.addEventListener(this.visibilityChange, () => {\n this.isTabActive = this.checkTabActive();\n \n if (this.isTabActive) {\n this.resetUnreadCount();\n this.clearNotificationQueue();\n }\n });\n }\n\n // Fallback method: Window focus/blur events\n window.addEventListener('focus', () => {\n this.isTabActive = this.checkTabActive();\n if (this.isTabActive) {\n this.resetUnreadCount();\n }\n });\n\n window.addEventListener('blur', () => {\n this.isTabActive = this.checkTabActive();\n });\n\n // Page unload cleanup\n window.addEventListener('beforeunload', () => {\n this.clearNotificationQueue();\n });\n }\n\n /**\n * Request notification permission (BEST PRACTICE: Only call in response to user action)\n * Never call on page load!\n * @returns {Promise} Permission granted status\n */\n async requestPermission() {\n // Secure context check\n if (!this.isSecureContext || !('Notification' in window)) {\n return false;\n }\n\n if (this.permission === 'granted') {\n return true;\n }\n\n if (this.permission === 'denied') {\n return false;\n }\n\n try {\n this.permission = await Notification.requestPermission();\n return this.permission === 'granted';\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Update page title with unread count\n * @private\n */\n updateTitle() {\n if (this.unreadCount > 0) {\n document.title = `(${this.unreadCount}) ${this.originalTitle}`;\n } else {\n document.title = this.originalTitle;\n }\n }\n\n /**\n * XSS Protection: Sanitize input text\n * @param {string} text - Text to sanitize\n * @returns {string} Sanitized text\n * @private\n */\n sanitizeText(text) {\n if (typeof text !== 'string') {\n return '';\n }\n \n // Remove HTML tags and potentially dangerous characters\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .substring(0, 500); // Length limit\n }\n\n /**\n * Validate icon URL (XSS protection)\n * @param {string} url - URL to validate\n * @returns {string|null} Validated URL or null\n * @private\n */\n validateIconUrl(url) {\n if (!url) return null;\n \n try {\n const parsedUrl = new URL(url, window.location.origin);\n \n // Only allow HTTPS and data URLs\n if (parsedUrl.protocol === 'https:' || parsedUrl.protocol === 'data:') {\n // Check trusted origins if specified\n if (this.trustedOrigins.length > 0) {\n const isTrusted = this.trustedOrigins.some(origin => \n parsedUrl.origin === origin\n );\n return isTrusted ? parsedUrl.href : null;\n }\n return parsedUrl.href;\n }\n \n return null;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Rate limiting for spam protection\n * @returns {boolean} Rate limit check passed\n * @private\n */\n checkRateLimit() {\n const now = Date.now();\n if (now - this.lastNotificationTime < this.rateLimitMs) {\n return false;\n }\n this.lastNotificationTime = now;\n return true;\n }\n\n /**\n * Send secure notification\n * @param {string} senderName - Name of message sender\n * @param {string} message - Message content\n * @param {Object} options - Notification options\n * @returns {Notification|null} Created notification or null\n */\n notify(senderName, message, options = {}) {\n // Abort if Notifications API is not available (e.g., iOS Safari)\n if (typeof Notification === 'undefined') {\n return null;\n }\n // Update tab active state before checking\n this.isTabActive = this.checkTabActive();\n \n // Only show if tab is NOT active (user is on another tab or minimized)\n if (this.isTabActive) {\n return null;\n }\n\n // Permission check\n if (this.permission !== 'granted') {\n return null;\n }\n\n // Rate limiting\n if (!this.checkRateLimit()) {\n return null;\n }\n\n // Data sanitization (XSS Protection)\n const safeSenderName = this.sanitizeText(senderName || 'Unknown');\n const safeMessage = this.sanitizeText(message || '');\n const safeIcon = this.validateIconUrl(options.icon) || '/logo/icon-192x192.png';\n\n // Queue overflow protection\n if (this.notificationQueue.length >= this.maxQueueSize) {\n this.clearNotificationQueue();\n }\n\n try {\n \n const notification = new Notification(\n `${safeSenderName}`,\n {\n body: safeMessage.substring(0, 200), // Length limit\n icon: safeIcon,\n badge: safeIcon,\n tag: `chat-${options.senderId || 'unknown'}`, // Grouping\n requireInteraction: false, // Don't block user\n silent: options.silent || false,\n // Vibrate only for mobile and if supported\n vibrate: navigator.vibrate ? [200, 100, 200] : undefined,\n // Safe metadata\n data: {\n senderId: this.sanitizeText(options.senderId),\n timestamp: Date.now(),\n // Don't include sensitive data!\n }\n }\n );\n\n // Increment counter\n this.unreadCount++;\n this.updateTitle();\n\n // Add to queue for management\n this.notificationQueue.push(notification);\n\n // Safe click handler\n notification.onclick = (event) => {\n event.preventDefault(); // Prevent default behavior\n window.focus();\n notification.close();\n \n // Safe callback\n if (typeof options.onClick === 'function') {\n try {\n options.onClick(options.senderId);\n } catch (error) {\n console.error('[Notifications] Error in onClick handler:', error);\n }\n }\n };\n\n // Error handler\n notification.onerror = (event) => {\n console.error('[Notifications] Error showing notification:', event);\n };\n\n // Auto-close after reasonable time\n const autoCloseTimeout = Math.min(options.autoClose || 5000, 10000);\n setTimeout(() => {\n notification.close();\n this.removeFromQueue(notification);\n }, autoCloseTimeout);\n\n return notification;\n \n } catch (error) {\n console.error('[Notifications] Failed to create notification:', error);\n return null;\n }\n }\n\n /**\n * Remove notification from queue\n * @param {Notification} notification - Notification to remove\n * @private\n */\n removeFromQueue(notification) {\n const index = this.notificationQueue.indexOf(notification);\n if (index > -1) {\n this.notificationQueue.splice(index, 1);\n }\n }\n\n /**\n * Clear all notifications\n */\n clearNotificationQueue() {\n this.notificationQueue.forEach(notification => {\n try {\n notification.close();\n } catch (error) {\n // Ignore errors when closing\n }\n });\n this.notificationQueue = [];\n }\n\n /**\n * Reset unread counter\n */\n resetUnreadCount() {\n this.unreadCount = 0;\n this.updateTitle();\n }\n\n /**\n * Get current status\n * @returns {Object} Current notification status\n */\n getStatus() {\n return {\n permission: this.permission,\n isTabActive: this.isTabActive,\n unreadCount: this.unreadCount,\n isSecureContext: this.isSecureContext,\n queueSize: this.notificationQueue.length\n };\n }\n}\n\n/**\n * Secure integration with WebRTC\n */\nclass SecureP2PChat {\n constructor() {\n this.notificationManager = new SecureChatNotificationManager({\n maxQueueSize: 5,\n rateLimitMs: 2000,\n trustedOrigins: [\n window.location.origin,\n // Add other trusted origins for CDN icons\n ]\n });\n \n this.dataChannel = null;\n this.peerConnection = null;\n this.remotePeerName = 'Peer';\n this.messageHistory = [];\n this.maxHistorySize = 100;\n }\n\n /**\n * Initialize when user connects\n */\n async init() {\n // Initialize notification manager silently\n }\n\n /**\n * Method for manual permission request (called on click)\n * @returns {Promise} Permission granted status\n */\n async enableNotifications() {\n const granted = await this.notificationManager.requestPermission();\n return granted;\n }\n\n /**\n * Setup DataChannel with security checks\n * @param {RTCDataChannel} dataChannel - WebRTC data channel\n */\n setupDataChannel(dataChannel) {\n if (!dataChannel) {\n console.error('[Chat] Invalid DataChannel');\n return;\n }\n\n this.dataChannel = dataChannel;\n \n // Setup handlers\n this.dataChannel.onmessage = (event) => {\n this.handleIncomingMessage(event.data);\n };\n\n this.dataChannel.onerror = (error) => {\n // Handle error silently\n };\n }\n\n /**\n * XSS Protection: Validate incoming messages\n * @param {string|Object} data - Message data\n * @returns {Object|null} Validated message or null\n * @private\n */\n validateMessage(data) {\n try {\n const message = typeof data === 'string' ? JSON.parse(data) : data;\n \n // Check message structure\n if (!message || typeof message !== 'object') {\n throw new Error('Invalid message structure');\n }\n\n // Check required fields\n if (!message.text || typeof message.text !== 'string') {\n throw new Error('Invalid message text');\n }\n\n // Message length limit (DoS protection)\n if (message.text.length > 10000) {\n throw new Error('Message too long');\n }\n\n return {\n text: message.text,\n senderName: message.senderName || 'Unknown',\n senderId: message.senderId || 'unknown',\n timestamp: message.timestamp || Date.now(),\n senderAvatar: message.senderAvatar || null\n };\n \n } catch (error) {\n console.error('[Chat] Message validation failed:', error);\n return null;\n }\n }\n\n /**\n * Secure handling of incoming messages\n * @param {string|Object} data - Message data\n * @private\n */\n handleIncomingMessage(data) {\n const message = this.validateMessage(data);\n \n if (!message) {\n return;\n }\n\n // Save to history (with limit)\n this.messageHistory.push(message);\n if (this.messageHistory.length > this.maxHistorySize) {\n this.messageHistory.shift();\n }\n\n // Display in UI (with sanitization)\n this.displayMessage(message);\n\n // Send notification only if tab is inactive\n this.notificationManager.notify(\n message.senderName,\n message.text,\n {\n icon: message.senderAvatar,\n senderId: message.senderId,\n onClick: (senderId) => {\n this.scrollToLatestMessage();\n }\n }\n );\n\n // Optional: sound (with check)\n if (!this.notificationManager.isTabActive) {\n this.playNotificationSound();\n }\n }\n\n /**\n * XSS Protection: Safe message display\n * @param {Object} message - Message to display\n * @private\n */\n displayMessage(message) {\n const container = document.getElementById('messages');\n if (!container) {\n return;\n }\n\n const messageEl = document.createElement('div');\n messageEl.className = 'message';\n \n // Use textContent to prevent XSS\n const nameEl = document.createElement('strong');\n nameEl.textContent = message.senderName + ': ';\n \n const textEl = document.createElement('span');\n textEl.textContent = message.text;\n textEl.style.wordWrap = 'break-word';\n textEl.style.overflowWrap = 'break-word';\n textEl.style.whiteSpace = 'normal';\n \n const timeEl = document.createElement('small');\n timeEl.textContent = new Date(message.timestamp).toLocaleTimeString();\n \n messageEl.appendChild(nameEl);\n messageEl.appendChild(textEl);\n messageEl.appendChild(document.createElement('br'));\n messageEl.appendChild(timeEl);\n \n container.appendChild(messageEl);\n this.scrollToLatestMessage();\n }\n\n /**\n * Safe sound playback\n * @private\n */\n playNotificationSound() {\n try {\n // Use only local audio files\n const audio = new Audio('/assets/audio/notification.mp3');\n audio.volume = 0.3; // Moderate volume\n \n // Error handling\n audio.play().catch(error => {\n // Handle audio error silently\n });\n } catch (error) {\n // Handle audio creation error silently\n }\n }\n\n /**\n * Scroll to latest message\n * @private\n */\n scrollToLatestMessage() {\n const container = document.getElementById('messages');\n if (container) {\n container.scrollTop = container.scrollHeight;\n }\n }\n\n /**\n * Get status\n * @returns {Object} Current chat status\n */\n getStatus() {\n return {\n notifications: this.notificationManager.getStatus(),\n messageCount: this.messageHistory.length,\n connected: this.dataChannel?.readyState === 'open'\n };\n }\n}\n\n// Export for use in other modules\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = { SecureChatNotificationManager, SecureP2PChat };\n}\n\n// Global export for browser usage\nif (typeof window !== 'undefined') {\n window.SecureChatNotificationManager = SecureChatNotificationManager;\n window.SecureP2PChat = SecureP2PChat;\n}\n", "/**\n * Notification Integration Module for SecureBit WebRTC Chat\n * Integrates secure notifications with existing WebRTC architecture\n * \n * @version 1.0.0\n * @author SecureBit Team\n * @license MIT\n */\n\nimport { SecureChatNotificationManager } from './SecureNotificationManager.js';\n\nclass NotificationIntegration {\n constructor(webrtcManager) {\n this.webrtcManager = webrtcManager;\n this.notificationManager = new SecureChatNotificationManager({\n maxQueueSize: 10,\n rateLimitMs: 1000, // Reduced from 2000ms to 1000ms\n trustedOrigins: [\n window.location.origin,\n // Add other trusted origins for CDN icons\n ]\n });\n \n this.isInitialized = false;\n this.originalOnMessage = null;\n this.originalOnStatusChange = null;\n this.processedMessages = new Set(); // Track processed messages to avoid duplicates\n }\n\n /**\n * Initialize notification integration\n * @returns {Promise} Initialization success\n */\n async init() {\n try {\n if (this.isInitialized) {\n return true;\n }\n\n // Store original callbacks\n this.originalOnMessage = this.webrtcManager.onMessage;\n this.originalOnStatusChange = this.webrtcManager.onStatusChange;\n\n\n // Wrap the original onMessage callback.\n // IMPORTANT: forward ALL arguments (incl. per-message `meta`) so the app\n // still receives view-once / disappearing / unsend metadata.\n this.webrtcManager.onMessage = (message, type, ...rest) => {\n this.handleIncomingMessage(message, type, rest[0]);\n\n // Call original callback if it exists\n if (this.originalOnMessage) {\n this.originalOnMessage(message, type, ...rest);\n }\n };\n\n // Wrap the original onStatusChange callback\n this.webrtcManager.onStatusChange = (status) => {\n this.handleStatusChange(status);\n \n // Call original callback if it exists\n if (this.originalOnStatusChange) {\n this.originalOnStatusChange(status);\n }\n };\n\n // Also hook into the deliverMessageToUI method if it exists.\n // IMPORTANT: forward ALL arguments (incl. per-message `meta`) to the\n // original, otherwise view-once / disappearing / unsend metadata is lost.\n if (this.webrtcManager.deliverMessageToUI) {\n this.originalDeliverMessageToUI = this.webrtcManager.deliverMessageToUI.bind(this.webrtcManager);\n this.webrtcManager.deliverMessageToUI = (message, type, ...rest) => {\n this.handleIncomingMessage(message, type, rest[0]);\n this.originalDeliverMessageToUI(message, type, ...rest);\n };\n }\n\n this.isInitialized = true;\n return true;\n\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Handle incoming messages and trigger notifications\n * @param {*} message - Message content\n * @param {string} type - Message type\n * @private\n */\n handleIncomingMessage(message, type, meta) {\n try {\n // Create a unique key for this message to avoid duplicates\n const messageKey = `${type}:${typeof message === 'string' ? message : JSON.stringify(message)}`;\n \n // Skip if we've already processed this message\n if (this.processedMessages.has(messageKey)) {\n return;\n }\n \n // Mark message as processed\n this.processedMessages.add(messageKey);\n \n // Clean up old processed messages (keep only last 100)\n if (this.processedMessages.size > 100) {\n const messagesArray = Array.from(this.processedMessages);\n this.processedMessages.clear();\n messagesArray.slice(-50).forEach(msg => this.processedMessages.add(msg));\n }\n \n \n // Only process chat messages, not system messages\n if (type === 'system' || type === 'file-transfer' || type === 'heartbeat') {\n return;\n }\n\n // Extract message information\n const messageInfo = this.extractMessageInfo(message, type);\n if (!messageInfo) {\n return;\n }\n\n // PRIVACY: a view-once or disappearing message must not be copied into the\n // OS notification. Notifications are shown only while the tab is in the\n // background \u2014 i.e. typically on a lock screen \u2014 and once the OS has the\n // text it lands in the notification centre, in backups and on the user's\n // other synced devices. From there the app can no longer delete it, so the\n // message the UI destroys after 30 seconds outlives itself indefinitely.\n // Show that something arrived; never what it said.\n const isEphemeral = !!meta && typeof meta === 'object' &&\n (meta.once === true || (Number.isFinite(meta.ttl) && meta.ttl > 0));\n const notificationText = isEphemeral ? 'Sent you a private message' : messageInfo.text;\n\n // Send notification\n const notificationResult = this.notificationManager.notify(\n messageInfo.senderName,\n notificationText,\n {\n icon: messageInfo.senderAvatar,\n senderId: messageInfo.senderId,\n onClick: (senderId) => {\n this.focusChatWindow();\n }\n }\n );\n\n } catch (error) {\n // Handle error silently\n }\n }\n\n /**\n * Handle status changes\n * @param {string} status - Connection status\n * @private\n */\n handleStatusChange(status) {\n try {\n // Clear notifications when connection is lost\n if (status === 'disconnected' || status === 'failed') {\n this.notificationManager.clearNotificationQueue();\n this.notificationManager.resetUnreadCount();\n }\n } catch (error) {\n // Handle error silently\n }\n }\n\n /**\n * Extract message information for notifications\n * @param {*} message - Message content\n * @param {string} type - Message type\n * @returns {Object|null} Extracted message info or null\n * @private\n */\n extractMessageInfo(message, type) {\n try {\n let messageData = message;\n\n // Handle different message formats\n if (typeof message === 'string') {\n try {\n messageData = JSON.parse(message);\n } catch (e) {\n // Plain text message\n return {\n senderName: 'Peer',\n text: message,\n senderId: 'peer',\n senderAvatar: null\n };\n }\n }\n\n // Handle structured message data\n if (typeof messageData === 'object' && messageData !== null) {\n return {\n senderName: messageData.senderName || messageData.name || 'Peer',\n text: messageData.text || messageData.message || messageData.content || '',\n senderId: messageData.senderId || messageData.id || 'peer',\n senderAvatar: messageData.senderAvatar || messageData.avatar || null\n };\n }\n\n return null;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Focus chat window when notification is clicked\n * @private\n */\n focusChatWindow() {\n try {\n window.focus();\n \n // Scroll to bottom of messages if container exists\n const messagesContainer = document.getElementById('messages');\n if (messagesContainer) {\n messagesContainer.scrollTop = messagesContainer.scrollHeight;\n }\n } catch (error) {\n // Handle error silently\n }\n }\n\n /**\n * Request notification permission\n * @returns {Promise} Permission granted status\n */\n async requestPermission() {\n try {\n return await this.notificationManager.requestPermission();\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Get notification status\n * @returns {Object} Notification status\n */\n getStatus() {\n return this.notificationManager.getStatus();\n }\n\n /**\n * Clear all notifications\n */\n clearNotifications() {\n this.notificationManager.clearNotificationQueue();\n this.notificationManager.resetUnreadCount();\n }\n\n /**\n * Cleanup integration\n */\n cleanup() {\n try {\n if (this.isInitialized) {\n // Restore original callbacks\n if (this.originalOnMessage) {\n this.webrtcManager.onMessage = this.originalOnMessage;\n }\n if (this.originalOnStatusChange) {\n this.webrtcManager.onStatusChange = this.originalOnStatusChange;\n }\n if (this.originalDeliverMessageToUI) {\n this.webrtcManager.deliverMessageToUI = this.originalDeliverMessageToUI;\n }\n\n // Clear notifications\n this.clearNotifications();\n\n this.isInitialized = false;\n }\n } catch (error) {\n // Handle error silently\n }\n }\n}\n\n// Export for use in other modules\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = { NotificationIntegration };\n}\n\n// Global export for browser usage\nif (typeof window !== 'undefined') {\n window.NotificationIntegration = NotificationIntegration;\n}\n", "const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!freeze) {\n freeze = function (x: T): T {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x: T): T {\n return x;\n };\n}\n\nif (!apply) {\n apply = function (\n func: (thisArg: any, ...args: any[]) => T,\n thisArg: any,\n ...args: any[]\n ): T {\n return func.apply(thisArg, args);\n };\n}\n\nif (!construct) {\n construct = function (Func: new (...args: any[]) => T, ...args: any[]): T {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString =\n typeof BigInt === 'undefined' ? null : unapply(BigInt.prototype.toString);\nconst symbolToString =\n typeof Symbol === 'undefined' ? null : unapply(Symbol.prototype.toString);\n\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(\n func: (thisArg: any, ...args: any[]) => T\n): (thisArg: any, ...args: any[]) => T {\n return (thisArg: any, ...args: any[]): T => {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n\n return apply(func, thisArg, args);\n };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(\n Func: new (...args: any[]) => T\n): (...args: any[]) => T {\n return (...args: any[]): T => construct(Func, args);\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(\n set: Record,\n array: readonly unknown[],\n transformCaseFunc: ReturnType> = stringToLowerCase\n): Record {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n if (!arrayIsArray(array)) {\n return set;\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n (array as unknown[])[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element as string] = true;\n }\n\n return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array: T[]): Array {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n\n return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone>(object: T): T {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n\n if (isPropertyExist) {\n if (arrayIsArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor === Object\n ) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n\n return newObject;\n}\n\n/**\n * Convert non-node values into strings without depending on direct property access.\n *\n * @param value - The value to stringify.\n * @returns A string representation of the provided value.\n */\nfunction stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'string': {\n return value;\n }\n\n case 'number': {\n return numberToString(value);\n }\n\n case 'boolean': {\n return booleanToString(value);\n }\n\n case 'bigint': {\n return bigintToString ? bigintToString(value) : '0';\n }\n\n case 'symbol': {\n return symbolToString ? symbolToString(value) : 'Symbol()';\n }\n\n case 'undefined': {\n return objectToString(value);\n }\n\n case 'function':\n case 'object': {\n if (value === null) {\n return objectToString(value);\n }\n\n const valueAsRecord = value as Record;\n const valueToString = lookupGetter(valueAsRecord, 'toString');\n\n if (typeof valueToString === 'function') {\n const stringified = valueToString(valueAsRecord);\n\n return typeof stringified === 'string'\n ? stringified\n : objectToString(stringified);\n }\n\n return objectToString(value);\n }\n\n default: {\n return objectToString(value);\n }\n }\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter>(\n object: T,\n prop: string\n): ReturnType> | (() => null) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(): null {\n return null;\n }\n\n return fallbackValue;\n}\n\nfunction isRegex(value: unknown): value is RegExp {\n try {\n regExpTest(value as RegExp, '');\n return true;\n } catch {\n return false;\n }\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayIsArray,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n arraySplice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n clone,\n create,\n objectHasOwnProperty,\n objectToString,\n // RegExp\n regExpTest,\n isRegex,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Other conversion\n stringifyValue,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n addToSet,\n // Reflect\n unapply,\n unconstruct,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'search',\n 'section',\n 'select',\n 'shadow',\n 'slot',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n] as const);\n\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'enterkeyhint',\n 'exportparts',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'inputmode',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'part',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n] as const);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n] as const);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n] as const);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts',\n] as const);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n] as const);\n\nexport const text = freeze(['#text'] as const);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'command',\n 'commandfor',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'exportparts',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inert',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'part',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'popover',\n 'popovertarget',\n 'popovertargetaction',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'slot',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n] as const);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'amplitude',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'exponent',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'mask-type',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'tablevalues',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n] as const);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnalign',\n 'columnlines',\n 'columnspacing',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lquote',\n 'lspace',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n] as const);\n", "import { seal } from './utils.js';\n\nexport const MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n// Markup-significant character probes used by _sanitizeElements.\n// Shared module-level instances are safe despite the sticky /g flags:\n// unapply() resets lastIndex for RegExp receivers before every call.\nexport const ELEMENT_MARKUP_PROBE = seal(/<[/\\w!]/g);\nexport const COMMENT_MARKUP_PROBE = seal(/<[/\\w]/g);\nexport const FALLBACK_TAG_CLOSE = seal(/<\\/no(script|embed|frames)/i);\nexport const SELF_CLOSING_TAG = seal(/\\/>/i);\n", "/* eslint-disable @typescript-eslint/indent */\n\nimport type { Config, UseProfilesConfig } from './config';\nimport type { DOMPurify, HooksMap, HookFunction, WindowLike } from './types';\nimport * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n seal,\n arrayForEach,\n arrayIsArray,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySplice,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n isRegex,\n typeErrorCreate,\n lookupGetter,\n create,\n objectHasOwnProperty,\n stringifyValue,\n} from './utils.js';\n\nexport type { Config } from './config';\n\nexport type {\n DOMPurify,\n RemovedElement,\n RemovedAttribute,\n HookName,\n NodeHook,\n ElementHook,\n DocumentFragmentHook,\n UponSanitizeElementHook,\n UponSanitizeAttributeHook,\n UponSanitizeElementHookEvent,\n UponSanitizeAttributeHookEvent,\n WindowLike,\n} from './types';\n\ndeclare const VERSION: string;\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5, // Deprecated\n entityNode: 6, // Deprecated\n processingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12, // Deprecated\n};\n\nconst getGlobal = function (): WindowLike {\n return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (\n trustedTypes: TrustedTypePolicyFactory,\n purifyHostElement: HTMLScriptElement\n) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nconst _createHooksMap = function (): HooksMap {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: [],\n };\n};\n\n/**\n * Resolve a set-valued configuration option: a fresh set built from\n * cfg[key] when it is an own array property (seeded with a clone of\n * options.base when given, case-normalized via options.transform),\n * the fallback set otherwise.\n *\n * @param cfg the cloned, prototype-free configuration object\n * @param key the configuration property to read\n * @param fallback the set to use when the option is absent or not an array\n * @param options transform and optional base set to merge into\n * @returns the resolved set\n */\nconst _resolveSetOption = function (\n cfg: Config,\n key: keyof Config,\n fallback: Record,\n options: {\n transform: Parameters[2];\n base?: Record;\n }\n): Record {\n return objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key])\n ? addToSet(\n options.base ? clone(options.base) : {},\n cfg[key] as readonly unknown[],\n options.transform\n )\n : fallback;\n};\n\nfunction createDOMPurify(window: WindowLike = getGlobal()): DOMPurify {\n const DOMPurify: DOMPurify = (root: WindowLike) => createDOMPurify(root);\n\n DOMPurify.version = VERSION;\n\n DOMPurify.removed = [];\n\n if (\n !window ||\n !window.document ||\n window.document.nodeType !== NODE_TYPE.document ||\n !window.Element\n ) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n let { document } = window;\n\n const originalDocument = document;\n const currentScript: HTMLScriptElement =\n originalDocument.currentScript as HTMLScriptElement;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || (window as any).MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n const getShadowRoot = lookupGetter(ElementPrototype, 'shadowRoot');\n const getAttributes = lookupGetter(ElementPrototype, 'attributes');\n const getNodeType =\n Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeType') : null;\n const getNodeName =\n Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeName') : null;\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n\n // The instance's own internal Trusted Types policy. Unlike a caller-supplied\n // `TRUSTED_TYPES_POLICY`, this is created at most once \u2014 Trusted Types throws\n // on duplicate policy names \u2014 and is the only policy allowed to persist\n // across configurations and survive `clearConfig()`.\n let defaultTrustedTypesPolicy;\n let defaultTrustedTypesPolicyResolved = false;\n\n // Tracks whether we are already inside a call to the configured Trusted Types\n // policy (`createHTML` or `createScriptURL`). If a supplied policy callback\n // itself calls `DOMPurify.sanitize` (the cause of #1422), `sanitize` would\n // re-enter the policy and recurse until the stack overflows. We detect that\n // re-entry and throw a clear, actionable error instead. The guard is shared\n // across both callbacks, because either one re-entering `sanitize` triggers\n // the same unbounded recursion.\n let IN_TRUSTED_TYPES_POLICY = 0;\n const _assertNotInTrustedTypesPolicy = function (): void {\n if (IN_TRUSTED_TYPES_POLICY > 0) {\n throw typeErrorCreate(\n 'A configured TRUSTED_TYPES_POLICY callback (createHTML or ' +\n 'createScriptURL) must not call DOMPurify.sanitize, as that causes ' +\n 'infinite recursion. Do not pass a policy whose callbacks wrap ' +\n 'DOMPurify as TRUSTED_TYPES_POLICY; see the \"DOMPurify and Trusted ' +\n 'Types\" section of the README.'\n );\n }\n };\n\n const _createTrustedHTML = function (html: string): string {\n _assertNotInTrustedTypesPolicy();\n\n IN_TRUSTED_TYPES_POLICY++;\n try {\n return trustedTypesPolicy.createHTML(html);\n } finally {\n IN_TRUSTED_TYPES_POLICY--;\n }\n };\n\n const _createTrustedScriptURL = function (scriptUrl: string): string {\n _assertNotInTrustedTypesPolicy();\n\n IN_TRUSTED_TYPES_POLICY++;\n try {\n return trustedTypesPolicy.createScriptURL(scriptUrl);\n } finally {\n IN_TRUSTED_TYPES_POLICY--;\n }\n };\n\n // Lazily resolve (and cache) the instance's internal default policy.\n // Resolution is attempted at most once: a successful `createPolicy` cannot be\n // repeated (Trusted Types throws on duplicate names), and a failed or\n // unsupported attempt must not be retried on every parse.\n const _getDefaultTrustedTypesPolicy = function () {\n if (!defaultTrustedTypesPolicyResolved) {\n defaultTrustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n currentScript\n );\n defaultTrustedTypesPolicyResolved = true;\n }\n\n return defaultTrustedTypesPolicy;\n };\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = _createHooksMap();\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n })\n );\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (\u00A77.3.3)\n * - DOM Tree Accessors (\u00A73.1.5)\n * - Form Element Parent-Child Relations (\u00A74.10.3)\n * - Iframe srcdoc / Nested WindowProxies (\u00A74.8.5)\n * - HTMLCollection (\u00A74.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES: UseProfilesConfig | false = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n // mirrors the selected