1.0.1 is the first desktop build that works on Linux at all. It also carries the desktop.callsNotHere string these dictionaries now define for it — calls are not available on the Linux desktop yet and the app says so rather than failing.
883 lines
48 KiB
JSON
883 lines
48 KiB
JSON
{
|
|
"htmlLang": "en",
|
|
"ogLocale": "en_US",
|
|
"dir": "ltr",
|
|
"nativeName": "English",
|
|
"abbr": "EN",
|
|
"meta": {
|
|
"title": "SecureBit.chat - Private, Encrypted Messenger",
|
|
"description": "SecureBit.chat is a free, end-to-end encrypted peer-to-peer messenger that runs entirely in your browser. No accounts, no servers storing your messages - ECDH P-384, AES-256-GCM and in-person SAS verification.",
|
|
"keywords": "encrypted messenger, end-to-end encryption, peer-to-peer chat, P2P messenger, ECDH, DTLS, SAS verification, WebRTC, private chat, secure chat, no servers, no accounts, MITM protection, PFS",
|
|
"ogTitle": "SecureBit.chat - End-to-End Encrypted Peer-to-Peer Chat",
|
|
"ogDescription": "A secure messenger that runs entirely in your browser. No accounts, no servers storing your messages. Bring your own STUN/TURN servers - we don't impose anything.",
|
|
"ogImageAlt": "SecureBit.chat - end-to-end encrypted, peer-to-peer chat",
|
|
"twitterTitle": "SecureBit.chat - End-to-End Encrypted Peer-to-Peer Chat",
|
|
"twitterDescription": "A secure messenger that runs entirely in your browser. No accounts, no servers storing your messages.",
|
|
"twitterImageAlt": "SecureBit.chat - end-to-end encrypted, peer-to-peer chat"
|
|
},
|
|
"schema": {
|
|
"siteDescription": "End-to-end encrypted, peer-to-peer chat that runs entirely in your browser.",
|
|
"appDescription": "A free, end-to-end encrypted peer-to-peer messenger. No accounts, no servers storing messages - ECDH P-384, AES-256-GCM and in-person SAS verification.",
|
|
"operatingSystem": "Any (modern web browser)",
|
|
"browserRequirements": "Requires WebRTC and the Web Crypto API",
|
|
"featureList": [
|
|
"End-to-end encryption (ECDH P-384, AES-256-GCM)",
|
|
"Peer-to-peer WebRTC connection with no message servers",
|
|
"In-person SAS verification against man-in-the-middle attacks",
|
|
"Custom STUN/TURN servers and relay-only privacy mode",
|
|
"Encrypted file transfer",
|
|
"Installable Progressive Web App with offline support"
|
|
]
|
|
},
|
|
"ui": {
|
|
"language.label": "Language",
|
|
"language.suggest.text": "This page is also available in English.",
|
|
"language.suggest.cta": "Read in English",
|
|
"language.suggest.dismiss": "Dismiss",
|
|
"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…",
|
|
"intro.connect": "Connect",
|
|
"intro.connecting": "Processing…",
|
|
"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…",
|
|
"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…",
|
|
"verify.verified": "Channel verified",
|
|
"verify.bothConfirmed": "Both parties confirmed. Opening the secure chat…",
|
|
"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 · open a channel",
|
|
"step.exchange": "Step 2 · exchange",
|
|
"step.verification": "Step 3 · 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 · or copy text",
|
|
"cred.answerTag": "answer · 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…",
|
|
"qr.hint": "Hold steady until all parts are captured. Camera access is local - nothing is uploaded.",
|
|
"mesh.you": "you",
|
|
"mesh.peer": "peer · session 1",
|
|
"mesh.joined2": "mara joined · +2",
|
|
"mesh.joined3": "tobi joined · +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…",
|
|
"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 · let your peer scan",
|
|
"qr.showSubtitleFrames": "Full-screen · 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 · 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…",
|
|
"call.ringing": "Ringing…",
|
|
"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 · ",
|
|
"call.voicePrefix": "Voice · ",
|
|
"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…",
|
|
"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": " · code {code}",
|
|
"group.exchangingNonces": "Exchanging nonces…",
|
|
"group.waitingCommit": "Waiting for every member to commit…",
|
|
"group.waitingJoin": "Waiting for the other members to join…",
|
|
"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…",
|
|
"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 · formatting preserved · ⌘↵ to send",
|
|
"chat.viewOnce": "View once",
|
|
"chat.viewOnceTitle": "View once - vanishes after the peer reads it",
|
|
"chat.viewOncePrefix": "View once · ",
|
|
"chat.viewOnceTap": "View once · 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 · ",
|
|
"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…",
|
|
"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 · stored only on this device",
|
|
"chat.setStatus": "Set your status",
|
|
"chat.yourStatusPrefix": "Your status - ",
|
|
"chat.meshHint": "Up to 8 peers · P2P mesh",
|
|
"chat.offline": "Offline",
|
|
"chat.noNetwork": "No network · 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…",
|
|
"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…",
|
|
"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 · 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 · 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 · 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 · stepped away",
|
|
"presence.busyDesc": "Do not disturb",
|
|
"presence.invisibleDesc": "Appear offline to peers",
|
|
"presence.online": "Online",
|
|
"conn.p2p": "P2P · connected",
|
|
"conn.verifying": "Verifying…",
|
|
"conn.connecting": "Connecting…",
|
|
"conn.reconnecting": "Reconnecting…",
|
|
"conn.peerDisconnected": "Peer disconnected",
|
|
"conn.disconnected": "Disconnected",
|
|
"chat.defaultLabel": "Chat",
|
|
"groupPhase.forming": "Forming…",
|
|
"groupPhase.commitments": "Exchanging commitments…",
|
|
"groupPhase.revealing": "Revealing…",
|
|
"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",
|
|
"groupCall.startVoice": "Start a group voice call",
|
|
"groupCall.startVideo": "Start a group video call",
|
|
"groupCall.join": "Join",
|
|
"groupCall.dismiss": "Not now",
|
|
"groupCall.leave": "Leave call",
|
|
"groupCall.you": "You",
|
|
"groupCall.connecting": "Connecting…",
|
|
"groupCall.waitingLink": "Waiting for a direct link…",
|
|
"groupCall.legFailed": "Could not connect",
|
|
"groupCall.startedVoice": "{name} started a voice call",
|
|
"groupCall.startedVideo": "{name} started a video call",
|
|
"groupCall.inCall": "{count} in the call",
|
|
"groupCall.err.permission_denied": "The call could not start - microphone and camera access is blocked. Allow it for this site, then try again.",
|
|
"groupCall.err.device_not_found": "The call could not start - no microphone was found on this device.",
|
|
"groupCall.err.device_busy": "The call could not start - your microphone is in use by another app. Close it and try again.",
|
|
"groupCall.err.media_failed": "The call could not start - the microphone could not be opened.",
|
|
"groupCall.err.call_in_progress": "A call is already running in this group. Join it instead of starting another.",
|
|
"groupCall.err.not_ready": "Confirm the group code before calling.",
|
|
"groupCall.speaking": "{name} is speaking",
|
|
"groupCall.pin": "Show {name} large",
|
|
"groupCall.unpin": "Back to everyone",
|
|
"groupCall.showEveryone": "Everyone",
|
|
"msg.after5s": "5s after reading",
|
|
"msg.after15s": "15s after reading",
|
|
"msg.after30s": "30s after reading",
|
|
"msg.after1m": "1m after reading",
|
|
"msg.sec30": "30 seconds",
|
|
"msg.min5": "5 minutes",
|
|
"msg.hour1": "1 hour",
|
|
"desktop.shareDesc": "Send the code to your peer. It is one-time and expires shortly.",
|
|
"desktop.invitationCreated": "Secure invitation created - send it to your peer.",
|
|
"desktop.joinDesc": "Paste your peer's invitation code to build your secure answer.",
|
|
"desktop.offerTag": "offer · copy text",
|
|
"desktop.answerTag": "answer · copy text",
|
|
"desktop.offerPlaceholder": "Invitation code will appear here…",
|
|
"desktop.answerPlaceholder": "Response code will appear here…",
|
|
"desktop.backToChats": "Back to chats",
|
|
"desktop.sendFeedback": "Send feedback",
|
|
"desktop.callsNeedVerified": "Calls require a verified secure channel.",
|
|
"desktop.noOpenChannel": "No open secure channel.",
|
|
"desktop.chatCarriesCall": "This chat is carrying a group call. Leave the group call before placing a 1:1 call.",
|
|
"desktop.err.permission_denied": "The call could not start - microphone and camera access is blocked. Allow it in system settings, then try again.",
|
|
"desktop.language": "Language",
|
|
"desktop.languageHint": "Applies at once. Messages already sent keep the words they were written in.",
|
|
"desktop.compareCode": "Compare the verification code with your peer and confirm if it matches.",
|
|
"desktop.verifyBeforeFiles": "Complete verification before sending files.",
|
|
"desktop.verifyBeforeSending": "Complete verification before sending messages.",
|
|
"desktop.disconnectedByBackend": "Connection securely disconnected.",
|
|
"desktop.restoreFailed": "Could not restore the connection. Closing this chat.",
|
|
"desktop.channelNotReady": "The data channel is not available yet. Wait for the connection to establish.",
|
|
"desktop.enterCode": "Enter the verification code to confirm.",
|
|
"desktop.noOffer": "No invitation found. Create one first.",
|
|
"desktop.notInitiator": "You did not create this connection, so there is no answer for you to apply.",
|
|
"desktop.decryptFailed": "A message could not be decrypted and was discarded.",
|
|
"desktop.badMessageFormat": "A malformed frame arrived and was discarded.",
|
|
"desktop.notSentNotReady": "Message not sent: the secure channel is not ready. Wait for verification to finish, or reconnect.",
|
|
"desktop.micDenied": "Microphone access was denied.",
|
|
"desktop.noChannelWait": "No open secure channel - wait for the connection to establish.",
|
|
"desktop.sasFailed": "Verification failed. A machine-in-the-middle may be present, so the connection was aborted.",
|
|
"desktop.sasOk": "Verification succeeded. This channel is authenticated end to end.",
|
|
"desktop.iceForgotten": "Saved servers forgotten. Using public ICE servers.",
|
|
"desktop.icePublic": "Using public ICE servers.",
|
|
"desktop.verificationInProgress": "Security verification is still running. Wait for it to finish.",
|
|
"desktop.fileGone": "This file is no longer available for download.",
|
|
"desktop.codeMismatch": "The verification codes do not match. Disconnecting for safety.",
|
|
"desktop.noLocalCode": "Verification failed: there is no locally derived code to compare against. Disconnecting for safety.",
|
|
"desktop.protocolViolation": "The peer claimed the code was confirmed before you confirmed it. Disconnecting for safety.",
|
|
"desktop.verificationRejected": "Verification rejected. The connection was aborted for safety.",
|
|
"secLevel.HIGH": "HIGH",
|
|
"secLevel.MEDIUM": "MEDIUM",
|
|
"secLevel.LOW": "LOW",
|
|
"desktop.rerun": "Re-run",
|
|
"desktop.ice.customDesc": "Up to {max} servers, one URL per line or JSON.",
|
|
"desktop.ice.persistDesc": "Stored locally on this device. Leave off to use only for this session.",
|
|
"desktop.group.leaveNote": "The other members are told you left. Nothing about this group is kept on this device afterwards - there is no server holding a copy to rejoin from, so you would need a fresh invitation.",
|
|
"desktop.sec.ecdsaOk": "Peer key package signature verified during the handshake (ECDSA P-384 / SHA-384)",
|
|
"desktop.sec.ecdsaNone": "No completed handshake",
|
|
"desktop.sec.ecdhOk": "Session keys derived from an ephemeral ECDH P-384 exchange via HKDF-SHA-256",
|
|
"desktop.sec.ecdhNone": "No session keys derived",
|
|
"desktop.sec.encryptionOk": "AES-GCM encryption and decryption verified inside the core",
|
|
"desktop.sec.encryptionNa": "The AES-GCM self-test could not be run",
|
|
"desktop.sec.integrityOk": "Message integrity verified (AES-GCM authentication)",
|
|
"desktop.sec.integrityNa": "The integrity self-test could not be run",
|
|
"desktop.sec.pfsOk": "Double Ratchet active - every message has a key of its own",
|
|
"desktop.sec.pfsNa": "Not measured",
|
|
"desktop.sec.replayOk": "Ratchet message keys are destroyed once used, so a captured frame cannot be replayed",
|
|
"desktop.sec.replayNa": "Not measured",
|
|
"desktop.sec.dtlsPinned": "Peer DTLS fingerprint pinned: {fp}",
|
|
"desktop.sec.dtlsNone": "No remote DTLS fingerprint available",
|
|
"desktop.sec.sasBoth": "Both peers confirmed the out-of-band safety code",
|
|
"desktop.sec.sasIncomplete": "The safety code has not been confirmed by both peers",
|
|
"desktop.sec.metadataOk": "A dedicated metadata key was derived (HKDF metadata-protection-v4)",
|
|
"desktop.sec.metadataNone": "No metadata key",
|
|
"desktop.sec.coverOn": "Cover traffic active: random fake frames (32-128 B every 15-30 s) on the ratcheted channel",
|
|
"desktop.sec.coverOff": "The cover traffic generator is not running",
|
|
"desktop.sec.coverUnsupported": "Cover traffic needs a Double Ratchet session (the peer is on an older release)",
|
|
"desktop.tagline": "End-to-end freedom",
|
|
"desktop.callsNotHere": "Calls are not available in this build yet. Messages, files and group chats work as usual."
|
|
}
|
|
}
|