v6.7.3: faster loading, and pages search engines can read

The bundles carried all thirteen translations at once and a page fetched them a
third time as raw source; each page now loads only its own language. Alongside
that: JavaScript is minified, the eight stylesheets are served as one file, the
QR scanner is fetched after the app is up instead of on every visit, Inter ships
once rather than five copies of the same file, and Font Awesome is subset to the
82 icons this app draws instead of all 2468.

1.85 MB across 43 requests becomes under 700 KB across 33. On mobile the page
starts drawing in 1.6 s instead of 6.3 s and is usable in 4.5 s instead of 11 s.

Pages also carry their text in the HTML now. Everything was drawn by JavaScript
into an empty div, so crawlers saw correct metadata around nothing, and twelve of
the thirteen language pages had never been shown to anyone. The documentation is
published under /docs/ with a new FAQ, and unknown addresses return a real 404.

Separately: the localized shells were served with the year-long immutable cache
header meant for static assets, which pinned anyone who opened /de/ or /ru/ to
that build. The header is fixed and the service worker refreshes what it cached.

Claude-Session: https://claude.ai/code/session_014KjzTXxrhzYoDDWChYQ4u2
This commit is contained in:
lockbitchat
2026-09-04 00:41:46 -04:00
parent 0691ce618c
commit 414c27fda6
111 changed files with 19469 additions and 107393 deletions
+14 -1
View File
@@ -3597,6 +3597,19 @@ import { GroupCallMedia, mediaErrorCode } from './group/groupCallMedia.js';
// slice (declared in the active-session view block above).
const [showQRScanner, setShowQRScanner] = React.useState(false);
const [showQRScannerModal, setShowQRScannerModal] = React.useState(false);
// The QR bundle is fetched on idle after mount (see app-boot.js), so on a
// cold load it can still be in flight when someone opens the scanner. This
// flips when it lands and re-runs the effect that starts the camera;
// without it, opening the modal early left a permanently black viewfinder.
const [qrBundleReady, setQrBundleReady] = React.useState(() => typeof window !== 'undefined' && !!window.Html5Qrcode);
React.useEffect(() => {
if (qrBundleReady) return undefined;
const onReady = () => setQrBundleReady(true);
window.addEventListener('securebit:qr-ready', onReady);
// The event may have fired before this component mounted.
if (window.Html5Qrcode) setQrBundleReady(true);
return () => window.removeEventListener('securebit:qr-ready', onReady);
}, [qrBundleReady]);
// isVerified + mutual-verification flags per-session SAS slice (above).
const [securityLevel, setSecurityLevel] = React.useState(null);
@@ -6863,7 +6876,7 @@ import { GroupCallMedia, mediaErrorCode } from './group/groupCallMedia.js';
}
};
}
}, [showQRScannerModal]);
}, [showQRScannerModal, qrBundleReady]);
const sessionChats = decorateSessions(sessionsState);
const groupChats = decorateGroups(groupsState);
+10 -1
View File
@@ -38,7 +38,11 @@ const BecomePartner = () => {
{
id: 'furi',
name: 'FuriLabs',
logo: '/logo/furi.png',
// Renamed on resize rather than replaced: the file carries no ?v= stamp and is
// served immutable for a year, so Cloudflare and every browser that had already
// seen it kept handing back the old 164 KB original. A new path is the only
// thing that reliably busts a cache entry that has no version in its URL.
logo: '/logo/furi-160.png',
logoHeight: '54px',
url: 'https://furilabs.com/',
desc: t('partners.furilabs.desc'),
@@ -78,6 +82,11 @@ const BecomePartner = () => {
React.createElement('div', { key: 'logo', style: { display: 'flex', alignItems: 'center', marginBottom: '30px', height: '54px' } },
React.createElement('img', {
src: p.logo, alt: p.name,
// The partner strip sits well below the fold, so these are never part of
// the first screen — but they were being fetched as though they were.
// furi.png in particular arrived at 500×500 and 164 KB to be drawn 54px
// tall, which Lighthouse counted as the largest single waste on the page.
loading: 'lazy', decoding: 'async',
style: { height: p.logoHeight, width: 'auto', maxWidth: '190px', objectFit: 'contain', display: 'block' }
})
),
-306
View File
@@ -1,306 +0,0 @@
const ComparisonTable = () => {
const [selectedFeature, setSelectedFeature] = React.useState(null);
const messengers = [
{
name: "SecureBit.chat",
logo: <div className="w-8 h-8 bg-orange-500/10 border border-orange-500/20 rounded-lg flex items-center justify-center">
<i className="fas fa-shield-halved text-orange-400" />
</div>,
type: "P2P WebRTC",
version: "Latest",
color: "orange",
},
{
name: "Signal",
logo: (
<svg className="w-8 h-8" viewBox="0 0 122.88 122.31" xmlns="http://www.w3.org/2000/svg">
<path className="fill-blue-500" d="M27.75,0H95.13a27.83,27.83,0,0,1,27.75,27.75V94.57a27.83,27.83,0,0,1-27.75,27.74H27.75A27.83,27.83,0,0,1,0,94.57V27.75A27.83,27.83,0,0,1,27.75,0Z" />
<path className="fill-white" d="M61.44,25.39A35.76,35.76,0,0,0,31.18,80.18L27.74,94.86l14.67-3.44a35.77,35.77,0,1,0,19-66Z" />
</svg>
),
type: "Centralized",
version: "Latest",
color: "blue",
},
{
name: "Threema",
logo: (
<svg className="w-8 h-8" viewBox="0 0 122.88 122.88" xmlns="http://www.w3.org/2000/svg">
<rect width="122.88" height="122.88" rx="18.43" fill="#474747" />
<path fill="#FFFFFF" d="M44.26,78.48l-19.44,4.8l4.08-16.56c-4.08-5.28-6.48-12-6.48-18.96c0-18.96,17.52-34.32,39.12-34.32c21.6,0,39.12,15.36,39.12,34.32c0,18.96-17.52,34.32-39.12,34.32c-6,0-12-1.2-17.04-3.36L44.26,78.48z M50.26,44.64h-0.48c-0.96,0-1.68,0.72-1.44,1.68v15.6c0,0.96,0.72,1.68,1.68,1.68l23.04,0c0.96,0,1.68-0.72,1.68-1.68v-15.6c0-0.96-0.72-1.68-1.68-1.68h-0.48v-4.32c0-6-5.04-11.04-11.04-11.04S50.5,34.32,50.5,40.32v4.32H50.26z M68.02,44.64h-13.2v-4.32c0-3.6,2.88-6.72,6.72-6.72c3.6,0,6.72,2.88,6.72,6.72v4.32H68.02z" />
<circle cx="37.44" cy="97.44" r="6.72" fill="#3fe669" />
<circle cx="61.44" cy="97.44" r="6.72" fill="#3fe669" />
<circle cx="85.44" cy="97.44" r="6.72" fill="#3fe669" />
</svg>
),
type: "Centralized",
version: "Latest",
color: "green",
},
{
name: "Session",
logo: (
<svg className="w-8 h-8" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
<rect width="1024" height="1024" fill="#333132" />
<path fill="#00f782" d="M431 574.8c-.8-7.4-6.7-8.2-10.8-10.6-13.6-7.9-27.5-15.4-41.3-23l-22.5-12.3c-8.5-4.7-17.1-9.2-25.6-14.1-10.5-6-21-11.9-31.1-18.6-18.9-12.5-33.8-29.1-46.3-48.1-8.3-12.6-14.8-26.1-19.2-40.4-6.7-21.7-10.8-44.1-7.8-66.8 1.8-14 4.6-28 9.7-41.6 7.8-20.8 19.3-38.8 34.2-54.8 9.8-10.6 21.2-19.1 33.4-26.8 14.7-9.3 30.7-15.4 47.4-19 13.8-3 28.1-4.3 42.2-4.4 89.9-.4 179.7-.3 269.6 0 12.6 0 25.5 1 37.7 4.1 24.3 6.2 45.7 18.2 63 37 11.2 12.2 20.4 25.8 25.8 41.2 7.3 20.7 12.3 42.1 6.7 64.4-2.1 8.5-2.7 17.5-6.1 25.4-4.7 10.9-10.8 21.2-17.2 31.2-8.7 13.5-20.5 24.3-34.4 32.2-10.1 5.7-21 10.2-32 14.3-18.1 6.7-37.2 5-56.1 5.2-17.2.2-34.5 0-51.7.1-1.7 0-3.4 1.2-5.1 1.9 1.3 1.8 2.1 4.3 3.9 5.3 13.5 7.8 27.2 15.4 40.8 22.9 11 6 22.3 11.7 33.2 17.9 15.2 8.5 30.2 17.4 45.3 26.1 19.3 11.1 34.8 26.4 47.8 44.3 9.7 13.3 17.2 27.9 23 43.5 6.1 16.6 9.2 33.8 10.4 51.3.6 9.1-.7 18.5-1.9 27.6-1.2 9.1-2.7 18.4-5.6 27.1-3.3 10.2-7.4 20.2-12.4 29.6-8.4 15.7-19.6 29.4-32.8 41.4-12.7 11.5-26.8 20.6-42.4 27.6-22.9 10.3-46.9 14.4-71.6 14.5-89.7.3-179.4.2-269.1-.1-12.6 0-25.5-1-37.7-3.9-24.5-5.7-45.8-18-63.3-36.4-11.6-12.3-20.2-26.5-26.6-41.9-2.7-6.4-4.1-13.5-5.4-20.4-1.5-8.1-2.8-16.3-3.1-24.5-.6-15.7 2.8-30.9 8.2-45.4 8.2-22 21.7-40.6 40.2-55.2 10-7.9 21.3-13.7 33.1-18.8 16.6-7.2 34-8.1 51.4-8.5 21.9-.5 43.9-.1 65.9-.1 1.9-.1 3.9-.3 6.2-.4zm96.3-342.4c0 .1 0 .1 0 0-48.3.1-96.6-.6-144.9.5-13.5.3-27.4 3.9-40.1 8.7-14.9 5.6-28.1 14.6-39.9 25.8-20.2 19-32.2 42.2-37.2 68.9-3.6 19-1.4 38.1 4.1 56.5 4.1 13.7 10.5 26.4 18.5 38.4 14.8 22.2 35.7 36.7 58.4 49.2 11 6.1 22.2 11.9 33.2 18 13.5 7.5 26.9 15.1 40.4 22.6 13.1 7.3 26.2 14.5 39.2 21.7 9.7 5.3 19.4 10.7 29.1 16.1 2.9 1.6 4.1.2 4.5-2.4.3-2 .3-4 .3-6.1v-58.8c0-19.9.1-39.9 0-59.8 0-6.6 1.7-12.8 7.6-16.1 3.5-2 8.2-2.8 12.4-2.8 50.3-.2 100.7-.2 151-.1 19.8 0 38.3-4.4 55.1-15.1 23.1-14.8 36.3-36.3 40.6-62.9 3.4-20.8-1-40.9-12.4-58.5-17.8-27.5-43.6-43-76.5-43.6-47.8-.8-95.6-.2-143.4-.2zm-30.6 559.7c45.1 0 90.2-.2 135.3.1 18.9.1 36.6-3.9 53.9-11.1 18.4-7.7 33.6-19.8 46.3-34.9 9.1-10.8 16.2-22.9 20.8-36.5 4.2-12.4 7.4-24.7 7.3-37.9-.1-10.3.2-20.5-3.4-30.5-2.6-7.2-3.4-15.2-6.4-22.1-3.9-8.9-8.9-17.3-14-25.5-12.9-20.8-31.9-34.7-52.8-46.4-10.6-5.9-21.2-11.6-31.8-17.5-10.3-5.7-20.4-11.7-30.7-17.4-11.2-6.1-22.5-11.9-33.7-18-16.6-9.1-33.1-18.4-49.8-27.5-4.9-2.7-6.1-1.9-6.4 3.9-.1 2-.1 4.1-.1 6.1v114.5c0 14.8-5.6 20.4-20.4 20.4-47.6.1-95.3-.1-142.9.2-10.5.1-21.1 1.4-31.6 2.8-16.5 2.2-30.5 9.9-42.8 21-17 15.5-27 34.7-29.4 57.5-1.1 10.9-.4 21.7 2.9 32.5 3.7 12.3 9.2 23.4 17.5 33 19.2 22.1 43.4 33.3 72.7 33.3 46.6.1 93 0 139.5 0z" />
</svg>
),
type: "Onion Network",
version: "Latest",
color: "cyan",
},
];
const features = [
{
name: "Security Architecture",
lockbit: { status: "trophy", detail: "18-layer military-grade defense system with complete ASN.1 validation" },
signal: { status: "check", detail: "Signal Protocol with double ratchet" },
threema: { status: "check", detail: "Standard security implementation" },
session: { status: "check", detail: "Modified Signal Protocol + Onion routing" },
},
{
name: "Cryptography",
lockbit: { status: "trophy", detail: "ECDH P-384 + AES-GCM 256 + ECDSA P-384" },
signal: { status: "check", detail: "Signal Protocol + Double Ratchet" },
threema: { status: "check", detail: "NaCl + XSalsa20 + Poly1305" },
session: { status: "check", detail: "Modified Signal Protocol" },
},
{
name: "Perfect Forward Secrecy",
lockbit: { status: "trophy", detail: "Auto rotation every 5 minutes or 100 messages" },
signal: { status: "check", detail: "Double Ratchet algorithm" },
threema: { status: "warning", detail: "Partial (group chats)" },
session: { status: "check", detail: "Session Ratchet algorithm" },
},
{
name: "Architecture",
lockbit: { status: "trophy", detail: "Pure P2P WebRTC without servers" },
signal: { status: "times", detail: "Centralized Signal servers" },
threema: { status: "times", detail: "Threema servers in Switzerland" },
session: { status: "warning", detail: "Onion routing via network nodes" },
},
{
name: "Registration Anonymity",
lockbit: { status: "trophy", detail: "No registration required, instant anonymous channels" },
signal: { status: "times", detail: "Phone number required" },
threema: { status: "check", detail: "ID generated locally" },
session: { status: "check", detail: "Random session ID" },
},
{
name: "Metadata Protection",
lockbit: { status: "trophy", detail: "Full metadata encryption + traffic obfuscation" },
signal: { status: "warning", detail: "Sealed Sender (partial)" },
threema: { status: "warning", detail: "Minimal metadata" },
session: { status: "check", detail: "Onion routing hides metadata" },
},
{
name: "Traffic Obfuscation",
lockbit: { status: "trophy", detail: "Fake traffic + pattern masking + packet padding" },
signal: { status: "times", detail: "No traffic obfuscation" },
threema: { status: "times", detail: "No traffic obfuscation" },
session: { status: "check", detail: "Onion routing provides obfuscation" },
},
{
name: "Open Source",
lockbit: { status: "trophy", detail: "100% open + auditable + MIT license" },
signal: { status: "check", detail: "Fully open" },
threema: { status: "warning", detail: "Only clients open" },
session: { status: "check", detail: "Fully open" },
},
{
name: "MITM Protection",
lockbit: { status: "trophy", detail: "Out-of-band verification + mutual auth + ECDSA" },
signal: { status: "check", detail: "Safety numbers verification" },
threema: { status: "check", detail: "QR code scanning" },
session: { status: "warning", detail: "Basic key verification" },
},
{
name: "Censorship Resistance",
lockbit: { status: "trophy", detail: "Impossible to block P2P + no servers to target" },
signal: { status: "warning", detail: "Blocked in authoritarian countries" },
threema: { status: "warning", detail: "May be blocked" },
session: { status: "check", detail: "Onion routing bypasses blocks" },
},
{
name: "Data Storage",
lockbit: { status: "trophy", detail: "Zero data storage - only in browser memory" },
signal: { status: "warning", detail: "Local database storage" },
threema: { status: "warning", detail: "Local + optional backup" },
session: { status: "warning", detail: "Local database storage" },
},
{
name: "Key Security",
lockbit: { status: "trophy", detail: "Non-extractable keys + hardware protection" },
signal: { status: "check", detail: "Secure key storage" },
threema: { status: "check", detail: "Local key storage" },
session: { status: "check", detail: "Secure key storage" },
},
{
name: "Post-Quantum Roadmap",
lockbit: { status: "check", detail: "Planned v5.0 - CRYSTALS-Kyber/Dilithium" },
signal: { status: "warning", detail: "PQXDH in development" },
threema: { status: "times", detail: "Not announced" },
session: { status: "times", detail: "Not announced" },
},
];
const getStatusIcon = (status) => {
const statusMap = {
"trophy": { icon: "fa-trophy", color: "accent-orange" },
"check": { icon: "fa-check", color: "text-green-300" },
"warning": { icon: "fa-exclamation-triangle", color: "text-yellow-300" },
"times": { icon: "fa-times", color: "text-red-300" },
};
return statusMap[status] || { icon: "fa-question", color: "text-gray-400" };
};
const toggleFeatureDetail = (index) => {
setSelectedFeature(selectedFeature === index ? null : index);
};
return (
<div className="mt-16">
{/* Title */}
<div className="text-center mb-8">
<h3 className="text-3xl font-bold text-white mb-3">
Enhanced Security Edition Comparison
</h3>
<p className="text-gray-400 max-w-2xl mx-auto mb-4">
Enhanced Security Edition vs leading secure messengers
</p>
</div>
{/* Table container */}
<div className="max-w-7xl mx-auto">
{/* Mobile Alert */}
<div className="md:hidden p-4 bg-yellow-500/10 border border-yellow-500/20 rounded-lg mb-4">
<p className="text-yellow-400 text-sm text-center">
<i className="fas fa-lightbulb me-2"></i>
Rotate your device horizontally for better viewing
</p>
</div>
{/* Table */}
<div className="overflow-x-auto">
<table
className="w-full border-collapse rounded-xl overflow-hidden shadow-2xl"
style={{ backgroundColor: "rgba(42, 43, 42, 0.9)" }}
>
{/* Table Header */}
<thead>
<tr className="bg-black-table">
<th className="text-start p-4 border-b border-gray-600 text-white font-bold min-w-[240px]">
Security Criterion
</th>
{messengers.map((messenger, index) => (
<th key={`messenger-${index}`} className="text-center p-4 border-b border-gray-600 min-w-[160px]">
<div className="flex flex-col items-center">
<div className="mb-2">{messenger.logo}</div>
<div className={`text-sm font-bold ${
messenger.color === 'orange' ? 'text-orange-400' :
messenger.color === 'blue' ? 'text-blue-400' :
messenger.color === 'green' ? 'text-green-400' :
'text-cyan-400'
}`}>
{messenger.name}
</div>
<div className="text-xs text-gray-400">{messenger.type}</div>
<div className="text-xs text-gray-500 mt-1">{messenger.version}</div>
</div>
</th>
))}
</tr>
</thead>
{/* Table body */}
<tbody>
{features.map((feature, featureIndex) => (
<React.Fragment key={`feature-${featureIndex}`}>
<tr
className={`border-b border-gray-700/30 transition-all duration-200 cursor-pointer hover:bg-[rgb(20_20_20_/30%)] ${
selectedFeature === featureIndex ? 'bg-[rgb(20_20_20_/50%)]' : ''
}`}
onClick={() => toggleFeatureDetail(featureIndex)}
>
<td className="p-4 text-white font-semibold">
<div className="flex items-center justify-between">
<span>{feature.name}</span>
<i className={`fas fa-chevron-${selectedFeature === featureIndex ? 'up' : 'down'} text-xs text-gray-400 opacity-60 transition-all duration-200`} />
</div>
</td>
<td className="p-4 text-center">
<i className={`fas ${getStatusIcon(feature.lockbit.status).icon} ${getStatusIcon(feature.lockbit.status).color} text-2xl`} />
</td>
<td className="p-4 text-center">
<i className={`fas ${getStatusIcon(feature.signal.status).icon} ${getStatusIcon(feature.signal.status).color} text-2xl`} />
</td>
<td className="p-4 text-center">
<i className={`fas ${getStatusIcon(feature.threema.status).icon} ${getStatusIcon(feature.threema.status).color} text-2xl`} />
</td>
<td className="p-4 text-center">
<i className={`fas ${getStatusIcon(feature.session.status).icon} ${getStatusIcon(feature.session.status).color} text-2xl`} />
</td>
</tr>
{/* Details */}
{selectedFeature === featureIndex && (
<tr className="border-b border-gray-700/30 bg-gradient-to-r from-gray-800/20 to-gray-900/20">
<td className="p-4 text-xs text-gray-400 font-medium">Technical Details:</td>
<td className="p-4 text-center">
<div className="text-xs text-orange-300 font-medium leading-relaxed">
{feature.lockbit.detail}
</div>
</td>
<td className="p-4 text-center">
<div className="text-xs text-blue-300 leading-relaxed">
{feature.signal.detail}
</div>
</td>
<td className="p-4 text-center">
<div className="text-xs text-green-300 leading-relaxed">
{feature.threema.detail}
</div>
</td>
<td className="p-4 text-center">
<div className="text-xs text-cyan-300 leading-relaxed">
{feature.session.detail}
</div>
</td>
</tr>
)}
</React.Fragment>
))}
</tbody>
</table>
</div>
{/* Legend */}
<div className="mt-8 grid grid-cols-2 md:grid-cols-4 gap-4 max-w-5xl mx-auto">
<div className="flex items-center justify-center p-4 bg-orange-500/10 rounded-xl hover:bg-orange-500/40 transition-colors">
<i className="fas fa-trophy text-orange-400 me-2 text-xl"></i>
<span className="text-orange-300 text-sm font-bold">Category Leader</span>
</div>
<div className="flex items-center justify-center p-4 bg-green-500/10 rounded-xl hover:bg-green-600/40 transition-colors">
<i className="fas fa-check text-green-300 me-2 text-xl"></i>
<span className="text-green-200 text-sm font-bold">Excellent</span>
</div>
<div className="flex items-center justify-center p-4 bg-yellow-500/10 rounded-xl hover:bg-yellow-600/40 transition-colors">
<i className="fas fa-exclamation-triangle text-yellow-300 me-2 text-xl"></i>
<span className="text-yellow-200 text-sm font-bold">Partial/Limited</span>
</div>
<div className="flex items-center justify-center p-4 bg-red-500/10 rounded-xl hover:bg-red-600/40 transition-colors">
<i className="fas fa-times text-red-300 me-2 text-xl"></i>
<span className="text-red-200 text-sm font-bold">Not Available</span>
</div>
</div>
</div>
</div>
);
};
window.ComparisonTable = ComparisonTable;
-59
View File
@@ -1,59 +0,0 @@
const SecurityFeatures = () => {
const features = [
{ id: 'feature1', color: '#00ff88', icon: 'fas fa-key accent-green', title: 'ECDH P-384 Key Exchange', desc: 'Military-grade elliptic curve key exchange' },
{ id: 'feature2', color: '#a78bfa', icon: 'fas fa-user-shield accent-purple', title: 'MITM Protection', desc: 'Out-of-band verification against attacks' },
{ id: 'feature3', color: '#ff8800', icon: 'fas fa-lock accent-orange', title: 'AES-GCM 256 Encryption', desc: 'Authenticated encryption standard' },
{ id: 'feature4', color: '#00ffff', icon: 'fas fa-sync-alt accent-cyan', title: 'Perfect Forward Secrecy', desc: 'Automatic key rotation every 5 minutes' },
{ id: 'feature5', color: '#0088ff', icon: 'fas fa-signature accent-blue', title: 'ECDSA P-384 Signatures', desc: 'Digital signatures for message integrity' },
{ id: 'feature6', color: '#f87171', icon: 'fas fa-shield-alt accent-red', title: 'SAS Security', desc: 'Revolutionary key exchange & MITM protection' }
];
React.useEffect(() => {
const cards = document.querySelectorAll(".card");
const radius = 200;
const handleMove = (e) => {
cards.forEach((card) => {
const rect = card.getBoundingClientRect();
const cx = rect.left + rect.width / 2;
const cy = rect.top + rect.height / 2;
const dx = e.clientX - cx;
const dy = e.clientY - cy;
const dist = Math.sqrt(dx * dx + dy * dy);
if (dist < radius) {
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
card.style.setProperty("--x", `${x}px`);
card.style.setProperty("--y", `${y}px`);
card.classList.add("active-glow");
} else {
card.classList.remove("active-glow");
}
});
};
window.addEventListener("mousemove", handleMove);
return () => window.removeEventListener("mousemove", handleMove);
}, []);
const renderFeature = (f) =>
React.createElement('div', {
key: f.id,
className: "card p-3 sm:p-4 text-center",
style: { "--color": f.color }
}, [
React.createElement('div', { key: 'icon', className: "w-10 h-10 sm:w-12 sm:h-12 flex items-center justify-center mx-auto mb-2 sm:mb-3 relative z-10" }, [
React.createElement('i', { className: f.icon })
]),
React.createElement('h4', { key: 'title', className: "text-xs sm:text-sm font-medium text-primary mb-1 relative z-10" }, f.title),
React.createElement('p', { key: 'desc', className: "text-xs text-muted leading-tight relative z-10" }, f.desc)
]);
return React.createElement('div', {
className: "grid grid-cols-2 md:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4 max-w-6xl mx-auto mt-8"
}, features.map(renderFeature));
};
window.SecurityFeatures = SecurityFeatures;
-123
View File
@@ -1,123 +0,0 @@
const Testimonials = () => {
const testimonials = [
{ id: "t1", rating: 5.0, text: "The interface feels modern and smooth. It saves me at least 2 hours every day when managing design tasks."},
{ id: "t2", rating: 5.0, text: "Finally, a solution that blends speed with simplicity. My team adopted it within a week without training."},
{ id: "t3", rating: 5.0, text: "I can track progress in real time and get a clear overview of our workflow. It feels empowering."},
{ id: "t4", rating: 5.0, text: "Our pipeline visibility improved dramatically. I no longer need to manually track updates."},
{ id: "t5", rating: 5.0, text: "The security-first approach gives me peace of mind. We handle sensitive data with confidence now."},
{ id: "t6", rating: 5.0, text: "User feedback cycles are now twice as fast. It helps us test and ship features quickly."}
];
React.useEffect(() => {
const colUp = document.querySelector(".col-up");
const colDown = document.querySelector(".col-down");
const wrapper = document.querySelector(".testimonials-wrapper");
if (!colUp || !colDown || !wrapper) return;
let paused = false;
const speed = 0.5;
let animationId;
const cloneCards = (container) => {
const cards = Array.from(container.children);
cards.forEach(card => {
const clone = card.cloneNode(true);
container.appendChild(clone);
});
};
cloneCards(colUp);
cloneCards(colDown);
const getHalfHeight = (el) => {
const children = Array.from(el.children);
const halfCount = children.length / 2;
let height = 0;
for (let i = 0; i < halfCount; i++) {
height += children[i].offsetHeight;
if (i < halfCount - 1) height += 24;
}
return height;
};
let y1 = 0;
const maxScroll1 = getHalfHeight(colUp);
const maxScroll2 = getHalfHeight(colDown);
let y2 = -maxScroll2;
function animate() {
if (!paused) {
y1 -= speed;
y2 += speed;
if (Math.abs(y1) >= maxScroll1) {
y1 = 0;
}
if (y2 >= 0) {
y2 = -maxScroll2;
}
colUp.style.transform = `translateY(${y1}px)`;
colDown.style.transform = `translateY(${y2}px)`;
}
animationId = requestAnimationFrame(animate);
}
animate();
const handleMouseEnter = () => { paused = true; };
const handleMouseLeave = () => { paused = false; };
wrapper.addEventListener("mouseenter", handleMouseEnter);
wrapper.addEventListener("mouseleave", handleMouseLeave);
return () => {
cancelAnimationFrame(animationId);
wrapper.removeEventListener("mouseenter", handleMouseEnter);
wrapper.removeEventListener("mouseleave", handleMouseLeave);
};
}, []);
const renderCard = (t, index) => (
<div key={`${t.id}-${index}`} className="card bg-neutral-900 rounded-xl p-5 shadow-md w-72 text-sm text-white flex-shrink-0">
<div className="flex items-center mb-2 text-yellow-400">
{"★".repeat(Math.floor(t.rating))}
<span className="ms-2 text-secondary">{t.rating.toFixed(1)}</span>
</div>
<p className="text-secondary mb-3">{t.text}</p>
</div>
);
return (
<section className="py-14 px-6 bg-transparent">
<div className="grid grid-cols-1 lg:grid-cols-5 gap-12 max-w-7xl mx-auto items-center">
<div className="lg:col-span-2 flex flex-col justify-center">
<p className="text-sm text-secondary mb-2">Testimonials</p>
<h2 className="text-2xl sm:text-3xl font-bold text-white mb-4 leading-snug">
What our users are saying
</h2>
<p className="text-secondary text-sm">
We continuously listen to our community and improve every day.
</p>
</div>
<div className="lg:col-span-3 testimonials-wrapper flex gap-6 overflow-hidden relative h-[420px]">
<div className="pointer-events-none absolute top-0 start-0 w-full h-16 bg-gradient-to-b from-[#1f1f1f]/90 to-transparent z-20"></div>
<div className="pointer-events-none absolute bottom-0 start-0 w-full h-16 bg-gradient-to-t from-[#1f1f1f]/90 to-transparent z-20"></div>
<div className="col-up flex flex-col gap-6">
{testimonials.map((t, i) => renderCard(t, i))}
</div>
<div className="col-down flex flex-col gap-6">
{testimonials.map((t, i) => renderCard(t, i))}
</div>
</div>
</div>
</section>
);
};
window.Testimonials = Testimonials;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "اللغة",
"language.suggest.text": "هذه الصفحة متوفرة أيضًا بالعربية.",
"language.suggest.cta": "اقرأ بالعربية",
"language.suggest.dismiss": "إغلاق",
"community.title": "انضمّ إلى مستقبل الخصوصية",
"community.description": "ينمو SecureBit بفضل مجتمعه. أفكاركم وملاحظاتكم هي ما يصوغ مستقبل التواصل الآمن - مبنيّ في العلن، مع تحقّق ASN.1 كامل من طرف إلى طرف.",
"community.github": "مستودع GitHub",
"community.feedback": "الملاحظات",
"unique.eyebrow": "ما الذي يميّزنا",
"unique.heading": "لماذا SecureBit فريد",
"unique.s1.titleTop": "نواة تشفير",
"unique.s1.titleBottom": "متعدّدة الطبقات",
"unique.s1.collapsed": "نواة التشفير",
"unique.s1.desc": "تبادل مفاتيح ECDH P-384، وحمولات AES-256-GCM، وتواقيع ECDSA، وتحقّق ASN.1 كامل - مجموعة في خطّ واحد مُحصَّن.",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "ندٌّ لندّ خالص",
"unique.s2.titleBottom": "عبر WebRTC",
"unique.s2.collapsed": "WebRTC ندٌّ لندّ خالص",
"unique.s2.desc": "تنتقل الرسائل مباشرةً بين الأجهزة عبر WebRTC. لا مُرحِّل يحتفظ ببياناتك - الخادم يساعد الطرفين على إيجاد بعضهما فقط.",
"unique.s2.tags": [
"DTLS 1.3",
"بلا مُرحِّل"
],
"unique.s3.titleTop": "سرّية تامّة",
"unique.s3.titleBottom": "إلى الأمام",
"unique.s3.collapsed": "السرّية التامّة للأمام",
"unique.s3.desc": "تتبدّل مفاتيح الجلسة باستمرار وتُتلَف بعد الاستعمال، فلا يفتح مفتاح واحد مسروق أيّ محادثة ماضية.",
"unique.s3.tags": [
"مفاتيح عابرة",
"تبديل تلقائي"
],
"unique.s4.titleTop": "تمويه",
"unique.s4.titleBottom": "حركة البيانات",
"unique.s4.collapsed": "تمويه حركة البيانات",
"unique.s4.desc": "تُحشى أحجام الحزم وتوقيتاتها وتُعشوَأ، فتختفي أنماط البيانات الوصفية عن أعين من يراقب الخطّ.",
"unique.s4.tags": [
"حشو الحزم",
"تشويش التوقيت"
],
"unique.s5.titleTop": "صفر",
"unique.s5.titleBottom": "جمعٍ للبيانات",
"unique.s5.collapsed": "صفر جمعٍ للبيانات",
"unique.s5.desc": "لا حسابات ولا سجلّات ولا تخزين للرسائل. لا شيء على خادم يمكن أن يتسرّب أو يُطلَب قضائياً أو يُباع.",
"unique.s5.tags": [
"بلا حسابات",
"بلا سجلّات"
],
"partners.eyebrow": "الشركاء والمنظومة",
"partners.heading": "شركاؤنا يثقون بنا",
"partners.aegis.desc": "شريك رأسمالي يؤمّن الاتصالات المالية السرّية عبر محفظته الاستثمارية.",
"partners.aegis.role": "داعم استراتيجي",
"partners.furilabs.desc": "هواتف لينكس تضع الخصوصية أولاً وتشحن SecureBit كقناة آمنة افتراضية.",
"partners.furilabs.role": "شريك تقني",
"partners.inviteTitle": "كن شريكاً",
"partners.inviteDesc": "هل تبني عتاداً أو بنية تحتية للخصوصية؟ لنُدمج SecureBit معاً.",
"partners.inviteCta": "ابدأ محادثة",
"roadmap.eyebrow": "خارطة طريق التطوير",
"roadmap.heading": "تطوّر SecureBit",
"roadmap.subheading": "من أوّل نموذج أوّلي إلى شبكة لامركزية مقاومة للحوسبة الكمّية - مع تحقّق ASN.1 كامل في كلّ طبقة.",
"roadmap.progress": "أُنجزت {shipped} من أصل {total} محطّة",
"roadmap.upcoming": "{upcoming} في الطريق",
"roadmap.keyFeatures": "أبرز المزايا",
"roadmap.status.released": "صدرت",
"roadmap.status.current": "الحالية",
"roadmap.status.dev": "قيد التطوير",
"roadmap.status.planned": "مُخطّطة",
"roadmap.status.research": "قيد البحث",
"hero.headlineTop": "خطٌّ مباشر",
"hero.headlineBottom": "لا يقرأه إلّا أنتما.",
"hero.subheading": "تُولَّد المفاتيح على جهازك وتُتبادَل ندّاً لندّ. بلا حسابات وبلا خوادم تحفظ رسائلك.",
"hero.diagramAlt": "خطّ مشفّر مباشر إلى طرف واحد، مع انضمام طرفين آخرين إلى الشبكة",
"intro.createTitle": "أنشئ قناة جديدة",
"intro.createDesc": "يولّد جهازك المفاتيح ودعوة تُستعمل مرّة واحدة. لا شيء يمرّ عبر خادم.",
"intro.createCta": "توليد المفاتيح والدعوة",
"intro.joinTitle": "انضمّ إلى قناة",
"intro.scanTitle": "امسح رمز QR بالكاميرا",
"intro.scanSubtitle": "الأسرع - وجّهها إلى شاشة الطرف الآخر",
"intro.orPasteCode": "أو ألصق الرمز",
"intro.pastePlaceholder": "ألصق رمز الدعوة هنا…",
"intro.connect": "اتّصل",
"intro.connecting": "جارٍ المعالجة…",
"roadmap.r1.title": "بداية التطوير",
"roadmap.r1.sub": "الفكرة والنموذج الأوّلي وتهيئة البنية التحتية",
"roadmap.r1.date": "أوائل 2025",
"roadmap.r1.features": [
"بلورة الفكرة والمتطلّبات",
"اختيار التقنيات: WebRTC وP2P والتعمية",
"أوّل نماذج للمراسلة",
"إنشاء المستودع والتكامل المستمر",
"بنية التشفير الأساسية",
"تصميم تجربة وواجهة الاستخدام"
],
"roadmap.r2.title": "إصدار ألفا",
"roadmap.r2.sub": "أوّل ألفا علنية: دردشة أساسية وتبادل مفاتيح",
"roadmap.r2.date": "ربيع 2025",
"roadmap.r2.features": [
"مراسلة ندٌّ لندّ أساسية عبر WebRTC",
"تشفير بسيط من طرف إلى طرف (مخطّط تجريبي)",
"إشارات مستقرّة وإعادة اتصال",
"واجهة بحدّها الأدنى للاختبار",
"جمع ملاحظات المختبِرين الأوائل"
],
"roadmap.r3.title": "تحصين أمني",
"roadmap.r3.sub": "تعزيز الأمان وإطلاق فرع مستقرّ",
"roadmap.r3.date": "صيف 2025",
"roadmap.r3.features": [
"تطبيق ECDH/ECDSA في الإنتاج",
"السرّية التامّة للأمام وتبديل المفاتيح",
"تحسين فحوص الاستيثاق",
"تشفير الملفّات ونقل الحمولات الكبيرة",
"تدقيق عمليات التعمية الأساسية"
],
"roadmap.r4.title": "التوسّع والاستقرار",
"roadmap.r4.sub": "توسيع الشبكة وتحسين الاستقرار",
"roadmap.r4.date": "خريف 2025",
"roadmap.r4.features": [
"تحسين اتصالات P2P واجتياز NAT",
"آليات إعادة الاتصال وطوابير الرسائل",
"خفض استهلاك البطارية على الهواتف",
"دعم المزامنة بين عدّة أجهزة",
"أدوات مراقبة وتسجيل للمطوّرين"
],
"roadmap.r5.title": "إصدار الخصوصية أوّلاً",
"roadmap.r5.sub": "التركيز على الخصوصية: تقليل البيانات الوصفية",
"roadmap.r5.date": "شتاء 2025",
"roadmap.r5.features": [
"حماية البيانات الوصفية وتقليل البصمة",
"تجارب على توجيه البصلة وجداول DHT",
"خيارات للاتصالات المجهولة",
"التحضير لتدقيق مفتوح للشيفرة",
"تحسين عمليات التحقّق من المستخدمين"
],
"roadmap.r6.title": "إصدار الأمان المعزَّز",
"roadmap.r6.sub": "تعمية بمستوى عسكري من 18 طبقة مع تحقّق ASN.1 كامل",
"roadmap.r6.date": "أواخر 2025",
"roadmap.r6.features": [
"أمان ثلاثي الطبقات: ECDH وDTLS وSAS",
"تشفير ECDH P-384 مع AES-GCM بطول 256 بت",
"التحقّق من بصمة DTLS",
"تحقّق SAS (سلسلة استيثاق قصيرة)",
"السرّية التامّة للأمام مع تبديل المفاتيح",
"حماية مُعزَّزة من هجمات الوسيط",
"تحقّق ASN.1 DER كامل",
"التحقّق من المعرّفات OID ونقاط المنحنى",
"التحقّق من بنية SPKI",
"بنية WebRTC ندٌّ لندّ",
"حماية البيانات الوصفية",
"شيفرة مفتوحة المصدر 100%"
],
"roadmap.r7.title": "إصدار سطح المكتب",
"roadmap.r7.sub": "تطبيقات أصلية لويندوز وماك ولينكس",
"roadmap.r7.date": "أوائل 2026",
"roadmap.r7.features": [
"تطبيق ويندوز (Tauri v2)",
"تطبيق macOS (Tauri v2)",
"دعم AppImage للينكس (Tauri v2)",
"إشعارات فورية",
"إعادة اتصال تلقائية",
"مزامنة بين الأجهزة",
"تحسين تجربة وواجهة الاستخدام",
"دعم ملفّات حتى 100 ميغابايت"
],
"roadmap.r8.title": "الصوت والمكالمات الآمنة",
"roadmap.r8.sub": "رسائل صوتية ومكالمات صوتية ومرئية مشفّرة",
"roadmap.r8.date": "أوائل 2026",
"roadmap.r8.features": [
"رسائل صوتية مشفّرة من طرف إلى طرف",
"مكالمات صوتية مشفّرة ثنائية (WebRTC)",
"مكالمات مرئية مشفّرة ثنائية (WebRTC)",
"سرّية تامّة للأمام للوسائط الحيّة",
"تدفّقات وسائط محميّة بـ SRTP/DTLS",
"تحقّق SAS أثناء المكالمة",
"إشعارات المكالمات وإعادة الاتصال التلقائية",
"وسائط ندٌّ لندّ بزمن استجابة منخفض"
],
"roadmap.r9.title": "المحادثات الجماعية",
"roadmap.r9.sub": "دردشات جماعية مع الحفاظ على الخصوصية",
"roadmap.r9.date": "الآن",
"roadmap.r9.features": [
"دردشات جماعية ندٌّ لندّ حتى 8 مشاركين",
"توصيل شبكي مع احتياطي ترحيل موقَّع",
"رمز أمان واحد للمجموعة يقارنه الجميع",
"مراسم الالتزام ثمّ الكشف ضدّ تخمين الرمز",
"مفاتيح هوية لكلّ مجموعة، عابرة بالتصميم",
"عضوية موقَّعة مع ترتيب حِقَبي",
"رسائل موقَّعة، فأيّ نصّ منقسم يمكن إثباته",
"بلا خادم وبلا مفتاح جماعي مشترك وبلا سجلّ"
],
"roadmap.r10.title": "إصدار الهواتف",
"roadmap.r10.sub": "تطبيقات أصلية لـ iOS وأندرويد",
"roadmap.r10.date": "الربع الثاني 2027",
"roadmap.r10.features": [
"تطبيق iOS أصلي (Swift/SwiftUI)",
"تطبيق أندرويد أصلي (Kotlin/Jetpack Compose)",
"دعم PWA لمتصفّحات الهواتف",
"إشعارات فورية مدفوعة",
"تحسين استهلاك البطارية",
"واجهة مهيّأة للهواتف",
"طابور رسائل دون اتصال",
"استيثاق حيوي"
],
"roadmap.r11.title": "إصدار مقاوم للكمّ",
"roadmap.r11.sub": "حماية من الحواسيب الكمّية",
"roadmap.r11.date": "الربع الرابع 2027",
"roadmap.r11.features": [
"تعمية ما بعد الكمّ CRYSTALS-Kyber",
"تواقيع رقمية SPHINCS+",
"مخطّط هجين: كلاسيكي + ما بعد الكمّ",
"تبادل مفاتيح آمن كمّياً",
"خوارزميات تجزئة محدَّثة",
"ترحيل الجلسات القائمة",
"توافق مع الإصدار 5.x",
"بروتوكولات مقاومة للكمّ"
],
"roadmap.r12.title": "شبكة لامركزية",
"roadmap.r12.sub": "شبكة لامركزية بالكامل",
"roadmap.r12.date": "2028",
"roadmap.r12.features": [
"شبكة عُقَد متشابكة",
"جدول DHT لاكتشاف الأقران",
"توجيه بصلي مدمج",
"اقتصاد رمزي وحوافز للعُقَد",
"حوكمة عبر منظّمة لامركزية",
"قابلية التشغيل البيني مع شبكات أخرى",
"توافق عبر المنصّات",
"شبكة ذاتية التعافي"
],
"roadmap.r13.title": "مساعد خصوصية بالذكاء الاصطناعي",
"roadmap.r13.sub": "ذكاء اصطناعي للخصوصية والأمان",
"roadmap.r13.date": "2028 وما بعدها",
"roadmap.r13.features": [
"تحليل تهديدات محلّي بالذكاء الاصطناعي",
"كشف تلقائي لهجمات الوسيط",
"تعمية تكيّفية",
"توصيات أمنية مخصّصة",
"تعلّم آلي بمعرفة صفرية",
"مساعد ذكاء اصطناعي خاصّ",
"أمان تنبّؤي",
"حماية ذاتية من الهجمات"
],
"handshake.step1": "توليد زوج مفاتيح ECDH P-384",
"handshake.step2": "اشتقاق رمز التحقّق",
"handshake.step3": "تثبيت السرّية التامّة للأمام",
"handshake.securingTitle": "جارٍ تأمين قناتك",
"handshake.answerTitle": "جارٍ بناء ردّك",
"handshake.securingDesc": "نصوغ مفاتيح قويّة بما يكفي لمقاومة العبث.",
"handshake.shareTitle": "شارِك دعوتك",
"handshake.sendAnswerTitle": "أعد إرسال ردّك",
"handshake.shareDesc": "أظهر رمز QR أو أرسل الرمز إلى الطرف الآخر. يُستعمل مرّة واحدة وينتهي سريعاً.",
"handshake.sendAnswerDesc": "أعطِ هذا الردّ لمُنشئ القناة كي يُتمّ المصافحة.",
"handshake.establish": "إنشاء الاتصال",
"handshake.thenReceive": "ثمّ استقبل الردّ الذي يرسله الطرف الآخر",
"handshake.pasteAnswerPlaceholder": "ألصق رمز ردّ الطرف الآخر…",
"handshake.answerSentNote": "أرسل هذا الردّ إلى المُنشئ ثمّ انتظر - تُفتح الدردشة حالما يتّصل.",
"handshake.qrHint": "أبقِ هذا مفتوحاً حتى يلتقط الطرف الآخر الرمز.",
"handshake.qrHintFrames": "المصافحة موزّعة على {frames} إطارات - أبقِ هذا مفتوحاً حتى يلتقطها الطرف الآخر كلّها.",
"verify.title": "التحقّق الأمني",
"verify.desc": "قارِن رمز الأمان هذا مع الطرف الآخر عبر قناة منفصلة (مكالمة أو لقاء مباشر)، ثمّ اكتبه لفتح الدردشة.",
"verify.enterLabel": "أدخل الرمز المُتحقَّق منه",
"verify.placeholder": "اكتب الرمز هنا",
"verify.confirm": "تأكيد الرمز",
"verify.confirmed": "مؤكَّد",
"verify.mismatch": "غير متطابقين",
"verify.yours": "تأكيدك",
"verify.peer": "تأكيد الطرف الآخر",
"verify.pending": "قيد الانتظار",
"verify.waiting": "بانتظار الرمز…",
"verify.verified": "تمّ التحقّق من القناة",
"verify.bothConfirmed": "أكّد الطرفان. جارٍ فتح الدردشة الآمنة…",
"pwa.bannerTitle": "ثبّت SecureBit.chat",
"pwa.bannerDesc": "احصل على تجربة تطبيق أصلي بأمان أعلى",
"pwa.install": "تثبيت",
"pwa.dismiss": "تجاهل",
"pwa.close": "إغلاق",
"pwa.iosTitle": "التثبيت على iOS",
"pwa.iosStep1": "اضغط زرّ المشاركة",
"pwa.iosStep1Hint": "عادةً في أسفل سفاري",
"pwa.iosStep2": "ابحث عن «إضافة إلى الشاشة الرئيسية»",
"pwa.iosStep2Hint": "مرّر لأسفل في قائمة المشاركة",
"pwa.iosStep3": "اضغط «إضافة»",
"pwa.iosStep3Hint": "أكّد لتثبيت SecureBit.chat",
"pwa.genericTitle": "تثبيت SecureBit",
"pwa.genericDesc": "لكلّ متصفّح طريقته في التثبيت. اختر الخطوات التي تناسب متصفّحك.",
"pwa.gotIt": "فهمت",
"pwa.installedTitle": "تمّ تثبيت التطبيق!",
"pwa.installedIos": "تمّ تثبيت تطبيق iOS! افتحه من الشاشة الرئيسية.",
"pwa.installedGeneric": "صار SecureBit.chat على جهازك",
"pwa.anytimeTitle": "ثبّته في أيّ وقت",
"pwa.anytimeDesc": "لا يزال بإمكانك تثبيت SecureBit.chat من قائمة متصفّحك للحصول على أفضل تجربة.",
"pwa.ok": "حسناً",
"step.open": "الخطوة 1 · افتح قناة",
"step.exchange": "الخطوة 2 · التبادل",
"step.verification": "الخطوة 3 · التحقّق",
"action.create": "إنشاء",
"action.join": "انضمام",
"action.back": "رجوع",
"action.copy": "نسخ",
"action.copied": "تمّ النسخ",
"action.scan": "مسح",
"action.downloadDesktop": "نزّل تطبيق سطح المكتب",
"action.advancedSettings": "إعدادات متقدّمة",
"cred.offerTag": "عرض · أو انسخ النصّ",
"cred.answerTag": "ردّ · أو انسخ النصّ",
"cred.reveal": "اضغط للكشف - أبقِ هذا الرمز سرّياً",
"qr.title": "امسح رمز QR",
"qr.subtitle": "وجّه كاميرتك إلى رمزهم",
"qr.scanning": "جارٍ المسح…",
"qr.hint": "ثبّت يدك حتى تُلتقط كلّ الأجزاء. الوصول إلى الكاميرا محلّي - لا يُرفع شيء.",
"mesh.you": "أنت",
"mesh.peer": "طرف · جلسة 1",
"mesh.joined2": "انضمّت mara · +2",
"mesh.joined3": "انضمّ tobi · +3",
"ice.title": "إعدادات الشبكة",
"ice.subtitle": "تُضبط محلّياً - ولا تُشارَك أبداً مع الطرف الآخر",
"ice.intro": "يستخدم SecureBit خوادم STUN عامّة افتراضياً للتفاوض على الوصلة بين الطرفين. وجّهه إلى STUN/TURN الخاصّ بك إن كنت تستضيفه بنفسك.",
"ice.publicTitle": "خوادم عامّة (افتراضي)",
"ice.publicDesc": "بلا إعداد. مناسبة لمعظم المستخدمين.",
"ice.customTitle": "خوادم STUN/TURN الخاصّة بي",
"ice.customDesc": "حتى {max} خوادم.",
"ice.turnNote": "يرى مُرحِّل TURN عنوان IP لكلا الطرفين وتوقيت حركة البيانات - لكنه لا يرى محتوى الرسائل أبداً، فهي تبقى مشفّرة من طرف إلى طرف. يُفضَّل ",
"ice.turnNoteTls": " (TLS).",
"ice.test": "اختبر الخوادم",
"ice.testing": "جارٍ الاختبار…",
"ice.relayTitle": "وضع الترحيل فقط",
"ice.relayBadge": "أقصى خصوصية",
"ice.relayDesc": "يوجّه كلّ حركة البيانات عبر TURN فلا يُكشف عنوان IP للطرف الآخر أبداً. يتطلّب خادم TURN.",
"ice.relayWarning": "وضع الترحيل فقط مفعَّل لكن لا يوجد خادم TURN مضبوط. لن يتمكّن الاتصال من البدء.",
"ice.persist": "احفظ على هذا الجهاز",
"ice.persistDesc": "يُخزَّن مشفَّراً في هذا المتصفّح. اتركه مُطفأً لاستخدامه في هذه الجلسة فقط.",
"ice.forget": "انسَ المحفوظ",
"ice.cancel": "إلغاء",
"ice.apply": "تطبيق",
"ice.errUnavailable": "WebRTC غير متاح في هذا المتصفّح",
"ice.errInvalid": "إعداد خادم غير صالح",
"update.title": "يتوفّر تحديث",
"update.desc": "رُصد إصدار أحدث من SecureBit.",
"update.currentVersion": "الإصدار الحالي",
"update.newVersion": "الإصدار الجديد",
"update.now": "حدّث الآن",
"update.later": "لاحقاً",
"update.unknown": "غير متاح",
"update.stepSaving": "جارٍ حفظ البيانات...",
"update.stepSwCaches": "جارٍ مسح مخابئ عامل الخدمة...",
"update.stepSwUnregister": "جارٍ إلغاء تسجيل عوامل الخدمة...",
"update.stepBrowserCache": "جارٍ مسح ذاكرة المتصفّح المؤقّتة...",
"update.stepVersion": "جارٍ تحديث الإصدار...",
"update.stepReload": "جارٍ إعادة تحميل التطبيق...",
"update.error": "خطأ في التحديث. يُرجى تحديث الصفحة يدوياً (Ctrl+F5 أو Cmd+Shift+R)",
"update.confirmSkip": "يتوفّر إصدار جديد. يُنصح بالتحديث للأمان والاستقرار. أتريد المتابعة دون تحديث؟",
"offline.backOnline": "عاد الاتصال",
"offline.mode": "وضع دون اتصال",
"offline.dismiss": "تجاهل",
"offline.lostTitle": "انقطع الاتصال",
"offline.lostDesc": "SecureBit الآن في وضع دون اتصال. بعض المزايا محدودة، لكن بياناتك تبقى آمنة.",
"offline.point1": "جلستك ومفاتيحك محفوظة",
"offline.point2": "لا تُخزَّن أيّ بيانات على الخوادم",
"offline.point3": "تُزامَن الرسائل والملفّات عند عودة الاتصال",
"offline.continue": "تابع دون اتصال",
"offline.restoredTitle": "عند عودة اتصالك",
"offline.restoredDesc": "انقطاع الاتصال لا يكلّفك شيئاً. يضع SecureBit كلّ شيء في طابور محلّي ويستأنف الجلسة المشفّرة لحظة عودتك.",
"offline.r1Title": "تصل رسائلك",
"offline.r1Desc": "كلّ ما كتبته دون اتصال يُرسَل إلى مراسلك تلقائياً.",
"offline.r2Title": "تكتمل الملفّات",
"offline.r2Desc": "تُستأنف عمليات الرفع من حيث توقّفت - لا حاجة لإعادة الإرسال.",
"offline.r3Title": "تصلك رسائلهم وملفّاتهم",
"offline.r3Desc": "كلّ ما أرسله مراسلك أثناء الانقطاع يصلك بالترتيب.",
"offline.r4Title": "لا شيء يضيع",
"offline.r4Desc": "بعد عودة الاتصال لا توجد فجوة - تكمل المحادثة تماماً من حيث توقّفت.",
"offline.gotIt": "فهمت",
"qr.showTitle": "أظهر رمز QR",
"qr.showSubtitle": "ملء الشاشة · دع الطرف الآخر يمسحه",
"qr.showSubtitleFrames": "ملء الشاشة · دع الطرف الآخر يمسح الإطارات الـ {frames} كلّها",
"notify.enabledBody": "فُعِّلت الإشعارات! ستصلك تنبيهات بالرسائل الجديدة.",
"notify.workingBody": "الإشعارات تعمل! ستصلك تنبيهات بالرسائل الجديدة.",
"pw.label": "إدخال كلمة المرور",
"pw.placeholder": "أدخل كلمة المرور...",
"pw.decrypt": "فكّ التشفير",
"pw.cancel": "إلغاء",
"file.title": "نقل الملفّات",
"file.drop": "أسقط الملفّات هنا",
"file.dropHint": "تُشفَّر من طرف إلى طرف قبل النقل · حتى 100 ميغابايت",
"file.browse": "تصفّح الجهاز",
"file.incoming": "طلب ملفّ وارد",
"file.accept": "قبول",
"file.reject": "رفض",
"file.download": "تنزيل",
"file.notReady": "الاتصال غير جاهز",
"file.tooLarge": "الملفّ كبير جداً",
"file.typeNotAllowed": "نوع الملفّ غير مسموح",
"file.maxConcurrent": "الحدّ الأقصى للنقل المتزامن",
"file.gone": "لم يعد هذا الملفّ متاحاً للتنزيل.",
"call.incoming": "مكالمة واردة",
"call.incomingVideo": "مكالمة مرئية واردة",
"call.encrypted": "مكالمة مشفّرة",
"call.encryptedShort": "مشفّرة",
"call.peer": "طرف آمن",
"call.connecting": "جارٍ الاتصال…",
"call.ringing": "جارٍ الرنين…",
"call.accept": "قبول",
"call.decline": "رفض",
"call.end": "إنهاء المكالمة",
"call.camera": "الكاميرا",
"call.cameraOff": "الكاميرا مُطفأة",
"call.peerCameraOff": "كاميرا الطرف الآخر مُطفأة",
"call.flipCamera": "تبديل الكاميرا",
"call.addVideo": "أضف الفيديو",
"call.video": "فيديو",
"call.muted": "مكتوم",
"call.expand": "توسيع",
"call.minimize": "تصغير",
"call.quality": "جودة الاتصال",
"call.qualityExcellent": "ممتازة",
"call.videoPrefix": "مرئية · ",
"call.voicePrefix": "صوتية · ",
"group.new": "مجموعة جديدة",
"group.create": "أنشئ مجموعة",
"group.join": "انضمّ إلى مجموعة",
"group.name": "اسم المجموعة",
"group.nameTooLong": "اسم المجموعة طويل جداً.",
"group.capacity": "حتى {max} أشخاص، ندٌّ لندّ. سيقارن الجميع رمز أمان واحداً قبل فتح المجموعة.",
"group.invite": "دعوة",
"group.inviteMore": "ادعُ أعضاء آخرين",
"group.invitePeople": "ادعُ {count} أشخاص",
"group.invitation": "دعوة مجموعة",
"group.addMembers": "أضف أعضاء",
"group.roomFor": "يتّسع لـ {remaining} آخرين. سيقارن الجميع رمز مجموعة جديداً بمجرّد انضمامهم.",
"group.membersCount": "{count} أعضاء",
"group.member": "عضو",
"group.members": "الأعضاء",
"group.remove": "أزل {name}",
"group.message": "راسِل {name}",
"group.leave": "مغادرة",
"group.leaveThis": "غادر هذه المجموعة",
"group.cancel": "ألغِ المجموعة",
"group.close": "إغلاق",
"group.cancelBtn": "إلغاء",
"group.decline": "رفض",
"group.working": "جارٍ العمل…",
"group.sasTitle": "رمز أمان المجموعة",
"group.sasEveryone": "يرى الجميع هذا الرمز",
"group.sasCompare": "قارِن رمز المجموعة مع كلّ عضو لفتح هذه المجموعة.",
"group.sasReadAloud": "اقرأ هذه الأرقام بصوت عالٍ إلى ",
"group.sasWarning": "إن قرأ عضو واحد رمزاً مختلفاً فهناك من يجلس بينكم. ألغِ المجموعة - لا تؤكّد.",
"group.confirmFirst": "أكّد رمز المجموعة أوّلاً",
"group.codeSuffix": " · رمز {code}",
"group.exchangingNonces": "جارٍ تبادل القيم العشوائية…",
"group.waitingCommit": "بانتظار التزام كلّ عضو…",
"group.waitingJoin": "بانتظار انضمام بقيّة الأعضاء…",
"group.emptyChat": "لا شيء هنا بعد. الرسائل موقَّعة من مُرسِلها وتنتقل عبر وصلة مشفّرة خاصّة بكلّ عضو.",
"group.noVerified": "لا توجد دردشات مُتحقَّق منها بعد. افتح دردشة ثنائية وقارِن رمز أمانها أوّلاً - المجموعة تُبنى من اتصالات فحصتها من قبل.",
"group.noMoreToAdd": "لا توجد دردشات مُتحقَّق منها أخرى لإضافتها. افتح دردشة ثنائية وقارِن رمز أمانها أوّلاً.",
"group.directLink": "وصلة مباشرة ندٌّ لندّ",
"group.noDirectLink": "لا وصلة مباشرة بعد - يُرحِّل عضو آخر الرسائل ريثما تُبنى واحدة",
"group.relayNote": "بعض الأعضاء ليست لديهم وصلة مباشرة بك بعد. تمرّ رسائلهم عبر عضو آخر يرى أنّكم تتحدّثون لكنه لا يستطيع قراءة ما وراء التوقيع ولا تغيير ما قلته. تواصل المجموعة محاولة وصلهم مباشرةً.",
"group.relayOnlyOff": "وضع الترحيل فقط مُطفأ، فيتّصل بك كلّ عضو مباشرةً ويعرف عنوان IP الخاصّ بك - بمن فيهم أعضاء دعاهم شخص آخر. فعّله من إعدادات الشبكة إن كان ذلك يهمّك هنا.",
"group.memberOffline": "{name} غير متّصل ولن يتلقّى الرسائل. لا يزال عضواً - إزالته تُعيد توليد مفاتيح المجموعة.",
"group.joinNote": "سيعرف بقيّة الأعضاء بوجودك في هذه المجموعة. لا سجلّ رسائل لتلحق به - المجموعة تبدأ فارغة.",
"group.inviteSentNote": "تواصل المجموعة عملها حتى يقبلوا. لا سجلّ يلحقون به - لن يروا إلّا ما يُرسَل من الآن.",
"group.errNotCreated": "لم تُنشأ المجموعة",
"group.errNobodyAccepted": "لم يقبل أحد الدعوة في الوقت المحدّد.",
"group.errNothingSent": "لم يُرسَل شيء ولم يُتحقَّق من شيء. أغلق هذا وحاول مجدّداً بعد اتصال الجميع.",
"group.errNotFormed": "تعذّر تكوين هذه المجموعة.",
"group.errFull": "هذه المجموعة ممتلئة.",
"group.errInviteFailed": "تعذّر إرسال الدعوة - تلك الدردشة غير متّصلة.",
"group.errNoMemberList": "لم يرسل مالك المجموعة قائمة الأعضاء قطّ.",
"group.errUnsignedList": "لم يوقّع مالك المجموعة قائمة الأعضاء. لا تُعِد المحاولة - أخبرهم.",
"group.errNotOwner": "حاول شخص غير مالك المجموعة تغيير الأعضاء.",
"hdr.tagline": "مشفَّر من طرف إلى طرف",
"hdr.netSettings": "إعدادات شبكة متقدّمة",
"hdr.netSettingsTitle": "إعدادات شبكة متقدّمة (STUN/TURN)",
"hdr.disconnect": "قطع الاتصال",
"status.connected": "متّصل",
"status.connecting": "جارٍ الاتصال...",
"status.notConnected": "غير متّصل",
"status.reconnecting": "جارٍ إعادة الاتصال...",
"status.retrying": "جارٍ إعادة المحاولة...",
"status.verifying": "جارٍ التحقّق...",
"status.peerDisconnected": "انقطع الطرف الآخر",
"sec.replayProtection": "الحماية من إعادة التشغيل",
"sec.messageIntegrity": "سلامة الرسالة (HMAC)",
"sec.forwardSecrecy": "السرّية التامّة للأمام",
"sec.metadataProtection": "حماية البيانات الوصفية",
"sec.trafficObfuscation": "تمويه حركة البيانات",
"sec.realTests": "اختبارات تعمية حقيقية",
"sec.simulatedData": "بيانات محاكاة",
"sec.testPassed": "نجح الاختبار",
"sec.testFailed": "فشل الاختبار أو غير متاح",
"sec.verificationDone": "اكتمل التحقّق التعموي الحقيقي",
"sec.verificationInProgress": "التحقّق الأمني جارٍ...",
"sec.verificationWait": "التحقّق الأمني جارٍ...\nيُرجى انتظار اكتمال التحقّق التعموي الآني.",
"sec.verificationUnavailable": "التحقّق الأمني غير متاح",
"chat.placeholder": "اكتب رسالة مشفّرة…",
"chat.send": "أرسل الرسالة",
"chat.sendFiles": "أرسل ملفّات",
"chat.hideFiles": "أخفِ الملفّات",
"chat.recordVoice": "سجّل رسالة صوتية",
"chat.sendVoice": "أرسل الرسالة الصوتية",
"chat.discard": "تجاهل",
"chat.codeBlock": "أرسل ككتلة شيفرة (يوسّع حقل الإدخال)",
"chat.codeHint": "مقتطف شيفرة · التنسيق محفوظ · ⌘↵ للإرسال",
"chat.viewOnce": "عرض لمرّة",
"chat.viewOnceTitle": "عرض لمرّة - يختفي بعد أن يقرأه الطرف الآخر",
"chat.viewOncePrefix": "عرض لمرّة · ",
"chat.viewOnceTap": "عرض لمرّة · اضغط للكشف",
"chat.viewedOnce": "شُوهد مرّة",
"chat.disappearing": "رسالة تختفي - تُحذف عند الطرفين",
"chat.disappearAfter": "تختفي بعد",
"chat.visibleFor": "ظاهرة لمدّة",
"chat.timerPrefix": "مؤقّت · ",
"chat.expired": "انتهت صلاحية هذه الرسالة",
"chat.deleteForEveryone": "احذف عند الجميع",
"chat.sending": "جارٍ الإرسال",
"chat.delivered": "وصلت",
"chat.notSent": "لم تُرسل",
"chat.notSentReason": "لم تُرسل - القناة الآمنة ليست جاهزة. أعد الاتصال للمتابعة.",
"chat.encrypted": "مشفّرة",
"chat.decrypted": "فُكّ تشفيرها",
"chat.encryptedOnDevice": "مشفّرة على جهازك",
"chat.uploading": "جارٍ الرفع",
"chat.downloading": "جارٍ التنزيل",
"chat.transferring": "جارٍ النقل…",
"chat.copied": "تمّ النسخ!",
"chat.collapse": "طيّ",
"chat.closeMenu": "أغلق القائمة",
"chat.newChat": "دردشة جديدة",
"chat.newGroup": "مجموعة جديدة",
"chat.createGroup": "أنشئ مجموعة",
"chat.groupChats": "الدردشات الجماعية",
"chat.secureChat": "دردشة آمنة",
"chat.nameThis": "سمِّ هذه الدردشة",
"chat.rename": "أعد تسمية الدردشة (محلّياً فقط)",
"chat.renameHint": "انقر نقرتين لإعادة التسمية",
"chat.localLabel": "تسمية محلّية · مخزَّنة على هذا الجهاز فقط",
"chat.setStatus": "اضبط حالتك",
"chat.yourStatusPrefix": "حالتك - ",
"chat.meshHint": "حتى 8 أطراف · شبكة ندٍّ لندّ",
"chat.offline": "غير متّصل",
"chat.noNetwork": "لا شبكة · جارٍ إعادة الاتصال",
"chat.startVoiceCall": "ابدأ مكالمة صوتية مشفّرة",
"chat.startVideoCall": "ابدأ مكالمة مرئية مشفّرة",
"chat.verifyForCalls": "تحقّق من الجلسة لتفعيل المكالمات",
"chat.e2eeNote": "كلّ رسالة تُشفَّر من طرف إلى طرف على جهازك قبل أن تغادره.",
"chat.peersOnly": "تُرسَل من طرف إلى طرف إلى الأقران المتّصلين فقط - ولا تُخزَّن على خادم أبداً.",
"flow.invitationCreated": "أُنشئت دعوة آمنة",
"flow.invitationCreatedBang": "أُنشئت دعوة آمنة ومشفّرة!",
"flow.responseCreated": "أُنشئ ردّ آمن",
"flow.responseCreatedBang": "أُنشئ ردّ آمن!",
"flow.sendInvitation": "أرسل رمز الدعوة إلى محدّثك عبر قناة آمنة (مكالمة صوتية أو رسالة نصّية وما إلى ذلك).",
"flow.sendResponse": "أرسل رمز الردّ إلى البادئ عبر قناة آمنة أو دعه يمسح رمز QR أدناه.",
"flow.sendEncryptedCode": "أرسل الرمز المشفّر",
"flow.sendTheResponse": "أرسل الردّ",
"flow.pasteOrWrite": "ألصق الرمز أو اكتبه…",
"flow.processingInvitation": "جارٍ معالجة الدعوة الآمنة...",
"flow.processingResponse": "جارٍ معالجة الردّ الآمن...",
"flow.finalizing": "جارٍ إتمام الاتصال الآمن...",
"flow.channelEstablished": "أُنشئت القناة الآمنة",
"flow.channelReady": "القناة الآمنة جاهزة",
"flow.restoring": "جارٍ استعادة الاتصال…",
"flow.invitationCaptured": "التُقطت الدعوة.",
"err.needInvitation": "عليك إدراج رمز الدعوة من محدّثك.",
"err.needResponse": "عليك إدراج رمز الردّ من محدّثك.",
"err.responseFormat": "صيغة الردّ غير صالحة - يُرجى التحقّق من الرمز",
"err.responseNoKey": "رمز الردّ غير صالح - مفتاح التعمية مفقود أو تالف. يُرجى التحقّق من الرمز والمحاولة مجدّداً.",
"err.responseNoSignKey": "رمز الردّ غير صالح - مفتاح التحقّق من التوقيع مفقود. يُرجى التحقّق من الرمز والمحاولة مجدّداً.",
"err.responseOutdated": "بيانات الردّ قديمة - يُرجى استخدام دعوة جديدة",
"err.setupError": "خطأ في تهيئة الاتصال",
"err.notReady": "الاتصال غير جاهز",
"err.securityBreach": "رُصد خرق أمني - رُفض الاتصال",
"err.securityValidation": "فشل التحقّق الأمني - يُحتمل وجود هجوم",
"err.retiredQr": "يستخدم رمز QR هذا صيغة متقاعدة تعذّر معها نقل الدعوة. اطلب من الطرف الآخر توليد رمز جديد، أو استخدم النسخ واللصق.",
"err.compressedQrNote": "قد يُغفل رمز QR المضغوط بيانات SDP اختصاراً. استخدم النسخ واللصق إن فشل الاتصال.",
"err.inviteNotConnected": "تعذّر إرسال الدعوة. تلك الدردشة غير متّصلة الآن.",
"err.inviteNotConnectedRetry": "تعذّر إرسال الدعوة. تلك الدردشة غير متّصلة الآن - أعد فتحها وحاول مجدّداً.",
"err.nobodyAccepted": "لم يقبل أحد الدعوة. المجموعة على حالها.",
"err.noAudio": "لم يُلتقط أيّ صوت - تحقّق من إذن الميكروفون وحاول مجدّداً.",
"err.voiceNeedsConnection": "تحتاج الرسالة الصوتية إلى اتصال آمن نشط. أعد الاتصال وحاول مجدّداً.",
"err.voiceRestoring": "جارٍ استعادة الاتصال - حاول إرسال الرسالة الصوتية بعد لحظة.",
"err.fileTooLarge": "الملفّ كبير جداً",
"sas.safetyNumber": "رقم الأمان",
"sas.incorrect": "رمز غير صحيح. تحقّق منه مع الطرف الآخر وحاول مجدّداً.",
"sas.noMatch": "الرمزان غير متطابقين",
"sas.makeSure": "تأكّد من تطابق الرمزين تماماً.",
"sas.tooManyAttempts": "محاولات خاطئة كثيرة. أُعيدت الجلسة إلى نقطة البدء حفاظاً على الأمان.",
"sas.verificationFailed": "فشل التحقّق",
"sas.verified": "مُتحقَّق منه · سرّية تامّة للأمام",
"sas.runVerification": "شغّل التحقّق الأمني",
"sec.panelTitle": "تفاصيل الشبكة والتعمية",
"sec.security": "الأمان",
"sec.transport": "النقل",
"sec.keyExchange": "تبادل المفاتيح",
"sec.allEnabled": "كلّ مزايا الأمان مفعَّلة افتراضياً",
"sec.realTimeNote": "تحقّق آنيّ باستخدام دوال تعمية حقيقية - لا بيانات وهمية.",
"sec.simulatedWarning": "تحذير: قد لا يكون الاتصال قائماً بالكامل - قد تكون القيم محاكاة.",
"dl.title": "نزّل SecureBit",
"dl.free": "مجّاني · مفتوح المصدر",
"dl.soon": "تطبيقات الهواتف (iOS وأندرويد) وإضافات المتصفّحات (Chrome وFirefox وOpera) قادمة قريباً.",
"chatHdr.chat": "دردشة",
"chatHdr.chats": "الدردشات",
"chatHdr.newChat": "+ جديدة",
"chatHdr.secure": "آمنة",
"chatHdr.p2pSub": "ندٌّ لندّ · مشفَّرة من طرف إلى طرف",
"chatHdr.save": "حفظ",
"chatHdr.close": "إغلاق",
"chatHdr.expand": "توسيع",
"chatHdr.you": "أنت",
"chatHdr.qrCode": "رمز QR",
"chat.disconnected": "غير متّصل",
"call.mute": "كتم",
"call.endShort": "إنهاء",
"group.add": "إضافة",
"group.send": "إرسال",
"sec.pfsShort": "السرّية التامّة للأمام",
"sec.cipher": "الشيفرة",
"chat.close": "إغلاق",
"file.needConnection": "نقل الملفّات يحتاج إلى اتصال مفتوح",
"presence.available": "متاح",
"presence.away": "بعيد",
"presence.busy": "مشغول",
"presence.offline": "غير متّصل",
"presence.invisible": "خفيّ",
"presence.availableDesc": "متّصل ويمكن الوصول إليه",
"presence.awayDesc": "خامل · ابتعد قليلاً",
"presence.busyDesc": "الرجاء عدم الإزعاج",
"presence.invisibleDesc": "تظهر غير متّصل للأقران",
"presence.online": "متّصل",
"conn.p2p": "ندٌّ لندّ · متّصل",
"conn.verifying": "جارٍ التحقّق…",
"conn.connecting": "جارٍ الاتصال…",
"conn.reconnecting": "جارٍ إعادة الاتصال…",
"conn.peerDisconnected": "انقطع الطرف الآخر",
"conn.disconnected": "غير متّصل",
"chat.defaultLabel": "دردشة",
"groupPhase.forming": "جارٍ التكوين…",
"groupPhase.commitments": "جارٍ تبادل الالتزامات…",
"groupPhase.revealing": "جارٍ الكشف…",
"groupPhase.compare": "قارِن رمز المجموعة",
"groupPhase.ready": "المجموعة جاهزة",
"groupPhase.failed": "فشلت المجموعة",
"call.qualityGood": "جيّدة",
"call.qualityFair": "مقبولة",
"call.qualityWeak": "ضعيفة",
"msg.code": "شيفرة",
"msg.timer": "مؤقّت",
"msg.voice": "صوت",
"msg.play": "تشغيل",
"msg.sent": "أُرسلت",
"msg.read": "قُرئت",
"report.title": "تحقّق أمني آنيّ",
"report.active": "نشط",
"report.testsPassed": "اختبارات ناجحة",
"report.verifiedAt": "تمّ التحقّق في",
"report.source": "المصدر",
"secTest.verifyECDHKeyExchange": "تبادل مفاتيح ECDH",
"secTest.verifyECDSASignatures": "تواقيع ECDSA الرقمية",
"secTest.verifyEncryption": "تشفير AES-GCM",
"secTest.verifyMessageIntegrity": "سلامة الرسالة",
"secTest.verifyPerfectForwardSecrecy": "السرّية التامّة للأمام",
"secTest.verifyPFS": "السرّية التامّة للأمام",
"secTest.verifyReplayProtection": "الحماية من إعادة التشغيل",
"secTest.verifyDTLSFingerprint": "بصمة DTLS",
"secTest.verifySASVerification": "تحقّق SAS",
"secTest.verifyMetadataProtection": "حماية البيانات الوصفية",
"secTest.verifyTrafficObfuscation": "تمويه حركة البيانات",
"secTest.verifyPacketPadding": "حشو الحزم",
"secTest.verifyNestedEncryption": "التشفير المتداخل",
"secTest.verifyNonExtractableKeys": "مفاتيح غير قابلة للاستخراج",
"secTest.verifyRateLimiting": "تحديد المعدّل",
"secTest.verifyMutualAuth": "استيثاق متبادل",
"secTest.verifyAuthProof": "برهان الاستيثاق",
"secTest.verifyEnhancedValidation": "تحقّق مُعزَّز",
"secTest.verifyAdvancedFeatures": "مزايا متقدّمة",
"secTest.verifySignature": "فحص التوقيع",
"secDetail.Security system initializing...": "جارٍ تهيئة نظام الأمان...",
"secDetail.Nested encryption active": "التشفير المتداخل نشط",
"secDetail.Nested encryption failed": "فشل التشفير المتداخل",
"secDetail.Packet padding active": "حشو الحزم نشط",
"secDetail.Packet padding failed": "فشل حشو الحزم",
"secDetail.Advanced features active": "المزايا المتقدّمة نشطة",
"secDetail.Advanced features failed": "فشلت المزايا المتقدّمة",
"secDetail.No encryption key available": "لا يتوفّر مفتاح تشفير",
"secDetail.AES-GCM encryption/decryption working correctly": "تشفير وفكّ تشفير AES-GCM يعملان بشكل صحيح",
"secDetail.No ECDH key pair available": "لا يتوفّر زوج مفاتيح ECDH",
"secDetail.Key derivation failed": "فشل اشتقاق المفتاح",
"secDetail.No ECDSA key pair available": "لا يتوفّر زوج مفاتيح ECDSA",
"secDetail.ECDSA digital signatures working correctly": "تواقيع ECDSA الرقمية تعمل بشكل صحيح",
"secDetail.MAC key not available or invalid": "مفتاح MAC غير متاح أو غير صالح",
"secDetail.Rate limiter did not block a message over the limit": "لم يمنع محدِّد المعدّل رسالة تجاوزت الحدّ",
"secDetail.Rate limiter is not available": "محدِّد المعدّل غير متاح",
"secDetail.Replay protection is working correctly": "الحماية من إعادة التشغيل تعمل بشكل صحيح",
"secDetail.Replay protection not enabled": "الحماية من إعادة التشغيل غير مفعَّلة",
"secDetail.SAS code not available": "رمز SAS غير متاح",
"secDetail.SAS verification code is valid and available": "رمز تحقّق SAS صالح ومتاح",
"secDetail.Traffic obfuscation is working correctly": "تمويه حركة البيانات يعمل بشكل صحيح",
"secDetail.Traffic obfuscation not enabled": "تمويه حركة البيانات غير مفعَّل",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "لا يوجد زوج مفاتيح ECDH عابر غير قابل للاستخراج لهذه الجلسة",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "سرّية للأمام على مستوى الجلسة فقط: المفاتيح عابرة لكلّ جلسة، لكنّ السقّاطة المزدوجة غير نشطة في هذا الاتصال (الطرف الآخر على إصدار أقدم)، فتسريب مفتاح جلسة واحد يكشف المحادثة كلّها",
"msg.pause": "إيقاف مؤقّت",
"msg.failed": "فشلت",
"groupErr.timeout": "توقّف عضو عن الاستجابة قبل أن يجهز الرمز.",
"groupErr.keyMismatch": "لم يطابق مفتاح أحد الأعضاء الهويّة المدّعاة له.",
"groupErr.revealMismatch": "لم تطابق القيمة التي كشفها أحد الأعضاء ما التزم به.",
"groupErr.commitChanged": "غيّر أحد الأعضاء التزامه في منتصف الطريق.",
"groupErr.missingKey": "أُدرج عضو لم يصل مفتاحه قطّ.",
"groupErr.outsider": "وصل إطار من شخص خارج المجموعة.",
"groupErr.limit": "المجموعة محدودة بثمانية أعضاء.",
"groupErr.tooLarge": "كانت الرسالة أكبر من أن تُرسَل إلى المجموعة.",
"fileType.text": "نصّ عادي",
"fileType.images": "صور",
"fileType.archives": "أرشيفات",
"fileType.voice": "رسائل صوتية",
"fileType.unsupported": "غير مدعوم",
"qrScan.title": "امسح رمز QR",
"qrScan.auto": "الوضع التلقائي",
"qrScan.reset": "إعادة تعيين",
"qrScan.autoScroll": "التمرير التلقائي مفعَّل",
"qrScan.starting": "جارٍ تشغيل الكاميرا...",
"qrScan.point": "وجّه الكاميرا إلى رمز QR",
"qrScan.tapFocus": "اضغط الشاشة لضبط التركيز",
"qrScan.focusing": "جارٍ ضبط التركيز...",
"iceErr.notArray": "يجب أن تكون قائمة الخوادم مصفوفة",
"iceErr.invalidJson": "JSON غير صالح",
"iceErr.tooMany": "خوادم أكثر من اللازم (الحدّ الأقصى {max})",
"iceErr.invalidEntry": "{label}: مُدخَل غير صالح",
"iceErr.urlCount": "{label}: مطلوب بين 1 و{max} عنوان",
"iceErr.turnCreds": "{label}: عادةً تتطلّب خوادم TURN اسم مستخدم وبيانات اعتماد",
"iceUrl.notString": "يجب أن يكون العنوان نصّاً",
"iceUrl.empty": "العنوان فارغ",
"iceUrl.tooLong": "العنوان طويل جداً",
"iceUrl.badChars": "العنوان يحتوي على محارف غير صالحة",
"iceUrl.badScheme": "يجب أن يبدأ العنوان بـ stun: أو stuns: أو turn: أو turns:",
"iceUrl.badQuery": "استعلام العنوان غير صالح",
"iceUrl.noHost": "العنوان ينقصه المضيف",
"iceUrl.badHost": "مضيف العنوان أو منفذه غير صالح",
"iceUrl.badTransport": "يجب أن يكون استعلام العنوان transport=udp أو transport=tcp",
"msg.off": "مُطفأ",
"file.consentUnavailable": "موافقة المستخدم غير متاحة",
"secLevel.MAXIMUM": "الأقصى",
"secLevel.INITIALIZING": "قيد التهيئة",
"secLevel.ERROR": "خطأ",
"secLevel.UNKNOWN": "غير معروف",
"status.error": "خطأ",
"offline.disconnect": "قطع الاتصال",
"offline.learnMore": "اعرف المزيد",
"pwa.installApp": "ثبّت التطبيق",
"chat.onWeb": "أنت على الويب",
"groupCall.startVoice": "بدء مكالمة صوتية جماعية",
"groupCall.startVideo": "بدء مكالمة فيديو جماعية",
"groupCall.join": "انضمام",
"groupCall.dismiss": "ليس الآن",
"groupCall.leave": "مغادرة المكالمة",
"groupCall.you": "أنت",
"groupCall.connecting": "جارٍ الاتصال…",
"groupCall.waitingLink": "في انتظار رابط مباشر…",
"groupCall.legFailed": "تعذّر الاتصال",
"groupCall.startedVoice": "بدأ {name} مكالمة صوتية",
"groupCall.startedVideo": "بدأ {name} مكالمة فيديو",
"groupCall.inCall": "{count} في المكالمة",
"groupCall.err.permission_denied": "تعذّر بدء المكالمة - الوصول إلى الميكروفون والكاميرا محظور. اسمح به لهذا الموقع ثم أعد المحاولة.",
"groupCall.err.device_not_found": "تعذّر بدء المكالمة - لم يُعثر على ميكروفون في هذا الجهاز.",
"groupCall.err.device_busy": "تعذّر بدء المكالمة - الميكروفون مستخدَم من تطبيق آخر. أغلقه ثم أعد المحاولة.",
"groupCall.err.media_failed": "تعذّر بدء المكالمة - لم يمكن فتح الميكروفون.",
"groupCall.err.call_in_progress": "هناك مكالمة جارية بالفعل في هذه المجموعة. انضم إليها بدل بدء أخرى.",
"groupCall.err.not_ready": "أكّد رمز المجموعة قبل الاتصال.",
"groupCall.speaking": "{name} يتحدّث الآن",
"groupCall.pin": "عرض {name} بحجم كبير",
"groupCall.unpin": "العودة إلى الجميع",
"groupCall.showEveryone": "الجميع",
"msg.after5s": "٥ ثوانٍ بعد القراءة",
"msg.after15s": "١٥ ثانية بعد القراءة",
"msg.after30s": "٣٠ ثانية بعد القراءة",
"msg.after1m": "دقيقة واحدة بعد القراءة",
"msg.sec30": "٣٠ ثانية",
"msg.min5": "٥ دقائق",
"msg.hour1": "ساعة واحدة",
"desktop.shareDesc": "أرسل الرمز إلى الطرف الآخر. يُستخدم مرة واحدة وينتهي سريعًا.",
"desktop.invitationCreated": "أُنشئت الدعوة الآمنة - أرسلها إلى الطرف الآخر.",
"desktop.joinDesc": "الصق رمز دعوة الطرف الآخر لبناء ردك الآمن.",
"desktop.offerTag": "دعوة · نسخ النص",
"desktop.answerTag": "رد · نسخ النص",
"desktop.offerPlaceholder": "سيظهر رمز الدعوة هنا…",
"desktop.answerPlaceholder": "سيظهر رمز الرد هنا…",
"desktop.backToChats": "العودة إلى المحادثات",
"desktop.sendFeedback": "إرسال ملاحظات",
"desktop.callsNeedVerified": "تتطلب المكالمات قناة آمنة مُتحقَّقًا منها.",
"desktop.noOpenChannel": "لا توجد قناة آمنة مفتوحة.",
"desktop.chatCarriesCall": "تحمل هذه المحادثة مكالمة جماعية. غادر المكالمة الجماعية قبل إجراء مكالمة فردية.",
"desktop.err.permission_denied": "تعذّر بدء المكالمة - الوصول إلى الميكروفون والكاميرا محظور. اسمح به في إعدادات النظام ثم أعد المحاولة.",
"desktop.language": "اللغة",
"desktop.languageHint": "يُطبَّق فورًا. الرسائل المُرسلة تبقى بالكلمات التي كُتبت بها.",
"desktop.compareCode": "قارن رمز التحقق مع الطرف الآخر وأكِّده إذا تطابق.",
"desktop.verifyBeforeFiles": "أكمل التحقق قبل إرسال الملفات.",
"desktop.verifyBeforeSending": "أكمل التحقق قبل إرسال الرسائل.",
"desktop.disconnectedByBackend": "أُغلق الاتصال بأمان.",
"desktop.restoreFailed": "تعذّرت استعادة الاتصال. سيتم إغلاق هذه المحادثة.",
"desktop.channelNotReady": "قناة البيانات غير متاحة بعد. انتظر حتى يُنشأ الاتصال.",
"desktop.enterCode": "أدخل رمز التحقق للتأكيد.",
"desktop.noOffer": "لم يُعثر على دعوة. أنشئ واحدة أولًا.",
"desktop.notInitiator": "لم تُنشئ هذا الاتصال، فلا يوجد رد لتطبيقه.",
"desktop.decryptFailed": "تعذّر فك تشفير رسالة، وقد أُهملت.",
"desktop.badMessageFormat": "وصل إطار مُشوَّه وأُهمل.",
"desktop.notSentNotReady": "لم تُرسل الرسالة: القناة الآمنة غير جاهزة. انتظر انتهاء التحقق أو أعد الاتصال.",
"desktop.micDenied": "رُفض الوصول إلى الميكروفون.",
"desktop.noChannelWait": "لا توجد قناة آمنة مفتوحة - انتظر حتى يُنشأ الاتصال.",
"desktop.sasFailed": "فشل التحقق. قد يوجد وسيط، لذلك أُلغي الاتصال.",
"desktop.sasOk": "نجح التحقق. هذه القناة موثَّقة من طرف إلى طرف.",
"desktop.iceForgotten": "نُسيت الخوادم المحفوظة. تُستخدم خوادم ICE العامة.",
"desktop.icePublic": "تُستخدم خوادم ICE العامة.",
"desktop.verificationInProgress": "ما زال التحقق الأمني جاريًا. انتظر حتى ينتهي.",
"desktop.fileGone": "لم يعد هذا الملف متاحًا للتنزيل.",
"desktop.codeMismatch": "رموز التحقق غير متطابقة. يجري قطع الاتصال حفاظًا على الأمان.",
"desktop.noLocalCode": "فشل التحقق: لا يوجد رمز مشتق محليًا للمقارنة. يجري قطع الاتصال حفاظًا على الأمان.",
"desktop.protocolViolation": "ادّعى الطرف الآخر تأكيد الرمز قبل أن تؤكّده أنت. يجري قطع الاتصال حفاظًا على الأمان.",
"desktop.verificationRejected": "رُفض التحقق. أُلغي الاتصال حفاظًا على الأمان.",
"secLevel.HIGH": "عالٍ",
"secLevel.MEDIUM": "متوسط",
"secLevel.LOW": "منخفض",
"desktop.rerun": "إعادة الفحص",
"desktop.ice.customDesc": "حتى {max} خادمًا، رابط واحد لكل سطر أو بصيغة JSON.",
"desktop.ice.persistDesc": "يُحفظ محليًا على هذا الجهاز. اتركه مطفأً لاستخدامه في هذه الجلسة فقط.",
"desktop.group.leaveNote": "يُبلَّغ بقية الأعضاء بأنك غادرت. بعد ذلك لا يبقى شيء من هذه المجموعة على هذا الجهاز - لا يوجد خادم يحتفظ بنسخة للعودة منها، لذا ستحتاج إلى دعوة جديدة.",
"desktop.sec.ecdsaOk": "تم التحقق من توقيع حزمة مفاتيح الطرف الآخر أثناء المصافحة (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "لا توجد مصافحة مكتملة",
"desktop.sec.ecdhOk": "اشتُقّت مفاتيح الجلسة من تبادل ECDH P-384 عابر عبر HKDF-SHA-256",
"desktop.sec.ecdhNone": "لم تُشتق مفاتيح جلسة",
"desktop.sec.encryptionOk": "تم التحقق من التشفير وفك التشفير AES-GCM داخل النواة",
"desktop.sec.encryptionNa": "تعذّر تشغيل الاختبار الذاتي لـ AES-GCM",
"desktop.sec.integrityOk": "تم التحقق من سلامة الرسائل (توثيق AES-GCM)",
"desktop.sec.integrityNa": "تعذّر تشغيل اختبار السلامة الذاتي",
"desktop.sec.pfsOk": "Double Ratchet نشط - لكل رسالة مفتاحها الخاص",
"desktop.sec.pfsNa": "لم يُقَس",
"desktop.sec.replayOk": "تُتلَف مفاتيح رسائل الراتشيت فور استخدامها، فلا يمكن إعادة تشغيل إطار مُلتقَط",
"desktop.sec.replayNa": "لم يُقَس",
"desktop.sec.dtlsPinned": "تم تثبيت بصمة DTLS للطرف الآخر: {fp}",
"desktop.sec.dtlsNone": "لا تتوفر بصمة DTLS للطرف البعيد",
"desktop.sec.sasBoth": "أكّد الطرفان رمز الأمان خارج القناة",
"desktop.sec.sasIncomplete": "لم يؤكّد الطرفان رمز الأمان",
"desktop.sec.metadataOk": "اشتُقّ مفتاح مخصص للبيانات الوصفية (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "لا يوجد مفتاح للبيانات الوصفية",
"desktop.sec.coverOn": "حركة التمويه نشطة: إطارات وهمية عشوائية (32-128 بايت كل 15-30 ثانية) على قناة الراتشيت",
"desktop.sec.coverOff": "مولّد حركة التمويه لا يعمل",
"desktop.sec.coverUnsupported": "تحتاج حركة التمويه إلى جلسة Double Ratchet (الطرف الآخر على إصدار أقدم)",
"desktop.tagline": "حرية من طرف إلى طرف",
"desktop.callsNotHere": "المكالمات غير متاحة بعد في هذه النسخة. الرسائل والملفات والدردشات الجماعية تعمل كالمعتاد."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["ar"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "Sprache",
"language.suggest.text": "Diese Seite gibt es auch auf Deutsch.",
"language.suggest.cta": "Auf Deutsch lesen",
"language.suggest.dismiss": "Schließen",
"community.title": "Gestalten Sie die Zukunft der Privatsphäre mit",
"community.description": "SecureBit wächst durch seine Community. Ihre Ideen und Ihr Feedback prägen die Zukunft sicherer Kommunikation - offen entwickelt, mit vollständiger 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üsselungskern",
"unique.s1.collapsed": "Verschlüsselungskern",
"unique.s1.desc": "ECDH-P-384-Schlüsselaustausch, AES-256-GCM-Nutzdaten, ECDSA-Signaturen und vollständige ASN.1-Validierung - zu einer gehärteten Pipeline verbunden.",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "Reines P2P",
"unique.s2.titleBottom": "über WebRTC",
"unique.s2.collapsed": "Reines P2P über WebRTC",
"unique.s2.desc": "Nachrichten laufen über WebRTC direkt von Gerät zu Gerät. Kein Relay hält 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üssel wechseln fortlaufend und werden nach Gebrauch verworfen. Ein einzelner kompromittierter Schlüssel öffnet damit niemals frühere Gespräche.",
"unique.s3.tags": [
"Ephemere Schlüssel",
"Automatischer Wechsel"
],
"unique.s4.titleTop": "Verschleierung",
"unique.s4.titleBottom": "des Datenverkehrs",
"unique.s4.collapsed": "Verkehrsverschleierung",
"unique.s4.desc": "Paketgrößen und Zeitabstände werden aufgefüllt und zufällig verändert. Metadatenmuster bleiben damit verborgen, auch für 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önnte.",
"unique.s5.tags": [
"Keine Konten",
"Keine Protokolle"
],
"partners.eyebrow": "Partner & Ökosystem",
"partners.heading": "Unsere Partner vertrauen uns",
"partners.aegis.desc": "Kapitalpartner, der vertrauliche Finanzkommunikation über sein gesamtes Portfolio absichert.",
"partners.aegis.role": "Strategischer Investor",
"partners.furilabs.desc": "Linux-Telefone mit Fokus auf Privatsphäre, die SecureBit als sicheren Standardkanal mitliefern.",
"partners.furilabs.role": "Technologiepartner",
"partners.inviteTitle": "Partner werden",
"partners.inviteDesc": "Sie bauen Hardware oder Infrastruktur für Privatsphäre? Lassen Sie uns SecureBit integrieren.",
"partners.inviteCta": "Gespräch beginnen",
"roadmap.eyebrow": "Entwicklungs-Roadmap",
"roadmap.heading": "Die Entwicklung von SecureBit",
"roadmap.subheading": "Vom ersten Prototyp zu einem quantensicheren, dezentralen Netzwerk - mit vollständiger 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öffentlicht",
"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önnen.",
"hero.subheading": "Die Schlüssel entstehen auf Ihrem Gerät und werden direkt zwischen den Geräten ausgetauscht. Keine Konten, keine Server, die Ihre Nachrichten speichern.",
"hero.diagramAlt": "Eine direkte verschlüsselte Leitung zu einem Teilnehmer, zu der zwei weitere Teilnehmer hinzustoßen",
"intro.createTitle": "Neuen Kanal erstellen",
"intro.createDesc": "Ihr Gerät erzeugt die Schlüssel und eine einmalige Einladung. Nichts davon berührt einen Server.",
"intro.createCta": "Schlüssel & Einladung erzeugen",
"intro.joinTitle": "Kanal beitreten",
"intro.scanTitle": "QR-Code mit der Kamera scannen",
"intro.scanSubtitle": "Am schnellsten - auf den Bildschirm Ihres Gegenübers halten",
"intro.orPasteCode": "oder Code einfügen",
"intro.pastePlaceholder": "Einladungscode hier einfügen …",
"intro.connect": "Verbinden",
"intro.connecting": "Wird verarbeitet …",
"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üsselungsarchitektur",
"UX/UI-Design"
],
"roadmap.r2.title": "Alpha-Release",
"roadmap.r2.sub": "Erste öffentliche Alpha: einfacher Chat und Schlüsselaustausch",
"roadmap.r2.date": "Frühjahr 2025",
"roadmap.r2.features": [
"Einfaches P2P-Messaging über WebRTC",
"Einfache Ende-zu-Ende-Verschlüsselung (Demoverfahren)",
"Stabiles Signalling und Wiederverbindung",
"Minimale Oberfläche zum Testen",
"Rückmeldungen der ersten Tester"
],
"roadmap.r3.title": "Sicherheit gehärtet",
"roadmap.r3.sub": "Sicherheit gestärkt, stabiler Zweig veröffentlicht",
"roadmap.r3.date": "Sommer 2025",
"roadmap.r3.features": [
"ECDH/ECDSA im Produktivbetrieb",
"Perfect Forward Secrecy und Schlüsselwechsel",
"Verbesserte Authentifizierungsprüfungen",
"Dateiverschlüsselung und Übertragung großer Nutzdaten",
"Prüfung der grundlegenden Kryptoabläufe"
],
"roadmap.r4.title": "Skalierung & Stabilität",
"roadmap.r4.sub": "Skalierung des Netzwerks und mehr Stabilität",
"roadmap.r4.date": "Herbst 2025",
"roadmap.r4.features": [
"Optimierte P2P-Verbindungen und NAT-Traversal",
"Wiederverbindung und Nachrichtenwarteschlangen",
"Geringerer Akkuverbrauch auf Mobilgeräten",
"Synchronisierung über mehrere Geräte",
"Monitoring- und Logging-Werkzeuge für Entwickler"
],
"roadmap.r5.title": "Privatsphäre zuerst",
"roadmap.r5.sub": "Schwerpunkt Privatsphäre: Metadaten minimieren",
"roadmap.r5.date": "Winter 2025",
"roadmap.r5.features": [
"Metadatenschutz und weniger Fingerprinting",
"Experimente mit Onion-Routing und DHT",
"Optionen für 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ärischem Niveau mit vollständiger ASN.1-Validierung",
"roadmap.r6.date": "Ende 2025",
"roadmap.r6.features": [
"Dreifache Absicherung: ECDH + DTLS + SAS",
"Verschlüsselung mit ECDH P-384 und AES-GCM 256 Bit",
"Prüfung des DTLS-Fingerabdrucks",
"SAS-Verifizierung (Short Authentication String)",
"Perfect Forward Secrecy mit Schlüsselwechsel",
"Verstärkter Schutz vor Man-in-the-Middle-Angriffen",
"Vollständige ASN.1-DER-Validierung",
"Prüfung 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ür 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 über Geräte hinweg",
"Überarbeitete Oberfläche",
"Dateien bis 100 MB"
],
"roadmap.r8.title": "Sichere Sprache & Anrufe",
"roadmap.r8.sub": "Verschlüsselte Sprachnachrichten, Audio- und Videoanrufe",
"roadmap.r8.date": "Anfang 2026",
"roadmap.r8.features": [
"Ende-zu-Ende-verschlüsselte Sprachnachrichten",
"Verschlüsselte Audioanrufe zu zweit (WebRTC)",
"Verschlüsselte Videoanrufe zu zweit (WebRTC)",
"Perfect Forward Secrecy für laufende Medien",
"Medienströme über SRTP/DTLS geschützt",
"SAS-Verifizierung während des Anrufs",
"Anrufbenachrichtigungen und automatische Wiederverbindung",
"P2P-Medien mit geringer Latenz"
],
"roadmap.r9.title": "Gruppenkommunikation",
"roadmap.r9.sub": "Gruppenchats ohne Verlust der Privatsphäre",
"roadmap.r9.date": "Jetzt",
"roadmap.r9.features": [
"P2P-Gruppenchats mit bis zu 8 Teilnehmenden",
"Mesh-Zustellung mit signiertem Relay als Rückfallebene",
"Ein Sicherheitscode für die Gruppe, den alle vergleichen",
"Commit-then-Reveal-Verfahren gegen das Erraten von Codes",
"Gruppeneigene Identitätsschlüssel, bewusst kurzlebig",
"Signierte Mitgliedschaft mit Epochenreihenfolge",
"Signierte Nachrichten - ein abweichender Verlauf ist damit beweisbar",
"Kein Server, kein gemeinsamer Gruppenschlüssel, kein Verlauf"
],
"roadmap.r10.title": "Mobile Edition",
"roadmap.r10.sub": "Native Apps für iOS und Android",
"roadmap.r10.date": "Q2 2027",
"roadmap.r10.features": [
"Native iOS-App (Swift/SwiftUI)",
"Native Android-App (Kotlin/Jetpack Compose)",
"PWA-Unterstützung für mobile Browser",
"Push-Benachrichtigungen in Echtzeit",
"Optimierter Akkuverbrauch",
"Für Mobilgeräte optimierte Oberfläche",
"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üsselaustausch",
"Aktualisierte Hash-Algorithmen",
"Migration bestehender Sitzungen",
"Kompatibilität mit v5.x",
"Quantenresistente Protokolle"
],
"roadmap.r12.title": "Dezentrales Netzwerk",
"roadmap.r12.sub": "Vollständig 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ür Knotenbetreiber",
"Steuerung über eine DAO",
"Zusammenspiel mit anderen Netzwerken",
"Plattformübergreifende Kompatibilität",
"Selbstheilendes Netzwerk"
],
"roadmap.r13.title": "KI-Assistent für Privatsphäre",
"roadmap.r13.sub": "KI für Privatsphäre und Sicherheit",
"roadmap.r13.date": "2028+",
"roadmap.r13.features": [
"Lokale KI-Bedrohungsanalyse",
"Automatische MITM-Erkennung",
"Adaptive Kryptografie",
"Persönliche Sicherheitsempfehlungen",
"Maschinelles Lernen ohne Wissenspreisgabe",
"Privater KI-Assistent",
"Vorausschauende Sicherheit",
"Autonomer Angriffsschutz"
],
"handshake.step1": "ECDH-P-384-Schlüsselpaar 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üssel, die Manipulation standhalten.",
"handshake.shareTitle": "Teilen Sie Ihre Einladung",
"handshake.sendAnswerTitle": "Senden Sie Ihre Antwort zurück",
"handshake.shareDesc": "Zeigen Sie den QR-Code oder senden Sie den Code an Ihr Gegenüber. Er gilt einmalig und läuft bald ab.",
"handshake.sendAnswerDesc": "Geben Sie diese Antwort dem Ersteller des Kanals, damit er den Handschlag abschließen kann.",
"handshake.establish": "Verbindung herstellen",
"handshake.thenReceive": "Nehmen Sie danach die Antwort Ihres Gegenübers entgegen",
"handshake.pasteAnswerPlaceholder": "Antwortcode des Gegenübers einfügen …",
"handshake.answerSentNote": "Senden Sie diese Antwort an den Ersteller und warten Sie - der Chat öffnet sich, sobald er sich verbindet.",
"handshake.qrHint": "Lassen Sie dies geöffnet, bis Ihr Gegenüber den Code erfasst hat.",
"handshake.qrHintFrames": "Der Handschlag ist auf {frames} Einzelbilder verteilt - lassen Sie dies geöffnet, bis Ihr Gegenüber alle erfasst hat.",
"verify.title": "Sicherheitsprüfung",
"verify.desc": "Vergleichen Sie diesen Sicherheitscode über einen anderen Weg mit Ihrem Gegenüber (Anruf oder persönlich) und geben Sie ihn dann ein, um den Chat freizuschalten.",
"verify.enterLabel": "Geprüften Code eingeben",
"verify.placeholder": "Code hier eingeben",
"verify.confirm": "Code bestätigen",
"verify.confirmed": "Bestätigt",
"verify.mismatch": "Stimmt nicht überein",
"verify.yours": "Ihre Bestätigung",
"verify.peer": "Bestätigung des Gegenübers",
"verify.pending": "Ausstehend",
"verify.waiting": "Warten auf den Code …",
"verify.verified": "Kanal geprüft",
"verify.bothConfirmed": "Beide Seiten haben bestätigt. Der sichere Chat wird geöffnet …",
"pwa.bannerTitle": "SecureBit.chat installieren",
"pwa.bannerDesc": "Die App-Erfahrung mit zusätzlicher Sicherheit",
"pwa.install": "Installieren",
"pwa.dismiss": "Schließen",
"pwa.close": "Schließen",
"pwa.iosTitle": "Auf iOS installieren",
"pwa.iosStep1": "Auf „Teilen“ tippen",
"pwa.iosStep1Hint": "Meist unten in Safari",
"pwa.iosStep2": "„Zum Home-Bildschirm“ suchen",
"pwa.iosStep2Hint": "Im Teilen-Menü nach unten scrollen",
"pwa.iosStep3": "Auf „Hinzufügen“ tippen",
"pwa.iosStep3Hint": "Bestätigen, um SecureBit.chat zu installieren",
"pwa.genericTitle": "SecureBit installieren",
"pwa.genericDesc": "Jeder Browser installiert auf seine eigene Weise. Wählen Sie die Schritte, die zu Ihrem passen.",
"pwa.gotIt": "Verstanden",
"pwa.installedTitle": "App installiert!",
"pwa.installedIos": "iOS-App installiert! Vom Home-Bildschirm öffnen.",
"pwa.installedGeneric": "SecureBit.chat ist jetzt auf Ihrem Gerät",
"pwa.anytimeTitle": "Jederzeit installierbar",
"pwa.anytimeDesc": "Sie können SecureBit.chat jederzeit über das Browsermenü installieren - so läuft es am besten.",
"pwa.ok": "OK",
"step.open": "Schritt 1 · Kanal öffnen",
"step.exchange": "Schritt 2 · Austausch",
"step.verification": "Schritt 3 · Prüfung",
"action.create": "Erstellen",
"action.join": "Beitreten",
"action.back": "Zurück",
"action.copy": "Kopieren",
"action.copied": "Kopiert",
"action.scan": "Scannen",
"action.downloadDesktop": "Desktop-App laden",
"action.advancedSettings": "Erweiterte Einstellungen",
"cred.offerTag": "Angebot · oder Text kopieren",
"cred.answerTag": "Antwort · 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 …",
"qr.hint": "Ruhig halten, bis alle Teile erfasst sind. Der Kamerazugriff bleibt lokal - nichts wird hochgeladen.",
"mesh.you": "Sie",
"mesh.peer": "Gegenüber · Sitzung 1",
"mesh.joined2": "lena ist dabei · +2",
"mesh.joined3": "jonas ist dabei · +3",
"ice.title": "Netzwerkeinstellungen",
"ice.subtitle": "Lokal eingestellt - wird nie an Ihr Gegenüber weitergegeben",
"ice.intro": "SecureBit nutzt standardmäßig öffentliche STUN-Server, um die direkte Verbindung auszuhandeln. Wenn Sie selbst hosten, tragen Sie Ihre eigenen STUN/TURN-Server ein.",
"ice.publicTitle": "Öffentliche Server (Standard)",
"ice.publicDesc": "Ohne Einrichtung. Für 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üsselt bleiben. Bevorzugen Sie ",
"ice.turnNoteTls": " (TLS).",
"ice.test": "Server testen",
"ice.testing": "Wird getestet …",
"ice.relayTitle": "Nur-Relay-Modus",
"ice.relayBadge": "MAXIMALE PRIVATSPHÄRE",
"ice.relayDesc": "Leitet den gesamten Verkehr über TURN, damit Ihr Gegenüber 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ät speichern",
"ice.persistDesc": "Verschlüsselt in diesem Browser abgelegt. Ausgeschaltet gilt die Einstellung nur für diese Sitzung.",
"ice.forget": "Gespeichertes löschen",
"ice.cancel": "Abbrechen",
"ice.apply": "Übernehmen",
"ice.errUnavailable": "WebRTC steht in diesem Browser nicht zur Verfügung",
"ice.errInvalid": "Ungültige Serverkonfiguration",
"update.title": "Update verfügbar",
"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äter",
"update.unknown": "k. A.",
"update.stepSaving": "Daten werden gesichert …",
"update.stepSwCaches": "Service-Worker-Caches werden geleert …",
"update.stepSwUnregister": "Service Worker werden abgemeldet …",
"update.stepBrowserCache": "Browser-Cache wird geleert …",
"update.stepVersion": "Version wird aktualisiert …",
"update.stepReload": "Anwendung wird neu geladen …",
"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ügbar. Ein Update wird für Sicherheit und Stabilität empfohlen. Ohne Update fortfahren?",
"offline.backOnline": "Wieder online",
"offline.mode": "Offline-Modus",
"offline.dismiss": "Schließen",
"offline.lostTitle": "Verbindung verloren",
"offline.lostDesc": "SecureBit läuft jetzt offline. Einiges ist eingeschränkt, Ihre Daten bleiben aber sicher.",
"offline.point1": "Ihre Sitzung und die Schlüssel 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üsselte 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über.",
"offline.r2Title": "Dateien werden zu Ende übertragen",
"offline.r2Desc": "Übertragungen 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über während der Störung gesendet hat, erreicht Sie der Reihe nach.",
"offline.r4Title": "Nichts geht verloren",
"offline.r4Desc": "Nach der Wiederverbindung bleibt keine Lücke - das Gespräch läuft genau dort weiter, wo es angehalten hat.",
"offline.gotIt": "Verstanden",
"qr.showTitle": "QR-Code anzeigen",
"qr.showSubtitle": "Vollbild · vom Gegenüber scannen lassen",
"qr.showSubtitleFrames": "Vollbild · alle {frames} Einzelbilder vom Gegenüber scannen lassen",
"notify.enabledBody": "Benachrichtigungen sind aktiv. Sie werden über neue Nachrichten informiert.",
"notify.workingBody": "Benachrichtigungen funktionieren. Sie werden über neue Nachrichten informiert.",
"pw.label": "Passworteingabe",
"pw.placeholder": "Passwort eingeben …",
"pw.decrypt": "Entschlüsseln",
"pw.cancel": "Abbrechen",
"file.title": "Dateiübertragungen",
"file.drop": "Dateien hierher ziehen",
"file.dropHint": "Vor der Übertragung Ende-zu-Ende verschlüsselt · bis 100 MB",
"file.browse": "Gerät 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ß",
"file.typeNotAllowed": "Dateityp nicht erlaubt",
"file.maxConcurrent": "Höchstzahl gleichzeitiger Übertragungen erreicht",
"file.gone": "Diese Datei steht nicht mehr zum Herunterladen bereit.",
"call.incoming": "Eingehender Anruf",
"call.incomingVideo": "Eingehender Videoanruf",
"call.encrypted": "Verschlüsselter Anruf",
"call.encryptedShort": "Verschlüsselt",
"call.peer": "Sicheres Gegenüber",
"call.connecting": "Verbindung wird aufgebaut …",
"call.ringing": "Es klingelt …",
"call.accept": "Annehmen",
"call.decline": "Ablehnen",
"call.end": "Auflegen",
"call.camera": "Kamera",
"call.cameraOff": "Kamera aus",
"call.peerCameraOff": "Die Kamera des Gegenübers ist aus",
"call.flipCamera": "Kamera wechseln",
"call.addVideo": "Video hinzufügen",
"call.video": "Video",
"call.muted": "Stumm",
"call.expand": "Vergrößern",
"call.minimize": "Verkleinern",
"call.quality": "Verbindungsqualität",
"call.qualityExcellent": "Ausgezeichnet",
"call.videoPrefix": "Video · ",
"call.voicePrefix": "Sprache · ",
"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ät zu Gerät. Alle vergleichen einen Sicherheitscode, bevor die Gruppe öffnet.",
"group.invite": "Einladen",
"group.inviteMore": "Weitere Mitglieder einladen",
"group.invitePeople": "{count} Personen einladen",
"group.invitation": "Gruppeneinladung",
"group.addMembers": "Mitglieder hinzufügen",
"group.roomFor": "Platz für {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ßen",
"group.cancelBtn": "Abbrechen",
"group.decline": "Ablehnen",
"group.working": "Wird ausgeführt …",
"group.sasTitle": "Sicherheitscode der Gruppe",
"group.sasEveryone": "Alle sehen diesen Code",
"group.sasCompare": "Vergleichen Sie den Gruppencode mit jedem Mitglied, um die Gruppe zu öffnen.",
"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ätigen Sie nicht.",
"group.confirmFirst": "Bestätigen Sie zuerst den Gruppencode",
"group.codeSuffix": " · Code {code}",
"group.exchangingNonces": "Nonces werden ausgetauscht …",
"group.waitingCommit": "Warten auf die Zusage aller Mitglieder …",
"group.waitingJoin": "Warten auf die übrigen Mitglieder …",
"group.emptyChat": "Hier ist noch nichts. Nachrichten sind von ihrem Absender signiert und laufen über die eigene verschlüsselte Verbindung jedes Mitglieds.",
"group.noVerified": "Noch keine geprüften Chats. Öffnen Sie zuerst einen Einzelchat und vergleichen Sie dessen Sicherheitscode - eine Gruppe entsteht aus bereits geprüften Verbindungen.",
"group.noMoreToAdd": "Keine weiteren geprüften Chats zum Hinzufügen. Öffnen Sie zuerst einen Einzelchat und vergleichen Sie dessen Sicherheitscode.",
"group.directLink": "Direkte Verbindung von Gerät zu Gerät",
"group.noDirectLink": "Noch keine direkte Verbindung - Nachrichten laufen über ein anderes Mitglied, während eine aufgebaut wird",
"group.relayNote": "Zu einigen Mitgliedern besteht noch keine direkte Verbindung. Ihre Nachrichten laufen über ein anderes Mitglied, das sieht, dass Sie sprechen, aber weder mitlesen noch etwas ändern 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ährt Ihre IP-Adresse - auch Mitglieder, die jemand anderes eingeladen hat. Schalten Sie ihn in den Netzwerkeinstellungen ein, wenn das hier zählt.",
"group.memberOffline": "{name} ist offline und erhält keine Nachrichten. Die Mitgliedschaft bleibt bestehen - ein Entfernen erneuert die Gruppenschlüssel.",
"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äuft weiter, bis sie annehmen. Einen Verlauf zum Nachlesen gibt es für 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üft. Schließen 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 ändern.",
"hdr.tagline": "Ende-zu-Ende verschlüsselt",
"hdr.netSettings": "Erweiterte Netzwerkeinstellungen",
"hdr.netSettingsTitle": "Erweiterte Netzwerkeinstellungen (STUN/TURN)",
"hdr.disconnect": "Trennen",
"status.connected": "Verbunden",
"status.connecting": "Verbindung wird aufgebaut …",
"status.notConnected": "Nicht verbunden",
"status.reconnecting": "Neuverbindung …",
"status.retrying": "Neuer Versuch …",
"status.verifying": "Wird geprüft …",
"status.peerDisconnected": "Gegenüber hat die Verbindung getrennt",
"sec.replayProtection": "Schutz vor Wiedereinspielung",
"sec.messageIntegrity": "Nachrichtenintegrität (HMAC)",
"sec.forwardSecrecy": "Perfect Forward Secrecy",
"sec.metadataProtection": "Metadatenschutz",
"sec.trafficObfuscation": "Verkehrsverschleierung",
"sec.realTests": "Echte kryptografische Prüfungen",
"sec.simulatedData": "Simulierte Daten",
"sec.testPassed": "Prüfung bestanden",
"sec.testFailed": "Prüfung fehlgeschlagen oder nicht verfügbar",
"sec.verificationDone": "Echte kryptografische Prüfung abgeschlossen",
"sec.verificationInProgress": "Sicherheitsprüfung läuft …",
"sec.verificationWait": "Sicherheitsprüfung läuft …\nBitte warten Sie, bis die kryptografische Prüfung in Echtzeit abgeschlossen ist.",
"sec.verificationUnavailable": "Sicherheitsprüfung nicht verfügbar",
"chat.placeholder": "Verschlüsselte Nachricht schreiben …",
"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ößert das Eingabefeld)",
"chat.codeHint": "Code-Ausschnitt · Formatierung bleibt erhalten · ⌘↵ zum Senden",
"chat.viewOnce": "Einmal ansehen",
"chat.viewOnceTitle": "Einmal ansehen - verschwindet, sobald das Gegenüber es gelesen hat",
"chat.viewOncePrefix": "Einmal ansehen · ",
"chat.viewOnceTap": "Einmal ansehen · zum Anzeigen tippen",
"chat.viewedOnce": "Bereits angesehen",
"chat.disappearing": "Verschwindende Nachricht - wird auf beiden Seiten gelöscht",
"chat.disappearAfter": "Verschwindet nach",
"chat.visibleFor": "Sichtbar für",
"chat.timerPrefix": "Timer · ",
"chat.expired": "Diese Nachricht ist abgelaufen",
"chat.deleteForEveryone": "Für alle löschen",
"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üsselt",
"chat.decrypted": "Entschlüsselt",
"chat.encryptedOnDevice": "Auf Ihrem Gerät verschlüsselt",
"chat.uploading": "Wird hochgeladen",
"chat.downloading": "Wird heruntergeladen",
"chat.transferring": "Wird übertragen …",
"chat.copied": "Kopiert!",
"chat.collapse": "Einklappen",
"chat.closeMenu": "Menü schließen",
"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 · nur auf diesem Gerät gespeichert",
"chat.setStatus": "Status festlegen",
"chat.yourStatusPrefix": "Ihr Status - ",
"chat.meshHint": "Bis zu 8 Teilnehmende · P2P-Mesh",
"chat.offline": "Offline",
"chat.noNetwork": "Kein Netz · Neuverbindung",
"chat.startVoiceCall": "Verschlüsselten Sprachanruf starten",
"chat.startVideoCall": "Verschlüsselten Videoanruf starten",
"chat.verifyForCalls": "Prüfen Sie die Sitzung, um Anrufe freizuschalten",
"chat.e2eeNote": "Jede Nachricht wird auf Ihrem Gerät Ende-zu-Ende verschlüsselt, bevor sie es verlässt.",
"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üsselt.",
"flow.responseCreated": "Sichere Antwort erstellt",
"flow.responseCreatedBang": "Sichere Antwort erstellt.",
"flow.sendInvitation": "Senden Sie den Einladungscode über einen sicheren Weg an Ihr Gegenüber (Anruf, SMS o. Ä.).",
"flow.sendResponse": "Senden Sie den Antwortcode über einen sicheren Weg an die Person, die den Kanal eröffnet hat, oder lassen Sie den QR-Code unten scannen.",
"flow.sendEncryptedCode": "Verschlüsselten Code senden",
"flow.sendTheResponse": "Antwort senden",
"flow.pasteOrWrite": "Code einfügen oder eingeben …",
"flow.processingInvitation": "Sichere Einladung wird verarbeitet …",
"flow.processingResponse": "Sichere Antwort wird verarbeitet …",
"flow.finalizing": "Sichere Verbindung wird abgeschlossen …",
"flow.channelEstablished": "Sicherer Kanal aufgebaut",
"flow.channelReady": "Sicherer Kanal ist bereit",
"flow.restoring": "Verbindung wird wiederhergestellt …",
"flow.invitationCaptured": "Einladung erfasst.",
"err.needInvitation": "Sie müssen den Einladungscode Ihres Gegenübers einfügen.",
"err.needResponse": "Sie müssen den Antwortcode Ihres Gegenübers einfügen.",
"err.responseFormat": "Ungültiges Antwortformat - bitte prüfen Sie den Code",
"err.responseNoKey": "Ungültiger Antwortcode - der kryptografische Schlüssel fehlt oder ist beschädigt. Bitte prüfen Sie den Code und versuchen Sie es erneut.",
"err.responseNoSignKey": "Ungültiger Antwortcode - der Schlüssel zur Signaturprüfung fehlt. Bitte prüfen 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üfung fehlgeschlagen - möglicher Angriff erkannt",
"err.retiredQr": "Dieser QR-Code nutzt ein altes Format, mit dem die Einladung nicht übertragen werden konnte. Bitten Sie Ihr Gegenüber um einen neuen Code oder verwenden Sie Kopieren und Einfügen.",
"err.compressedQrNote": "Ein komprimierter QR-Code lässt SDP der Kürze halber womöglich weg. Nutzen Sie Kopieren und Einfügen, 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 - öffnen Sie ihn erneut und versuchen Sie es noch einmal.",
"err.nobodyAccepted": "Niemand hat die Einladung angenommen. Die Gruppe bleibt unverändert.",
"err.noAudio": "Kein Ton aufgenommen - prüfen Sie die Mikrofonberechtigung und versuchen Sie es erneut.",
"err.voiceNeedsConnection": "Für 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ß",
"sas.safetyNumber": "Sicherheitsnummer",
"sas.incorrect": "Falscher Code. Prüfen Sie ihn mit Ihrem Gegenüber und versuchen Sie es erneut.",
"sas.noMatch": "Die Codes stimmen nicht überein",
"sas.makeSure": "Achten Sie darauf, dass die Codes exakt übereinstimmen.",
"sas.tooManyAttempts": "Zu viele Fehlversuche. Die Sitzung wurde aus Sicherheitsgründen zurückgesetzt.",
"sas.verificationFailed": "Prüfung fehlgeschlagen",
"sas.verified": "Geprüft · Perfect Forward Secrecy",
"sas.runVerification": "Sicherheitsprüfung starten",
"sec.panelTitle": "Netzwerk- und Kryptodetails",
"sec.security": "Sicherheit",
"sec.transport": "Transport",
"sec.keyExchange": "Schlüsselaustausch",
"sec.allEnabled": "Alle Sicherheitsfunktionen sind standardmäßig aktiv",
"sec.realTimeNote": "Prüfung in Echtzeit mit echten kryptografischen Funktionen - keine Platzhalterdaten.",
"sec.simulatedWarning": "Achtung: Die Verbindung ist womöglich noch nicht vollständig aufgebaut - die Werte können simuliert sein.",
"dl.title": "SecureBit herunterladen",
"dl.free": "Kostenlos · quelloffen",
"dl.soon": "Apps für iOS und Android sowie Browser-Erweiterungen für Chrome, Firefox und Opera folgen in Kürze.",
"chatHdr.chat": "Chat",
"chatHdr.chats": "Chats",
"chatHdr.newChat": "+ Neu",
"chatHdr.secure": "Sicher",
"chatHdr.p2pSub": "P2P · Ende-zu-Ende verschlüsselt",
"chatHdr.save": "Speichern",
"chatHdr.close": "Schließen",
"chatHdr.expand": "Vergrößern",
"chatHdr.you": "Sie",
"chatHdr.qrCode": "QR-Code",
"chat.disconnected": "Getrennt",
"call.mute": "Stummschalten",
"call.endShort": "Auflegen",
"group.add": "Hinzufügen",
"group.send": "Senden",
"sec.pfsShort": "Perfect Forward Secrecy",
"sec.cipher": "Chiffre",
"chat.close": "Schließen",
"file.needConnection": "Für die Dateiübertragung braucht es eine offene Verbindung",
"presence.available": "Verfügbar",
"presence.away": "Abwesend",
"presence.busy": "Beschäftigt",
"presence.offline": "Offline",
"presence.invisible": "Unsichtbar",
"presence.availableDesc": "Online und erreichbar",
"presence.awayDesc": "Untätig · kurz weg",
"presence.busyDesc": "Bitte nicht stören",
"presence.invisibleDesc": "Für andere offline erscheinen",
"presence.online": "Online",
"conn.p2p": "P2P · verbunden",
"conn.verifying": "Wird geprüft …",
"conn.connecting": "Verbindung wird aufgebaut …",
"conn.reconnecting": "Neuverbindung …",
"conn.peerDisconnected": "Gegenüber hat die Verbindung getrennt",
"conn.disconnected": "Getrennt",
"chat.defaultLabel": "Chat",
"groupPhase.forming": "Wird gebildet …",
"groupPhase.commitments": "Zusagen werden ausgetauscht …",
"groupPhase.revealing": "Wird offengelegt …",
"groupPhase.compare": "Gruppencode vergleichen",
"groupPhase.ready": "Gruppe bereit",
"groupPhase.failed": "Gruppe fehlgeschlagen",
"call.qualityGood": "Gut",
"call.qualityFair": "Mittelmäßig",
"call.qualityWeak": "Schwach",
"msg.code": "Code",
"msg.timer": "Timer",
"msg.voice": "Sprache",
"msg.play": "Abspielen",
"msg.sent": "Gesendet",
"msg.read": "Gelesen",
"report.title": "Sicherheitsprüfung in Echtzeit",
"report.active": "Aktiv",
"report.testsPassed": "Bestandene Prüfungen",
"report.verifiedAt": "Geprüft am",
"report.source": "Quelle",
"secTest.verifyECDHKeyExchange": "ECDH-Schlüsselaustausch",
"secTest.verifyECDSASignatures": "Digitale ECDSA-Signaturen",
"secTest.verifyEncryption": "AES-GCM-Verschlüsselung",
"secTest.verifyMessageIntegrity": "Nachrichtenintegrität",
"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üsselung",
"secTest.verifyNonExtractableKeys": "Nicht auslesbare Schlüssel",
"secTest.verifyRateLimiting": "Ratenbegrenzung",
"secTest.verifyMutualAuth": "Gegenseitige Authentifizierung",
"secTest.verifyAuthProof": "Authentifizierungsnachweis",
"secTest.verifyEnhancedValidation": "Erweiterte Prüfung",
"secTest.verifyAdvancedFeatures": "Erweiterte Funktionen",
"secTest.verifySignature": "Signaturprüfung",
"secDetail.Security system initializing...": "Sicherheitssystem startet …",
"secDetail.Nested encryption active": "Verschachtelte Verschlüsselung aktiv",
"secDetail.Nested encryption failed": "Verschachtelte Verschlüsselung 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üsselungsschlüssel vorhanden",
"secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM-Ver- und -Entschlüsselung funktionieren korrekt",
"secDetail.No ECDH key pair available": "Kein ECDH-Schlüsselpaar vorhanden",
"secDetail.Key derivation failed": "Schlüsselableitung fehlgeschlagen",
"secDetail.No ECDSA key pair available": "Kein ECDSA-Schlüsselpaar vorhanden",
"secDetail.ECDSA digital signatures working correctly": "Digitale ECDSA-Signaturen funktionieren korrekt",
"secDetail.MAC key not available or invalid": "MAC-Schlüssel fehlt oder ist ungültig",
"secDetail.Rate limiter did not block a message over the limit": "Die Ratenbegrenzung hat eine Nachricht über dem Limit nicht blockiert",
"secDetail.Rate limiter is not available": "Die Ratenbegrenzung ist nicht verfügbar",
"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ügbar",
"secDetail.SAS verification code is valid and available": "Der SAS-Prüfcode ist gültig 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ür diese Sitzung gibt es kein nicht auslesbares, kurzlebiges ECDH-Schlüsselpaar",
"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üssel sind pro Sitzung kurzlebig, aber der Double Ratchet ist für diese Verbindung nicht aktiv (das Gegenüber nutzt eine ältere Version). Ein kompromittierter Sitzungsschlüssel legt damit das ganze Gespräch offen.",
"msg.pause": "Pause",
"msg.failed": "Fehlgeschlagen",
"groupErr.timeout": "Ein Mitglied hat aufgehört zu antworten, bevor der Code fertig war.",
"groupErr.keyMismatch": "Der Schlüssel eines Mitglieds passte nicht zu der Identität, die dafür angegeben wurde.",
"groupErr.revealMismatch": "Der offengelegte Wert eines Mitglieds passte nicht zu seiner Zusage.",
"groupErr.commitChanged": "Ein Mitglied hat seine Zusage mittendrin geändert.",
"groupErr.missingKey": "Es wurde ein Mitglied gelistet, dessen Schlüssel nie ankam.",
"groupErr.outsider": "Es kam ein Frame von jemandem außerhalb der Gruppe an.",
"groupErr.limit": "Eine Gruppe ist auf acht Mitglieder begrenzt.",
"groupErr.tooLarge": "Eine Nachricht war zu groß, um sie an die Gruppe zu senden.",
"fileType.text": "Reiner Text",
"fileType.images": "Bilder",
"fileType.archives": "Archive",
"fileType.voice": "Sprachnachrichten",
"fileType.unsupported": "Nicht unterstützt",
"qrScan.title": "QR-Code scannen",
"qrScan.auto": "Automatik",
"qrScan.reset": "Zurücksetzen",
"qrScan.autoScroll": "Automatisches Scrollen aktiv",
"qrScan.starting": "Kamera wird gestartet …",
"qrScan.point": "Kamera auf den QR-Code richten",
"qrScan.tapFocus": "Zum Fokussieren auf den Bildschirm tippen",
"qrScan.focusing": "Wird fokussiert …",
"iceErr.notArray": "Die Serverliste muss ein Array sein",
"iceErr.invalidJson": "Ungültiges JSON",
"iceErr.tooMany": "Zu viele Server (höchstens {max})",
"iceErr.invalidEntry": "{label}: ungültiger Eintrag",
"iceErr.urlCount": "{label}: 1 bis {max} URLs erforderlich",
"iceErr.turnCreds": "{label}: TURN-Server brauchen üblicherweise 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ält ungültige Zeichen",
"iceUrl.badScheme": "Die URL muss mit stun:, stuns:, turn: oder turns: beginnen",
"iceUrl.badQuery": "Die URL hat eine ungültige Abfrage",
"iceUrl.noHost": "In der URL fehlt der Host",
"iceUrl.badHost": "Die URL hat einen ungültigen Host oder Port",
"iceUrl.badTransport": "Die URL-Abfrage muss transport=udp oder transport=tcp lauten",
"msg.off": "Aus",
"file.consentUnavailable": "Keine Zustimmung möglich",
"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",
"groupCall.startVoice": "Gruppen-Sprachanruf starten",
"groupCall.startVideo": "Gruppen-Videoanruf starten",
"groupCall.join": "Beitreten",
"groupCall.dismiss": "Jetzt nicht",
"groupCall.leave": "Anruf verlassen",
"groupCall.you": "Du",
"groupCall.connecting": "Verbinden…",
"groupCall.waitingLink": "Warten auf eine direkte Verbindung…",
"groupCall.legFailed": "Verbindung fehlgeschlagen",
"groupCall.startedVoice": "{name} hat einen Sprachanruf gestartet",
"groupCall.startedVideo": "{name} hat einen Videoanruf gestartet",
"groupCall.inCall": "{count} im Anruf",
"groupCall.err.permission_denied": "Der Anruf konnte nicht starten - der Zugriff auf Mikrofon und Kamera ist blockiert. Erlaube ihn für diese Seite und versuche es erneut.",
"groupCall.err.device_not_found": "Der Anruf konnte nicht starten - auf diesem Gerät wurde kein Mikrofon gefunden.",
"groupCall.err.device_busy": "Der Anruf konnte nicht starten - dein Mikrofon wird von einer anderen App verwendet. Schließe sie und versuche es erneut.",
"groupCall.err.media_failed": "Der Anruf konnte nicht starten - das Mikrofon ließ sich nicht öffnen.",
"groupCall.err.call_in_progress": "In dieser Gruppe läuft bereits ein Anruf. Tritt ihm bei, statt einen neuen zu starten.",
"groupCall.err.not_ready": "Bestätige zuerst den Gruppencode, bevor du anrufst.",
"groupCall.speaking": "{name} spricht",
"groupCall.pin": "{name} groß anzeigen",
"groupCall.unpin": "Zurück zu allen",
"groupCall.showEveryone": "Alle",
"msg.after5s": "5 Sek. nach dem Lesen",
"msg.after15s": "15 Sek. nach dem Lesen",
"msg.after30s": "30 Sek. nach dem Lesen",
"msg.after1m": "1 Min. nach dem Lesen",
"msg.sec30": "30 Sekunden",
"msg.min5": "5 Minuten",
"msg.hour1": "1 Stunde",
"desktop.shareDesc": "Sende den Code an deinen Peer. Er gilt einmalig und läuft bald ab.",
"desktop.invitationCreated": "Sichere Einladung erstellt - sende sie an deinen Peer.",
"desktop.joinDesc": "Füge den Einladungscode deines Peers ein, um deine sichere Antwort zu erzeugen.",
"desktop.offerTag": "Einladung · Text kopieren",
"desktop.answerTag": "Antwort · Text kopieren",
"desktop.offerPlaceholder": "Hier erscheint der Einladungscode…",
"desktop.answerPlaceholder": "Hier erscheint der Antwortcode…",
"desktop.backToChats": "Zurück zu den Chats",
"desktop.sendFeedback": "Feedback senden",
"desktop.callsNeedVerified": "Anrufe erfordern einen verifizierten sicheren Kanal.",
"desktop.noOpenChannel": "Kein offener sicherer Kanal.",
"desktop.chatCarriesCall": "Über diesen Chat läuft ein Gruppenanruf. Verlasse den Gruppenanruf, bevor du einen Einzelanruf startest.",
"desktop.err.permission_denied": "Der Anruf konnte nicht starten - der Zugriff auf Mikrofon und Kamera ist blockiert. Erlaube ihn in den Systemeinstellungen und versuche es erneut.",
"desktop.language": "Sprache",
"desktop.languageHint": "Gilt sofort. Bereits gesendete Nachrichten behalten ihren Wortlaut.",
"desktop.compareCode": "Vergleiche den Prüfcode mit deinem Peer und bestätige ihn, wenn er übereinstimmt.",
"desktop.verifyBeforeFiles": "Schließe die Verifizierung ab, bevor du Dateien sendest.",
"desktop.verifyBeforeSending": "Schließe die Verifizierung ab, bevor du Nachrichten sendest.",
"desktop.disconnectedByBackend": "Verbindung sicher getrennt.",
"desktop.restoreFailed": "Die Verbindung konnte nicht wiederhergestellt werden. Dieser Chat wird geschlossen.",
"desktop.channelNotReady": "Der Datenkanal ist noch nicht verfügbar. Warte, bis die Verbindung steht.",
"desktop.enterCode": "Gib den Prüfcode zur Bestätigung ein.",
"desktop.noOffer": "Keine Einladung gefunden. Erstelle zuerst eine.",
"desktop.notInitiator": "Du hast diese Verbindung nicht erstellt, also gibt es für dich keine Antwort zum Anwenden.",
"desktop.decryptFailed": "Eine Nachricht konnte nicht entschlüsselt werden und wurde verworfen.",
"desktop.badMessageFormat": "Ein fehlerhaftes Frame kam an und wurde verworfen.",
"desktop.notSentNotReady": "Nachricht nicht gesendet: Der sichere Kanal ist nicht bereit. Warte, bis die Verifizierung abgeschlossen ist, oder verbinde dich neu.",
"desktop.micDenied": "Der Zugriff auf das Mikrofon wurde verweigert.",
"desktop.noChannelWait": "Kein offener sicherer Kanal - warte, bis die Verbindung steht.",
"desktop.sasFailed": "Verifizierung fehlgeschlagen. Möglicherweise sitzt jemand dazwischen, deshalb wurde die Verbindung abgebrochen.",
"desktop.sasOk": "Verifizierung erfolgreich. Dieser Kanal ist Ende zu Ende authentifiziert.",
"desktop.iceForgotten": "Gespeicherte Server verworfen. Es werden öffentliche ICE-Server verwendet.",
"desktop.icePublic": "Es werden öffentliche ICE-Server verwendet.",
"desktop.verificationInProgress": "Die Sicherheitsprüfung läuft noch. Warte, bis sie fertig ist.",
"desktop.fileGone": "Diese Datei steht nicht mehr zum Download bereit.",
"desktop.codeMismatch": "Die Prüfcodes stimmen nicht überein. Die Verbindung wird zur Sicherheit getrennt.",
"desktop.noLocalCode": "Verifizierung fehlgeschlagen: Es gibt keinen lokal abgeleiteten Code zum Vergleich. Die Verbindung wird zur Sicherheit getrennt.",
"desktop.protocolViolation": "Der Peer hat den Code als bestätigt ausgegeben, bevor du ihn bestätigt hast. Die Verbindung wird zur Sicherheit getrennt.",
"desktop.verificationRejected": "Verifizierung abgelehnt. Die Verbindung wurde zur Sicherheit abgebrochen.",
"secLevel.HIGH": "HOCH",
"secLevel.MEDIUM": "MITTEL",
"secLevel.LOW": "NIEDRIG",
"desktop.rerun": "Erneut prüfen",
"desktop.ice.customDesc": "Bis zu {max} Server, eine URL pro Zeile oder JSON.",
"desktop.ice.persistDesc": "Lokal auf diesem Gerät gespeichert. Aus lassen, um sie nur für diese Sitzung zu verwenden.",
"desktop.group.leaveNote": "Den anderen Mitgliedern wird mitgeteilt, dass du gegangen bist. Danach bleibt nichts von dieser Gruppe auf diesem Gerät - es gibt keinen Server mit einer Kopie, über den du zurückkehren könntest, du bräuchtest also eine neue Einladung.",
"desktop.sec.ecdsaOk": "Signatur des Schlüsselpakets der Gegenstelle beim Handshake geprüft (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "Kein abgeschlossener Handshake",
"desktop.sec.ecdhOk": "Sitzungsschlüssel aus einem flüchtigen ECDH-P-384-Austausch über HKDF-SHA-256 abgeleitet",
"desktop.sec.ecdhNone": "Keine Sitzungsschlüssel abgeleitet",
"desktop.sec.encryptionOk": "AES-GCM-Ver- und Entschlüsselung im Kern verifiziert",
"desktop.sec.encryptionNa": "Der AES-GCM-Selbsttest konnte nicht ausgeführt werden",
"desktop.sec.integrityOk": "Nachrichtenintegrität verifiziert (AES-GCM-Authentifizierung)",
"desktop.sec.integrityNa": "Der Integritäts-Selbsttest konnte nicht ausgeführt werden",
"desktop.sec.pfsOk": "Double Ratchet aktiv - jede Nachricht hat ihren eigenen Schlüssel",
"desktop.sec.pfsNa": "Nicht gemessen",
"desktop.sec.replayOk": "Ratchet-Nachrichtenschlüssel werden nach Gebrauch vernichtet, ein mitgeschnittenes Frame lässt sich nicht erneut abspielen",
"desktop.sec.replayNa": "Nicht gemessen",
"desktop.sec.dtlsPinned": "DTLS-Fingerabdruck der Gegenstelle verankert: {fp}",
"desktop.sec.dtlsNone": "Kein DTLS-Fingerabdruck der Gegenstelle verfügbar",
"desktop.sec.sasBoth": "Beide Seiten haben den Sicherheitscode außerhalb des Kanals bestätigt",
"desktop.sec.sasIncomplete": "Der Sicherheitscode wurde nicht von beiden Seiten bestätigt",
"desktop.sec.metadataOk": "Ein eigener Metadatenschlüssel wurde abgeleitet (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "Kein Metadatenschlüssel",
"desktop.sec.coverOn": "Verdeckter Verkehr aktiv: zufällige Scheinframes (32-128 B alle 15-30 s) auf dem Ratchet-Kanal",
"desktop.sec.coverOff": "Der Generator für verdeckten Verkehr läuft nicht",
"desktop.sec.coverUnsupported": "Verdeckter Verkehr braucht eine Double-Ratchet-Sitzung (die Gegenstelle nutzt eine ältere Version)",
"desktop.tagline": "Ende-zu-Ende-Freiheit",
"desktop.callsNotHere": "Anrufe sind in dieser Version noch nicht verfügbar. Nachrichten, Dateien und Gruppenchats funktionieren wie gewohnt."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["de"] = DICTIONARY;
+6
View File
@@ -0,0 +1,6 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
// The default locale's dictionary, under a name that does not change when the default
// does. Imported for its side effect: loading it registers the strings t() falls back to.
import "./en.js";
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"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."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["en"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "Idioma",
"language.suggest.text": "Esta página también está disponible en español.",
"language.suggest.cta": "Leer en español",
"language.suggest.dismiss": "Cerrar",
"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ón segura, desarrollada de forma abierta y con validación 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é SecureBit es único",
"unique.s1.titleTop": "Núcleo de cifrado",
"unique.s1.titleBottom": "por capas",
"unique.s1.collapsed": "Núcleo de cifrado",
"unique.s1.desc": "Intercambio de claves ECDH P-384, carga útil AES-256-GCM, firmas ECDSA y validación 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ún 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ón rotan continuamente y se descartan tras usarse, de modo que una clave comprometida nunca abre las conversaciones anteriores.",
"unique.s3.tags": [
"Claves efímeras",
"Rotación automática"
],
"unique.s4.titleTop": "Ofuscación",
"unique.s4.titleBottom": "del tráfico",
"unique.s4.collapsed": "Ofuscación del tráfico",
"unique.s4.desc": "Los tamaños de paquete y los tiempos se rellenan y se aleatorizan, ocultando los patrones de metadatos a quien observe la línea.",
"unique.s4.tags": [
"Relleno de paquetes",
"Variación 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ían en nosotros",
"partners.aegis.desc": "Socio de capital que protege las comunicaciones financieras confidenciales de toda su cartera.",
"partners.aegis.role": "Inversor estratégico",
"partners.furilabs.desc": "Teléfonos Linux centrados en la privacidad que incluyen SecureBit como canal seguro por defecto.",
"partners.furilabs.role": "Socio tecnológico",
"partners.inviteTitle": "Conviértete en socio",
"partners.inviteDesc": "¿Construyes hardware o infraestructura para la privacidad? Integremos SecureBit.",
"partners.inviteCta": "Iniciar una conversación",
"roadmap.eyebrow": "Hoja de ruta",
"roadmap.heading": "La evolución de SecureBit",
"roadmap.subheading": "Del primer prototipo a una red descentralizada y resistente a la computación cuántica, con validación 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ón",
"hero.headlineTop": "Una línea directa",
"hero.headlineBottom": "que solo leéis 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ínea 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ón de un solo uso. Nada de esto pasa por un servidor.",
"intro.createCta": "Generar claves e invitación",
"intro.joinTitle": "Unirse a un canal",
"intro.scanTitle": "Escanear el QR con la cámara",
"intro.scanSubtitle": "Lo más rápido: apunta a la pantalla de la otra persona",
"intro.orPasteCode": "o pega el código",
"intro.pastePlaceholder": "Pega aquí el código de invitación…",
"intro.connect": "Conectar",
"intro.connecting": "Procesando…",
"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ón del concepto y los requisitos",
"Elección del stack: WebRTC, P2P, criptografía",
"Primeros prototipos de mensajería",
"Creación del repositorio y CI",
"Arquitectura básica de cifrado",
"Diseño de UX/UI"
],
"roadmap.r2.title": "Versión alfa",
"roadmap.r2.sub": "Primera alfa pública: chat básico e intercambio de claves",
"roadmap.r2.date": "Primavera de 2025",
"roadmap.r2.features": [
"Mensajería P2P básica por WebRTC",
"Cifrado de extremo a extremo sencillo (esquema de demostración)",
"Señalización y reconexión estables",
"Interfaz mínima para pruebas",
"Recogida de comentarios de los primeros probadores"
],
"roadmap.r3.title": "Seguridad reforzada",
"roadmap.r3.sub": "Refuerzo de la seguridad y publicación de la rama estable",
"roadmap.r3.date": "Verano de 2025",
"roadmap.r3.features": [
"ECDH/ECDSA en producción",
"Secreto hacia adelante y rotación de claves",
"Comprobaciones de autenticación mejoradas",
"Cifrado de archivos y envío de cargas grandes",
"Auditoría de los procesos criptográficos básicos"
],
"roadmap.r4.title": "Escala y estabilidad",
"roadmap.r4.sub": "Escalado de la red y mejoras de estabilidad",
"roadmap.r4.date": "Otoño de 2025",
"roadmap.r4.features": [
"Optimización de las conexiones P2P y del NAT traversal",
"Mecanismos de reconexión y colas de mensajes",
"Menor consumo de batería en el móvil",
"Sincronización entre varios dispositivos",
"Herramientas de monitorización 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ón de metadatos y menos huella identificable",
"Experimentos con enrutamiento cebolla y DHT",
"Opciones de conexión anónima",
"Preparación de la auditoría de código abierto",
"Mejora de la verificación entre usuarios"
],
"roadmap.r6.title": "Enhanced Security Edition",
"roadmap.r6.sub": "Criptografía de grado militar en 18 capas con validación 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ón de la huella DTLS",
"Verificación SAS (cadena corta de autenticación)",
"Secreto hacia adelante con rotación de claves",
"Mayor protección frente a ataques de intermediario",
"Validación ASN.1 DER completa",
"Verificación de OID y de puntos EC",
"Validación de la estructura SPKI",
"Arquitectura P2P sobre WebRTC",
"Protección de metadatos",
"Código 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ón de escritorio para Windows (Tauri v2)",
"Aplicación de escritorio para macOS (Tauri v2)",
"AppImage para Linux (Tauri v2)",
"Notificaciones en tiempo real",
"Reconexión automática",
"Sincronización 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ídeo 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ídeo cifradas uno a uno (WebRTC)",
"Secreto hacia adelante para el medio en directo",
"Flujos de medios protegidos con SRTP/DTLS",
"Verificación SAS durante la llamada",
"Avisos de llamada y reconexión automática",
"Medios P2P de baja latencia"
],
"roadmap.r9.title": "Comunicación 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 único código de seguridad del grupo, comparado por todos",
"Ceremonia de compromiso y revelación contra el tanteo de códigos",
"Claves de identidad propias del grupo, efímeras por diseño",
"Membresía firmada con orden por épocas",
"Mensajes firmados: una transcripción 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.º trimestre de 2027",
"roadmap.r10.features": [
"Aplicación nativa de iOS (Swift/SwiftUI)",
"Aplicación nativa de Android (Kotlin/Jetpack Compose)",
"Soporte PWA en navegadores móviles",
"Notificaciones push en tiempo real",
"Optimización de la batería",
"Interfaz optimizada para el móvil",
"Cola de mensajes sin conexión",
"Autenticación biométrica"
],
"roadmap.r11.title": "Edición resistente a la computación cuántica",
"roadmap.r11.sub": "Protección frente a los ordenadores cuánticos",
"roadmap.r11.date": "4.º trimestre de 2027",
"roadmap.r11.features": [
"Criptografía poscuántica CRYSTALS-Kyber",
"Firmas digitales SPHINCS+",
"Esquema híbrido: clásico y poscuántico",
"Intercambio de claves seguro frente a lo cuántico",
"Algoritmos de hash actualizados",
"Migración de las sesiones existentes",
"Compatibilidad con la v5.x",
"Protocolos resistentes a lo cuántico"
],
"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ómica 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álisis local de amenazas con IA",
"Detección automática de intermediarios",
"Criptografía adaptativa",
"Recomendaciones de seguridad personalizadas",
"Aprendizaje automático de conocimiento cero",
"Asistente de IA privado",
"Seguridad predictiva",
"Protección autónoma frente a ataques"
],
"handshake.step1": "Generando el par de claves ECDH P-384",
"handshake.step2": "Derivando el código de verificación",
"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ón",
"handshake.sendAnswerTitle": "Devuelve tu respuesta",
"handshake.shareDesc": "Muestra el QR o envía el código a la otra persona. Es de un solo uso y caduca pronto.",
"handshake.sendAnswerDesc": "Entrega esta respuesta a quien creó el canal para que complete el saludo.",
"handshake.establish": "Establecer la conexión",
"handshake.thenReceive": "Después recibe la respuesta que te devuelva la otra persona",
"handshake.pasteAnswerPlaceholder": "Pega aquí el código de respuesta…",
"handshake.answerSentNote": "Envía esta respuesta a quien creó el canal y espera: el chat se abrirá cuando conecte.",
"handshake.qrHint": "Mantén esto abierto hasta que la otra persona capture el código.",
"handshake.qrHintFrames": "El saludo se reparte en {frames} imágenes: mantén esto abierto hasta que las capture todas.",
"verify.title": "Verificación de seguridad",
"verify.desc": "Compara este código de seguridad con la otra persona por otra vía (voz o en persona) y escríbelo para desbloquear el chat.",
"verify.enterLabel": "Introduce el código verificado",
"verify.placeholder": "Escribe el código aquí",
"verify.confirm": "Confirmar el código",
"verify.confirmed": "Confirmado",
"verify.mismatch": "No coinciden",
"verify.yours": "Tu confirmación",
"verify.peer": "Confirmación de la otra persona",
"verify.pending": "Pendiente",
"verify.waiting": "Esperando el código…",
"verify.verified": "Canal verificado",
"verify.bothConfirmed": "Ambas partes han confirmado. Abriendo el chat seguro…",
"pwa.bannerTitle": "Instala SecureBit.chat",
"pwa.bannerDesc": "Disfruta de la experiencia de app nativa con más seguridad",
"pwa.install": "Instalar",
"pwa.dismiss": "Descartar",
"pwa.close": "Cerrar",
"pwa.iosTitle": "Instalar en iOS",
"pwa.iosStep1": "Toca el botón Compartir",
"pwa.iosStep1Hint": "Suele estar en la parte inferior de Safari",
"pwa.iosStep2": "Busca «Añadir a pantalla de inicio»",
"pwa.iosStep2Hint": "Desplázate hacia abajo en el menú de compartir",
"pwa.iosStep3": "Toca «Añadir»",
"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": "¡App instalada!",
"pwa.installedIos": "¡App de iOS instalada! Ábrela desde la pantalla de inicio.",
"pwa.installedGeneric": "SecureBit.chat ya está en tu dispositivo",
"pwa.anytimeTitle": "Instálalo cuando quieras",
"pwa.anytimeDesc": "Puedes instalar SecureBit.chat desde el menú de tu navegador cuando quieras, para la mejor experiencia.",
"pwa.ok": "Aceptar",
"step.open": "Paso 1 · abrir un canal",
"step.exchange": "Paso 2 · intercambio",
"step.verification": "Paso 3 · verificación",
"action.create": "Crear",
"action.join": "Unirse",
"action.back": "Atrás",
"action.copy": "Copiar",
"action.copied": "Copiado",
"action.scan": "Escanear",
"action.downloadDesktop": "Descargar la app de escritorio",
"action.advancedSettings": "Ajustes avanzados",
"cred.offerTag": "oferta · o copia el texto",
"cred.answerTag": "respuesta · o copia el texto",
"cred.reveal": "Haz clic para mostrarlo: mantén este código en privado",
"qr.title": "Escanear código QR",
"qr.subtitle": "Apunta la cámara a su código QR",
"qr.scanning": "Escaneando…",
"qr.hint": "Mantén el pulso hasta capturar todas las partes. La cámara se usa en local: no se sube nada.",
"mesh.you": "tú",
"mesh.peer": "par · sesión 1",
"mesh.joined2": "lucía se ha unido · +2",
"mesh.joined3": "mateo se ha unido · +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úblicos por defecto para negociar el enlace entre pares. Si tienes los tuyos, apúntalo a tu STUN/TURN.",
"ice.publicTitle": "Servidores públicos (por defecto)",
"ice.publicDesc": "Sin configuración. Suficiente para la mayoría.",
"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áfico, pero nunca el contenido, que sigue cifrado de extremo a extremo. Es preferible ",
"ice.turnNoteTls": " (TLS).",
"ice.test": "Probar los servidores",
"ice.testing": "Probando…",
"ice.relayTitle": "Modo solo relay",
"ice.relayBadge": "MÁXIMA PRIVACIDAD",
"ice.relayDesc": "Envía todo el tráfico por TURN, así la otra persona nunca ve tu IP. Necesita un servidor TURN.",
"ice.relayWarning": "El modo solo relay está activado pero no hay ningún servidor TURN configurado. La conexión no podrá iniciarse.",
"ice.persist": "Guardar en este dispositivo",
"ice.persistDesc": "Se guarda cifrado en este navegador. Déjalo apagado para usarlo solo en esta sesión.",
"ice.forget": "Olvidar lo guardado",
"ice.cancel": "Cancelar",
"ice.apply": "Aplicar",
"ice.errUnavailable": "WebRTC no está disponible en este navegador",
"ice.errInvalid": "Configuración de servidor no válida",
"update.title": "Actualización disponible",
"update.desc": "Se ha detectado una versión más reciente de SecureBit.",
"update.currentVersion": "Versión actual",
"update.newVersion": "Versión nueva",
"update.now": "Actualizar ahora",
"update.later": "Más tarde",
"update.unknown": "N/D",
"update.stepSaving": "Guardando los datos…",
"update.stepSwCaches": "Vaciando las cachés del Service Worker…",
"update.stepSwUnregister": "Dando de baja los Service Workers…",
"update.stepBrowserCache": "Vaciando la caché del navegador…",
"update.stepVersion": "Actualizando la versión…",
"update.stepReload": "Recargando la aplicación…",
"update.error": "Error al actualizar. Recarga la página manualmente (Ctrl+F5 o Cmd+Mayús+R)",
"update.confirmSkip": "Hay una versión nueva. Se recomienda actualizar por seguridad y estabilidad. ¿Continuar sin actualizar?",
"offline.backOnline": "De nuevo en línea",
"offline.mode": "Modo sin conexión",
"offline.dismiss": "Descartar",
"offline.lostTitle": "Se ha perdido la conexión",
"offline.lostDesc": "SecureBit está ahora sin conexión. Algunas funciones se limitan, pero tus datos siguen a salvo.",
"offline.point1": "Tu sesión 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ón",
"offline.restoredTitle": "Cuando vuelvas a conectarte",
"offline.restoredDesc": "Perder la conexión no te cuesta nada. SecureBit lo encola todo en local y retoma la sesión cifrada en cuanto vuelves a estar en línea.",
"offline.r1Title": "Tus mensajes se entregan",
"offline.r1Desc": "Todo lo que escribiste sin conexión se envía automáticamente a tu contacto.",
"offline.r2Title": "Los archivos terminan de enviarse",
"offline.r2Desc": "Las subidas continúan 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ún hueco: la conversación sigue justo donde se detuvo.",
"offline.gotIt": "Entendido",
"qr.showTitle": "Mostrar el código QR",
"qr.showSubtitle": "Pantalla completa · deja que lo escaneen",
"qr.showSubtitleFrames": "Pantalla completa · deja que escaneen las {frames} imágenes",
"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ña",
"pw.placeholder": "Escribe la contraseña…",
"pw.decrypt": "Descifrar",
"pw.cancel": "Cancelar",
"file.title": "Transferencias de archivos",
"file.drop": "Arrastra los archivos aquí",
"file.dropHint": "Cifrados de extremo a extremo antes de enviarse · 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ón aún no está lista",
"file.tooLarge": "El archivo es demasiado grande",
"file.typeNotAllowed": "Tipo de archivo no permitido",
"file.maxConcurrent": "Se ha alcanzado el máximo de transferencias simultáneas",
"file.gone": "Este archivo ya no está 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…",
"call.ringing": "Llamando…",
"call.accept": "Aceptar",
"call.decline": "Rechazar",
"call.end": "Colgar",
"call.camera": "Cámara",
"call.cameraOff": "Cámara apagada",
"call.peerCameraOff": "La cámara de la otra persona está apagada",
"call.flipCamera": "Cambiar de cámara",
"call.addVideo": "Añadir vídeo",
"call.video": "Vídeo",
"call.muted": "Silenciado",
"call.expand": "Ampliar",
"call.minimize": "Minimizar",
"call.quality": "Calidad de la conexión",
"call.qualityExcellent": "Excelente",
"call.videoPrefix": "Vídeo · ",
"call.voicePrefix": "Voz · ",
"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án un único código de seguridad antes de abrir el grupo.",
"group.invite": "Invitar",
"group.inviteMore": "Invitar a más miembros",
"group.invitePeople": "Invitar a {count} personas",
"group.invitation": "Invitación al grupo",
"group.addMembers": "Añadir miembros",
"group.roomFor": "Queda sitio para {remaining} más. Al entrar, todos compararán un código 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…",
"group.sasTitle": "Código de seguridad del grupo",
"group.sasEveryone": "Todos ven este código",
"group.sasCompare": "Compara el código del grupo con cada miembro para abrir el grupo.",
"group.sasReadAloud": "Lee estos dígitos en voz alta a ",
"group.sasWarning": "Si aunque sea un miembro lee un código distinto, hay alguien en medio. Cancela el grupo: no confirmes.",
"group.confirmFirst": "Confirma antes el código del grupo",
"group.codeSuffix": " · código {code}",
"group.exchangingNonces": "Intercambiando nonces…",
"group.waitingCommit": "Esperando el compromiso de todos los miembros…",
"group.waitingJoin": "Esperando a que se unan los demás miembros…",
"group.emptyChat": "Aquí todavía no hay nada. Cada mensaje va firmado por quien lo envía y viaja por el enlace cifrado propio de cada miembro.",
"group.noVerified": "Aún no hay chats verificados. Abre primero un chat individual y compara su código de seguridad: un grupo se construye con conexiones que ya has comprobado.",
"group.noMoreToAdd": "No hay más chats verificados que añadir. Abre un chat individual y compara su código de seguridad primero.",
"group.directLink": "Enlace directo entre pares",
"group.noDirectLink": "Aún no hay enlace directo: los mensajes pasan por otro miembro mientras se establece uno",
"group.relayNote": "Con algunos miembros todavía no hay enlace directo. Sus mensajes pasan por otro miembro, que ve que estáis hablando pero no puede leer más allá de la firma ni cambiar lo dicho. El grupo sigue intentando conectarlos directamente.",
"group.relayOnlyOff": "El modo solo relay está desactivado, así que cada miembro se conecta directamente contigo y conoce tu IP, incluidos los que haya invitado otra persona. Actívalo en los ajustes de red si aquí importa.",
"group.memberOffline": "{name} está sin conexión y no recibirá mensajes. Sigue siendo miembro: expulsarle vuelve a generar las claves del grupo.",
"group.joinNote": "Los demás miembros sabrán que estás en este grupo. No hay historial que recuperar: un grupo empieza vacío.",
"group.inviteSentNote": "El grupo sigue funcionando hasta que acepten. No hay historial que puedan recuperar: solo verán lo que se envíe a partir de ahora.",
"group.errNotCreated": "El grupo no se ha creado",
"group.errNobodyAccepted": "Nadie aceptó la invitación a tiempo.",
"group.errNothingSent": "No se envió ni se verificó nada. Cierra esto e inténtalo de nuevo cuando todos estén conectados.",
"group.errNotFormed": "No se ha podido formar el grupo.",
"group.errFull": "Este grupo está lleno.",
"group.errInviteFailed": "No se ha podido enviar la invitación: ese chat no está conectado.",
"group.errNoMemberList": "Quien creó el grupo nunca envió la lista de miembros.",
"group.errUnsignedList": "La lista de miembros no la firmó quien creó el grupo. No lo reintentes: avísale.",
"group.errNotOwner": "Alguien que no creó el grupo intentó 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…",
"status.notConnected": "Sin conexión",
"status.reconnecting": "Reconectando…",
"status.retrying": "Reintentando…",
"status.verifying": "Verificando…",
"status.peerDisconnected": "La otra persona se ha desconectado",
"sec.replayProtection": "Protección contra reenvío",
"sec.messageIntegrity": "Integridad de los mensajes (HMAC)",
"sec.forwardSecrecy": "Secreto perfecto hacia adelante",
"sec.metadataProtection": "Protección de metadatos",
"sec.trafficObfuscation": "Ofuscación del tráfico",
"sec.realTests": "Pruebas criptográficas reales",
"sec.simulatedData": "Datos simulados",
"sec.testPassed": "Prueba superada",
"sec.testFailed": "La prueba ha fallado o no está disponible",
"sec.verificationDone": "Verificación criptográfica real completada",
"sec.verificationInProgress": "Verificación de seguridad en curso…",
"sec.verificationWait": "Verificación de seguridad en curso…\nEspera a que termine la verificación criptográfica en tiempo real.",
"sec.verificationUnavailable": "La verificación de seguridad no está disponible",
"chat.placeholder": "Escribe un mensaje cifrado…",
"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ódigo (amplía el campo)",
"chat.codeHint": "Fragmento de código · se conserva el formato · ⌘↵ para enviar",
"chat.viewOnce": "Ver una vez",
"chat.viewOnceTitle": "Ver una vez: desaparece cuando la otra persona lo lee",
"chat.viewOncePrefix": "Ver una vez · ",
"chat.viewOnceTap": "Ver una vez · toca para mostrar",
"chat.viewedOnce": "Ya visto",
"chat.disappearing": "Mensaje efímero: se borra en ambos lados",
"chat.disappearAfter": "Desaparece tras",
"chat.visibleFor": "Visible durante",
"chat.timerPrefix": "Temporizador · ",
"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á 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…",
"chat.copied": "¡Copiado!",
"chat.collapse": "Contraer",
"chat.closeMenu": "Cerrar el menú",
"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 · solo se guarda en este dispositivo",
"chat.setStatus": "Elige tu estado",
"chat.yourStatusPrefix": "Tu estado: ",
"chat.meshHint": "Hasta 8 pares · malla P2P",
"chat.offline": "Sin conexión",
"chat.noNetwork": "Sin red · reconectando",
"chat.startVoiceCall": "Iniciar una llamada de voz cifrada",
"chat.startVideoCall": "Iniciar una videollamada cifrada",
"chat.verifyForCalls": "Verifica la sesión para poder llamar",
"chat.e2eeNote": "Cada mensaje se cifra de extremo a extremo en tu dispositivo antes de salir.",
"chat.peersOnly": "Se envía de extremo a extremo solo a los pares conectados: nunca se guarda en un servidor.",
"flow.invitationCreated": "Invitación segura creada",
"flow.invitationCreatedBang": "Invitación segura creada y cifrada.",
"flow.responseCreated": "Respuesta segura creada",
"flow.responseCreatedBang": "Respuesta segura creada.",
"flow.sendInvitation": "Envía el código de invitación a la otra persona por un canal seguro (llamada, SMS, etc.).",
"flow.sendResponse": "Envía el código de respuesta a quien inició el canal por un canal seguro, o deja que escanee el QR de abajo.",
"flow.sendEncryptedCode": "Enviar el código cifrado",
"flow.sendTheResponse": "Enviar la respuesta",
"flow.pasteOrWrite": "Pega o escribe el código…",
"flow.processingInvitation": "Procesando la invitación segura…",
"flow.processingResponse": "Procesando la respuesta segura…",
"flow.finalizing": "Ultimando la conexión segura…",
"flow.channelEstablished": "Canal seguro establecido",
"flow.channelReady": "El canal seguro está listo",
"flow.restoring": "Restableciendo la conexión…",
"flow.invitationCaptured": "Invitación capturada.",
"err.needInvitation": "Tienes que pegar el código de invitación de la otra persona.",
"err.needResponse": "Tienes que pegar el código de respuesta de la otra persona.",
"err.responseFormat": "Formato de respuesta no válido: revisa el código",
"err.responseNoKey": "Código de respuesta no válido: falta la clave criptográfica o está dañada. Revísalo e inténtalo de nuevo.",
"err.responseNoSignKey": "Código de respuesta no válido: falta la clave de verificación de firma. Revísalo e inténtalo de nuevo.",
"err.responseOutdated": "Los datos de la respuesta están caducados: usa una invitación nueva",
"err.setupError": "Error al establecer la conexión",
"err.notReady": "La conexión aún no está lista",
"err.securityBreach": "Se ha detectado una brecha de seguridad: conexión rechazada",
"err.securityValidation": "La validación de seguridad ha fallado: posible ataque",
"err.retiredQr": "Este QR usa un formato retirado con el que no se pudo transferir la invitación. 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ón.",
"err.inviteNotConnected": "No se ha podido enviar la invitación. Ese chat no está conectado ahora mismo.",
"err.inviteNotConnectedRetry": "No se ha podido enviar la invitación. Ese chat no está conectado ahora mismo: vuelve a abrirlo e inténtalo otra vez.",
"err.nobodyAccepted": "Nadie aceptó la invitación. El grupo no ha cambiado.",
"err.noAudio": "No se ha grabado audio: revisa el permiso del micrófono e inténtalo de nuevo.",
"err.voiceNeedsConnection": "El mensaje de voz necesita una conexión segura activa. Vuelve a conectar e inténtalo de nuevo.",
"err.voiceRestoring": "Restableciendo la conexión: prueba a enviar el mensaje de voz en un momento.",
"err.fileTooLarge": "El archivo es demasiado grande",
"sas.safetyNumber": "Número de seguridad",
"sas.incorrect": "Código incorrecto. Compruébalo con la otra persona e inténtalo de nuevo.",
"sas.noMatch": "Los códigos no coinciden",
"sas.makeSure": "Asegúrate de que los códigos coinciden exactamente.",
"sas.tooManyAttempts": "Demasiados intentos incorrectos. La sesión se ha reiniciado por seguridad.",
"sas.verificationFailed": "La verificación ha fallado",
"sas.verified": "Verificado · secreto perfecto hacia adelante",
"sas.runVerification": "Ejecutar la verificación de seguridad",
"sec.panelTitle": "Detalles de red y criptografía",
"sec.security": "Seguridad",
"sec.transport": "Transporte",
"sec.keyExchange": "Intercambio de claves",
"sec.allEnabled": "Todas las funciones de seguridad están activas por defecto",
"sec.realTimeNote": "Verificación en tiempo real con funciones criptográficas reales, sin datos simulados.",
"sec.simulatedWarning": "Aviso: puede que la conexión no esté del todo establecida; los valores podrían ser simulados.",
"dl.title": "Descargar SecureBit",
"dl.free": "Gratis · código abierto",
"dl.soon": "Las apps para iOS y Android y las extensiones para Chrome, Firefox y Opera llegarán pronto.",
"chatHdr.chat": "Chat",
"chatHdr.chats": "Chats",
"chatHdr.newChat": "+ Nuevo",
"chatHdr.secure": "Seguro",
"chatHdr.p2pSub": "P2P · cifrado de extremo a extremo",
"chatHdr.save": "Guardar",
"chatHdr.close": "Cerrar",
"chatHdr.expand": "Ampliar",
"chatHdr.you": "Tú",
"chatHdr.qrCode": "Código QR",
"chat.disconnected": "Desconectado",
"call.mute": "Silenciar",
"call.endShort": "Colgar",
"group.add": "Añadir",
"group.send": "Enviar",
"sec.pfsShort": "Secreto perfecto hacia adelante",
"sec.cipher": "Cifrado",
"chat.close": "Cerrar",
"file.needConnection": "La transferencia de archivos necesita una conexión abierta",
"presence.available": "Disponible",
"presence.away": "Ausente",
"presence.busy": "Ocupado",
"presence.offline": "Sin conexión",
"presence.invisible": "Invisible",
"presence.availableDesc": "En línea y disponible",
"presence.awayDesc": "Inactivo · se ha ausentado",
"presence.busyDesc": "No molestar",
"presence.invisibleDesc": "Aparecer sin conexión para los demás",
"presence.online": "En línea",
"conn.p2p": "P2P · conectado",
"conn.verifying": "Verificando…",
"conn.connecting": "Conectando…",
"conn.reconnecting": "Reconectando…",
"conn.peerDisconnected": "La otra persona se ha desconectado",
"conn.disconnected": "Desconectado",
"chat.defaultLabel": "Chat",
"groupPhase.forming": "Formándose…",
"groupPhase.commitments": "Intercambiando compromisos…",
"groupPhase.revealing": "Revelando…",
"groupPhase.compare": "Compara el código del grupo",
"groupPhase.ready": "El grupo está listo",
"groupPhase.failed": "El grupo ha fallado",
"call.qualityGood": "Buena",
"call.qualityFair": "Aceptable",
"call.qualityWeak": "Débil",
"msg.code": "Código",
"msg.timer": "Temporizador",
"msg.voice": "Voz",
"msg.play": "Reproducir",
"msg.sent": "Enviado",
"msg.read": "Leído",
"report.title": "Verificación 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ón contra reenvío",
"secTest.verifyDTLSFingerprint": "Huella DTLS",
"secTest.verifySASVerification": "Verificación SAS",
"secTest.verifyMetadataProtection": "Protección de metadatos",
"secTest.verifyTrafficObfuscation": "Ofuscación del tráfico",
"secTest.verifyPacketPadding": "Relleno de paquetes",
"secTest.verifyNestedEncryption": "Cifrado anidado",
"secTest.verifyNonExtractableKeys": "Claves no extraíbles",
"secTest.verifyRateLimiting": "Límite de frecuencia",
"secTest.verifyMutualAuth": "Autenticación mutua",
"secTest.verifyAuthProof": "Prueba de autenticación",
"secTest.verifyEnhancedValidation": "Validación reforzada",
"secTest.verifyAdvancedFeatures": "Funciones avanzadas",
"secTest.verifySignature": "Comprobación de firma",
"secDetail.Security system initializing...": "El sistema de seguridad se está iniciando…",
"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ón 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á disponible o no es válida",
"secDetail.Rate limiter did not block a message over the limit": "El limitador no bloqueó un mensaje por encima del límite",
"secDetail.Rate limiter is not available": "El limitador de frecuencia no está disponible",
"secDetail.Replay protection is working correctly": "La protección contra reenvío funciona correctamente",
"secDetail.Replay protection not enabled": "La protección contra reenvío no está activada",
"secDetail.SAS code not available": "El código SAS no está disponible",
"secDetail.SAS verification code is valid and available": "El código de verificación SAS es válido y está disponible",
"secDetail.Traffic obfuscation is working correctly": "La ofuscación del tráfico funciona correctamente",
"secDetail.Traffic obfuscation not enabled": "La ofuscación del tráfico no está activada",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "No hay par de claves ECDH efímeras no extraíbles para esta sesión",
"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ón: las claves son efímeras por sesión, pero el Double Ratchet no está activo en esta conexión (la otra parte usa una versión antigua), así que una clave comprometida expone toda la conversación.",
"msg.pause": "Pausa",
"msg.failed": "Ha fallado",
"groupErr.timeout": "Un miembro dejó de responder antes de que el código estuviera listo.",
"groupErr.keyMismatch": "La clave de un miembro no coincidía con la identidad declarada.",
"groupErr.revealMismatch": "El valor revelado por un miembro no coincidía con su compromiso.",
"groupErr.commitChanged": "Un miembro cambió su compromiso a mitad del proceso.",
"groupErr.missingKey": "Se listó a un miembro cuya clave nunca llegó.",
"groupErr.outsider": "Llegó un fragmento de alguien ajeno al grupo.",
"groupErr.limit": "Un grupo admite como máximo ocho miembros.",
"groupErr.tooLarge": "Un mensaje era demasiado grande para enviarlo al grupo.",
"fileType.text": "Texto plano",
"fileType.images": "Imágenes",
"fileType.archives": "Archivos comprimidos",
"fileType.voice": "Mensajes de voz",
"fileType.unsupported": "No admitido",
"qrScan.title": "Escanear código QR",
"qrScan.auto": "Modo automático",
"qrScan.reset": "Reiniciar",
"qrScan.autoScroll": "Desplazamiento automático activado",
"qrScan.starting": "Iniciando la cámara…",
"qrScan.point": "Apunta la cámara al código QR",
"qrScan.tapFocus": "Toca la pantalla para enfocar",
"qrScan.focusing": "Enfocando…",
"iceErr.notArray": "La lista de servidores debe ser un array",
"iceErr.invalidJson": "JSON no válido",
"iceErr.tooMany": "Demasiados servidores (máximo {max})",
"iceErr.invalidEntry": "{label}: entrada no válida",
"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á vacía",
"iceUrl.tooLong": "La URL es demasiado larga",
"iceUrl.badChars": "La URL contiene caracteres no válidos",
"iceUrl.badScheme": "La URL debe empezar por stun:, stuns:, turn: o turns:",
"iceUrl.badQuery": "La URL tiene una consulta no válida",
"iceUrl.noHost": "A la URL le falta el host",
"iceUrl.badHost": "La URL tiene un host o puerto no válido",
"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ÁXIMO",
"secLevel.INITIALIZING": "INICIANDO",
"secLevel.ERROR": "ERROR",
"secLevel.UNKNOWN": "DESCONOCIDO",
"status.error": "Error",
"offline.disconnect": "Desconectar",
"offline.learnMore": "Más información",
"pwa.installApp": "Instalar la app",
"chat.onWeb": "Estás en la versión web",
"groupCall.startVoice": "Iniciar llamada de voz grupal",
"groupCall.startVideo": "Iniciar videollamada grupal",
"groupCall.join": "Unirse",
"groupCall.dismiss": "Ahora no",
"groupCall.leave": "Salir de la llamada",
"groupCall.you": "Tú",
"groupCall.connecting": "Conectando…",
"groupCall.waitingLink": "Esperando un enlace directo…",
"groupCall.legFailed": "No se pudo conectar",
"groupCall.startedVoice": "{name} inició una llamada de voz",
"groupCall.startedVideo": "{name} inició una videollamada",
"groupCall.inCall": "{count} en la llamada",
"groupCall.err.permission_denied": "La llamada no pudo iniciarse - el acceso al micrófono y a la cámara está bloqueado. Permítelo para este sitio e inténtalo de nuevo.",
"groupCall.err.device_not_found": "La llamada no pudo iniciarse - no se encontró ningún micrófono en este dispositivo.",
"groupCall.err.device_busy": "La llamada no pudo iniciarse - otra aplicación está usando tu micrófono. Ciérrala e inténtalo de nuevo.",
"groupCall.err.media_failed": "La llamada no pudo iniciarse - no se pudo abrir el micrófono.",
"groupCall.err.call_in_progress": "Ya hay una llamada en este grupo. Únete en lugar de iniciar otra.",
"groupCall.err.not_ready": "Confirma el código del grupo antes de llamar.",
"groupCall.speaking": "{name} está hablando",
"groupCall.pin": "Ver a {name} en grande",
"groupCall.unpin": "Volver a todos",
"groupCall.showEveryone": "Todos",
"msg.after5s": "5 s tras leerse",
"msg.after15s": "15 s tras leerse",
"msg.after30s": "30 s tras leerse",
"msg.after1m": "1 min tras leerse",
"msg.sec30": "30 segundos",
"msg.min5": "5 minutos",
"msg.hour1": "1 hora",
"desktop.shareDesc": "Envía el código a tu par. Es de un solo uso y caduca pronto.",
"desktop.invitationCreated": "Invitación segura creada: envíasela a tu par.",
"desktop.joinDesc": "Pega el código de invitación de tu par para construir tu respuesta segura.",
"desktop.offerTag": "invitación · copiar texto",
"desktop.answerTag": "respuesta · copiar texto",
"desktop.offerPlaceholder": "El código de invitación aparecerá aquí…",
"desktop.answerPlaceholder": "El código de respuesta aparecerá aquí…",
"desktop.backToChats": "Volver a los chats",
"desktop.sendFeedback": "Enviar comentarios",
"desktop.callsNeedVerified": "Las llamadas requieren un canal seguro verificado.",
"desktop.noOpenChannel": "No hay ningún canal seguro abierto.",
"desktop.chatCarriesCall": "Este chat está transportando una llamada de grupo. Sal de la llamada de grupo antes de iniciar una llamada 1:1.",
"desktop.err.permission_denied": "La llamada no pudo iniciarse: el acceso al micrófono y la cámara está bloqueado. Permítelo en los ajustes del sistema e inténtalo de nuevo.",
"desktop.language": "Idioma",
"desktop.languageHint": "Se aplica al instante. Los mensajes ya enviados conservan sus palabras.",
"desktop.compareCode": "Compara el código de verificación con tu par y confírmalo si coincide.",
"desktop.verifyBeforeFiles": "Completa la verificación antes de enviar archivos.",
"desktop.verifyBeforeSending": "Completa la verificación antes de enviar mensajes.",
"desktop.disconnectedByBackend": "Conexión cerrada de forma segura.",
"desktop.restoreFailed": "No se pudo restablecer la conexión. Cerrando este chat.",
"desktop.channelNotReady": "El canal de datos aún no está disponible. Espera a que se establezca la conexión.",
"desktop.enterCode": "Introduce el código de verificación para confirmar.",
"desktop.noOffer": "No se encontró ninguna invitación. Crea una primero.",
"desktop.notInitiator": "No creaste esta conexión, así que no hay ninguna respuesta que aplicar.",
"desktop.decryptFailed": "No se pudo descifrar un mensaje y se descartó.",
"desktop.badMessageFormat": "Llegó una trama con formato incorrecto y se descartó.",
"desktop.notSentNotReady": "Mensaje no enviado: el canal seguro no está listo. Espera a que termine la verificación o vuelve a conectarte.",
"desktop.micDenied": "Se denegó el acceso al micrófono.",
"desktop.noChannelWait": "No hay canal seguro abierto: espera a que se establezca la conexión.",
"desktop.sasFailed": "La verificación falló. Puede haber alguien en medio, así que se abortó la conexión.",
"desktop.sasOk": "Verificación correcta. Este canal está autenticado de extremo a extremo.",
"desktop.iceForgotten": "Servidores guardados olvidados. Se usarán servidores ICE públicos.",
"desktop.icePublic": "Se usarán servidores ICE públicos.",
"desktop.verificationInProgress": "La verificación de seguridad sigue en curso. Espera a que termine.",
"desktop.fileGone": "Este archivo ya no está disponible para descargar.",
"desktop.codeMismatch": "Los códigos de verificación no coinciden. Desconectando por seguridad.",
"desktop.noLocalCode": "Verificación fallida: no hay código derivado localmente con el que comparar. Desconectando por seguridad.",
"desktop.protocolViolation": "El par afirmó que el código estaba confirmado antes de que tú lo confirmaras. Desconectando por seguridad.",
"desktop.verificationRejected": "Verificación rechazada. La conexión se abortó por seguridad.",
"secLevel.HIGH": "ALTO",
"secLevel.MEDIUM": "MEDIO",
"secLevel.LOW": "BAJO",
"desktop.rerun": "Volver a ejecutar",
"desktop.ice.customDesc": "Hasta {max} servidores, una URL por línea o JSON.",
"desktop.ice.persistDesc": "Guardado localmente en este dispositivo. Déjalo desactivado para usarlo solo en esta sesión.",
"desktop.group.leaveNote": "Se avisa a los demás miembros de que te has ido. Después no queda nada de este grupo en este dispositivo: ningún servidor guarda una copia desde la que volver, así que necesitarías una invitación nueva.",
"desktop.sec.ecdsaOk": "Firma del paquete de claves del par verificada durante el saludo (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "No hay un saludo completado",
"desktop.sec.ecdhOk": "Claves de sesión derivadas de un intercambio ECDH P-384 efímero mediante HKDF-SHA-256",
"desktop.sec.ecdhNone": "No se derivaron claves de sesión",
"desktop.sec.encryptionOk": "Cifrado y descifrado AES-GCM verificados en el núcleo",
"desktop.sec.encryptionNa": "No se pudo ejecutar la autocomprobación de AES-GCM",
"desktop.sec.integrityOk": "Integridad de los mensajes verificada (autenticación AES-GCM)",
"desktop.sec.integrityNa": "No se pudo ejecutar la autocomprobación de integridad",
"desktop.sec.pfsOk": "Double Ratchet activo: cada mensaje tiene su propia clave",
"desktop.sec.pfsNa": "No medido",
"desktop.sec.replayOk": "Las claves de mensaje del ratchet se destruyen al usarse, así que una trama capturada no puede reproducirse",
"desktop.sec.replayNa": "No medido",
"desktop.sec.dtlsPinned": "Huella DTLS del par fijada: {fp}",
"desktop.sec.dtlsNone": "No hay huella DTLS remota disponible",
"desktop.sec.sasBoth": "Ambos pares confirmaron el código de seguridad fuera de banda",
"desktop.sec.sasIncomplete": "El código de seguridad no ha sido confirmado por ambos pares",
"desktop.sec.metadataOk": "Se derivó una clave de metadatos dedicada (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "Sin clave de metadatos",
"desktop.sec.coverOn": "Tráfico de cobertura activo: tramas falsas aleatorias (32-128 B cada 15-30 s) en el canal con ratchet",
"desktop.sec.coverOff": "El generador de tráfico de cobertura no está en marcha",
"desktop.sec.coverUnsupported": "El tráfico de cobertura requiere una sesión Double Ratchet (el par usa una versión anterior)",
"desktop.tagline": "Libertad de extremo a extremo",
"desktop.callsNotHere": "Las llamadas aún no están disponibles en esta versión. Los mensajes, los archivos y los chats grupales funcionan con normalidad."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["es"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "زبان",
"language.suggest.text": "این صفحه به فارسی هم در دسترس است.",
"language.suggest.cta": "خواندن به فارسی",
"language.suggest.dismiss": "بستن",
"community.title": "به آیندهٔ حریم خصوصی بپیوندید",
"community.description": "SecureBit به‌لطف جامعه‌اش رشد می‌کند. ایده‌ها و بازخوردهای شما آیندهٔ ارتباط امن را شکل می‌دهد - ساخته‌شده در فضای باز، با اعتبارسنجی کامل ASN.1 از یک سر تا سر دیگر.",
"community.github": "مخزن GitHub",
"community.feedback": "بازخورد",
"unique.eyebrow": "آنچه ما را متمایز می‌کند",
"unique.heading": "چرا SecureBit بی‌همتاست",
"unique.s1.titleTop": "هستهٔ رمزنگاری",
"unique.s1.titleBottom": "چندلایه",
"unique.s1.collapsed": "هستهٔ رمزنگاری",
"unique.s1.desc": "تبادل کلید ECDH P-384، بارهای AES-256-GCM، امضاهای ECDSA و اعتبارسنجی کامل ASN.1 - همه در یک خط لولهٔ مقاوم.",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "همتا‌به‌همتای ناب",
"unique.s2.titleBottom": "روی WebRTC",
"unique.s2.collapsed": "WebRTC همتا‌به‌همتای ناب",
"unique.s2.desc": "پیام‌ها مستقیم میان دستگاه‌ها روی WebRTC می‌روند. هیچ بازپخشی داده‌های شما را نگه نمی‌دارد - سرور فقط کمک می‌کند دو همتا یکدیگر را بیابند.",
"unique.s2.tags": [
"DTLS 1.3",
"بدون بازپخش"
],
"unique.s3.titleTop": "رازداری پیشرو",
"unique.s3.titleBottom": "کامل",
"unique.s3.collapsed": "رازداری پیشرو",
"unique.s3.desc": "کلیدهای نشست پیوسته می‌چرخند و پس از استفاده دور ریخته می‌شوند، پس یک کلید لو‌رفته هرگز گفتگوهای گذشته را باز نمی‌کند.",
"unique.s3.tags": [
"کلیدهای زودگذر",
"چرخش خودکار"
],
"unique.s4.titleTop": "پنهان‌سازی",
"unique.s4.titleBottom": "ترافیک",
"unique.s4.collapsed": "پنهان‌سازی ترافیک",
"unique.s4.desc": "اندازه و زمان‌بندی بسته‌ها لایی‌گذاری و تصادفی می‌شود و الگوهای فراداده را از دید هرکس که خط را می‌پاید پنهان می‌کند.",
"unique.s4.tags": [
"لایی‌گذاری بسته",
"لرزش زمانی"
],
"unique.s5.titleTop": "صفر",
"unique.s5.titleBottom": "جمع‌آوری داده",
"unique.s5.collapsed": "صفر جمع‌آوری داده",
"unique.s5.desc": "بدون حساب، بدون گزارش، بدون ذخیرهٔ پیام. چیزی روی سرور نیست که نشت کند، احضار شود یا فروخته شود.",
"unique.s5.tags": [
"بدون حساب",
"بدون گزارش"
],
"partners.eyebrow": "شرکا و زیست‌بوم",
"partners.heading": "مورد اعتماد شرکای ما",
"partners.aegis.desc": "شریک سرمایه‌ای که ارتباطات مالی محرمانه را در سراسر سبد خود ایمن می‌کند.",
"partners.aegis.role": "پشتیبان راهبردی",
"partners.furilabs.desc": "گوشی‌های لینوکسی با اولویت حریم خصوصی که SecureBit را به‌عنوان کانال امن پیش‌فرض عرضه می‌کنند.",
"partners.furilabs.role": "شریک فناوری",
"partners.inviteTitle": "شریک شوید",
"partners.inviteDesc": "سخت‌افزار یا زیرساخت حریم خصوصی می‌سازید؟ بیایید SecureBit را یکپارچه کنیم.",
"partners.inviteCta": "گفتگو را آغاز کنید",
"roadmap.eyebrow": "نقشهٔ راه توسعه",
"roadmap.heading": "تکامل SecureBit",
"roadmap.subheading": "از نخستین نمونهٔ اولیه تا شبکه‌ای غیرمتمرکز و مقاوم در برابر کوانتوم - با اعتبارسنجی کامل ASN.1 در هر لایه.",
"roadmap.progress": "{shipped} از {total} نقطهٔ عطف انجام شد",
"roadmap.upcoming": "{upcoming} در راه است",
"roadmap.keyFeatures": "ویژگی‌های کلیدی",
"roadmap.status.released": "منتشر شد",
"roadmap.status.current": "کنونی",
"roadmap.status.dev": "در دست توسعه",
"roadmap.status.planned": "برنامه‌ریزی‌شده",
"roadmap.status.research": "پژوهش",
"hero.headlineTop": "خطی مستقیم",
"hero.headlineBottom": "که فقط شما دو نفر می‌خوانید.",
"hero.subheading": "کلیدها روی دستگاه شما ساخته و همتا‌به‌همتا مبادله می‌شوند. بدون حساب، بدون سروری که پیام‌هایتان را نگه دارد.",
"hero.diagramAlt": "یک خط رمزنگاری‌شدهٔ مستقیم به یک همتا، در حالی که دو همتای دیگر به شبکه می‌پیوندند",
"intro.createTitle": "کانال تازه‌ای بسازید",
"intro.createDesc": "دستگاه شما کلیدها و یک دعوت‌نامهٔ یک‌بارمصرف می‌سازد. هیچ‌چیز به سرور نمی‌رسد.",
"intro.createCta": "ساخت کلید و دعوت‌نامه",
"intro.joinTitle": "به کانالی بپیوندید",
"intro.scanTitle": "‏QR را با دوربین بخوانید",
"intro.scanSubtitle": "سریع‌ترین راه - به صفحهٔ همتایتان بگیرید",
"intro.orPasteCode": "یا کد را بچسبانید",
"intro.pastePlaceholder": "کد دعوت را اینجا بچسبانید…",
"intro.connect": "اتصال",
"intro.connecting": "در حال پردازش…",
"roadmap.r1.title": "آغاز توسعه",
"roadmap.r1.sub": "ایده، نمونهٔ اولیه و برپایی زیرساخت",
"roadmap.r1.date": "اوایل ۲۰۲۵",
"roadmap.r1.features": [
"شکل‌گیری ایده و نیازمندی‌ها",
"گزینش پشته: WebRTC، P2P، رمزنگاری",
"نخستین نمونه‌های پیام‌رسانی",
"ساخت مخزن و یکپارچه‌سازی پیوسته",
"معماری پایهٔ رمزنگاری",
"طراحی تجربه و رابط کاربری"
],
"roadmap.r2.title": "انتشار آلفا",
"roadmap.r2.sub": "نخستین آلفای عمومی: گفتگوی پایه و تبادل کلید",
"roadmap.r2.date": "بهار ۲۰۲۵",
"roadmap.r2.features": [
"پیام‌رسانی پایهٔ همتا‌به‌همتا روی WebRTC",
"رمزنگاری سادهٔ سرتاسری (طرح نمایشی)",
"سیگنالینگ پایدار و اتصال دوباره",
"رابط کمینه برای آزمون",
"گردآوری بازخورد از آزمایندگان نخستین"
],
"roadmap.r3.title": "سخت‌سازی امنیتی",
"roadmap.r3.sub": "تقویت امنیت و انتشار شاخهٔ پایدار",
"roadmap.r3.date": "تابستان ۲۰۲۵",
"roadmap.r3.features": [
"پیاده‌سازی ECDH/ECDSA در محیط عملیاتی",
"رازداری پیشرو کامل و چرخش کلید",
"بهبود بررسی‌های احراز هویت",
"رمزنگاری فایل و انتقال بارهای بزرگ",
"ممیزی فرایندهای پایهٔ رمزنگاری"
],
"roadmap.r4.title": "مقیاس‌پذیری و پایداری",
"roadmap.r4.sub": "گسترش شبکه و بهبود پایداری",
"roadmap.r4.date": "پاییز ۲۰۲۵",
"roadmap.r4.features": [
"بهینه‌سازی اتصال‌های P2P و گذر از NAT",
"سازوکارهای اتصال دوباره و صف پیام",
"کاهش مصرف باتری روی موبایل",
"پشتیبانی از همگام‌سازی چنددستگاهی",
"ابزارهای پایش و ثبت برای توسعه‌دهندگان"
],
"roadmap.r5.title": "انتشار با اولویت حریم خصوصی",
"roadmap.r5.sub": "تمرکز بر حریم خصوصی: کمینه‌سازی فراداده",
"roadmap.r5.date": "زمستان ۲۰۲۵",
"roadmap.r5.features": [
"حفاظت از فراداده و کاهش اثر انگشت",
"آزمایش مسیریابی پیازی و DHT",
"گزینه‌هایی برای اتصال‌های ناشناس",
"آماده‌سازی برای ممیزی باز کد",
"بهبود فرایندهای تأیید کاربر"
],
"roadmap.r6.title": "نسخهٔ امنیت پیشرفته",
"roadmap.r6.sub": "رمزنگاری ۱۸ لایه در سطح نظامی با اعتبارسنجی کامل ASN.1",
"roadmap.r6.date": "اواخر ۲۰۲۵",
"roadmap.r6.features": [
"امنیت سه‌لایه: ECDH، DTLS و SAS",
"رمزنگاری ECDH P-384 به همراه AES-GCM ۲۵۶ بیتی",
"تأیید اثر انگشت DTLS",
"تأیید SAS (رشتهٔ کوتاه احراز هویت)",
"رازداری پیشرو کامل با چرخش کلید",
"پیشگیری پیشرفته از حملهٔ مرد میانی",
"اعتبارسنجی کامل ASN.1 DER",
"تأیید OID و نقاط منحنی",
"اعتبارسنجی ساختار SPKI",
"معماری WebRTC همتا‌به‌همتا",
"حفاظت از فراداده",
"کد ۱۰۰٪ متن‌باز"
],
"roadmap.r7.title": "نسخهٔ رومیزی",
"roadmap.r7.sub": "برنامه‌های بومی برای ویندوز، مک‌اواس و لینوکس",
"roadmap.r7.date": "اوایل ۲۰۲۶",
"roadmap.r7.features": [
"برنامهٔ ویندوز (Tauri v2)",
"برنامهٔ macOS (Tauri v2)",
"پشتیبانی AppImage لینوکس (Tauri v2)",
"اعلان‌های بی‌درنگ",
"اتصال دوبارهٔ خودکار",
"همگام‌سازی میان‌دستگاهی",
"بهبود تجربه و رابط کاربری",
"پشتیبانی از فایل تا ۱۰۰ مگابایت"
],
"roadmap.r8.title": "صدا و تماس امن",
"roadmap.r8.sub": "پیام صوتی و تماس صوتی و تصویری رمزنگاری‌شده",
"roadmap.r8.date": "اوایل ۲۰۲۶",
"roadmap.r8.features": [
"پیام‌های صوتی با رمزنگاری سرتاسری",
"تماس صوتی رمزنگاری‌شدهٔ دونفره (WebRTC)",
"تماس تصویری رمزنگاری‌شدهٔ دونفره (WebRTC)",
"رازداری پیشرو کامل برای رسانهٔ زنده",
"جریان‌های رسانه‌ای محافظت‌شده با SRTP/DTLS",
"تأیید SAS در حین تماس",
"اعلان تماس و اتصال دوبارهٔ خودکار",
"رسانهٔ همتا‌به‌همتا با تأخیر کم"
],
"roadmap.r9.title": "ارتباط گروهی",
"roadmap.r9.sub": "گفتگوی گروهی با حفظ حریم خصوصی",
"roadmap.r9.date": "هم‌اکنون",
"roadmap.r9.features": [
"گفتگوی گروهی همتا‌به‌همتا تا ۸ شرکت‌کننده",
"تحویل شبکه‌ای با بازپخش امضاشده به‌عنوان جایگزین",
"یک کد ایمنی گروه که همه مقایسه می‌کنند",
"آیین تعهد‌سپس‌افشا در برابر حدس زدن کد",
"کلیدهای هویت جداگانه برای هر گروه، زودگذر به‌طراحی",
"عضویت امضاشده با ترتیب دوره‌ای",
"پیام‌های امضاشده، پس رونوشت دوپاره اثبات‌پذیر است",
"بدون سرور، بدون کلید گروهی مشترک، بدون پیشینه"
],
"roadmap.r10.title": "نسخهٔ موبایل",
"roadmap.r10.sub": "برنامه‌های بومی برای iOS و اندروید",
"roadmap.r10.date": "سه‌ماههٔ دوم ۲۰۲۷",
"roadmap.r10.features": [
"برنامهٔ بومی iOS (Swift/SwiftUI)",
"برنامهٔ بومی اندروید (Kotlin/Jetpack Compose)",
"پشتیبانی PWA برای مرورگرهای موبایل",
"اعلان‌های فوری بی‌درنگ",
"بهینه‌سازی باتری",
"رابط بهینه‌شده برای موبایل",
"صف پیام برون‌خط",
"احراز هویت زیست‌سنجی"
],
"roadmap.r11.title": "نسخهٔ مقاوم در برابر کوانتوم",
"roadmap.r11.sub": "حفاظت در برابر رایانه‌های کوانتومی",
"roadmap.r11.date": "سه‌ماههٔ چهارم ۲۰۲۷",
"roadmap.r11.features": [
"رمزنگاری پساکوانتومی CRYSTALS-Kyber",
"امضای دیجیتال SPHINCS+",
"طرح ترکیبی: کلاسیک + پساکوانتومی",
"تبادل کلید امن در برابر کوانتوم",
"الگوریتم‌های درهم‌سازی به‌روز",
"کوچ نشست‌های موجود",
"سازگاری با نسخهٔ ۵.x",
"پروتکل‌های مقاوم در برابر کوانتوم"
],
"roadmap.r12.title": "شبکهٔ غیرمتمرکز",
"roadmap.r12.sub": "شبکهٔ کاملاً غیرمتمرکز",
"roadmap.r12.date": "۲۰۲۸",
"roadmap.r12.features": [
"شبکهٔ مِش گره‌ها",
"‏DHT برای یافتن همتا",
"مسیریابی پیازی درون‌ساخت",
"اقتصاد توکن و انگیزه برای گره‌ها",
"راهبری از راه DAO",
"هم‌کنش‌پذیری با شبکه‌های دیگر",
"سازگاری چندسکویی",
"شبکهٔ خودترمیم"
],
"roadmap.r13.title": "دستیار حریم خصوصی هوش مصنوعی",
"roadmap.r13.sub": "هوش مصنوعی برای حریم خصوصی و امنیت",
"roadmap.r13.date": "۲۰۲۸ به بعد",
"roadmap.r13.features": [
"تحلیل محلی تهدید با هوش مصنوعی",
"تشخیص خودکار حملهٔ مرد میانی",
"رمزنگاری سازگارشونده",
"توصیه‌های امنیتی شخصی‌سازی‌شده",
"یادگیری ماشین با دانش صفر",
"دستیار هوش مصنوعی خصوصی",
"امنیت پیش‌بینانه",
"حفاظت خودگردان در برابر حمله"
],
"handshake.step1": "ساخت جفت کلید ECDH P-384",
"handshake.step2": "استخراج کد تأیید",
"handshake.step3": "تثبیت رازداری پیشرو کامل",
"handshake.securingTitle": "در حال ایمن‌سازی کانال شما",
"handshake.answerTitle": "در حال ساخت پاسخ شما",
"handshake.securingDesc": "کلیدهایی می‌سازیم که در برابر دستکاری تاب بیاورند.",
"handshake.shareTitle": "دعوت‌نامه‌تان را به اشتراک بگذارید",
"handshake.sendAnswerTitle": "پاسخ خود را برگردانید",
"handshake.shareDesc": "‏QR را نشان دهید یا کد را برای همتایتان بفرستید. یک‌بارمصرف است و به‌زودی منقضی می‌شود.",
"handshake.sendAnswerDesc": "این پاسخ را به سازندهٔ کانال بدهید تا دست‌دادن را کامل کند.",
"handshake.establish": "برقراری اتصال",
"handshake.thenReceive": "سپس پاسخی را که همتایتان برمی‌گرداند دریافت کنید",
"handshake.pasteAnswerPlaceholder": "کد پاسخ همتا را بچسبانید…",
"handshake.answerSentNote": "این پاسخ را برای سازنده بفرستید و منتظر بمانید - گفتگو به‌محض اتصال او باز می‌شود.",
"handshake.qrHint": "این را باز نگه دارید تا همتایتان کد را بگیرد.",
"handshake.qrHintFrames": "دست‌دادن میان {frames} فریم پخش شده است - این را باز نگه دارید تا همتایتان همهٔ آن‌ها را بگیرد.",
"verify.title": "تأیید امنیتی",
"verify.desc": "این کد ایمنی را از راه کانالی جداگانه (تماس صوتی / حضوری) با همتایتان مقایسه کنید، سپس آن را بنویسید تا گفتگو باز شود.",
"verify.enterLabel": "کد تأییدشده را وارد کنید",
"verify.placeholder": "کد را اینجا بنویسید",
"verify.confirm": "تأیید کد",
"verify.confirmed": "تأیید شد",
"verify.mismatch": "هم‌خوان نیستند",
"verify.yours": "تأیید شما",
"verify.peer": "تأیید همتا",
"verify.pending": "در انتظار",
"verify.waiting": "در انتظار کد…",
"verify.verified": "کانال تأیید شد",
"verify.bothConfirmed": "هر دو طرف تأیید کردند. گفتگوی امن در حال باز شدن…",
"pwa.bannerTitle": "SecureBit.chat را نصب کنید",
"pwa.bannerDesc": "تجربهٔ برنامهٔ بومی با امنیت بیشتر",
"pwa.install": "نصب",
"pwa.dismiss": "بستن",
"pwa.close": "بستن",
"pwa.iosTitle": "نصب روی iOS",
"pwa.iosStep1": "دکمهٔ هم‌رسانی را بزنید",
"pwa.iosStep1Hint": "معمولاً پایین سافاری",
"pwa.iosStep2": "«افزودن به صفحهٔ اصلی» را پیدا کنید",
"pwa.iosStep2Hint": "در منوی هم‌رسانی پایین بروید",
"pwa.iosStep3": "«افزودن» را بزنید",
"pwa.iosStep3Hint": "برای نصب SecureBit.chat تأیید کنید",
"pwa.genericTitle": "نصب SecureBit",
"pwa.genericDesc": "هر مرورگر روش نصب خودش را دارد. گام‌هایی را برگزینید که با مرورگر شما می‌خواند.",
"pwa.gotIt": "متوجه شدم",
"pwa.installedTitle": "برنامه نصب شد!",
"pwa.installedIos": "برنامهٔ iOS نصب شد! از صفحهٔ اصلی بازش کنید.",
"pwa.installedGeneric": "SecureBit.chat اکنون روی دستگاه شماست",
"pwa.anytimeTitle": "هر وقت خواستید نصب کنید",
"pwa.anytimeDesc": "هنوز می‌توانید SecureBit.chat را از منوی مرورگرتان نصب کنید تا بهترین تجربه را داشته باشید.",
"pwa.ok": "باشه",
"step.open": "گام ۱ · گشودن کانال",
"step.exchange": "گام ۲ · تبادل",
"step.verification": "گام ۳ · تأیید",
"action.create": "ساخت",
"action.join": "پیوستن",
"action.back": "بازگشت",
"action.copy": "رونوشت",
"action.copied": "رونوشت شد",
"action.scan": "خواندن",
"action.downloadDesktop": "دریافت برنامهٔ رومیزی",
"action.advancedSettings": "تنظیمات پیشرفته",
"cred.offerTag": "پیشنهاد · یا متن را رونوشت کنید",
"cred.answerTag": "پاسخ · یا متن را رونوشت کنید",
"cred.reveal": "برای نمایش کلیک کنید - این کد را خصوصی نگه دارید",
"qr.title": "خواندن کد QR",
"qr.subtitle": "دوربین را به QR آن‌ها بگیرید",
"qr.scanning": "در حال خواندن…",
"qr.hint": "ثابت نگه دارید تا همهٔ بخش‌ها گرفته شود. دسترسی به دوربین محلی است - چیزی بارگذاری نمی‌شود.",
"mesh.you": "شما",
"mesh.peer": "همتا · نشست ۱",
"mesh.joined2": "mara پیوست · +۲",
"mesh.joined3": "tobi پیوست · +۳",
"ice.title": "تنظیمات شبکه",
"ice.subtitle": "به‌صورت محلی تنظیم می‌شود - هرگز با همتای شما به اشتراک گذاشته نمی‌شود",
"ice.intro": "SecureBit به‌طور پیش‌فرض از سرورهای عمومی STUN برای مذاکرهٔ پیوند همتا‌به‌همتا بهره می‌برد. اگر خودتان میزبانی می‌کنید، آن را به STUN/TURN خودتان بسپارید.",
"ice.publicTitle": "سرورهای عمومی (پیش‌فرض)",
"ice.publicDesc": "بدون پیکربندی. برای بیشتر کاربران مناسب است.",
"ice.customTitle": "سرورهای STUN/TURN خودم",
"ice.customDesc": "تا {max} سرور.",
"ice.turnNote": "یک بازپخش TURN نشانی IP هر دو همتا و زمان‌بندی ترافیک را می‌بیند - اما هرگز محتوای پیام‌ها را، که سرتاسری رمزنگاری‌شده می‌مانند. ترجیح با ",
"ice.turnNoteTls": " (TLS) است.",
"ice.test": "آزمودن سرورها",
"ice.testing": "در حال آزمودن…",
"ice.relayTitle": "حالت فقط بازپخش",
"ice.relayBadge": "بیشترین حریم خصوصی",
"ice.relayDesc": "همهٔ ترافیک را از راه TURN می‌فرستد تا نشانی IP شما هرگز به همتا فاش نشود. نیازمند سرور TURN است.",
"ice.relayWarning": "حالت فقط بازپخش روشن است اما هیچ سرور TURN تنظیم نشده. اتصال نخواهد توانست آغاز شود.",
"ice.persist": "روی این دستگاه ذخیره کن",
"ice.persistDesc": "رمزنگاری‌شده در همین مرورگر ذخیره می‌شود. خاموش بگذارید تا فقط در همین نشست به‌کار رود.",
"ice.forget": "ذخیره‌شده را فراموش کن",
"ice.cancel": "انصراف",
"ice.apply": "اعمال",
"ice.errUnavailable": "WebRTC در این مرورگر در دسترس نیست",
"ice.errInvalid": "پیکربندی سرور نامعتبر است",
"update.title": "به‌روزرسانی موجود است",
"update.desc": "نسخهٔ تازه‌تری از SecureBit یافت شد.",
"update.currentVersion": "نسخهٔ کنونی",
"update.newVersion": "نسخهٔ تازه",
"update.now": "اکنون به‌روز کن",
"update.later": "بعداً",
"update.unknown": "نامشخص",
"update.stepSaving": "در حال ذخیرهٔ داده‌ها...",
"update.stepSwCaches": "در حال پاک‌سازی حافظهٔ نهان Service Worker...",
"update.stepSwUnregister": "در حال لغو ثبت Service Worker‌ها...",
"update.stepBrowserCache": "در حال پاک‌سازی حافظهٔ نهان مرورگر...",
"update.stepVersion": "در حال به‌روزرسانی نسخه...",
"update.stepReload": "در حال بارگذاری دوبارهٔ برنامه...",
"update.error": "خطای به‌روزرسانی. لطفاً صفحه را دستی تازه کنید (Ctrl+F5 یا Cmd+Shift+R)",
"update.confirmSkip": "نسخهٔ تازه‌ای موجود است. به‌روزرسانی برای امنیت و پایداری توصیه می‌شود. بدون به‌روزرسانی ادامه می‌دهید؟",
"offline.backOnline": "دوباره برخط",
"offline.mode": "حالت برون‌خط",
"offline.dismiss": "بستن",
"offline.lostTitle": "اتصال قطع شد",
"offline.lostDesc": "SecureBit اکنون در حالت برون‌خط است. برخی امکانات محدود است، اما داده‌های شما امن می‌ماند.",
"offline.point1": "نشست و کلیدهای شما نگه داشته می‌شود",
"offline.point2": "هیچ داده‌ای روی سرورها ذخیره نمی‌شود",
"offline.point3": "پیام‌ها و فایل‌ها هنگام اتصال دوباره همگام می‌شوند",
"offline.continue": "برون‌خط ادامه بده",
"offline.restoredTitle": "وقتی دوباره وصل شوید",
"offline.restoredDesc": "قطع اتصال چیزی از شما نمی‌گیرد. ‏SecureBit همه‌چیز را محلی در صف می‌گذارد و لحظه‌ای که برگردید نشست رمزنگاری‌شده را از سر می‌گیرد.",
"offline.r1Title": "پیام‌های شما می‌رسد",
"offline.r1Desc": "هرچه در حالت برون‌خط نوشتید خودکار برای مخاطبتان فرستاده می‌شود.",
"offline.r2Title": "فایل‌ها کامل منتقل می‌شوند",
"offline.r2Desc": "بارگذاری‌ها از همان‌جا که ایستادند ادامه می‌یابد - نیازی به فرستادن دوباره نیست.",
"offline.r3Title": "پیام‌ها و فایل‌های آن‌ها می‌رسد",
"offline.r3Desc": "هرچه مخاطبتان در زمان قطعی فرستاده، به‌ترتیب به شما می‌رسد.",
"offline.r4Title": "هیچ‌چیز گم نمی‌شود",
"offline.r4Desc": "پس از اتصال دوباره هیچ شکافی نیست - گفتگو دقیقاً از همان‌جا که مکث کرد ادامه می‌یابد.",
"offline.gotIt": "متوجه شدم",
"qr.showTitle": "نمایش کد QR",
"qr.showSubtitle": "تمام‌صفحه · بگذارید همتایتان بخواند",
"qr.showSubtitleFrames": "تمام‌صفحه · بگذارید همتایتان هر {frames} فریم را بخواند",
"notify.enabledBody": "اعلان‌ها روشن شد! برای پیام‌های تازه آگاه می‌شوید.",
"notify.workingBody": "اعلان‌ها کار می‌کند! برای پیام‌های تازه آگاه می‌شوید.",
"pw.label": "ورود گذرواژه",
"pw.placeholder": "گذرواژه را وارد کنید...",
"pw.decrypt": "رمزگشایی",
"pw.cancel": "انصراف",
"file.title": "انتقال فایل",
"file.drop": "فایل‌ها را اینجا بکشید و رها کنید",
"file.dropHint": "پیش از انتقال سرتاسری رمزنگاری می‌شود · تا ۱۰۰ مگابایت",
"file.browse": "مرور دستگاه",
"file.incoming": "درخواست فایل ورودی",
"file.accept": "پذیرش",
"file.reject": "رد",
"file.download": "دریافت",
"file.notReady": "اتصال آماده نیست",
"file.tooLarge": "فایل بیش از حد بزرگ است",
"file.typeNotAllowed": "این نوع فایل مجاز نیست",
"file.maxConcurrent": "بیشترین انتقال هم‌زمان",
"file.gone": "این فایل دیگر برای دریافت در دسترس نیست.",
"call.incoming": "تماس ورودی",
"call.incomingVideo": "تماس تصویری ورودی",
"call.encrypted": "تماس رمزنگاری‌شده",
"call.encryptedShort": "رمزنگاری‌شده",
"call.peer": "همتای امن",
"call.connecting": "در حال اتصال…",
"call.ringing": "در حال زنگ زدن…",
"call.accept": "پاسخ",
"call.decline": "رد",
"call.end": "پایان تماس",
"call.camera": "دوربین",
"call.cameraOff": "دوربین خاموش",
"call.peerCameraOff": "دوربین همتا خاموش است",
"call.flipCamera": "تعویض دوربین",
"call.addVideo": "افزودن تصویر",
"call.video": "تصویر",
"call.muted": "بی‌صدا",
"call.expand": "بزرگ‌نمایی",
"call.minimize": "کوچک‌نمایی",
"call.quality": "کیفیت اتصال",
"call.qualityExcellent": "عالی",
"call.videoPrefix": "تصویری · ",
"call.voicePrefix": "صوتی · ",
"group.new": "گروه تازه",
"group.create": "ساخت گروه",
"group.join": "پیوستن به گروه",
"group.name": "نام گروه",
"group.nameTooLong": "نام گروه بیش از حد بلند است.",
"group.capacity": "تا {max} نفر، همتا‌به‌همتا. پیش از باز شدن گروه، همه یک کد ایمنی را مقایسه می‌کنند.",
"group.invite": "دعوت",
"group.inviteMore": "اعضای بیشتری دعوت کنید",
"group.invitePeople": "دعوت {count} نفر",
"group.invitation": "دعوت گروه",
"group.addMembers": "افزودن عضو",
"group.roomFor": "جا برای {remaining} نفر دیگر هست. به‌محض پیوستن آن‌ها همه کد گروه تازه‌ای را مقایسه می‌کنند.",
"group.membersCount": "{count} عضو",
"group.member": "عضو",
"group.members": "اعضا",
"group.remove": "حذف {name}",
"group.message": "پیام به {name}",
"group.leave": "خروج",
"group.leaveThis": "از این گروه خارج شوید",
"group.cancel": "لغو گروه",
"group.close": "بستن",
"group.cancelBtn": "انصراف",
"group.decline": "رد",
"group.working": "در حال کار…",
"group.sasTitle": "کد ایمنی گروه",
"group.sasEveryone": "همه این کد را می‌بینند",
"group.sasCompare": "برای گشودن این گروه، کد گروه را با هر عضو مقایسه کنید.",
"group.sasReadAloud": "این رقم‌ها را بلند بخوانید برای ",
"group.sasWarning": "اگر حتی یک عضو کد دیگری بخواند، کسی میان شما نشسته است. گروه را لغو کنید - تأیید نکنید.",
"group.confirmFirst": "نخست کد گروه را تأیید کنید",
"group.codeSuffix": " · کد {code}",
"group.exchangingNonces": "در حال تبادل مقادیر یک‌بارمصرف…",
"group.waitingCommit": "در انتظار تعهد همهٔ اعضا…",
"group.waitingJoin": "در انتظار پیوستن دیگر اعضا…",
"group.emptyChat": "هنوز چیزی اینجا نیست. پیام‌ها را فرستنده امضا می‌کند و از راه پیوند رمزنگاری‌شدهٔ خود هر عضو می‌روند.",
"group.noVerified": "هنوز گفتگوی تأییدشده‌ای نیست. نخست یک گفتگوی دونفره باز کنید و کد ایمنی‌اش را مقایسه کنید - گروه از اتصال‌هایی ساخته می‌شود که پیش‌تر وارسی کرده‌اید.",
"group.noMoreToAdd": "گفتگوی تأییدشدهٔ دیگری برای افزودن نیست. نخست یک گفتگوی دونفره باز کنید و کد ایمنی‌اش را مقایسه کنید.",
"group.directLink": "پیوند مستقیم همتا‌به‌همتا",
"group.noDirectLink": "هنوز پیوند مستقیمی نیست - تا ساخته شود، عضو دیگری پیام‌ها را بازپخش می‌کند",
"group.relayNote": "برخی اعضا هنوز پیوند مستقیمی با شما ندارند. پیام‌هایشان از راه عضو دیگری می‌گذرد که می‌بیند شما در حال گفتگویید اما نمی‌تواند فراتر از امضا را بخواند یا گفتهٔ شما را تغییر دهد. گروه پیوسته می‌کوشد آن‌ها را مستقیم وصل کند.",
"group.relayOnlyOff": "حالت فقط بازپخش خاموش است، پس هر عضو مستقیم به شما وصل می‌شود و نشانی IP شما را می‌داند - از جمله اعضایی که کس دیگری دعوت کرده. اگر اینجا مهم است، آن را در تنظیمات شبکه روشن کنید.",
"group.memberOffline": "{name} برون‌خط است و پیام‌ها را دریافت نمی‌کند. او همچنان عضو است - حذفش کلیدهای گروه را از نو می‌سازد.",
"group.joinNote": "دیگر اعضا از حضور شما در این گروه آگاه می‌شوند. پیشینهٔ پیامی برای جبران نیست - گروه خالی آغاز می‌شود.",
"group.inviteSentNote": "گروه تا پذیرش آن‌ها به کار خود ادامه می‌دهد. پیشینه‌ای برای جبران ندارند - تنها آنچه از این پس فرستاده شود را می‌بینند.",
"group.errNotCreated": "گروه ساخته نشد",
"group.errNobodyAccepted": "هیچ‌کس به‌موقع دعوت را نپذیرفت.",
"group.errNothingSent": "چیزی فرستاده نشد و چیزی تأیید نشد. این را ببندید و پس از اتصال همه دوباره بکوشید.",
"group.errNotFormed": "این گروه شکل نگرفت.",
"group.errFull": "این گروه پر است.",
"group.errInviteFailed": "دعوت فرستاده نشد - آن گفتگو وصل نیست.",
"group.errNoMemberList": "مالک گروه هرگز فهرست اعضا را نفرستاد.",
"group.errUnsignedList": "فهرست اعضا را مالک گروه امضا نکرده بود. دوباره نکوشید - به او بگویید.",
"group.errNotOwner": "کسی جز مالک گروه کوشید اعضا را تغییر دهد.",
"hdr.tagline": "رمزنگاری‌شده از سر تا سر",
"hdr.netSettings": "تنظیمات پیشرفتهٔ شبکه",
"hdr.netSettingsTitle": "تنظیمات پیشرفتهٔ شبکه (STUN/TURN)",
"hdr.disconnect": "قطع اتصال",
"status.connected": "متصل",
"status.connecting": "در حال اتصال...",
"status.notConnected": "متصل نیست",
"status.reconnecting": "در حال اتصال دوباره...",
"status.retrying": "در حال تلاش دوباره...",
"status.verifying": "در حال تأیید...",
"status.peerDisconnected": "همتا قطع شد",
"sec.replayProtection": "حفاظت در برابر بازپخش",
"sec.messageIntegrity": "یکپارچگی پیام (HMAC)",
"sec.forwardSecrecy": "رازداری پیشرو کامل",
"sec.metadataProtection": "حفاظت از فراداده",
"sec.trafficObfuscation": "پنهان‌سازی ترافیک",
"sec.realTests": "آزمون‌های واقعی رمزنگاری",
"sec.simulatedData": "دادهٔ شبیه‌سازی‌شده",
"sec.testPassed": "آزمون موفق",
"sec.testFailed": "آزمون ناموفق یا در دسترس نیست",
"sec.verificationDone": "تأیید واقعی رمزنگاری کامل شد",
"sec.verificationInProgress": "تأیید امنیتی در جریان است...",
"sec.verificationWait": "تأیید امنیتی در جریان است...\nلطفاً تا پایان تأیید بی‌درنگ رمزنگاری صبر کنید.",
"sec.verificationUnavailable": "تأیید امنیتی در دسترس نیست",
"chat.placeholder": "یک پیام رمزنگاری‌شده بنویسید…",
"chat.send": "فرستادن پیام",
"chat.sendFiles": "فرستادن فایل",
"chat.hideFiles": "پنهان کردن فایل‌ها",
"chat.recordVoice": "ضبط پیام صوتی",
"chat.sendVoice": "فرستادن پیام صوتی",
"chat.discard": "دور انداختن",
"chat.codeBlock": "به‌صورت بلوک کد بفرست (ورودی را گسترده می‌کند)",
"chat.codeHint": "قطعه کد · قالب‌بندی حفظ می‌شود · ⌘↵ برای فرستادن",
"chat.viewOnce": "یک‌بار دیدن",
"chat.viewOnceTitle": "یک‌بار دیدن - پس از خواندن همتا ناپدید می‌شود",
"chat.viewOncePrefix": "یک‌بار دیدن · ",
"chat.viewOnceTap": "یک‌بار دیدن · برای نمایش بزنید",
"chat.viewedOnce": "یک‌بار دیده شد",
"chat.disappearing": "پیام ناپدیدشونده - در هر دو سو پاک می‌شود",
"chat.disappearAfter": "ناپدید شدن پس از",
"chat.visibleFor": "نمایان به مدت",
"chat.timerPrefix": "زمان‌سنج · ",
"chat.expired": "این پیام منقضی شده است",
"chat.deleteForEveryone": "حذف برای همه",
"chat.sending": "در حال فرستادن",
"chat.delivered": "رسید",
"chat.notSent": "فرستاده نشد",
"chat.notSentReason": "فرستاده نشد - کانال امن آماده نیست. برای ادامه دوباره وصل شوید.",
"chat.encrypted": "رمزنگاری‌شده",
"chat.decrypted": "رمزگشایی‌شده",
"chat.encryptedOnDevice": "روی دستگاه شما رمزنگاری شد",
"chat.uploading": "در حال بارگذاری",
"chat.downloading": "در حال دریافت",
"chat.transferring": "در حال انتقال…",
"chat.copied": "رونوشت شد!",
"chat.collapse": "جمع کردن",
"chat.closeMenu": "بستن منو",
"chat.newChat": "گفتگوی تازه",
"chat.newGroup": "گروه تازه",
"chat.createGroup": "ساخت گروه",
"chat.groupChats": "گفتگوهای گروهی",
"chat.secureChat": "گفتگوی امن",
"chat.nameThis": "به این گفتگو نام بدهید",
"chat.rename": "تغییر نام گفتگو (فقط محلی)",
"chat.renameHint": "برای تغییر نام دوبار کلیک کنید",
"chat.localLabel": "برچسب محلی · فقط روی این دستگاه ذخیره می‌شود",
"chat.setStatus": "وضعیت خود را تعیین کنید",
"chat.yourStatusPrefix": "وضعیت شما - ",
"chat.meshHint": "تا ۸ همتا · مِش همتا‌به‌همتا",
"chat.offline": "برون‌خط",
"chat.noNetwork": "بدون شبکه · در حال اتصال دوباره",
"chat.startVoiceCall": "تماس صوتی رمزنگاری‌شده را آغاز کنید",
"chat.startVideoCall": "تماس تصویری رمزنگاری‌شده را آغاز کنید",
"chat.verifyForCalls": "برای فعال شدن تماس، نشست را تأیید کنید",
"chat.e2eeNote": "هر پیام پیش از خروج، روی دستگاه شما سرتاسری رمزنگاری می‌شود.",
"chat.peersOnly": "تنها سرتاسری برای همتایان متصل فرستاده می‌شود - هرگز روی سرور ذخیره نمی‌شود.",
"flow.invitationCreated": "دعوت‌نامهٔ امن ساخته شد",
"flow.invitationCreatedBang": "دعوت‌نامهٔ امن ساخته و رمزنگاری شد!",
"flow.responseCreated": "پاسخ امن ساخته شد",
"flow.responseCreatedBang": "پاسخ امن ساخته شد!",
"flow.sendInvitation": "کد دعوت را از راه کانالی امن (تماس صوتی، پیامک و مانند آن) برای هم‌صحبتتان بفرستید.",
"flow.sendResponse": "کد پاسخ را از راه کانالی امن برای آغازگر بفرستید یا بگذارید کد QR زیر را بخواند.",
"flow.sendEncryptedCode": "کد رمزنگاری‌شده را بفرستید",
"flow.sendTheResponse": "پاسخ را بفرستید",
"flow.pasteOrWrite": "کد را بچسبانید یا بنویسید…",
"flow.processingInvitation": "در حال پردازش دعوت‌نامهٔ امن...",
"flow.processingResponse": "در حال پردازش پاسخ امن...",
"flow.finalizing": "در حال نهایی کردن اتصال امن...",
"flow.channelEstablished": "کانال امن برقرار شد",
"flow.channelReady": "کانال امن آماده است",
"flow.restoring": "در حال بازیابی اتصال…",
"flow.invitationCaptured": "دعوت‌نامه گرفته شد.",
"err.needInvitation": "باید کد دعوت را از هم‌صحبتتان بچسبانید.",
"err.needResponse": "باید کد پاسخ را از هم‌صحبتتان بچسبانید.",
"err.responseFormat": "قالب پاسخ نامعتبر است - کد را وارسی کنید",
"err.responseNoKey": "کد پاسخ نامعتبر است - کلید رمزنگاری نبود یا خراب است. کد را وارسی کنید و دوباره بکوشید.",
"err.responseNoSignKey": "کد پاسخ نامعتبر است - کلید تأیید امضا نبود. کد را وارسی کنید و دوباره بکوشید.",
"err.responseOutdated": "دادهٔ پاسخ کهنه است - از دعوت‌نامهٔ تازه‌ای بهره ببرید",
"err.setupError": "خطا در برپایی اتصال",
"err.notReady": "اتصال آماده نیست",
"err.securityBreach": "نقض امنیتی شناسایی شد - اتصال رد شد",
"err.securityValidation": "اعتبارسنجی امنیتی ناموفق بود - احتمال حمله هست",
"err.retiredQr": "این کد QR از قالبی بازنشسته بهره می‌برد که نتوانست دعوت‌نامه را منتقل کند. از همتایتان بخواهید کد تازه‌ای بسازد، یا از رونوشت و چسباندن بهره ببرید.",
"err.compressedQrNote": "‏QR فشرده ممکن است برای کوتاهی SDP را حذف کند. اگر اتصال ناموفق بود از رونوشت و چسباندن بهره ببرید.",
"err.inviteNotConnected": "دعوت‌نامه فرستاده نشد. آن گفتگو هم‌اکنون وصل نیست.",
"err.inviteNotConnectedRetry": "دعوت‌نامه فرستاده نشد. آن گفتگو هم‌اکنون وصل نیست - دوباره بازش کنید و بکوشید.",
"err.nobodyAccepted": "هیچ‌کس دعوت را نپذیرفت. گروه بی‌تغییر است.",
"err.noAudio": "صدایی ضبط نشد - اجازهٔ میکروفون را وارسی کنید و دوباره بکوشید.",
"err.voiceNeedsConnection": "پیام صوتی به اتصال امن فعال نیاز دارد. دوباره وصل شوید و بکوشید.",
"err.voiceRestoring": "در حال بازیابی اتصال - لحظه‌ای دیگر دوباره پیام صوتی را بفرستید.",
"err.fileTooLarge": "فایل بیش از حد بزرگ است",
"sas.safetyNumber": "شمارهٔ ایمنی",
"sas.incorrect": "کد نادرست است. آن را با همتایتان وارسی کنید و دوباره بکوشید.",
"sas.noMatch": "کدها هم‌خوان نیستند",
"sas.makeSure": "مطمئن شوید کدها دقیقاً یکسان‌اند.",
"sas.tooManyAttempts": "تلاش نادرست بیش از حد. نشست برای ایمنی بازنشانی شد.",
"sas.verificationFailed": "تأیید ناموفق بود",
"sas.verified": "تأییدشده · رازداری پیشرو کامل",
"sas.runVerification": "تأیید امنیتی را اجرا کنید",
"sec.panelTitle": "جزئیات شبکه و رمزنگاری",
"sec.security": "امنیت",
"sec.transport": "انتقال",
"sec.keyExchange": "تبادل کلید",
"sec.allEnabled": "همهٔ امکانات امنیتی به‌طور پیش‌فرض روشن‌اند",
"sec.realTimeNote": "تأیید بی‌درنگ با توابع واقعی رمزنگاری - بدون دادهٔ ساختگی.",
"sec.simulatedWarning": "هشدار: شاید اتصال به‌طور کامل برقرار نشده باشد - مقادیر ممکن است شبیه‌سازی‌شده باشند.",
"dl.title": "دریافت SecureBit",
"dl.free": "رایگان · متن‌باز",
"dl.soon": "برنامه‌های موبایل (iOS، اندروید) و افزونه‌های مرورگر (Chrome، Firefox، Opera) به‌زودی می‌آیند.",
"chatHdr.chat": "گفتگو",
"chatHdr.chats": "گفتگوها",
"chatHdr.newChat": "+ تازه",
"chatHdr.secure": "امن",
"chatHdr.p2pSub": "همتا‌به‌همتا · رمزنگاری‌شده از سر تا سر",
"chatHdr.save": "ذخیره",
"chatHdr.close": "بستن",
"chatHdr.expand": "بزرگ‌نمایی",
"chatHdr.you": "شما",
"chatHdr.qrCode": "کد QR",
"chat.disconnected": "قطع‌شده",
"call.mute": "بی‌صدا",
"call.endShort": "پایان",
"group.add": "افزودن",
"group.send": "فرستادن",
"sec.pfsShort": "رازداری پیشرو کامل",
"sec.cipher": "رمز",
"chat.close": "بستن",
"file.needConnection": "انتقال فایل به اتصال باز نیاز دارد",
"presence.available": "در دسترس",
"presence.away": "دور از دسترس",
"presence.busy": "مشغول",
"presence.offline": "برون‌خط",
"presence.invisible": "نامرئی",
"presence.availableDesc": "برخط و در دسترس",
"presence.awayDesc": "بی‌کار · لحظه‌ای دور شده",
"presence.busyDesc": "مزاحم نشوید",
"presence.invisibleDesc": "برای همتایان برون‌خط دیده می‌شوید",
"presence.online": "برخط",
"conn.p2p": "همتا‌به‌همتا · متصل",
"conn.verifying": "در حال تأیید…",
"conn.connecting": "در حال اتصال…",
"conn.reconnecting": "در حال اتصال دوباره…",
"conn.peerDisconnected": "همتا قطع شد",
"conn.disconnected": "قطع‌شده",
"chat.defaultLabel": "گفتگو",
"groupPhase.forming": "در حال شکل‌گیری…",
"groupPhase.commitments": "در حال تبادل تعهدها…",
"groupPhase.revealing": "در حال افشا…",
"groupPhase.compare": "کد گروه را مقایسه کنید",
"groupPhase.ready": "گروه آماده است",
"groupPhase.failed": "گروه ناموفق بود",
"call.qualityGood": "خوب",
"call.qualityFair": "متوسط",
"call.qualityWeak": "ضعیف",
"msg.code": "کد",
"msg.timer": "زمان‌سنج",
"msg.voice": "صدا",
"msg.play": "پخش",
"msg.sent": "فرستاده شد",
"msg.read": "خوانده شد",
"report.title": "تأیید امنیتی بی‌درنگ",
"report.active": "فعال",
"report.testsPassed": "آزمون‌های موفق",
"report.verifiedAt": "تأیید در ساعت",
"report.source": "منبع",
"secTest.verifyECDHKeyExchange": "تبادل کلید ECDH",
"secTest.verifyECDSASignatures": "امضای دیجیتال ECDSA",
"secTest.verifyEncryption": "رمزنگاری AES-GCM",
"secTest.verifyMessageIntegrity": "یکپارچگی پیام",
"secTest.verifyPerfectForwardSecrecy": "رازداری پیشرو کامل",
"secTest.verifyPFS": "رازداری پیشرو کامل",
"secTest.verifyReplayProtection": "حفاظت در برابر بازپخش",
"secTest.verifyDTLSFingerprint": "اثر انگشت DTLS",
"secTest.verifySASVerification": "تأیید SAS",
"secTest.verifyMetadataProtection": "حفاظت از فراداده",
"secTest.verifyTrafficObfuscation": "پنهان‌سازی ترافیک",
"secTest.verifyPacketPadding": "لایی‌گذاری بسته",
"secTest.verifyNestedEncryption": "رمزنگاری تودرتو",
"secTest.verifyNonExtractableKeys": "کلیدهای غیرقابل‌استخراج",
"secTest.verifyRateLimiting": "محدودسازی نرخ",
"secTest.verifyMutualAuth": "احراز هویت دوطرفه",
"secTest.verifyAuthProof": "اثبات احراز هویت",
"secTest.verifyEnhancedValidation": "اعتبارسنجی پیشرفته",
"secTest.verifyAdvancedFeatures": "امکانات پیشرفته",
"secTest.verifySignature": "بررسی امضا",
"secDetail.Security system initializing...": "سامانهٔ امنیتی در حال راه‌اندازی...",
"secDetail.Nested encryption active": "رمزنگاری تودرتو فعال است",
"secDetail.Nested encryption failed": "رمزنگاری تودرتو ناموفق بود",
"secDetail.Packet padding active": "لایی‌گذاری بسته فعال است",
"secDetail.Packet padding failed": "لایی‌گذاری بسته ناموفق بود",
"secDetail.Advanced features active": "امکانات پیشرفته فعال است",
"secDetail.Advanced features failed": "امکانات پیشرفته ناموفق بود",
"secDetail.No encryption key available": "کلید رمزنگاری در دسترس نیست",
"secDetail.AES-GCM encryption/decryption working correctly": "رمزنگاری و رمزگشایی AES-GCM درست کار می‌کند",
"secDetail.No ECDH key pair available": "جفت کلید ECDH در دسترس نیست",
"secDetail.Key derivation failed": "استخراج کلید ناموفق بود",
"secDetail.No ECDSA key pair available": "جفت کلید ECDSA در دسترس نیست",
"secDetail.ECDSA digital signatures working correctly": "امضای دیجیتال ECDSA درست کار می‌کند",
"secDetail.MAC key not available or invalid": "کلید MAC در دسترس نیست یا نامعتبر است",
"secDetail.Rate limiter did not block a message over the limit": "محدودکنندهٔ نرخ پیامی فراتر از حد را مسدود نکرد",
"secDetail.Rate limiter is not available": "محدودکنندهٔ نرخ در دسترس نیست",
"secDetail.Replay protection is working correctly": "حفاظت در برابر بازپخش درست کار می‌کند",
"secDetail.Replay protection not enabled": "حفاظت در برابر بازپخش روشن نیست",
"secDetail.SAS code not available": "کد SAS در دسترس نیست",
"secDetail.SAS verification code is valid and available": "کد تأیید SAS معتبر و در دسترس است",
"secDetail.Traffic obfuscation is working correctly": "پنهان‌سازی ترافیک درست کار می‌کند",
"secDetail.Traffic obfuscation not enabled": "پنهان‌سازی ترافیک روشن نیست",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "برای این نشست جفت کلید ECDH زودگذر و غیرقابل‌استخراجی وجود ندارد",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "رازداری پیشرو تنها در سطح نشست: کلیدها برای هر نشست زودگذرند، اما Double Ratchet در این اتصال فعال نیست (همتا روی نسخه‌ای قدیمی‌تر است)، پس لو رفتن یک کلید نشست کل گفتگو را آشکار می‌کند",
"msg.pause": "مکث",
"msg.failed": "ناموفق",
"groupErr.timeout": "عضوی پیش از آماده شدن کد از پاسخ‌دادن بازماند.",
"groupErr.keyMismatch": "کلید یکی از اعضا با هویتی که برایش ادعا شده بود نخواند.",
"groupErr.revealMismatch": "مقداری که عضوی افشا کرد با آنچه به آن متعهد شده بود نخواند.",
"groupErr.commitChanged": "عضوی در میانهٔ کار تعهد خود را تغییر داد.",
"groupErr.missingKey": "عضوی فهرست شد که کلیدش هرگز نرسید.",
"groupErr.outsider": "فریمی از کسی بیرون گروه رسید.",
"groupErr.limit": "گروه به هشت عضو محدود است.",
"groupErr.tooLarge": "پیام برای فرستادن به گروه بیش از حد بزرگ بود.",
"fileType.text": "متن ساده",
"fileType.images": "تصاویر",
"fileType.archives": "بایگانی‌ها",
"fileType.voice": "پیام‌های صوتی",
"fileType.unsupported": "پشتیبانی‌نشده",
"qrScan.title": "خواندن کد QR",
"qrScan.auto": "حالت خودکار",
"qrScan.reset": "بازنشانی",
"qrScan.autoScroll": "پیمایش خودکار روشن است",
"qrScan.starting": "در حال روشن کردن دوربین...",
"qrScan.point": "دوربین را به کد QR بگیرید",
"qrScan.tapFocus": "برای تمرکز روی صفحه بزنید",
"qrScan.focusing": "در حال تمرکز...",
"iceErr.notArray": "فهرست سرورها باید آرایه باشد",
"iceErr.invalidJson": "JSON نامعتبر",
"iceErr.tooMany": "سرورهای بیش از حد (بیشینه {max})",
"iceErr.invalidEntry": "{label}: مدخل نامعتبر",
"iceErr.urlCount": "{label}: میان ۱ تا {max} نشانی لازم است",
"iceErr.turnCreds": "{label}: سرورهای TURN معمولاً به نام کاربری و گواهی نیاز دارند",
"iceUrl.notString": "نشانی باید رشته باشد",
"iceUrl.empty": "نشانی خالی است",
"iceUrl.tooLong": "نشانی بیش از حد بلند است",
"iceUrl.badChars": "نشانی نویسه‌های نامعتبر دارد",
"iceUrl.badScheme": "نشانی باید با stun:‏، stuns:‏، turn: یا turns: آغاز شود",
"iceUrl.badQuery": "پرس‌وجوی نشانی نامعتبر است",
"iceUrl.noHost": "نشانی میزبان ندارد",
"iceUrl.badHost": "میزبان یا درگاه نشانی نامعتبر است",
"iceUrl.badTransport": "پرس‌وجوی نشانی باید transport=udp یا transport=tcp باشد",
"msg.off": "خاموش",
"file.consentUnavailable": "رضایت کاربر در دسترس نیست",
"secLevel.MAXIMUM": "بیشینه",
"secLevel.INITIALIZING": "در حال راه‌اندازی",
"secLevel.ERROR": "خطا",
"secLevel.UNKNOWN": "نامشخص",
"status.error": "خطا",
"offline.disconnect": "قطع اتصال",
"offline.learnMore": "بیشتر بدانید",
"pwa.installApp": "نصب برنامه",
"chat.onWeb": "شما روی نسخهٔ وب هستید",
"groupCall.startVoice": "شروع تماس صوتی گروهی",
"groupCall.startVideo": "شروع تماس تصویری گروهی",
"groupCall.join": "پیوستن",
"groupCall.dismiss": "الان نه",
"groupCall.leave": "خروج از تماس",
"groupCall.you": "شما",
"groupCall.connecting": "در حال اتصال…",
"groupCall.waitingLink": "در انتظار یک پیوند مستقیم…",
"groupCall.legFailed": "اتصال برقرار نشد",
"groupCall.startedVoice": "{name} یک تماس صوتی آغاز کرد",
"groupCall.startedVideo": "{name} یک تماس تصویری آغاز کرد",
"groupCall.inCall": "{count} نفر در تماس",
"groupCall.err.permission_denied": "تماس آغاز نشد - دسترسی به میکروفون و دوربین مسدود است. آن را برای این سایت مجاز کنید و دوباره تلاش کنید.",
"groupCall.err.device_not_found": "تماس آغاز نشد - میکروفونی روی این دستگاه پیدا نشد.",
"groupCall.err.device_busy": "تماس آغاز نشد - میکروفون شما در حال استفاده توسط برنامه دیگری است. آن را ببندید و دوباره تلاش کنید.",
"groupCall.err.media_failed": "تماس آغاز نشد - میکروفون باز نشد.",
"groupCall.err.call_in_progress": "همین حالا تماسی در این گروه در جریان است. به‌جای شروع تماس تازه، به آن بپیوندید.",
"groupCall.err.not_ready": "پیش از تماس، کد گروه را تأیید کنید.",
"groupCall.speaking": "{name} در حال صحبت است",
"groupCall.pin": "نمایش بزرگ {name}",
"groupCall.unpin": "بازگشت به همه",
"groupCall.showEveryone": "همه",
"msg.after5s": "۵ ثانیه پس از خواندن",
"msg.after15s": "۱۵ ثانیه پس از خواندن",
"msg.after30s": "۳۰ ثانیه پس از خواندن",
"msg.after1m": "۱ دقیقه پس از خواندن",
"msg.sec30": "۳۰ ثانیه",
"msg.min5": "۵ دقیقه",
"msg.hour1": "۱ ساعت",
"desktop.shareDesc": "کد را برای طرف مقابل بفرستید. یک‌بارمصرف است و زود منقضی می‌شود.",
"desktop.invitationCreated": "دعوت‌نامهٔ امن ساخته شد - آن را برای طرف مقابل بفرستید.",
"desktop.joinDesc": "کد دعوت طرف مقابل را بچسبانید تا پاسخ امن شما ساخته شود.",
"desktop.offerTag": "دعوت · کپی متن",
"desktop.answerTag": "پاسخ · کپی متن",
"desktop.offerPlaceholder": "کد دعوت اینجا نمایان می‌شود…",
"desktop.answerPlaceholder": "کد پاسخ اینجا نمایان می‌شود…",
"desktop.backToChats": "بازگشت به گفت‌وگوها",
"desktop.sendFeedback": "ارسال بازخورد",
"desktop.callsNeedVerified": "تماس‌ها به یک کانال امنِ تأییدشده نیاز دارند.",
"desktop.noOpenChannel": "هیچ کانال امن بازی وجود ندارد.",
"desktop.chatCarriesCall": "این گفت‌وگو حامل یک تماس گروهی است. پیش از تماس دونفره، از تماس گروهی خارج شوید.",
"desktop.err.permission_denied": "تماس آغاز نشد - دسترسی به میکروفون و دوربین مسدود است. آن را در تنظیمات سیستم مجاز کنید و دوباره تلاش کنید.",
"desktop.language": "زبان",
"desktop.languageHint": "بی‌درنگ اعمال می‌شود. پیام‌های ارسال‌شده با همان واژه‌ها باقی می‌مانند.",
"desktop.compareCode": "کد تأیید را با طرف مقابل مقایسه کنید و اگر یکسان بود تأیید کنید.",
"desktop.verifyBeforeFiles": "پیش از ارسال فایل، تأیید را کامل کنید.",
"desktop.verifyBeforeSending": "پیش از ارسال پیام، تأیید را کامل کنید.",
"desktop.disconnectedByBackend": "اتصال به‌طور امن قطع شد.",
"desktop.restoreFailed": "اتصال بازیابی نشد. این گفت‌وگو بسته می‌شود.",
"desktop.channelNotReady": "کانال داده هنوز در دسترس نیست. تا برقراری اتصال صبر کنید.",
"desktop.enterCode": "برای تأیید، کد تأیید را وارد کنید.",
"desktop.noOffer": "دعوتی یافت نشد. نخست یکی بسازید.",
"desktop.notInitiator": "این اتصال را شما نساخته‌اید، پس پاسخی برای اعمال وجود ندارد.",
"desktop.decryptFailed": "رمزگشایی یک پیام ممکن نشد و کنار گذاشته شد.",
"desktop.badMessageFormat": "قابی نادرست رسید و کنار گذاشته شد.",
"desktop.notSentNotReady": "پیام ارسال نشد: کانال امن آماده نیست. تا پایان تأیید صبر کنید یا دوباره وصل شوید.",
"desktop.micDenied": "دسترسی به میکروفون رد شد.",
"desktop.noChannelWait": "کانال امنِ بازی وجود ندارد - تا برقراری اتصال صبر کنید.",
"desktop.sasFailed": "تأیید ناموفق بود. شاید واسطه‌ای در میان باشد، بنابراین اتصال قطع شد.",
"desktop.sasOk": "تأیید موفق بود. این کانال سرتاسری احراز هویت شده است.",
"desktop.iceForgotten": "سرورهای ذخیره‌شده فراموش شدند. از سرورهای عمومی ICE استفاده می‌شود.",
"desktop.icePublic": "از سرورهای عمومی ICE استفاده می‌شود.",
"desktop.verificationInProgress": "بررسی امنیتی هنوز در جریان است. تا پایان آن صبر کنید.",
"desktop.fileGone": "این فایل دیگر برای دانلود در دسترس نیست.",
"desktop.codeMismatch": "کدهای تأیید یکسان نیستند. برای ایمنی قطع می‌شود.",
"desktop.noLocalCode": "تأیید ناموفق: کد محلی‌ای برای مقایسه وجود ندارد. برای ایمنی قطع می‌شود.",
"desktop.protocolViolation": "طرف مقابل پیش از تأیید شما ادعای تأیید کد را کرد. برای ایمنی قطع می‌شود.",
"desktop.verificationRejected": "تأیید رد شد. اتصال برای ایمنی قطع شد.",
"secLevel.HIGH": "بالا",
"secLevel.MEDIUM": "متوسط",
"secLevel.LOW": "پایین",
"desktop.rerun": "بررسی دوباره",
"desktop.ice.customDesc": "تا {max} سرور، در هر خط یک نشانی یا با قالب JSON.",
"desktop.ice.persistDesc": "به‌صورت محلی روی همین دستگاه ذخیره می‌شود. برای استفاده فقط در این نشست، خاموش بگذارید.",
"desktop.group.leaveNote": "به بقیهٔ اعضا اطلاع داده می‌شود که خارج شده‌اید. پس از آن چیزی از این گروه روی این دستگاه نمی‌ماند - هیچ سروری نسخه‌ای ندارد که بتوان از آن بازگشت، پس به دعوت تازه نیاز خواهید داشت.",
"desktop.sec.ecdsaOk": "امضای بستهٔ کلید طرف مقابل هنگام دست‌دادن بررسی شد (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "دست‌دادنی کامل نشده است",
"desktop.sec.ecdhOk": "کلیدهای نشست از تبادل گذرای ECDH P-384 با HKDF-SHA-256 مشتق شدند",
"desktop.sec.ecdhNone": "کلید نشستی مشتق نشد",
"desktop.sec.encryptionOk": "رمزگذاری و رمزگشایی AES-GCM در هسته بررسی شد",
"desktop.sec.encryptionNa": "خودآزمون AES-GCM اجرا نشد",
"desktop.sec.integrityOk": "یکپارچگی پیام‌ها بررسی شد (احراز AES-GCM)",
"desktop.sec.integrityNa": "خودآزمون یکپارچگی اجرا نشد",
"desktop.sec.pfsOk": "Double Ratchet فعال است - هر پیام کلید خودش را دارد",
"desktop.sec.pfsNa": "اندازه‌گیری نشد",
"desktop.sec.replayOk": "کلیدهای پیام رچت پس از استفاده نابود می‌شوند، پس قابی که شنود شده دوباره پخش نمی‌شود",
"desktop.sec.replayNa": "اندازه‌گیری نشد",
"desktop.sec.dtlsPinned": "اثر انگشت DTLS طرف مقابل پین شد: {fp}",
"desktop.sec.dtlsNone": "اثر انگشت DTLS طرف دور در دسترس نیست",
"desktop.sec.sasBoth": "هر دو طرف کد ایمنی را بیرون از کانال تأیید کردند",
"desktop.sec.sasIncomplete": "کد ایمنی را هر دو طرف تأیید نکرده‌اند",
"desktop.sec.metadataOk": "کلید اختصاصی فراداده مشتق شد (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "کلید فراداده وجود ندارد",
"desktop.sec.coverOn": "ترافیک پوششی فعال است: قاب‌های ساختگی تصادفی (۳۲ تا ۱۲۸ بایت هر ۱۵ تا ۳۰ ثانیه) روی کانال رچت",
"desktop.sec.coverOff": "مولد ترافیک پوششی در حال اجرا نیست",
"desktop.sec.coverUnsupported": "ترافیک پوششی به نشست Double Ratchet نیاز دارد (طرف مقابل نسخهٔ قدیمی‌تری دارد)",
"desktop.tagline": "آزادی سرتاسری",
"desktop.callsNotHere": "تماس‌ها هنوز در این نسخه در دسترس نیستند. پیام‌ها، فایل‌ها و گفت‌وگوهای گروهی طبق معمول کار می‌کنند."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["fa"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "Langue",
"language.suggest.text": "Cette page est aussi disponible en français.",
"language.suggest.cta": "Lire en français",
"language.suggest.dismiss": "Fermer",
"community.title": "Construisez l'avenir de la vie privée",
"community.description": "SecureBit grandit grâce à sa communauté. Vos idées et vos retours façonnent l'avenir des communications sécurisées, développées à ciel ouvert, avec une validation ASN.1 complète de bout en bout.",
"community.github": "Dépôt GitHub",
"community.feedback": "Vos retours",
"unique.eyebrow": "Ce qui nous distingue",
"unique.heading": "Pourquoi SecureBit est unique",
"unique.s1.titleTop": "Cœur de chiffrement",
"unique.s1.titleBottom": "en couches",
"unique.s1.collapsed": "Cœur de chiffrement",
"unique.s1.desc": "Échange de clés ECDH P-384, charges utiles en AES-256-GCM, signatures ECDSA et validation ASN.1 complète, réunis en une seule chaîne 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 à l'autre par WebRTC. Aucun relais ne retient vos données : le serveur aide seulement deux pairs à se trouver.",
"unique.s2.tags": [
"DTLS 1.3",
"Sans relais"
],
"unique.s3.titleTop": "Confidentialité",
"unique.s3.titleBottom": "persistante parfaite",
"unique.s3.collapsed": "Confidentialité persistante",
"unique.s3.desc": "Les clés de session tournent en continu et sont jetées après usage : une clé compromise n'ouvre jamais les conversations passées.",
"unique.s3.tags": [
"Clés éphémères",
"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étées et rendues aléatoires, ce qui masque les motifs de métadonnées à quiconque observe la ligne.",
"unique.s4.tags": [
"Remplissage de paquets",
"Décalage temporel"
],
"unique.s5.titleTop": "Aucune collecte",
"unique.s5.titleBottom": "de données",
"unique.s5.collapsed": "Aucune collecte de données",
"unique.s5.desc": "Aucun compte, aucun journal, aucun message conservé. Il n'y a rien sur un serveur à faire fuiter, à saisir ou à vendre.",
"unique.s5.tags": [
"Sans compte",
"Sans journaux"
],
"partners.eyebrow": "Partenaires et écosystème",
"partners.heading": "Nos partenaires nous font confiance",
"partners.aegis.desc": "Partenaire financier qui protège les communications financières confidentielles de tout son portefeuille.",
"partners.aegis.role": "Investisseur stratégique",
"partners.furilabs.desc": "Téléphones Linux axés sur la vie privée, livrés avec SecureBit comme canal sécurisé par défaut.",
"partners.furilabs.role": "Partenaire technologique",
"partners.inviteTitle": "Devenir partenaire",
"partners.inviteDesc": "Vous construisez du matériel ou de l'infrastructure pour la vie privée ? Intégrons SecureBit.",
"partners.inviteCta": "Entamer la conversation",
"roadmap.eyebrow": "Feuille de route",
"roadmap.heading": "L'évolution de SecureBit",
"roadmap.subheading": "Du premier prototype à un réseau décentralisé résistant au quantique, avec une validation ASN.1 complète à chaque couche.",
"roadmap.progress": "{shipped} jalons sur {total} atteints",
"roadmap.upcoming": "{upcoming} à venir",
"roadmap.keyFeatures": "Fonctions clés",
"roadmap.status.released": "Publié",
"roadmap.status.current": "En cours",
"roadmap.status.dev": "En développement",
"roadmap.status.planned": "Planifié",
"roadmap.status.research": "Recherche",
"hero.headlineTop": "Une ligne directe",
"hero.headlineBottom": "que vous seuls pouvez lire.",
"hero.subheading": "Les clés sont créées sur votre appareil et échangées directement entre pairs. Aucun compte, aucun serveur ne conserve vos messages.",
"hero.diagramAlt": "Une ligne chiffrée directe vers un pair, rejointe par deux autres pairs",
"intro.createTitle": "Créer un canal",
"intro.createDesc": "Votre appareil génère les clés et une invitation à usage unique. Rien de tout cela ne passe par un serveur.",
"intro.createCta": "Générer les clés et l'invitation",
"intro.joinTitle": "Rejoindre un canal",
"intro.scanTitle": "Scanner le QR avec la caméra",
"intro.scanSubtitle": "Le plus rapide : visez l'écran de votre correspondant",
"intro.orPasteCode": "ou collez le code",
"intro.pastePlaceholder": "Collez ici le code d'invitation…",
"intro.connect": "Se connecter",
"intro.connecting": "Traitement…",
"roadmap.r1.title": "Début du développement",
"roadmap.r1.sub": "Idée, prototype et mise en place de l'infrastructure",
"roadmap.r1.date": "Début 2025",
"roadmap.r1.features": [
"Concept et exigences définis",
"Choix de la pile : WebRTC, P2P, cryptographie",
"Premiers prototypes de messagerie",
"Création du dépôt et de l'intégration continue",
"Architecture de chiffrement de base",
"Conception UX/UI"
],
"roadmap.r2.title": "Version alpha",
"roadmap.r2.sub": "Première alpha publique : chat simple et échange de clés",
"roadmap.r2.date": "Printemps 2025",
"roadmap.r2.features": [
"Messagerie P2P simple par WebRTC",
"Chiffrement de bout en bout simple (schéma de démonstration)",
"Signalisation et reconnexion stables",
"Interface minimale pour les tests",
"Retours des premiers testeurs"
],
"roadmap.r3.title": "Sécurité durcie",
"roadmap.r3.sub": "Renforcement de la sécurité et publication de la branche stable",
"roadmap.r3.date": "Été 2025",
"roadmap.r3.features": [
"ECDH/ECDSA en production",
"Confidentialité persistante et rotation des clés",
"Contrôles d'authentification améliorés",
"Chiffrement des fichiers et envoi de charges volumineuses",
"Audit des processus cryptographiques de base"
],
"roadmap.r4.title": "Montée en charge et stabilité",
"roadmap.r4.sub": "Mise à l'échelle du réseau et gains de stabilité",
"roadmap.r4.date": "Automne 2025",
"roadmap.r4.features": [
"Optimisation des connexions P2P et du passage de NAT",
"Mécanismes de reconnexion et files de messages",
"Consommation de batterie réduite sur mobile",
"Synchronisation entre plusieurs appareils",
"Outils de supervision et de journalisation pour les développeurs"
],
"roadmap.r5.title": "La vie privée d'abord",
"roadmap.r5.sub": "Priorité à la vie privée : réduire les métadonnées",
"roadmap.r5.date": "Hiver 2025",
"roadmap.r5.features": [
"Protection des métadonnées et empreinte réduite",
"Expériences de routage en oignon et de DHT",
"Options de connexion anonyme",
"Préparation de l'audit de code ouvert",
"Vérification des correspondants améliorée"
],
"roadmap.r6.title": "Enhanced Security Edition",
"roadmap.r6.sub": "Cryptographie de niveau militaire en 18 couches, avec validation ASN.1 complète",
"roadmap.r6.date": "Fin 2025",
"roadmap.r6.features": [
"Triple protection : ECDH + DTLS + SAS",
"Chiffrement ECDH P-384 et AES-GCM 256 bits",
"Vérification de l'empreinte DTLS",
"Vérification SAS (chaîne d'authentification courte)",
"Confidentialité persistante avec rotation des clés",
"Protection renforcée contre les attaques de l'intercepteur",
"Validation ASN.1 DER complète",
"Vérification des OID et des points EC",
"Validation de la structure SPKI",
"Architecture P2P sur WebRTC",
"Protection des métadonnées",
"Code ouvert à 100 %"
],
"roadmap.r7.title": "Desktop Edition",
"roadmap.r7.sub": "Applications de bureau natives pour Windows, macOS et Linux",
"roadmap.r7.date": "Début 2026",
"roadmap.r7.features": [
"Application Windows (Tauri v2)",
"Application macOS (Tauri v2)",
"AppImage Linux (Tauri v2)",
"Notifications en temps réel",
"Reconnexion automatique",
"Synchronisation entre appareils",
"Interface remaniée",
"Fichiers jusqu'à 100 Mo"
],
"roadmap.r8.title": "Voix et appels sécurisés",
"roadmap.r8.sub": "Messages vocaux, appels audio et vidéo chiffrés",
"roadmap.r8.date": "Début 2026",
"roadmap.r8.features": [
"Messages vocaux chiffrés de bout en bout",
"Appels audio chiffrés en tête-à-tête (WebRTC)",
"Appels vidéo chiffrés en tête-à-tête (WebRTC)",
"Confidentialité persistante pour le flux en direct",
"Flux média protégés par SRTP/DTLS",
"Vérification SAS pendant l'appel",
"Notifications d'appel et reconnexion automatique",
"Média P2P à faible latence"
],
"roadmap.r9.title": "Communication de groupe",
"roadmap.r9.sub": "Discussions de groupe sans renoncer à la vie privée",
"roadmap.r9.date": "Maintenant",
"roadmap.r9.features": [
"Groupes P2P jusqu'à 8 participants",
"Distribution en maillage, avec relais signé en secours",
"Un seul code de sécurité de groupe, comparé par tous",
"Cérémonie d'engagement puis de révélation, contre la recherche de codes",
"Clés d'identité propres au groupe, éphémères par conception",
"Composition signée, ordonnée par époques",
"Messages signés : une transcription divergente devient démontrable",
"Aucun serveur, aucune clé de groupe partagée, 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éel",
"Optimisation de la batterie",
"Interface adaptée au mobile",
"File d'attente des messages hors ligne",
"Authentification biométrique"
],
"roadmap.r11.title": "Édition résistante 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ériques SPHINCS+",
"Schéma hybride : classique et post-quantique",
"Échange de clés résistant au quantique",
"Algorithmes de hachage mis à jour",
"Migration des sessions existantes",
"Compatibilité avec la v5.x",
"Protocoles résistants au quantique"
],
"roadmap.r12.title": "Réseau décentralisé",
"roadmap.r12.sub": "Un réseau entièrement décentralisé",
"roadmap.r12.date": "2028",
"roadmap.r12.features": [
"Réseau maillé de nœuds",
"DHT pour la découverte des pairs",
"Routage en oignon intégré",
"Tokenomique et incitations pour les nœuds",
"Gouvernance par une DAO",
"Interopérabilité avec d'autres réseaux",
"Compatibilité multiplateforme",
"Réseau auto-réparateur"
],
"roadmap.r13.title": "Assistant de confidentialité par IA",
"roadmap.r13.sub": "L'IA au service de la vie privée et de la sécurité",
"roadmap.r13.date": "2028+",
"roadmap.r13.features": [
"Analyse locale des menaces par IA",
"Détection automatique de l'intercepteur",
"Cryptographie adaptative",
"Recommandations de sécurité personnalisées",
"Apprentissage automatique à divulgation nulle",
"Assistant IA privé",
"Sécurité prédictive",
"Protection autonome contre les attaques"
],
"handshake.step1": "Génération de la paire de clés ECDH P-384",
"handshake.step2": "Dérivation du code de vérification",
"handshake.step3": "Fixation de la confidentialité persistante",
"handshake.securingTitle": "Sécurisation de votre canal",
"handshake.answerTitle": "Préparation de votre réponse",
"handshake.securingDesc": "Nous forgeons des clés assez solides pour résister à toute altération.",
"handshake.shareTitle": "Partagez votre invitation",
"handshake.sendAnswerTitle": "Renvoyez votre réponse",
"handshake.shareDesc": "Montrez le QR ou envoyez le code à votre correspondant. Il est à usage unique et expire vite.",
"handshake.sendAnswerDesc": "Donnez cette réponse à la personne qui a créé le canal pour qu'elle termine la poignée de main.",
"handshake.establish": "Établir la connexion",
"handshake.thenReceive": "Recevez ensuite la réponse que votre correspondant renvoie",
"handshake.pasteAnswerPlaceholder": "Collez le code de réponse…",
"handshake.answerSentNote": "Envoyez cette réponse à la personne qui a créé le canal, puis patientez : la discussion s'ouvre dès qu'elle se connecte.",
"handshake.qrHint": "Gardez ceci ouvert jusqu'à ce que votre correspondant ait capturé le code.",
"handshake.qrHintFrames": "La poignée de main est répartie sur {frames} images : gardez ceci ouvert jusqu'à ce que votre correspondant les ait toutes capturées.",
"verify.title": "Vérification de sécurité",
"verify.desc": "Comparez ce code de sécurité avec votre correspondant par un autre canal (voix ou en personne), puis saisissez-le pour ouvrir la discussion.",
"verify.enterLabel": "Saisissez le code vérifié",
"verify.placeholder": "Tapez le code ici",
"verify.confirm": "Confirmer le code",
"verify.confirmed": "Confirmé",
"verify.mismatch": "Ne correspond pas",
"verify.yours": "Votre confirmation",
"verify.peer": "Confirmation du correspondant",
"verify.pending": "En attente",
"verify.waiting": "En attente du code…",
"verify.verified": "Canal vérifié",
"verify.bothConfirmed": "Les deux parties ont confirmé. Ouverture de la discussion sécurisée…",
"pwa.bannerTitle": "Installer SecureBit.chat",
"pwa.bannerDesc": "Profitez de l'expérience d'une application native, avec une sécurité renforcée",
"pwa.install": "Installer",
"pwa.dismiss": "Ignorer",
"pwa.close": "Fermer",
"pwa.iosTitle": "Installer sur iOS",
"pwa.iosStep1": "Touchez le bouton Partager",
"pwa.iosStep1Hint": "En général en bas de Safari",
"pwa.iosStep2": "Trouvez « Sur l'écran d'accueil »",
"pwa.iosStep2Hint": "Faites défiler le menu de partage",
"pwa.iosStep3": "Touchez « Ajouter »",
"pwa.iosStep3Hint": "Confirmez pour installer SecureBit.chat",
"pwa.genericTitle": "Installer SecureBit",
"pwa.genericDesc": "Chaque navigateur installe à sa manière. Choisissez les étapes qui correspondent au vôtre.",
"pwa.gotIt": "Compris",
"pwa.installedTitle": "Application installée !",
"pwa.installedIos": "Application iOS installée ! Ouvrez-la depuis l'écran d'accueil.",
"pwa.installedGeneric": "SecureBit.chat est maintenant sur votre appareil",
"pwa.anytimeTitle": "Installable à tout moment",
"pwa.anytimeDesc": "Vous pouvez installer SecureBit.chat depuis le menu de votre navigateur quand vous voulez, pour la meilleure expérience.",
"pwa.ok": "D'accord",
"step.open": "Étape 1 · ouvrir un canal",
"step.exchange": "Étape 2 · échange",
"step.verification": "Étape 3 · vérification",
"action.create": "Créer",
"action.join": "Rejoindre",
"action.back": "Retour",
"action.copy": "Copier",
"action.copied": "Copié",
"action.scan": "Scanner",
"action.downloadDesktop": "Télécharger l'application",
"action.advancedSettings": "Réglages avancés",
"cred.offerTag": "offre · ou copiez le texte",
"cred.answerTag": "réponse · ou copiez le texte",
"cred.reveal": "Cliquez pour afficher - gardez ce code privé",
"qr.title": "Scanner le QR",
"qr.subtitle": "Visez le QR de votre correspondant",
"qr.scanning": "Lecture…",
"qr.hint": "Restez stable jusqu'à ce que toutes les parties soient capturées. La caméra reste locale - rien n'est envoyé.",
"mesh.you": "vous",
"mesh.peer": "correspondant · session 1",
"mesh.joined2": "chloé a rejoint · +2",
"mesh.joined3": "hugo a rejoint · +3",
"ice.title": "Réglages réseau",
"ice.subtitle": "Configuré en local - jamais transmis à votre correspondant",
"ice.intro": "Par défaut, SecureBit utilise des serveurs STUN publics pour négocier le lien pair-à-pair. Indiquez vos propres STUN/TURN si vous les hébergez.",
"ice.publicTitle": "Serveurs publics (par défaut)",
"ice.publicDesc": "Sans configuration. Suffisant pour la plupart.",
"ice.customTitle": "Mes propres serveurs STUN/TURN",
"ice.customDesc": "Jusqu'à {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é de bout en bout. Préférez ",
"ice.turnNoteTls": " (TLS).",
"ice.test": "Tester les serveurs",
"ice.testing": "Test en cours…",
"ice.relayTitle": "Mode relais uniquement",
"ice.relayBadge": "CONFIDENTIALITÉ MAXIMALE",
"ice.relayDesc": "Fait passer tout le trafic par TURN : votre correspondant ne voit jamais votre adresse IP. Nécessite un serveur TURN.",
"ice.relayWarning": "Le mode relais uniquement est activé mais aucun serveur TURN n'est configuré. La connexion ne pourra pas démarrer.",
"ice.persist": "Enregistrer sur cet appareil",
"ice.persistDesc": "Stocké chiffré dans ce navigateur. Laissez désactivé pour n'utiliser ces réglages 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 à jour disponible",
"update.desc": "Une version plus récente de SecureBit a été détectée.",
"update.currentVersion": "Version actuelle",
"update.newVersion": "Nouvelle version",
"update.now": "Mettre à jour",
"update.later": "Plus tard",
"update.unknown": "n/d",
"update.stepSaving": "Enregistrement des données…",
"update.stepSwCaches": "Vidage des caches du Service Worker…",
"update.stepSwUnregister": "Désinscription des Service Workers…",
"update.stepBrowserCache": "Vidage du cache du navigateur…",
"update.stepVersion": "Mise à jour de la version…",
"update.stepReload": "Rechargement de l'application…",
"update.error": "Erreur de mise à jour. Rechargez la page manuellement (Ctrl+F5 ou Cmd+Maj+R)",
"update.confirmSkip": "Une nouvelle version est disponible. La mise à jour est recommandée pour la sécurité et la stabilité. Continuer sans mettre à 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ées, mais vos données restent en sécurité.",
"offline.point1": "Votre session et vos clés sont conservées",
"offline.point2": "Aucune donnée n'est stockée sur un serveur",
"offline.point3": "Messages et fichiers se synchronisent à la reconnexion",
"offline.continue": "Continuer hors ligne",
"offline.restoredTitle": "À la reconnexion",
"offline.restoredDesc": "Une coupure ne vous coûte rien. SecureBit met tout en file d'attente en local et reprend la session chiffrée dès que vous revenez en ligne.",
"offline.r1Title": "Vos messages sont remis",
"offline.r1Desc": "Tout ce que vous avez écrit hors ligne part automatiquement à votre correspondant.",
"offline.r2Title": "Les fichiers finissent de partir",
"offline.r2Desc": "Les envois reprennent là où ils s'étaient arrêtés - rien à renvoyer.",
"offline.r3Title": "Leurs messages et fichiers arrivent",
"offline.r3Desc": "Tout ce que votre correspondant a envoyé pendant la coupure vous parvient dans l'ordre.",
"offline.r4Title": "Rien n'est perdu",
"offline.r4Desc": "Après la reconnexion il n'y a aucun trou - la conversation reprend exactement là où elle s'était arrêtée.",
"offline.gotIt": "Compris",
"qr.showTitle": "Afficher le QR",
"qr.showSubtitle": "Plein écran · laissez votre correspondant scanner",
"qr.showSubtitleFrames": "Plein écran · laissez votre correspondant scanner les {frames} images",
"notify.enabledBody": "Notifications activées. Vous serez prévenu des nouveaux messages.",
"notify.workingBody": "Les notifications fonctionnent. Vous serez prévenu des nouveaux messages.",
"pw.label": "Champ du mot de passe",
"pw.placeholder": "Saisissez le mot de passe…",
"pw.decrypt": "Déchiffrer",
"pw.cancel": "Annuler",
"file.title": "Transferts de fichiers",
"file.drop": "Déposez les fichiers ici",
"file.dropHint": "Chiffrés de bout en bout avant l'envoi · jusqu'à 100 Mo",
"file.browse": "Parcourir l'appareil",
"file.incoming": "Fichier entrant",
"file.accept": "Accepter",
"file.reject": "Refuser",
"file.download": "Télécharger",
"file.notReady": "Connexion pas encore prête",
"file.tooLarge": "Fichier trop volumineux",
"file.typeNotAllowed": "Type de fichier non autorisé",
"file.maxConcurrent": "Nombre maximal de transferts simultanés atteint",
"file.gone": "Ce fichier n'est plus disponible au téléchargement.",
"call.incoming": "Appel entrant",
"call.incomingVideo": "Appel vidéo entrant",
"call.encrypted": "Appel chiffré",
"call.encryptedShort": "Chiffré",
"call.peer": "Pair sécurisé",
"call.connecting": "Connexion…",
"call.ringing": "Sonnerie…",
"call.accept": "Accepter",
"call.decline": "Refuser",
"call.end": "Raccrocher",
"call.camera": "Caméra",
"call.cameraOff": "Caméra éteinte",
"call.peerCameraOff": "La caméra de votre correspondant est éteinte",
"call.flipCamera": "Changer de caméra",
"call.addVideo": "Ajouter la vidéo",
"call.video": "Vidéo",
"call.muted": "Micro coupé",
"call.expand": "Agrandir",
"call.minimize": "Réduire",
"call.quality": "Qualité de la connexion",
"call.qualityExcellent": "Excellente",
"call.videoPrefix": "Vidéo · ",
"call.voicePrefix": "Voix · ",
"group.new": "Nouveau groupe",
"group.create": "Créer le groupe",
"group.join": "Rejoindre le groupe",
"group.name": "Nom du groupe",
"group.nameTooLong": "Le nom du groupe est trop long.",
"group.capacity": "Jusqu'à {max} personnes, en pair-à-pair. Tout le monde comparera un seul code de sécurité 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}. À leur arrivée, 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": "Écrire à {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…",
"group.sasTitle": "Code de sécurité 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 à voix haute à ",
"group.sasWarning": "Si ne serait-ce qu'un membre lit un code différent, quelqu'un se trouve entre vous. Annulez le groupe - ne confirmez pas.",
"group.confirmFirst": "Confirmez d'abord le code du groupe",
"group.codeSuffix": " · code {code}",
"group.exchangingNonces": "Échange des valeurs à usage unique…",
"group.waitingCommit": "En attente de l'engagement de chaque membre…",
"group.waitingJoin": "En attente des autres membres…",
"group.emptyChat": "Rien ici pour l'instant. Chaque message est signé par son expéditeur et passe par le lien chiffré propre à chaque membre.",
"group.noVerified": "Aucune discussion vérifiée pour l'instant. Ouvrez d'abord une discussion en tête-à-tête et comparez son code de sécurité - un groupe se construit à partir de connexions déjà vérifiées.",
"group.noMoreToAdd": "Aucune autre discussion vérifiée à ajouter. Ouvrez une discussion en tête-à-tête et comparez d'abord son code de sécurité.",
"group.directLink": "Lien pair-à-pair direct",
"group.noDirectLink": "Pas encore de lien direct - les messages passent par un autre membre pendant qu'il s'établit",
"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à de la signature ni modifier vos propos. Le groupe continue d'essayer de les connecter directement.",
"group.relayOnlyOff": "Le mode relais uniquement est désactivé : chaque membre se connecte directement à vous et apprend votre adresse IP, y compris ceux invités par quelqu'un d'autre. Activez-le dans les réglages réseau si cela compte ici.",
"group.memberOffline": "{name} est hors ligne et ne recevra pas les messages. Cette personne reste membre : la retirer régénère les clés du groupe.",
"group.joinNote": "Les autres membres sauront que vous êtes dans ce groupe. Il n'y a pas d'historique à rattraper - un groupe démarre vide.",
"group.inviteSentNote": "Le groupe continue de fonctionner jusqu'à leur acceptation. Il n'y a pas d'historique à rattraper pour eux : ils ne verront que ce qui sera envoyé à partir de maintenant.",
"group.errNotCreated": "Groupe non créé",
"group.errNobodyAccepted": "Personne n'a accepté l'invitation à temps.",
"group.errNothingSent": "Rien n'a été envoyé ni vérifié. Fermez cette fenêtre et réessayez une fois tout le monde connecté.",
"group.errNotFormed": "Ce groupe n'a pas pu être formé.",
"group.errFull": "Ce groupe est complet.",
"group.errInviteFailed": "L'invitation n'a pas pu être envoyée - cette discussion n'est pas connectée.",
"group.errNoMemberList": "La personne qui a créé le groupe n'a jamais envoyé la liste des membres.",
"group.errUnsignedList": "La liste des membres n'a pas été signée par la personne qui a créé le groupe. Ne réessayez pas - prévenez-la.",
"group.errNotOwner": "Quelqu'un d'autre que le propriétaire du groupe a tenté de modifier les membres.",
"hdr.tagline": "Chiffré de bout en bout",
"hdr.netSettings": "Réglages réseau avancés",
"hdr.netSettingsTitle": "Réglages réseau avancés (STUN/TURN)",
"hdr.disconnect": "Se déconnecter",
"status.connected": "Connecté",
"status.connecting": "Connexion…",
"status.notConnected": "Non connecté",
"status.reconnecting": "Reconnexion…",
"status.retrying": "Nouvelle tentative…",
"status.verifying": "Vérification…",
"status.peerDisconnected": "Le correspondant s'est déconnecté",
"sec.replayProtection": "Protection contre le rejeu",
"sec.messageIntegrity": "Intégrité des messages (HMAC)",
"sec.forwardSecrecy": "Confidentialité persistante parfaite",
"sec.metadataProtection": "Protection des métadonnées",
"sec.trafficObfuscation": "Brouillage du trafic",
"sec.realTests": "Tests cryptographiques réels",
"sec.simulatedData": "Données simulées",
"sec.testPassed": "Test réussi",
"sec.testFailed": "Test échoué ou indisponible",
"sec.verificationDone": "Vérification cryptographique réelle terminée",
"sec.verificationInProgress": "Vérification de sécurité en cours…",
"sec.verificationWait": "Vérification de sécurité en cours…\nAttendez la fin de la vérification cryptographique en temps réel.",
"sec.verificationUnavailable": "Vérification de sécurité indisponible",
"chat.placeholder": "Écrivez un message chiffré…",
"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 · mise en forme conservée · ⌘↵ pour envoyer",
"chat.viewOnce": "Vue unique",
"chat.viewOnceTitle": "Vue unique - disparaît dès que votre correspondant l'a lu",
"chat.viewOncePrefix": "Vue unique · ",
"chat.viewOnceTap": "Vue unique · touchez pour afficher",
"chat.viewedOnce": "Déjà vu",
"chat.disappearing": "Message éphémère - supprimé des deux côtés",
"chat.disappearAfter": "Disparaît après",
"chat.visibleFor": "Visible pendant",
"chat.timerPrefix": "Minuteur · ",
"chat.expired": "Ce message a expiré",
"chat.deleteForEveryone": "Supprimer pour tout le monde",
"chat.sending": "Envoi",
"chat.delivered": "Remis",
"chat.notSent": "Non envoyé",
"chat.notSentReason": "Non envoyé - le canal sécurisé n'est pas prêt. Reconnectez-vous pour continuer.",
"chat.encrypted": "Chiffré",
"chat.decrypted": "Déchiffré",
"chat.encryptedOnDevice": "Chiffré sur votre appareil",
"chat.uploading": "Envoi",
"chat.downloading": "Téléchargement",
"chat.transferring": "Transfert…",
"chat.copied": "Copié !",
"chat.collapse": "Replier",
"chat.closeMenu": "Fermer le menu",
"chat.newChat": "Nouvelle discussion",
"chat.newGroup": "Nouveau groupe",
"chat.createGroup": "Créer un groupe",
"chat.groupChats": "Groupes",
"chat.secureChat": "Discussion sécurisée",
"chat.nameThis": "Nommez cette discussion",
"chat.rename": "Renommer la discussion (en local)",
"chat.renameHint": "Double-cliquez pour renommer",
"chat.localLabel": "Nom local · stocké uniquement sur cet appareil",
"chat.setStatus": "Choisissez votre statut",
"chat.yourStatusPrefix": "Votre statut - ",
"chat.meshHint": "Jusqu'à 8 pairs · maillage P2P",
"chat.offline": "Hors ligne",
"chat.noNetwork": "Pas de réseau · reconnexion",
"chat.startVoiceCall": "Lancer un appel vocal chiffré",
"chat.startVideoCall": "Lancer un appel vidéo chiffré",
"chat.verifyForCalls": "Vérifiez la session pour activer les appels",
"chat.e2eeNote": "Chaque message est chiffré de bout en bout sur votre appareil avant de partir.",
"chat.peersOnly": "Envoyé de bout en bout aux seuls pairs connectés - jamais stocké sur un serveur.",
"flow.invitationCreated": "Invitation sécurisée créée",
"flow.invitationCreatedBang": "Invitation sécurisée créée et chiffrée.",
"flow.responseCreated": "Réponse sécurisée créée",
"flow.responseCreatedBang": "Réponse sécurisée créée.",
"flow.sendInvitation": "Envoyez le code d'invitation à votre correspondant par un canal sûr (appel, SMS, etc.).",
"flow.sendResponse": "Envoyez le code de réponse à la personne qui a ouvert le canal par un canal sûr, ou laissez-la scanner le QR ci-dessous.",
"flow.sendEncryptedCode": "Envoyer le code chiffré",
"flow.sendTheResponse": "Envoyer la réponse",
"flow.pasteOrWrite": "Collez ou saisissez le code…",
"flow.processingInvitation": "Traitement de l'invitation sécurisée…",
"flow.processingResponse": "Traitement de la réponse sécurisée…",
"flow.finalizing": "Finalisation de la connexion sécurisée…",
"flow.channelEstablished": "Canal sécurisé établi",
"flow.channelReady": "Le canal sécurisé est prêt",
"flow.restoring": "Rétablissement de la connexion…",
"flow.invitationCaptured": "Invitation capturée.",
"err.needInvitation": "Vous devez coller le code d'invitation de votre correspondant.",
"err.needResponse": "Vous devez coller le code de réponse de votre correspondant.",
"err.responseFormat": "Format de réponse invalide - vérifiez le code",
"err.responseNoKey": "Code de réponse invalide - clé cryptographique manquante ou abîmée. Vérifiez le code et réessayez.",
"err.responseNoSignKey": "Code de réponse invalide - clé de vérification de signature manquante. Vérifiez le code et réessayez.",
"err.responseOutdated": "Les données de réponse sont périmées - utilisez une invitation récente",
"err.setupError": "Erreur lors de l'établissement de la connexion",
"err.notReady": "Connexion pas encore prête",
"err.securityBreach": "Faille de sécurité détectée - connexion refusée",
"err.securityValidation": "Échec du contrôle de sécurité - attaque possible",
"err.retiredQr": "Ce QR utilise un format abandonné qui n'a pas permis de transférer l'invitation. Demandez-en un nouveau, ou utilisez le copier-coller.",
"err.compressedQrNote": "Un QR compressé peut omettre le SDP par concision. Utilisez le copier-coller si la connexion échoue.",
"err.inviteNotConnected": "L'invitation n'a pas pu être envoyée. Cette discussion n'est pas connectée pour le moment.",
"err.inviteNotConnectedRetry": "L'invitation n'a pas pu être envoyée. Cette discussion n'est pas connectée pour le moment - rouvrez-la et réessayez.",
"err.nobodyAccepted": "Personne n'a accepté l'invitation. Le groupe est inchangé.",
"err.noAudio": "Aucun son enregistré - vérifiez l'autorisation du micro et réessayez.",
"err.voiceNeedsConnection": "Un message vocal demande une connexion sécurisée active. Reconnectez-vous et réessayez.",
"err.voiceRestoring": "Rétablissement de la connexion - réessayez d'envoyer le message vocal dans un instant.",
"err.fileTooLarge": "Fichier trop volumineux",
"sas.safetyNumber": "Numéro de sécurité",
"sas.incorrect": "Code incorrect. Vérifiez-le avec votre correspondant et réessayez.",
"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 été réinitialisée par sécurité.",
"sas.verificationFailed": "Vérification échouée",
"sas.verified": "Vérifié · confidentialité persistante parfaite",
"sas.runVerification": "Lancer la vérification de sécurité",
"sec.panelTitle": "Détails réseau et cryptographie",
"sec.security": "Sécurité",
"sec.transport": "Transport",
"sec.keyExchange": "Échange de clés",
"sec.allEnabled": "Toutes les protections sont actives par défaut",
"sec.realTimeNote": "Vérification en temps réel avec de vraies fonctions cryptographiques - aucune donnée factice.",
"sec.simulatedWarning": "Attention : la connexion n'est peut-être pas entièrement établie - les valeurs peuvent être simulées.",
"dl.title": "Télécharger SecureBit",
"dl.free": "Gratuit · code ouvert",
"dl.soon": "Les applications mobiles (iOS, Android) et les extensions de navigateur (Chrome, Firefox, Opera) arrivent bientôt.",
"chatHdr.chat": "Discussion",
"chatHdr.chats": "Discussions",
"chatHdr.newChat": "+ Nouvelle",
"chatHdr.secure": "Sécurisé",
"chatHdr.p2pSub": "P2P · chiffré de bout en bout",
"chatHdr.save": "Enregistrer",
"chatHdr.close": "Fermer",
"chatHdr.expand": "Agrandir",
"chatHdr.you": "Vous",
"chatHdr.qrCode": "QR code",
"chat.disconnected": "Déconnecté",
"call.mute": "Couper le micro",
"call.endShort": "Fin",
"group.add": "Ajouter",
"group.send": "Envoyer",
"sec.pfsShort": "Confidentialité 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é",
"presence.offline": "Hors ligne",
"presence.invisible": "Invisible",
"presence.availableDesc": "En ligne et joignable",
"presence.awayDesc": "Inactif · momentanément absent",
"presence.busyDesc": "Ne pas déranger",
"presence.invisibleDesc": "Apparaître hors ligne pour les autres",
"presence.online": "En ligne",
"conn.p2p": "P2P · connecté",
"conn.verifying": "Vérification…",
"conn.connecting": "Connexion…",
"conn.reconnecting": "Reconnexion…",
"conn.peerDisconnected": "Le correspondant s'est déconnecté",
"conn.disconnected": "Déconnecté",
"chat.defaultLabel": "Discussion",
"groupPhase.forming": "Formation…",
"groupPhase.commitments": "Échange des engagements…",
"groupPhase.revealing": "Révélation…",
"groupPhase.compare": "Comparez le code du groupe",
"groupPhase.ready": "Groupe prêt",
"groupPhase.failed": "Groupe non créé",
"call.qualityGood": "Bonne",
"call.qualityFair": "Correcte",
"call.qualityWeak": "Faible",
"msg.code": "Code",
"msg.timer": "Minuteur",
"msg.voice": "Voix",
"msg.play": "Lire",
"msg.sent": "Envoyé",
"msg.read": "Lu",
"report.title": "Vérification de sécurité en temps réel",
"report.active": "Actif",
"report.testsPassed": "Tests réussis",
"report.verifiedAt": "Vérifié le",
"report.source": "Source",
"secTest.verifyECDHKeyExchange": "Échange de clés ECDH",
"secTest.verifyECDSASignatures": "Signatures numériques ECDSA",
"secTest.verifyEncryption": "Chiffrement AES-GCM",
"secTest.verifyMessageIntegrity": "Intégrité des messages",
"secTest.verifyPerfectForwardSecrecy": "Confidentialité persistante parfaite",
"secTest.verifyPFS": "Confidentialité persistante parfaite",
"secTest.verifyReplayProtection": "Protection contre le rejeu",
"secTest.verifyDTLSFingerprint": "Empreinte DTLS",
"secTest.verifySASVerification": "Vérification SAS",
"secTest.verifyMetadataProtection": "Protection des métadonnées",
"secTest.verifyTrafficObfuscation": "Brouillage du trafic",
"secTest.verifyPacketPadding": "Remplissage de paquets",
"secTest.verifyNestedEncryption": "Chiffrement imbriqué",
"secTest.verifyNonExtractableKeys": "Clés non extractibles",
"secTest.verifyRateLimiting": "Limitation du débit",
"secTest.verifyMutualAuth": "Authentification mutuelle",
"secTest.verifyAuthProof": "Preuve d'authentification",
"secTest.verifyEnhancedValidation": "Validation renforcée",
"secTest.verifyAdvancedFeatures": "Fonctions avancées",
"secTest.verifySignature": "Contrôle de signature",
"secDetail.Security system initializing...": "Démarrage du système de sécurité…",
"secDetail.Nested encryption active": "Chiffrement imbriqué actif",
"secDetail.Nested encryption failed": "Échec du chiffrement imbriqué",
"secDetail.Packet padding active": "Remplissage de paquets actif",
"secDetail.Packet padding failed": "Échec du remplissage de paquets",
"secDetail.Advanced features active": "Fonctions avancées actives",
"secDetail.Advanced features failed": "Échec des fonctions avancées",
"secDetail.No encryption key available": "Aucune clé de chiffrement disponible",
"secDetail.AES-GCM encryption/decryption working correctly": "Le chiffrement et le déchiffrement AES-GCM fonctionnent correctement",
"secDetail.No ECDH key pair available": "Aucune paire de clés ECDH disponible",
"secDetail.Key derivation failed": "Échec de la dérivation de clé",
"secDetail.No ECDSA key pair available": "Aucune paire de clés ECDSA disponible",
"secDetail.ECDSA digital signatures working correctly": "Les signatures numériques ECDSA fonctionnent correctement",
"secDetail.MAC key not available or invalid": "Clé MAC absente ou invalide",
"secDetail.Rate limiter did not block a message over the limit": "Le limiteur n'a pas bloqué un message au-delà de la limite",
"secDetail.Rate limiter is not available": "Le limiteur de débit 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érification 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és ECDH éphémères 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é persistante au niveau de la session seulement : les clés sont éphémères pour chaque session, mais le Double Ratchet n'est pas actif sur cette connexion (le correspondant utilise une version plus ancienne), donc une clé de session compromise expose toute la conversation.",
"msg.pause": "Pause",
"msg.failed": "Échec",
"groupErr.timeout": "Un membre a cessé de répondre avant que le code soit prêt.",
"groupErr.keyMismatch": "La clé d'un membre ne correspondait pas à l'identité annoncée.",
"groupErr.revealMismatch": "La valeur révélée par un membre ne correspondait pas à son engagement.",
"groupErr.commitChanged": "Un membre a changé son engagement en cours de route.",
"groupErr.missingKey": "Un membre figurait sur la liste alors que sa clé n'est jamais arrivée.",
"groupErr.outsider": "Une trame est arrivée de quelqu'un extérieur au groupe.",
"groupErr.limit": "Un groupe est limité à huit membres.",
"groupErr.tooLarge": "Un message était trop volumineux pour être envoyé 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éinitialiser",
"qrScan.autoScroll": "Défilement automatique activé",
"qrScan.starting": "Démarrage de la caméra…",
"qrScan.point": "Visez le QR de votre correspondant",
"qrScan.tapFocus": "Touchez l'écran pour faire la mise au point",
"qrScan.focusing": "Mise au point…",
"iceErr.notArray": "La liste de serveurs doit être un tableau",
"iceErr.invalidJson": "JSON invalide",
"iceErr.tooMany": "Trop de serveurs (maximum {max})",
"iceErr.invalidEntry": "{label} : entrée invalide",
"iceErr.urlCount": "{label} : entre 1 et {max} URL requises",
"iceErr.turnCreds": "{label} : les serveurs TURN demandent en général un nom d'utilisateur et un identifiant",
"iceUrl.notString": "L'URL doit être une chaîne",
"iceUrl.empty": "L'URL est vide",
"iceUrl.tooLong": "L'URL est trop longue",
"iceUrl.badChars": "L'URL contient des caractères invalides",
"iceUrl.badScheme": "L'URL doit commencer par stun:, stuns:, turn: ou turns:",
"iceUrl.badQuery": "L'URL contient une requête invalide",
"iceUrl.noHost": "Il manque un hôte à l'URL",
"iceUrl.badHost": "L'URL a un hôte ou un port invalide",
"iceUrl.badTransport": "La requête de l'URL doit être transport=udp ou transport=tcp",
"msg.off": "Désactivé",
"file.consentUnavailable": "Impossible de demander l'accord",
"secLevel.MAXIMUM": "MAXIMUM",
"secLevel.INITIALIZING": "DÉMARRAGE",
"secLevel.ERROR": "ERREUR",
"secLevel.UNKNOWN": "INCONNU",
"status.error": "Erreur",
"offline.disconnect": "Se déconnecter",
"offline.learnMore": "En savoir plus",
"pwa.installApp": "Installer l'application",
"chat.onWeb": "Vous êtes sur la version web",
"groupCall.startVoice": "Démarrer un appel vocal de groupe",
"groupCall.startVideo": "Démarrer un appel vidéo de groupe",
"groupCall.join": "Rejoindre",
"groupCall.dismiss": "Pas maintenant",
"groupCall.leave": "Quitter l'appel",
"groupCall.you": "Vous",
"groupCall.connecting": "Connexion…",
"groupCall.waitingLink": "En attente d'un lien direct…",
"groupCall.legFailed": "Connexion impossible",
"groupCall.startedVoice": "{name} a démarré un appel vocal",
"groupCall.startedVideo": "{name} a démarré un appel vidéo",
"groupCall.inCall": "{count} dans l'appel",
"groupCall.err.permission_denied": "L'appel n'a pas pu démarrer - l'accès au micro et à la caméra est bloqué. Autorisez-le pour ce site, puis réessayez.",
"groupCall.err.device_not_found": "L'appel n'a pas pu démarrer - aucun micro n'a été trouvé sur cet appareil.",
"groupCall.err.device_busy": "L'appel n'a pas pu démarrer - votre micro est utilisé par une autre application. Fermez-la et réessayez.",
"groupCall.err.media_failed": "L'appel n'a pas pu démarrer - le micro n'a pas pu être ouvert.",
"groupCall.err.call_in_progress": "Un appel est déjà en cours dans ce groupe. Rejoignez-le plutôt que d'en démarrer un autre.",
"groupCall.err.not_ready": "Confirmez le code du groupe avant d'appeler.",
"groupCall.speaking": "{name} parle",
"groupCall.pin": "Afficher {name} en grand",
"groupCall.unpin": "Revenir à tous",
"groupCall.showEveryone": "Tout le monde",
"msg.after5s": "5 s après lecture",
"msg.after15s": "15 s après lecture",
"msg.after30s": "30 s après lecture",
"msg.after1m": "1 min après lecture",
"msg.sec30": "30 secondes",
"msg.min5": "5 minutes",
"msg.hour1": "1 heure",
"desktop.shareDesc": "Envoyez le code à votre pair. Il est à usage unique et expire rapidement.",
"desktop.invitationCreated": "Invitation sécurisée créée - envoyez-la à votre pair.",
"desktop.joinDesc": "Collez le code d'invitation de votre pair pour construire votre réponse sécurisée.",
"desktop.offerTag": "invitation · copier le texte",
"desktop.answerTag": "réponse · copier le texte",
"desktop.offerPlaceholder": "Le code d'invitation apparaîtra ici…",
"desktop.answerPlaceholder": "Le code de réponse apparaîtra ici…",
"desktop.backToChats": "Retour aux discussions",
"desktop.sendFeedback": "Envoyer un retour",
"desktop.callsNeedVerified": "Les appels nécessitent un canal sécurisé vérifié.",
"desktop.noOpenChannel": "Aucun canal sécurisé ouvert.",
"desktop.chatCarriesCall": "Cette discussion porte un appel de groupe. Quittez l'appel de groupe avant de lancer un appel à deux.",
"desktop.err.permission_denied": "L'appel n'a pas pu démarrer - l'accès au micro et à la caméra est bloqué. Autorisez-le dans les réglages système, puis réessayez.",
"desktop.language": "Langue",
"desktop.languageHint": "S'applique immédiatement. Les messages déjà envoyés gardent leurs mots.",
"desktop.compareCode": "Comparez le code de vérification avec votre pair et confirmez sil correspond.",
"desktop.verifyBeforeFiles": "Terminez la vérification avant denvoyer des fichiers.",
"desktop.verifyBeforeSending": "Terminez la vérification avant denvoyer des messages.",
"desktop.disconnectedByBackend": "Connexion fermée de façon sécurisée.",
"desktop.restoreFailed": "Impossible de rétablir la connexion. Fermeture de cette discussion.",
"desktop.channelNotReady": "Le canal de données nest pas encore disponible. Attendez que la connexion soit établie.",
"desktop.enterCode": "Saisissez le code de vérification pour confirmer.",
"desktop.noOffer": "Aucune invitation trouvée. Créez-en une dabord.",
"desktop.notInitiator": "Vous navez pas créé cette connexion, il ny a donc aucune réponse à appliquer.",
"desktop.decryptFailed": "Un message na pas pu être déchiffré et a été écarté.",
"desktop.badMessageFormat": "Une trame mal formée est arrivée et a été écartée.",
"desktop.notSentNotReady": "Message non envoyé : le canal sécurisé nest pas prêt. Attendez la fin de la vérification ou reconnectez-vous.",
"desktop.micDenied": "Laccès au micro a été refusé.",
"desktop.noChannelWait": "Aucun canal sécurisé ouvert - attendez que la connexion soit établie.",
"desktop.sasFailed": "Échec de la vérification. Un intermédiaire est peut-être présent : la connexion a été interrompue.",
"desktop.sasOk": "Vérification réussie. Ce canal est authentifié de bout en bout.",
"desktop.iceForgotten": "Serveurs enregistrés oubliés. Utilisation des serveurs ICE publics.",
"desktop.icePublic": "Utilisation des serveurs ICE publics.",
"desktop.verificationInProgress": "La vérification de sécurité est encore en cours. Attendez la fin.",
"desktop.fileGone": "Ce fichier nest plus disponible au téléchargement.",
"desktop.codeMismatch": "Les codes de vérification ne correspondent pas. Déconnexion par sécurité.",
"desktop.noLocalCode": "Échec de la vérification : aucun code dérivé localement à comparer. Déconnexion par sécurité.",
"desktop.protocolViolation": "Le pair a affirmé que le code était confirmé avant que vous ne le confirmiez. Déconnexion par sécurité.",
"desktop.verificationRejected": "Vérification rejetée. La connexion a été interrompue par sécurité.",
"secLevel.HIGH": "ÉLEVÉ",
"secLevel.MEDIUM": "MOYEN",
"secLevel.LOW": "FAIBLE",
"desktop.rerun": "Relancer",
"desktop.ice.customDesc": "Jusqu'à {max} serveurs, une URL par ligne ou du JSON.",
"desktop.ice.persistDesc": "Enregistré localement sur cet appareil. Laissez désactivé pour ne lutiliser que pendant cette session.",
"desktop.group.leaveNote": "Les autres membres sont informés de votre départ. Rien de ce groupe ne reste ensuite sur cet appareil - aucun serveur nen garde de copie, il vous faudrait donc une nouvelle invitation.",
"desktop.sec.ecdsaOk": "Signature du paquet de clés du pair vérifiée pendant la poignée de main (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "Aucune poignée de main achevée",
"desktop.sec.ecdhOk": "Clés de session dérivées dun échange ECDH P-384 éphémère via HKDF-SHA-256",
"desktop.sec.ecdhNone": "Aucune clé de session dérivée",
"desktop.sec.encryptionOk": "Chiffrement et déchiffrement AES-GCM vérifiés dans le cœur",
"desktop.sec.encryptionNa": "Lautotest AES-GCM na pas pu être exécuté",
"desktop.sec.integrityOk": "Intégrité des messages vérifiée (authentification AES-GCM)",
"desktop.sec.integrityNa": "Lautotest dintégrité na pas pu être exécuté",
"desktop.sec.pfsOk": "Double Ratchet actif - chaque message a sa propre clé",
"desktop.sec.pfsNa": "Non mesuré",
"desktop.sec.replayOk": "Les clés de message du ratchet sont détruites après usage : une trame capturée ne peut pas être rejouée",
"desktop.sec.replayNa": "Non mesuré",
"desktop.sec.dtlsPinned": "Empreinte DTLS du pair épinglée : {fp}",
"desktop.sec.dtlsNone": "Aucune empreinte DTLS distante disponible",
"desktop.sec.sasBoth": "Les deux pairs ont confirmé le code de sécurité hors bande",
"desktop.sec.sasIncomplete": "Le code de sécurité na pas été confirmé par les deux pairs",
"desktop.sec.metadataOk": "Une clé de métadonnées dédiée a été dérivée (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "Aucune clé de métadonnées",
"desktop.sec.coverOn": "Trafic de couverture actif : trames factices aléatoires (32-128 o toutes les 15-30 s) sur le canal à ratchet",
"desktop.sec.coverOff": "Le générateur de trafic de couverture ne tourne pas",
"desktop.sec.coverUnsupported": "Le trafic de couverture exige une session Double Ratchet (le pair utilise une version plus ancienne)",
"desktop.tagline": "La liberté de bout en bout",
"desktop.callsNotHere": "Les appels ne sont pas encore disponibles dans cette version. Les messages, les fichiers et les discussions de groupe fonctionnent normalement."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["fr"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "שפה",
"language.suggest.text": "הדף הזה זמין גם בעברית.",
"language.suggest.cta": "לקריאה בעברית",
"language.suggest.dismiss": "סגירה",
"community.title": "הצטרפו לעתיד של הפרטיות",
"community.description": "SecureBit גדל בזכות הקהילה שלו. הרעיונות והמשוב שלכם מעצבים את עתיד התקשורת המאובטחת - נבנה בגלוי, עם אימות ASN.1 מלא מקצה לקצה.",
"community.github": "מאגר GitHub",
"community.feedback": "משוב",
"unique.eyebrow": "מה מייחד אותנו",
"unique.heading": "למה SecureBit ייחודי",
"unique.s1.titleTop": "ליבת הצפנה",
"unique.s1.titleBottom": "רב־שכבתית",
"unique.s1.collapsed": "ליבת ההצפנה",
"unique.s1.desc": "חילופי מפתחות ECDH P-384, מטענים ב-AES-256-GCM, חתימות ECDSA ואימות ASN.1 מלא - מורכבים לצינור מוקשח אחד.",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "עמית־לעמית",
"unique.s2.titleBottom": "טהור ב-WebRTC",
"unique.s2.collapsed": "WebRTC עמית־לעמית טהור",
"unique.s2.desc": "ההודעות עוברות ישירות בין המכשירים דרך WebRTC. אף ממסר לא מחזיק את הנתונים שלכם - השרת רק עוזר לשני עמיתים למצוא זה את זה.",
"unique.s2.tags": [
"DTLS 1.3",
"בלי ממסר"
],
"unique.s3.titleTop": "סודיות קדימה",
"unique.s3.titleBottom": "מושלמת",
"unique.s3.collapsed": "סודיות קדימה",
"unique.s3.desc": "מפתחות הפעלה מתחלפים ברציפות ונמחקים לאחר השימוש, כך שמפתח אחד שנחשף לעולם לא יפתח שיחות מהעבר.",
"unique.s3.tags": [
"מפתחות זמניים",
"החלפה אוטומטית"
],
"unique.s4.titleTop": "ערפול",
"unique.s4.titleBottom": "תעבורה",
"unique.s4.collapsed": "ערפול תעבורה",
"unique.s4.desc": "גדלי המנות והתזמונים מרופדים ומעורבלים, ומסתירים דפוסי מטא־נתונים מכל מי שמאזין לקו.",
"unique.s4.tags": [
"ריפוד מנות",
"רעש בתזמון"
],
"unique.s5.titleTop": "אפס",
"unique.s5.titleBottom": "איסוף נתונים",
"unique.s5.collapsed": "אפס איסוף נתונים",
"unique.s5.desc": "בלי חשבונות, בלי יומנים, בלי אחסון הודעות. אין שום דבר בשרת שאפשר להדליף, לזמן בצו או למכור.",
"unique.s5.tags": [
"בלי חשבונות",
"בלי יומנים"
],
"partners.eyebrow": "שותפים ואקוסיסטם",
"partners.heading": "השותפים שלנו סומכים עלינו",
"partners.aegis.desc": "שותף הון שמאבטח תקשורת פיננסית חסויה בכל תיק ההשקעות שלו.",
"partners.aegis.role": "תומך אסטרטגי",
"partners.furilabs.desc": "טלפוני לינוקס שמעמידים פרטיות בראש ומשלבים את SecureBit כערוץ מאובטח כברירת מחדל.",
"partners.furilabs.role": "שותף טכנולוגי",
"partners.inviteTitle": "היו שותפים",
"partners.inviteDesc": "בונים חומרה או תשתית לפרטיות? בואו נשלב את SecureBit.",
"partners.inviteCta": "פתחו שיחה",
"roadmap.eyebrow": "מפת דרכים לפיתוח",
"roadmap.heading": "ההתפתחות של SecureBit",
"roadmap.subheading": "מהאב־טיפוס הראשון ועד רשת מבוזרת עמידה לקוונטים - עם אימות ASN.1 מלא בכל שכבה.",
"roadmap.progress": "{shipped} מתוך {total} אבני דרך הושלמו",
"roadmap.upcoming": "{upcoming} בדרך",
"roadmap.keyFeatures": "יכולות מרכזיות",
"roadmap.status.released": "שוחרר",
"roadmap.status.current": "נוכחי",
"roadmap.status.dev": "בפיתוח",
"roadmap.status.planned": "מתוכנן",
"roadmap.status.research": "מחקר",
"hero.headlineTop": "קו ישיר",
"hero.headlineBottom": "שרק שניכם יכולים לקרוא.",
"hero.subheading": "המפתחות נוצרים במכשיר שלכם ומוחלפים עמית־לעמית. בלי חשבונות, בלי שרתים ששומרים את ההודעות.",
"hero.diagramAlt": "קו מוצפן ישיר לעמית אחד, כששני עמיתים נוספים מצטרפים לרשת",
"intro.createTitle": "פתחו ערוץ חדש",
"intro.createDesc": "המכשיר שלכם יוצר את המפתחות והזמנה חד־פעמית. שום דבר לא נוגע בשרת.",
"intro.createCta": "יצירת מפתחות והזמנה",
"intro.joinTitle": "הצטרפו לערוץ",
"intro.scanTitle": "סרקו QR עם המצלמה",
"intro.scanSubtitle": "הכי מהיר - כוונו למסך של העמית",
"intro.orPasteCode": "או הדביקו קוד",
"intro.pastePlaceholder": "הדביקו כאן את קוד ההזמנה…",
"intro.connect": "התחברו",
"intro.connecting": "מעבד…",
"roadmap.r1.title": "תחילת הפיתוח",
"roadmap.r1.sub": "רעיון, אב־טיפוס והקמת תשתית",
"roadmap.r1.date": "תחילת 2025",
"roadmap.r1.features": [
"גיבוש הרעיון והדרישות",
"בחירת מחסנית: WebRTC, P2P, קריפטוגרפיה",
"אבות־טיפוס ראשונים למסרים",
"יצירת מאגר ואינטגרציה רציפה",
"ארכיטקטורת הצפנה בסיסית",
"עיצוב חוויה וממשק"
],
"roadmap.r2.title": "גרסת אלפא",
"roadmap.r2.sub": "אלפא ציבורית ראשונה: צ'אט בסיסי וחילופי מפתחות",
"roadmap.r2.date": "אביב 2025",
"roadmap.r2.features": [
"מסרים עמית־לעמית בסיסיים דרך WebRTC",
"הצפנה פשוטה מקצה לקצה (סכמת הדגמה)",
"איתות יציב והתחברות מחדש",
"ממשק מינימלי לבדיקות",
"איסוף משוב מבודקים מוקדמים"
],
"roadmap.r3.title": "חיזוק אבטחה",
"roadmap.r3.sub": "חיזוק האבטחה ושחרור ענף יציב",
"roadmap.r3.date": "קיץ 2025",
"roadmap.r3.features": [
"מימוש ECDH/ECDSA בסביבת ייצור",
"סודיות קדימה מושלמת והחלפת מפתחות",
"שיפור בדיקות האימות",
"הצפנת קבצים והעברת מטענים גדולים",
"ביקורת על תהליכי הקריפטו הבסיסיים"
],
"roadmap.r4.title": "התרחבות ויציבות",
"roadmap.r4.sub": "הרחבת הרשת ושיפור היציבות",
"roadmap.r4.date": "סתיו 2025",
"roadmap.r4.features": [
"ייעול חיבורי P2P וחציית NAT",
"מנגנוני התחברות מחדש ותורי הודעות",
"צריכת סוללה מופחתת בנייד",
"תמיכה בסנכרון בין מכשירים",
"כלי ניטור ורישום למפתחים"
],
"roadmap.r5.title": "גרסת פרטיות תחילה",
"roadmap.r5.sub": "התמקדות בפרטיות: מזעור מטא־נתונים",
"roadmap.r5.date": "חורף 2025",
"roadmap.r5.features": [
"הגנת מטא־נתונים והקטנת טביעת אצבע",
"ניסויים בניתוב בצל וב-DHT",
"אפשרויות לחיבורים אנונימיים",
"היערכות לביקורת קוד פתוחה",
"שיפור תהליכי אימות המשתמשים"
],
"roadmap.r6.title": "מהדורת אבטחה מוגברת",
"roadmap.r6.sub": "קריפטוגרפיה ברמה צבאית ב-18 שכבות עם אימות ASN.1 מלא",
"roadmap.r6.date": "סוף 2025",
"roadmap.r6.features": [
"אבטחה תלת־שכבתית: ECDH, DTLS ו-SAS",
"הצפנת ECDH P-384 עם AES-GCM 256 סיביות",
"אימות טביעת אצבע DTLS",
"אימות SAS (מחרוזת אימות קצרה)",
"סודיות קדימה מושלמת עם החלפת מפתחות",
"מניעה מוגברת של התקפות אדם באמצע",
"אימות ASN.1 DER מלא",
"אימות OID ונקודות עקומה",
"אימות מבנה SPKI",
"ארכיטקטורת WebRTC עמית־לעמית",
"הגנת מטא־נתונים",
"קוד פתוח ב-100%"
],
"roadmap.r7.title": "מהדורת שולחן עבודה",
"roadmap.r7.sub": "אפליקציות מקוריות ל-Windows, macOS ולינוקס",
"roadmap.r7.date": "תחילת 2026",
"roadmap.r7.features": [
"אפליקציית Windows (Tauri v2)",
"אפליקציית macOS (Tauri v2)",
"תמיכת AppImage בלינוקס‏ (Tauri v2)",
"התראות בזמן אמת",
"התחברות מחדש אוטומטית",
"סנכרון בין מכשירים",
"שיפור חוויה וממשק",
"תמיכה בקבצים עד 100MB"
],
"roadmap.r8.title": "קול ושיחות מאובטחות",
"roadmap.r8.sub": "הודעות קוליות, שיחות אודיו ווידאו מוצפנות",
"roadmap.r8.date": "תחילת 2026",
"roadmap.r8.features": [
"הודעות קוליות מוצפנות מקצה לקצה",
"שיחות אודיו מוצפנות 1:1 (WebRTC)",
"שיחות וידאו מוצפנות 1:1 (WebRTC)",
"סודיות קדימה מושלמת למדיה חיה",
"זרמי מדיה מוגני SRTP/DTLS",
"אימות SAS תוך כדי שיחה",
"התראות שיחה והתחברות מחדש אוטומטית",
"מדיה עמית־לעמית בהשהיה נמוכה"
],
"roadmap.r9.title": "תקשורת קבוצתית",
"roadmap.r9.sub": "צ'אטים קבוצתיים תוך שמירה על הפרטיות",
"roadmap.r9.date": "עכשיו",
"roadmap.r9.features": [
"צ'אטים קבוצתיים עמית־לעמית עד 8 משתתפים",
"מסירה ברשת עם גיבוי ממסר חתום",
"קוד בטיחות קבוצתי אחד שכולם משווים",
"טקס התחייבות־ואז־חשיפה נגד ניחוש הקוד",
"מפתחות זהות לכל קבוצה, זמניים מעצם התכנון",
"חברוּת חתומה עם סדר לפי תקופות",
"הודעות חתומות, כך שתמליל מפוצל ניתן להוכחה",
"בלי שרת, בלי מפתח קבוצתי משותף, בלי היסטוריה"
],
"roadmap.r10.title": "מהדורת נייד",
"roadmap.r10.sub": "אפליקציות מקוריות ל-iOS ואנדרואיד",
"roadmap.r10.date": "רבעון 2 2027",
"roadmap.r10.features": [
"אפליקציית iOS מקורית‏ (Swift/SwiftUI)",
"אפליקציית אנדרואיד מקורית‏ (Kotlin/Jetpack Compose)",
"תמיכת PWA בדפדפני נייד",
"התראות דחיפה בזמן אמת",
"אופטימיזציית סוללה",
"ממשק מותאם לנייד",
"תור הודעות במצב לא מקוון",
"אימות ביומטרי"
],
"roadmap.r11.title": "מהדורה עמידה לקוונטים",
"roadmap.r11.sub": "הגנה מפני מחשבים קוונטיים",
"roadmap.r11.date": "רבעון 4 2027",
"roadmap.r11.features": [
"קריפטוגרפיה פוסט־קוונטית CRYSTALS-Kyber",
"חתימות דיגיטליות SPHINCS+",
"סכמה היברידית: קלאסי + פוסט־קוונטי",
"חילופי מפתחות בטוחים קוונטית",
"אלגוריתמי גיבוב מעודכנים",
"העברת הפעלות קיימות",
"תאימות ל-v5.x",
"פרוטוקולים עמידים לקוונטים"
],
"roadmap.r12.title": "רשת מבוזרת",
"roadmap.r12.sub": "רשת מבוזרת לחלוטין",
"roadmap.r12.date": "2028",
"roadmap.r12.features": [
"רשת צמתים מקושרת",
"DHT לגילוי עמיתים",
"ניתוב בצל מובנה",
"טוקנומיקה ותמריצים לצמתים",
"ממשל באמצעות DAO",
"יכולת פעולה הדדית עם רשתות אחרות",
"תאימות חוצת פלטפורמות",
"רשת שמרפאת את עצמה"
],
"roadmap.r13.title": "עוזר פרטיות מבוסס בינה מלאכותית",
"roadmap.r13.sub": "בינה מלאכותית לפרטיות ואבטחה",
"roadmap.r13.date": "2028 ואילך",
"roadmap.r13.features": [
"ניתוח איומים מקומי בבינה מלאכותית",
"זיהוי אוטומטי של אדם באמצע",
"קריפטוגרפיה אדפטיבית",
"המלצות אבטחה מותאמות אישית",
"למידת מכונה באפס ידע",
"עוזר בינה מלאכותית פרטי",
"אבטחה חזאית",
"הגנה אוטונומית מפני התקפות"
],
"handshake.step1": "יוצר זוג מפתחות ECDH P-384",
"handshake.step2": "גוזר קוד אימות",
"handshake.step3": "מקבע סודיות קדימה מושלמת",
"handshake.securingTitle": "מאבטח את הערוץ שלכם",
"handshake.answerTitle": "בונה את התשובה שלכם",
"handshake.securingDesc": "מחשל מפתחות חזקים דיים כדי לעמוד בחבלה.",
"handshake.shareTitle": "שתפו את ההזמנה",
"handshake.sendAnswerTitle": "שלחו בחזרה את התשובה",
"handshake.shareDesc": "הציגו את ה-QR או שלחו את הקוד לעמית. הוא חד־פעמי ופג בקרוב.",
"handshake.sendAnswerDesc": "מסרו את התשובה הזו ליוצר הערוץ כדי שיוכל להשלים את לחיצת היד.",
"handshake.establish": "יצירת חיבור",
"handshake.thenReceive": "ואז קבלו את התשובה שהעמית שולח בחזרה",
"handshake.pasteAnswerPlaceholder": "הדביקו את קוד התשובה של העמית…",
"handshake.answerSentNote": "שלחו את התשובה ליוצר ואז המתינו - הצ'אט נפתח ברגע שהם מתחברים.",
"handshake.qrHint": "השאירו פתוח עד שהעמית יקלוט את הקוד.",
"handshake.qrHintFrames": "לחיצת היד מפוצלת ל-{frames} פריימים - השאירו פתוח עד שהעמית יקלוט את כולם.",
"verify.title": "אימות אבטחה",
"verify.desc": "השוו את קוד הבטיחות הזה עם העמית בערוץ נפרד (שיחה קולית / פנים אל פנים), ואז הקלידו אותו כדי לפתוח את הצ'אט.",
"verify.enterLabel": "הזינו את הקוד המאומת",
"verify.placeholder": "הקלידו כאן את הקוד",
"verify.confirm": "אשרו את הקוד",
"verify.confirmed": "אושר",
"verify.mismatch": "לא תואמים",
"verify.yours": "האישור שלכם",
"verify.peer": "אישור העמית",
"verify.pending": "ממתין",
"verify.waiting": "ממתין לקוד…",
"verify.verified": "הערוץ אומת",
"verify.bothConfirmed": "שני הצדדים אישרו. פותח את הצ'אט המאובטח…",
"pwa.bannerTitle": "התקינו את SecureBit.chat",
"pwa.bannerDesc": "קבלו חוויית אפליקציה מקורית עם אבטחה משופרת",
"pwa.install": "התקנה",
"pwa.dismiss": "ביטול",
"pwa.close": "סגירה",
"pwa.iosTitle": "התקנה ב-iOS",
"pwa.iosStep1": "הקישו על כפתור השיתוף",
"pwa.iosStep1Hint": "בדרך כלל בתחתית ספארי",
"pwa.iosStep2": "מצאו \"הוסף למסך הבית\"",
"pwa.iosStep2Hint": "גללו מטה בתפריט השיתוף",
"pwa.iosStep3": "הקישו על \"הוסף\"",
"pwa.iosStep3Hint": "אשרו כדי להתקין את SecureBit.chat",
"pwa.genericTitle": "התקנת SecureBit",
"pwa.genericDesc": "לכל דפדפן דרך משלו להתקין. בחרו את השלבים שמתאימים לשלכם.",
"pwa.gotIt": "הבנתי",
"pwa.installedTitle": "האפליקציה הותקנה!",
"pwa.installedIos": "אפליקציית iOS הותקנה! פתחו ממסך הבית.",
"pwa.installedGeneric": "SecureBit.chat נמצא עכשיו במכשיר שלכם",
"pwa.anytimeTitle": "התקינו מתי שתרצו",
"pwa.anytimeDesc": "עדיין אפשר להתקין את SecureBit.chat מתפריט הדפדפן לחוויה הטובה ביותר.",
"pwa.ok": "אישור",
"step.open": "שלב 1 · פתיחת ערוץ",
"step.exchange": "שלב 2 · חילופים",
"step.verification": "שלב 3 · אימות",
"action.create": "יצירה",
"action.join": "הצטרפות",
"action.back": "חזרה",
"action.copy": "העתקה",
"action.copied": "הועתק",
"action.scan": "סריקה",
"action.downloadDesktop": "הורידו את אפליקציית שולחן העבודה",
"action.advancedSettings": "הגדרות מתקדמות",
"cred.offerTag": "הצעה · או העתיקו טקסט",
"cred.answerTag": "תשובה · או העתיקו טקסט",
"cred.reveal": "לחצו לחשיפה - שמרו את הקוד הזה פרטי",
"qr.title": "סריקת קוד QR",
"qr.subtitle": "כוונו את המצלמה ל-QR שלהם",
"qr.scanning": "סורק…",
"qr.hint": "החזיקו יציב עד שכל החלקים ייקלטו. הגישה למצלמה מקומית - שום דבר לא מועלה.",
"mesh.you": "אתם",
"mesh.peer": "עמית · הפעלה 1",
"mesh.joined2": "mara הצטרפה · +2",
"mesh.joined3": "tobi הצטרף · +3",
"ice.title": "הגדרות רשת",
"ice.subtitle": "מוגדרות מקומית - לעולם לא משותפות עם העמית",
"ice.intro": "SecureBit משתמש כברירת מחדל בשרתי STUN ציבוריים כדי לתאם את הקישור בין העמיתים. הפנו אותו ל-STUN/TURN שלכם אם אתם מארחים בעצמכם.",
"ice.publicTitle": "שרתים ציבוריים (ברירת מחדל)",
"ice.publicDesc": "בלי הגדרות. מתאים לרוב המשתמשים.",
"ice.customTitle": "שרתי STUN/TURN משלי",
"ice.customDesc": "עד {max} שרתים.",
"ice.turnNote": "ממסר TURN רואה את כתובות ה-IP של שני העמיתים ואת תזמון התעבורה - אך לעולם לא את תוכן ההודעות, שנשאר מוצפן מקצה לקצה. עדיף ",
"ice.turnNoteTls": " (TLS).",
"ice.test": "בדקו את השרתים",
"ice.testing": "בודק…",
"ice.relayTitle": "מצב ריליי בלבד",
"ice.relayBadge": "פרטיות מרבית",
"ice.relayDesc": "מנתב את כל התעבורה דרך TURN כך שכתובת ה-IP שלכם לעולם לא נחשפת לעמית. דורש שרת TURN.",
"ice.relayWarning": "מצב ריליי בלבד מופעל אך לא הוגדר שרת TURN. החיבור לא יוכל להתחיל.",
"ice.persist": "שמרו במכשיר הזה",
"ice.persistDesc": "נשמר מוצפן בדפדפן הזה. השאירו כבוי כדי להשתמש רק בהפעלה הנוכחית.",
"ice.forget": "שכחו את השמור",
"ice.cancel": "ביטול",
"ice.apply": "החלה",
"ice.errUnavailable": "WebRTC אינו זמין בדפדפן הזה",
"ice.errInvalid": "תצורת שרת לא תקינה",
"update.title": "יש עדכון",
"update.desc": "זוהתה גרסה חדשה יותר של SecureBit.",
"update.currentVersion": "גרסה נוכחית",
"update.newVersion": "גרסה חדשה",
"update.now": "עדכנו עכשיו",
"update.later": "מאוחר יותר",
"update.unknown": "לא זמין",
"update.stepSaving": "שומר נתונים...",
"update.stepSwCaches": "מנקה מטמוני Service Worker...",
"update.stepSwUnregister": "מבטל רישום Service Workers...",
"update.stepBrowserCache": "מנקה את מטמון הדפדפן...",
"update.stepVersion": "מעדכן גרסה...",
"update.stepReload": "טוען מחדש את היישום...",
"update.error": "שגיאת עדכון. רעננו את הדף ידנית (Ctrl+F5 או Cmd+Shift+R)",
"update.confirmSkip": "יש גרסה חדשה. מומלץ לעדכן למען האבטחה והיציבות. להמשיך בלי לעדכן?",
"offline.backOnline": "חזרנו לרשת",
"offline.mode": "מצב לא מקוון",
"offline.dismiss": "ביטול",
"offline.lostTitle": "החיבור אבד",
"offline.lostDesc": "SecureBit במצב לא מקוון. חלק מהיכולות מוגבלות, אבל הנתונים שלכם נשארים בטוחים.",
"offline.point1": "ההפעלה והמפתחות שלכם נשמרים",
"offline.point2": "שום נתון לא נשמר בשרתים",
"offline.point3": "הודעות וקבצים מסתנכרנים כשתתחברו מחדש",
"offline.continue": "המשיכו במצב לא מקוון",
"offline.restoredTitle": "כשתתחברו מחדש",
"offline.restoredDesc": "ניתוק לא עולה לכם בכלום. ‏SecureBit מציב הכל בתור מקומי ומחדש את ההפעלה המוצפנת ברגע שתחזרו לרשת.",
"offline.r1Title": "ההודעות שלכם נמסרות",
"offline.r1Desc": "כל מה שכתבתם במצב לא מקוון נשלח לאיש הקשר שלכם אוטומטית.",
"offline.r2Title": "הקבצים מסיימים לעבור",
"offline.r2Desc": "ההעלאות ממשיכות מהנקודה שבה נעצרו - אין צורך לשלוח שוב.",
"offline.r3Title": "ההודעות והקבצים שלהם מגיעים",
"offline.r3Desc": "כל מה שאיש הקשר שלח במהלך הניתוק נמסר לכם לפי הסדר.",
"offline.r4Title": "שום דבר לא הולך לאיבוד",
"offline.r4Desc": "אחרי ההתחברות מחדש אין פער - השיחה ממשיכה בדיוק מהמקום שבו נעצרה.",
"offline.gotIt": "הבנתי",
"qr.showTitle": "הצגת קוד QR",
"qr.showSubtitle": "מסך מלא · תנו לעמית לסרוק",
"qr.showSubtitleFrames": "מסך מלא · תנו לעמית לסרוק את כל {frames} הפריימים",
"notify.enabledBody": "ההתראות הופעלו! תקבלו התראות על הודעות חדשות.",
"notify.workingBody": "ההתראות עובדות! תקבלו התראות על הודעות חדשות.",
"pw.label": "הזנת סיסמה",
"pw.placeholder": "הזינו סיסמה...",
"pw.decrypt": "פענוח",
"pw.cancel": "ביטול",
"file.title": "העברות קבצים",
"file.drop": "גררו ושחררו קבצים כאן",
"file.dropHint": "מוצפנים מקצה לקצה לפני ההעברה · עד 100 MB",
"file.browse": "עיון במכשיר",
"file.incoming": "בקשת קובץ נכנסת",
"file.accept": "אישור",
"file.reject": "דחייה",
"file.download": "הורדה",
"file.notReady": "החיבור אינו מוכן",
"file.tooLarge": "הקובץ גדול מדי",
"file.typeNotAllowed": "סוג הקובץ אינו מורשה",
"file.maxConcurrent": "מקסימום העברות במקביל",
"file.gone": "הקובץ הזה כבר אינו זמין להורדה.",
"call.incoming": "שיחה נכנסת",
"call.incomingVideo": "שיחת וידאו נכנסת",
"call.encrypted": "שיחה מוצפנת",
"call.encryptedShort": "מוצפנת",
"call.peer": "עמית מאובטח",
"call.connecting": "מתחבר…",
"call.ringing": "מצלצל…",
"call.accept": "מענה",
"call.decline": "דחייה",
"call.end": "סיום שיחה",
"call.camera": "מצלמה",
"call.cameraOff": "המצלמה כבויה",
"call.peerCameraOff": "המצלמה של העמית כבויה",
"call.flipCamera": "החלפת מצלמה",
"call.addVideo": "הוספת וידאו",
"call.video": "וידאו",
"call.muted": "מושתק",
"call.expand": "הגדלה",
"call.minimize": "מזעור",
"call.quality": "איכות החיבור",
"call.qualityExcellent": "מצוינת",
"call.videoPrefix": "וידאו · ",
"call.voicePrefix": "קול · ",
"group.new": "קבוצה חדשה",
"group.create": "יצירת קבוצה",
"group.join": "הצטרפות לקבוצה",
"group.name": "שם הקבוצה",
"group.nameTooLong": "שם הקבוצה ארוך מדי.",
"group.capacity": "עד {max} אנשים, עמית־לעמית. כולם ישוו קוד בטיחות אחד לפני שהקבוצה נפתחת.",
"group.invite": "הזמנה",
"group.inviteMore": "הזמינו חברים נוספים",
"group.invitePeople": "הזמינו {count} אנשים",
"group.invitation": "הזמנה לקבוצה",
"group.addMembers": "הוספת חברים",
"group.roomFor": "יש מקום ל-{remaining} נוספים. כולם ישוו קוד קבוצתי חדש ברגע שיצטרפו.",
"group.membersCount": "{count} חברים",
"group.member": "חבר",
"group.members": "חברים",
"group.remove": "הסירו את {name}",
"group.message": "שלחו הודעה ל{name}",
"group.leave": "יציאה",
"group.leaveThis": "צאו מהקבוצה הזו",
"group.cancel": "ביטול הקבוצה",
"group.close": "סגירה",
"group.cancelBtn": "ביטול",
"group.decline": "דחייה",
"group.working": "עובד…",
"group.sasTitle": "קוד בטיחות קבוצתי",
"group.sasEveryone": "כולם רואים את הקוד הזה",
"group.sasCompare": "השוו את הקוד הקבוצתי עם כל חבר כדי לפתוח את הקבוצה.",
"group.sasReadAloud": "הקריאו את הספרות האלה בקול ל",
"group.sasWarning": "אם אפילו חבר אחד מקריא קוד שונה, מישהו יושב ביניכם. בטלו את הקבוצה - אל תאשרו.",
"group.confirmFirst": "אשרו קודם את הקוד הקבוצתי",
"group.codeSuffix": " · קוד {code}",
"group.exchangingNonces": "מחליף ערכים חד־פעמיים…",
"group.waitingCommit": "ממתין לכל חבר שיתחייב…",
"group.waitingJoin": "ממתין לשאר החברים שיצטרפו…",
"group.emptyChat": "עדיין אין כאן דבר. ההודעות חתומות בידי השולח ועוברות בקישור המוצפן הפרטי של כל חבר.",
"group.noVerified": "עדיין אין צ'אטים מאומתים. פתחו צ'אט 1:1 והשוו קודם את קוד הבטיחות שלו - קבוצה נבנית מחיבורים שכבר בדקתם.",
"group.noMoreToAdd": "אין צ'אטים מאומתים נוספים להוספה. פתחו צ'אט 1:1 והשוו קודם את קוד הבטיחות שלו.",
"group.directLink": "קישור ישיר עמית־לעמית",
"group.noDirectLink": "עדיין אין קישור ישיר - חבר אחר מעביר את ההודעות בזמן שנבנה קישור",
"group.relayNote": "לחלק מהחברים עדיין אין קישור ישיר אליכם. ההודעות שלהם עוברות דרך חבר אחר, שיכול לראות שאתם מדברים אך לא לקרוא מעבר לחתימה או לשנות את מה שאמרתם. הקבוצה ממשיכה לנסות לחבר אותם ישירות.",
"group.relayOnlyOff": "מצב ריליי בלבד כבוי, ולכן כל חבר מתחבר אליכם ישירות ולומד את כתובת ה-IP שלכם - כולל חברים שמישהו אחר הזמין. הפעילו אותו בהגדרות הרשת אם זה משנה כאן.",
"group.memberOffline": "{name} לא מחובר ולא יקבל הודעות. הם עדיין חברים - הסרתם מייצרת מפתחות חדשים לקבוצה.",
"group.joinNote": "שאר החברים ידעו שאתם בקבוצה. אין היסטוריית הודעות להשלים - קבוצה מתחילה ריקה.",
"group.inviteSentNote": "הקבוצה ממשיכה לעבוד עד שיאשרו. אין להם היסטוריה להשלים - הם יראו רק מה שיישלח מעכשיו.",
"group.errNotCreated": "הקבוצה לא נוצרה",
"group.errNobodyAccepted": "איש לא אישר את ההזמנה בזמן.",
"group.errNothingSent": "שום דבר לא נשלח ושום דבר לא אומת. סגרו וניסו שוב כשכולם מחוברים.",
"group.errNotFormed": "לא ניתן היה להקים את הקבוצה הזו.",
"group.errFull": "הקבוצה הזו מלאה.",
"group.errInviteFailed": "ההזמנה לא נשלחה - הצ'אט הזה אינו מחובר.",
"group.errNoMemberList": "בעל הקבוצה מעולם לא שלח את רשימת החברים.",
"group.errUnsignedList": "רשימת החברים לא נחתמה בידי בעל הקבוצה. אל תנסו שוב - הודיעו להם.",
"group.errNotOwner": "מישהו שאינו בעל הקבוצה ניסה לשנות את החברים.",
"hdr.tagline": "מוצפן מקצה לקצה",
"hdr.netSettings": "הגדרות רשת מתקדמות",
"hdr.netSettingsTitle": "הגדרות רשת מתקדמות (STUN/TURN)",
"hdr.disconnect": "ניתוק",
"status.connected": "מחובר",
"status.connecting": "מתחבר...",
"status.notConnected": "לא מחובר",
"status.reconnecting": "מתחבר מחדש...",
"status.retrying": "מנסה שוב...",
"status.verifying": "מאמת...",
"status.peerDisconnected": "העמית התנתק",
"sec.replayProtection": "הגנה מפני שידור חוזר",
"sec.messageIntegrity": "שלמות ההודעה (HMAC)",
"sec.forwardSecrecy": "סודיות קדימה מושלמת",
"sec.metadataProtection": "הגנת מטא־נתונים",
"sec.trafficObfuscation": "ערפול תעבורה",
"sec.realTests": "בדיקות קריפטוגרפיות אמיתיות",
"sec.simulatedData": "נתונים מדומים",
"sec.testPassed": "הבדיקה עברה",
"sec.testFailed": "הבדיקה נכשלה או אינה זמינה",
"sec.verificationDone": "האימות הקריפטוגרפי האמיתי הושלם",
"sec.verificationInProgress": "אימות אבטחה מתבצע...",
"sec.verificationWait": "אימות אבטחה מתבצע...\nהמתינו לסיום האימות הקריפטוגרפי בזמן אמת.",
"sec.verificationUnavailable": "אימות אבטחה אינו זמין",
"chat.placeholder": "הקלידו הודעה מוצפנת…",
"chat.send": "שליחת הודעה",
"chat.sendFiles": "שליחת קבצים",
"chat.hideFiles": "הסתרת קבצים",
"chat.recordVoice": "הקלטת הודעה קולית",
"chat.sendVoice": "שליחת הודעה קולית",
"chat.discard": "מחיקה",
"chat.codeBlock": "שליחה כבלוק קוד (מרחיב את שדה הקלט)",
"chat.codeHint": "קטע קוד · העיצוב נשמר · ⌘↵ לשליחה",
"chat.viewOnce": "צפייה חד־פעמית",
"chat.viewOnceTitle": "צפייה חד־פעמית - נעלם אחרי שהעמית קורא",
"chat.viewOncePrefix": "צפייה חד־פעמית · ",
"chat.viewOnceTap": "צפייה חד־פעמית · הקישו לחשיפה",
"chat.viewedOnce": "נצפה פעם אחת",
"chat.disappearing": "הודעה נעלמת - נמחקת בשני הצדדים",
"chat.disappearAfter": "היעלמות אחרי",
"chat.visibleFor": "גלויה למשך",
"chat.timerPrefix": "טיימר · ",
"chat.expired": "תוקף ההודעה הזו פג",
"chat.deleteForEveryone": "מחיקה אצל כולם",
"chat.sending": "שולח",
"chat.delivered": "נמסרה",
"chat.notSent": "לא נשלחה",
"chat.notSentReason": "לא נשלחה - הערוץ המאובטח אינו מוכן. התחברו מחדש כדי להמשיך.",
"chat.encrypted": "מוצפנת",
"chat.decrypted": "מפוענחת",
"chat.encryptedOnDevice": "מוצפנת במכשיר שלכם",
"chat.uploading": "מעלה",
"chat.downloading": "מוריד",
"chat.transferring": "מעביר…",
"chat.copied": "הועתק!",
"chat.collapse": "כיווץ",
"chat.closeMenu": "סגירת התפריט",
"chat.newChat": "צ'אט חדש",
"chat.newGroup": "קבוצה חדשה",
"chat.createGroup": "יצירת קבוצה",
"chat.groupChats": "צ'אטים קבוצתיים",
"chat.secureChat": "צ'אט מאובטח",
"chat.nameThis": "תנו שם לצ'אט הזה",
"chat.rename": "שינוי שם הצ'אט (מקומי בלבד)",
"chat.renameHint": "לחיצה כפולה לשינוי השם",
"chat.localLabel": "תווית מקומית · נשמרת רק במכשיר הזה",
"chat.setStatus": "קבעו את הסטטוס שלכם",
"chat.yourStatusPrefix": "הסטטוס שלכם - ",
"chat.meshHint": "עד 8 עמיתים · רשת עמית־לעמית",
"chat.offline": "לא מקוון",
"chat.noNetwork": "אין רשת · מתחבר מחדש",
"chat.startVoiceCall": "התחילו שיחה קולית מוצפנת",
"chat.startVideoCall": "התחילו שיחת וידאו מוצפנת",
"chat.verifyForCalls": "אמתו את ההפעלה כדי לאפשר שיחות",
"chat.e2eeNote": "כל הודעה מוצפנת מקצה לקצה במכשיר שלכם לפני שהיא יוצאת.",
"chat.peersOnly": "נשלחת מקצה לקצה רק לעמיתים מחוברים - לעולם לא נשמרת בשרת.",
"flow.invitationCreated": "נוצרה הזמנה מאובטחת",
"flow.invitationCreatedBang": "נוצרה הזמנה מאובטחת ומוצפנת!",
"flow.responseCreated": "נוצרה תשובה מאובטחת",
"flow.responseCreatedBang": "נוצרה תשובה מאובטחת!",
"flow.sendInvitation": "שלחו את קוד ההזמנה לבן שיחכם בערוץ מאובטח (שיחה קולית, SMS וכדומה).",
"flow.sendResponse": "שלחו את קוד התשובה ליוזם בערוץ מאובטח או תנו לו לסרוק את קוד ה-QR למטה.",
"flow.sendEncryptedCode": "שלחו את הקוד המוצפן",
"flow.sendTheResponse": "שלחו את התשובה",
"flow.pasteOrWrite": "הדביקו או כתבו קוד…",
"flow.processingInvitation": "מעבד את ההזמנה המאובטחת...",
"flow.processingResponse": "מעבד את התשובה המאובטחת...",
"flow.finalizing": "משלים את החיבור המאובטח...",
"flow.channelEstablished": "הערוץ המאובטח הוקם",
"flow.channelReady": "הערוץ המאובטח מוכן",
"flow.restoring": "משחזר את החיבור…",
"flow.invitationCaptured": "ההזמנה נקלטה.",
"err.needInvitation": "עליכם להדביק את קוד ההזמנה מבן שיחכם.",
"err.needResponse": "עליכם להדביק את קוד התשובה מבן שיחכם.",
"err.responseFormat": "מבנה התשובה אינו תקין - בדקו את הקוד",
"err.responseNoKey": "קוד תשובה לא תקין - מפתח קריפטוגרפי חסר או פגום. בדקו את הקוד ונסו שוב.",
"err.responseNoSignKey": "קוד תשובה לא תקין - חסר מפתח לאימות חתימה. בדקו את הקוד ונסו שוב.",
"err.responseOutdated": "נתוני התשובה מיושנים - השתמשו בהזמנה חדשה",
"err.setupError": "שגיאה בהקמת החיבור",
"err.notReady": "החיבור אינו מוכן",
"err.securityBreach": "זוהתה פרצת אבטחה - החיבור נדחה",
"err.securityValidation": "אימות האבטחה נכשל - ייתכן שזוהתה התקפה",
"err.retiredQr": "קוד ה-QR הזה משתמש בפורמט שהוצא משימוש ולא הצליח להעביר את ההזמנה. בקשו מהעמית ליצור חדש, או השתמשו בהעתקה והדבקה.",
"err.compressedQrNote": "‏QR דחוס עשוי להשמיט SDP לשם קיצור. השתמשו בהעתקה והדבקה אם החיבור נכשל.",
"err.inviteNotConnected": "ההזמנה לא נשלחה. הצ'אט הזה אינו מחובר כרגע.",
"err.inviteNotConnectedRetry": "ההזמנה לא נשלחה. הצ'אט הזה אינו מחובר כרגע - פתחו אותו מחדש ונסו שוב.",
"err.nobodyAccepted": "איש לא אישר את ההזמנה. הקבוצה לא השתנתה.",
"err.noAudio": "לא נקלט שמע - בדקו את הרשאת המיקרופון ונסו שוב.",
"err.voiceNeedsConnection": "הודעה קולית דורשת חיבור מאובטח פעיל. התחברו מחדש ונסו שוב.",
"err.voiceRestoring": "משחזר את החיבור - נסו לשלוח את ההודעה הקולית שוב בעוד רגע.",
"err.fileTooLarge": "הקובץ גדול מדי",
"sas.safetyNumber": "מספר בטיחות",
"sas.incorrect": "קוד שגוי. בדקו אותו מול העמית ונסו שוב.",
"sas.noMatch": "הקודים אינם תואמים",
"sas.makeSure": "ודאו שהקודים תואמים במדויק.",
"sas.tooManyAttempts": "יותר מדי ניסיונות שגויים. ההפעלה אופסה מטעמי בטיחות.",
"sas.verificationFailed": "האימות נכשל",
"sas.verified": "מאומת · סודיות קדימה מושלמת",
"sas.runVerification": "הפעילו אימות אבטחה",
"sec.panelTitle": "פרטי רשת וקריפטוגרפיה",
"sec.security": "אבטחה",
"sec.transport": "תעבורה",
"sec.keyExchange": "חילופי מפתחות",
"sec.allEnabled": "כל יכולות האבטחה מופעלות כברירת מחדל",
"sec.realTimeNote": "אימות בזמן אמת בעזרת פונקציות קריפטוגרפיות אמיתיות - בלי נתונים מדומים.",
"sec.simulatedWarning": "אזהרה: ייתכן שהחיבור אינו מלא - הערכים עשויים להיות מדומים.",
"dl.title": "הורדת SecureBit",
"dl.free": "חינם · קוד פתוח",
"dl.soon": "אפליקציות לנייד (iOS, אנדרואיד) והרחבות דפדפן (Chrome, Firefox, Opera) בקרוב.",
"chatHdr.chat": "צ'אט",
"chatHdr.chats": "צ'אטים",
"chatHdr.newChat": "+ חדש",
"chatHdr.secure": "מאובטח",
"chatHdr.p2pSub": "עמית־לעמית · מוצפן מקצה לקצה",
"chatHdr.save": "שמירה",
"chatHdr.close": "סגירה",
"chatHdr.expand": "הגדלה",
"chatHdr.you": "אתם",
"chatHdr.qrCode": "קוד QR",
"chat.disconnected": "מנותק",
"call.mute": "השתקה",
"call.endShort": "סיום",
"group.add": "הוספה",
"group.send": "שליחה",
"sec.pfsShort": "סודיות קדימה מושלמת",
"sec.cipher": "צופן",
"chat.close": "סגירה",
"file.needConnection": "העברת קבצים דורשת חיבור פתוח",
"presence.available": "זמין",
"presence.away": "מרוחק",
"presence.busy": "עסוק",
"presence.offline": "לא מקוון",
"presence.invisible": "בלתי נראה",
"presence.availableDesc": "מקוון וזמין",
"presence.awayDesc": "לא פעיל · יצא לרגע",
"presence.busyDesc": "נא לא להפריע",
"presence.invisibleDesc": "מופיע כלא מקוון לעמיתים",
"presence.online": "מקוון",
"conn.p2p": "עמית־לעמית · מחובר",
"conn.verifying": "מאמת…",
"conn.connecting": "מתחבר…",
"conn.reconnecting": "מתחבר מחדש…",
"conn.peerDisconnected": "העמית התנתק",
"conn.disconnected": "מנותק",
"chat.defaultLabel": "צ'אט",
"groupPhase.forming": "מתגבש…",
"groupPhase.commitments": "מחליף התחייבויות…",
"groupPhase.revealing": "חושף…",
"groupPhase.compare": "השוו את הקוד הקבוצתי",
"groupPhase.ready": "הקבוצה מוכנה",
"groupPhase.failed": "הקבוצה נכשלה",
"call.qualityGood": "טובה",
"call.qualityFair": "סבירה",
"call.qualityWeak": "חלשה",
"msg.code": "קוד",
"msg.timer": "טיימר",
"msg.voice": "קול",
"msg.play": "נגן",
"msg.sent": "נשלחה",
"msg.read": "נקראה",
"report.title": "אימות אבטחה בזמן אמת",
"report.active": "פעיל",
"report.testsPassed": "בדיקות שעברו",
"report.verifiedAt": "אומת בשעה",
"report.source": "מקור",
"secTest.verifyECDHKeyExchange": "חילופי מפתחות ECDH",
"secTest.verifyECDSASignatures": "חתימות דיגיטליות ECDSA",
"secTest.verifyEncryption": "הצפנת AES-GCM",
"secTest.verifyMessageIntegrity": "שלמות ההודעה",
"secTest.verifyPerfectForwardSecrecy": "סודיות קדימה מושלמת",
"secTest.verifyPFS": "סודיות קדימה מושלמת",
"secTest.verifyReplayProtection": "הגנה מפני שידור חוזר",
"secTest.verifyDTLSFingerprint": "טביעת אצבע DTLS",
"secTest.verifySASVerification": "אימות SAS",
"secTest.verifyMetadataProtection": "הגנת מטא־נתונים",
"secTest.verifyTrafficObfuscation": "ערפול תעבורה",
"secTest.verifyPacketPadding": "ריפוד מנות",
"secTest.verifyNestedEncryption": "הצפנה מקוננת",
"secTest.verifyNonExtractableKeys": "מפתחות שאינם ניתנים לחילוץ",
"secTest.verifyRateLimiting": "הגבלת קצב",
"secTest.verifyMutualAuth": "אימות הדדי",
"secTest.verifyAuthProof": "הוכחת אימות",
"secTest.verifyEnhancedValidation": "אימות מוגבר",
"secTest.verifyAdvancedFeatures": "יכולות מתקדמות",
"secTest.verifySignature": "בדיקת חתימה",
"secDetail.Security system initializing...": "מערכת האבטחה מאותחלת...",
"secDetail.Nested encryption active": "הצפנה מקוננת פעילה",
"secDetail.Nested encryption failed": "הצפנה מקוננת נכשלה",
"secDetail.Packet padding active": "ריפוד מנות פעיל",
"secDetail.Packet padding failed": "ריפוד מנות נכשל",
"secDetail.Advanced features active": "יכולות מתקדמות פעילות",
"secDetail.Advanced features failed": "יכולות מתקדמות נכשלו",
"secDetail.No encryption key available": "אין מפתח הצפנה זמין",
"secDetail.AES-GCM encryption/decryption working correctly": "הצפנה ופענוח AES-GCM פועלים כשורה",
"secDetail.No ECDH key pair available": "אין זוג מפתחות ECDH זמין",
"secDetail.Key derivation failed": "גזירת המפתח נכשלה",
"secDetail.No ECDSA key pair available": "אין זוג מפתחות ECDSA זמין",
"secDetail.ECDSA digital signatures working correctly": "חתימות דיגיטליות ECDSA פועלות כשורה",
"secDetail.MAC key not available or invalid": "מפתח MAC אינו זמין או אינו תקין",
"secDetail.Rate limiter did not block a message over the limit": "מגביל הקצב לא חסם הודעה שחרגה מהמגבלה",
"secDetail.Rate limiter is not available": "מגביל הקצב אינו זמין",
"secDetail.Replay protection is working correctly": "ההגנה מפני שידור חוזר פועלת כשורה",
"secDetail.Replay protection not enabled": "ההגנה מפני שידור חוזר אינה מופעלת",
"secDetail.SAS code not available": "קוד SAS אינו זמין",
"secDetail.SAS verification code is valid and available": "קוד אימות SAS תקין וזמין",
"secDetail.Traffic obfuscation is working correctly": "ערפול התעבורה פועל כשורה",
"secDetail.Traffic obfuscation not enabled": "ערפול התעבורה אינו מופעל",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "אין זוג מפתחות ECDH זמני ובלתי ניתן לחילוץ להפעלה הזו",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "סודיות קדימה ברמת ההפעלה בלבד: המפתחות זמניים לכל הפעלה, אך ה-Double Ratchet אינו פעיל בחיבור הזה (העמית בגרסה ישנה), ולכן מפתח הפעלה שנחשף חושף את כל השיחה",
"msg.pause": "השהיה",
"msg.failed": "נכשלה",
"groupErr.timeout": "חבר הפסיק להגיב לפני שהקוד היה מוכן.",
"groupErr.keyMismatch": "המפתח של חבר לא תאם את הזהות שנטענה עבורו.",
"groupErr.revealMismatch": "הערך שחבר חשף לא תאם למה שהתחייב אליו.",
"groupErr.commitChanged": "חבר שינה את ההתחייבות שלו באמצע.",
"groupErr.missingKey": "נכלל חבר שהמפתח שלו מעולם לא הגיע.",
"groupErr.outsider": "הגיע פריים ממישהו מחוץ לקבוצה.",
"groupErr.limit": "קבוצה מוגבלת לשמונה חברים.",
"groupErr.tooLarge": "ההודעה הייתה גדולה מדי לשליחה לקבוצה.",
"fileType.text": "טקסט רגיל",
"fileType.images": "תמונות",
"fileType.archives": "ארכיונים",
"fileType.voice": "הודעות קוליות",
"fileType.unsupported": "לא נתמך",
"qrScan.title": "סריקת קוד QR",
"qrScan.auto": "מצב אוטומטי",
"qrScan.reset": "איפוס",
"qrScan.autoScroll": "גלילה אוטומטית מופעלת",
"qrScan.starting": "מפעיל את המצלמה...",
"qrScan.point": "כוונו את המצלמה לקוד ה-QR",
"qrScan.tapFocus": "הקישו על המסך למיקוד",
"qrScan.focusing": "ממקד...",
"iceErr.notArray": "רשימת השרתים חייבת להיות מערך",
"iceErr.invalidJson": "JSON לא תקין",
"iceErr.tooMany": "יותר מדי שרתים (מקסימום {max})",
"iceErr.invalidEntry": "{label}: רשומה לא תקינה",
"iceErr.urlCount": "{label}: נדרשות בין 1 ל-{max} כתובות",
"iceErr.turnCreds": "{label}: שרתי TURN דורשים בדרך כלל שם משתמש ואישור",
"iceUrl.notString": "הכתובת חייבת להיות מחרוזת",
"iceUrl.empty": "הכתובת ריקה",
"iceUrl.tooLong": "הכתובת ארוכה מדי",
"iceUrl.badChars": "הכתובת מכילה תווים לא תקינים",
"iceUrl.badScheme": "הכתובת חייבת להתחיל ב-stun:, stuns:, turn: או turns:",
"iceUrl.badQuery": "לכתובת יש שאילתה לא תקינה",
"iceUrl.noHost": "לכתובת חסר מארח",
"iceUrl.badHost": "לכתובת יש מארח או פורט לא תקין",
"iceUrl.badTransport": "שאילתת הכתובת חייבת להיות transport=udp או transport=tcp",
"msg.off": "כבוי",
"file.consentUnavailable": "הסכמת המשתמש אינה זמינה",
"secLevel.MAXIMUM": "מרבי",
"secLevel.INITIALIZING": "מאתחל",
"secLevel.ERROR": "שגיאה",
"secLevel.UNKNOWN": "לא ידוע",
"status.error": "שגיאה",
"offline.disconnect": "ניתוק",
"offline.learnMore": "מידע נוסף",
"pwa.installApp": "התקנת האפליקציה",
"chat.onWeb": "אתם בגרסת הווב",
"groupCall.startVoice": "התחלת שיחה קולית קבוצתית",
"groupCall.startVideo": "התחלת שיחת וידאו קבוצתית",
"groupCall.join": "הצטרפות",
"groupCall.dismiss": "לא עכשיו",
"groupCall.leave": "יציאה מהשיחה",
"groupCall.you": "את/ה",
"groupCall.connecting": "מתחבר…",
"groupCall.waitingLink": "ממתין לקישור ישיר…",
"groupCall.legFailed": "ההתחברות נכשלה",
"groupCall.startedVoice": "{name} התחיל שיחה קולית",
"groupCall.startedVideo": "{name} התחיל שיחת וידאו",
"groupCall.inCall": "{count} בשיחה",
"groupCall.err.permission_denied": "השיחה לא התחילה - הגישה למיקרופון ולמצלמה חסומה. אפשרו אותה לאתר הזה ונסו שוב.",
"groupCall.err.device_not_found": "השיחה לא התחילה - לא נמצא מיקרופון במכשיר הזה.",
"groupCall.err.device_busy": "השיחה לא התחילה - המיקרופון בשימוש אפליקציה אחרת. סגרו אותה ונסו שוב.",
"groupCall.err.media_failed": "השיחה לא התחילה - לא ניתן היה לפתוח את המיקרופון.",
"groupCall.err.call_in_progress": "כבר מתקיימת שיחה בקבוצה הזו. הצטרפו אליה במקום להתחיל אחת חדשה.",
"groupCall.err.not_ready": "אשרו את קוד הקבוצה לפני שיחה.",
"groupCall.speaking": "{name} מדבר/ת",
"groupCall.pin": "הצגת {name} בגדול",
"groupCall.unpin": "חזרה לכולם",
"groupCall.showEveryone": "כולם",
"msg.after5s": "5 שניות אחרי הקריאה",
"msg.after15s": "15 שניות אחרי הקריאה",
"msg.after30s": "30 שניות אחרי הקריאה",
"msg.after1m": "דקה אחרי הקריאה",
"msg.sec30": "30 שניות",
"msg.min5": "5 דקות",
"msg.hour1": "שעה",
"desktop.shareDesc": "שלחו את הקוד לצד השני. הוא חד-פעמי ופג במהירות.",
"desktop.invitationCreated": "הזמנה מאובטחת נוצרה - שלחו אותה לצד השני.",
"desktop.joinDesc": "הדביקו את קוד ההזמנה של הצד השני כדי לבנות את התשובה המאובטחת שלכם.",
"desktop.offerTag": "הזמנה · העתקת טקסט",
"desktop.answerTag": "תשובה · העתקת טקסט",
"desktop.offerPlaceholder": "קוד ההזמנה יופיע כאן…",
"desktop.answerPlaceholder": "קוד התשובה יופיע כאן…",
"desktop.backToChats": "חזרה לצ׳אטים",
"desktop.sendFeedback": "שליחת משוב",
"desktop.callsNeedVerified": "שיחות דורשות ערוץ מאובטח מאומת.",
"desktop.noOpenChannel": "אין ערוץ מאובטח פתוח.",
"desktop.chatCarriesCall": "הצ׳אט הזה נושא שיחה קבוצתית. צאו מהשיחה הקבוצתית לפני שיחה אחד-על-אחד.",
"desktop.err.permission_denied": "לא ניתן היה להתחיל את השיחה - הגישה למיקרופון ולמצלמה חסומה. אפשרו אותה בהגדרות המערכת ונסו שוב.",
"desktop.language": "שפה",
"desktop.languageHint": "חל מיד. הודעות שכבר נשלחו נשארות במילים שבהן נכתבו.",
"desktop.compareCode": "השוו את קוד האימות עם הצד השני ואשרו אם הוא תואם.",
"desktop.verifyBeforeFiles": "השלימו את האימות לפני שליחת קבצים.",
"desktop.verifyBeforeSending": "השלימו את האימות לפני שליחת הודעות.",
"desktop.disconnectedByBackend": "החיבור נסגר בבטחה.",
"desktop.restoreFailed": "לא ניתן היה לשחזר את החיבור. הצ׳אט הזה נסגר.",
"desktop.channelNotReady": "ערוץ הנתונים עדיין אינו זמין. המתינו עד שהחיבור ייווצר.",
"desktop.enterCode": "הזינו את קוד האימות לאישור.",
"desktop.noOffer": "לא נמצאה הזמנה. צרו אחת קודם.",
"desktop.notInitiator": "לא אתם יצרתם את החיבור הזה, ולכן אין תשובה להחיל.",
"desktop.decryptFailed": "לא ניתן היה לפענח הודעה והיא נזרקה.",
"desktop.badMessageFormat": "הגיעה מסגרת פגומה והיא נזרקה.",
"desktop.notSentNotReady": "ההודעה לא נשלחה: הערוץ המאובטח אינו מוכן. המתינו לסיום האימות או התחברו מחדש.",
"desktop.micDenied": "הגישה למיקרופון נדחתה.",
"desktop.noChannelWait": "אין ערוץ מאובטח פתוח - המתינו עד שהחיבור ייווצר.",
"desktop.sasFailed": "האימות נכשל. ייתכן שיש מתווך, ולכן החיבור בוטל.",
"desktop.sasOk": "האימות הצליח. הערוץ הזה מאומת מקצה לקצה.",
"desktop.iceForgotten": "השרתים השמורים נשכחו. נעשה שימוש בשרתי ICE ציבוריים.",
"desktop.icePublic": "נעשה שימוש בשרתי ICE ציבוריים.",
"desktop.verificationInProgress": "בדיקת האבטחה עדיין פועלת. המתינו לסיומה.",
"desktop.fileGone": "הקובץ הזה כבר אינו זמין להורדה.",
"desktop.codeMismatch": "קודי האימות אינם תואמים. מתנתקים למען הבטיחות.",
"desktop.noLocalCode": "האימות נכשל: אין קוד מקומי להשוואה. מתנתקים למען הבטיחות.",
"desktop.protocolViolation": "הצד השני טען שהקוד אושר לפני שאישרתם אותו. מתנתקים למען הבטיחות.",
"desktop.verificationRejected": "האימות נדחה. החיבור בוטל למען הבטיחות.",
"secLevel.HIGH": "גבוהה",
"secLevel.MEDIUM": "בינונית",
"secLevel.LOW": "נמוכה",
"desktop.rerun": "בדיקה חוזרת",
"desktop.ice.customDesc": "עד {max} שרתים, כתובת אחת בכל שורה או JSON.",
"desktop.ice.persistDesc": "נשמר מקומית במכשיר הזה. השאירו כבוי כדי להשתמש רק בהפעלה הנוכחית.",
"desktop.group.leaveNote": "לשאר החברים נמסר שעזבתם. אחר כך לא נשאר במכשיר הזה דבר מהקבוצה - אין שרת שמחזיק עותק לחזור אליו, ולכן תידרש הזמנה חדשה.",
"desktop.sec.ecdsaOk": "חתימת חבילת המפתחות של הצד השני אומתה בלחיצת היד (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "אין לחיצת יד שהושלמה",
"desktop.sec.ecdhOk": "מפתחות ההפעלה נגזרו מהחלפת ECDH P-384 חולפת דרך HKDF-SHA-256",
"desktop.sec.ecdhNone": "לא נגזרו מפתחות הפעלה",
"desktop.sec.encryptionOk": "הצפנה ופענוח AES-GCM אומתו בליבה",
"desktop.sec.encryptionNa": "לא ניתן היה להריץ את הבדיקה העצמית של AES-GCM",
"desktop.sec.integrityOk": "שלמות ההודעות אומתה (אימות AES-GCM)",
"desktop.sec.integrityNa": "לא ניתן היה להריץ את בדיקת השלמות",
"desktop.sec.pfsOk": "Double Ratchet פעיל - לכל הודעה מפתח משלה",
"desktop.sec.pfsNa": "לא נמדד",
"desktop.sec.replayOk": "מפתחות ההודעות של הראצ׳ט מושמדים עם השימוש, ולכן אי אפשר לשדר מחדש מסגרת שנלכדה",
"desktop.sec.replayNa": "לא נמדד",
"desktop.sec.dtlsPinned": "טביעת האצבע DTLS של הצד השני מוצמדת: {fp}",
"desktop.sec.dtlsNone": "אין טביעת אצבע DTLS מרוחקת",
"desktop.sec.sasBoth": "שני הצדדים אישרו את קוד הבטיחות מחוץ לערוץ",
"desktop.sec.sasIncomplete": "קוד הבטיחות לא אושר בידי שני הצדדים",
"desktop.sec.metadataOk": "נגזר מפתח ייעודי למטא-נתונים (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "אין מפתח מטא-נתונים",
"desktop.sec.coverOn": "תעבורת הסוואה פעילה: מסגרות מזויפות אקראיות (32-128 בתים כל 15-30 שניות) בערוץ הראצ׳ט",
"desktop.sec.coverOff": "מחולל תעבורת ההסוואה אינו פועל",
"desktop.sec.coverUnsupported": "תעבורת הסוואה מחייבת הפעלת Double Ratchet (הצד השני בגרסה ישנה יותר)",
"desktop.tagline": "חופש מקצה לקצה",
"desktop.callsNotHere": "שיחות אינן זמינות עדיין בגרסה זו. הודעות, קבצים וצ׳אטים קבוצתיים פועלים כרגיל."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["he"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "भाषा",
"language.suggest.text": "यह पृष्ठ हिन्दी में भी उपलब्ध है।",
"language.suggest.cta": "हिन्दी में पढ़ें",
"language.suggest.dismiss": "बंद करें",
"community.title": "निजता के भविष्य में शामिल हों",
"community.description": "SecureBit अपने समुदाय से बढ़ता है। आपके विचार और सुझाव सुरक्षित संवाद का भविष्य गढ़ते हैं - खुले में बना, और पूरे रास्ते पूरी ASN.1 जाँच के साथ।",
"community.github": "GitHub रिपॉज़िटरी",
"community.feedback": "प्रतिक्रिया",
"unique.eyebrow": "हम अलग कैसे हैं",
"unique.heading": "SecureBit ख़ास क्यों है",
"unique.s1.titleTop": "परतदार",
"unique.s1.titleBottom": "एन्क्रिप्शन कोर",
"unique.s1.collapsed": "एन्क्रिप्शन कोर",
"unique.s1.desc": "ECDH P-384 कुंजी विनिमय, AES-256-GCM पेलोड, ECDSA हस्ताक्षर और पूरी ASN.1 जाँच - सब एक मज़बूत श्रृंखला में पिरोए हुए।",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "शुद्ध P2P",
"unique.s2.titleBottom": "WebRTC पर",
"unique.s2.collapsed": "WebRTC पर शुद्ध P2P",
"unique.s2.desc": "संदेश WebRTC के ज़रिए सीधे एक उपकरण से दूसरे तक जाते हैं। कोई रिले आपका डेटा नहीं रखता - सर्वर बस दोनों पक्षों को एक-दूसरे तक पहुँचने में मदद करता है।",
"unique.s2.tags": [
"DTLS 1.3",
"कोई रिले नहीं"
],
"unique.s3.titleTop": "पूर्ण अग्रगामी",
"unique.s3.titleBottom": "गोपनीयता",
"unique.s3.collapsed": "अग्रगामी गोपनीयता",
"unique.s3.desc": "सत्र कुंजियाँ लगातार बदलती रहती हैं और उपयोग के बाद हटा दी जाती हैं, इसलिए एक कुंजी लीक होने पर भी पुरानी बातचीत नहीं खुलती।",
"unique.s3.tags": [
"क्षणिक कुंजियाँ",
"स्वतः बदलाव"
],
"unique.s4.titleTop": "ट्रैफ़िक",
"unique.s4.titleBottom": "अस्पष्टीकरण",
"unique.s4.collapsed": "ट्रैफ़िक अस्पष्टीकरण",
"unique.s4.desc": "पैकेट का आकार और समय भरा और यादृच्छिक किया जाता है, जिससे लाइन देख रहे किसी भी व्यक्ति को मेटाडेटा का ढर्रा दिखाई नहीं देता।",
"unique.s4.tags": [
"पैकेट पैडिंग",
"समय में उतार-चढ़ाव"
],
"unique.s5.titleTop": "शून्य डेटा",
"unique.s5.titleBottom": "संग्रह",
"unique.s5.collapsed": "शून्य डेटा संग्रह",
"unique.s5.desc": "न खाते, न लॉग, न संदेशों का भंडारण। सर्वर पर ऐसा कुछ है ही नहीं जो लीक हो, ज़ब्त हो या बेचा जा सके।",
"unique.s5.tags": [
"कोई खाता नहीं",
"कोई लॉग नहीं"
],
"partners.eyebrow": "साझेदार और परितंत्र",
"partners.heading": "हमारे साझेदार हम पर भरोसा करते हैं",
"partners.aegis.desc": "पूँजी साझेदार, जो अपने पूरे पोर्टफ़ोलियो में गोपनीय वित्तीय संवाद की रक्षा करता है।",
"partners.aegis.role": "रणनीतिक निवेशक",
"partners.furilabs.desc": "निजता को पहले रखने वाले लिनक्स फ़ोन, जिनमें SecureBit डिफ़ॉल्ट सुरक्षित चैनल के रूप में आता है।",
"partners.furilabs.role": "प्रौद्योगिकी साझेदार",
"partners.inviteTitle": "साझेदार बनें",
"partners.inviteDesc": "क्या आप निजता के लिए हार्डवेयर या बुनियादी ढाँचा बना रहे हैं? आइए SecureBit जोड़ें।",
"partners.inviteCta": "बातचीत शुरू करें",
"roadmap.eyebrow": "विकास की रूपरेखा",
"roadmap.heading": "SecureBit का सफ़र",
"roadmap.subheading": "पहले प्रोटोटाइप से लेकर क्वांटम-प्रतिरोधी, विकेंद्रित नेटवर्क तक - हर परत पर पूरी ASN.1 जाँच के साथ।",
"roadmap.progress": "{total} में से {shipped} पड़ाव पूरे",
"roadmap.upcoming": "{upcoming} बाक़ी",
"roadmap.keyFeatures": "मुख्य विशेषताएँ",
"roadmap.status.released": "जारी",
"roadmap.status.current": "अभी चालू",
"roadmap.status.dev": "विकास में",
"roadmap.status.planned": "नियोजित",
"roadmap.status.research": "शोध",
"hero.headlineTop": "एक सीधी लाइन,",
"hero.headlineBottom": "जिसे सिर्फ़ आप दोनों पढ़ सकें।",
"hero.subheading": "कुंजियाँ आपके उपकरण पर बनती हैं और सीधे दोनों पक्षों के बीच बदली जाती हैं। न कोई खाता, न कोई सर्वर जो आपके संदेश रखे।",
"hero.diagramAlt": "एक साथी तक सीधी एन्क्रिप्टेड लाइन, जिसमें आगे दो और लोग जुड़ते हैं",
"intro.createTitle": "नया चैनल बनाएँ",
"intro.createDesc": "आपका उपकरण कुंजियाँ और एक बार काम आने वाला निमंत्रण बनाता है। इनमें से कुछ भी किसी सर्वर तक नहीं जाता।",
"intro.createCta": "कुंजियाँ और निमंत्रण बनाएँ",
"intro.joinTitle": "चैनल में शामिल हों",
"intro.scanTitle": "कैमरे से QR स्कैन करें",
"intro.scanSubtitle": "सबसे तेज़ - सामने वाले की स्क्रीन पर कैमरा रखें",
"intro.orPasteCode": "या कोड चिपकाएँ",
"intro.pastePlaceholder": "निमंत्रण कोड यहाँ चिपकाएँ…",
"intro.connect": "जोड़ें",
"intro.connecting": "प्रक्रिया जारी…",
"roadmap.r1.title": "विकास की शुरुआत",
"roadmap.r1.sub": "विचार, प्रोटोटाइप और बुनियादी ढाँचा",
"roadmap.r1.date": "2025 की शुरुआत",
"roadmap.r1.features": [
"अवधारणा और आवश्यकताएँ तय हुईं",
"तकनीकी चयन: WebRTC, P2P, क्रिप्टोग्राफ़ी",
"संदेश भेजने के पहले प्रोटोटाइप",
"रिपॉज़िटरी और CI की स्थापना",
"बुनियादी एन्क्रिप्शन ढाँचा",
"UX/UI डिज़ाइन"
],
"roadmap.r2.title": "अल्फ़ा रिलीज़",
"roadmap.r2.sub": "पहला सार्वजनिक अल्फ़ा: बुनियादी चैट और कुंजी विनिमय",
"roadmap.r2.date": "वसंत 2025",
"roadmap.r2.features": [
"WebRTC पर बुनियादी P2P संदेश",
"सरल एंड-टू-एंड एन्क्रिप्शन (प्रदर्शन योजना)",
"स्थिर सिग्नलिंग और पुनः जुड़ाव",
"परीक्षण के लिए न्यूनतम इंटरफ़ेस",
"शुरुआती परीक्षकों से प्रतिक्रिया"
],
"roadmap.r3.title": "सुरक्षा मज़बूत हुई",
"roadmap.r3.sub": "सुरक्षा को कसा गया और स्थिर शाखा जारी हुई",
"roadmap.r3.date": "गर्मी 2025",
"roadmap.r3.features": [
"ECDH/ECDSA का वास्तविक उपयोग",
"अग्रगामी गोपनीयता और कुंजी बदलाव",
"बेहतर प्रमाणीकरण जाँच",
"फ़ाइल एन्क्रिप्शन और बड़े डेटा का स्थानांतरण",
"बुनियादी क्रिप्टो प्रक्रियाओं का ऑडिट"
],
"roadmap.r4.title": "विस्तार और स्थिरता",
"roadmap.r4.sub": "नेटवर्क का विस्तार और स्थिरता में सुधार",
"roadmap.r4.date": "पतझड़ 2025",
"roadmap.r4.features": [
"P2P जुड़ाव और NAT पार करने का अनुकूलन",
"पुनः जुड़ाव की व्यवस्था और संदेश कतारें",
"मोबाइल पर कम बैटरी खपत",
"कई उपकरणों के बीच तालमेल",
"डेवलपर्स के लिए निगरानी और लॉगिंग उपकरण"
],
"roadmap.r5.title": "निजता सबसे पहले",
"roadmap.r5.sub": "ध्यान निजता पर: मेटाडेटा घटाना",
"roadmap.r5.date": "सर्दी 2025",
"roadmap.r5.features": [
"मेटाडेटा सुरक्षा और पहचान-चिह्न में कमी",
"ऑनियन रूटिंग और DHT के प्रयोग",
"गुमनाम जुड़ाव के विकल्प",
"खुले कोड ऑडिट की तैयारी",
"उपयोगकर्ता सत्यापन में सुधार"
],
"roadmap.r6.title": "Enhanced Security Edition",
"roadmap.r6.sub": "पूरी ASN.1 जाँच के साथ 18 परतों वाली सैन्य स्तर की क्रिप्टोग्राफ़ी",
"roadmap.r6.date": "2025 का अंत",
"roadmap.r6.features": [
"तिहरी सुरक्षा: ECDH + DTLS + SAS",
"ECDH P-384 और AES-GCM 256-बिट एन्क्रिप्शन",
"DTLS फ़िंगरप्रिंट की जाँच",
"SAS (लघु प्रमाणीकरण स्ट्रिंग) सत्यापन",
"कुंजी बदलाव के साथ अग्रगामी गोपनीयता",
"बीच में बैठे हमलावर से मज़बूत बचाव",
"पूरी ASN.1 DER जाँच",
"OID और EC बिंदुओं की जाँच",
"SPKI संरचना की जाँच",
"P2P WebRTC ढाँचा",
"मेटाडेटा सुरक्षा",
"100% खुला स्रोत कोड"
],
"roadmap.r7.title": "Desktop Edition",
"roadmap.r7.sub": "Windows, macOS और Linux के लिए मूल डेस्कटॉप ऐप",
"roadmap.r7.date": "2026 की शुरुआत",
"roadmap.r7.features": [
"Windows डेस्कटॉप ऐप (Tauri v2)",
"macOS डेस्कटॉप ऐप (Tauri v2)",
"Linux AppImage (Tauri v2)",
"तत्काल सूचनाएँ",
"स्वतः पुनः जुड़ाव",
"उपकरणों के बीच तालमेल",
"बेहतर इंटरफ़ेस",
"100 MB तक की फ़ाइलें"
],
"roadmap.r8.title": "सुरक्षित आवाज़ और कॉल",
"roadmap.r8.sub": "एन्क्रिप्टेड वॉइस संदेश, ऑडियो और वीडियो कॉल",
"roadmap.r8.date": "2026 की शुरुआत",
"roadmap.r8.features": [
"एंड-टू-एंड एन्क्रिप्टेड वॉइस संदेश",
"आमने-सामने एन्क्रिप्टेड ऑडियो कॉल (WebRTC)",
"आमने-सामने एन्क्रिप्टेड वीडियो कॉल (WebRTC)",
"लाइव मीडिया के लिए अग्रगामी गोपनीयता",
"SRTP/DTLS से सुरक्षित मीडिया धाराएँ",
"कॉल के दौरान SAS सत्यापन",
"कॉल सूचनाएँ और स्वतः पुनः जुड़ाव",
"कम विलंब वाला P2P मीडिया"
],
"roadmap.r9.title": "समूह संवाद",
"roadmap.r9.sub": "निजता बनाए रखते हुए समूह चैट",
"roadmap.r9.date": "अभी",
"roadmap.r9.features": [
"8 लोगों तक P2P समूह चैट",
"मेश वितरण, और विकल्प में हस्ताक्षरित रिले",
"एक ही समूह सुरक्षा कोड, जिसे सब मिलाते हैं",
"कोड अनुमान लगाने से बचाव के लिए पहले वचन, फिर प्रकटीकरण",
"समूह की अपनी पहचान कुंजियाँ, बनावट से ही क्षणिक",
"युग-क्रम के साथ हस्ताक्षरित सदस्य सूची",
"हस्ताक्षरित संदेश, ताकि अलग-अलग रिकॉर्ड सिद्ध किया जा सके",
"न सर्वर, न साझा समूह कुंजी, न इतिहास"
],
"roadmap.r10.title": "Mobile Edition",
"roadmap.r10.sub": "iOS और Android के लिए मूल मोबाइल ऐप",
"roadmap.r10.date": "2027 की दूसरी तिमाही",
"roadmap.r10.features": [
"iOS मूल ऐप (Swift/SwiftUI)",
"Android मूल ऐप (Kotlin/Jetpack Compose)",
"मोबाइल ब्राउज़र में PWA समर्थन",
"तत्काल पुश सूचनाएँ",
"बैटरी अनुकूलन",
"मोबाइल के लिए बना इंटरफ़ेस",
"ऑफ़लाइन संदेश कतार",
"बायोमेट्रिक प्रमाणीकरण"
],
"roadmap.r11.title": "क्वांटम-प्रतिरोधी संस्करण",
"roadmap.r11.sub": "क्वांटम कंप्यूटरों से बचाव",
"roadmap.r11.date": "2027 की चौथी तिमाही",
"roadmap.r11.features": [
"पोस्ट-क्वांटम क्रिप्टोग्राफ़ी CRYSTALS-Kyber",
"SPHINCS+ डिजिटल हस्ताक्षर",
"मिश्रित योजना: पारंपरिक और पोस्ट-क्वांटम",
"क्वांटम-सुरक्षित कुंजी विनिमय",
"अद्यतन हैशिंग एल्गोरिदम",
"मौजूदा सत्रों का स्थानांतरण",
"v5.x के साथ संगतता",
"क्वांटम-प्रतिरोधी प्रोटोकॉल"
],
"roadmap.r12.title": "विकेंद्रित नेटवर्क",
"roadmap.r12.sub": "पूरी तरह विकेंद्रित नेटवर्क",
"roadmap.r12.date": "2028",
"roadmap.r12.features": [
"नोड्स का मेश नेटवर्क",
"साथी खोजने के लिए DHT",
"अंतर्निहित ऑनियन रूटिंग",
"टोकनॉमिक्स और नोड प्रोत्साहन",
"DAO के ज़रिए संचालन",
"अन्य नेटवर्कों के साथ अंतर-संचालन",
"मंचों के बीच संगतता",
"स्वयं ठीक होने वाला नेटवर्क"
],
"roadmap.r13.title": "AI निजता सहायक",
"roadmap.r13.sub": "निजता और सुरक्षा के लिए कृत्रिम बुद्धिमत्ता",
"roadmap.r13.date": "2028 के बाद",
"roadmap.r13.features": [
"उपकरण पर ही AI से ख़तरे का विश्लेषण",
"बीच में बैठे हमलावर की स्वतः पहचान",
"अनुकूली क्रिप्टोग्राफ़ी",
"आपके अनुरूप सुरक्षा सुझाव",
"शून्य-ज्ञान मशीन लर्निंग",
"निजी AI सहायक",
"पूर्वानुमान आधारित सुरक्षा",
"हमलों से स्वायत्त बचाव"
],
"handshake.step1": "ECDH P-384 कुंजी युग्म बन रहा है",
"handshake.step2": "सत्यापन कोड निकाला जा रहा है",
"handshake.step3": "अग्रगामी गोपनीयता तय की जा रही है",
"handshake.securingTitle": "आपका चैनल सुरक्षित किया जा रहा है",
"handshake.answerTitle": "आपका उत्तर बनाया जा रहा है",
"handshake.securingDesc": "ऐसी कुंजियाँ गढ़ी जा रही हैं जो छेड़छाड़ झेल सकें।",
"handshake.shareTitle": "अपना निमंत्रण साझा करें",
"handshake.sendAnswerTitle": "अपना उत्तर वापस भेजें",
"handshake.shareDesc": "QR दिखाइए या कोड सामने वाले को भेजिए। यह एक ही बार काम आता है और जल्दी समाप्त हो जाता है।",
"handshake.sendAnswerDesc": "यह उत्तर उस व्यक्ति को दीजिए जिसने चैनल बनाया, ताकि वह हाथ मिलाना पूरा कर सके।",
"handshake.establish": "जुड़ाव बनाएँ",
"handshake.thenReceive": "फिर सामने वाले का भेजा उत्तर लीजिए",
"handshake.pasteAnswerPlaceholder": "सामने वाले का उत्तर कोड चिपकाएँ…",
"handshake.answerSentNote": "यह उत्तर चैनल बनाने वाले को भेजिए और रुकिए - जैसे ही वे जुड़ेंगे, चैट खुल जाएगी।",
"handshake.qrHint": "जब तक सामने वाला कोड पढ़ न ले, इसे खुला रखिए।",
"handshake.qrHintFrames": "हाथ मिलाना {frames} फ़्रेमों में बँटा है - जब तक सामने वाला सब पढ़ न ले, इसे खुला रखिए।",
"verify.title": "सुरक्षा सत्यापन",
"verify.desc": "इस सुरक्षा कोड को किसी दूसरे रास्ते से (आवाज़ पर या आमने-सामने) मिलाइए, फिर उसे लिखकर चैट खोलिए।",
"verify.enterLabel": "मिलाया हुआ कोड लिखें",
"verify.placeholder": "कोड यहाँ लिखें",
"verify.confirm": "कोड पक्का करें",
"verify.confirmed": "पक्का हुआ",
"verify.mismatch": "मेल नहीं खाता",
"verify.yours": "आपकी पुष्टि",
"verify.peer": "सामने वाले की पुष्टि",
"verify.pending": "प्रतीक्षा में",
"verify.waiting": "कोड की प्रतीक्षा…",
"verify.verified": "चैनल सत्यापित",
"verify.bothConfirmed": "दोनों पक्षों ने पुष्टि कर दी। सुरक्षित चैट खुल रही है…",
"pwa.bannerTitle": "SecureBit.chat इंस्टॉल करें",
"pwa.bannerDesc": "बेहतर सुरक्षा के साथ मूल ऐप जैसा अनुभव पाइए",
"pwa.install": "इंस्टॉल करें",
"pwa.dismiss": "बंद करें",
"pwa.close": "बंद करें",
"pwa.iosTitle": "iOS पर इंस्टॉल करें",
"pwa.iosStep1": "साझा करें बटन दबाइए",
"pwa.iosStep1Hint": "आमतौर पर Safari में नीचे",
"pwa.iosStep2": "«होम स्क्रीन में जोड़ें» ढूँढिए",
"pwa.iosStep2Hint": "साझा मेन्यू में नीचे तक जाइए",
"pwa.iosStep3": "«जोड़ें» दबाइए",
"pwa.iosStep3Hint": "पुष्टि कीजिए, SecureBit.chat इंस्टॉल हो जाएगा",
"pwa.genericTitle": "SecureBit इंस्टॉल करें",
"pwa.genericDesc": "हर ब्राउज़र अपने तरीक़े से इंस्टॉल करता है। अपने ब्राउज़र से मेल खाते चरण चुनिए।",
"pwa.gotIt": "समझ गया",
"pwa.installedTitle": "ऐप इंस्टॉल हो गया!",
"pwa.installedIos": "iOS ऐप इंस्टॉल हो गया! होम स्क्रीन से खोलिए।",
"pwa.installedGeneric": "SecureBit.chat अब आपके उपकरण पर है",
"pwa.anytimeTitle": "जब चाहें इंस्टॉल करें",
"pwa.anytimeDesc": "सबसे अच्छे अनुभव के लिए, आप SecureBit.chat को ब्राउज़र के मेन्यू से कभी भी इंस्टॉल कर सकते हैं।",
"pwa.ok": "ठीक है",
"step.open": "चरण 1 · चैनल खोलें",
"step.exchange": "चरण 2 · आदान-प्रदान",
"step.verification": "चरण 3 · सत्यापन",
"action.create": "बनाएँ",
"action.join": "शामिल हों",
"action.back": "पीछे",
"action.copy": "कॉपी करें",
"action.copied": "कॉपी हुआ",
"action.scan": "स्कैन करें",
"action.downloadDesktop": "डेस्कटॉप ऐप डाउनलोड करें",
"action.advancedSettings": "उन्नत सेटिंग्स",
"cred.offerTag": "निमंत्रण · या पाठ कॉपी करें",
"cred.answerTag": "उत्तर · या पाठ कॉपी करें",
"cred.reveal": "देखने के लिए दबाएँ - यह कोड किसी को न बताएँ",
"qr.title": "QR कोड स्कैन करें",
"qr.subtitle": "कैमरा सामने वाले के QR पर रखें",
"qr.scanning": "पढ़ा जा रहा है…",
"qr.hint": "जब तक सारे हिस्से पढ़ न लिए जाएँ, स्थिर रखिए। कैमरा उपकरण पर ही चलता है - कुछ भी भेजा नहीं जाता।",
"mesh.you": "आप",
"mesh.peer": "साथी · सत्र 1",
"mesh.joined2": "प्रिया जुड़ीं · +2",
"mesh.joined3": "अर्जुन जुड़े · +3",
"ice.title": "नेटवर्क सेटिंग्स",
"ice.subtitle": "यहीं उपकरण पर तय होता है - सामने वाले को कभी नहीं भेजा जाता",
"ice.intro": "SecureBit डिफ़ॉल्ट रूप से सार्वजनिक STUN सर्वरों से पीयर-टू-पीयर जुड़ाव तय करता है। अगर आप ख़ुद चलाते हैं, तो अपने STUN/TURN बताइए।",
"ice.publicTitle": "सार्वजनिक सर्वर (डिफ़ॉल्ट)",
"ice.publicDesc": "कोई सेटिंग नहीं चाहिए। ज़्यादातर लोगों के लिए काफ़ी।",
"ice.customTitle": "मेरे अपने STUN/TURN सर्वर",
"ice.customDesc": "अधिकतम {max} सर्वर।",
"ice.turnNote": "TURN रिले दोनों पक्षों का IP और ट्रैफ़िक की चाल देख सकता है, पर संदेशों की सामग्री कभी नहीं, जो एंड-टू-एंड एन्क्रिप्टेड रहती है। बेहतर है ",
"ice.turnNoteTls": " (TLS)।",
"ice.test": "सर्वर जाँचें",
"ice.testing": "जाँच जारी…",
"ice.relayTitle": "केवल-रिले मोड",
"ice.relayBadge": "अधिकतम निजता",
"ice.relayDesc": "सारा ट्रैफ़िक TURN से भेजता है, ताकि सामने वाले को आपका IP कभी न पता चले। इसके लिए TURN सर्वर चाहिए।",
"ice.relayWarning": "केवल-रिले मोड चालू है पर कोई TURN सर्वर तय नहीं है। जुड़ाव शुरू ही नहीं हो पाएगा।",
"ice.persist": "इसी उपकरण पर सहेजें",
"ice.persistDesc": "इस ब्राउज़र में एन्क्रिप्टेड रूप में सहेजा जाता है। बंद रखने पर सिर्फ़ इसी सत्र के लिए लागू होगा।",
"ice.forget": "सहेजा हुआ भूल जाएँ",
"ice.cancel": "रद्द करें",
"ice.apply": "लागू करें",
"ice.errUnavailable": "इस ब्राउज़र में WebRTC उपलब्ध नहीं है",
"ice.errInvalid": "सर्वर की सेटिंग ग़लत है",
"update.title": "नया अपडेट उपलब्ध है",
"update.desc": "SecureBit का नया संस्करण मिला है।",
"update.currentVersion": "मौजूदा संस्करण",
"update.newVersion": "नया संस्करण",
"update.now": "अभी अपडेट करें",
"update.later": "बाद में",
"update.unknown": "उपलब्ध नहीं",
"update.stepSaving": "डेटा सहेजा जा रहा है…",
"update.stepSwCaches": "Service Worker के कैश साफ़ हो रहे हैं…",
"update.stepSwUnregister": "Service Worker हटाए जा रहे हैं…",
"update.stepBrowserCache": "ब्राउज़र का कैश साफ़ हो रहा है…",
"update.stepVersion": "संस्करण अपडेट हो रहा है…",
"update.stepReload": "ऐप फिर से लोड हो रहा है…",
"update.error": "अपडेट में गड़बड़ी। पेज ख़ुद ताज़ा करें (Ctrl+F5 या Cmd+Shift+R)",
"update.confirmSkip": "नया संस्करण उपलब्ध है। सुरक्षा और स्थिरता के लिए अपडेट करना बेहतर है। बिना अपडेट के आगे बढ़ें?",
"offline.backOnline": "फिर से ऑनलाइन",
"offline.mode": "ऑफ़लाइन मोड",
"offline.dismiss": "बंद करें",
"offline.lostTitle": "जुड़ाव टूट गया",
"offline.lostDesc": "SecureBit अभी ऑफ़लाइन है। कुछ सुविधाएँ सीमित हैं, पर आपका डेटा सुरक्षित है।",
"offline.point1": "आपका सत्र और कुंजियाँ बनी रहती हैं",
"offline.point2": "सर्वर पर कोई डेटा नहीं रखा जाता",
"offline.point3": "दोबारा जुड़ते ही संदेश और फ़ाइलें मिल जाएँगी",
"offline.continue": "ऑफ़लाइन जारी रखें",
"offline.restoredTitle": "जब आप दोबारा जुड़ेंगे",
"offline.restoredDesc": "जुड़ाव टूटने से कुछ नहीं जाता। SecureBit सब कुछ उपकरण पर ही कतार में रखता है और ऑनलाइन होते ही एन्क्रिप्टेड सत्र वहीं से चलाता है।",
"offline.r1Title": "आपके संदेश पहुँच जाएँगे",
"offline.r1Desc": "ऑफ़लाइन में लिखा सब कुछ अपने आप सामने वाले को चला जाएगा।",
"offline.r2Title": "फ़ाइलें पूरी चली जाएँगी",
"offline.r2Desc": "भेजना वहीं से जारी होगा जहाँ रुका था - दोबारा भेजने की ज़रूरत नहीं।",
"offline.r3Title": "उनके संदेश और फ़ाइलें आ जाएँगी",
"offline.r3Desc": "रुकावट के दौरान सामने वाले ने जो भेजा, वह क्रम से आपको मिल जाएगा।",
"offline.r4Title": "कुछ भी नहीं खोता",
"offline.r4Desc": "दोबारा जुड़ने पर कोई खाली जगह नहीं रहती - बातचीत वहीं से चलती है जहाँ रुकी थी।",
"offline.gotIt": "समझ गया",
"qr.showTitle": "QR कोड दिखाएँ",
"qr.showSubtitle": "पूरी स्क्रीन · सामने वाले को स्कैन करने दें",
"qr.showSubtitleFrames": "पूरी स्क्रीन · सामने वाले को सभी {frames} फ़्रेम स्कैन करने दें",
"notify.enabledBody": "सूचनाएँ चालू हो गईं। नए संदेशों पर आपको बताया जाएगा।",
"notify.workingBody": "सूचनाएँ काम कर रही हैं। नए संदेशों पर आपको बताया जाएगा।",
"pw.label": "पासवर्ड का ख़ाना",
"pw.placeholder": "पासवर्ड लिखें…",
"pw.decrypt": "डिक्रिप्ट करें",
"pw.cancel": "रद्द करें",
"file.title": "फ़ाइल स्थानांतरण",
"file.drop": "फ़ाइलें यहाँ छोड़ें",
"file.dropHint": "भेजने से पहले एंड-टू-एंड एन्क्रिप्टेड · 100 MB तक",
"file.browse": "उपकरण में देखें",
"file.incoming": "फ़ाइल का अनुरोध आया है",
"file.accept": "स्वीकारें",
"file.reject": "अस्वीकारें",
"file.download": "डाउनलोड करें",
"file.notReady": "जुड़ाव अभी तैयार नहीं",
"file.tooLarge": "फ़ाइल बहुत बड़ी है",
"file.typeNotAllowed": "इस तरह की फ़ाइल की अनुमति नहीं",
"file.maxConcurrent": "एक साथ स्थानांतरण की सीमा पूरी हो गई",
"file.gone": "यह फ़ाइल अब डाउनलोड के लिए उपलब्ध नहीं है।",
"call.incoming": "आती हुई कॉल",
"call.incomingVideo": "आती हुई वीडियो कॉल",
"call.encrypted": "एन्क्रिप्टेड कॉल",
"call.encryptedShort": "एन्क्रिप्टेड",
"call.peer": "सुरक्षित साथी",
"call.connecting": "जुड़ रहे हैं…",
"call.ringing": "घंटी बज रही है…",
"call.accept": "उठाएँ",
"call.decline": "मना करें",
"call.end": "कॉल समाप्त करें",
"call.camera": "कैमरा",
"call.cameraOff": "कैमरा बंद",
"call.peerCameraOff": "सामने वाले का कैमरा बंद है",
"call.flipCamera": "कैमरा बदलें",
"call.addVideo": "वीडियो जोड़ें",
"call.video": "वीडियो",
"call.muted": "आवाज़ बंद",
"call.expand": "बड़ा करें",
"call.minimize": "छोटा करें",
"call.quality": "जुड़ाव की गुणवत्ता",
"call.qualityExcellent": "बहुत अच्छी",
"call.videoPrefix": "वीडियो · ",
"call.voicePrefix": "आवाज़ · ",
"group.new": "नया समूह",
"group.create": "समूह बनाएँ",
"group.join": "समूह में शामिल हों",
"group.name": "समूह का नाम",
"group.nameTooLong": "समूह का नाम बहुत लंबा है।",
"group.capacity": "{max} लोगों तक, सीधे उपकरण से उपकरण। समूह खुलने से पहले सब एक ही सुरक्षा कोड मिलाएँगे।",
"group.invite": "बुलाएँ",
"group.inviteMore": "और सदस्यों को बुलाएँ",
"group.invitePeople": "{count} लोगों को बुलाएँ",
"group.invitation": "समूह का निमंत्रण",
"group.addMembers": "सदस्य जोड़ें",
"group.roomFor": "{remaining} और लोगों की जगह है। उनके आने पर सब एक नया समूह कोड मिलाएँगे।",
"group.membersCount": "{count} सदस्य",
"group.member": "सदस्य",
"group.members": "सदस्य",
"group.remove": "{name} को हटाएँ",
"group.message": "«{name}» में संदेश भेजें",
"group.leave": "छोड़ें",
"group.leaveThis": "यह समूह छोड़ें",
"group.cancel": "समूह रद्द करें",
"group.close": "बंद करें",
"group.cancelBtn": "रद्द करें",
"group.decline": "मना करें",
"group.working": "काम जारी…",
"group.sasTitle": "समूह का सुरक्षा कोड",
"group.sasEveryone": "यह कोड सबको एक जैसा दिखता है",
"group.sasCompare": "यह समूह खोलने के लिए हर सदस्य के साथ समूह कोड मिलाइए।",
"group.sasReadAloud": "ये अंक ज़ोर से पढ़कर सुनाइए - ",
"group.sasWarning": "अगर एक भी सदस्य अलग कोड पढ़ता है, तो कोई बीच में बैठा है। समूह रद्द कीजिए - पुष्टि मत कीजिए।",
"group.confirmFirst": "पहले समूह कोड की पुष्टि करें",
"group.codeSuffix": " · कोड {code}",
"group.exchangingNonces": "एक-बार के मान बदले जा रहे हैं…",
"group.waitingCommit": "हर सदस्य के वचन की प्रतीक्षा…",
"group.waitingJoin": "बाक़ी सदस्यों के जुड़ने की प्रतीक्षा…",
"group.emptyChat": "यहाँ अभी कुछ नहीं है। हर संदेश भेजने वाले के हस्ताक्षर के साथ आता है और हर सदस्य की अपनी एन्क्रिप्टेड लाइन से गुज़रता है।",
"group.noVerified": "अभी कोई सत्यापित चैट नहीं है। पहले आमने-सामने की चैट खोलिए और उसका सुरक्षा कोड मिलाइए - समूह उन्हीं जुड़ावों से बनता है जिन्हें आप पहले जाँच चुके हैं।",
"group.noMoreToAdd": "जोड़ने के लिए और कोई सत्यापित चैट नहीं है। पहले आमने-सामने की चैट खोलिए और उसका सुरक्षा कोड मिलाइए।",
"group.directLink": "सीधा पीयर-टू-पीयर जुड़ाव",
"group.noDirectLink": "अभी सीधा जुड़ाव नहीं है - बनने तक संदेश किसी और सदस्य के ज़रिए जाते हैं",
"group.relayNote": "कुछ सदस्यों से अभी सीधा जुड़ाव नहीं है। उनके संदेश किसी और सदस्य से होकर जाते हैं, जो यह तो देख सकता है कि बातचीत हो रही है, पर हस्ताक्षर के आगे न पढ़ सकता है न कही हुई बात बदल सकता है। समूह उन्हें सीधे जोड़ने की कोशिश करता रहता है।",
"group.relayOnlyOff": "केवल-रिले मोड बंद है, इसलिए हर सदस्य आपसे सीधे जुड़ता है और आपका IP पता जान लेता है - उनमें वे भी हैं जिन्हें किसी और ने बुलाया। अगर यह यहाँ मायने रखता है, तो नेटवर्क सेटिंग्स में इसे चालू कीजिए।",
"group.memberOffline": "{name} ऑफ़लाइन हैं और संदेश नहीं पाएँगे। वे अब भी सदस्य हैं - हटाने पर समूह की कुंजियाँ नए सिरे से बनती हैं।",
"group.joinNote": "बाक़ी सदस्यों को पता चलेगा कि आप इस समूह में हैं। पीछे का कोई इतिहास नहीं है - समूह ख़ाली से शुरू होता है।",
"group.inviteSentNote": "जब तक वे स्वीकार नहीं करते, समूह चलता रहता है। उनके लिए पीछे का कोई इतिहास नहीं है - वे सिर्फ़ अब से भेजा गया देखेंगे।",
"group.errNotCreated": "समूह नहीं बना",
"group.errNobodyAccepted": "समय रहते किसी ने निमंत्रण स्वीकार नहीं किया।",
"group.errNothingSent": "न कुछ भेजा गया, न कुछ सत्यापित हुआ। इसे बंद कीजिए और सबके जुड़ने पर दोबारा कोशिश कीजिए।",
"group.errNotFormed": "यह समूह नहीं बन सका।",
"group.errFull": "यह समूह भर चुका है।",
"group.errInviteFailed": "निमंत्रण नहीं भेजा जा सका - वह चैट जुड़ी हुई नहीं है।",
"group.errNoMemberList": "समूह बनाने वाले ने सदस्यों की सूची कभी भेजी ही नहीं।",
"group.errUnsignedList": "सदस्य सूची पर समूह बनाने वाले के हस्ताक्षर नहीं हैं। दोबारा कोशिश मत कीजिए - उन्हें बताइए।",
"group.errNotOwner": "समूह के स्वामी के अलावा किसी और ने सदस्य बदलने की कोशिश की।",
"hdr.tagline": "एंड-टू-एंड एन्क्रिप्टेड",
"hdr.netSettings": "उन्नत नेटवर्क सेटिंग्स",
"hdr.netSettingsTitle": "उन्नत नेटवर्क सेटिंग्स (STUN/TURN)",
"hdr.disconnect": "जुड़ाव तोड़ें",
"status.connected": "जुड़ गया",
"status.connecting": "जुड़ रहे हैं…",
"status.notConnected": "जुड़ा नहीं है",
"status.reconnecting": "दोबारा जुड़ रहे हैं…",
"status.retrying": "फिर कोशिश…",
"status.verifying": "सत्यापन जारी…",
"status.peerDisconnected": "सामने वाले का जुड़ाव टूटा",
"sec.replayProtection": "पुनरावृत्ति हमले से बचाव",
"sec.messageIntegrity": "संदेश की अखंडता (HMAC)",
"sec.forwardSecrecy": "पूर्ण अग्रगामी गोपनीयता",
"sec.metadataProtection": "मेटाडेटा सुरक्षा",
"sec.trafficObfuscation": "ट्रैफ़िक अस्पष्टीकरण",
"sec.realTests": "असली क्रिप्टोग्राफ़िक जाँचें",
"sec.simulatedData": "बनावटी डेटा",
"sec.testPassed": "जाँच पास",
"sec.testFailed": "जाँच विफल या उपलब्ध नहीं",
"sec.verificationDone": "असली क्रिप्टोग्राफ़िक सत्यापन पूरा हुआ",
"sec.verificationInProgress": "सुरक्षा सत्यापन जारी…",
"sec.verificationWait": "सुरक्षा सत्यापन जारी…\nकृपया वास्तविक समय की क्रिप्टोग्राफ़िक जाँच पूरी होने तक रुकिए।",
"sec.verificationUnavailable": "सुरक्षा सत्यापन उपलब्ध नहीं",
"chat.placeholder": "एन्क्रिप्टेड संदेश लिखें…",
"chat.send": "संदेश भेजें",
"chat.sendFiles": "फ़ाइलें भेजें",
"chat.hideFiles": "फ़ाइलें छिपाएँ",
"chat.recordVoice": "वॉइस संदेश रिकॉर्ड करें",
"chat.sendVoice": "वॉइस संदेश भेजें",
"chat.discard": "छोड़ें",
"chat.codeBlock": "कोड ब्लॉक के रूप में भेजें (इनपुट बड़ा हो जाएगा)",
"chat.codeHint": "कोड का अंश · रूप-सज्जा बनी रहेगी · भेजने के लिए ⌘↵",
"chat.viewOnce": "एक बार देखें",
"chat.viewOnceTitle": "एक बार देखें - सामने वाले के पढ़ते ही मिट जाएगा",
"chat.viewOncePrefix": "एक बार देखें · ",
"chat.viewOnceTap": "एक बार देखें · दिखाने के लिए दबाएँ",
"chat.viewedOnce": "देखा जा चुका",
"chat.disappearing": "मिटने वाला संदेश - दोनों ओर से हट जाता है",
"chat.disappearAfter": "इतने समय बाद मिटे",
"chat.visibleFor": "इतनी देर दिखे",
"chat.timerPrefix": "टाइमर · ",
"chat.expired": "यह संदेश समाप्त हो चुका है",
"chat.deleteForEveryone": "सबके लिए हटाएँ",
"chat.sending": "भेजा जा रहा है",
"chat.delivered": "पहुँच गया",
"chat.notSent": "नहीं भेजा गया",
"chat.notSentReason": "नहीं भेजा गया - सुरक्षित चैनल अभी तैयार नहीं है। आगे बढ़ने के लिए दोबारा जुड़िए।",
"chat.encrypted": "एन्क्रिप्टेड",
"chat.decrypted": "डिक्रिप्टेड",
"chat.encryptedOnDevice": "आपके उपकरण पर एन्क्रिप्ट हुआ",
"chat.uploading": "भेजा जा रहा है",
"chat.downloading": "डाउनलोड हो रहा है",
"chat.transferring": "स्थानांतरण जारी…",
"chat.copied": "कॉपी हो गया!",
"chat.collapse": "समेटें",
"chat.closeMenu": "मेन्यू बंद करें",
"chat.newChat": "नई चैट",
"chat.newGroup": "नया समूह",
"chat.createGroup": "समूह बनाएँ",
"chat.groupChats": "समूह चैट",
"chat.secureChat": "सुरक्षित चैट",
"chat.nameThis": "इस चैट को नाम दें",
"chat.rename": "चैट का नाम बदलें (केवल इस उपकरण पर)",
"chat.renameHint": "नाम बदलने के लिए दो बार क्लिक करें",
"chat.localLabel": "स्थानीय नाम · सिर्फ़ इसी उपकरण पर सहेजा गया",
"chat.setStatus": "अपनी स्थिति चुनें",
"chat.yourStatusPrefix": "आपकी स्थिति - ",
"chat.meshHint": "8 साथियों तक · P2P मेश",
"chat.offline": "ऑफ़लाइन",
"chat.noNetwork": "नेटवर्क नहीं · दोबारा जुड़ रहे हैं",
"chat.startVoiceCall": "एन्क्रिप्टेड वॉइस कॉल शुरू करें",
"chat.startVideoCall": "एन्क्रिप्टेड वीडियो कॉल शुरू करें",
"chat.verifyForCalls": "कॉल के लिए पहले सत्र सत्यापित करें",
"chat.e2eeNote": "हर संदेश आपके उपकरण से निकलने से पहले एंड-टू-एंड एन्क्रिप्ट हो जाता है।",
"chat.peersOnly": "केवल जुड़े हुए साथियों को एंड-टू-एंड भेजा जाता है - किसी सर्वर पर कभी नहीं रखा जाता।",
"flow.invitationCreated": "सुरक्षित निमंत्रण बन गया",
"flow.invitationCreatedBang": "सुरक्षित निमंत्रण बना और एन्क्रिप्ट हो गया।",
"flow.responseCreated": "सुरक्षित उत्तर बन गया",
"flow.responseCreatedBang": "सुरक्षित उत्तर बन गया।",
"flow.sendInvitation": "निमंत्रण कोड सामने वाले को किसी सुरक्षित रास्ते से भेजिए (कॉल, SMS वग़ैरह)।",
"flow.sendResponse": "उत्तर कोड चैनल शुरू करने वाले को सुरक्षित रास्ते से भेजिए, या उन्हें नीचे का QR स्कैन करने दीजिए।",
"flow.sendEncryptedCode": "एन्क्रिप्टेड कोड भेजें",
"flow.sendTheResponse": "उत्तर भेजें",
"flow.pasteOrWrite": "कोड चिपकाएँ या लिखें…",
"flow.processingInvitation": "सुरक्षित निमंत्रण संसाधित हो रहा है…",
"flow.processingResponse": "सुरक्षित उत्तर संसाधित हो रहा है…",
"flow.finalizing": "सुरक्षित जुड़ाव पूरा किया जा रहा है…",
"flow.channelEstablished": "सुरक्षित चैनल बन गया",
"flow.channelReady": "सुरक्षित चैनल तैयार है",
"flow.restoring": "जुड़ाव बहाल हो रहा है…",
"flow.invitationCaptured": "निमंत्रण पढ़ लिया गया।",
"err.needInvitation": "सामने वाले का दिया निमंत्रण कोड चिपकाना ज़रूरी है।",
"err.needResponse": "सामने वाले का दिया उत्तर कोड चिपकाना ज़रूरी है।",
"err.responseFormat": "उत्तर का प्रारूप ग़लत है - कोड जाँचिए",
"err.responseNoKey": "उत्तर कोड ग़लत है - क्रिप्टोग्राफ़िक कुंजी नहीं है या ख़राब है। कोड जाँचकर दोबारा कोशिश कीजिए।",
"err.responseNoSignKey": "उत्तर कोड ग़लत है - हस्ताक्षर जाँचने की कुंजी नहीं है। कोड जाँचकर दोबारा कोशिश कीजिए।",
"err.responseOutdated": "उत्तर का डेटा पुराना है - नया निमंत्रण इस्तेमाल कीजिए",
"err.setupError": "जुड़ाव बनाते समय गड़बड़ी",
"err.notReady": "जुड़ाव अभी तैयार नहीं",
"err.securityBreach": "सुरक्षा में सेंध मिली - जुड़ाव अस्वीकार",
"err.securityValidation": "सुरक्षा जाँच विफल - हमला हो सकता है",
"err.retiredQr": "यह QR ऐसे पुराने प्रारूप का है जिससे निमंत्रण नहीं भेजा जा सका। सामने वाले से नया बनवाइए, या कॉपी-पेस्ट कीजिए।",
"err.compressedQrNote": "संक्षेप के लिए दबाया हुआ QR कभी-कभी SDP छोड़ देता है। जुड़ाव न बने तो कॉपी-पेस्ट कीजिए।",
"err.inviteNotConnected": "निमंत्रण नहीं भेजा जा सका। वह चैट अभी जुड़ी हुई नहीं है।",
"err.inviteNotConnectedRetry": "निमंत्रण नहीं भेजा जा सका। वह चैट अभी जुड़ी हुई नहीं है - उसे दोबारा खोलकर कोशिश कीजिए।",
"err.nobodyAccepted": "किसी ने निमंत्रण स्वीकार नहीं किया। समूह वैसा ही है।",
"err.noAudio": "कोई आवाज़ रिकॉर्ड नहीं हुई - माइक्रोफ़ोन की अनुमति जाँचकर दोबारा कोशिश कीजिए।",
"err.voiceNeedsConnection": "वॉइस संदेश के लिए चालू सुरक्षित जुड़ाव चाहिए। दोबारा जुड़कर कोशिश कीजिए।",
"err.voiceRestoring": "जुड़ाव बहाल हो रहा है - थोड़ी देर में वॉइस संदेश दोबारा भेजने की कोशिश कीजिए।",
"err.fileTooLarge": "फ़ाइल बहुत बड़ी है",
"sas.safetyNumber": "सुरक्षा संख्या",
"sas.incorrect": "कोड ग़लत है। सामने वाले से मिलाकर दोबारा कोशिश कीजिए।",
"sas.noMatch": "कोड मेल नहीं खाते",
"sas.makeSure": "पक्का कीजिए कि दोनों कोड बिल्कुल एक जैसे हैं।",
"sas.tooManyAttempts": "बहुत बार ग़लत कोशिश हुई। सुरक्षा के लिए सत्र रीसेट कर दिया गया।",
"sas.verificationFailed": "सत्यापन विफल",
"sas.verified": "सत्यापित · पूर्ण अग्रगामी गोपनीयता",
"sas.runVerification": "सुरक्षा सत्यापन चलाएँ",
"sec.panelTitle": "नेटवर्क और क्रिप्टो का ब्योरा",
"sec.security": "सुरक्षा",
"sec.transport": "परिवहन",
"sec.keyExchange": "कुंजी विनिमय",
"sec.allEnabled": "सभी सुरक्षा सुविधाएँ डिफ़ॉल्ट रूप से चालू हैं",
"sec.realTimeNote": "असली क्रिप्टोग्राफ़िक फ़ंक्शनों से वास्तविक समय में जाँच - कोई बनावटी डेटा नहीं।",
"sec.simulatedWarning": "ध्यान दें: जुड़ाव शायद पूरी तरह बना नहीं है - मान बनावटी हो सकते हैं।",
"dl.title": "SecureBit डाउनलोड करें",
"dl.free": "मुफ़्त · खुला स्रोत",
"dl.soon": "मोबाइल ऐप (iOS, Android) और ब्राउज़र एक्सटेंशन (Chrome, Firefox, Opera) जल्द आ रहे हैं।",
"chatHdr.chat": "चैट",
"chatHdr.chats": "चैट",
"chatHdr.newChat": "+ नई",
"chatHdr.secure": "सुरक्षित",
"chatHdr.p2pSub": "P2P · एंड-टू-एंड एन्क्रिप्टेड",
"chatHdr.save": "सहेजें",
"chatHdr.close": "बंद करें",
"chatHdr.expand": "बड़ा करें",
"chatHdr.you": "आप",
"chatHdr.qrCode": "QR कोड",
"chat.disconnected": "जुड़ाव टूटा",
"call.mute": "आवाज़ बंद करें",
"call.endShort": "समाप्त",
"group.add": "जोड़ें",
"group.send": "भेजें",
"sec.pfsShort": "पूर्ण अग्रगामी गोपनीयता",
"sec.cipher": "सिफ़र",
"chat.close": "बंद करें",
"file.needConnection": "फ़ाइल भेजने के लिए जुड़ाव चाहिए",
"presence.available": "उपलब्ध",
"presence.away": "दूर",
"presence.busy": "व्यस्त",
"presence.offline": "ऑफ़लाइन",
"presence.invisible": "अदृश्य",
"presence.availableDesc": "ऑनलाइन और उपलब्ध",
"presence.awayDesc": "निष्क्रिय · थोड़ी देर के लिए दूर",
"presence.busyDesc": "परेशान न करें",
"presence.invisibleDesc": "दूसरों को ऑफ़लाइन दिखें",
"presence.online": "ऑनलाइन",
"conn.p2p": "P2P · जुड़ा हुआ",
"conn.verifying": "सत्यापन जारी…",
"conn.connecting": "जुड़ रहे हैं…",
"conn.reconnecting": "दोबारा जुड़ रहे हैं…",
"conn.peerDisconnected": "सामने वाले का जुड़ाव टूटा",
"conn.disconnected": "जुड़ाव टूटा",
"chat.defaultLabel": "चैट",
"groupPhase.forming": "बन रहा है…",
"groupPhase.commitments": "वचनों का आदान-प्रदान…",
"groupPhase.revealing": "प्रकट किया जा रहा है…",
"groupPhase.compare": "समूह कोड मिलाइए",
"groupPhase.ready": "समूह तैयार",
"groupPhase.failed": "समूह नहीं बना",
"call.qualityGood": "अच्छी",
"call.qualityFair": "ठीक-ठाक",
"call.qualityWeak": "कमज़ोर",
"msg.code": "कोड",
"msg.timer": "टाइमर",
"msg.voice": "आवाज़",
"msg.play": "चलाएँ",
"msg.sent": "भेजा गया",
"msg.read": "पढ़ लिया",
"report.title": "वास्तविक समय में सुरक्षा सत्यापन",
"report.active": "सक्रिय",
"report.testsPassed": "पास हुई जाँचें",
"report.verifiedAt": "सत्यापन का समय",
"report.source": "स्रोत",
"secTest.verifyECDHKeyExchange": "ECDH कुंजी विनिमय",
"secTest.verifyECDSASignatures": "ECDSA डिजिटल हस्ताक्षर",
"secTest.verifyEncryption": "AES-GCM एन्क्रिप्शन",
"secTest.verifyMessageIntegrity": "संदेश की अखंडता",
"secTest.verifyPerfectForwardSecrecy": "पूर्ण अग्रगामी गोपनीयता",
"secTest.verifyPFS": "पूर्ण अग्रगामी गोपनीयता",
"secTest.verifyReplayProtection": "पुनरावृत्ति हमले से बचाव",
"secTest.verifyDTLSFingerprint": "DTLS फ़िंगरप्रिंट",
"secTest.verifySASVerification": "SAS सत्यापन",
"secTest.verifyMetadataProtection": "मेटाडेटा सुरक्षा",
"secTest.verifyTrafficObfuscation": "ट्रैफ़िक अस्पष्टीकरण",
"secTest.verifyPacketPadding": "पैकेट पैडिंग",
"secTest.verifyNestedEncryption": "परतदार एन्क्रिप्शन",
"secTest.verifyNonExtractableKeys": "न निकाली जा सकने वाली कुंजियाँ",
"secTest.verifyRateLimiting": "दर सीमा",
"secTest.verifyMutualAuth": "पारस्परिक प्रमाणीकरण",
"secTest.verifyAuthProof": "प्रमाणीकरण का प्रमाण",
"secTest.verifyEnhancedValidation": "उन्नत जाँच",
"secTest.verifyAdvancedFeatures": "उन्नत सुविधाएँ",
"secTest.verifySignature": "हस्ताक्षर की जाँच",
"secDetail.Security system initializing...": "सुरक्षा प्रणाली शुरू हो रही है…",
"secDetail.Nested encryption active": "परतदार एन्क्रिप्शन चालू है",
"secDetail.Nested encryption failed": "परतदार एन्क्रिप्शन विफल",
"secDetail.Packet padding active": "पैकेट पैडिंग चालू है",
"secDetail.Packet padding failed": "पैकेट पैडिंग विफल",
"secDetail.Advanced features active": "उन्नत सुविधाएँ चालू हैं",
"secDetail.Advanced features failed": "उन्नत सुविधाएँ विफल",
"secDetail.No encryption key available": "कोई एन्क्रिप्शन कुंजी उपलब्ध नहीं",
"secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM एन्क्रिप्शन और डिक्रिप्शन सही काम कर रहे हैं",
"secDetail.No ECDH key pair available": "कोई ECDH कुंजी युग्म उपलब्ध नहीं",
"secDetail.Key derivation failed": "कुंजी निकालना विफल रहा",
"secDetail.No ECDSA key pair available": "कोई ECDSA कुंजी युग्म उपलब्ध नहीं",
"secDetail.ECDSA digital signatures working correctly": "ECDSA डिजिटल हस्ताक्षर सही काम कर रहे हैं",
"secDetail.MAC key not available or invalid": "MAC कुंजी उपलब्ध नहीं या अमान्य है",
"secDetail.Rate limiter did not block a message over the limit": "दर सीमक ने सीमा से अधिक संदेश को नहीं रोका",
"secDetail.Rate limiter is not available": "दर सीमक उपलब्ध नहीं है",
"secDetail.Replay protection is working correctly": "पुनरावृत्ति हमले से बचाव सही काम कर रहा है",
"secDetail.Replay protection not enabled": "पुनरावृत्ति हमले से बचाव चालू नहीं है",
"secDetail.SAS code not available": "SAS कोड उपलब्ध नहीं",
"secDetail.SAS verification code is valid and available": "SAS सत्यापन कोड वैध और उपलब्ध है",
"secDetail.Traffic obfuscation is working correctly": "ट्रैफ़िक अस्पष्टीकरण सही काम कर रहा है",
"secDetail.Traffic obfuscation not enabled": "ट्रैफ़िक अस्पष्टीकरण चालू नहीं है",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "इस सत्र के लिए ऐसी क्षणिक ECDH कुंजी युग्म नहीं है जिसे निकाला न जा सके",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "केवल सत्र-स्तर की अग्रगामी गोपनीयता: कुंजियाँ हर सत्र के लिए क्षणिक हैं, पर इस जुड़ाव में Double Ratchet चालू नहीं है (सामने वाला पुराना संस्करण चला रहा है), इसलिए सत्र कुंजी लीक होने पर पूरी बातचीत खुल जाती है।",
"msg.pause": "रोकें",
"msg.failed": "विफल",
"groupErr.timeout": "कोड तैयार होने से पहले ही एक सदस्य ने जवाब देना बंद कर दिया।",
"groupErr.keyMismatch": "एक सदस्य की कुंजी उसकी बताई पहचान से मेल नहीं खाई।",
"groupErr.revealMismatch": "एक सदस्य ने जो मान बताया, वह उसके पहले दिए वचन से मेल नहीं खाया।",
"groupErr.commitChanged": "एक सदस्य ने बीच में अपना वचन बदल दिया।",
"groupErr.missingKey": "सूची में एक सदस्य था जिसकी कुंजी कभी आई ही नहीं।",
"groupErr.outsider": "समूह के बाहर से किसी का फ़्रेम आया।",
"groupErr.limit": "एक समूह में अधिकतम आठ सदस्य होते हैं।",
"groupErr.tooLarge": "एक संदेश इतना बड़ा था कि समूह को नहीं भेजा जा सका।",
"fileType.text": "सादा पाठ",
"fileType.images": "चित्र",
"fileType.archives": "संग्रह फ़ाइलें",
"fileType.voice": "वॉइस संदेश",
"fileType.unsupported": "समर्थित नहीं",
"qrScan.title": "QR कोड स्कैन करें",
"qrScan.auto": "स्वतः मोड",
"qrScan.reset": "रीसेट",
"qrScan.autoScroll": "स्वतः स्क्रॉल चालू है",
"qrScan.starting": "कैमरा शुरू हो रहा है…",
"qrScan.point": "कैमरा सामने वाले के QR पर रखें",
"qrScan.tapFocus": "फ़ोकस के लिए स्क्रीन दबाएँ",
"qrScan.focusing": "फ़ोकस हो रहा है…",
"iceErr.notArray": "सर्वरों की सूची एक सरणी होनी चाहिए",
"iceErr.invalidJson": "ग़लत JSON",
"iceErr.tooMany": "बहुत ज़्यादा सर्वर (अधिकतम {max})",
"iceErr.invalidEntry": "{label}: ग़लत प्रविष्टि",
"iceErr.urlCount": "{label}: 1 से {max} तक URL चाहिए",
"iceErr.turnCreds": "{label}: TURN सर्वरों को आमतौर पर उपयोगकर्ता नाम और प्रमाण चाहिए",
"iceUrl.notString": "URL एक स्ट्रिंग होना चाहिए",
"iceUrl.empty": "URL ख़ाली है",
"iceUrl.tooLong": "URL बहुत लंबा है",
"iceUrl.badChars": "URL में अमान्य अक्षर हैं",
"iceUrl.badScheme": "URL stun:, stuns:, turn: या turns: से शुरू होना चाहिए",
"iceUrl.badQuery": "URL की क्वेरी ग़लत है",
"iceUrl.noHost": "URL में होस्ट नहीं है",
"iceUrl.badHost": "URL का होस्ट या पोर्ट ग़लत है",
"iceUrl.badTransport": "URL की क्वेरी transport=udp या transport=tcp होनी चाहिए",
"msg.off": "बंद",
"file.consentUnavailable": "सहमति नहीं ली जा सकी",
"secLevel.MAXIMUM": "अधिकतम",
"secLevel.INITIALIZING": "शुरू हो रहा है",
"secLevel.ERROR": "त्रुटि",
"secLevel.UNKNOWN": "अज्ञात",
"status.error": "त्रुटि",
"offline.disconnect": "जुड़ाव तोड़ें",
"offline.learnMore": "और जानें",
"pwa.installApp": "ऐप इंस्टॉल करें",
"chat.onWeb": "आप वेब संस्करण पर हैं",
"groupCall.startVoice": "समूह वॉइस कॉल शुरू करें",
"groupCall.startVideo": "समूह वीडियो कॉल शुरू करें",
"groupCall.join": "शामिल हों",
"groupCall.dismiss": "अभी नहीं",
"groupCall.leave": "कॉल छोड़ें",
"groupCall.you": "आप",
"groupCall.connecting": "जुड़ रहा है…",
"groupCall.waitingLink": "सीधे लिंक की प्रतीक्षा…",
"groupCall.legFailed": "कनेक्ट नहीं हो सका",
"groupCall.startedVoice": "{name} ने वॉइस कॉल शुरू की",
"groupCall.startedVideo": "{name} ने वीडियो कॉल शुरू की",
"groupCall.inCall": "कॉल में {count}",
"groupCall.err.permission_denied": "कॉल शुरू नहीं हो सकी - माइक्रोफ़ोन और कैमरे की अनुमति अवरुद्ध है। इस साइट के लिए अनुमति दें और फिर कोशिश करें।",
"groupCall.err.device_not_found": "कॉल शुरू नहीं हो सकी - इस डिवाइस पर कोई माइक्रोफ़ोन नहीं मिला।",
"groupCall.err.device_busy": "कॉल शुरू नहीं हो सकी - आपका माइक्रोफ़ोन किसी अन्य ऐप के उपयोग में है। उसे बंद करके फिर कोशिश करें।",
"groupCall.err.media_failed": "कॉल शुरू नहीं हो सकी - माइक्रोफ़ोन नहीं खुल सका।",
"groupCall.err.call_in_progress": "इस समूह में पहले से एक कॉल चल रही है। नई शुरू करने के बजाय उसमें शामिल हों।",
"groupCall.err.not_ready": "कॉल करने से पहले समूह कोड की पुष्टि करें।",
"groupCall.speaking": "{name} बोल रहे हैं",
"groupCall.pin": "{name} को बड़ा दिखाएँ",
"groupCall.unpin": "सभी पर लौटें",
"groupCall.showEveryone": "सभी",
"msg.after5s": "पढ़ने के 5 सेकंड बाद",
"msg.after15s": "पढ़ने के 15 सेकंड बाद",
"msg.after30s": "पढ़ने के 30 सेकंड बाद",
"msg.after1m": "पढ़ने के 1 मिनट बाद",
"msg.sec30": "30 सेकंड",
"msg.min5": "5 मिनट",
"msg.hour1": "1 घंटा",
"desktop.shareDesc": "कोड अपने साथी को भेजें। यह एक बार का है और जल्दी समाप्त हो जाता है।",
"desktop.invitationCreated": "सुरक्षित निमंत्रण बन गया - इसे अपने साथी को भेजें।",
"desktop.joinDesc": "अपना सुरक्षित उत्तर बनाने के लिए साथी का निमंत्रण कोड चिपकाएँ।",
"desktop.offerTag": "निमंत्रण · टेक्स्ट कॉपी करें",
"desktop.answerTag": "उत्तर · टेक्स्ट कॉपी करें",
"desktop.offerPlaceholder": "निमंत्रण कोड यहाँ दिखाई देगा…",
"desktop.answerPlaceholder": "उत्तर कोड यहाँ दिखाई देगा…",
"desktop.backToChats": "चैट पर वापस",
"desktop.sendFeedback": "प्रतिक्रिया भेजें",
"desktop.callsNeedVerified": "कॉल के लिए सत्यापित सुरक्षित चैनल चाहिए।",
"desktop.noOpenChannel": "कोई खुला सुरक्षित चैनल नहीं है।",
"desktop.chatCarriesCall": "यह चैट एक समूह कॉल ले जा रही है। 1:1 कॉल करने से पहले समूह कॉल छोड़ें।",
"desktop.err.permission_denied": "कॉल शुरू नहीं हो सकी - माइक्रोफ़ोन और कैमरे की अनुमति अवरुद्ध है। सिस्टम सेटिंग्स में इसे अनुमति दें और फिर कोशिश करें।",
"desktop.language": "भाषा",
"desktop.languageHint": "तुरंत लागू होता है। पहले भेजे गए संदेश अपनी ही भाषा में रहते हैं।",
"desktop.compareCode": "सत्यापन कोड अपने साथी से मिलाएँ और मेल खाने पर पुष्टि करें।",
"desktop.verifyBeforeFiles": "फ़ाइलें भेजने से पहले सत्यापन पूरा करें।",
"desktop.verifyBeforeSending": "संदेश भेजने से पहले सत्यापन पूरा करें।",
"desktop.disconnectedByBackend": "कनेक्शन सुरक्षित रूप से बंद कर दिया गया।",
"desktop.restoreFailed": "कनेक्शन बहाल नहीं हो सका। यह चैट बंद की जा रही है।",
"desktop.channelNotReady": "डेटा चैनल अभी उपलब्ध नहीं है। कनेक्शन बनने तक प्रतीक्षा करें।",
"desktop.enterCode": "पुष्टि के लिए सत्यापन कोड दर्ज करें।",
"desktop.noOffer": "कोई निमंत्रण नहीं मिला। पहले एक बनाएँ।",
"desktop.notInitiator": "यह कनेक्शन आपने नहीं बनाया, इसलिए लागू करने के लिए कोई उत्तर नहीं है।",
"desktop.decryptFailed": "एक संदेश डिक्रिप्ट नहीं हो सका और हटा दिया गया।",
"desktop.badMessageFormat": "गलत प्रारूप वाला फ़्रेम आया और हटा दिया गया।",
"desktop.notSentNotReady": "संदेश नहीं भेजा गया: सुरक्षित चैनल तैयार नहीं है। सत्यापन पूरा होने की प्रतीक्षा करें या फिर से जुड़ें।",
"desktop.micDenied": "माइक्रोफ़ोन की अनुमति अस्वीकार कर दी गई।",
"desktop.noChannelWait": "कोई खुला सुरक्षित चैनल नहीं - कनेक्शन बनने तक प्रतीक्षा करें।",
"desktop.sasFailed": "सत्यापन विफल। बीच में कोई हो सकता है, इसलिए कनेक्शन रोक दिया गया।",
"desktop.sasOk": "सत्यापन सफल। यह चैनल सिरे से सिरे तक प्रमाणित है।",
"desktop.iceForgotten": "सहेजे गए सर्वर भुला दिए गए। सार्वजनिक ICE सर्वर उपयोग हो रहे हैं।",
"desktop.icePublic": "सार्वजनिक ICE सर्वर उपयोग हो रहे हैं।",
"desktop.verificationInProgress": "सुरक्षा सत्यापन अभी चल रहा है। पूरा होने तक प्रतीक्षा करें।",
"desktop.fileGone": "यह फ़ाइल अब डाउनलोड के लिए उपलब्ध नहीं है।",
"desktop.codeMismatch": "सत्यापन कोड मेल नहीं खाते। सुरक्षा के लिए कनेक्शन बंद किया जा रहा है।",
"desktop.noLocalCode": "सत्यापन विफल: तुलना के लिए कोई स्थानीय कोड नहीं है। सुरक्षा के लिए कनेक्शन बंद किया जा रहा है।",
"desktop.protocolViolation": "साथी ने आपके पुष्टि करने से पहले ही कोड की पुष्टि का दावा किया। सुरक्षा के लिए कनेक्शन बंद किया जा रहा है।",
"desktop.verificationRejected": "सत्यापन अस्वीकार। सुरक्षा के लिए कनेक्शन रोक दिया गया।",
"secLevel.HIGH": "उच्च",
"secLevel.MEDIUM": "मध्यम",
"secLevel.LOW": "निम्न",
"desktop.rerun": "दोबारा जाँचें",
"desktop.ice.customDesc": "अधिकतम {max} सर्वर, प्रति पंक्ति एक URL या JSON।",
"desktop.ice.persistDesc": "इसी डिवाइस पर सहेजा जाता है। केवल इसी सत्र के लिए उपयोग करना हो तो बंद रहने दें।",
"desktop.group.leaveNote": "बाकी सदस्यों को बता दिया जाता है कि आप चले गए। उसके बाद इस डिवाइस पर इस समूह का कुछ नहीं रहता - किसी सर्वर के पास प्रति नहीं है जिससे लौटा जा सके, इसलिए नया निमंत्रण चाहिए होगा।",
"desktop.sec.ecdsaOk": "हैंडशेक के दौरान साथी के की-पैकेज का हस्ताक्षर सत्यापित (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "कोई पूर्ण हैंडशेक नहीं",
"desktop.sec.ecdhOk": "सत्र कुंजियाँ अस्थायी ECDH P-384 विनिमय से HKDF-SHA-256 द्वारा व्युत्पन्न",
"desktop.sec.ecdhNone": "कोई सत्र कुंजी व्युत्पन्न नहीं हुई",
"desktop.sec.encryptionOk": "कोर में AES-GCM एन्क्रिप्शन और डिक्रिप्शन सत्यापित",
"desktop.sec.encryptionNa": "AES-GCM स्व-परीक्षण नहीं चल सका",
"desktop.sec.integrityOk": "संदेश अखंडता सत्यापित (AES-GCM प्रमाणीकरण)",
"desktop.sec.integrityNa": "अखंडता स्व-परीक्षण नहीं चल सका",
"desktop.sec.pfsOk": "Double Ratchet सक्रिय - हर संदेश की अपनी कुंजी है",
"desktop.sec.pfsNa": "मापा नहीं गया",
"desktop.sec.replayOk": "रैचेट संदेश कुंजियाँ उपयोग होते ही नष्ट हो जाती हैं, इसलिए पकड़ा गया फ़्रेम दोबारा नहीं चलाया जा सकता",
"desktop.sec.replayNa": "मापा नहीं गया",
"desktop.sec.dtlsPinned": "साथी का DTLS फ़िंगरप्रिंट पिन किया गया: {fp}",
"desktop.sec.dtlsNone": "दूरस्थ DTLS फ़िंगरप्रिंट उपलब्ध नहीं",
"desktop.sec.sasBoth": "दोनों पक्षों ने बाहरी माध्यम से सुरक्षा कोड की पुष्टि की",
"desktop.sec.sasIncomplete": "सुरक्षा कोड की पुष्टि दोनों पक्षों ने नहीं की",
"desktop.sec.metadataOk": "समर्पित मेटाडेटा कुंजी व्युत्पन्न (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "कोई मेटाडेटा कुंजी नहीं",
"desktop.sec.coverOn": "आवरण ट्रैफ़िक सक्रिय: रैचेट चैनल पर यादृच्छिक नकली फ़्रेम (हर 15-30 सेकंड में 32-128 B)",
"desktop.sec.coverOff": "आवरण ट्रैफ़िक जनरेटर नहीं चल रहा",
"desktop.sec.coverUnsupported": "आवरण ट्रैफ़िक के लिए Double Ratchet सत्र चाहिए (साथी पुराने संस्करण पर है)",
"desktop.tagline": "सिरे से सिरे तक आज़ादी",
"desktop.callsNotHere": "इस बिल्ड में कॉल अभी उपलब्ध नहीं हैं। संदेश, फ़ाइलें और समूह चैट सामान्य रूप से काम करते हैं।"
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["hi"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "언어",
"language.suggest.text": "이 페이지는 한국어로도 볼 수 있습니다.",
"language.suggest.cta": "한국어로 보기",
"language.suggest.dismiss": "닫기",
"community.title": "프라이버시의 미래를 함께 만듭니다",
"community.description": "SecureBit은 커뮤니티 덕분에 자랍니다. 여러분의 아이디어와 의견이 안전한 소통의 미래를 만듭니다 - 모든 과정이 공개되어 있고, 전 구간에서 ASN.1 검증을 수행합니다.",
"community.github": "GitHub 저장소",
"community.feedback": "의견 보내기",
"unique.eyebrow": "무엇이 다른가",
"unique.heading": "SecureBit이 특별한 이유",
"unique.s1.titleTop": "계층으로 쌓은",
"unique.s1.titleBottom": "암호화 코어",
"unique.s1.collapsed": "암호화 코어",
"unique.s1.desc": "ECDH P-384 키 교환, AES-256-GCM 페이로드, ECDSA 서명, 그리고 완전한 ASN.1 검증을 하나의 견고한 파이프라인으로 묶었습니다.",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "순수 P2P",
"unique.s2.titleBottom": "WebRTC 기반",
"unique.s2.collapsed": "WebRTC 기반 순수 P2P",
"unique.s2.desc": "메시지는 WebRTC를 통해 기기에서 기기로 곧장 오갑니다. 데이터를 붙들고 있는 릴레이는 없고, 서버는 두 사람이 서로를 찾도록 돕기만 합니다.",
"unique.s2.tags": [
"DTLS 1.3",
"릴레이 없음"
],
"unique.s3.titleTop": "완전한",
"unique.s3.titleBottom": "순방향 비밀성",
"unique.s3.collapsed": "순방향 비밀성",
"unique.s3.desc": "세션 키는 끊임없이 교체되고 사용 후 폐기됩니다. 그래서 키 하나가 유출되어도 지난 대화는 열리지 않습니다.",
"unique.s3.tags": [
"일회용 키",
"자동 교체"
],
"unique.s4.titleTop": "트래픽",
"unique.s4.titleBottom": "난독화",
"unique.s4.collapsed": "트래픽 난독화",
"unique.s4.desc": "패킷 크기와 전송 간격을 채우고 무작위로 흐트러뜨려, 회선을 들여다보는 쪽에서도 메타데이터의 규칙이 드러나지 않습니다.",
"unique.s4.tags": [
"패킷 패딩",
"시간 지터"
],
"unique.s5.titleTop": "데이터 수집",
"unique.s5.titleBottom": "전혀 없음",
"unique.s5.collapsed": "데이터 수집 없음",
"unique.s5.desc": "계정도, 로그도, 저장된 메시지도 없습니다. 서버에는 유출되거나 압수되거나 팔릴 것이 아무것도 없습니다.",
"unique.s5.tags": [
"계정 없음",
"로그 없음"
],
"partners.eyebrow": "파트너와 생태계",
"partners.heading": "파트너들이 신뢰합니다",
"partners.aegis.desc": "포트폴리오 전반의 기밀 금융 소통을 지키는 자본 파트너입니다.",
"partners.aegis.role": "전략적 투자자",
"partners.furilabs.desc": "프라이버시를 앞세운 리눅스 폰으로, SecureBit을 기본 보안 채널로 함께 제공합니다.",
"partners.furilabs.role": "기술 파트너",
"partners.inviteTitle": "파트너 되기",
"partners.inviteDesc": "프라이버시를 위한 하드웨어나 인프라를 만들고 계신가요? SecureBit을 함께 붙여봅시다.",
"partners.inviteCta": "이야기 시작하기",
"roadmap.eyebrow": "개발 로드맵",
"roadmap.heading": "SecureBit의 발자취",
"roadmap.subheading": "첫 프로토타입에서 양자 내성 분산 네트워크까지, 모든 계층에서 완전한 ASN.1 검증과 함께.",
"roadmap.progress": "{total}개 중 {shipped}개 완료",
"roadmap.upcoming": "{upcoming}개 남음",
"roadmap.keyFeatures": "주요 기능",
"roadmap.status.released": "출시됨",
"roadmap.status.current": "진행 중",
"roadmap.status.dev": "개발 중",
"roadmap.status.planned": "예정",
"roadmap.status.research": "연구",
"hero.headlineTop": "두 사람만 읽을 수 있는",
"hero.headlineBottom": "직통 회선.",
"hero.subheading": "키는 여러분의 기기에서 만들어지고 두 기기 사이에서 곧바로 교환됩니다. 계정도 없고 메시지를 보관하는 서버도 없습니다.",
"hero.diagramAlt": "한 상대와 이어진 직통 암호화 회선, 그리고 뒤이어 합류하는 두 사람",
"intro.createTitle": "새 채널 만들기",
"intro.createDesc": "여러분의 기기가 키와 일회용 초대장을 만듭니다. 그 어느 것도 서버를 거치지 않습니다.",
"intro.createCta": "키와 초대장 만들기",
"intro.joinTitle": "채널 참여하기",
"intro.scanTitle": "카메라로 QR 스캔",
"intro.scanSubtitle": "가장 빠릅니다 - 상대의 화면을 비추세요",
"intro.orPasteCode": "또는 코드 붙여넣기",
"intro.pastePlaceholder": "여기에 초대 코드를 붙여넣으세요…",
"intro.connect": "연결",
"intro.connecting": "처리 중…",
"roadmap.r1.title": "개발 시작",
"roadmap.r1.sub": "아이디어, 프로토타입, 인프라 구축",
"roadmap.r1.date": "2025년 초",
"roadmap.r1.features": [
"개념과 요구사항 정리",
"기술 스택 선정: WebRTC, P2P, 암호학",
"첫 메시징 프로토타입",
"저장소와 CI 구축",
"기본 암호화 구조",
"UX/UI 설계"
],
"roadmap.r2.title": "알파 공개",
"roadmap.r2.sub": "첫 공개 알파: 기본 채팅과 키 교환",
"roadmap.r2.date": "2025년 봄",
"roadmap.r2.features": [
"WebRTC 기반 기본 P2P 메시징",
"간단한 종단 간 암호화 (시연용 방식)",
"안정적인 시그널링과 재연결",
"테스트를 위한 최소 화면",
"초기 테스터 의견 수집"
],
"roadmap.r3.title": "보안 강화",
"roadmap.r3.sub": "보안을 다지고 안정 브랜치 공개",
"roadmap.r3.date": "2025년 여름",
"roadmap.r3.features": [
"ECDH/ECDSA 실사용 적용",
"순방향 비밀성과 키 교체",
"인증 검사 개선",
"파일 암호화와 대용량 전송",
"기본 암호 처리 감사"
],
"roadmap.r4.title": "확장과 안정성",
"roadmap.r4.sub": "네트워크 확장과 안정성 개선",
"roadmap.r4.date": "2025년 가을",
"roadmap.r4.features": [
"P2P 연결과 NAT 통과 최적화",
"재연결 구조와 메시지 대기열",
"모바일 배터리 소모 감소",
"여러 기기 간 동기화",
"개발자를 위한 모니터링과 로깅 도구"
],
"roadmap.r5.title": "프라이버시 우선",
"roadmap.r5.sub": "프라이버시에 집중: 메타데이터 최소화",
"roadmap.r5.date": "2025년 겨울",
"roadmap.r5.features": [
"메타데이터 보호와 지문 축소",
"어니언 라우팅과 DHT 실험",
"익명 연결 옵션",
"공개 코드 감사 준비",
"사용자 확인 절차 개선"
],
"roadmap.r6.title": "Enhanced Security Edition",
"roadmap.r6.sub": "완전한 ASN.1 검증을 갖춘 18겹 군용 수준 암호화",
"roadmap.r6.date": "2025년 말",
"roadmap.r6.features": [
"ECDH + DTLS + SAS 삼중 보안",
"ECDH P-384와 AES-GCM 256비트 암호화",
"DTLS 지문 확인",
"SAS(짧은 인증 문자열) 확인",
"키 교체를 동반한 순방향 비밀성",
"중간자 공격 방어 강화",
"완전한 ASN.1 DER 검증",
"OID와 EC 점 확인",
"SPKI 구조 검증",
"P2P WebRTC 구조",
"메타데이터 보호",
"100% 공개 소스"
],
"roadmap.r7.title": "Desktop Edition",
"roadmap.r7.sub": "Windows, macOS, Linux용 네이티브 데스크톱 앱",
"roadmap.r7.date": "2026년 초",
"roadmap.r7.features": [
"Windows 데스크톱 앱 (Tauri v2)",
"macOS 데스크톱 앱 (Tauri v2)",
"Linux AppImage (Tauri v2)",
"실시간 알림",
"자동 재연결",
"기기 간 동기화",
"개선된 화면",
"최대 100MB 파일 지원"
],
"roadmap.r8.title": "안전한 음성과 통화",
"roadmap.r8.sub": "암호화된 음성 메시지, 음성 통화, 영상 통화",
"roadmap.r8.date": "2026년 초",
"roadmap.r8.features": [
"종단 간 암호화된 음성 메시지",
"1:1 암호화 음성 통화 (WebRTC)",
"1:1 암호화 영상 통화 (WebRTC)",
"실시간 미디어의 순방향 비밀성",
"SRTP/DTLS로 보호되는 미디어 스트림",
"통화 중 SAS 확인",
"통화 알림과 자동 재연결",
"지연이 적은 P2P 미디어"
],
"roadmap.r9.title": "그룹 소통",
"roadmap.r9.sub": "프라이버시를 지키는 그룹 채팅",
"roadmap.r9.date": "지금",
"roadmap.r9.features": [
"최대 8명까지 P2P 그룹 채팅",
"메시 전달과 서명된 릴레이 대체 경로",
"모두가 함께 대조하는 하나의 그룹 안전 코드",
"코드 추측을 막는 커밋 후 공개 절차",
"설계상 일회용인 그룹 전용 신원 키",
"에포크 순서를 갖춘 서명된 구성원 명단",
"서명된 메시지 - 기록이 갈라지면 증명할 수 있습니다",
"서버 없음, 공유 그룹 키 없음, 기록 없음"
],
"roadmap.r10.title": "Mobile Edition",
"roadmap.r10.sub": "iOS와 Android용 네이티브 모바일 앱",
"roadmap.r10.date": "2027년 2분기",
"roadmap.r10.features": [
"iOS 네이티브 앱 (Swift/SwiftUI)",
"Android 네이티브 앱 (Kotlin/Jetpack Compose)",
"모바일 브라우저 PWA 지원",
"실시간 푸시 알림",
"배터리 최적화",
"모바일에 맞춘 화면",
"오프라인 메시지 대기열",
"생체 인증"
],
"roadmap.r11.title": "양자 내성 에디션",
"roadmap.r11.sub": "양자 컴퓨터에 대한 대비",
"roadmap.r11.date": "2027년 4분기",
"roadmap.r11.features": [
"포스트 양자 암호 CRYSTALS-Kyber",
"SPHINCS+ 전자 서명",
"고전과 포스트 양자를 함께 쓰는 혼합 방식",
"양자에 안전한 키 교환",
"갱신된 해시 알고리즘",
"기존 세션 이전",
"v5.x 호환",
"양자 내성 프로토콜"
],
"roadmap.r12.title": "분산 네트워크",
"roadmap.r12.sub": "완전히 분산된 네트워크",
"roadmap.r12.date": "2028년",
"roadmap.r12.features": [
"노드 메시 네트워크",
"피어 탐색을 위한 DHT",
"내장 어니언 라우팅",
"토크노믹스와 노드 보상",
"DAO를 통한 거버넌스",
"다른 네트워크와의 상호 운용",
"플랫폼 간 호환",
"스스로 복구하는 네트워크"
],
"roadmap.r13.title": "AI 프라이버시 도우미",
"roadmap.r13.sub": "프라이버시와 보안을 위한 인공지능",
"roadmap.r13.date": "2028년 이후",
"roadmap.r13.features": [
"기기 안에서 이루어지는 AI 위협 분석",
"중간자 공격 자동 감지",
"적응형 암호화",
"맞춤형 보안 권고",
"영지식 기계 학습",
"개인용 AI 도우미",
"예측 기반 보안",
"자율적인 공격 방어"
],
"handshake.step1": "ECDH P-384 키 쌍 생성 중",
"handshake.step2": "확인 코드 유도 중",
"handshake.step3": "순방향 비밀성 고정 중",
"handshake.securingTitle": "채널을 보호하는 중",
"handshake.answerTitle": "응답을 만드는 중",
"handshake.securingDesc": "변조를 견딜 만큼 단단한 키를 벼리는 중입니다.",
"handshake.shareTitle": "초대장 공유하기",
"handshake.sendAnswerTitle": "응답 돌려보내기",
"handshake.shareDesc": "QR을 보여주거나 코드를 상대에게 보내세요. 한 번만 쓸 수 있고 곧 만료됩니다.",
"handshake.sendAnswerDesc": "채널을 만든 사람에게 이 응답을 전해 악수를 마치도록 하세요.",
"handshake.establish": "연결 맺기",
"handshake.thenReceive": "그다음 상대가 보내는 응답을 받으세요",
"handshake.pasteAnswerPlaceholder": "상대의 응답 코드를 붙여넣으세요…",
"handshake.answerSentNote": "이 응답을 만든 사람에게 보내고 기다리세요 - 상대가 연결되면 대화가 열립니다.",
"handshake.qrHint": "상대가 코드를 다 읽을 때까지 이 화면을 열어 두세요.",
"handshake.qrHintFrames": "악수가 {frames}개 화면으로 나뉘어 있습니다 - 상대가 전부 읽을 때까지 열어 두세요.",
"verify.title": "보안 확인",
"verify.desc": "다른 경로(통화나 대면)로 상대와 이 안전 코드를 대조한 뒤, 입력해서 대화를 여세요.",
"verify.enterLabel": "대조한 코드를 입력하세요",
"verify.placeholder": "여기에 코드 입력",
"verify.confirm": "코드 확인",
"verify.confirmed": "확인됨",
"verify.mismatch": "일치하지 않음",
"verify.yours": "내 확인",
"verify.peer": "상대의 확인",
"verify.pending": "대기 중",
"verify.waiting": "코드 대기 중…",
"verify.verified": "채널 확인 완료",
"verify.bothConfirmed": "양쪽 모두 확인했습니다. 안전한 대화를 여는 중…",
"pwa.bannerTitle": "SecureBit.chat 설치",
"pwa.bannerDesc": "보안이 강화된 네이티브 앱 경험을 누리세요",
"pwa.install": "설치",
"pwa.dismiss": "닫기",
"pwa.close": "닫기",
"pwa.iosTitle": "iOS에 설치하기",
"pwa.iosStep1": "공유 버튼을 누르세요",
"pwa.iosStep1Hint": "보통 Safari 아래쪽에 있습니다",
"pwa.iosStep2": "'홈 화면에 추가'를 찾으세요",
"pwa.iosStep2Hint": "공유 메뉴를 아래로 내려보세요",
"pwa.iosStep3": "'추가'를 누르세요",
"pwa.iosStep3Hint": "확인하면 SecureBit.chat이 설치됩니다",
"pwa.genericTitle": "SecureBit 설치",
"pwa.genericDesc": "브라우저마다 설치 방법이 다릅니다. 쓰시는 브라우저에 맞는 순서를 고르세요.",
"pwa.gotIt": "알겠습니다",
"pwa.installedTitle": "앱이 설치되었습니다",
"pwa.installedIos": "iOS 앱이 설치되었습니다. 홈 화면에서 열어보세요.",
"pwa.installedGeneric": "이제 SecureBit.chat이 기기에 있습니다",
"pwa.anytimeTitle": "언제든 설치할 수 있습니다",
"pwa.anytimeDesc": "가장 좋은 경험을 위해, 브라우저 메뉴에서 언제든 SecureBit.chat을 설치할 수 있습니다.",
"pwa.ok": "확인",
"step.open": "1단계 · 채널 열기",
"step.exchange": "2단계 · 교환",
"step.verification": "3단계 · 확인",
"action.create": "만들기",
"action.join": "참여",
"action.back": "뒤로",
"action.copy": "복사",
"action.copied": "복사됨",
"action.scan": "스캔",
"action.downloadDesktop": "데스크톱 앱 내려받기",
"action.advancedSettings": "고급 설정",
"cred.offerTag": "초대 · 또는 텍스트 복사",
"cred.answerTag": "응답 · 또는 텍스트 복사",
"cred.reveal": "눌러서 보기 - 이 코드는 남에게 알리지 마세요",
"qr.title": "QR 코드 스캔",
"qr.subtitle": "상대의 QR에 카메라를 맞추세요",
"qr.scanning": "읽는 중…",
"qr.hint": "모든 조각을 읽을 때까지 흔들리지 않게 유지하세요. 카메라는 기기 안에서만 쓰이며 - 아무것도 전송되지 않습니다.",
"mesh.you": "나",
"mesh.peer": "상대 · 세션 1",
"mesh.joined2": "지민 합류 · +2",
"mesh.joined3": "민준 합류 · +3",
"ice.title": "네트워크 설정",
"ice.subtitle": "기기 안에서만 설정됩니다 - 상대에게 전달되지 않습니다",
"ice.intro": "SecureBit은 기본적으로 공개 STUN 서버로 P2P 연결을 맺습니다. 직접 운영하신다면 자신의 STUN/TURN을 지정하세요.",
"ice.publicTitle": "공개 서버 (기본값)",
"ice.publicDesc": "설정이 필요 없습니다. 대부분에게 충분합니다.",
"ice.customTitle": "내 STUN/TURN 서버",
"ice.customDesc": "최대 {max}개까지.",
"ice.turnNote": "TURN 릴레이는 양쪽의 IP와 트래픽 흐름은 볼 수 있지만, 종단 간 암호화된 메시지 내용은 결코 볼 수 없습니다. 되도록 ",
"ice.turnNoteTls": " (TLS)를 쓰세요.",
"ice.test": "서버 시험",
"ice.testing": "시험 중…",
"ice.relayTitle": "릴레이 전용 모드",
"ice.relayBadge": "최대 프라이버시",
"ice.relayDesc": "모든 트래픽을 TURN으로 보내 상대가 여러분의 IP를 결코 알 수 없게 합니다. TURN 서버가 필요합니다.",
"ice.relayWarning": "릴레이 전용 모드가 켜져 있지만 TURN 서버가 설정되지 않았습니다. 연결을 시작할 수 없습니다.",
"ice.persist": "이 기기에 저장",
"ice.persistDesc": "이 브라우저에 암호화되어 저장됩니다. 꺼두면 이번 세션에만 적용됩니다.",
"ice.forget": "저장된 설정 지우기",
"ice.cancel": "취소",
"ice.apply": "적용",
"ice.errUnavailable": "이 브라우저에서는 WebRTC를 쓸 수 없습니다",
"ice.errInvalid": "서버 설정이 올바르지 않습니다",
"update.title": "업데이트가 있습니다",
"update.desc": "SecureBit의 새 버전이 확인되었습니다.",
"update.currentVersion": "현재 버전",
"update.newVersion": "새 버전",
"update.now": "지금 업데이트",
"update.later": "나중에",
"update.unknown": "없음",
"update.stepSaving": "데이터를 저장하는 중…",
"update.stepSwCaches": "Service Worker 캐시를 비우는 중…",
"update.stepSwUnregister": "Service Worker 등록을 해제하는 중…",
"update.stepBrowserCache": "브라우저 캐시를 비우는 중…",
"update.stepVersion": "버전을 갱신하는 중…",
"update.stepReload": "앱을 다시 불러오는 중…",
"update.error": "업데이트 오류. 페이지를 직접 새로고침하세요 (Ctrl+F5 또는 Cmd+Shift+R)",
"update.confirmSkip": "새 버전이 있습니다. 보안과 안정성을 위해 업데이트를 권합니다. 업데이트 없이 계속할까요?",
"offline.backOnline": "다시 연결됨",
"offline.mode": "오프라인 모드",
"offline.dismiss": "닫기",
"offline.lostTitle": "연결이 끊어졌습니다",
"offline.lostDesc": "SecureBit이 오프라인 상태입니다. 일부 기능이 제한되지만 데이터는 안전합니다.",
"offline.point1": "세션과 키는 그대로 유지됩니다",
"offline.point2": "서버에는 아무 데이터도 저장되지 않습니다",
"offline.point3": "다시 연결되면 메시지와 파일이 동기화됩니다",
"offline.continue": "오프라인으로 계속",
"offline.restoredTitle": "다시 연결되면",
"offline.restoredDesc": "연결이 끊겨도 잃는 것은 없습니다. SecureBit은 모든 것을 기기 안에 대기시켜 두었다가, 다시 온라인이 되는 즉시 암호화된 세션을 이어갑니다.",
"offline.r1Title": "보낸 메시지는 전달됩니다",
"offline.r1Desc": "오프라인일 때 쓴 내용은 자동으로 상대에게 전송됩니다.",
"offline.r2Title": "파일 전송이 마무리됩니다",
"offline.r2Desc": "전송은 멈춘 지점부터 이어집니다 - 다시 보낼 필요가 없습니다.",
"offline.r3Title": "상대의 메시지와 파일이 도착합니다",
"offline.r3Desc": "끊긴 동안 상대가 보낸 것들이 순서대로 도착합니다.",
"offline.r4Title": "아무것도 사라지지 않습니다",
"offline.r4Desc": "다시 연결되어도 빈틈은 없습니다 - 대화는 멈춘 그 자리에서 이어집니다.",
"offline.gotIt": "알겠습니다",
"qr.showTitle": "QR 코드 보여주기",
"qr.showSubtitle": "전체 화면 · 상대가 스캔하도록",
"qr.showSubtitleFrames": "전체 화면 · 상대가 {frames}개 화면을 모두 스캔하도록",
"notify.enabledBody": "알림이 켜졌습니다. 새 메시지가 오면 알려드립니다.",
"notify.workingBody": "알림이 정상 작동합니다. 새 메시지가 오면 알려드립니다.",
"pw.label": "비밀번호 입력란",
"pw.placeholder": "비밀번호를 입력하세요…",
"pw.decrypt": "복호화",
"pw.cancel": "취소",
"file.title": "파일 전송",
"file.drop": "여기에 파일을 놓으세요",
"file.dropHint": "보내기 전에 종단 간 암호화 · 최대 100MB",
"file.browse": "기기에서 찾기",
"file.incoming": "파일 요청이 왔습니다",
"file.accept": "수락",
"file.reject": "거절",
"file.download": "내려받기",
"file.notReady": "연결이 아직 준비되지 않았습니다",
"file.tooLarge": "파일이 너무 큽니다",
"file.typeNotAllowed": "허용되지 않는 파일 형식",
"file.maxConcurrent": "동시 전송 한도에 도달했습니다",
"file.gone": "이 파일은 더 이상 내려받을 수 없습니다.",
"call.incoming": "걸려온 전화",
"call.incomingVideo": "걸려온 영상 통화",
"call.encrypted": "암호화된 통화",
"call.encryptedShort": "암호화됨",
"call.peer": "보안 상대",
"call.connecting": "연결 중…",
"call.ringing": "신호 가는 중…",
"call.accept": "받기",
"call.decline": "거절",
"call.end": "통화 종료",
"call.camera": "카메라",
"call.cameraOff": "카메라 꺼짐",
"call.peerCameraOff": "상대의 카메라가 꺼져 있습니다",
"call.flipCamera": "카메라 전환",
"call.addVideo": "영상 추가",
"call.video": "영상",
"call.muted": "음소거됨",
"call.expand": "크게",
"call.minimize": "작게",
"call.quality": "연결 품질",
"call.qualityExcellent": "아주 좋음",
"call.videoPrefix": "영상 · ",
"call.voicePrefix": "음성 · ",
"group.new": "새 그룹",
"group.create": "그룹 만들기",
"group.join": "그룹 참여",
"group.name": "그룹 이름",
"group.nameTooLong": "그룹 이름이 너무 깁니다.",
"group.capacity": "최대 {max}명까지, 기기와 기기가 직접 연결됩니다. 그룹이 열리기 전에 모두가 하나의 안전 코드를 대조합니다.",
"group.invite": "초대",
"group.inviteMore": "구성원 더 초대하기",
"group.invitePeople": "{count}명 초대",
"group.invitation": "그룹 초대",
"group.addMembers": "구성원 추가",
"group.roomFor": "{remaining}명 더 들어올 수 있습니다. 그들이 합류하면 모두가 새 그룹 코드를 대조합니다.",
"group.membersCount": "구성원 {count}명",
"group.member": "구성원",
"group.members": "구성원",
"group.remove": "{name} 내보내기",
"group.message": "'{name}'에 메시지 보내기",
"group.leave": "나가기",
"group.leaveThis": "이 그룹에서 나가기",
"group.cancel": "그룹 취소",
"group.close": "닫기",
"group.cancelBtn": "취소",
"group.decline": "거절",
"group.working": "처리 중…",
"group.sasTitle": "그룹 안전 코드",
"group.sasEveryone": "모두에게 같은 코드가 보입니다",
"group.sasCompare": "이 그룹을 열려면 모든 구성원과 그룹 코드를 대조하세요.",
"group.sasReadAloud": "이 숫자들을 소리 내어 읽어주세요 - ",
"group.sasWarning": "한 사람이라도 다른 코드를 읽는다면, 누군가 사이에 끼어 있는 것입니다. 그룹을 취소하세요 - 확인하지 마세요.",
"group.confirmFirst": "먼저 그룹 코드를 확인하세요",
"group.codeSuffix": " · 코드 {code}",
"group.exchangingNonces": "일회용 값을 주고받는 중…",
"group.waitingCommit": "모든 구성원의 확약을 기다리는 중…",
"group.waitingJoin": "다른 구성원의 합류를 기다리는 중…",
"group.emptyChat": "아직 아무것도 없습니다. 모든 메시지는 보낸 사람이 서명하며, 구성원 각자의 암호화된 회선을 통해 오갑니다.",
"group.noVerified": "아직 확인된 대화가 없습니다. 먼저 1:1 대화를 열어 안전 코드를 대조하세요 - 그룹은 이미 확인한 연결로 만들어집니다.",
"group.noMoreToAdd": "추가할 다른 확인된 대화가 없습니다. 1:1 대화를 열어 먼저 안전 코드를 대조하세요.",
"group.directLink": "기기 간 직접 연결",
"group.noDirectLink": "아직 직접 연결이 없습니다 - 연결이 만들어지는 동안 메시지는 다른 구성원을 거칩니다",
"group.relayNote": "일부 구성원과는 아직 직접 연결이 없습니다. 그들의 메시지는 다른 구성원을 거쳐 오가는데, 그 사람은 대화가 오간다는 사실은 알 수 있지만 서명 너머의 내용을 읽거나 바꿀 수는 없습니다. 그룹은 계속해서 직접 연결을 시도합니다.",
"group.relayOnlyOff": "릴레이 전용 모드가 꺼져 있어, 모든 구성원이 여러분에게 직접 연결되며 IP 주소를 알게 됩니다 - 다른 사람이 초대한 구성원도 마찬가지입니다. 그것이 중요하다면 네트워크 설정에서 켜세요.",
"group.memberOffline": "{name}님은 오프라인이라 메시지를 받지 못합니다. 여전히 구성원이며, 내보내면 그룹 키가 새로 만들어집니다.",
"group.joinNote": "다른 구성원들이 여러분이 이 그룹에 있다는 것을 알게 됩니다. 따라잡을 대화 기록은 없습니다 - 그룹은 비어 있는 상태로 시작합니다.",
"group.inviteSentNote": "상대가 수락할 때까지 그룹은 그대로 동작합니다. 그들이 따라잡을 기록은 없고, 지금부터 보내는 것만 보게 됩니다.",
"group.errNotCreated": "그룹이 만들어지지 않았습니다",
"group.errNobodyAccepted": "제때 초대를 수락한 사람이 없습니다.",
"group.errNothingSent": "아무것도 전송되거나 확인되지 않았습니다. 이 창을 닫고 모두가 연결된 뒤 다시 시도하세요.",
"group.errNotFormed": "이 그룹을 만들 수 없었습니다.",
"group.errFull": "이 그룹은 가득 찼습니다.",
"group.errInviteFailed": "초대를 보내지 못했습니다 - 그 대화는 연결되어 있지 않습니다.",
"group.errNoMemberList": "그룹을 만든 사람이 구성원 명단을 끝내 보내지 않았습니다.",
"group.errUnsignedList": "구성원 명단에 그룹을 만든 사람의 서명이 없습니다. 다시 시도하지 말고 - 그 사람에게 알리세요.",
"group.errNotOwner": "그룹 소유자가 아닌 누군가가 구성원을 바꾸려 했습니다.",
"hdr.tagline": "종단 간 암호화",
"hdr.netSettings": "고급 네트워크 설정",
"hdr.netSettingsTitle": "고급 네트워크 설정 (STUN/TURN)",
"hdr.disconnect": "연결 끊기",
"status.connected": "연결됨",
"status.connecting": "연결 중…",
"status.notConnected": "연결되지 않음",
"status.reconnecting": "다시 연결 중…",
"status.retrying": "다시 시도 중…",
"status.verifying": "확인 중…",
"status.peerDisconnected": "상대가 연결을 끊었습니다",
"sec.replayProtection": "재전송 공격 방어",
"sec.messageIntegrity": "메시지 무결성 (HMAC)",
"sec.forwardSecrecy": "완전 순방향 비밀성",
"sec.metadataProtection": "메타데이터 보호",
"sec.trafficObfuscation": "트래픽 난독화",
"sec.realTests": "실제 암호학 검사",
"sec.simulatedData": "모의 데이터",
"sec.testPassed": "검사 통과",
"sec.testFailed": "검사 실패 또는 사용 불가",
"sec.verificationDone": "실제 암호학 검증이 끝났습니다",
"sec.verificationInProgress": "보안 검증 진행 중…",
"sec.verificationWait": "보안 검증 진행 중…\n실시간 암호학 검증이 끝날 때까지 기다려 주세요.",
"sec.verificationUnavailable": "보안 검증을 쓸 수 없습니다",
"chat.placeholder": "암호화된 메시지를 쓰세요…",
"chat.send": "메시지 보내기",
"chat.sendFiles": "파일 보내기",
"chat.hideFiles": "파일 숨기기",
"chat.recordVoice": "음성 메시지 녹음",
"chat.sendVoice": "음성 메시지 보내기",
"chat.discard": "취소",
"chat.codeBlock": "코드 블록으로 보내기 (입력창이 넓어집니다)",
"chat.codeHint": "코드 조각 · 서식 유지 · ⌘↵ 로 전송",
"chat.viewOnce": "한 번만 보기",
"chat.viewOnceTitle": "한 번만 보기 - 상대가 읽으면 사라집니다",
"chat.viewOncePrefix": "한 번만 보기 · ",
"chat.viewOnceTap": "한 번만 보기 · 눌러서 확인",
"chat.viewedOnce": "이미 확인함",
"chat.disappearing": "사라지는 메시지 - 양쪽에서 삭제됩니다",
"chat.disappearAfter": "사라지기까지",
"chat.visibleFor": "표시 시간",
"chat.timerPrefix": "타이머 · ",
"chat.expired": "이 메시지는 만료되었습니다",
"chat.deleteForEveryone": "모두에게서 삭제",
"chat.sending": "보내는 중",
"chat.delivered": "전달됨",
"chat.notSent": "보내지 못함",
"chat.notSentReason": "보내지 못함 - 보안 채널이 아직 준비되지 않았습니다. 다시 연결한 뒤 계속하세요.",
"chat.encrypted": "암호화됨",
"chat.decrypted": "복호화됨",
"chat.encryptedOnDevice": "기기에서 암호화됨",
"chat.uploading": "올리는 중",
"chat.downloading": "내려받는 중",
"chat.transferring": "전송 중…",
"chat.copied": "복사했습니다",
"chat.collapse": "접기",
"chat.closeMenu": "메뉴 닫기",
"chat.newChat": "새 대화",
"chat.newGroup": "새 그룹",
"chat.createGroup": "그룹 만들기",
"chat.groupChats": "그룹 대화",
"chat.secureChat": "안전한 대화",
"chat.nameThis": "이 대화에 이름 붙이기",
"chat.rename": "대화 이름 바꾸기 (기기 안에서만)",
"chat.renameHint": "두 번 눌러 이름 바꾸기",
"chat.localLabel": "기기 안 이름 · 이 기기에만 저장됩니다",
"chat.setStatus": "상태 설정",
"chat.yourStatusPrefix": "내 상태 - ",
"chat.meshHint": "최대 8명 · P2P 메시",
"chat.offline": "오프라인",
"chat.noNetwork": "네트워크 없음 · 재연결 중",
"chat.startVoiceCall": "암호화 음성 통화 걸기",
"chat.startVideoCall": "암호화 영상 통화 걸기",
"chat.verifyForCalls": "통화를 쓰려면 먼저 세션을 확인하세요",
"chat.e2eeNote": "모든 메시지는 기기를 떠나기 전에 종단 간 암호화됩니다.",
"chat.peersOnly": "연결된 상대에게만 종단 간으로 전송되며 - 서버에 저장되지 않습니다.",
"flow.invitationCreated": "안전한 초대를 만들었습니다",
"flow.invitationCreatedBang": "안전한 초대를 만들고 암호화했습니다.",
"flow.responseCreated": "안전한 응답을 만들었습니다",
"flow.responseCreatedBang": "안전한 응답을 만들었습니다.",
"flow.sendInvitation": "안전한 경로(통화, 문자 등)로 초대 코드를 상대에게 보내세요.",
"flow.sendResponse": "안전한 경로로 응답 코드를 처음 연 사람에게 보내거나, 아래 QR을 스캔하게 하세요.",
"flow.sendEncryptedCode": "암호화된 코드 보내기",
"flow.sendTheResponse": "응답 보내기",
"flow.pasteOrWrite": "코드를 붙여넣거나 입력하세요…",
"flow.processingInvitation": "안전한 초대를 처리하는 중…",
"flow.processingResponse": "안전한 응답을 처리하는 중…",
"flow.finalizing": "안전한 연결을 마무리하는 중…",
"flow.channelEstablished": "안전한 채널이 만들어졌습니다",
"flow.channelReady": "안전한 채널이 준비되었습니다",
"flow.restoring": "연결을 되살리는 중…",
"flow.invitationCaptured": "초대를 읽었습니다.",
"err.needInvitation": "상대가 준 초대 코드를 붙여넣어야 합니다.",
"err.needResponse": "상대가 준 응답 코드를 붙여넣어야 합니다.",
"err.responseFormat": "응답 형식이 올바르지 않습니다 - 코드를 확인하세요",
"err.responseNoKey": "응답 코드가 올바르지 않습니다 - 암호 키가 없거나 손상되었습니다. 코드를 확인한 뒤 다시 시도하세요.",
"err.responseNoSignKey": "응답 코드가 올바르지 않습니다 - 서명 확인 키가 없습니다. 코드를 확인한 뒤 다시 시도하세요.",
"err.responseOutdated": "응답 데이터가 오래되었습니다 - 새 초대를 사용하세요",
"err.setupError": "연결을 맺는 중 오류가 났습니다",
"err.notReady": "연결이 아직 준비되지 않았습니다",
"err.securityBreach": "보안 침해가 감지되어 연결을 거부했습니다",
"err.securityValidation": "보안 검증에 실패했습니다 - 공격일 수 있습니다",
"err.retiredQr": "이 QR은 더 이상 쓰지 않는 형식이라 초대를 전달하지 못했습니다. 상대에게 새로 만들어 달라고 하거나 복사·붙여넣기를 쓰세요.",
"err.compressedQrNote": "압축된 QR은 간결함을 위해 SDP를 생략할 수 있습니다. 연결에 실패하면 복사·붙여넣기를 쓰세요.",
"err.inviteNotConnected": "초대를 보내지 못했습니다. 그 대화는 지금 연결되어 있지 않습니다.",
"err.inviteNotConnectedRetry": "초대를 보내지 못했습니다. 그 대화는 지금 연결되어 있지 않습니다 - 다시 열고 시도하세요.",
"err.nobodyAccepted": "아무도 초대를 수락하지 않았습니다. 그룹은 그대로입니다.",
"err.noAudio": "소리가 녹음되지 않았습니다 - 마이크 권한을 확인한 뒤 다시 시도하세요.",
"err.voiceNeedsConnection": "음성 메시지를 보내려면 활성화된 안전한 연결이 필요합니다. 다시 연결한 뒤 시도하세요.",
"err.voiceRestoring": "연결을 되살리는 중입니다 - 잠시 뒤에 음성 메시지를 다시 보내보세요.",
"err.fileTooLarge": "파일이 너무 큽니다",
"sas.safetyNumber": "안전 번호",
"sas.incorrect": "코드가 맞지 않습니다. 상대와 대조한 뒤 다시 시도하세요.",
"sas.noMatch": "코드가 일치하지 않습니다",
"sas.makeSure": "두 코드가 정확히 같은지 확인하세요.",
"sas.tooManyAttempts": "잘못된 시도가 너무 많습니다. 안전을 위해 세션을 초기화했습니다.",
"sas.verificationFailed": "확인 실패",
"sas.verified": "확인됨 · 완전 순방향 비밀성",
"sas.runVerification": "보안 검증 실행",
"sec.panelTitle": "네트워크와 암호학 상세",
"sec.security": "보안",
"sec.transport": "전송",
"sec.keyExchange": "키 교환",
"sec.allEnabled": "모든 보안 기능이 기본으로 켜져 있습니다",
"sec.realTimeNote": "실제 암호학 함수로 실시간 검증합니다 - 꾸며낸 데이터는 없습니다.",
"sec.simulatedWarning": "주의: 연결이 아직 완전히 맺어지지 않았을 수 있어 - 값이 모의일 수 있습니다.",
"dl.title": "SecureBit 내려받기",
"dl.free": "무료 · 공개 소스",
"dl.soon": "모바일 앱(iOS, Android)과 브라우저 확장(Chrome, Firefox, Opera)이 곧 나옵니다.",
"chatHdr.chat": "대화",
"chatHdr.chats": "대화",
"chatHdr.newChat": "+ 새로",
"chatHdr.secure": "보안",
"chatHdr.p2pSub": "P2P · 종단 간 암호화",
"chatHdr.save": "저장",
"chatHdr.close": "닫기",
"chatHdr.expand": "넓게 보기",
"chatHdr.you": "나",
"chatHdr.qrCode": "QR 코드",
"chat.disconnected": "연결 끊김",
"call.mute": "음소거",
"call.endShort": "종료",
"group.add": "추가",
"group.send": "보내기",
"sec.pfsShort": "완전 순방향 비밀성",
"sec.cipher": "암호",
"chat.close": "닫기",
"file.needConnection": "파일 전송에는 연결이 필요합니다",
"presence.available": "대화 가능",
"presence.away": "자리 비움",
"presence.busy": "바쁨",
"presence.offline": "오프라인",
"presence.invisible": "숨김",
"presence.availableDesc": "온라인이며 연락 가능",
"presence.awayDesc": "자리 비움 · 잠시 나감",
"presence.busyDesc": "방해 금지",
"presence.invisibleDesc": "다른 사람에게 오프라인으로 보이기",
"presence.online": "온라인",
"conn.p2p": "P2P · 연결됨",
"conn.verifying": "확인 중…",
"conn.connecting": "연결 중…",
"conn.reconnecting": "다시 연결 중…",
"conn.peerDisconnected": "상대가 연결을 끊었습니다",
"conn.disconnected": "연결 끊김",
"chat.defaultLabel": "대화",
"groupPhase.forming": "구성하는 중…",
"groupPhase.commitments": "확약을 주고받는 중…",
"groupPhase.revealing": "공개하는 중…",
"groupPhase.compare": "그룹 코드를 대조하세요",
"groupPhase.ready": "그룹 준비 완료",
"groupPhase.failed": "그룹이 만들어지지 않았습니다",
"call.qualityGood": "좋음",
"call.qualityFair": "보통",
"call.qualityWeak": "약함",
"msg.code": "코드",
"msg.timer": "타이머",
"msg.voice": "음성",
"msg.play": "재생",
"msg.sent": "보냄",
"msg.read": "읽음",
"report.title": "실시간 보안 검증",
"report.active": "동작 중",
"report.testsPassed": "통과한 검사",
"report.verifiedAt": "검증 시각",
"report.source": "출처",
"secTest.verifyECDHKeyExchange": "ECDH 키 교환",
"secTest.verifyECDSASignatures": "ECDSA 전자 서명",
"secTest.verifyEncryption": "AES-GCM 암호화",
"secTest.verifyMessageIntegrity": "메시지 무결성",
"secTest.verifyPerfectForwardSecrecy": "완전 순방향 비밀성",
"secTest.verifyPFS": "완전 순방향 비밀성",
"secTest.verifyReplayProtection": "재전송 공격 방어",
"secTest.verifyDTLSFingerprint": "DTLS 지문",
"secTest.verifySASVerification": "SAS 확인",
"secTest.verifyMetadataProtection": "메타데이터 보호",
"secTest.verifyTrafficObfuscation": "트래픽 난독화",
"secTest.verifyPacketPadding": "패킷 패딩",
"secTest.verifyNestedEncryption": "중첩 암호화",
"secTest.verifyNonExtractableKeys": "추출 불가 키",
"secTest.verifyRateLimiting": "속도 제한",
"secTest.verifyMutualAuth": "상호 인증",
"secTest.verifyAuthProof": "인증 증명",
"secTest.verifyEnhancedValidation": "강화된 검증",
"secTest.verifyAdvancedFeatures": "고급 기능",
"secTest.verifySignature": "서명 검사",
"secDetail.Security system initializing...": "보안 시스템을 시작하는 중…",
"secDetail.Nested encryption active": "중첩 암호화가 켜져 있습니다",
"secDetail.Nested encryption failed": "중첩 암호화 실패",
"secDetail.Packet padding active": "패킷 패딩이 켜져 있습니다",
"secDetail.Packet padding failed": "패킷 패딩 실패",
"secDetail.Advanced features active": "고급 기능이 켜져 있습니다",
"secDetail.Advanced features failed": "고급 기능 실패",
"secDetail.No encryption key available": "쓸 수 있는 암호화 키가 없습니다",
"secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM 암호화와 복호화가 정상 동작합니다",
"secDetail.No ECDH key pair available": "쓸 수 있는 ECDH 키 쌍이 없습니다",
"secDetail.Key derivation failed": "키 유도에 실패했습니다",
"secDetail.No ECDSA key pair available": "쓸 수 있는 ECDSA 키 쌍이 없습니다",
"secDetail.ECDSA digital signatures working correctly": "ECDSA 전자 서명이 정상 동작합니다",
"secDetail.MAC key not available or invalid": "MAC 키가 없거나 올바르지 않습니다",
"secDetail.Rate limiter did not block a message over the limit": "속도 제한기가 한도를 넘은 메시지를 막지 못했습니다",
"secDetail.Rate limiter is not available": "속도 제한기를 쓸 수 없습니다",
"secDetail.Replay protection is working correctly": "재전송 공격 방어가 정상 동작합니다",
"secDetail.Replay protection not enabled": "재전송 공격 방어가 꺼져 있습니다",
"secDetail.SAS code not available": "SAS 코드를 쓸 수 없습니다",
"secDetail.SAS verification code is valid and available": "SAS 확인 코드가 유효하며 사용할 수 있습니다",
"secDetail.Traffic obfuscation is working correctly": "트래픽 난독화가 정상 동작합니다",
"secDetail.Traffic obfuscation not enabled": "트래픽 난독화가 꺼져 있습니다",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "이 세션에는 추출할 수 없는 일회용 ECDH 키 쌍이 없습니다",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "세션 단위 순방향 비밀성만 적용됩니다. 키는 세션마다 일회용이지만 이 연결에서는 Double Ratchet이 동작하지 않아(상대가 이전 버전 사용), 세션 키가 유출되면 대화 전체가 드러납니다.",
"msg.pause": "일시정지",
"msg.failed": "실패",
"groupErr.timeout": "코드가 준비되기 전에 어떤 구성원이 응답을 멈췄습니다.",
"groupErr.keyMismatch": "어떤 구성원의 키가 밝힌 신원과 맞지 않았습니다.",
"groupErr.revealMismatch": "어떤 구성원이 공개한 값이 앞서 확약한 것과 맞지 않았습니다.",
"groupErr.commitChanged": "어떤 구성원이 도중에 확약을 바꿨습니다.",
"groupErr.missingKey": "명단에 있던 구성원의 키가 끝내 도착하지 않았습니다.",
"groupErr.outsider": "그룹 밖의 누군가에게서 프레임이 도착했습니다.",
"groupErr.limit": "그룹은 최대 여덟 명까지입니다.",
"groupErr.tooLarge": "메시지가 너무 커서 그룹에 보낼 수 없었습니다.",
"fileType.text": "일반 텍스트",
"fileType.images": "이미지",
"fileType.archives": "압축 파일",
"fileType.voice": "음성 메시지",
"fileType.unsupported": "지원하지 않음",
"qrScan.title": "QR 코드 스캔",
"qrScan.auto": "자동 모드",
"qrScan.reset": "초기화",
"qrScan.autoScroll": "자동 스크롤이 켜졌습니다",
"qrScan.starting": "카메라를 켜는 중…",
"qrScan.point": "상대의 QR에 카메라를 맞추세요",
"qrScan.tapFocus": "화면을 눌러 초점을 맞추세요",
"qrScan.focusing": "초점 맞추는 중…",
"iceErr.notArray": "서버 목록은 배열이어야 합니다",
"iceErr.invalidJson": "올바르지 않은 JSON",
"iceErr.tooMany": "서버가 너무 많습니다 (최대 {max}개)",
"iceErr.invalidEntry": "{label}: 올바르지 않은 항목",
"iceErr.urlCount": "{label}: URL이 1개에서 {max}개 사이여야 합니다",
"iceErr.turnCreds": "{label}: TURN 서버는 보통 사용자 이름과 자격 증명이 필요합니다",
"iceUrl.notString": "URL은 문자열이어야 합니다",
"iceUrl.empty": "URL이 비어 있습니다",
"iceUrl.tooLong": "URL이 너무 깁니다",
"iceUrl.badChars": "URL에 쓸 수 없는 문자가 있습니다",
"iceUrl.badScheme": "URL은 stun:, stuns:, turn: 또는 turns: 로 시작해야 합니다",
"iceUrl.badQuery": "URL의 질의가 올바르지 않습니다",
"iceUrl.noHost": "URL에 호스트가 없습니다",
"iceUrl.badHost": "URL의 호스트나 포트가 올바르지 않습니다",
"iceUrl.badTransport": "URL 질의는 transport=udp 또는 transport=tcp 여야 합니다",
"msg.off": "끔",
"file.consentUnavailable": "동의를 구할 수 없습니다",
"secLevel.MAXIMUM": "최고",
"secLevel.INITIALIZING": "시작 중",
"secLevel.ERROR": "오류",
"secLevel.UNKNOWN": "알 수 없음",
"status.error": "오류",
"offline.disconnect": "연결 끊기",
"offline.learnMore": "자세히 보기",
"pwa.installApp": "앱 설치",
"chat.onWeb": "웹 버전을 쓰고 있습니다",
"groupCall.startVoice": "그룹 음성 통화 시작",
"groupCall.startVideo": "그룹 영상 통화 시작",
"groupCall.join": "참여",
"groupCall.dismiss": "나중에",
"groupCall.leave": "통화 나가기",
"groupCall.you": "나",
"groupCall.connecting": "연결 중…",
"groupCall.waitingLink": "직접 연결을 기다리는 중…",
"groupCall.legFailed": "연결하지 못했습니다",
"groupCall.startedVoice": "{name} 님이 음성 통화를 시작했습니다",
"groupCall.startedVideo": "{name} 님이 영상 통화를 시작했습니다",
"groupCall.inCall": "통화 중 {count}명",
"groupCall.err.permission_denied": "통화를 시작할 수 없습니다 - 마이크와 카메라 접근이 차단되어 있습니다. 이 사이트에 허용한 뒤 다시 시도하세요.",
"groupCall.err.device_not_found": "통화를 시작할 수 없습니다 - 이 기기에서 마이크를 찾을 수 없습니다.",
"groupCall.err.device_busy": "통화를 시작할 수 없습니다 - 마이크를 다른 앱이 사용 중입니다. 종료한 뒤 다시 시도하세요.",
"groupCall.err.media_failed": "통화를 시작할 수 없습니다 - 마이크를 열지 못했습니다.",
"groupCall.err.call_in_progress": "이 그룹에서 이미 통화가 진행 중입니다. 새로 시작하지 말고 참여하세요.",
"groupCall.err.not_ready": "통화하기 전에 그룹 코드를 확인하세요.",
"groupCall.speaking": "{name} 님이 말하는 중",
"groupCall.pin": "{name} 크게 보기",
"groupCall.unpin": "전체 보기로 돌아가기",
"groupCall.showEveryone": "전체",
"msg.after5s": "읽은 뒤 5초",
"msg.after15s": "읽은 뒤 15초",
"msg.after30s": "읽은 뒤 30초",
"msg.after1m": "읽은 뒤 1분",
"msg.sec30": "30초",
"msg.min5": "5분",
"msg.hour1": "1시간",
"desktop.shareDesc": "상대에게 코드를 보내세요. 일회용이며 곧 만료됩니다.",
"desktop.invitationCreated": "보안 초대가 만들어졌습니다 - 상대에게 보내세요.",
"desktop.joinDesc": "상대의 초대 코드를 붙여넣어 보안 응답을 만드세요.",
"desktop.offerTag": "초대 · 텍스트 복사",
"desktop.answerTag": "응답 · 텍스트 복사",
"desktop.offerPlaceholder": "초대 코드가 여기에 표시됩니다…",
"desktop.answerPlaceholder": "응답 코드가 여기에 표시됩니다…",
"desktop.backToChats": "채팅으로 돌아가기",
"desktop.sendFeedback": "피드백 보내기",
"desktop.callsNeedVerified": "통화하려면 검증된 보안 채널이 필요합니다.",
"desktop.noOpenChannel": "열린 보안 채널이 없습니다.",
"desktop.chatCarriesCall": "이 채팅이 그룹 통화를 전달하고 있습니다. 1:1 통화를 걸기 전에 그룹 통화에서 나가세요.",
"desktop.err.permission_denied": "통화를 시작할 수 없습니다 - 마이크와 카메라 접근이 차단되어 있습니다. 시스템 설정에서 허용한 뒤 다시 시도하세요.",
"desktop.language": "언어",
"desktop.languageHint": "즉시 적용됩니다. 이미 보낸 메시지는 원래 언어 그대로 남습니다.",
"desktop.compareCode": "상대와 확인 코드를 비교하고 일치하면 확인하세요.",
"desktop.verifyBeforeFiles": "파일을 보내기 전에 검증을 마치세요.",
"desktop.verifyBeforeSending": "메시지를 보내기 전에 검증을 마치세요.",
"desktop.disconnectedByBackend": "연결이 안전하게 종료되었습니다.",
"desktop.restoreFailed": "연결을 복구하지 못했습니다. 이 채팅을 닫습니다.",
"desktop.channelNotReady": "데이터 채널이 아직 없습니다. 연결이 맺어질 때까지 기다리세요.",
"desktop.enterCode": "확인 코드를 입력하세요.",
"desktop.noOffer": "초대가 없습니다. 먼저 만드세요.",
"desktop.notInitiator": "이 연결을 만든 쪽이 아니므로 적용할 응답이 없습니다.",
"desktop.decryptFailed": "메시지를 복호화하지 못해 버렸습니다.",
"desktop.badMessageFormat": "형식이 잘못된 프레임이 도착해 버렸습니다.",
"desktop.notSentNotReady": "메시지를 보내지 못했습니다: 보안 채널이 준비되지 않았습니다. 검증이 끝나기를 기다리거나 다시 연결하세요.",
"desktop.micDenied": "마이크 접근이 거부되었습니다.",
"desktop.noChannelWait": "열린 보안 채널이 없습니다 - 연결이 맺어질 때까지 기다리세요.",
"desktop.sasFailed": "검증에 실패했습니다. 중간자가 있을 수 있어 연결을 중단했습니다.",
"desktop.sasOk": "검증에 성공했습니다. 이 채널은 종단 간 인증되었습니다.",
"desktop.iceForgotten": "저장된 서버를 지웠습니다. 공개 ICE 서버를 사용합니다.",
"desktop.icePublic": "공개 ICE 서버를 사용합니다.",
"desktop.verificationInProgress": "보안 검증이 아직 진행 중입니다. 끝날 때까지 기다리세요.",
"desktop.fileGone": "이 파일은 더 이상 내려받을 수 없습니다.",
"desktop.codeMismatch": "확인 코드가 일치하지 않습니다. 안전을 위해 연결을 끊습니다.",
"desktop.noLocalCode": "검증 실패: 비교할 로컬 파생 코드가 없습니다. 안전을 위해 연결을 끊습니다.",
"desktop.protocolViolation": "상대가 당신이 확인하기 전에 코드가 확인되었다고 주장했습니다. 안전을 위해 연결을 끊습니다.",
"desktop.verificationRejected": "검증이 거부되었습니다. 안전을 위해 연결을 중단했습니다.",
"secLevel.HIGH": "높음",
"secLevel.MEDIUM": "보통",
"secLevel.LOW": "낮음",
"desktop.rerun": "다시 검사",
"desktop.ice.customDesc": "최대 {max}개 서버, 한 줄에 URL 하나 또는 JSON.",
"desktop.ice.persistDesc": "이 기기에 로컬로 저장됩니다. 이번 세션에만 사용하려면 꺼 두세요.",
"desktop.group.leaveNote": "다른 구성원에게 당신이 나갔다고 알립니다. 이후 이 기기에는 이 그룹에 대한 것이 아무것도 남지 않습니다 - 다시 들어갈 사본을 가진 서버가 없으므로 새 초대가 필요합니다.",
"desktop.sec.ecdsaOk": "핸드셰이크 중 상대 키 패키지 서명을 검증했습니다 (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "완료된 핸드셰이크가 없습니다",
"desktop.sec.ecdhOk": "임시 ECDH P-384 교환에서 HKDF-SHA-256으로 세션 키를 파생했습니다",
"desktop.sec.ecdhNone": "세션 키가 파생되지 않았습니다",
"desktop.sec.encryptionOk": "코어에서 AES-GCM 암·복호화를 검증했습니다",
"desktop.sec.encryptionNa": "AES-GCM 자체 검사를 실행할 수 없었습니다",
"desktop.sec.integrityOk": "메시지 무결성을 검증했습니다 (AES-GCM 인증)",
"desktop.sec.integrityNa": "무결성 자체 검사를 실행할 수 없었습니다",
"desktop.sec.pfsOk": "Double Ratchet 작동 중 - 메시지마다 고유한 키가 있습니다",
"desktop.sec.pfsNa": "측정되지 않음",
"desktop.sec.replayOk": "래칫 메시지 키는 사용 즉시 파기되어 가로챈 프레임을 재생할 수 없습니다",
"desktop.sec.replayNa": "측정되지 않음",
"desktop.sec.dtlsPinned": "상대 DTLS 지문 고정: {fp}",
"desktop.sec.dtlsNone": "원격 DTLS 지문이 없습니다",
"desktop.sec.sasBoth": "양쪽 모두 대역 외에서 안전 코드를 확인했습니다",
"desktop.sec.sasIncomplete": "안전 코드가 양쪽 모두에게 확인되지 않았습니다",
"desktop.sec.metadataOk": "전용 메타데이터 키를 파생했습니다 (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "메타데이터 키 없음",
"desktop.sec.coverOn": "위장 트래픽 작동 중: 래칫 채널에 무작위 더미 프레임 (15-30초마다 32-128 B)",
"desktop.sec.coverOff": "위장 트래픽 생성기가 실행되고 있지 않습니다",
"desktop.sec.coverUnsupported": "위장 트래픽에는 Double Ratchet 세션이 필요합니다 (상대가 구버전입니다)",
"desktop.tagline": "종단 간 자유",
"desktop.callsNotHere": "이 빌드에서는 아직 통화를 사용할 수 없습니다. 메시지, 파일, 그룹 채팅은 평소대로 작동합니다."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["ko"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "Язык",
"language.suggest.text": "Эта страница также доступна на русском.",
"language.suggest.cta": "Читать по-русски",
"language.suggest.dismiss": "Закрыть",
"community.title": "Присоединяйтесь к будущему приватности",
"community.description": "SecureBit растёт благодаря сообществу. Ваши идеи и отзывы формируют будущее защищённого общения - разработка ведётся открыто, с полной проверкой ASN.1 на всём пути.",
"community.github": "Репозиторий на GitHub",
"community.feedback": "Обратная связь",
"unique.eyebrow": "Чем мы отличаемся",
"unique.heading": "Почему SecureBit особенный",
"unique.s1.titleTop": "Многослойное",
"unique.s1.titleBottom": "ядро шифрования",
"unique.s1.collapsed": "Ядро шифрования",
"unique.s1.desc": "Обмен ключами ECDH P-384, полезная нагрузка в AES-256-GCM, подписи ECDSA и полная проверка ASN.1 - собранные в один укреплённый конвейер.",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "Чистый P2P",
"unique.s2.titleBottom": "через WebRTC",
"unique.s2.collapsed": "Чистый P2P через WebRTC",
"unique.s2.desc": "Сообщения идут напрямую между устройствами по WebRTC. Никакой relay не держит ваши данные - сервер лишь помогает двум участникам найти друг друга.",
"unique.s2.tags": [
"DTLS 1.3",
"Без relay"
],
"unique.s3.titleTop": "Совершенная",
"unique.s3.titleBottom": "прямая секретность",
"unique.s3.collapsed": "Прямая секретность",
"unique.s3.desc": "Сеансовые ключи меняются непрерывно и отбрасываются после использования, поэтому один скомпрометированный ключ никогда не откроет прошлые разговоры.",
"unique.s3.tags": [
"Эфемерные ключи",
"Автоматическая смена"
],
"unique.s4.titleTop": "Маскировка",
"unique.s4.titleBottom": "трафика",
"unique.s4.collapsed": "Маскировка трафика",
"unique.s4.desc": "Размеры пакетов и паузы между ними дополняются и рандомизируются, поэтому метаданные не складываются в узнаваемый рисунок даже для того, кто следит за каналом.",
"unique.s4.tags": [
"Дополнение пакетов",
"Разброс во времени"
],
"unique.s5.titleTop": "Никакого",
"unique.s5.titleBottom": "сбора данных",
"unique.s5.collapsed": "Никакого сбора данных",
"unique.s5.desc": "Без учётных записей, без журналов, без хранения сообщений. На сервере нет ничего, что можно утечь, изъять по запросу или продать.",
"unique.s5.tags": [
"Без учётных записей",
"Без журналов"
],
"partners.eyebrow": "Партнёры и экосистема",
"partners.heading": "Нам доверяют наши партнёры",
"partners.aegis.desc": "Инвестиционный партнёр, защищающий конфиденциальные финансовые коммуникации во всём своём портфеле.",
"partners.aegis.role": "Стратегический инвестор",
"partners.furilabs.desc": "Linux-телефоны с приоритетом приватности, поставляющие SecureBit как защищённый канал по умолчанию.",
"partners.furilabs.role": "Технологический партнёр",
"partners.inviteTitle": "Стать партнёром",
"partners.inviteDesc": "Создаёте оборудование или инфраструктуру для приватности? Давайте интегрируем SecureBit.",
"partners.inviteCta": "Начать разговор",
"roadmap.eyebrow": "Дорожная карта",
"roadmap.heading": "Как развивался SecureBit",
"roadmap.subheading": "От первого прототипа до децентрализованной сети, устойчивой к квантовым вычислениям, с полной проверкой ASN.1 на каждом уровне.",
"roadmap.progress": "Пройдено {shipped} из {total} этапов",
"roadmap.upcoming": "{upcoming} впереди",
"roadmap.keyFeatures": "Ключевые возможности",
"roadmap.status.released": "Выпущено",
"roadmap.status.current": "Текущий",
"roadmap.status.dev": "В разработке",
"roadmap.status.planned": "Запланировано",
"roadmap.status.research": "Исследование",
"hero.headlineTop": "Прямая линия,",
"hero.headlineBottom": "которую прочитаете только вы двое.",
"hero.subheading": "Ключи создаются на вашем устройстве и передаются напрямую между участниками. Без учётных записей и без серверов, хранящих ваши сообщения.",
"hero.diagramAlt": "Прямая зашифрованная линия к одному участнику, к которой присоединяются ещё двое",
"intro.createTitle": "Создать новый канал",
"intro.createDesc": "Ваше устройство создаёт ключи и одноразовое приглашение. Ничто из этого не попадает на сервер.",
"intro.createCta": "Создать ключи и приглашение",
"intro.joinTitle": "Присоединиться к каналу",
"intro.scanTitle": "Сканировать QR камерой",
"intro.scanSubtitle": "Быстрее всего - наведите на экран собеседника",
"intro.orPasteCode": "или вставьте код",
"intro.pastePlaceholder": "Вставьте код приглашения сюда…",
"intro.connect": "Соединиться",
"intro.connecting": "Обработка…",
"roadmap.r1.title": "Начало разработки",
"roadmap.r1.sub": "Идея, прототип и настройка инфраструктуры",
"roadmap.r1.date": "Начало 2025",
"roadmap.r1.features": [
"Формирование концепции и требований",
"Выбор стека: WebRTC, P2P, криптография",
"Первые прототипы обмена сообщениями",
"Создание репозитория и CI",
"Базовая архитектура шифрования",
"Дизайн UX/UI"
],
"roadmap.r2.title": "Альфа-версия",
"roadmap.r2.sub": "Первая публичная альфа: базовый чат и обмен ключами",
"roadmap.r2.date": "Весна 2025",
"roadmap.r2.features": [
"Базовый обмен сообщениями P2P через WebRTC",
"Простое сквозное шифрование (демонстрационная схема)",
"Стабильный сигналинг и переподключение",
"Минимальный интерфейс для тестирования",
"Сбор отзывов от первых тестировщиков"
],
"roadmap.r3.title": "Усиленная защита",
"roadmap.r3.sub": "Укрепление безопасности и выпуск стабильной ветки",
"roadmap.r3.date": "Лето 2025",
"roadmap.r3.features": [
"ECDH/ECDSA в промышленной эксплуатации",
"Прямая секретность и смена ключей",
"Улучшенные проверки аутентификации",
"Шифрование файлов и передача больших объёмов",
"Аудит базовых криптографических процессов"
],
"roadmap.r4.title": "Масштабирование и стабильность",
"roadmap.r4.sub": "Масштабирование сети и повышение стабильности",
"roadmap.r4.date": "Осень 2025",
"roadmap.r4.features": [
"Оптимизация P2P-соединений и прохождения NAT",
"Механизмы переподключения и очереди сообщений",
"Меньший расход батареи на мобильных",
"Синхронизация между несколькими устройствами",
"Инструменты мониторинга и журналирования для разработчиков"
],
"roadmap.r5.title": "Приватность прежде всего",
"roadmap.r5.sub": "Фокус на приватности: уменьшение метаданных",
"roadmap.r5.date": "Зима 2025",
"roadmap.r5.features": [
"Защита метаданных и снижение отпечатка",
"Эксперименты с луковой маршрутизацией и DHT",
"Варианты анонимных соединений",
"Подготовка к открытому аудиту кода",
"Улучшенная проверка участников"
],
"roadmap.r6.title": "Enhanced Security Edition",
"roadmap.r6.sub": "18-слойная криптография военного уровня с полной проверкой ASN.1",
"roadmap.r6.date": "Конец 2025",
"roadmap.r6.features": [
"Тройная защита: ECDH + DTLS + SAS",
"Шифрование ECDH P-384 и AES-GCM 256 бит",
"Проверка отпечатка DTLS",
"Проверка SAS (короткая строка аутентификации)",
"Прямая секретность со сменой ключей",
"Усиленная защита от атак «человек посередине»",
"Полная проверка ASN.1 DER",
"Проверка OID и точек EC",
"Проверка структуры SPKI",
"Архитектура P2P на WebRTC",
"Защита метаданных",
"100 % открытый код"
],
"roadmap.r7.title": "Desktop Edition",
"roadmap.r7.sub": "Отдельные приложения для Windows, macOS и Linux",
"roadmap.r7.date": "Начало 2026",
"roadmap.r7.features": [
"Приложение для Windows (Tauri v2)",
"Приложение для macOS (Tauri v2)",
"AppImage для Linux (Tauri v2)",
"Уведомления в реальном времени",
"Автоматическое переподключение",
"Синхронизация между устройствами",
"Обновлённый интерфейс",
"Файлы до 100 МБ"
],
"roadmap.r8.title": "Защищённый голос и звонки",
"roadmap.r8.sub": "Зашифрованные голосовые сообщения, аудио- и видеозвонки",
"roadmap.r8.date": "Начало 2026",
"roadmap.r8.features": [
"Голосовые сообщения со сквозным шифрованием",
"Зашифрованные аудиозвонки один на один (WebRTC)",
"Зашифрованные видеозвонки один на один (WebRTC)",
"Прямая секретность для живого потока",
"Медиапотоки под защитой SRTP/DTLS",
"Проверка SAS во время звонка",
"Уведомления о звонках и автопереподключение",
"Медиа P2P с низкой задержкой"
],
"roadmap.r9.title": "Групповое общение",
"roadmap.r9.sub": "Групповые чаты без потери приватности",
"roadmap.r9.date": "Сейчас",
"roadmap.r9.features": [
"Групповые чаты P2P до 8 участников",
"Доставка по сети с подписанным relay как запасным путём",
"Один код безопасности группы, который сверяют все",
"Церемония «сначала обязательство, потом раскрытие» против подбора кодов",
"Собственные ключи личности в группе, эфемерные по замыслу",
"Подписанное членство с упорядочиванием по эпохам",
"Подписанные сообщения - расхождение в стенограмме можно доказать",
"Без сервера, без общего ключа группы, без истории"
],
"roadmap.r10.title": "Mobile Edition",
"roadmap.r10.sub": "Отдельные приложения для iOS и Android",
"roadmap.r10.date": "II квартал 2027",
"roadmap.r10.features": [
"Приложение для iOS (Swift/SwiftUI)",
"Приложение для Android (Kotlin/Jetpack Compose)",
"Поддержка PWA в мобильных браузерах",
"Push-уведомления в реальном времени",
"Оптимизация расхода батареи",
"Интерфейс, приспособленный к мобильным",
"Очередь сообщений офлайн",
"Биометрическая аутентификация"
],
"roadmap.r11.title": "Стойкость к квантовым вычислениям",
"roadmap.r11.sub": "Защита от квантовых компьютеров",
"roadmap.r11.date": "IV квартал 2027",
"roadmap.r11.features": [
"Постквантовая криптография CRYSTALS-Kyber",
"Цифровые подписи SPHINCS+",
"Гибридная схема: классическая и постквантовая",
"Квантово стойкий обмен ключами",
"Обновлённые алгоритмы хеширования",
"Миграция существующих сеансов",
"Совместимость с v5.x",
"Квантово стойкие протоколы"
],
"roadmap.r12.title": "Децентрализованная сеть",
"roadmap.r12.sub": "Полностью децентрализованная сеть",
"roadmap.r12.date": "2028",
"roadmap.r12.features": [
"Ячеистая сеть узлов",
"DHT для поиска участников",
"Встроенная луковая маршрутизация",
"Токеномика и стимулы для узлов",
"Управление через DAO",
"Взаимодействие с другими сетями",
"Совместимость между платформами",
"Самовосстанавливающаяся сеть"
],
"roadmap.r13.title": "ИИ-помощник по приватности",
"roadmap.r13.sub": "Искусственный интеллект для приватности и безопасности",
"roadmap.r13.date": "2028+",
"roadmap.r13.features": [
"Локальный анализ угроз с помощью ИИ",
"Автоматическое обнаружение атак «человек посередине»",
"Адаптивная криптография",
"Персональные советы по безопасности",
"Машинное обучение с нулевым разглашением",
"Приватный ИИ-помощник",
"Предсказательная безопасность",
"Автономная защита от атак"
],
"handshake.step1": "Создание пары ключей ECDH P-384",
"handshake.step2": "Вычисление кода проверки",
"handshake.step3": "Закрепление прямой секретности",
"handshake.securingTitle": "Защищаем ваш канал",
"handshake.answerTitle": "Готовим ваш ответ",
"handshake.securingDesc": "Создаём ключи, способные выдержать вмешательство.",
"handshake.shareTitle": "Поделитесь приглашением",
"handshake.sendAnswerTitle": "Отправьте ответ обратно",
"handshake.shareDesc": "Покажите QR-код или отправьте код собеседнику. Он одноразовый и скоро станет недействительным.",
"handshake.sendAnswerDesc": "Передайте этот ответ создателю канала, чтобы он завершил рукопожатие.",
"handshake.establish": "Установить соединение",
"handshake.thenReceive": "Затем получите ответ, который пришлёт собеседник",
"handshake.pasteAnswerPlaceholder": "Вставьте код ответа собеседника…",
"handshake.answerSentNote": "Отправьте этот ответ создателю и подождите - чат откроется, как только он подключится.",
"handshake.qrHint": "Держите это открытым, пока собеседник не считает код.",
"handshake.qrHintFrames": "Рукопожатие разбито на {frames} кадров - держите это открытым, пока собеседник не считает все.",
"verify.title": "Проверка безопасности",
"verify.desc": "Сверьте этот код безопасности с собеседником по другому каналу (голосом или лично), затем введите его, чтобы открыть чат.",
"verify.enterLabel": "Введите сверенный код",
"verify.placeholder": "Введите код здесь",
"verify.confirm": "Подтвердить код",
"verify.confirmed": "Подтверждено",
"verify.mismatch": "Не совпадают",
"verify.yours": "Ваше подтверждение",
"verify.peer": "Подтверждение собеседника",
"verify.pending": "Ожидается",
"verify.waiting": "Ожидание кода…",
"verify.verified": "Канал проверен",
"verify.bothConfirmed": "Обе стороны подтвердили. Открываем защищённый чат…",
"pwa.bannerTitle": "Установите SecureBit.chat",
"pwa.bannerDesc": "Опыт полноценного приложения с усиленной защитой",
"pwa.install": "Установить",
"pwa.dismiss": "Закрыть",
"pwa.close": "Закрыть",
"pwa.iosTitle": "Установка на iOS",
"pwa.iosStep1": "Нажмите кнопку «Поделиться»",
"pwa.iosStep1Hint": "Обычно внизу Safari",
"pwa.iosStep2": "Найдите «На экран «Домой»»",
"pwa.iosStep2Hint": "Прокрутите меню «Поделиться» вниз",
"pwa.iosStep3": "Нажмите «Добавить»",
"pwa.iosStep3Hint": "Подтвердите, чтобы установить SecureBit.chat",
"pwa.genericTitle": "Установить SecureBit",
"pwa.genericDesc": "Каждый браузер устанавливает по-своему. Выберите шаги, подходящие вашему.",
"pwa.gotIt": "Понятно",
"pwa.installedTitle": "Приложение установлено!",
"pwa.installedIos": "Приложение для iOS установлено! Откройте его с экрана «Домой».",
"pwa.installedGeneric": "SecureBit.chat теперь на вашем устройстве",
"pwa.anytimeTitle": "Установить в любой момент",
"pwa.anytimeDesc": "Вы всегда можете установить SecureBit.chat из меню браузера - так он работает лучше всего.",
"pwa.ok": "Хорошо",
"step.open": "Шаг 1 · открыть канал",
"step.exchange": "Шаг 2 · обмен",
"step.verification": "Шаг 3 · проверка",
"action.create": "Создать",
"action.join": "Присоединиться",
"action.back": "Назад",
"action.copy": "Копировать",
"action.copied": "Скопировано",
"action.scan": "Сканировать",
"action.downloadDesktop": "Скачать приложение",
"action.advancedSettings": "Дополнительные настройки",
"cred.offerTag": "предложение · или скопируйте текст",
"cred.answerTag": "ответ · или скопируйте текст",
"cred.reveal": "Нажмите, чтобы показать - держите этот код в тайне",
"qr.title": "Сканировать QR-код",
"qr.subtitle": "Наведите камеру на их QR-код",
"qr.scanning": "Сканирование…",
"qr.hint": "Держите ровно, пока не считаются все части. Камера работает локально - ничего не отправляется.",
"mesh.you": "вы",
"mesh.peer": "собеседник · сеанс 1",
"mesh.joined2": "лена присоединилась · +2",
"mesh.joined3": "миша присоединился · +3",
"ice.title": "Сетевые настройки",
"ice.subtitle": "Настраивается локально - никогда не передаётся собеседнику",
"ice.intro": "По умолчанию SecureBit использует публичные STUN-серверы, чтобы согласовать прямое соединение. Если держите свои, укажите собственные STUN/TURN.",
"ice.publicTitle": "Публичные серверы (по умолчанию)",
"ice.publicDesc": "Без настройки. Подходит большинству.",
"ice.customTitle": "Свои STUN/TURN-серверы",
"ice.customDesc": "До {max} серверов.",
"ice.turnNote": "TURN-relay видит IP обеих сторон и ритм трафика - но никогда содержимое сообщений, которое остаётся зашифрованным сквозным образом. Лучше ",
"ice.turnNoteTls": " (TLS).",
"ice.test": "Проверить серверы",
"ice.testing": "Проверка…",
"ice.relayTitle": "Режим только через relay",
"ice.relayBadge": "МАКСИМУМ ПРИВАТНОСТИ",
"ice.relayDesc": "Пропускает весь трафик через TURN, так что собеседник никогда не увидит вашего IP. Нужен TURN-сервер.",
"ice.relayWarning": "Режим только через relay включён, но TURN-сервер не указан. Соединение не сможет начаться.",
"ice.persist": "Сохранить на этом устройстве",
"ice.persistDesc": "Хранится зашифрованно в этом браузере. Оставьте выключенным, чтобы действовало только в этом сеансе.",
"ice.forget": "Забыть сохранённое",
"ice.cancel": "Отмена",
"ice.apply": "Применить",
"ice.errUnavailable": "WebRTC недоступен в этом браузере",
"ice.errInvalid": "Неверная конфигурация сервера",
"update.title": "Доступно обновление",
"update.desc": "Обнаружена более новая версия SecureBit.",
"update.currentVersion": "Текущая версия",
"update.newVersion": "Новая версия",
"update.now": "Обновить сейчас",
"update.later": "Позже",
"update.unknown": "н/д",
"update.stepSaving": "Сохранение данных…",
"update.stepSwCaches": "Очистка кешей Service Worker…",
"update.stepSwUnregister": "Отмена регистрации Service Worker…",
"update.stepBrowserCache": "Очистка кеша браузера…",
"update.stepVersion": "Обновление версии…",
"update.stepReload": "Перезагрузка приложения…",
"update.error": "Ошибка обновления. Перезагрузите страницу вручную (Ctrl+F5 или Cmd+Shift+R)",
"update.confirmSkip": "Доступна новая версия. Обновление рекомендуется для безопасности и стабильности. Продолжить без обновления?",
"offline.backOnline": "Снова онлайн",
"offline.mode": "Режим офлайн",
"offline.dismiss": "Закрыть",
"offline.lostTitle": "Соединение потеряно",
"offline.lostDesc": "SecureBit работает офлайн. Кое-что ограничено, но ваши данные в безопасности.",
"offline.point1": "Ваш сеанс и ключи сохранены",
"offline.point2": "Никаких данных на серверах",
"offline.point3": "Сообщения и файлы синхронизируются после восстановления связи",
"offline.continue": "Продолжить офлайн",
"offline.restoredTitle": "Когда связь восстановится",
"offline.restoredDesc": "Обрыв связи ничего не стоит. SecureBit складывает всё локально в очередь и возобновляет зашифрованный сеанс, как только вы снова онлайн.",
"offline.r1Title": "Ваши сообщения дойдут",
"offline.r1Desc": "Всё, что вы написали офлайн, отправляется собеседнику автоматически.",
"offline.r2Title": "Файлы дозагрузятся",
"offline.r2Desc": "Передача продолжится с места остановки - отправлять заново не нужно.",
"offline.r3Title": "Их сообщения и файлы придут",
"offline.r3Desc": "Всё, что собеседник отправил во время перерыва, придёт вам по порядку.",
"offline.r4Title": "Ничего не теряется",
"offline.r4Desc": "После восстановления связи разрыва не остаётся - разговор продолжается ровно с того места, где остановился.",
"offline.gotIt": "Понятно",
"qr.showTitle": "Показать QR-код",
"qr.showSubtitle": "На весь экран · пусть собеседник отсканирует",
"qr.showSubtitleFrames": "На весь экран · пусть собеседник отсканирует все {frames} кадров",
"notify.enabledBody": "Уведомления включены. Вы будете получать оповещения о новых сообщениях.",
"notify.workingBody": "Уведомления работают. Вы будете получать оповещения о новых сообщениях.",
"pw.label": "Поле пароля",
"pw.placeholder": "Введите пароль…",
"pw.decrypt": "Расшифровать",
"pw.cancel": "Отмена",
"file.title": "Передача файлов",
"file.drop": "Перетащите файлы сюда",
"file.dropHint": "Шифруются сквозным образом перед передачей · до 100 МБ",
"file.browse": "Обзор устройства",
"file.incoming": "Входящий запрос на файл",
"file.accept": "Принять",
"file.reject": "Отклонить",
"file.download": "Скачать",
"file.notReady": "Соединение ещё не готово",
"file.tooLarge": "Файл слишком большой",
"file.typeNotAllowed": "Тип файла не разрешён",
"file.maxConcurrent": "Достигнут предел одновременных передач",
"file.gone": "Этот файл больше не доступен для скачивания.",
"call.incoming": "Входящий звонок",
"call.incomingVideo": "Входящий видеозвонок",
"call.encrypted": "Зашифрованный звонок",
"call.encryptedShort": "Зашифровано",
"call.peer": "Защищённый собеседник",
"call.connecting": "Соединение…",
"call.ringing": "Вызов…",
"call.accept": "Принять",
"call.decline": "Отклонить",
"call.end": "Завершить звонок",
"call.camera": "Камера",
"call.cameraOff": "Камера выключена",
"call.peerCameraOff": "Камера собеседника выключена",
"call.flipCamera": "Переключить камеру",
"call.addVideo": "Добавить видео",
"call.video": "Видео",
"call.muted": "Без звука",
"call.expand": "Развернуть",
"call.minimize": "Свернуть",
"call.quality": "Качество соединения",
"call.qualityExcellent": "Отличное",
"call.videoPrefix": "Видео · ",
"call.voicePrefix": "Голос · ",
"group.new": "Новая группа",
"group.create": "Создать группу",
"group.join": "Присоединиться к группе",
"group.name": "Название группы",
"group.nameTooLong": "Название группы слишком длинное.",
"group.capacity": "До {max} человек, напрямую между устройствами. Все сверят один код безопасности, прежде чем группа откроется.",
"group.invite": "Пригласить",
"group.inviteMore": "Пригласить ещё участников",
"group.invitePeople": "Пригласить {count} человек",
"group.invitation": "Приглашение в группу",
"group.addMembers": "Добавить участников",
"group.roomFor": "Есть место ещё для {remaining}. После присоединения все сверят новый код группы.",
"group.membersCount": "{count} участников",
"group.member": "Участник",
"group.members": "Участники",
"group.remove": "Удалить {name}",
"group.message": "Написать в «{name}»",
"group.leave": "Выйти",
"group.leaveThis": "Выйти из этой группы",
"group.cancel": "Отменить группу",
"group.close": "Закрыть",
"group.cancelBtn": "Отмена",
"group.decline": "Отклонить",
"group.working": "Выполняется…",
"group.sasTitle": "Код безопасности группы",
"group.sasEveryone": "Этот код видят все",
"group.sasCompare": "Сверьте код группы с каждым участником, чтобы открыть группу.",
"group.sasReadAloud": "Прочитайте эти цифры вслух для ",
"group.sasWarning": "Если хотя бы один участник читает другой код, между вами кто-то есть. Отмените группу - не подтверждайте.",
"group.confirmFirst": "Сначала подтвердите код группы",
"group.codeSuffix": " · код {code}",
"group.exchangingNonces": "Обмен одноразовыми значениями…",
"group.waitingCommit": "Ожидание обязательств от всех участников…",
"group.waitingJoin": "Ожидание присоединения остальных участников…",
"group.emptyChat": "Здесь пока ничего. Сообщения подписаны отправителем и идут по собственному зашифрованному каналу каждого участника.",
"group.noVerified": "Пока нет проверенных чатов. Сначала откройте личный чат и сверьте его код безопасности - группа строится из уже проверенных соединений.",
"group.noMoreToAdd": "Других проверенных чатов нет. Откройте личный чат и сначала сверьте его код безопасности.",
"group.directLink": "Прямое соединение между устройствами",
"group.noDirectLink": "Прямого соединения ещё нет - сообщения передаёт другой участник, пока оно устанавливается",
"group.relayNote": "С некоторыми участниками прямого соединения ещё нет. Их сообщения идут через другого участника, который видит, что вы общаетесь, но не может ни прочитать, ни изменить сказанное. Группа продолжает соединять их напрямую.",
"group.relayOnlyOff": "Режим только через relay выключен, поэтому каждый участник соединяется с вами напрямую и узнаёт ваш IP-адрес - в том числе те, кого пригласил кто-то другой. Включите его в сетевых настройках, если это важно.",
"group.memberOffline": "{name} офлайн и не получит сообщений. Участие сохраняется - удаление перевыпускает ключи группы.",
"group.joinNote": "Другие участники узнают, что вы в этой группе. Истории сообщений нет - группа начинается пустой.",
"group.inviteSentNote": "Группа работает дальше, пока они не примут. Истории для них нет - они увидят только то, что отправлено с этого момента.",
"group.errNotCreated": "Группа не создана",
"group.errNobodyAccepted": "Никто не принял приглашение вовремя.",
"group.errNothingSent": "Ничего не отправлено и ничего не проверено. Закройте это и попробуйте снова, когда все подключатся.",
"group.errNotFormed": "Эту группу не удалось сформировать.",
"group.errFull": "Эта группа заполнена.",
"group.errInviteFailed": "Приглашение не удалось отправить - тот чат не подключён.",
"group.errNoMemberList": "Владелец группы так и не отправил список участников.",
"group.errUnsignedList": "Список участников не подписан владельцем группы. Не повторяйте - скажите им.",
"group.errNotOwner": "Изменить состав участников пытался не владелец группы.",
"hdr.tagline": "Сквозное шифрование",
"hdr.netSettings": "Дополнительные сетевые настройки",
"hdr.netSettingsTitle": "Дополнительные сетевые настройки (STUN/TURN)",
"hdr.disconnect": "Отключиться",
"status.connected": "Соединено",
"status.connecting": "Соединение…",
"status.notConnected": "Не соединено",
"status.reconnecting": "Переподключение…",
"status.retrying": "Повтор попытки…",
"status.verifying": "Проверка…",
"status.peerDisconnected": "Собеседник отключился",
"sec.replayProtection": "Защита от повторов",
"sec.messageIntegrity": "Целостность сообщений (HMAC)",
"sec.forwardSecrecy": "Совершенная прямая секретность",
"sec.metadataProtection": "Защита метаданных",
"sec.trafficObfuscation": "Маскировка трафика",
"sec.realTests": "Настоящие криптографические проверки",
"sec.simulatedData": "Смоделированные данные",
"sec.testPassed": "Проверка пройдена",
"sec.testFailed": "Проверка не пройдена или недоступна",
"sec.verificationDone": "Настоящая криптографическая проверка завершена",
"sec.verificationInProgress": "Идёт проверка безопасности…",
"sec.verificationWait": "Идёт проверка безопасности…\nПодождите, пока завершится криптографическая проверка в реальном времени.",
"sec.verificationUnavailable": "Проверка безопасности недоступна",
"chat.placeholder": "Напишите зашифрованное сообщение…",
"chat.send": "Отправить сообщение",
"chat.sendFiles": "Отправить файлы",
"chat.hideFiles": "Скрыть файлы",
"chat.recordVoice": "Записать голосовое сообщение",
"chat.sendVoice": "Отправить голосовое сообщение",
"chat.discard": "Отменить",
"chat.codeBlock": "Отправить как блок кода (расширяет поле)",
"chat.codeHint": "Фрагмент кода · форматирование сохранено · ⌘↵ чтобы отправить",
"chat.viewOnce": "Просмотреть один раз",
"chat.viewOnceTitle": "Просмотреть один раз - исчезает, как только собеседник прочитает",
"chat.viewOncePrefix": "Просмотреть один раз · ",
"chat.viewOnceTap": "Просмотреть один раз · коснитесь, чтобы показать",
"chat.viewedOnce": "Уже просмотрено",
"chat.disappearing": "Исчезающее сообщение - удаляется с обеих сторон",
"chat.disappearAfter": "Исчезнет через",
"chat.visibleFor": "Видно",
"chat.timerPrefix": "Таймер · ",
"chat.expired": "Это сообщение истекло",
"chat.deleteForEveryone": "Удалить у всех",
"chat.sending": "Отправка",
"chat.delivered": "Доставлено",
"chat.notSent": "Не отправлено",
"chat.notSentReason": "Не отправлено - защищённый канал не готов. Переподключитесь, чтобы продолжить.",
"chat.encrypted": "Зашифровано",
"chat.decrypted": "Расшифровано",
"chat.encryptedOnDevice": "Зашифровано на вашем устройстве",
"chat.uploading": "Отправка",
"chat.downloading": "Загрузка",
"chat.transferring": "Передача…",
"chat.copied": "Скопировано!",
"chat.collapse": "Свернуть",
"chat.closeMenu": "Закрыть меню",
"chat.newChat": "Новый чат",
"chat.newGroup": "Новая группа",
"chat.createGroup": "Создать группу",
"chat.groupChats": "Групповые чаты",
"chat.secureChat": "Защищённый чат",
"chat.nameThis": "Назовите этот чат",
"chat.rename": "Переименовать чат (только локально)",
"chat.renameHint": "Дважды щёлкните, чтобы переименовать",
"chat.localLabel": "Локальное название · хранится только на этом устройстве",
"chat.setStatus": "Задайте свой статус",
"chat.yourStatusPrefix": "Ваш статус - ",
"chat.meshHint": "До 8 участников · P2P-сеть",
"chat.offline": "Офлайн",
"chat.noNetwork": "Нет сети · переподключение",
"chat.startVoiceCall": "Начать зашифрованный звонок",
"chat.startVideoCall": "Начать зашифрованный видеозвонок",
"chat.verifyForCalls": "Проверьте сеанс, чтобы включить звонки",
"chat.e2eeNote": "Каждое сообщение шифруется сквозным образом на вашем устройстве, прежде чем уйти.",
"chat.peersOnly": "Отправляется сквозным образом только подключённым участникам - никогда не хранится на сервере.",
"flow.invitationCreated": "Защищённое приглашение создано",
"flow.invitationCreatedBang": "Защищённое приглашение создано и зашифровано.",
"flow.responseCreated": "Защищённый ответ создан",
"flow.responseCreatedBang": "Защищённый ответ создан.",
"flow.sendInvitation": "Отправьте код приглашения собеседнику по защищённому каналу (звонок, SMS и т. п.).",
"flow.sendResponse": "Отправьте код ответа инициатору по защищённому каналу или дайте ему отсканировать QR-код ниже.",
"flow.sendEncryptedCode": "Отправить зашифрованный код",
"flow.sendTheResponse": "Отправить ответ",
"flow.pasteOrWrite": "Вставьте или введите код…",
"flow.processingInvitation": "Обработка защищённого приглашения…",
"flow.processingResponse": "Обработка защищённого ответа…",
"flow.finalizing": "Завершение защищённого соединения…",
"flow.channelEstablished": "Защищённый канал установлен",
"flow.channelReady": "Защищённый канал готов",
"flow.restoring": "Восстановление соединения…",
"flow.invitationCaptured": "Приглашение считано.",
"err.needInvitation": "Нужно вставить код приглашения от собеседника.",
"err.needResponse": "Нужно вставить код ответа от собеседника.",
"err.responseFormat": "Неверный формат ответа - проверьте код",
"err.responseNoKey": "Неверный код ответа - криптографический ключ отсутствует или повреждён. Проверьте код и попробуйте снова.",
"err.responseNoSignKey": "Неверный код ответа - не хватает ключа проверки подписи. Проверьте код и попробуйте снова.",
"err.responseOutdated": "Данные ответа устарели - воспользуйтесь новым приглашением",
"err.setupError": "Ошибка установки соединения",
"err.notReady": "Соединение ещё не готово",
"err.securityBreach": "Обнаружено нарушение безопасности - соединение отклонено",
"err.securityValidation": "Проверка безопасности не пройдена - возможна атака",
"err.retiredQr": "Этот QR-код использует устаревший формат, которым не удалось передать приглашение. Попросите новый или воспользуйтесь копированием.",
"err.compressedQrNote": "Сжатый QR может опустить SDP ради краткости. Если соединение не удаётся, воспользуйтесь копированием.",
"err.inviteNotConnected": "Приглашение не удалось отправить. Тот чат сейчас не подключён.",
"err.inviteNotConnectedRetry": "Приглашение не удалось отправить. Тот чат сейчас не подключён - откройте его снова и попробуйте ещё раз.",
"err.nobodyAccepted": "Никто не принял приглашение. Группа осталась без изменений.",
"err.noAudio": "Звук не записан - проверьте разрешение на микрофон и попробуйте снова.",
"err.voiceNeedsConnection": "Для голосового сообщения нужно активное защищённое соединение. Переподключитесь и попробуйте снова.",
"err.voiceRestoring": "Восстанавливаем соединение - попробуйте отправить голосовое сообщение через мгновение.",
"err.fileTooLarge": "Файл слишком большой",
"sas.safetyNumber": "Номер безопасности",
"sas.incorrect": "Неверный код. Сверьте его с собеседником и попробуйте снова.",
"sas.noMatch": "Коды не совпадают",
"sas.makeSure": "Убедитесь, что коды совпадают точно.",
"sas.tooManyAttempts": "Слишком много неверных попыток. Сеанс сброшен ради безопасности.",
"sas.verificationFailed": "Проверка не пройдена",
"sas.verified": "Проверено · совершенная прямая секретность",
"sas.runVerification": "Запустить проверку безопасности",
"sec.panelTitle": "Детали сети и криптографии",
"sec.security": "Безопасность",
"sec.transport": "Транспорт",
"sec.keyExchange": "Обмен ключами",
"sec.allEnabled": "Все функции безопасности включены по умолчанию",
"sec.realTimeNote": "Проверка в реальном времени настоящими криптографическими функциями - без выдуманных данных.",
"sec.simulatedWarning": "Внимание: соединение может быть не полностью установлено - значения могут быть смоделированы.",
"dl.title": "Скачать SecureBit",
"dl.free": "Бесплатно · открытый код",
"dl.soon": "Приложения для iOS и Android и расширения для Chrome, Firefox и Opera появятся скоро.",
"chatHdr.chat": "Чат",
"chatHdr.chats": "Чаты",
"chatHdr.newChat": "+ Новый",
"chatHdr.secure": "Защищено",
"chatHdr.p2pSub": "P2P · сквозное шифрование",
"chatHdr.save": "Сохранить",
"chatHdr.close": "Закрыть",
"chatHdr.expand": "Развернуть",
"chatHdr.you": "Вы",
"chatHdr.qrCode": "QR-код",
"chat.disconnected": "Разъединено",
"call.mute": "Выключить микрофон",
"call.endShort": "Завершить",
"group.add": "Добавить",
"group.send": "Отправить",
"sec.pfsShort": "Совершенная прямая секретность",
"sec.cipher": "Шифр",
"chat.close": "Закрыть",
"file.needConnection": "Для передачи файлов нужно открытое соединение",
"presence.available": "Доступен",
"presence.away": "Отошёл",
"presence.busy": "Занят",
"presence.offline": "Не в сети",
"presence.invisible": "Невидимый",
"presence.availableDesc": "В сети и на связи",
"presence.awayDesc": "Неактивен · отошёл",
"presence.busyDesc": "Не беспокоить",
"presence.invisibleDesc": "Выглядеть офлайн для собеседников",
"presence.online": "В сети",
"conn.p2p": "P2P · соединено",
"conn.verifying": "Проверка…",
"conn.connecting": "Соединение…",
"conn.reconnecting": "Переподключение…",
"conn.peerDisconnected": "Собеседник отключился",
"conn.disconnected": "Разъединено",
"chat.defaultLabel": "Чат",
"groupPhase.forming": "Формирование…",
"groupPhase.commitments": "Обмен обязательствами…",
"groupPhase.revealing": "Раскрытие…",
"groupPhase.compare": "Сверьте код группы",
"groupPhase.ready": "Группа готова",
"groupPhase.failed": "Группа не создана",
"call.qualityGood": "Хорошее",
"call.qualityFair": "Среднее",
"call.qualityWeak": "Слабое",
"msg.code": "Код",
"msg.timer": "Таймер",
"msg.voice": "Голос",
"msg.play": "Воспроизвести",
"msg.sent": "Отправлено",
"msg.read": "Прочитано",
"report.title": "Проверка безопасности в реальном времени",
"report.active": "Активно",
"report.testsPassed": "Пройдено проверок",
"report.verifiedAt": "Проверено",
"report.source": "Источник",
"secTest.verifyECDHKeyExchange": "Обмен ключами ECDH",
"secTest.verifyECDSASignatures": "Цифровые подписи ECDSA",
"secTest.verifyEncryption": "Шифрование AES-GCM",
"secTest.verifyMessageIntegrity": "Целостность сообщений",
"secTest.verifyPerfectForwardSecrecy": "Совершенная прямая секретность",
"secTest.verifyPFS": "Совершенная прямая секретность",
"secTest.verifyReplayProtection": "Защита от повторов",
"secTest.verifyDTLSFingerprint": "Отпечаток DTLS",
"secTest.verifySASVerification": "Проверка SAS",
"secTest.verifyMetadataProtection": "Защита метаданных",
"secTest.verifyTrafficObfuscation": "Маскировка трафика",
"secTest.verifyPacketPadding": "Дополнение пакетов",
"secTest.verifyNestedEncryption": "Вложенное шифрование",
"secTest.verifyNonExtractableKeys": "Ключи, которые нельзя извлечь",
"secTest.verifyRateLimiting": "Ограничение частоты",
"secTest.verifyMutualAuth": "Взаимная аутентификация",
"secTest.verifyAuthProof": "Доказательство аутентификации",
"secTest.verifyEnhancedValidation": "Усиленная проверка",
"secTest.verifyAdvancedFeatures": "Расширенные возможности",
"secTest.verifySignature": "Проверка подписи",
"secDetail.Security system initializing...": "Система безопасности запускается…",
"secDetail.Nested encryption active": "Вложенное шифрование активно",
"secDetail.Nested encryption failed": "Вложенное шифрование не удалось",
"secDetail.Packet padding active": "Дополнение пакетов активно",
"secDetail.Packet padding failed": "Дополнение пакетов не удалось",
"secDetail.Advanced features active": "Расширенные возможности активны",
"secDetail.Advanced features failed": "Расширенные возможности не работают",
"secDetail.No encryption key available": "Ключ шифрования недоступен",
"secDetail.AES-GCM encryption/decryption working correctly": "Шифрование и расшифрование AES-GCM работают правильно",
"secDetail.No ECDH key pair available": "Пара ключей ECDH недоступна",
"secDetail.Key derivation failed": "Вычисление ключа не удалось",
"secDetail.No ECDSA key pair available": "Пара ключей ECDSA недоступна",
"secDetail.ECDSA digital signatures working correctly": "Цифровые подписи ECDSA работают правильно",
"secDetail.MAC key not available or invalid": "Ключ MAC недоступен или неверен",
"secDetail.Rate limiter did not block a message over the limit": "Ограничитель не заблокировал сообщение сверх лимита",
"secDetail.Rate limiter is not available": "Ограничитель частоты недоступен",
"secDetail.Replay protection is working correctly": "Защита от повторов работает правильно",
"secDetail.Replay protection not enabled": "Защита от повторов не включена",
"secDetail.SAS code not available": "Код SAS недоступен",
"secDetail.SAS verification code is valid and available": "Код проверки SAS действителен и доступен",
"secDetail.Traffic obfuscation is working correctly": "Маскировка трафика работает правильно",
"secDetail.Traffic obfuscation not enabled": "Маскировка трафика не включена",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "Для этого сеанса нет эфемерной пары ключей ECDH, которую нельзя извлечь",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "Только сеансовая прямая секретность: ключи эфемерны для каждого сеанса, но Double Ratchet для этого соединения не активен (у собеседника более старая версия), поэтому скомпрометированный сеансовый ключ открывает весь разговор.",
"msg.pause": "Пауза",
"msg.failed": "Не удалось",
"groupErr.timeout": "Участник перестал отвечать, прежде чем код был готов.",
"groupErr.keyMismatch": "Ключ участника не совпал с личностью, которую для него заявили.",
"groupErr.revealMismatch": "Раскрытое значение участника не совпало с его обязательством.",
"groupErr.commitChanged": "Участник изменил своё обязательство посреди процесса.",
"groupErr.missingKey": "В списке был участник, чей ключ так и не пришёл.",
"groupErr.outsider": "Пришёл кадр от кого-то вне группы.",
"groupErr.limit": "Группа ограничена восемью участниками.",
"groupErr.tooLarge": "Сообщение было слишком большим, чтобы отправить его группе.",
"fileType.text": "Обычный текст",
"fileType.images": "Изображения",
"fileType.archives": "Архивы",
"fileType.voice": "Голосовые сообщения",
"fileType.unsupported": "Не поддерживается",
"qrScan.title": "Сканировать QR-код",
"qrScan.auto": "Автоматически",
"qrScan.reset": "Сбросить",
"qrScan.autoScroll": "Автопрокрутка включена",
"qrScan.starting": "Запуск камеры…",
"qrScan.point": "Наведите камеру на QR-код",
"qrScan.tapFocus": "Коснитесь экрана, чтобы сфокусировать",
"qrScan.focusing": "Фокусировка…",
"iceErr.notArray": "Список серверов должен быть массивом",
"iceErr.invalidJson": "Неверный JSON",
"iceErr.tooMany": "Слишком много серверов (максимум {max})",
"iceErr.invalidEntry": "{label}: неверная запись",
"iceErr.urlCount": "{label}: нужно от 1 до {max} URL",
"iceErr.turnCreds": "{label}: TURN-серверы обычно требуют имени пользователя и учётных данных",
"iceUrl.notString": "URL должен быть строкой",
"iceUrl.empty": "URL пустой",
"iceUrl.tooLong": "URL слишком длинный",
"iceUrl.badChars": "URL содержит недопустимые символы",
"iceUrl.badScheme": "URL должен начинаться с stun:, stuns:, turn: или turns:",
"iceUrl.badQuery": "URL содержит неверный запрос",
"iceUrl.noHost": "В URL не хватает хоста",
"iceUrl.badHost": "URL содержит неверный хост или порт",
"iceUrl.badTransport": "Запрос URL должен быть transport=udp или transport=tcp",
"msg.off": "Выключено",
"file.consentUnavailable": "Нет возможности получить согласие",
"secLevel.MAXIMUM": "МАКСИМУМ",
"secLevel.INITIALIZING": "ЗАПУСК",
"secLevel.ERROR": "ОШИБКА",
"secLevel.UNKNOWN": "НЕИЗВЕСТНО",
"status.error": "Ошибка",
"offline.disconnect": "Отключиться",
"offline.learnMore": "Подробнее",
"pwa.installApp": "Установить приложение",
"chat.onWeb": "Вы в веб-версии",
"groupCall.startVoice": "Начать групповой голосовой звонок",
"groupCall.startVideo": "Начать групповой видеозвонок",
"groupCall.join": "Присоединиться",
"groupCall.dismiss": "Не сейчас",
"groupCall.leave": "Выйти из звонка",
"groupCall.you": "Вы",
"groupCall.connecting": "Соединение…",
"groupCall.waitingLink": "Ожидание прямого соединения…",
"groupCall.legFailed": "Не удалось соединиться",
"groupCall.startedVoice": "{name} начал голосовой звонок",
"groupCall.startedVideo": "{name} начал видеозвонок",
"groupCall.inCall": "{count} в звонке",
"groupCall.err.permission_denied": "Звонок не начался - доступ к микрофону и камере заблокирован. Разрешите его для этого сайта и попробуйте снова.",
"groupCall.err.device_not_found": "Звонок не начался - на этом устройстве не найден микрофон.",
"groupCall.err.device_busy": "Звонок не начался - микрофон занят другим приложением. Закройте его и попробуйте снова.",
"groupCall.err.media_failed": "Звонок не начался - не удалось открыть микрофон.",
"groupCall.err.call_in_progress": "В этой группе уже идёт звонок. Присоединитесь к нему, а не начинайте новый.",
"groupCall.err.not_ready": "Сначала подтвердите код группы.",
"groupCall.speaking": "{name} говорит",
"groupCall.pin": "Показать {name} крупно",
"groupCall.unpin": "Вернуться ко всем",
"groupCall.showEveryone": "Все",
"msg.after5s": "5 с после прочтения",
"msg.after15s": "15 с после прочтения",
"msg.after30s": "30 с после прочтения",
"msg.after1m": "1 мин после прочтения",
"msg.sec30": "30 секунд",
"msg.min5": "5 минут",
"msg.hour1": "1 час",
"desktop.shareDesc": "Отправьте код собеседнику. Он одноразовый и скоро истечёт.",
"desktop.invitationCreated": "Защищённое приглашение создано - отправьте его собеседнику.",
"desktop.joinDesc": "Вставьте код приглашения собеседника, чтобы построить защищённый ответ.",
"desktop.offerTag": "приглашение · копировать текст",
"desktop.answerTag": "ответ · копировать текст",
"desktop.offerPlaceholder": "Здесь появится код приглашения…",
"desktop.answerPlaceholder": "Здесь появится код ответа…",
"desktop.backToChats": "Назад к чатам",
"desktop.sendFeedback": "Отправить отзыв",
"desktop.callsNeedVerified": "Для звонков нужен подтверждённый защищённый канал.",
"desktop.noOpenChannel": "Нет открытого защищённого канала.",
"desktop.chatCarriesCall": "Через этот чат идёт групповой звонок. Выйдите из группового звонка, прежде чем звонить один на один.",
"desktop.err.permission_denied": "Звонок не начался - доступ к микрофону и камере заблокирован. Разрешите его в системных настройках и попробуйте снова.",
"desktop.language": "Язык",
"desktop.languageHint": "Применяется сразу. Уже отправленные сообщения остаются на том языке, на котором их написали.",
"desktop.compareCode": "Сверьте код подтверждения с собеседником и подтвердите, если он совпадает.",
"desktop.verifyBeforeFiles": "Завершите проверку, прежде чем отправлять файлы.",
"desktop.verifyBeforeSending": "Завершите проверку, прежде чем отправлять сообщения.",
"desktop.disconnectedByBackend": "Соединение безопасно разорвано.",
"desktop.restoreFailed": "Не удалось восстановить соединение. Этот чат будет закрыт.",
"desktop.channelNotReady": "Канал данных ещё недоступен. Дождитесь установления соединения.",
"desktop.enterCode": "Введите код подтверждения.",
"desktop.noOffer": "Приглашение не найдено. Сначала создайте его.",
"desktop.notInitiator": "Вы не создавали это соединение, поэтому применять ответ не к чему.",
"desktop.decryptFailed": "Сообщение не удалось расшифровать, оно отброшено.",
"desktop.badMessageFormat": "Пришёл повреждённый кадр, он отброшен.",
"desktop.notSentNotReady": "Сообщение не отправлено: защищённый канал не готов. Дождитесь окончания проверки или переподключитесь.",
"desktop.micDenied": "Доступ к микрофону отклонён.",
"desktop.noChannelWait": "Нет открытого защищённого канала - дождитесь установления соединения.",
"desktop.sasFailed": "Проверка не пройдена. Возможен посредник, поэтому соединение прервано.",
"desktop.sasOk": "Проверка пройдена. Этот канал аутентифицирован сквозным образом.",
"desktop.iceForgotten": "Сохранённые серверы забыты. Используются публичные серверы ICE.",
"desktop.icePublic": "Используются публичные серверы ICE.",
"desktop.verificationInProgress": "Проверка безопасности ещё идёт. Дождитесь её завершения.",
"desktop.fileGone": "Этот файл больше недоступен для загрузки.",
"desktop.codeMismatch": "Коды подтверждения не совпадают. Отключаемся ради безопасности.",
"desktop.noLocalCode": "Проверка не удалась: нет локально вычисленного кода для сравнения. Отключаемся ради безопасности.",
"desktop.protocolViolation": "Собеседник заявил о подтверждении кода раньше, чем вы его подтвердили. Отключаемся ради безопасности.",
"desktop.verificationRejected": "Проверка отклонена. Соединение прервано ради безопасности.",
"secLevel.HIGH": "ВЫСОКИЙ",
"secLevel.MEDIUM": "СРЕДНИЙ",
"secLevel.LOW": "НИЗКИЙ",
"desktop.rerun": "Проверить снова",
"desktop.ice.customDesc": "До {max} серверов, по одному URL в строке или JSON.",
"desktop.ice.persistDesc": "Хранится локально на этом устройстве. Оставьте выключенным, чтобы использовать только в этом сеансе.",
"desktop.group.leaveNote": "Остальным участникам сообщат, что вы вышли. После этого на устройстве не остаётся ничего об этой группе - ни один сервер не хранит копию, чтобы вернуться, так что понадобится новое приглашение.",
"desktop.sec.ecdsaOk": "Подпись пакета ключей собеседника проверена при рукопожатии (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "Рукопожатие не завершено",
"desktop.sec.ecdhOk": "Ключи сеанса выведены из эфемерного обмена ECDH P-384 через HKDF-SHA-256",
"desktop.sec.ecdhNone": "Ключи сеанса не выведены",
"desktop.sec.encryptionOk": "Шифрование и расшифрование AES-GCM проверены в ядре",
"desktop.sec.encryptionNa": "Самопроверку AES-GCM выполнить не удалось",
"desktop.sec.integrityOk": "Целостность сообщений проверена (аутентификация AES-GCM)",
"desktop.sec.integrityNa": "Самопроверку целостности выполнить не удалось",
"desktop.sec.pfsOk": "Double Ratchet активен - у каждого сообщения свой ключ",
"desktop.sec.pfsNa": "Не измерено",
"desktop.sec.replayOk": "Ключи сообщений рэтчета уничтожаются после использования, поэтому перехваченный кадр нельзя воспроизвести повторно",
"desktop.sec.replayNa": "Не измерено",
"desktop.sec.dtlsPinned": "Отпечаток DTLS собеседника закреплён: {fp}",
"desktop.sec.dtlsNone": "Отпечатка DTLS удалённой стороны нет",
"desktop.sec.sasBoth": "Обе стороны подтвердили код безопасности вне канала",
"desktop.sec.sasIncomplete": "Код безопасности подтвердили не обе стороны",
"desktop.sec.metadataOk": "Выведен отдельный ключ метаданных (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "Ключа метаданных нет",
"desktop.sec.coverOn": "Прикрывающий трафик активен: случайные фальшивые кадры (32-128 Б каждые 15-30 с) в канале с рэтчетом",
"desktop.sec.coverOff": "Генератор прикрывающего трафика не работает",
"desktop.sec.coverUnsupported": "Прикрывающему трафику нужен сеанс Double Ratchet (у собеседника версия постарше)",
"desktop.tagline": "Сквозная свобода",
"desktop.callsNotHere": "Звонки в этой сборке пока недоступны. Сообщения, файлы и групповые чаты работают как обычно."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["ru"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "Мова",
"language.suggest.text": "Ця сторінка також доступна українською.",
"language.suggest.cta": "Читати українською",
"language.suggest.dismiss": "Закрити",
"community.title": "Долучайтеся до майбутнього приватності",
"community.description": "SecureBit росте завдяки своїй спільноті. Ваші ідеї та відгуки формують майбутнє захищеного спілкування - розробка ведеться відкрито, з повною валідацією ASN.1 на всьому шляху.",
"community.github": "Репозиторій на GitHub",
"community.feedback": "Відгук",
"unique.eyebrow": "Чим ми вирізняємось",
"unique.heading": "Чому SecureBit - особливий",
"unique.s1.titleTop": "Багатошарове",
"unique.s1.titleBottom": "ядро шифрування",
"unique.s1.collapsed": "Ядро шифрування",
"unique.s1.desc": "Обмін ключами ECDH P-384, корисне навантаження в AES-256-GCM, підписи ECDSA і повна валідація ASN.1 - зведені в один загартований конвеєр.",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "Чистий P2P",
"unique.s2.titleBottom": "через WebRTC",
"unique.s2.collapsed": "Чистий P2P через WebRTC",
"unique.s2.desc": "Повідомлення йдуть напряму між пристроями через WebRTC. Жоден relay не тримає ваших даних - сервер лише допомагає двом учасникам знайти одне одного.",
"unique.s2.tags": [
"DTLS 1.3",
"Без relay"
],
"unique.s3.titleTop": "Досконала",
"unique.s3.titleBottom": "пряма секретність",
"unique.s3.collapsed": "Пряма секретність",
"unique.s3.desc": "Сеансові ключі змінюються безперервно й відкидаються після використання, тож один скомпрометований ключ ніколи не відкриє попередніх розмов.",
"unique.s3.tags": [
"Ефемерні ключі",
"Автоматична зміна"
],
"unique.s4.titleTop": "Маскування",
"unique.s4.titleBottom": "трафіку",
"unique.s4.collapsed": "Маскування трафіку",
"unique.s4.desc": "Розміри пакетів і паузи між ними доповнюються та рандомізуються, тож метадані не складаються в помітний візерунок навіть для того, хто стежить за каналом.",
"unique.s4.tags": [
"Доповнення пакетів",
"Розкид у часі"
],
"unique.s5.titleTop": "Жодного",
"unique.s5.titleBottom": "збору даних",
"unique.s5.collapsed": "Жодного збору даних",
"unique.s5.desc": "Без облікових записів, без журналів, без збереження повідомлень. На сервері немає нічого, що можна злити, вилучити за ухвалою чи продати.",
"unique.s5.tags": [
"Без облікових записів",
"Без журналів"
],
"partners.eyebrow": "Партнери та екосистема",
"partners.heading": "Нам довіряють наші партнери",
"partners.aegis.desc": "Інвестиційний партнер, який захищає конфіденційні фінансові комунікації у своєму портфелі.",
"partners.aegis.role": "Стратегічний інвестор",
"partners.furilabs.desc": "Linux-телефони з пріоритетом приватності, які постачають SecureBit як типовий захищений канал.",
"partners.furilabs.role": "Технологічний партнер",
"partners.inviteTitle": "Стати партнером",
"partners.inviteDesc": "Створюєте обладнання чи інфраструктуру для приватності? Інтегруймо SecureBit.",
"partners.inviteCta": "Почати розмову",
"roadmap.eyebrow": "Дорожня карта",
"roadmap.heading": "Як розвивався SecureBit",
"roadmap.subheading": "Від першого прототипу до децентралізованої мережі, стійкої до квантових обчислень, з повною валідацією ASN.1 на кожному рівні.",
"roadmap.progress": "Пройдено {shipped} з {total} етапів",
"roadmap.upcoming": "{upcoming} попереду",
"roadmap.keyFeatures": "Ключові можливості",
"roadmap.status.released": "Випущено",
"roadmap.status.current": "Поточний",
"roadmap.status.dev": "У розробці",
"roadmap.status.planned": "Заплановано",
"roadmap.status.research": "Дослідження",
"hero.headlineTop": "Пряма лінія,",
"hero.headlineBottom": "яку прочитаєте лише ви двоє.",
"hero.subheading": "Ключі створюються на вашому пристрої й передаються напряму між учасниками. Без облікових записів і без серверів, що зберігають ваші повідомлення.",
"hero.diagramAlt": "Пряма зашифрована лінія до одного учасника, до якої долучаються ще двоє",
"intro.createTitle": "Створити новий канал",
"intro.createDesc": "Ваш пристрій створює ключі та одноразове запрошення. Ніщо з цього не потрапляє на сервер.",
"intro.createCta": "Створити ключі та запрошення",
"intro.joinTitle": "Приєднатися до каналу",
"intro.scanTitle": "Сканувати QR камерою",
"intro.scanSubtitle": "Найшвидше - наведіть на екран співрозмовника",
"intro.orPasteCode": "або вставте код",
"intro.pastePlaceholder": "Вставте код запрошення сюди…",
"intro.connect": "З'єднатися",
"intro.connecting": "Обробка…",
"roadmap.r1.title": "Початок розробки",
"roadmap.r1.sub": "Ідея, прототип і налаштування інфраструктури",
"roadmap.r1.date": "Початок 2025",
"roadmap.r1.features": [
"Формування концепції та вимог",
"Вибір стека: WebRTC, P2P, криптографія",
"Перші прототипи обміну повідомленнями",
"Створення репозиторію та CI",
"Базова архітектура шифрування",
"Дизайн UX/UI"
],
"roadmap.r2.title": "Альфа-версія",
"roadmap.r2.sub": "Перша публічна альфа: базовий чат і обмін ключами",
"roadmap.r2.date": "Весна 2025",
"roadmap.r2.features": [
"Базовий обмін повідомленнями P2P через WebRTC",
"Просте наскрізне шифрування (демонстраційна схема)",
"Стабільний сигналінг і перепідключення",
"Мінімальний інтерфейс для тестування",
"Збір відгуків від перших тестувальників"
],
"roadmap.r3.title": "Посилений захист",
"roadmap.r3.sub": "Зміцнення безпеки та випуск стабільної гілки",
"roadmap.r3.date": "Літо 2025",
"roadmap.r3.features": [
"ECDH/ECDSA у промисловій експлуатації",
"Пряма секретність і зміна ключів",
"Покращені перевірки автентифікації",
"Шифрування файлів і передавання великих обсягів",
"Аудит базових криптографічних процесів"
],
"roadmap.r4.title": "Масштабування та стабільність",
"roadmap.r4.sub": "Масштабування мережі та підвищення стабільності",
"roadmap.r4.date": "Осінь 2025",
"roadmap.r4.features": [
"Оптимізація P2P-з'єднань і проходження NAT",
"Механізми перепідключення та черги повідомлень",
"Менше споживання батареї на мобільних",
"Синхронізація між кількома пристроями",
"Інструменти моніторингу та журналювання для розробників"
],
"roadmap.r5.title": "Приватність передусім",
"roadmap.r5.sub": "Фокус на приватності: зменшення метаданих",
"roadmap.r5.date": "Зима 2025",
"roadmap.r5.features": [
"Захист метаданих і зменшення відбитка",
"Експерименти з цибулевою маршрутизацією та DHT",
"Варіанти анонімних з'єднань",
"Підготовка до відкритого аудиту коду",
"Покращена перевірка учасників"
],
"roadmap.r6.title": "Enhanced Security Edition",
"roadmap.r6.sub": "18-шарова криптографія військового рівня з повною валідацією ASN.1",
"roadmap.r6.date": "Кінець 2025",
"roadmap.r6.features": [
"Потрійний захист: ECDH + DTLS + SAS",
"Шифрування ECDH P-384 і AES-GCM 256 біт",
"Перевірка відбитка DTLS",
"Перевірка SAS (короткий рядок автентифікації)",
"Пряма секретність зі зміною ключів",
"Посилений захист від атак «людина посередині»",
"Повна валідація ASN.1 DER",
"Перевірка OID і точок EC",
"Валідація структури SPKI",
"Архітектура P2P на WebRTC",
"Захист метаданих",
"100 % відкритий код"
],
"roadmap.r7.title": "Desktop Edition",
"roadmap.r7.sub": "Власні застосунки для Windows, macOS і Linux",
"roadmap.r7.date": "Початок 2026",
"roadmap.r7.features": [
"Застосунок для Windows (Tauri v2)",
"Застосунок для macOS (Tauri v2)",
"AppImage для Linux (Tauri v2)",
"Сповіщення в реальному часі",
"Автоматичне перепідключення",
"Синхронізація між пристроями",
"Оновлений інтерфейс",
"Файли до 100 МБ"
],
"roadmap.r8.title": "Захищений голос і дзвінки",
"roadmap.r8.sub": "Зашифровані голосові повідомлення, аудіо- та відеодзвінки",
"roadmap.r8.date": "Початок 2026",
"roadmap.r8.features": [
"Голосові повідомлення з наскрізним шифруванням",
"Зашифровані аудіодзвінки віч-на-віч (WebRTC)",
"Зашифровані відеодзвінки віч-на-віч (WebRTC)",
"Пряма секретність для живого потоку",
"Медіапотоки під захистом SRTP/DTLS",
"Перевірка SAS під час дзвінка",
"Сповіщення про дзвінки та автоперепідключення",
"Медіа P2P з низькою затримкою"
],
"roadmap.r9.title": "Групове спілкування",
"roadmap.r9.sub": "Групові чати без втрати приватності",
"roadmap.r9.date": "Зараз",
"roadmap.r9.features": [
"Групові чати P2P до 8 учасників",
"Доставка через мережу з підписаним relay як запасним шляхом",
"Один код безпеки групи, який звіряють усі",
"Церемонія «спершу зобов'язання, потім розкриття» проти добору кодів",
"Власні ключі особи в групі, ефемерні за задумом",
"Підписане членство з упорядкуванням за епохами",
"Підписані повідомлення - розбіжність у стенограмі можна довести",
"Без сервера, без спільного ключа групи, без історії"
],
"roadmap.r10.title": "Mobile Edition",
"roadmap.r10.sub": "Власні застосунки для iOS та Android",
"roadmap.r10.date": "II квартал 2027",
"roadmap.r10.features": [
"Застосунок для iOS (Swift/SwiftUI)",
"Застосунок для Android (Kotlin/Jetpack Compose)",
"Підтримка PWA в мобільних браузерах",
"Push-сповіщення в реальному часі",
"Оптимізація витрати батареї",
"Інтерфейс, пристосований до мобільних",
"Черга повідомлень офлайн",
"Біометрична автентифікація"
],
"roadmap.r11.title": "Стійкість до квантових обчислень",
"roadmap.r11.sub": "Захист від квантових комп'ютерів",
"roadmap.r11.date": "IV квартал 2027",
"roadmap.r11.features": [
"Постквантова криптографія CRYSTALS-Kyber",
"Цифрові підписи SPHINCS+",
"Гібридна схема: класична та постквантова",
"Квантово стійкий обмін ключами",
"Оновлені алгоритми гешування",
"Міграція наявних сеансів",
"Сумісність із v5.x",
"Квантово стійкі протоколи"
],
"roadmap.r12.title": "Децентралізована мережа",
"roadmap.r12.sub": "Повністю децентралізована мережа",
"roadmap.r12.date": "2028",
"roadmap.r12.features": [
"Сітчаста мережа вузлів",
"DHT для пошуку учасників",
"Вбудована цибулева маршрутизація",
"Токеноміка та стимули для вузлів",
"Врядування через DAO",
"Взаємодія з іншими мережами",
"Сумісність між платформами",
"Мережа, що відновлюється сама"
],
"roadmap.r13.title": "ШІ-помічник із приватності",
"roadmap.r13.sub": "Штучний інтелект для приватності та безпеки",
"roadmap.r13.date": "2028+",
"roadmap.r13.features": [
"Локальний аналіз загроз за допомогою ШІ",
"Автоматичне виявлення атак «людина посередині»",
"Адаптивна криптографія",
"Персональні поради з безпеки",
"Машинне навчання з нульовим розголошенням",
"Приватний ШІ-помічник",
"Передбачувальна безпека",
"Автономний захист від атак"
],
"handshake.step1": "Створення пари ключів ECDH P-384",
"handshake.step2": "Обчислення коду перевірки",
"handshake.step3": "Закріплення прямої секретності",
"handshake.securingTitle": "Захищаємо ваш канал",
"handshake.answerTitle": "Готуємо вашу відповідь",
"handshake.securingDesc": "Створюємо ключі, здатні витримати втручання.",
"handshake.shareTitle": "Поділіться запрошенням",
"handshake.sendAnswerTitle": "Надішліть відповідь назад",
"handshake.shareDesc": "Покажіть QR-код або надішліть код співрозмовнику. Він одноразовий і скоро втратить чинність.",
"handshake.sendAnswerDesc": "Передайте цю відповідь тому, хто створив канал, щоб він завершив рукостискання.",
"handshake.establish": "Встановити з'єднання",
"handshake.thenReceive": "Потім отримайте відповідь, яку надішле співрозмовник",
"handshake.pasteAnswerPlaceholder": "Вставте код відповіді співрозмовника…",
"handshake.answerSentNote": "Надішліть цю відповідь створювачу й зачекайте - чат відкриється, щойно він приєднається.",
"handshake.qrHint": "Тримайте це відкритим, доки співрозмовник не зчитає код.",
"handshake.qrHintFrames": "Рукостискання розбите на {frames} кадрів - тримайте це відкритим, доки співрозмовник не зчитає всі.",
"verify.title": "Перевірка безпеки",
"verify.desc": "Звірте цей код безпеки зі співрозмовником іншим каналом (голосом або особисто), потім введіть його, щоб відкрити чат.",
"verify.enterLabel": "Введіть звірений код",
"verify.placeholder": "Введіть код тут",
"verify.confirm": "Підтвердити код",
"verify.confirmed": "Підтверджено",
"verify.mismatch": "Не збігаються",
"verify.yours": "Ваше підтвердження",
"verify.peer": "Підтвердження співрозмовника",
"verify.pending": "Очікується",
"verify.waiting": "Очікування коду…",
"verify.verified": "Канал перевірено",
"verify.bothConfirmed": "Обидві сторони підтвердили. Відкриваємо захищений чат…",
"pwa.bannerTitle": "Встановіть SecureBit.chat",
"pwa.bannerDesc": "Досвід власного застосунку з посиленим захистом",
"pwa.install": "Встановити",
"pwa.dismiss": "Закрити",
"pwa.close": "Закрити",
"pwa.iosTitle": "Встановлення на iOS",
"pwa.iosStep1": "Натисніть кнопку «Поділитися»",
"pwa.iosStep1Hint": "Зазвичай унизу Safari",
"pwa.iosStep2": "Знайдіть «На екран «Домів»»",
"pwa.iosStep2Hint": "Прогорніть меню поділитися вниз",
"pwa.iosStep3": "Натисніть «Додати»",
"pwa.iosStep3Hint": "Підтвердіть, щоб встановити SecureBit.chat",
"pwa.genericTitle": "Встановити SecureBit",
"pwa.genericDesc": "Кожен браузер встановлює по-своєму. Оберіть кроки, які відповідають вашому.",
"pwa.gotIt": "Зрозуміло",
"pwa.installedTitle": "Застосунок встановлено!",
"pwa.installedIos": "Застосунок для iOS встановлено! Відкрийте його з екрана «Домів».",
"pwa.installedGeneric": "SecureBit.chat тепер на вашому пристрої",
"pwa.anytimeTitle": "Встановити будь-коли",
"pwa.anytimeDesc": "Ви завжди можете встановити SecureBit.chat із меню браузера - так він працює найкраще.",
"pwa.ok": "Гаразд",
"step.open": "Крок 1 · відкрити канал",
"step.exchange": "Крок 2 · обмін",
"step.verification": "Крок 3 · перевірка",
"action.create": "Створити",
"action.join": "Приєднатися",
"action.back": "Назад",
"action.copy": "Копіювати",
"action.copied": "Скопійовано",
"action.scan": "Сканувати",
"action.downloadDesktop": "Завантажити застосунок",
"action.advancedSettings": "Додаткові налаштування",
"cred.offerTag": "пропозиція · або скопіюйте текст",
"cred.answerTag": "відповідь · або скопіюйте текст",
"cred.reveal": "Натисніть, щоб показати - тримайте цей код у таємниці",
"qr.title": "Сканувати QR-код",
"qr.subtitle": "Наведіть камеру на їхній QR-код",
"qr.scanning": "Сканування…",
"qr.hint": "Тримайте рівно, доки не зчитаються всі частини. Камера працює локально - нічого не надсилається.",
"mesh.you": "ви",
"mesh.peer": "співрозмовник · сеанс 1",
"mesh.joined2": "оксана приєдналася · +2",
"mesh.joined3": "тарас приєднався · +3",
"ice.title": "Мережеві налаштування",
"ice.subtitle": "Налаштовується локально - ніколи не передається співрозмовнику",
"ice.intro": "Типово SecureBit використовує публічні STUN-сервери, щоб узгодити пряме з'єднання. Якщо тримаєте власні, вкажіть свої STUN/TURN.",
"ice.publicTitle": "Публічні сервери (типово)",
"ice.publicDesc": "Без налаштування. Підходить більшості.",
"ice.customTitle": "Власні STUN/TURN-сервери",
"ice.customDesc": "До {max} серверів.",
"ice.turnNote": "TURN-relay бачить IP обох сторін і ритм трафіку - але ніколи вміст повідомлень, який лишається зашифрованим наскрізно. Краще ",
"ice.turnNoteTls": " (TLS).",
"ice.test": "Перевірити сервери",
"ice.testing": "Перевірка…",
"ice.relayTitle": "Режим лише через relay",
"ice.relayBadge": "МАКСИМУМ ПРИВАТНОСТІ",
"ice.relayDesc": "Пропускає весь трафік через TURN, тож співрозмовник ніколи не побачить вашої IP. Потрібен TURN-сервер.",
"ice.relayWarning": "Режим лише через relay увімкнено, але TURN-сервер не вказано. З'єднання не зможе початися.",
"ice.persist": "Зберегти на цьому пристрої",
"ice.persistDesc": "Зберігається зашифровано в цьому браузері. Лишіть вимкненим, щоб діяло лише в цьому сеансі.",
"ice.forget": "Забути збережене",
"ice.cancel": "Скасувати",
"ice.apply": "Застосувати",
"ice.errUnavailable": "WebRTC недоступний у цьому браузері",
"ice.errInvalid": "Хибна конфігурація сервера",
"update.title": "Доступне оновлення",
"update.desc": "Виявлено новішу версію SecureBit.",
"update.currentVersion": "Поточна версія",
"update.newVersion": "Нова версія",
"update.now": "Оновити зараз",
"update.later": "Пізніше",
"update.unknown": "н/д",
"update.stepSaving": "Збереження даних…",
"update.stepSwCaches": "Очищення кешів Service Worker…",
"update.stepSwUnregister": "Скасування реєстрації Service Worker…",
"update.stepBrowserCache": "Очищення кешу браузера…",
"update.stepVersion": "Оновлення версії…",
"update.stepReload": "Перезавантаження застосунку…",
"update.error": "Помилка оновлення. Перезавантажте сторінку вручну (Ctrl+F5 або Cmd+Shift+R)",
"update.confirmSkip": "Доступна нова версія. Оновлення рекомендоване задля безпеки та стабільності. Продовжити без оновлення?",
"offline.backOnline": "Знову онлайн",
"offline.mode": "Режим офлайн",
"offline.dismiss": "Закрити",
"offline.lostTitle": "З'єднання втрачено",
"offline.lostDesc": "SecureBit працює офлайн. Дещо обмежено, але ваші дані в безпеці.",
"offline.point1": "Ваш сеанс і ключі збережено",
"offline.point2": "Жодних даних на серверах",
"offline.point3": "Повідомлення й файли синхронізуються після відновлення зв'язку",
"offline.continue": "Продовжити офлайн",
"offline.restoredTitle": "Коли зв'язок відновиться",
"offline.restoredDesc": "Обрив зв'язку нічого не коштує. SecureBit складає все локально в чергу й відновлює зашифрований сеанс, щойно ви знову онлайн.",
"offline.r1Title": "Ваші повідомлення дійдуть",
"offline.r1Desc": "Усе, що ви написали офлайн, надсилається співрозмовнику автоматично.",
"offline.r2Title": "Файли дозавантажаться",
"offline.r2Desc": "Передавання продовжиться з місця зупинки - надсилати заново не треба.",
"offline.r3Title": "Їхні повідомлення й файли надійдуть",
"offline.r3Desc": "Усе, що співрозмовник надіслав під час перерви, надійде вам по порядку.",
"offline.r4Title": "Нічого не втрачається",
"offline.r4Desc": "Після відновлення зв'язку розриву не лишається - розмова триває рівно з того місця, де спинилася.",
"offline.gotIt": "Зрозуміло",
"qr.showTitle": "Показати QR-код",
"qr.showSubtitle": "На весь екран · нехай співрозмовник відсканує",
"qr.showSubtitleFrames": "На весь екран · нехай співрозмовник відсканує всі {frames} кадрів",
"notify.enabledBody": "Сповіщення увімкнено. Ви отримуватимете попередження про нові повідомлення.",
"notify.workingBody": "Сповіщення працюють. Ви отримуватимете попередження про нові повідомлення.",
"pw.label": "Поле пароля",
"pw.placeholder": "Введіть пароль…",
"pw.decrypt": "Розшифрувати",
"pw.cancel": "Скасувати",
"file.title": "Передавання файлів",
"file.drop": "Перетягніть файли сюди",
"file.dropHint": "Шифруються наскрізно перед передаванням · до 100 МБ",
"file.browse": "Огляд пристрою",
"file.incoming": "Вхідний запит на файл",
"file.accept": "Прийняти",
"file.reject": "Відхилити",
"file.download": "Завантажити",
"file.notReady": "З'єднання ще не готове",
"file.tooLarge": "Файл завеликий",
"file.typeNotAllowed": "Тип файлу не дозволено",
"file.maxConcurrent": "Досягнуто межу одночасних передавань",
"file.gone": "Цей файл більше не доступний для завантаження.",
"call.incoming": "Вхідний дзвінок",
"call.incomingVideo": "Вхідний відеодзвінок",
"call.encrypted": "Зашифрований дзвінок",
"call.encryptedShort": "Зашифровано",
"call.peer": "Захищений співрозмовник",
"call.connecting": "З'єднання…",
"call.ringing": "Дзвінок…",
"call.accept": "Прийняти",
"call.decline": "Відхилити",
"call.end": "Завершити дзвінок",
"call.camera": "Камера",
"call.cameraOff": "Камеру вимкнено",
"call.peerCameraOff": "Камеру співрозмовника вимкнено",
"call.flipCamera": "Перемкнути камеру",
"call.addVideo": "Додати відео",
"call.video": "Відео",
"call.muted": "Без звуку",
"call.expand": "Розгорнути",
"call.minimize": "Згорнути",
"call.quality": "Якість з'єднання",
"call.qualityExcellent": "Відмінна",
"call.videoPrefix": "Відео · ",
"call.voicePrefix": "Голос · ",
"group.new": "Нова група",
"group.create": "Створити групу",
"group.join": "Приєднатися до групи",
"group.name": "Назва групи",
"group.nameTooLong": "Назва групи задовга.",
"group.capacity": "До {max} осіб, напряму між пристроями. Усі звірять один код безпеки, перш ніж група відкриється.",
"group.invite": "Запросити",
"group.inviteMore": "Запросити ще учасників",
"group.invitePeople": "Запросити {count} осіб",
"group.invitation": "Запрошення до групи",
"group.addMembers": "Додати учасників",
"group.roomFor": "Є місце ще для {remaining}. Після приєднання всі звірять новий код групи.",
"group.membersCount": "{count} учасників",
"group.member": "Учасник",
"group.members": "Учасники",
"group.remove": "Вилучити {name}",
"group.message": "Написати в «{name}»",
"group.leave": "Вийти",
"group.leaveThis": "Вийти з цієї групи",
"group.cancel": "Скасувати групу",
"group.close": "Закрити",
"group.cancelBtn": "Скасувати",
"group.decline": "Відхилити",
"group.working": "Виконується…",
"group.sasTitle": "Код безпеки групи",
"group.sasEveryone": "Цей код бачать усі",
"group.sasCompare": "Звірте код групи з кожним учасником, щоб відкрити групу.",
"group.sasReadAloud": "Прочитайте ці цифри вголос для ",
"group.sasWarning": "Якщо бодай один учасник читає інший код, між вами хтось є. Скасуйте групу - не підтверджуйте.",
"group.confirmFirst": "Спершу підтвердіть код групи",
"group.codeSuffix": " · код {code}",
"group.exchangingNonces": "Обмін одноразовими значеннями…",
"group.waitingCommit": "Очікування зобов'язань від усіх учасників…",
"group.waitingJoin": "Очікування приєднання інших учасників…",
"group.emptyChat": "Тут поки нічого. Повідомлення підписані відправником і йдуть власним зашифрованим каналом кожного учасника.",
"group.noVerified": "Ще немає перевірених чатів. Спершу відкрийте особистий чат і звірте його код безпеки - група будується з уже перевірених з'єднань.",
"group.noMoreToAdd": "Інших перевірених чатів немає. Відкрийте особистий чат і спершу звірте його код безпеки.",
"group.directLink": "Пряме з'єднання між пристроями",
"group.noDirectLink": "Прямого з'єднання ще немає - повідомлення передає інший учасник, поки воно встановлюється",
"group.relayNote": "З деякими учасниками прямого з'єднання ще немає. Їхні повідомлення йдуть через іншого учасника, який бачить, що ви спілкуєтесь, але не може ані прочитати, ані змінити сказане. Група продовжує з'єднувати їх напряму.",
"group.relayOnlyOff": "Режим лише через relay вимкнено, тож кожен учасник з'єднується з вами напряму й дізнається вашу IP-адресу - зокрема ті, кого запросив хтось інший. Увімкніть його в мережевих налаштуваннях, якщо це важливо.",
"group.memberOffline": "{name} офлайн і не отримає повідомлень. Учасництво зберігається - вилучення переганяє ключі групи.",
"group.joinNote": "Інші учасники дізнаються, що ви в цій групі. Історії повідомлень немає - група починається порожньою.",
"group.inviteSentNote": "Група працює далі, доки вони не приймуть. Історії для них немає - вони побачать лише те, що надіслано відтепер.",
"group.errNotCreated": "Групу не створено",
"group.errNobodyAccepted": "Ніхто не прийняв запрошення вчасно.",
"group.errNothingSent": "Нічого не надіслано й нічого не перевірено. Закрийте це й спробуйте знову, коли всі під'єднаються.",
"group.errNotFormed": "Цю групу не вдалося сформувати.",
"group.errFull": "Ця група заповнена.",
"group.errInviteFailed": "Запрошення не вдалося надіслати - той чат не з'єднано.",
"group.errNoMemberList": "Власник групи так і не надіслав список учасників.",
"group.errUnsignedList": "Список учасників не підписано власником групи. Не повторюйте - скажіть їм.",
"group.errNotOwner": "Змінити склад учасників намагався не власник групи.",
"hdr.tagline": "Наскрізне шифрування",
"hdr.netSettings": "Додаткові мережеві налаштування",
"hdr.netSettingsTitle": "Додаткові мережеві налаштування (STUN/TURN)",
"hdr.disconnect": "Від'єднатися",
"status.connected": "З'єднано",
"status.connecting": "З'єднання…",
"status.notConnected": "Не з'єднано",
"status.reconnecting": "Перепідключення…",
"status.retrying": "Повтор спроби…",
"status.verifying": "Перевірка…",
"status.peerDisconnected": "Співрозмовник від'єднався",
"sec.replayProtection": "Захист від повторів",
"sec.messageIntegrity": "Цілісність повідомлень (HMAC)",
"sec.forwardSecrecy": "Досконала пряма секретність",
"sec.metadataProtection": "Захист метаданих",
"sec.trafficObfuscation": "Маскування трафіку",
"sec.realTests": "Справжні криптографічні перевірки",
"sec.simulatedData": "Змодельовані дані",
"sec.testPassed": "Перевірку пройдено",
"sec.testFailed": "Перевірка не пройдена або недоступна",
"sec.verificationDone": "Справжню криптографічну перевірку завершено",
"sec.verificationInProgress": "Триває перевірка безпеки…",
"sec.verificationWait": "Триває перевірка безпеки…\nЗачекайте, доки завершиться криптографічна перевірка в реальному часі.",
"sec.verificationUnavailable": "Перевірка безпеки недоступна",
"chat.placeholder": "Напишіть зашифроване повідомлення…",
"chat.send": "Надіслати повідомлення",
"chat.sendFiles": "Надіслати файли",
"chat.hideFiles": "Сховати файли",
"chat.recordVoice": "Записати голосове повідомлення",
"chat.sendVoice": "Надіслати голосове повідомлення",
"chat.discard": "Відхилити",
"chat.codeBlock": "Надіслати як блок коду (розширює поле)",
"chat.codeHint": "Фрагмент коду · форматування збережено · ⌘↵ щоб надіслати",
"chat.viewOnce": "Переглянути раз",
"chat.viewOnceTitle": "Переглянути раз - зникає, щойно співрозмовник прочитає",
"chat.viewOncePrefix": "Переглянути раз · ",
"chat.viewOnceTap": "Переглянути раз · торкніться, щоб показати",
"chat.viewedOnce": "Уже переглянуто",
"chat.disappearing": "Зникоме повідомлення - видаляється з обох боків",
"chat.disappearAfter": "Зникне через",
"chat.visibleFor": "Видно",
"chat.timerPrefix": "Таймер · ",
"chat.expired": "Це повідомлення втратило чинність",
"chat.deleteForEveryone": "Видалити в усіх",
"chat.sending": "Надсилання",
"chat.delivered": "Доставлено",
"chat.notSent": "Не надіслано",
"chat.notSentReason": "Не надіслано - захищений канал не готовий. Перепідключіться, щоб продовжити.",
"chat.encrypted": "Зашифровано",
"chat.decrypted": "Розшифровано",
"chat.encryptedOnDevice": "Зашифровано на вашому пристрої",
"chat.uploading": "Надсилання",
"chat.downloading": "Завантаження",
"chat.transferring": "Передавання…",
"chat.copied": "Скопійовано!",
"chat.collapse": "Згорнути",
"chat.closeMenu": "Закрити меню",
"chat.newChat": "Новий чат",
"chat.newGroup": "Нова група",
"chat.createGroup": "Створити групу",
"chat.groupChats": "Групові чати",
"chat.secureChat": "Захищений чат",
"chat.nameThis": "Назвіть цей чат",
"chat.rename": "Перейменувати чат (лише локально)",
"chat.renameHint": "Двічі клацніть, щоб перейменувати",
"chat.localLabel": "Локальна назва · зберігається лише на цьому пристрої",
"chat.setStatus": "Установіть свій статус",
"chat.yourStatusPrefix": "Ваш статус - ",
"chat.meshHint": "До 8 учасників · P2P-мережа",
"chat.offline": "Офлайн",
"chat.noNetwork": "Немає мережі · перепідключення",
"chat.startVoiceCall": "Почати зашифрований дзвінок",
"chat.startVideoCall": "Почати зашифрований відеодзвінок",
"chat.verifyForCalls": "Перевірте сеанс, щоб увімкнути дзвінки",
"chat.e2eeNote": "Кожне повідомлення шифрується наскрізно на вашому пристрої, перш ніж піде.",
"chat.peersOnly": "Надсилається наскрізно лише під'єднаним учасникам - ніколи не зберігається на сервері.",
"flow.invitationCreated": "Захищене запрошення створено",
"flow.invitationCreatedBang": "Захищене запрошення створено й зашифровано.",
"flow.responseCreated": "Захищену відповідь створено",
"flow.responseCreatedBang": "Захищену відповідь створено.",
"flow.sendInvitation": "Надішліть код запрошення співрозмовнику захищеним каналом (дзвінок, SMS тощо).",
"flow.sendResponse": "Надішліть код відповіді ініціатору захищеним каналом або дайте йому відсканувати QR-код нижче.",
"flow.sendEncryptedCode": "Надіслати зашифрований код",
"flow.sendTheResponse": "Надіслати відповідь",
"flow.pasteOrWrite": "Вставте або введіть код…",
"flow.processingInvitation": "Обробка захищеного запрошення…",
"flow.processingResponse": "Обробка захищеної відповіді…",
"flow.finalizing": "Завершення захищеного з'єднання…",
"flow.channelEstablished": "Захищений канал встановлено",
"flow.channelReady": "Захищений канал готовий",
"flow.restoring": "Відновлення з'єднання…",
"flow.invitationCaptured": "Запрошення зчитано.",
"err.needInvitation": "Потрібно вставити код запрошення від співрозмовника.",
"err.needResponse": "Потрібно вставити код відповіді від співрозмовника.",
"err.responseFormat": "Хибний формат відповіді - перевірте код",
"err.responseNoKey": "Хибний код відповіді - криптографічний ключ відсутній або пошкоджений. Перевірте код і спробуйте ще раз.",
"err.responseNoSignKey": "Хибний код відповіді - бракує ключа перевірки підпису. Перевірте код і спробуйте ще раз.",
"err.responseOutdated": "Дані відповіді застаріли - скористайтеся новим запрошенням",
"err.setupError": "Помилка встановлення з'єднання",
"err.notReady": "З'єднання ще не готове",
"err.securityBreach": "Виявлено порушення безпеки - з'єднання відхилено",
"err.securityValidation": "Перевірка безпеки не пройдена - можлива атака",
"err.retiredQr": "Цей QR-код використовує застарілий формат, яким не вдалося передати запрошення. Попросіть новий або скористайтеся копіюванням.",
"err.compressedQrNote": "Стиснений QR може опустити SDP задля стислості. Якщо з'єднання не вдається, скористайтеся копіюванням.",
"err.inviteNotConnected": "Запрошення не вдалося надіслати. Той чат зараз не з'єднано.",
"err.inviteNotConnectedRetry": "Запрошення не вдалося надіслати. Той чат зараз не з'єднано - відкрийте його знову й спробуйте ще раз.",
"err.nobodyAccepted": "Ніхто не прийняв запрошення. Група лишилася без змін.",
"err.noAudio": "Звук не записано - перевірте дозвіл на мікрофон і спробуйте ще раз.",
"err.voiceNeedsConnection": "Для голосового повідомлення потрібне активне захищене з'єднання. Перепідключіться й спробуйте ще раз.",
"err.voiceRestoring": "Відновлюємо з'єднання - спробуйте надіслати голосове повідомлення за мить.",
"err.fileTooLarge": "Файл завеликий",
"sas.safetyNumber": "Номер безпеки",
"sas.incorrect": "Хибний код. Звірте його зі співрозмовником і спробуйте ще раз.",
"sas.noMatch": "Коди не збігаються",
"sas.makeSure": "Переконайтеся, що коди збігаються точно.",
"sas.tooManyAttempts": "Забагато невдалих спроб. Сеанс скинуто задля безпеки.",
"sas.verificationFailed": "Перевірку не пройдено",
"sas.verified": "Перевірено · досконала пряма секретність",
"sas.runVerification": "Запустити перевірку безпеки",
"sec.panelTitle": "Деталі мережі та криптографії",
"sec.security": "Безпека",
"sec.transport": "Транспорт",
"sec.keyExchange": "Обмін ключами",
"sec.allEnabled": "Усі функції безпеки увімкнено типово",
"sec.realTimeNote": "Перевірка в реальному часі справжніми криптографічними функціями - без вигаданих даних.",
"sec.simulatedWarning": "Увага: з'єднання може бути не повністю встановлене - значення можуть бути змодельовані.",
"dl.title": "Завантажити SecureBit",
"dl.free": "Безкоштовно · відкритий код",
"dl.soon": "Застосунки для iOS та Android і розширення для Chrome, Firefox і Opera з'являться незабаром.",
"chatHdr.chat": "Чат",
"chatHdr.chats": "Чати",
"chatHdr.newChat": "+ Новий",
"chatHdr.secure": "Захищено",
"chatHdr.p2pSub": "P2P · наскрізне шифрування",
"chatHdr.save": "Зберегти",
"chatHdr.close": "Закрити",
"chatHdr.expand": "Розгорнути",
"chatHdr.you": "Ви",
"chatHdr.qrCode": "QR-код",
"chat.disconnected": "Роз'єднано",
"call.mute": "Вимкнути мікрофон",
"call.endShort": "Завершити",
"group.add": "Додати",
"group.send": "Надіслати",
"sec.pfsShort": "Досконала пряма секретність",
"sec.cipher": "Шифр",
"chat.close": "Закрити",
"file.needConnection": "Для передавання файлів потрібне відкрите з'єднання",
"presence.available": "Доступний",
"presence.away": "Відійшов",
"presence.busy": "Зайнятий",
"presence.offline": "Не в мережі",
"presence.invisible": "Невидимий",
"presence.availableDesc": "У мережі й на зв'язку",
"presence.awayDesc": "Неактивний · відійшов",
"presence.busyDesc": "Не турбувати",
"presence.invisibleDesc": "Виглядати офлайн для співрозмовників",
"presence.online": "У мережі",
"conn.p2p": "P2P · з'єднано",
"conn.verifying": "Перевірка…",
"conn.connecting": "З'єднання…",
"conn.reconnecting": "Перепідключення…",
"conn.peerDisconnected": "Співрозмовник від'єднався",
"conn.disconnected": "Роз'єднано",
"chat.defaultLabel": "Чат",
"groupPhase.forming": "Формування…",
"groupPhase.commitments": "Обмін зобов'язаннями…",
"groupPhase.revealing": "Розкриття…",
"groupPhase.compare": "Звірте код групи",
"groupPhase.ready": "Група готова",
"groupPhase.failed": "Групу не створено",
"call.qualityGood": "Добра",
"call.qualityFair": "Посередня",
"call.qualityWeak": "Слабка",
"msg.code": "Код",
"msg.timer": "Таймер",
"msg.voice": "Голос",
"msg.play": "Відтворити",
"msg.sent": "Надіслано",
"msg.read": "Прочитано",
"report.title": "Перевірка безпеки в реальному часі",
"report.active": "Активно",
"report.testsPassed": "Пройдено перевірок",
"report.verifiedAt": "Перевірено",
"report.source": "Джерело",
"secTest.verifyECDHKeyExchange": "Обмін ключами ECDH",
"secTest.verifyECDSASignatures": "Цифрові підписи ECDSA",
"secTest.verifyEncryption": "Шифрування AES-GCM",
"secTest.verifyMessageIntegrity": "Цілісність повідомлень",
"secTest.verifyPerfectForwardSecrecy": "Досконала пряма секретність",
"secTest.verifyPFS": "Досконала пряма секретність",
"secTest.verifyReplayProtection": "Захист від повторів",
"secTest.verifyDTLSFingerprint": "Відбиток DTLS",
"secTest.verifySASVerification": "Перевірка SAS",
"secTest.verifyMetadataProtection": "Захист метаданих",
"secTest.verifyTrafficObfuscation": "Маскування трафіку",
"secTest.verifyPacketPadding": "Доповнення пакетів",
"secTest.verifyNestedEncryption": "Вкладене шифрування",
"secTest.verifyNonExtractableKeys": "Ключі, які не можна витягти",
"secTest.verifyRateLimiting": "Обмеження частоти",
"secTest.verifyMutualAuth": "Взаємна автентифікація",
"secTest.verifyAuthProof": "Доказ автентифікації",
"secTest.verifyEnhancedValidation": "Посилена перевірка",
"secTest.verifyAdvancedFeatures": "Розширені можливості",
"secTest.verifySignature": "Перевірка підпису",
"secDetail.Security system initializing...": "Система безпеки запускається…",
"secDetail.Nested encryption active": "Вкладене шифрування активне",
"secDetail.Nested encryption failed": "Вкладене шифрування не вдалося",
"secDetail.Packet padding active": "Доповнення пакетів активне",
"secDetail.Packet padding failed": "Доповнення пакетів не вдалося",
"secDetail.Advanced features active": "Розширені можливості активні",
"secDetail.Advanced features failed": "Розширені можливості не працюють",
"secDetail.No encryption key available": "Ключ шифрування недоступний",
"secDetail.AES-GCM encryption/decryption working correctly": "Шифрування та розшифрування AES-GCM працюють правильно",
"secDetail.No ECDH key pair available": "Пара ключів ECDH недоступна",
"secDetail.Key derivation failed": "Обчислення ключа не вдалося",
"secDetail.No ECDSA key pair available": "Пара ключів ECDSA недоступна",
"secDetail.ECDSA digital signatures working correctly": "Цифрові підписи ECDSA працюють правильно",
"secDetail.MAC key not available or invalid": "Ключ MAC недоступний або хибний",
"secDetail.Rate limiter did not block a message over the limit": "Обмежувач не заблокував повідомлення понад ліміт",
"secDetail.Rate limiter is not available": "Обмежувач частоти недоступний",
"secDetail.Replay protection is working correctly": "Захист від повторів працює правильно",
"secDetail.Replay protection not enabled": "Захист від повторів не увімкнено",
"secDetail.SAS code not available": "Код SAS недоступний",
"secDetail.SAS verification code is valid and available": "Код перевірки SAS дійсний і доступний",
"secDetail.Traffic obfuscation is working correctly": "Маскування трафіку працює правильно",
"secDetail.Traffic obfuscation not enabled": "Маскування трафіку не увімкнено",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "Для цього сеансу немає ефемерної пари ключів ECDH, яку не можна витягти",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "Лише сеансова пряма секретність: ключі ефемерні для кожного сеансу, але Double Ratchet для цього з'єднання не активний (у співрозмовника старіша версія), тож скомпрометований сеансовий ключ відкриває всю розмову.",
"msg.pause": "Пауза",
"msg.failed": "Не вдалося",
"groupErr.timeout": "Учасник перестав відповідати, перш ніж код був готовий.",
"groupErr.keyMismatch": "Ключ учасника не збігся з особою, яку для нього заявили.",
"groupErr.revealMismatch": "Розкрите значення учасника не збіглося з його зобов'язанням.",
"groupErr.commitChanged": "Учасник змінив своє зобов'язання посеред процесу.",
"groupErr.missingKey": "У списку був учасник, чий ключ так і не надійшов.",
"groupErr.outsider": "Надійшов кадр від когось поза групою.",
"groupErr.limit": "Група обмежена вісьмома учасниками.",
"groupErr.tooLarge": "Повідомлення було завелике, щоб надіслати його групі.",
"fileType.text": "Звичайний текст",
"fileType.images": "Зображення",
"fileType.archives": "Архіви",
"fileType.voice": "Голосові повідомлення",
"fileType.unsupported": "Не підтримується",
"qrScan.title": "Сканувати QR-код",
"qrScan.auto": "Автоматично",
"qrScan.reset": "Скинути",
"qrScan.autoScroll": "Автопрокручування увімкнено",
"qrScan.starting": "Запуск камери…",
"qrScan.point": "Наведіть камеру на QR-код",
"qrScan.tapFocus": "Торкніться екрана, щоб сфокусувати",
"qrScan.focusing": "Фокусування…",
"iceErr.notArray": "Список серверів має бути масивом",
"iceErr.invalidJson": "Хибний JSON",
"iceErr.tooMany": "Забагато серверів (щонайбільше {max})",
"iceErr.invalidEntry": "{label}: хибний запис",
"iceErr.urlCount": "{label}: потрібно від 1 до {max} URL",
"iceErr.turnCreds": "{label}: TURN-сервери зазвичай потребують імені користувача та облікових даних",
"iceUrl.notString": "URL має бути рядком",
"iceUrl.empty": "URL порожній",
"iceUrl.tooLong": "URL задовгий",
"iceUrl.badChars": "URL містить неприпустимі символи",
"iceUrl.badScheme": "URL має починатися з stun:, stuns:, turn: або turns:",
"iceUrl.badQuery": "URL має хибний запит",
"iceUrl.noHost": "В URL бракує хоста",
"iceUrl.badHost": "URL має хибний хост або порт",
"iceUrl.badTransport": "Запит URL має бути transport=udp або transport=tcp",
"msg.off": "Вимкнено",
"file.consentUnavailable": "Немає змоги отримати згоду",
"secLevel.MAXIMUM": "МАКСИМУМ",
"secLevel.INITIALIZING": "ЗАПУСК",
"secLevel.ERROR": "ПОМИЛКА",
"secLevel.UNKNOWN": "НЕВІДОМО",
"status.error": "Помилка",
"offline.disconnect": "Від'єднатися",
"offline.learnMore": "Докладніше",
"pwa.installApp": "Встановити застосунок",
"chat.onWeb": "Ви у вебверсії",
"groupCall.startVoice": "Почати груповий голосовий дзвінок",
"groupCall.startVideo": "Почати груповий відеодзвінок",
"groupCall.join": "Приєднатися",
"groupCall.dismiss": "Не зараз",
"groupCall.leave": "Вийти з дзвінка",
"groupCall.you": "Ви",
"groupCall.connecting": "З'єднання…",
"groupCall.waitingLink": "Очікування прямого з'єднання…",
"groupCall.legFailed": "Не вдалося з'єднатися",
"groupCall.startedVoice": "{name} почав голосовий дзвінок",
"groupCall.startedVideo": "{name} почав відеодзвінок",
"groupCall.inCall": "{count} у дзвінку",
"groupCall.err.permission_denied": "Дзвінок не почався - доступ до мікрофона й камери заблоковано. Дозвольте його для цього сайту й спробуйте ще раз.",
"groupCall.err.device_not_found": "Дзвінок не почався - на цьому пристрої не знайдено мікрофона.",
"groupCall.err.device_busy": "Дзвінок не почався - мікрофон зайнятий іншим застосунком. Закрийте його й спробуйте ще раз.",
"groupCall.err.media_failed": "Дзвінок не почався - не вдалося відкрити мікрофон.",
"groupCall.err.call_in_progress": "У цій групі вже триває дзвінок. Приєднайтеся до нього, а не починайте новий.",
"groupCall.err.not_ready": "Спершу підтвердьте код групи.",
"groupCall.speaking": "{name} говорить",
"groupCall.pin": "Показати {name} великим",
"groupCall.unpin": "Повернутися до всіх",
"groupCall.showEveryone": "Усі",
"msg.after5s": "5 с після прочитання",
"msg.after15s": "15 с після прочитання",
"msg.after30s": "30 с після прочитання",
"msg.after1m": "1 хв після прочитання",
"msg.sec30": "30 секунд",
"msg.min5": "5 хвилин",
"msg.hour1": "1 година",
"desktop.shareDesc": "Надішліть код співрозмовнику. Він одноразовий і швидко втрачає чинність.",
"desktop.invitationCreated": "Захищене запрошення створено - надішліть його співрозмовнику.",
"desktop.joinDesc": "Вставте код запрошення співрозмовника, щоб створити захищену відповідь.",
"desktop.offerTag": "запрошення · копіювати текст",
"desktop.answerTag": "відповідь · копіювати текст",
"desktop.offerPlaceholder": "Тут з’явиться код запрошення…",
"desktop.answerPlaceholder": "Тут з’явиться код відповіді…",
"desktop.backToChats": "Назад до чатів",
"desktop.sendFeedback": "Надіслати відгук",
"desktop.callsNeedVerified": "Дзвінки потребують перевіреного захищеного каналу.",
"desktop.noOpenChannel": "Немає відкритого захищеного каналу.",
"desktop.chatCarriesCall": "Цей чат несе груповий дзвінок. Вийдіть із групового дзвінка, перш ніж телефонувати один на один.",
"desktop.err.permission_denied": "Дзвінок не вдалося почати - доступ до мікрофона й камери заблоковано. Дозвольте його в системних налаштуваннях і спробуйте ще раз.",
"desktop.language": "Мова",
"desktop.languageHint": "Застосовується одразу. Уже надіслані повідомлення лишаються тією мовою, якою їх написали.",
"desktop.compareCode": "Порівняйте код підтвердження зі співрозмовником і підтвердьте, якщо він збігається.",
"desktop.verifyBeforeFiles": "Завершіть перевірку, перш ніж надсилати файли.",
"desktop.verifyBeforeSending": "Завершіть перевірку, перш ніж надсилати повідомлення.",
"desktop.disconnectedByBackend": "З’єднання безпечно розірвано.",
"desktop.restoreFailed": "Не вдалося відновити з’єднання. Цей чат буде закрито.",
"desktop.channelNotReady": "Канал даних ще недоступний. Зачекайте, доки з’єднання встановиться.",
"desktop.enterCode": "Введіть код підтвердження.",
"desktop.noOffer": "Запрошення не знайдено. Спершу створіть його.",
"desktop.notInitiator": "Ви не створювали це з’єднання, тож застосовувати відповідь нічому.",
"desktop.decryptFailed": "Повідомлення не вдалося розшифрувати, його відкинуто.",
"desktop.badMessageFormat": "Надійшов пошкоджений кадр, його відкинуто.",
"desktop.notSentNotReady": "Повідомлення не надіслано: захищений канал не готовий. Зачекайте завершення перевірки або перепідключіться.",
"desktop.micDenied": "Доступ до мікрофона відхилено.",
"desktop.noChannelWait": "Немає відкритого захищеного каналу - зачекайте, доки з’єднання встановиться.",
"desktop.sasFailed": "Перевірку не пройдено. Можлива присутність посередника, тож з’єднання перервано.",
"desktop.sasOk": "Перевірку пройдено. Цей канал автентифіковано наскрізно.",
"desktop.iceForgotten": "Збережені сервери забуто. Використовуються публічні сервери ICE.",
"desktop.icePublic": "Використовуються публічні сервери ICE.",
"desktop.verificationInProgress": "Перевірка безпеки ще триває. Зачекайте на її завершення.",
"desktop.fileGone": "Цей файл більше недоступний для завантаження.",
"desktop.codeMismatch": "Коди підтвердження не збігаються. Роз’єднуємо задля безпеки.",
"desktop.noLocalCode": "Перевірка не вдалася: немає локально обчисленого коду для порівняння. Роз’єднуємо задля безпеки.",
"desktop.protocolViolation": "Співрозмовник заявив про підтвердження коду раніше, ніж ви його підтвердили. Роз’єднуємо задля безпеки.",
"desktop.verificationRejected": "Перевірку відхилено. З’єднання перервано задля безпеки.",
"secLevel.HIGH": "ВИСОКИЙ",
"secLevel.MEDIUM": "СЕРЕДНІЙ",
"secLevel.LOW": "НИЗЬКИЙ",
"desktop.rerun": "Перевірити знову",
"desktop.ice.customDesc": "До {max} серверів, по одній URL-адресі на рядок або JSON.",
"desktop.ice.persistDesc": "Зберігається локально на цьому пристрої. Лишіть вимкненим, щоб використати лише в цьому сеансі.",
"desktop.group.leaveNote": "Інші учасники дізнаються, що ви вийшли. Після цього на цьому пристрої не лишається нічого про цю групу - жоден сервер не тримає копії, з якої можна повернутися, тож знадобиться нове запрошення.",
"desktop.sec.ecdsaOk": "Підпис пакета ключів співрозмовника перевірено під час рукостискання (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "Рукостискання не завершено",
"desktop.sec.ecdhOk": "Ключі сеансу виведено з тимчасового обміну ECDH P-384 через HKDF-SHA-256",
"desktop.sec.ecdhNone": "Ключі сеансу не виведено",
"desktop.sec.encryptionOk": "Шифрування й розшифрування AES-GCM перевірено в ядрі",
"desktop.sec.encryptionNa": "Самоперевірку AES-GCM виконати не вдалося",
"desktop.sec.integrityOk": "Цілісність повідомлень перевірено (автентифікація AES-GCM)",
"desktop.sec.integrityNa": "Самоперевірку цілісності виконати не вдалося",
"desktop.sec.pfsOk": "Double Ratchet активний - кожне повідомлення має власний ключ",
"desktop.sec.pfsNa": "Не виміряно",
"desktop.sec.replayOk": "Ключі повідомлень ратчета знищуються після використання, тож перехоплений кадр не можна відтворити повторно",
"desktop.sec.replayNa": "Не виміряно",
"desktop.sec.dtlsPinned": "Відбиток DTLS співрозмовника закріплено: {fp}",
"desktop.sec.dtlsNone": "Відбитка DTLS віддаленої сторони немає",
"desktop.sec.sasBoth": "Обидві сторони підтвердили код безпеки поза каналом",
"desktop.sec.sasIncomplete": "Код безпеки підтвердили не обидві сторони",
"desktop.sec.metadataOk": "Виведено окремий ключ метаданих (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "Ключа метаданих немає",
"desktop.sec.coverOn": "Прикриваючий трафік активний: випадкові фальшиві кадри (32-128 Б кожні 15-30 с) у каналі з ратчетом",
"desktop.sec.coverOff": "Генератор прикриваючого трафіку не працює",
"desktop.sec.coverUnsupported": "Прикриваючий трафік потребує сеансу Double Ratchet (у співрозмовника старіша версія)",
"desktop.tagline": "Наскрізна свобода",
"desktop.callsNotHere": "Дзвінки в цій збірці поки недоступні. Повідомлення, файли та групові чати працюють як звичайно."
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["uk"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "زبان",
"language.suggest.text": "یہ صفحہ اردو میں بھی دستیاب ہے۔",
"language.suggest.cta": "اردو میں پڑھیں",
"language.suggest.dismiss": "بند کریں",
"community.title": "نجیت کے مستقبل میں شامل ہوں",
"community.description": "SecureBit اپنی برادری کی بدولت بڑھتا ہے۔ آپ کے خیالات اور آراء محفوظ رابطے کا مستقبل تشکیل دیتے ہیں - کھلے عام بنایا گیا، سرے سے سرے تک مکمل ASN.1 توثیق کے ساتھ۔",
"community.github": "GitHub مخزن",
"community.feedback": "رائے",
"unique.eyebrow": "ہمیں کیا ممتاز کرتا ہے",
"unique.heading": "SecureBit منفرد کیوں ہے",
"unique.s1.titleTop": "کثیر پرت",
"unique.s1.titleBottom": "خفیہ کاری کا مرکز",
"unique.s1.collapsed": "خفیہ کاری کا مرکز",
"unique.s1.desc": "ECDH P-384 کلید تبادلہ، AES-256-GCM ڈیٹا، ECDSA دستخط اور مکمل ASN.1 توثیق - سب ایک مضبوط سلسلے میں جڑے ہوئے۔",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "خالص ہم‌سطح",
"unique.s2.titleBottom": "WebRTC",
"unique.s2.collapsed": "خالص ہم‌سطح WebRTC",
"unique.s2.desc": "پیغام WebRTC کے ذریعے براہِ راست آلات کے درمیان سفر کرتے ہیں۔ کوئی ریلے آپ کا ڈیٹا نہیں رکھتا - سرور صرف دو فریقوں کو ایک دوسرے تک پہنچنے میں مدد دیتا ہے۔",
"unique.s2.tags": [
"DTLS 1.3",
"بغیر ریلے"
],
"unique.s3.titleTop": "مکمل فارورڈ",
"unique.s3.titleBottom": "سیکرسی",
"unique.s3.collapsed": "فارورڈ سیکرسی",
"unique.s3.desc": "سیشن کی کلیدیں مسلسل بدلتی ہیں اور استعمال کے بعد ضائع کر دی جاتی ہیں، اس لیے ایک بھی افشا شدہ کلید ماضی کی گفتگو نہیں کھول سکتی۔",
"unique.s3.tags": [
"عارضی کلیدیں",
"خودکار تبدیلی"
],
"unique.s4.titleTop": "ٹریفک کی",
"unique.s4.titleBottom": "دھندلاہٹ",
"unique.s4.collapsed": "ٹریفک کی دھندلاہٹ",
"unique.s4.desc": "پیکٹ کے حجم اور اوقات میں بھرتی اور بے ترتیبی ڈالی جاتی ہے، جس سے تار پر نظر رکھنے والے سے میٹا ڈیٹا کے نمونے چھپ جاتے ہیں۔",
"unique.s4.tags": [
"پیکٹ بھرتی",
"وقتی جھول"
],
"unique.s5.titleTop": "صفر",
"unique.s5.titleBottom": "ڈیٹا جمع کرنا",
"unique.s5.collapsed": "صفر ڈیٹا جمع کرنا",
"unique.s5.desc": "نہ اکاؤنٹ، نہ نوشتہ، نہ پیغام کا ذخیرہ۔ سرور پر ایسا کچھ نہیں جو افشا ہو، طلب کیا جائے یا بیچا جائے۔",
"unique.s5.tags": [
"بغیر اکاؤنٹ",
"بغیر نوشتہ"
],
"partners.eyebrow": "شراکت دار اور ماحول",
"partners.heading": "ہمارے شراکت داروں کا اعتماد",
"partners.aegis.desc": "سرمایہ کار شراکت دار جو اپنے پورے پورٹ فولیو میں خفیہ مالی رابطے محفوظ بناتا ہے۔",
"partners.aegis.role": "تزویراتی معاون",
"partners.furilabs.desc": "نجیت کو مقدم رکھنے والے لینکس فون جو SecureBit کو طے شدہ محفوظ چینل کے طور پر پیش کرتے ہیں۔",
"partners.furilabs.role": "تکنیکی شراکت دار",
"partners.inviteTitle": "شراکت دار بنیں",
"partners.inviteDesc": "نجیت کا ہارڈویئر یا ڈھانچہ بنا رہے ہیں؟ آئیے SecureBit کو یکجا کریں۔",
"partners.inviteCta": "گفتگو شروع کریں",
"roadmap.eyebrow": "ترقی کا لائحہ عمل",
"roadmap.heading": "SecureBit کا ارتقا",
"roadmap.subheading": "پہلے نمونے سے لے کر کوانٹم مزاحم، غیر مرکزی نیٹ ورک تک - ہر پرت پر مکمل ASN.1 توثیق کے ساتھ۔",
"roadmap.progress": "{total} میں سے {shipped} سنگِ میل مکمل",
"roadmap.upcoming": "{upcoming} راستے میں",
"roadmap.keyFeatures": "نمایاں خصوصیات",
"roadmap.status.released": "جاری ہوا",
"roadmap.status.current": "موجودہ",
"roadmap.status.dev": "زیرِ تعمیر",
"roadmap.status.planned": "منصوبہ بند",
"roadmap.status.research": "تحقیق",
"hero.headlineTop": "ایک سیدھی لکیر",
"hero.headlineBottom": "جسے صرف آپ دونوں پڑھ سکتے ہیں۔",
"hero.subheading": "کلیدیں آپ کے آلے پر بنتی ہیں اور ہم‌سطح تبادلہ ہوتا ہے۔ نہ اکاؤنٹ، نہ کوئی سرور جو آپ کے پیغام محفوظ کرے۔",
"hero.diagramAlt": "ایک فریق تک براہِ راست خفیہ لکیر، جبکہ دو مزید فریق جال میں شامل ہو رہے ہیں",
"intro.createTitle": "نیا چینل بنائیں",
"intro.createDesc": "آپ کا آلہ کلیدیں اور ایک بار کی دعوت بناتا ہے۔ کچھ بھی سرور کو نہیں چھوتا۔",
"intro.createCta": "کلیدیں اور دعوت بنائیں",
"intro.joinTitle": "چینل میں شامل ہوں",
"intro.scanTitle": "کیمرے سے QR پڑھیں",
"intro.scanSubtitle": "سب سے تیز - ساتھی کی سکرین کی طرف کریں",
"intro.orPasteCode": "یا کوڈ چسپاں کریں",
"intro.pastePlaceholder": "دعوتی کوڈ یہاں چسپاں کریں…",
"intro.connect": "جوڑیں",
"intro.connecting": "کارروائی جاری…",
"roadmap.r1.title": "ترقی کا آغاز",
"roadmap.r1.sub": "خیال، نمونہ اور ڈھانچے کی تیاری",
"roadmap.r1.date": "2025 کا آغاز",
"roadmap.r1.features": [
"تصور اور ضروریات کی تشکیل",
"انتخاب: WebRTC، P2P، خفیہ کاری",
"پیغام رسانی کے پہلے نمونے",
"مخزن کی تخلیق اور مسلسل انضمام",
"بنیادی خفیہ کاری کا ڈھانچہ",
"تجربہ اور خاکہ کی ڈیزائن"
],
"roadmap.r2.title": "الفا اجرا",
"roadmap.r2.sub": "پہلا عوامی الفا: بنیادی گفتگو اور کلید تبادلہ",
"roadmap.r2.date": "بہار 2025",
"roadmap.r2.features": [
"WebRTC پر بنیادی ہم‌سطح پیغام رسانی",
"سادہ سرے سے سرے خفیہ کاری (نمائشی خاکہ)",
"مستحکم اشارہ رسانی اور دوبارہ اتصال",
"جانچ کے لیے کم سے کم خاکہ",
"ابتدائی جانچ کاروں سے رائے جمع کرنا"
],
"roadmap.r3.title": "سلامتی کی مضبوطی",
"roadmap.r3.sub": "سلامتی کی تقویت اور مستحکم شاخ کا اجرا",
"roadmap.r3.date": "گرما 2025",
"roadmap.r3.features": [
"ECDH/ECDSA کا عملی نفاذ",
"مکمل فارورڈ سیکرسی اور کلید کی تبدیلی",
"توثیقی جانچ میں بہتری",
"فائل خفیہ کاری اور بڑے ڈیٹا کی منتقلی",
"بنیادی خفیہ عمل کا جائزہ"
],
"roadmap.r4.title": "وسعت اور استحکام",
"roadmap.r4.sub": "نیٹ ورک کی وسعت اور استحکام میں بہتری",
"roadmap.r4.date": "خزاں 2025",
"roadmap.r4.features": [
"P2P اتصال اور NAT گزر کی بہتری",
"دوبارہ اتصال کے طریقے اور پیغام قطاریں",
"موبائل پر بیٹری کی کم کھپت",
"کئی آلات کے درمیان ہم آہنگی",
"ڈویلپرز کے لیے نگرانی اور نوشتہ اوزار"
],
"roadmap.r5.title": "نجیت سب سے پہلے",
"roadmap.r5.sub": "نجیت پر توجہ: میٹا ڈیٹا کم سے کم",
"roadmap.r5.date": "سرما 2025",
"roadmap.r5.features": [
"میٹا ڈیٹا کا تحفظ اور شناخت میں کمی",
"پیازی راستہ بندی اور DHT کے تجربات",
"گمنام اتصال کے اختیارات",
"کھلے کوڈ جائزے کی تیاری",
"صارف کی تصدیق کے عمل میں بہتری"
],
"roadmap.r6.title": "بڑھی ہوئی سلامتی کا ایڈیشن",
"roadmap.r6.sub": "مکمل ASN.1 توثیق کے ساتھ 18 پرتوں کی فوجی درجے کی خفیہ کاری",
"roadmap.r6.date": "2025 کے اواخر",
"roadmap.r6.features": [
"ECDH + DTLS + SAS تہری سلامتی",
"ECDH P-384 مع AES-GCM 256 بٹ خفیہ کاری",
"‏DTLS نقشِ انگشت کی تصدیق",
"‏SAS (مختصر توثیقی سلسلہ) تصدیق",
"کلید تبدیلی کے ساتھ مکمل فارورڈ سیکرسی",
"درمیانی حملے سے بہتر تحفظ",
"مکمل ASN.1 DER توثیق",
"OID اور EC نقاط کی تصدیق",
"‏SPKI ساخت کی توثیق",
"ہم‌سطح WebRTC ڈھانچہ",
"میٹا ڈیٹا کا تحفظ",
"‏100% کھلا ماخذ کوڈ"
],
"roadmap.r7.title": "ڈیسک ٹاپ ایڈیشن",
"roadmap.r7.sub": "ونڈوز، میک او ایس اور لینکس کے لیے مقامی ایپلی کیشنز",
"roadmap.r7.date": "2026 کا آغاز",
"roadmap.r7.features": [
"ونڈوز ایپ (Tauri v2)",
"macOS ایپ (Tauri v2)",
"لینکس AppImage معاونت (Tauri v2)",
"فوری اطلاعات",
"خودکار دوبارہ اتصال",
"آلات کے درمیان ہم آہنگی",
"بہتر تجربہ اور خاکہ",
"‏100MB تک فائلوں کی معاونت"
],
"roadmap.r8.title": "محفوظ آواز اور کالیں",
"roadmap.r8.sub": "خفیہ صوتی پیغام، آڈیو کال اور ویڈیو کال",
"roadmap.r8.date": "2026 کا آغاز",
"roadmap.r8.features": [
"سرے سے سرے تک خفیہ صوتی پیغام",
"‏1:1 خفیہ آڈیو کال (WebRTC)",
"‏1:1 خفیہ ویڈیو کال (WebRTC)",
"براہِ راست میڈیا کے لیے مکمل فارورڈ سیکرسی",
"SRTP/DTLS سے محفوظ میڈیا بہاؤ",
"کال کے دوران SAS تصدیق",
"کال اطلاعات اور خودکار دوبارہ اتصال",
"کم تاخیر والا ہم‌سطح میڈیا"
],
"roadmap.r9.title": "گروہی رابطہ",
"roadmap.r9.sub": "نجیت برقرار رکھتے ہوئے گروہی گفتگو",
"roadmap.r9.date": "ابھی",
"roadmap.r9.features": [
"‏8 شرکاء تک ہم‌سطح گروہی گفتگو",
"دستخط شدہ ریلے متبادل کے ساتھ جال ترسیل",
"ایک گروہی حفاظتی کوڈ، جسے سب موازنہ کرتے ہیں",
"کوڈ کے اندازے کے خلاف عہد‌پھر‌افشا کی رسم",
"ہر گروہ کے لیے الگ شناختی کلیدیں، بنیادی طور پر عارضی",
"دور کی ترتیب کے ساتھ دستخط شدہ رکنیت",
"دستخط شدہ پیغام، تاکہ منقسم متن ثابت کیا جا سکے",
"نہ سرور، نہ مشترکہ گروہی کلید، نہ تاریخ"
],
"roadmap.r10.title": "موبائل ایڈیشن",
"roadmap.r10.sub": "‏iOS اور اینڈرائیڈ کے لیے مقامی ایپلی کیشنز",
"roadmap.r10.date": "دوسری سہ ماہی 2027",
"roadmap.r10.features": [
"iOS مقامی ایپ (Swift/SwiftUI)",
"اینڈرائیڈ مقامی ایپ (Kotlin/Jetpack Compose)",
"موبائل براؤزرز کے لیے PWA معاونت",
"فوری پش اطلاعات",
"بیٹری کی بہتری",
"موبائل کے لیے بہتر خاکہ",
"آف لائن پیغام قطار",
"حیاتیاتی توثیق"
],
"roadmap.r11.title": "کوانٹم مزاحم ایڈیشن",
"roadmap.r11.sub": "کوانٹم کمپیوٹرز سے تحفظ",
"roadmap.r11.date": "چوتھی سہ ماہی 2027",
"roadmap.r11.features": [
"مابعد کوانٹم خفیہ کاری CRYSTALS-Kyber",
"SPHINCS+ ڈیجیٹل دستخط",
"مخلوط خاکہ: کلاسیکی + مابعد کوانٹم",
"کوانٹم محفوظ کلید تبادلہ",
"تازہ کردہ ہیشنگ الگورتھم",
"موجودہ سیشنز کی منتقلی",
"‏v5.x کے ساتھ مطابقت",
"کوانٹم مزاحم پروٹوکول"
],
"roadmap.r12.title": "غیر مرکزی نیٹ ورک",
"roadmap.r12.sub": "مکمل غیر مرکزی نیٹ ورک",
"roadmap.r12.date": "2028",
"roadmap.r12.features": [
"نوڈ جال نیٹ ورک",
"ساتھی تلاش کے لیے DHT",
"اندرونی پیازی راستہ بندی",
"ٹوکن معیشت اور نوڈ ترغیبات",
"DAO کے ذریعے نظم",
"دوسرے نیٹ ورکس کے ساتھ ہم آہنگی",
"کثیر پلیٹ فارم مطابقت",
"خود مرمت کرنے والا نیٹ ورک"
],
"roadmap.r13.title": "AI نجیت معاون",
"roadmap.r13.sub": "نجیت اور سلامتی کے لیے مصنوعی ذہانت",
"roadmap.r13.date": "‏2028 اور اس کے بعد",
"roadmap.r13.features": [
"مقامی AI خطرے کا تجزیہ",
"درمیانی حملے کی خودکار شناخت",
"موافقت پذیر خفیہ کاری",
"ذاتی نوعیت کی حفاظتی تجاویز",
"صفر علم مشین لرننگ",
"نجی AI معاون",
"پیش گوئی کرنے والی سلامتی",
"حملوں سے خودمختار تحفظ"
],
"handshake.step1": "ECDH P-384 کلید جوڑا بنایا جا رہا ہے",
"handshake.step2": "تصدیقی کوڈ اخذ کیا جا رہا ہے",
"handshake.step3": "مکمل فارورڈ سیکرسی طے کی جا رہی ہے",
"handshake.securingTitle": "آپ کا چینل محفوظ کیا جا رہا ہے",
"handshake.answerTitle": "آپ کا جواب تیار کیا جا رہا ہے",
"handshake.securingDesc": "ایسی کلیدیں ڈھالی جا رہی ہیں جو چھیڑ چھاڑ برداشت کر سکیں۔",
"handshake.shareTitle": "اپنی دعوت بانٹیں",
"handshake.sendAnswerTitle": "اپنا جواب واپس بھیجیں",
"handshake.shareDesc": "‏QR دکھائیں یا کوڈ اپنے ساتھی کو بھیجیں۔ یہ ایک بار کا ہے اور جلد ختم ہو جاتا ہے۔",
"handshake.sendAnswerDesc": "یہ جواب چینل بنانے والے کو دیں تاکہ وہ مصافحہ مکمل کر سکے۔",
"handshake.establish": "اتصال قائم کریں",
"handshake.thenReceive": "پھر وہ جواب وصول کریں جو آپ کا ساتھی واپس بھیجتا ہے",
"handshake.pasteAnswerPlaceholder": "ساتھی کا جوابی کوڈ چسپاں کریں…",
"handshake.answerSentNote": "یہ جواب بنانے والے کو بھیجیں، پھر انتظار کریں - ان کے جڑتے ہی گفتگو کھل جائے گی۔",
"handshake.qrHint": "یہ اس وقت تک کھلا رکھیں جب تک ساتھی کوڈ نہ پکڑ لے۔",
"handshake.qrHintFrames": "مصافحہ {frames} فریموں میں بٹا ہے - یہ اس وقت تک کھلا رکھیں جب تک ساتھی سب نہ پکڑ لے۔",
"verify.title": "حفاظتی تصدیق",
"verify.desc": "یہ حفاظتی کوڈ کسی الگ ذریعے (آواز / بالمشافہ) سے اپنے ساتھی کے ساتھ ملائیں، پھر گفتگو کھولنے کے لیے لکھیں۔",
"verify.enterLabel": "تصدیق شدہ کوڈ درج کریں",
"verify.placeholder": "کوڈ یہاں لکھیں",
"verify.confirm": "کوڈ کی تصدیق",
"verify.confirmed": "تصدیق ہو گئی",
"verify.mismatch": "مطابقت نہیں",
"verify.yours": "آپ کی تصدیق",
"verify.peer": "ساتھی کی تصدیق",
"verify.pending": "زیرِ التوا",
"verify.waiting": "کوڈ کا انتظار…",
"verify.verified": "چینل تصدیق شدہ",
"verify.bothConfirmed": "دونوں فریقوں نے تصدیق کی۔ محفوظ گفتگو کھولی جا رہی ہے…",
"pwa.bannerTitle": "SecureBit.chat نصب کریں",
"pwa.bannerDesc": "بہتر سلامتی کے ساتھ مقامی ایپ کا تجربہ حاصل کریں",
"pwa.install": "نصب",
"pwa.dismiss": "بند کریں",
"pwa.close": "بند کریں",
"pwa.iosTitle": "iOS پر نصب کریں",
"pwa.iosStep1": "اشتراک کا بٹن دبائیں",
"pwa.iosStep1Hint": "عموماً سفاری کے نیچے",
"pwa.iosStep2": "«ہوم سکرین میں شامل کریں» تلاش کریں",
"pwa.iosStep2Hint": "اشتراک مینو میں نیچے جائیں",
"pwa.iosStep3": "«شامل کریں» دبائیں",
"pwa.iosStep3Hint": "SecureBit.chat نصب کرنے کی تصدیق کریں",
"pwa.genericTitle": "SecureBit نصب کریں",
"pwa.genericDesc": "ہر براؤزر اپنے انداز میں نصب کرتا ہے۔ وہ مراحل چنیں جو آپ کے براؤزر سے میل کھاتے ہوں۔",
"pwa.gotIt": "سمجھ گیا",
"pwa.installedTitle": "ایپ نصب ہو گئی!",
"pwa.installedIos": "‏iOS ایپ نصب ہو گئی! ہوم سکرین سے کھولیں۔",
"pwa.installedGeneric": "SecureBit.chat اب آپ کے آلے پر ہے",
"pwa.anytimeTitle": "کسی بھی وقت نصب کریں",
"pwa.anytimeDesc": "بہترین تجربے کے لیے آپ اب بھی SecureBit.chat اپنے براؤزر کے مینو سے نصب کر سکتے ہیں۔",
"pwa.ok": "ٹھیک ہے",
"step.open": "مرحلہ 1 · چینل کھولیں",
"step.exchange": "مرحلہ 2 · تبادلہ",
"step.verification": "مرحلہ 3 · تصدیق",
"action.create": "بنائیں",
"action.join": "شامل ہوں",
"action.back": "واپس",
"action.copy": "نقل",
"action.copied": "نقل ہو گیا",
"action.scan": "پڑھیں",
"action.downloadDesktop": "ڈیسک ٹاپ ایپ ڈاؤن لوڈ کریں",
"action.advancedSettings": "اعلیٰ ترتیبات",
"cred.offerTag": "پیشکش · یا متن نقل کریں",
"cred.answerTag": "جواب · یا متن نقل کریں",
"cred.reveal": "دکھانے کے لیے دبائیں - یہ کوڈ نجی رکھیں",
"qr.title": "QR کوڈ پڑھیں",
"qr.subtitle": "اپنا کیمرہ ان کے QR کی طرف کریں",
"qr.scanning": "پڑھا جا رہا ہے…",
"qr.hint": "تمام حصے پکڑے جانے تک ہاتھ ساکت رکھیں۔ کیمرے کی رسائی مقامی ہے - کچھ اپ لوڈ نہیں ہوتا۔",
"mesh.you": "آپ",
"mesh.peer": "ساتھی · سیشن 1",
"mesh.joined2": "mara شامل ہوئی · +2",
"mesh.joined3": "tobi شامل ہوا · +3",
"ice.title": "نیٹ ورک کی ترتیبات",
"ice.subtitle": "مقامی طور پر ترتیب دی جاتی ہیں - کبھی آپ کے ساتھی سے شریک نہیں کی جاتیں",
"ice.intro": "SecureBit طے شدہ طور پر عوامی STUN سرور استعمال کرتا ہے تاکہ ہم‌سطح رابطہ طے ہو سکے۔ اگر آپ خود میزبانی کرتے ہیں تو اسے اپنے STUN/TURN کی طرف موڑ دیں۔",
"ice.publicTitle": "عوامی سرور (طے شدہ)",
"ice.publicDesc": "بغیر ترتیب۔ زیادہ تر صارفین کے لیے موزوں۔",
"ice.customTitle": "میرے اپنے STUN/TURN سرور",
"ice.customDesc": "زیادہ سے زیادہ {max} سرور۔",
"ice.turnNote": "‏TURN ریلے دونوں فریقوں کا IP اور ٹریفک کا وقت دیکھتا ہے - مگر پیغام کا مواد کبھی نہیں، جو سرے سے سرے تک خفیہ رہتا ہے۔ ترجیح دیں ",
"ice.turnNoteTls": " (TLS)۔",
"ice.test": "سرور جانچیں",
"ice.testing": "جانچ جاری…",
"ice.relayTitle": "صرف ریلے موڈ",
"ice.relayBadge": "زیادہ سے زیادہ نجیت",
"ice.relayDesc": "تمام ٹریفک TURN سے گزارتا ہے تاکہ آپ کا IP کبھی ساتھی پر ظاہر نہ ہو۔ اس کے لیے TURN سرور درکار ہے۔",
"ice.relayWarning": "صرف ریلے موڈ چالو ہے مگر کوئی TURN سرور ترتیب نہیں دیا گیا۔ اتصال شروع نہیں ہو سکے گا۔",
"ice.persist": "اس آلے پر محفوظ کریں",
"ice.persistDesc": "اسی براؤزر میں خفیہ صورت میں محفوظ ہوتا ہے۔ صرف اس سیشن کے لیے استعمال کرنا ہو تو بند رہنے دیں۔",
"ice.forget": "محفوظ شدہ بھول جائیں",
"ice.cancel": "منسوخ",
"ice.apply": "لاگو کریں",
"ice.errUnavailable": "اس براؤزر میں WebRTC دستیاب نہیں",
"ice.errInvalid": "سرور کی ترتیب غلط ہے",
"update.title": "تازہ کاری دستیاب ہے",
"update.desc": "SecureBit کا نیا نسخہ ملا ہے۔",
"update.currentVersion": "موجودہ نسخہ",
"update.newVersion": "نیا نسخہ",
"update.now": "ابھی تازہ کریں",
"update.later": "بعد میں",
"update.unknown": "دستیاب نہیں",
"update.stepSaving": "ڈیٹا محفوظ کیا جا رہا ہے...",
"update.stepSwCaches": "Service Worker کے ذخیرے صاف کیے جا رہے ہیں...",
"update.stepSwUnregister": "Service Workers کا اندراج منسوخ کیا جا رہا ہے...",
"update.stepBrowserCache": "براؤزر کا ذخیرہ صاف کیا جا رہا ہے...",
"update.stepVersion": "نسخہ تازہ کیا جا رہا ہے...",
"update.stepReload": "ایپلی کیشن دوبارہ لوڈ ہو رہی ہے...",
"update.error": "تازہ کاری میں خرابی۔ براہِ کرم صفحہ خود تازہ کریں (Ctrl+F5 یا Cmd+Shift+R)",
"update.confirmSkip": "نیا نسخہ دستیاب ہے۔ سلامتی اور استحکام کے لیے تازہ کاری کی سفارش ہے۔ بغیر تازہ کاری جاری رکھیں؟",
"offline.backOnline": "دوبارہ آن لائن",
"offline.mode": "آف لائن موڈ",
"offline.dismiss": "بند کریں",
"offline.lostTitle": "اتصال ٹوٹ گیا",
"offline.lostDesc": "SecureBit اب آف لائن موڈ میں ہے۔ کچھ خصوصیات محدود ہیں، مگر آپ کا ڈیٹا محفوظ رہتا ہے۔",
"offline.point1": "آپ کا سیشن اور کلیدیں محفوظ ہیں",
"offline.point2": "کوئی ڈیٹا سرورز پر ذخیرہ نہیں ہوتا",
"offline.point3": "دوبارہ جڑنے پر پیغام اور فائلیں ہم آہنگ ہو جائیں گی",
"offline.continue": "آف لائن جاری رکھیں",
"offline.restoredTitle": "جب آپ دوبارہ جڑیں گے",
"offline.restoredDesc": "اتصال ٹوٹنے سے آپ کا کچھ نہیں جاتا۔ ‏SecureBit سب کچھ مقامی قطار میں رکھتا ہے اور آپ کے واپس آتے ہی خفیہ سیشن بحال کر دیتا ہے۔",
"offline.r1Title": "آپ کے پیغام پہنچ جاتے ہیں",
"offline.r1Desc": "آف لائن جو کچھ آپ نے لکھا وہ خودکار طور پر آپ کے رابطے کو بھیج دیا جاتا ہے۔",
"offline.r2Title": "فائلوں کی منتقلی مکمل ہوتی ہے",
"offline.r2Desc": "اپ لوڈ وہیں سے جاری ہوتے ہیں جہاں رکے تھے - دوبارہ بھیجنے کی ضرورت نہیں۔",
"offline.r3Title": "ان کے پیغام اور فائلیں آ جاتی ہیں",
"offline.r3Desc": "بندش کے دوران آپ کے رابطے نے جو بھیجا، وہ ترتیب سے آپ تک پہنچتا ہے۔",
"offline.r4Title": "کچھ ضائع نہیں ہوتا",
"offline.r4Desc": "دوبارہ جڑنے کے بعد کوئی خلا نہیں - گفتگو بالکل وہیں سے جاری رہتی ہے جہاں رکی تھی۔",
"offline.gotIt": "سمجھ گیا",
"qr.showTitle": "QR کوڈ دکھائیں",
"qr.showSubtitle": "پوری سکرین · ساتھی کو پڑھنے دیں",
"qr.showSubtitleFrames": "پوری سکرین · ساتھی کو تمام {frames} فریم پڑھنے دیں",
"notify.enabledBody": "اطلاعات چالو ہو گئیں! نئے پیغامات کی اطلاع ملے گی۔",
"notify.workingBody": "اطلاعات کام کر رہی ہیں! نئے پیغامات کی اطلاع ملے گی۔",
"pw.label": "پاس ورڈ درج کریں",
"pw.placeholder": "پاس ورڈ درج کریں...",
"pw.decrypt": "کھولیں",
"pw.cancel": "منسوخ",
"file.title": "فائل منتقلی",
"file.drop": "فائلیں یہاں کھینچ کر چھوڑیں",
"file.dropHint": "منتقلی سے پہلے سرے سے سرے تک خفیہ · 100 MB تک",
"file.browse": "آلہ دیکھیں",
"file.incoming": "آنے والی فائل کی درخواست",
"file.accept": "قبول",
"file.reject": "رد",
"file.download": "ڈاؤن لوڈ",
"file.notReady": "اتصال تیار نہیں",
"file.tooLarge": "فائل بہت بڑی ہے",
"file.typeNotAllowed": "اس قسم کی فائل کی اجازت نہیں",
"file.maxConcurrent": "ایک ساتھ زیادہ سے زیادہ منتقلیاں",
"file.gone": "یہ فائل اب ڈاؤن لوڈ کے لیے دستیاب نہیں۔",
"call.incoming": "آنے والی کال",
"call.incomingVideo": "آنے والی ویڈیو کال",
"call.encrypted": "خفیہ کال",
"call.encryptedShort": "خفیہ",
"call.peer": "محفوظ ساتھی",
"call.connecting": "جوڑا جا رہا ہے…",
"call.ringing": "گھنٹی بج رہی ہے…",
"call.accept": "قبول",
"call.decline": "رد",
"call.end": "کال ختم کریں",
"call.camera": "کیمرہ",
"call.cameraOff": "کیمرہ بند",
"call.peerCameraOff": "ساتھی کا کیمرہ بند ہے",
"call.flipCamera": "کیمرہ بدلیں",
"call.addVideo": "ویڈیو شامل کریں",
"call.video": "ویڈیو",
"call.muted": "خاموش",
"call.expand": "بڑا کریں",
"call.minimize": "چھوٹا کریں",
"call.quality": "اتصال کا معیار",
"call.qualityExcellent": "بہترین",
"call.videoPrefix": "ویڈیو · ",
"call.voicePrefix": "آواز · ",
"group.new": "نیا گروہ",
"group.create": "گروہ بنائیں",
"group.join": "گروہ میں شامل ہوں",
"group.name": "گروہ کا نام",
"group.nameTooLong": "گروہ کا نام بہت لمبا ہے۔",
"group.capacity": "{max} افراد تک، ہم‌سطح۔ گروہ کھلنے سے پہلے سب ایک حفاظتی کوڈ ملائیں گے۔",
"group.invite": "دعوت",
"group.inviteMore": "مزید ارکان بلائیں",
"group.invitePeople": "{count} افراد کو بلائیں",
"group.invitation": "گروہی دعوت",
"group.addMembers": "ارکان شامل کریں",
"group.roomFor": "{remaining} مزید کی گنجائش ہے۔ ان کے شامل ہوتے ہی سب نیا گروہی کوڈ ملائیں گے۔",
"group.membersCount": "{count} ارکان",
"group.member": "رکن",
"group.members": "ارکان",
"group.remove": "{name} کو ہٹائیں",
"group.message": "{name} کو پیغام",
"group.leave": "چھوڑیں",
"group.leaveThis": "یہ گروہ چھوڑ دیں",
"group.cancel": "گروہ منسوخ کریں",
"group.close": "بند کریں",
"group.cancelBtn": "منسوخ",
"group.decline": "رد",
"group.working": "کام جاری…",
"group.sasTitle": "گروہی حفاظتی کوڈ",
"group.sasEveryone": "یہ کوڈ سب کو نظر آتا ہے",
"group.sasCompare": "یہ گروہ کھولنے کے لیے گروہی کوڈ ہر رکن کے ساتھ ملائیں۔",
"group.sasReadAloud": "یہ ہندسے بلند آواز میں پڑھ کر سنائیں ",
"group.sasWarning": "اگر ایک رکن بھی مختلف کوڈ پڑھے تو کوئی آپ کے درمیان بیٹھا ہے۔ گروہ منسوخ کریں - تصدیق نہ کریں۔",
"group.confirmFirst": "پہلے گروہی کوڈ کی تصدیق کریں",
"group.codeSuffix": " · کوڈ {code}",
"group.exchangingNonces": "یک بار اقدار کا تبادلہ…",
"group.waitingCommit": "ہر رکن کے عہد کا انتظار…",
"group.waitingJoin": "باقی ارکان کے شامل ہونے کا انتظار…",
"group.emptyChat": "یہاں ابھی کچھ نہیں۔ پیغام ان کے بھیجنے والے کے دستخط سے آتے ہیں اور ہر رکن کے اپنے خفیہ رابطے سے سفر کرتے ہیں۔",
"group.noVerified": "ابھی کوئی تصدیق شدہ گفتگو نہیں۔ پہلے ایک دو طرفہ گفتگو کھولیں اور اس کا حفاظتی کوڈ ملائیں - گروہ انہی رابطوں سے بنتا ہے جنہیں آپ پہلے جانچ چکے ہوں۔",
"group.noMoreToAdd": "شامل کرنے کے لیے مزید تصدیق شدہ گفتگو نہیں۔ پہلے ایک دو طرفہ گفتگو کھولیں اور اس کا حفاظتی کوڈ ملائیں۔",
"group.directLink": "براہِ راست ہم‌سطح رابطہ",
"group.noDirectLink": "ابھی براہِ راست رابطہ نہیں - جب تک بنے، دوسرا رکن پیغام آگے پہنچاتا ہے",
"group.relayNote": "کچھ ارکان کا ابھی آپ سے براہِ راست رابطہ نہیں۔ ان کے پیغام کسی دوسرے رکن سے گزرتے ہیں، جو دیکھ سکتا ہے کہ آپ بات کر رہے ہیں مگر دستخط سے آگے پڑھ نہیں سکتا اور نہ آپ کی بات بدل سکتا ہے۔ گروہ انہیں براہِ راست جوڑنے کی کوشش جاری رکھتا ہے۔",
"group.relayOnlyOff": "صرف ریلے موڈ بند ہے، اس لیے ہر رکن آپ سے براہِ راست جڑتا ہے اور آپ کا IP جان لیتا ہے - ان ارکان سمیت جنہیں کسی اور نے بلایا۔ اگر یہاں یہ اہم ہے تو نیٹ ورک ترتیبات میں اسے چالو کریں۔",
"group.memberOffline": "{name} آف لائن ہیں اور پیغام وصول نہیں کریں گے۔ وہ اب بھی رکن ہیں - انہیں ہٹانے سے گروہ کی کلیدیں نئی بنتی ہیں۔",
"group.joinNote": "باقی ارکان کو اس گروہ میں آپ کی موجودگی کا علم ہو جائے گا۔ پچھلے پیغامات نہیں ہیں - گروہ خالی شروع ہوتا ہے۔",
"group.inviteSentNote": "ان کے قبول کرنے تک گروہ کام کرتا رہتا ہے۔ ان کے لیے پچھلی تاریخ نہیں - وہ صرف وہی دیکھیں گے جو اب سے بھیجا جائے۔",
"group.errNotCreated": "گروہ نہیں بنا",
"group.errNobodyAccepted": "کسی نے وقت پر دعوت قبول نہیں کی۔",
"group.errNothingSent": "نہ کچھ بھیجا گیا نہ کچھ تصدیق ہوا۔ اسے بند کریں اور سب کے جڑنے پر دوبارہ کوشش کریں۔",
"group.errNotFormed": "یہ گروہ نہیں بن سکا۔",
"group.errFull": "یہ گروہ بھر چکا ہے۔",
"group.errInviteFailed": "دعوت نہیں بھیجی جا سکی - وہ گفتگو جڑی ہوئی نہیں۔",
"group.errNoMemberList": "گروہ کے مالک نے ارکان کی فہرست کبھی نہیں بھیجی۔",
"group.errUnsignedList": "ارکان کی فہرست پر گروہ کے مالک کے دستخط نہیں تھے۔ دوبارہ کوشش نہ کریں - انہیں بتائیں۔",
"group.errNotOwner": "گروہ کے مالک کے علاوہ کسی نے ارکان بدلنے کی کوشش کی۔",
"hdr.tagline": "سرے سے سرے تک خفیہ",
"hdr.netSettings": "اعلیٰ نیٹ ورک ترتیبات",
"hdr.netSettingsTitle": "اعلیٰ نیٹ ورک ترتیبات (STUN/TURN)",
"hdr.disconnect": "منقطع کریں",
"status.connected": "جڑا ہوا",
"status.connecting": "جوڑا جا رہا ہے...",
"status.notConnected": "جڑا ہوا نہیں",
"status.reconnecting": "دوبارہ جوڑا جا رہا ہے...",
"status.retrying": "دوبارہ کوشش...",
"status.verifying": "تصدیق جاری...",
"status.peerDisconnected": "ساتھی منقطع ہو گیا",
"sec.replayProtection": "بازگشت سے تحفظ",
"sec.messageIntegrity": "پیغام کی سالمیت (HMAC)",
"sec.forwardSecrecy": "مکمل فارورڈ سیکرسی",
"sec.metadataProtection": "میٹا ڈیٹا کا تحفظ",
"sec.trafficObfuscation": "ٹریفک کی دھندلاہٹ",
"sec.realTests": "حقیقی خفیہ نگاری کے تجربات",
"sec.simulatedData": "مصنوعی ڈیٹا",
"sec.testPassed": "تجربہ کامیاب",
"sec.testFailed": "تجربہ ناکام یا دستیاب نہیں",
"sec.verificationDone": "حقیقی خفیہ نگاری کی تصدیق مکمل ہوئی",
"sec.verificationInProgress": "حفاظتی تصدیق جاری ہے...",
"sec.verificationWait": "حفاظتی تصدیق جاری ہے...\nبراہِ کرم فوری خفیہ نگاری کی تصدیق مکمل ہونے کا انتظار کریں۔",
"sec.verificationUnavailable": "حفاظتی تصدیق دستیاب نہیں",
"chat.placeholder": "خفیہ پیغام لکھیں…",
"chat.send": "پیغام بھیجیں",
"chat.sendFiles": "فائلیں بھیجیں",
"chat.hideFiles": "فائلیں چھپائیں",
"chat.recordVoice": "صوتی پیغام ریکارڈ کریں",
"chat.sendVoice": "صوتی پیغام بھیجیں",
"chat.discard": "ضائع کریں",
"chat.codeBlock": "کوڈ بلاک کے طور پر بھیجیں (خانہ بڑا ہو جاتا ہے)",
"chat.codeHint": "کوڈ کا ٹکڑا · ترتیب محفوظ · بھیجنے کے لیے ⌘↵",
"chat.viewOnce": "ایک بار دیکھیں",
"chat.viewOnceTitle": "ایک بار دیکھیں - ساتھی کے پڑھتے ہی غائب",
"chat.viewOncePrefix": "ایک بار دیکھیں · ",
"chat.viewOnceTap": "ایک بار دیکھیں · دکھانے کے لیے دبائیں",
"chat.viewedOnce": "ایک بار دیکھا گیا",
"chat.disappearing": "غائب ہونے والا پیغام - دونوں طرف سے حذف",
"chat.disappearAfter": "اس کے بعد غائب",
"chat.visibleFor": "اتنی دیر نظر آئے گا",
"chat.timerPrefix": "ٹائمر · ",
"chat.expired": "اس پیغام کی میعاد ختم ہو چکی ہے",
"chat.deleteForEveryone": "سب کے لیے حذف کریں",
"chat.sending": "بھیجا جا رہا ہے",
"chat.delivered": "پہنچ گیا",
"chat.notSent": "نہیں بھیجا گیا",
"chat.notSentReason": "نہیں بھیجا گیا - محفوظ چینل تیار نہیں۔ جاری رکھنے کے لیے دوبارہ جڑیں۔",
"chat.encrypted": "خفیہ",
"chat.decrypted": "کھولا گیا",
"chat.encryptedOnDevice": "آپ کے آلے پر خفیہ کیا گیا",
"chat.uploading": "اپ لوڈ جاری",
"chat.downloading": "ڈاؤن لوڈ جاری",
"chat.transferring": "منتقلی جاری…",
"chat.copied": "نقل ہو گیا!",
"chat.collapse": "سمیٹیں",
"chat.closeMenu": "مینو بند کریں",
"chat.newChat": "نئی گفتگو",
"chat.newGroup": "نیا گروہ",
"chat.createGroup": "گروہ بنائیں",
"chat.groupChats": "گروہی گفتگو",
"chat.secureChat": "محفوظ گفتگو",
"chat.nameThis": "اس گفتگو کو نام دیں",
"chat.rename": "گفتگو کا نام بدلیں (صرف مقامی)",
"chat.renameHint": "نام بدلنے کے لیے دو بار دبائیں",
"chat.localLabel": "مقامی عنوان · صرف اسی آلے پر محفوظ",
"chat.setStatus": "اپنی حالت مقرر کریں",
"chat.yourStatusPrefix": "آپ کی حالت - ",
"chat.meshHint": "‏8 ساتھیوں تک · ہم‌سطح جال",
"chat.offline": "آف لائن",
"chat.noNetwork": "نیٹ ورک نہیں · دوبارہ جڑا جا رہا ہے",
"chat.startVoiceCall": "خفیہ صوتی کال شروع کریں",
"chat.startVideoCall": "خفیہ ویڈیو کال شروع کریں",
"chat.verifyForCalls": "کالیں چالو کرنے کے لیے سیشن کی تصدیق کریں",
"chat.e2eeNote": "ہر پیغام آپ کے آلے سے نکلنے سے پہلے سرے سے سرے تک خفیہ کیا جاتا ہے۔",
"chat.peersOnly": "صرف جڑے ہوئے ساتھیوں کو سرے سے سرے تک بھیجا جاتا ہے - کبھی سرور پر ذخیرہ نہیں ہوتا۔",
"flow.invitationCreated": "محفوظ دعوت بن گئی",
"flow.invitationCreatedBang": "محفوظ دعوت بن کر خفیہ ہو گئی!",
"flow.responseCreated": "محفوظ جواب بن گیا",
"flow.responseCreatedBang": "محفوظ جواب بن گیا!",
"flow.sendInvitation": "دعوتی کوڈ اپنے مخاطب کو کسی محفوظ ذریعے (صوتی کال، ایس ایم ایس وغیرہ) سے بھیجیں۔",
"flow.sendResponse": "جوابی کوڈ آغاز کرنے والے کو محفوظ ذریعے سے بھیجیں یا انہیں نیچے دیا QR کوڈ پڑھنے دیں۔",
"flow.sendEncryptedCode": "خفیہ کوڈ بھیجیں",
"flow.sendTheResponse": "جواب بھیجیں",
"flow.pasteOrWrite": "کوڈ چسپاں کریں یا لکھیں…",
"flow.processingInvitation": "محفوظ دعوت پر کارروائی جاری...",
"flow.processingResponse": "محفوظ جواب پر کارروائی جاری...",
"flow.finalizing": "محفوظ اتصال کو حتمی شکل دی جا رہی ہے...",
"flow.channelEstablished": "محفوظ چینل قائم ہو گیا",
"flow.channelReady": "محفوظ چینل تیار ہے",
"flow.restoring": "اتصال بحال کیا جا رہا ہے…",
"flow.invitationCaptured": "دعوت پکڑ لی گئی۔",
"err.needInvitation": "آپ کو اپنے مخاطب سے ملا دعوتی کوڈ چسپاں کرنا ہوگا۔",
"err.needResponse": "آپ کو اپنے مخاطب سے ملا جوابی کوڈ چسپاں کرنا ہوگا۔",
"err.responseFormat": "جواب کی ساخت غلط ہے - کوڈ جانچیں",
"err.responseNoKey": "جوابی کوڈ غلط ہے - خفیہ نگاری کی کلید غائب یا خراب ہے۔ کوڈ جانچ کر دوبارہ کوشش کریں۔",
"err.responseNoSignKey": "جوابی کوڈ غلط ہے - دستخط کی تصدیق کی کلید غائب ہے۔ کوڈ جانچ کر دوبارہ کوشش کریں۔",
"err.responseOutdated": "جوابی ڈیٹا پرانا ہے - براہِ کرم نئی دعوت استعمال کریں",
"err.setupError": "اتصال قائم کرنے میں خرابی",
"err.notReady": "اتصال تیار نہیں",
"err.securityBreach": "حفاظتی خلاف ورزی کا پتا چلا - اتصال رد کر دیا گیا",
"err.securityValidation": "حفاظتی توثیق ناکام - ممکنہ حملے کا پتا چلا",
"err.retiredQr": "یہ QR کوڈ متروک ساخت استعمال کرتا ہے جو دعوت منتقل نہ کر سکی۔ ساتھی سے نیا بنانے کو کہیں، یا نقل و چسپاں استعمال کریں۔",
"err.compressedQrNote": "دبایا ہوا QR اختصار کے لیے SDP چھوڑ سکتا ہے۔ اتصال ناکام ہو تو نقل و چسپاں استعمال کریں۔",
"err.inviteNotConnected": "دعوت نہیں بھیجی جا سکی۔ وہ گفتگو اس وقت جڑی ہوئی نہیں۔",
"err.inviteNotConnectedRetry": "دعوت نہیں بھیجی جا سکی۔ وہ گفتگو اس وقت جڑی ہوئی نہیں - دوبارہ کھول کر کوشش کریں۔",
"err.nobodyAccepted": "کسی نے دعوت قبول نہیں کی۔ گروہ جوں کا توں ہے۔",
"err.noAudio": "کوئی آواز ریکارڈ نہیں ہوئی - مائیکروفون کی اجازت جانچ کر دوبارہ کوشش کریں۔",
"err.voiceNeedsConnection": "صوتی پیغام کے لیے فعال محفوظ اتصال درکار ہے۔ دوبارہ جڑ کر کوشش کریں۔",
"err.voiceRestoring": "اتصال بحال ہو رہا ہے - لمحہ بھر بعد صوتی پیغام دوبارہ بھیجیں۔",
"err.fileTooLarge": "فائل بہت بڑی ہے",
"sas.safetyNumber": "حفاظتی نمبر",
"sas.incorrect": "کوڈ غلط ہے۔ اسے ساتھی کے ساتھ جانچ کر دوبارہ کوشش کریں۔",
"sas.noMatch": "کوڈ آپس میں نہیں ملتے",
"sas.makeSure": "یقین کر لیں کہ کوڈ بالکل ایک جیسے ہیں۔",
"sas.tooManyAttempts": "بہت زیادہ غلط کوششیں۔ حفاظت کے لیے سیشن دوبارہ ترتیب دیا گیا۔",
"sas.verificationFailed": "تصدیق ناکام",
"sas.verified": "تصدیق شدہ · مکمل فارورڈ سیکرسی",
"sas.runVerification": "حفاظتی تصدیق چلائیں",
"sec.panelTitle": "نیٹ ورک اور خفیہ نگاری کی تفصیل",
"sec.security": "سلامتی",
"sec.transport": "ترسیل",
"sec.keyExchange": "کلید تبادلہ",
"sec.allEnabled": "تمام حفاظتی خصوصیات طے شدہ طور پر چالو ہیں",
"sec.realTimeNote": "حقیقی خفیہ نگاری کے افعال سے فوری تصدیق - کوئی جعلی ڈیٹا نہیں۔",
"sec.simulatedWarning": "انتباہ: ممکن ہے اتصال مکمل قائم نہ ہوا ہو - اقدار مصنوعی ہو سکتی ہیں۔",
"dl.title": "SecureBit ڈاؤن لوڈ کریں",
"dl.free": "مفت · کھلا ماخذ",
"dl.soon": "موبائل (iOS، اینڈرائیڈ) اور براؤزر اضافے (Chrome، Firefox، Opera) جلد آ رہے ہیں۔",
"chatHdr.chat": "گفتگو",
"chatHdr.chats": "گفتگوئیں",
"chatHdr.newChat": "+ نئی",
"chatHdr.secure": "محفوظ",
"chatHdr.p2pSub": "ہم‌سطح · سرے سے سرے تک خفیہ",
"chatHdr.save": "محفوظ کریں",
"chatHdr.close": "بند کریں",
"chatHdr.expand": "بڑا کریں",
"chatHdr.you": "آپ",
"chatHdr.qrCode": "QR کوڈ",
"chat.disconnected": "منقطع",
"call.mute": "خاموش",
"call.endShort": "ختم",
"group.add": "شامل کریں",
"group.send": "بھیجیں",
"sec.pfsShort": "مکمل فارورڈ سیکرسی",
"sec.cipher": "سائفر",
"chat.close": "بند کریں",
"file.needConnection": "فائل منتقلی کے لیے کھلا اتصال درکار ہے",
"presence.available": "دستیاب",
"presence.away": "دور",
"presence.busy": "مصروف",
"presence.offline": "آف لائن",
"presence.invisible": "پوشیدہ",
"presence.availableDesc": "آن لائن اور دستیاب",
"presence.awayDesc": "بے کار · تھوڑی دیر کے لیے گیا",
"presence.busyDesc": "زحمت نہ دیں",
"presence.invisibleDesc": "ساتھیوں کو آف لائن دکھائی دیں",
"presence.online": "آن لائن",
"conn.p2p": "ہم‌سطح · جڑا ہوا",
"conn.verifying": "تصدیق جاری…",
"conn.connecting": "جوڑا جا رہا ہے…",
"conn.reconnecting": "دوبارہ جوڑا جا رہا ہے…",
"conn.peerDisconnected": "ساتھی منقطع ہو گیا",
"conn.disconnected": "منقطع",
"chat.defaultLabel": "گفتگو",
"groupPhase.forming": "تشکیل جاری…",
"groupPhase.commitments": "عہدوں کا تبادلہ…",
"groupPhase.revealing": "افشا جاری…",
"groupPhase.compare": "گروہی کوڈ ملائیں",
"groupPhase.ready": "گروہ تیار",
"groupPhase.failed": "گروہ ناکام",
"call.qualityGood": "اچھا",
"call.qualityFair": "مناسب",
"call.qualityWeak": "کمزور",
"msg.code": "کوڈ",
"msg.timer": "ٹائمر",
"msg.voice": "آواز",
"msg.play": "چلائیں",
"msg.sent": "بھیجا گیا",
"msg.read": "پڑھا گیا",
"report.title": "فوری حفاظتی تصدیق",
"report.active": "فعال",
"report.testsPassed": "کامیاب تجربات",
"report.verifiedAt": "تصدیق کا وقت",
"report.source": "ماخذ",
"secTest.verifyECDHKeyExchange": "ECDH کلید تبادلہ",
"secTest.verifyECDSASignatures": "‏ECDSA ڈیجیٹل دستخط",
"secTest.verifyEncryption": "AES-GCM خفیہ کاری",
"secTest.verifyMessageIntegrity": "پیغام کی سالمیت",
"secTest.verifyPerfectForwardSecrecy": "مکمل فارورڈ سیکرسی",
"secTest.verifyPFS": "مکمل فارورڈ سیکرسی",
"secTest.verifyReplayProtection": "بازگشت سے تحفظ",
"secTest.verifyDTLSFingerprint": "DTLS نقشِ انگشت",
"secTest.verifySASVerification": "SAS تصدیق",
"secTest.verifyMetadataProtection": "میٹا ڈیٹا کا تحفظ",
"secTest.verifyTrafficObfuscation": "ٹریفک کی دھندلاہٹ",
"secTest.verifyPacketPadding": "پیکٹ بھرتی",
"secTest.verifyNestedEncryption": "متداخل خفیہ کاری",
"secTest.verifyNonExtractableKeys": "ناقابلِ استخراج کلیدیں",
"secTest.verifyRateLimiting": "شرح کی حد بندی",
"secTest.verifyMutualAuth": "باہمی توثیق",
"secTest.verifyAuthProof": "توثیق کا ثبوت",
"secTest.verifyEnhancedValidation": "بہتر توثیق",
"secTest.verifyAdvancedFeatures": "اعلیٰ خصوصیات",
"secTest.verifySignature": "دستخط کی جانچ",
"secDetail.Security system initializing...": "حفاظتی نظام شروع ہو رہا ہے...",
"secDetail.Nested encryption active": "متداخل خفیہ کاری فعال",
"secDetail.Nested encryption failed": "متداخل خفیہ کاری ناکام",
"secDetail.Packet padding active": "پیکٹ بھرتی فعال",
"secDetail.Packet padding failed": "پیکٹ بھرتی ناکام",
"secDetail.Advanced features active": "اعلیٰ خصوصیات فعال",
"secDetail.Advanced features failed": "اعلیٰ خصوصیات ناکام",
"secDetail.No encryption key available": "کوئی خفیہ کاری کی کلید دستیاب نہیں",
"secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM خفیہ کاری اور کشائی درست کام کر رہی ہے",
"secDetail.No ECDH key pair available": "کوئی ECDH کلید جوڑا دستیاب نہیں",
"secDetail.Key derivation failed": "کلید کا اخذ ناکام",
"secDetail.No ECDSA key pair available": "کوئی ECDSA کلید جوڑا دستیاب نہیں",
"secDetail.ECDSA digital signatures working correctly": "‏ECDSA ڈیجیٹل دستخط درست کام کر رہے ہیں",
"secDetail.MAC key not available or invalid": "‏MAC کلید دستیاب نہیں یا غلط ہے",
"secDetail.Rate limiter did not block a message over the limit": "شرح محدود کرنے والے نے حد سے زیادہ پیغام نہیں روکا",
"secDetail.Rate limiter is not available": "شرح محدود کرنے والا دستیاب نہیں",
"secDetail.Replay protection is working correctly": "بازگشت سے تحفظ درست کام کر رہا ہے",
"secDetail.Replay protection not enabled": "بازگشت سے تحفظ چالو نہیں",
"secDetail.SAS code not available": "‏SAS کوڈ دستیاب نہیں",
"secDetail.SAS verification code is valid and available": "‏SAS تصدیقی کوڈ درست اور دستیاب ہے",
"secDetail.Traffic obfuscation is working correctly": "ٹریفک کی دھندلاہٹ درست کام کر رہی ہے",
"secDetail.Traffic obfuscation not enabled": "ٹریفک کی دھندلاہٹ چالو نہیں",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "اس سیشن کے لیے کوئی ناقابلِ استخراج عارضی ECDH کلید جوڑا نہیں",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "صرف سیشن کی سطح پر فارورڈ سیکرسی: کلیدیں ہر سیشن کے لیے عارضی ہیں، مگر اس اتصال میں Double Ratchet فعال نہیں (ساتھی پرانے نسخے پر ہے)، اس لیے ایک افشا شدہ سیشن کلید پوری گفتگو کھول دیتی ہے",
"msg.pause": "توقف",
"msg.failed": "ناکام",
"groupErr.timeout": "کوڈ تیار ہونے سے پہلے ایک رکن نے جواب دینا بند کر دیا۔",
"groupErr.keyMismatch": "ایک رکن کی کلید اس کے دعوے کردہ شناخت سے نہیں ملی۔",
"groupErr.revealMismatch": "ایک رکن کی افشا کردہ قدر اس کے عہد سے نہیں ملی۔",
"groupErr.commitChanged": "ایک رکن نے درمیان میں اپنا عہد بدل دیا۔",
"groupErr.missingKey": "ایک ایسا رکن فہرست میں تھا جس کی کلید کبھی نہیں پہنچی۔",
"groupErr.outsider": "گروہ سے باہر کسی کی طرف سے فریم آیا۔",
"groupErr.limit": "گروہ آٹھ ارکان تک محدود ہے۔",
"groupErr.tooLarge": "پیغام گروہ کو بھیجنے کے لیے بہت بڑا تھا۔",
"fileType.text": "سادہ متن",
"fileType.images": "تصاویر",
"fileType.archives": "محفوظہ جات",
"fileType.voice": "صوتی پیغامات",
"fileType.unsupported": "غیر معاون",
"qrScan.title": "QR کوڈ پڑھیں",
"qrScan.auto": "خودکار موڈ",
"qrScan.reset": "دوبارہ ترتیب",
"qrScan.autoScroll": "خودکار سکرول چالو ہے",
"qrScan.starting": "کیمرہ شروع ہو رہا ہے...",
"qrScan.point": "کیمرہ QR کوڈ کی طرف کریں",
"qrScan.tapFocus": "توجہ مرکوز کرنے کے لیے سکرین دبائیں",
"qrScan.focusing": "توجہ مرکوز کی جا رہی ہے...",
"iceErr.notArray": "سرور کی فہرست ایک صف ہونی چاہیے",
"iceErr.invalidJson": "غلط JSON",
"iceErr.tooMany": "بہت زیادہ سرور (زیادہ سے زیادہ {max})",
"iceErr.invalidEntry": "{label}: غلط اندراج",
"iceErr.urlCount": "{label}: 1 سے {max} تک پتے درکار ہیں",
"iceErr.turnCreds": "{label}: TURN سرورز کو عموماً صارف نام اور سند درکار ہوتی ہے",
"iceUrl.notString": "پتہ ایک سلسلہ ہونا چاہیے",
"iceUrl.empty": "پتہ خالی ہے",
"iceUrl.tooLong": "پتہ بہت لمبا ہے",
"iceUrl.badChars": "پتے میں غلط حروف ہیں",
"iceUrl.badScheme": "پتہ stun:‏، stuns:‏، turn: یا turns: سے شروع ہونا چاہیے",
"iceUrl.badQuery": "پتے کی استفسار غلط ہے",
"iceUrl.noHost": "پتے میں میزبان نہیں",
"iceUrl.badHost": "پتے کا میزبان یا پورٹ غلط ہے",
"iceUrl.badTransport": "پتے کی استفسار transport=udp یا transport=tcp ہونی چاہیے",
"msg.off": "بند",
"file.consentUnavailable": "صارف کی رضامندی دستیاب نہیں",
"secLevel.MAXIMUM": "زیادہ سے زیادہ",
"secLevel.INITIALIZING": "شروع ہو رہا ہے",
"secLevel.ERROR": "خرابی",
"secLevel.UNKNOWN": "نامعلوم",
"status.error": "خرابی",
"offline.disconnect": "منقطع کریں",
"offline.learnMore": "مزید جانیں",
"pwa.installApp": "ایپ نصب کریں",
"chat.onWeb": "آپ ویب پر ہیں",
"groupCall.startVoice": "گروپ وائس کال شروع کریں",
"groupCall.startVideo": "گروپ ویڈیو کال شروع کریں",
"groupCall.join": "شامل ہوں",
"groupCall.dismiss": "ابھی نہیں",
"groupCall.leave": "کال چھوڑیں",
"groupCall.you": "آپ",
"groupCall.connecting": "منسلک ہو رہا ہے…",
"groupCall.waitingLink": "براہِ راست رابطے کا انتظار…",
"groupCall.legFailed": "منسلک نہیں ہو سکا",
"groupCall.startedVoice": "{name} نے وائس کال شروع کی",
"groupCall.startedVideo": "{name} نے ویڈیو کال شروع کی",
"groupCall.inCall": "کال میں {count}",
"groupCall.err.permission_denied": "کال شروع نہیں ہو سکی - مائیکروفون اور کیمرے تک رسائی بند ہے۔ اس سائٹ کے لیے اجازت دیں اور دوبارہ کوشش کریں۔",
"groupCall.err.device_not_found": "کال شروع نہیں ہو سکی - اس ڈیوائس پر کوئی مائیکروفون نہیں ملا۔",
"groupCall.err.device_busy": "کال شروع نہیں ہو سکی - آپ کا مائیکروفون کسی اور ایپ کے زیرِ استعمال ہے۔ اسے بند کر کے دوبارہ کوشش کریں۔",
"groupCall.err.media_failed": "کال شروع نہیں ہو سکی - مائیکروفون نہیں کھل سکا۔",
"groupCall.err.call_in_progress": "اس گروپ میں پہلے ہی ایک کال جاری ہے۔ نئی شروع کرنے کے بجائے اس میں شامل ہوں۔",
"groupCall.err.not_ready": "کال سے پہلے گروپ کوڈ کی تصدیق کریں۔",
"groupCall.speaking": "{name} بول رہے ہیں",
"groupCall.pin": "{name} کو بڑا دکھائیں",
"groupCall.unpin": "سب پر واپس جائیں",
"groupCall.showEveryone": "سب",
"msg.after5s": "پڑھنے کے 5 سیکنڈ بعد",
"msg.after15s": "پڑھنے کے 15 سیکنڈ بعد",
"msg.after30s": "پڑھنے کے 30 سیکنڈ بعد",
"msg.after1m": "پڑھنے کے 1 منٹ بعد",
"msg.sec30": "30 سیکنڈ",
"msg.min5": "5 منٹ",
"msg.hour1": "1 گھنٹہ",
"desktop.shareDesc": "کوڈ اپنے ساتھی کو بھیجیں۔ یہ ایک بار کا ہے اور جلد ختم ہو جاتا ہے۔",
"desktop.invitationCreated": "محفوظ دعوت بن گئی - اسے اپنے ساتھی کو بھیجیں۔",
"desktop.joinDesc": "اپنا محفوظ جواب بنانے کے لیے ساتھی کا دعوتی کوڈ چسپاں کریں۔",
"desktop.offerTag": "دعوت · متن کاپی کریں",
"desktop.answerTag": "جواب · متن کاپی کریں",
"desktop.offerPlaceholder": "دعوتی کوڈ یہاں ظاہر ہوگا…",
"desktop.answerPlaceholder": "جوابی کوڈ یہاں ظاہر ہوگا…",
"desktop.backToChats": "چیٹس پر واپس",
"desktop.sendFeedback": "رائے بھیجیں",
"desktop.callsNeedVerified": "کالوں کے لیے تصدیق شدہ محفوظ چینل درکار ہے۔",
"desktop.noOpenChannel": "کوئی کھلا محفوظ چینل نہیں ہے۔",
"desktop.chatCarriesCall": "یہ چیٹ ایک گروپ کال اٹھائے ہوئے ہے۔ ون ٹو ون کال سے پہلے گروپ کال چھوڑیں۔",
"desktop.err.permission_denied": "کال شروع نہ ہو سکی - مائیکروفون اور کیمرے تک رسائی بند ہے۔ سسٹم سیٹنگز میں اجازت دیں اور دوبارہ کوشش کریں۔",
"desktop.language": "زبان",
"desktop.languageHint": "فوراً لاگو ہوتا ہے۔ پہلے بھیجے گئے پیغامات اپنے ہی الفاظ میں رہتے ہیں۔",
"desktop.compareCode": "تصدیقی کوڈ اپنے ساتھی سے ملائیں اور مطابقت پر تصدیق کریں۔",
"desktop.verifyBeforeFiles": "فائلیں بھیجنے سے پہلے تصدیق مکمل کریں۔",
"desktop.verifyBeforeSending": "پیغامات بھیجنے سے پہلے تصدیق مکمل کریں۔",
"desktop.disconnectedByBackend": "کنکشن محفوظ طریقے سے بند کر دیا گیا۔",
"desktop.restoreFailed": "کنکشن بحال نہ ہو سکا۔ یہ چیٹ بند کی جا رہی ہے۔",
"desktop.channelNotReady": "ڈیٹا چینل ابھی دستیاب نہیں۔ کنکشن قائم ہونے تک انتظار کریں۔",
"desktop.enterCode": "تصدیق کے لیے کوڈ درج کریں۔",
"desktop.noOffer": "کوئی دعوت نہیں ملی۔ پہلے ایک بنائیں۔",
"desktop.notInitiator": "یہ کنکشن آپ نے نہیں بنایا، اس لیے لاگو کرنے کے لیے کوئی جواب نہیں۔",
"desktop.decryptFailed": "ایک پیغام ڈی کرپٹ نہ ہو سکا اور رد کر دیا گیا۔",
"desktop.badMessageFormat": "خراب فریم آیا اور رد کر دیا گیا۔",
"desktop.notSentNotReady": "پیغام نہیں بھیجا گیا: محفوظ چینل تیار نہیں۔ تصدیق مکمل ہونے کا انتظار کریں یا دوبارہ جڑیں۔",
"desktop.micDenied": "مائیکروفون تک رسائی مسترد کر دی گئی۔",
"desktop.noChannelWait": "کوئی کھلا محفوظ چینل نہیں - کنکشن قائم ہونے تک انتظار کریں۔",
"desktop.sasFailed": "تصدیق ناکام۔ درمیان میں کوئی ہو سکتا ہے، اس لیے کنکشن روک دیا گیا۔",
"desktop.sasOk": "تصدیق کامیاب۔ یہ چینل سرے سے سرے تک مستند ہے۔",
"desktop.iceForgotten": "محفوظ سرور بھلا دیے گئے۔ عوامی ICE سرور استعمال ہو رہے ہیں۔",
"desktop.icePublic": "عوامی ICE سرور استعمال ہو رہے ہیں۔",
"desktop.verificationInProgress": "سیکیورٹی تصدیق ابھی جاری ہے۔ مکمل ہونے تک انتظار کریں۔",
"desktop.fileGone": "یہ فائل اب ڈاؤن لوڈ کے لیے دستیاب نہیں۔",
"desktop.codeMismatch": "تصدیقی کوڈ مطابقت نہیں رکھتے۔ حفاظت کے لیے کنکشن منقطع کیا جا رہا ہے۔",
"desktop.noLocalCode": "تصدیق ناکام: موازنے کے لیے مقامی کوڈ موجود نہیں۔ حفاظت کے لیے کنکشن منقطع کیا جا رہا ہے۔",
"desktop.protocolViolation": "ساتھی نے آپ کی تصدیق سے پہلے ہی کوڈ کی تصدیق کا دعویٰ کیا۔ حفاظت کے لیے کنکشن منقطع کیا جا رہا ہے۔",
"desktop.verificationRejected": "تصدیق مسترد۔ حفاظت کے لیے کنکشن روک دیا گیا۔",
"secLevel.HIGH": "بلند",
"secLevel.MEDIUM": "درمیانہ",
"secLevel.LOW": "کم",
"desktop.rerun": "دوبارہ جانچیں",
"desktop.ice.customDesc": "زیادہ سے زیادہ {max} سرور، فی سطر ایک URL یا JSON۔",
"desktop.ice.persistDesc": "اسی ڈیوائس پر مقامی طور پر محفوظ ہوتا ہے۔ صرف اسی سیشن کے لیے استعمال کرنا ہو تو بند رہنے دیں۔",
"desktop.group.leaveNote": "باقی اراکین کو بتا دیا جاتا ہے کہ آپ چلے گئے۔ اس کے بعد اس ڈیوائس پر اس گروپ کا کچھ باقی نہیں رہتا - کسی سرور کے پاس نقل نہیں کہ واپس آ سکیں، اس لیے نئی دعوت درکار ہوگی۔",
"desktop.sec.ecdsaOk": "ہینڈ شیک کے دوران ساتھی کے کلید پیکج کے دستخط کی تصدیق ہوئی (ECDSA P-384 / SHA-384)",
"desktop.sec.ecdsaNone": "کوئی مکمل ہینڈ شیک نہیں",
"desktop.sec.ecdhOk": "سیشن کلیدیں عارضی ECDH P-384 تبادلے سے HKDF-SHA-256 کے ذریعے اخذ ہوئیں",
"desktop.sec.ecdhNone": "کوئی سیشن کلید اخذ نہیں ہوئی",
"desktop.sec.encryptionOk": "کور میں AES-GCM انکرپشن اور ڈکرپشن کی تصدیق ہوئی",
"desktop.sec.encryptionNa": "AES-GCM خود جانچ نہ چل سکی",
"desktop.sec.integrityOk": "پیغام کی سالمیت کی تصدیق ہوئی (AES-GCM تصدیق)",
"desktop.sec.integrityNa": "سالمیت کی خود جانچ نہ چل سکی",
"desktop.sec.pfsOk": "Double Ratchet فعال ہے - ہر پیغام کی اپنی کلید ہے",
"desktop.sec.pfsNa": "ناپا نہیں گیا",
"desktop.sec.replayOk": "ریچٹ پیغام کلیدیں استعمال کے فوراً بعد ختم ہو جاتی ہیں، اس لیے پکڑا گیا فریم دوبارہ نہیں چلایا جا سکتا",
"desktop.sec.replayNa": "ناپا نہیں گیا",
"desktop.sec.dtlsPinned": "ساتھی کا DTLS فنگر پرنٹ پن کر دیا گیا: {fp}",
"desktop.sec.dtlsNone": "دور دراز DTLS فنگر پرنٹ دستیاب نہیں",
"desktop.sec.sasBoth": "دونوں فریقوں نے چینل سے باہر سیفٹی کوڈ کی تصدیق کی",
"desktop.sec.sasIncomplete": "سیفٹی کوڈ کی تصدیق دونوں فریقوں نے نہیں کی",
"desktop.sec.metadataOk": "مخصوص میٹا ڈیٹا کلید اخذ ہوئی (HKDF metadata-protection-v4)",
"desktop.sec.metadataNone": "کوئی میٹا ڈیٹا کلید نہیں",
"desktop.sec.coverOn": "کور ٹریفک فعال: ریچٹ چینل پر بے ترتیب جعلی فریم (ہر 15-30 سیکنڈ میں 32-128 B)",
"desktop.sec.coverOff": "کور ٹریفک جنریٹر نہیں چل رہا",
"desktop.sec.coverUnsupported": "کور ٹریفک کے لیے Double Ratchet سیشن درکار ہے (ساتھی پرانے ورژن پر ہے)",
"desktop.tagline": "سرے سے سرے تک آزادی",
"desktop.callsNotHere": "اس بلڈ میں کالیں ابھی دستیاب نہیں ہیں۔ پیغامات، فائلیں اور گروپ چیٹس معمول کے مطابق کام کرتی ہیں۔"
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["ur"] = DICTIONARY;
+856
View File
@@ -0,0 +1,856 @@
// Generated by scripts/build-i18n.js from locales/*.json — do not edit by hand.
// Add or change strings in locales/<code>.json, then run `npm run build:i18n`.
export const DICTIONARY = {
"language.label": "语言",
"language.suggest.text": "本页面也有简体中文版本。",
"language.suggest.cta": "阅读简体中文",
"language.suggest.dismiss": "关闭",
"community.title": "一起构筑隐私的未来",
"community.description": "SecureBit 因社区而成长。你的想法与反馈塑造着安全通讯的未来 —— 开放开发,全程完整的 ASN.1 校验。",
"community.github": "GitHub 仓库",
"community.feedback": "反馈",
"unique.eyebrow": "我们的不同之处",
"unique.heading": "SecureBit 为何与众不同",
"unique.s1.titleTop": "分层的",
"unique.s1.titleBottom": "加密内核",
"unique.s1.collapsed": "加密内核",
"unique.s1.desc": "ECDH P-384 密钥交换、AES-256-GCM 载荷、ECDSA 签名与完整的 ASN.1 校验,汇成一条加固的流水线。",
"unique.s1.tags": [
"ECDH P-384",
"AES-256-GCM",
"ECDSA",
"ASN.1"
],
"unique.s2.titleTop": "纯粹的 P2P",
"unique.s2.titleBottom": "基于 WebRTC",
"unique.s2.collapsed": "基于 WebRTC 的纯 P2P",
"unique.s2.desc": "消息通过 WebRTC 在设备之间直接传递。没有中继保存你的数据 —— 服务器只帮两端彼此找到对方。",
"unique.s2.tags": [
"DTLS 1.3",
"无中继"
],
"unique.s3.titleTop": "完美的",
"unique.s3.titleBottom": "前向保密",
"unique.s3.collapsed": "前向保密",
"unique.s3.desc": "会话密钥持续轮换,用后即弃,因此单个泄露的密钥永远打不开此前的对话。",
"unique.s3.tags": [
"临时密钥",
"自动轮换"
],
"unique.s4.titleTop": "流量",
"unique.s4.titleBottom": "混淆",
"unique.s4.collapsed": "流量混淆",
"unique.s4.desc": "数据包的大小与时间间隔会被填充并随机化,即使有人盯着线路,也看不出元数据的规律。",
"unique.s4.tags": [
"数据包填充",
"时间抖动"
],
"unique.s5.titleTop": "零数据",
"unique.s5.titleBottom": "收集",
"unique.s5.collapsed": "零数据收集",
"unique.s5.desc": "没有账号,没有日志,不保存消息。服务器上没有任何可以泄露、被调取或被出售的东西。",
"unique.s5.tags": [
"无需账号",
"没有日志"
],
"partners.eyebrow": "合作伙伴与生态",
"partners.heading": "合作伙伴信赖我们",
"partners.aegis.desc": "资本合作伙伴,为其投资组合中的机密金融通讯提供保障。",
"partners.aegis.role": "战略投资方",
"partners.furilabs.desc": "以隐私为先的 Linux 手机,内置 SecureBit 作为默认安全通道。",
"partners.furilabs.role": "技术合作伙伴",
"partners.inviteTitle": "成为合作伙伴",
"partners.inviteDesc": "你在做隐私相关的硬件或基础设施吗?我们一起集成 SecureBit。",
"partners.inviteCta": "开始洽谈",
"roadmap.eyebrow": "开发路线图",
"roadmap.heading": "SecureBit 的演进",
"roadmap.subheading": "从第一个原型走向抗量子的去中心化网络,每一层都有完整的 ASN.1 校验。",
"roadmap.progress": "已完成 {total} 个里程碑中的 {shipped} 个",
"roadmap.upcoming": "还有 {upcoming} 个",
"roadmap.keyFeatures": "核心功能",
"roadmap.status.released": "已发布",
"roadmap.status.current": "进行中",
"roadmap.status.dev": "开发中",
"roadmap.status.planned": "已规划",
"roadmap.status.research": "研究中",
"hero.headlineTop": "一条只有你们两人",
"hero.headlineBottom": "才能读懂的直连线路。",
"hero.subheading": "密钥在你的设备上生成,并在两端之间直接交换。无需账号,没有服务器保存你的消息。",
"hero.diagramAlt": "通向一位联系人的直接加密线路,随后又有两位加入",
"intro.createTitle": "创建新通道",
"intro.createDesc": "你的设备会生成密钥和一次性邀请。这些都不会经过任何服务器。",
"intro.createCta": "生成密钥与邀请",
"intro.joinTitle": "加入通道",
"intro.scanTitle": "用摄像头扫描二维码",
"intro.scanSubtitle": "最快的方式 —— 对准对方的屏幕",
"intro.orPasteCode": "或粘贴代码",
"intro.pastePlaceholder": "在此粘贴邀请码…",
"intro.connect": "连接",
"intro.connecting": "处理中…",
"roadmap.r1.title": "开发启动",
"roadmap.r1.sub": "构想、原型与基础设施搭建",
"roadmap.r1.date": "2025 年初",
"roadmap.r1.features": [
"确定概念与需求",
"选定技术栈:WebRTC、P2P、密码学",
"首批消息收发原型",
"建立仓库与持续集成",
"基础加密架构",
"UX/UI 设计"
],
"roadmap.r2.title": "Alpha 版本",
"roadmap.r2.sub": "首个公开 Alpha:基础聊天与密钥交换",
"roadmap.r2.date": "2025 年春",
"roadmap.r2.features": [
"基于 WebRTC 的基础 P2P 消息",
"简易端到端加密(演示方案)",
"稳定的信令与重连",
"用于测试的最简界面",
"收集早期测试者的反馈"
],
"roadmap.r3.title": "安全加固",
"roadmap.r3.sub": "强化安全并发布稳定分支",
"roadmap.r3.date": "2025 年夏",
"roadmap.r3.features": [
"ECDH/ECDSA 投入生产",
"前向保密与密钥轮换",
"改进的身份验证检查",
"文件加密与大载荷传输",
"基础密码流程审计"
],
"roadmap.r4.title": "扩展与稳定",
"roadmap.r4.sub": "网络扩展与稳定性改进",
"roadmap.r4.date": "2025 年秋",
"roadmap.r4.features": [
"优化 P2P 连接与 NAT 穿透",
"重连机制与消息队列",
"降低移动端耗电",
"多设备同步",
"面向开发者的监控与日志工具"
],
"roadmap.r5.title": "隐私优先版本",
"roadmap.r5.sub": "聚焦隐私:尽量减少元数据",
"roadmap.r5.date": "2025 年冬",
"roadmap.r5.features": [
"元数据保护与指纹削减",
"洋葱路由与 DHT 实验",
"匿名连接选项",
"为开源代码审计做准备",
"改进的用户校验流程"
],
"roadmap.r6.title": "Enhanced Security Edition",
"roadmap.r6.sub": "18 层军用级密码学,配合完整的 ASN.1 校验",
"roadmap.r6.date": "2025 年末",
"roadmap.r6.features": [
"ECDH + DTLS + SAS 三重防护",
"ECDH P-384 与 AES-GCM 256 位加密",
"DTLS 指纹校验",
"SAS(短认证字符串)校验",
"带密钥轮换的前向保密",
"强化的中间人攻击防护",
"完整的 ASN.1 DER 校验",
"OID 与 EC 点校验",
"SPKI 结构校验",
"P2P WebRTC 架构",
"元数据保护",
"100% 开源代码"
],
"roadmap.r7.title": "Desktop Edition",
"roadmap.r7.sub": "面向 Windows、macOS 与 Linux 的原生桌面应用",
"roadmap.r7.date": "2026 年初",
"roadmap.r7.features": [
"Windows 桌面应用(Tauri v2",
"macOS 桌面应用(Tauri v2",
"Linux AppImageTauri v2",
"实时通知",
"自动重连",
"跨设备同步",
"改进的界面",
"支持最大 100 MB 的文件"
],
"roadmap.r8.title": "安全语音与通话",
"roadmap.r8.sub": "加密语音消息、语音通话与视频通话",
"roadmap.r8.date": "2026 年初",
"roadmap.r8.features": [
"端到端加密的语音消息",
"一对一加密语音通话(WebRTC",
"一对一加密视频通话(WebRTC",
"实时媒体的前向保密",
"由 SRTP/DTLS 保护的媒体流",
"通话中的 SAS 校验",
"来电通知与自动重连",
"低延迟的 P2P 媒体"
],
"roadmap.r9.title": "群组通讯",
"roadmap.r9.sub": "在不牺牲隐私的前提下进行群聊",
"roadmap.r9.date": "当前",
"roadmap.r9.features": [
"最多 8 人的 P2P 群聊",
"网状投递,并以签名中继作为兜底",
"一个群组安全码,由所有人共同核对",
"先承诺后揭示的流程,抵御对安全码的暴力试探",
"群组专属身份密钥,设计上即为临时",
"带纪元排序的签名成员名单",
"消息带签名,因而分叉的记录可被证明",
"没有服务器,没有共享群密钥,没有历史记录"
],
"roadmap.r10.title": "Mobile Edition",
"roadmap.r10.sub": "面向 iOS 与 Android 的原生移动应用",
"roadmap.r10.date": "2027 年第二季度",
"roadmap.r10.features": [
"iOS 原生应用(Swift/SwiftUI",
"Android 原生应用(Kotlin/Jetpack Compose",
"移动浏览器的 PWA 支持",
"实时推送通知",
"电量优化",
"为移动端优化的界面",
"离线消息队列",
"生物识别验证"
],
"roadmap.r11.title": "抗量子版本",
"roadmap.r11.sub": "抵御量子计算机",
"roadmap.r11.date": "2027 年第四季度",
"roadmap.r11.features": [
"后量子密码学 CRYSTALS-Kyber",
"SPHINCS+ 数字签名",
"混合方案:经典与后量子并用",
"抗量子的密钥交换",
"更新的哈希算法",
"迁移现有会话",
"兼容 v5.x",
"抗量子协议"
],
"roadmap.r12.title": "去中心化网络",
"roadmap.r12.sub": "完全去中心化的网络",
"roadmap.r12.date": "2028 年",
"roadmap.r12.features": [
"节点网状网络",
"用于发现对端的 DHT",
"内置洋葱路由",
"代币经济与节点激励",
"通过 DAO 治理",
"与其他网络互通",
"跨平台兼容",
"自愈网络"
],
"roadmap.r13.title": "AI 隐私助手",
"roadmap.r13.sub": "用人工智能守护隐私与安全",
"roadmap.r13.date": "2028 年以后",
"roadmap.r13.features": [
"本地 AI 威胁分析",
"自动识别中间人攻击",
"自适应密码学",
"个性化安全建议",
"零知识机器学习",
"私有 AI 助手",
"预测性安全",
"自主的攻击防护"
],
"handshake.step1": "正在生成 ECDH P-384 密钥对",
"handshake.step2": "正在推导校验码",
"handshake.step3": "正在固定前向保密",
"handshake.securingTitle": "正在保护你的通道",
"handshake.answerTitle": "正在生成你的应答",
"handshake.securingDesc": "正在锻造足以抵御篡改的密钥。",
"handshake.shareTitle": "分享你的邀请",
"handshake.sendAnswerTitle": "把应答发回去",
"handshake.shareDesc": "把二维码给对方看,或把代码发给对方。它只能用一次,而且很快过期。",
"handshake.sendAnswerDesc": "把这段应答交给创建通道的人,让对方完成握手。",
"handshake.establish": "建立连接",
"handshake.thenReceive": "然后接收对方发回的应答",
"handshake.pasteAnswerPlaceholder": "粘贴对方的应答码…",
"handshake.answerSentNote": "把这段应答发给创建者,然后等待 —— 对方一连上,聊天就会打开。",
"handshake.qrHint": "在对方读取完代码之前,请保持此界面打开。",
"handshake.qrHintFrames": "握手被拆成 {frames} 帧 —— 在对方读完全部帧之前,请保持此界面打开。",
"verify.title": "安全校验",
"verify.desc": "通过另一条渠道(通话或当面)与对方核对这个安全码,然后输入它以解锁聊天。",
"verify.enterLabel": "输入核对过的安全码",
"verify.placeholder": "在此输入安全码",
"verify.confirm": "确认安全码",
"verify.confirmed": "已确认",
"verify.mismatch": "不一致",
"verify.yours": "你的确认",
"verify.peer": "对方的确认",
"verify.pending": "等待中",
"verify.waiting": "等待安全码…",
"verify.verified": "通道已校验",
"verify.bothConfirmed": "双方均已确认。正在打开安全聊天…",
"pwa.bannerTitle": "安装 SecureBit.chat",
"pwa.bannerDesc": "获得原生应用般的体验,安全性更进一步",
"pwa.install": "安装",
"pwa.dismiss": "关闭",
"pwa.close": "关闭",
"pwa.iosTitle": "在 iOS 上安装",
"pwa.iosStep1": "点按「分享」按钮",
"pwa.iosStep1Hint": "通常在 Safari 底部",
"pwa.iosStep2": "找到「添加到主屏幕」",
"pwa.iosStep2Hint": "在分享菜单中向下滚动",
"pwa.iosStep3": "点按「添加」",
"pwa.iosStep3Hint": "确认以安装 SecureBit.chat",
"pwa.genericTitle": "安装 SecureBit",
"pwa.genericDesc": "每种浏览器的安装方式都不一样。请选择与你的浏览器相符的步骤。",
"pwa.gotIt": "知道了",
"pwa.installedTitle": "应用已安装!",
"pwa.installedIos": "iOS 应用已安装!请从主屏幕打开。",
"pwa.installedGeneric": "SecureBit.chat 已在你的设备上",
"pwa.anytimeTitle": "随时都能安装",
"pwa.anytimeDesc": "你随时可以从浏览器菜单安装 SecureBit.chat,那样体验最好。",
"pwa.ok": "好",
"step.open": "第 1 步 · 开通通道",
"step.exchange": "第 2 步 · 交换",
"step.verification": "第 3 步 · 校验",
"action.create": "创建",
"action.join": "加入",
"action.back": "返回",
"action.copy": "复制",
"action.copied": "已复制",
"action.scan": "扫描",
"action.downloadDesktop": "下载桌面应用",
"action.advancedSettings": "高级设置",
"cred.offerTag": "邀请 · 或复制文本",
"cred.answerTag": "应答 · 或复制文本",
"cred.reveal": "点击显示 - 请勿泄露此代码",
"qr.title": "扫描二维码",
"qr.subtitle": "把摄像头对准对方的二维码",
"qr.scanning": "扫描中…",
"qr.hint": "请拿稳,直到所有部分都被读取。摄像头仅在本地使用 - 不会上传任何内容。",
"mesh.you": "你",
"mesh.peer": "对方 · 会话 1",
"mesh.joined2": "小红 加入 · +2",
"mesh.joined3": "小明 加入 · +3",
"ice.title": "网络设置",
"ice.subtitle": "仅在本地配置 - 永远不会发给对方",
"ice.intro": "SecureBit 默认使用公共 STUN 服务器来协商点对点连接。如果你自建服务,可以指向自己的 STUN/TURN。",
"ice.publicTitle": "公共服务器(默认)",
"ice.publicDesc": "无需配置,适合大多数人。",
"ice.customTitle": "我自己的 STUN/TURN 服务器",
"ice.customDesc": "最多 {max} 个服务器。",
"ice.turnNote": "TURN 中继能看到双方的 IP 与流量节奏,但永远看不到消息内容,内容始终端到端加密。建议使用 ",
"ice.turnNoteTls": "TLS)。",
"ice.test": "测试服务器",
"ice.testing": "测试中…",
"ice.relayTitle": "仅中继模式",
"ice.relayBadge": "隐私最强",
"ice.relayDesc": "让所有流量都经过 TURN,对方永远看不到你的 IP。需要一台 TURN 服务器。",
"ice.relayWarning": "已启用仅中继模式,但没有配置 TURN 服务器。连接将无法建立。",
"ice.persist": "保存在本设备",
"ice.persistDesc": "以加密形式保存在此浏览器中。保持关闭则仅在本次会话中生效。",
"ice.forget": "忘记已保存的设置",
"ice.cancel": "取消",
"ice.apply": "应用",
"ice.errUnavailable": "此浏览器不支持 WebRTC",
"ice.errInvalid": "服务器配置无效",
"update.title": "有可用更新",
"update.desc": "检测到 SecureBit 的新版本。",
"update.currentVersion": "当前版本",
"update.newVersion": "新版本",
"update.now": "立即更新",
"update.later": "稍后",
"update.unknown": "无",
"update.stepSaving": "正在保存数据…",
"update.stepSwCaches": "正在清理 Service Worker 缓存…",
"update.stepSwUnregister": "正在注销 Service Worker…",
"update.stepBrowserCache": "正在清理浏览器缓存…",
"update.stepVersion": "正在更新版本…",
"update.stepReload": "正在重新加载应用…",
"update.error": "更新出错。请手动刷新页面(Ctrl+F5 或 Cmd+Shift+R",
"update.confirmSkip": "有新版本可用。为了安全与稳定,建议更新。要不更新继续吗?",
"offline.backOnline": "已恢复联网",
"offline.mode": "离线模式",
"offline.dismiss": "关闭",
"offline.lostTitle": "连接已断开",
"offline.lostDesc": "SecureBit 现在处于离线模式。部分功能受限,但你的数据依然安全。",
"offline.point1": "你的会话与密钥都会保留",
"offline.point2": "服务器上不存储任何数据",
"offline.point3": "重新联网后消息与文件会同步",
"offline.continue": "继续离线使用",
"offline.restoredTitle": "重新联网之后",
"offline.restoredDesc": "掉线不会让你损失什么。SecureBit 会把一切先在本地排队,一旦恢复联网就继续加密会话。",
"offline.r1Title": "你的消息会送达",
"offline.r1Desc": "你在离线时写下的一切都会自动发给对方。",
"offline.r2Title": "文件会传完",
"offline.r2Desc": "上传会从中断处继续 - 不用重新发送。",
"offline.r3Title": "对方的消息与文件会到达",
"offline.r3Desc": "对方在中断期间发出的内容会按顺序送到你这里。",
"offline.r4Title": "什么都不会丢失",
"offline.r4Desc": "重新连上后不会留下空档 - 对话从中断的地方接着继续。",
"offline.gotIt": "知道了",
"qr.showTitle": "显示二维码",
"qr.showSubtitle": "全屏 · 让对方扫描",
"qr.showSubtitleFrames": "全屏 · 让对方扫描全部 {frames} 帧",
"notify.enabledBody": "通知已开启。有新消息时你会收到提醒。",
"notify.workingBody": "通知工作正常。有新消息时你会收到提醒。",
"pw.label": "密码输入框",
"pw.placeholder": "输入密码…",
"pw.decrypt": "解密",
"pw.cancel": "取消",
"file.title": "文件传输",
"file.drop": "把文件拖到这里",
"file.dropHint": "发送前已端到端加密 · 最大 100 MB",
"file.browse": "浏览设备",
"file.incoming": "收到文件请求",
"file.accept": "接受",
"file.reject": "拒绝",
"file.download": "下载",
"file.notReady": "连接尚未就绪",
"file.tooLarge": "文件过大",
"file.typeNotAllowed": "不允许的文件类型",
"file.maxConcurrent": "已达到同时传输的上限",
"file.gone": "该文件已无法下载。",
"call.incoming": "来电",
"call.incomingVideo": "视频来电",
"call.encrypted": "加密通话",
"call.encryptedShort": "已加密",
"call.peer": "安全对端",
"call.connecting": "连接中…",
"call.ringing": "正在呼叫…",
"call.accept": "接听",
"call.decline": "拒接",
"call.end": "挂断",
"call.camera": "摄像头",
"call.cameraOff": "摄像头已关闭",
"call.peerCameraOff": "对方的摄像头已关闭",
"call.flipCamera": "切换摄像头",
"call.addVideo": "加入视频",
"call.video": "视频",
"call.muted": "已静音",
"call.expand": "放大",
"call.minimize": "缩小",
"call.quality": "连接质量",
"call.qualityExcellent": "极佳",
"call.videoPrefix": "视频 · ",
"call.voicePrefix": "语音 · ",
"group.new": "新建群组",
"group.create": "创建群组",
"group.join": "加入群组",
"group.name": "群组名称",
"group.nameTooLong": "群组名称过长。",
"group.capacity": "最多 {max} 人,点对点连接。群组开启前,所有人都会核对同一个安全码。",
"group.invite": "邀请",
"group.inviteMore": "邀请更多成员",
"group.invitePeople": "邀请 {count} 人",
"group.invitation": "群组邀请",
"group.addMembers": "添加成员",
"group.roomFor": "还能再加 {remaining} 人。他们加入后,所有人会核对一个新的群组安全码。",
"group.membersCount": "{count} 位成员",
"group.member": "成员",
"group.members": "成员",
"group.remove": "移除 {name}",
"group.message": "给「{name}」发消息",
"group.leave": "退出",
"group.leaveThis": "退出该群组",
"group.cancel": "取消建群",
"group.close": "关闭",
"group.cancelBtn": "取消",
"group.decline": "拒绝",
"group.working": "处理中…",
"group.sasTitle": "群组安全码",
"group.sasEveryone": "所有人看到的是同一个安全码",
"group.sasCompare": "与每位成员核对群组安全码,才能开启这个群组。",
"group.sasReadAloud": "把这些数字念给 ",
"group.sasWarning": "只要有一位成员念出不同的安全码,就说明有人在你们之间。请取消建群 - 不要确认。",
"group.confirmFirst": "请先确认群组安全码",
"group.codeSuffix": " · 安全码 {code}",
"group.exchangingNonces": "正在交换一次性随机数…",
"group.waitingCommit": "等待每位成员作出承诺…",
"group.waitingJoin": "等待其他成员加入…",
"group.emptyChat": "这里还什么都没有。每条消息都由发送者签名,并经由每位成员各自的加密链路传输。",
"group.noVerified": "还没有已校验的聊天。请先打开一对一聊天并核对其安全码 - 群组是由你已经确认过的连接搭起来的。",
"group.noMoreToAdd": "没有其他已校验的聊天可添加。请先打开一对一聊天并核对其安全码。",
"group.directLink": "点对点直接连接",
"group.noDirectLink": "尚无直接连接 - 在建立期间,消息由另一位成员转发",
"group.relayNote": "有些成员还没有与你建立直接连接。他们的消息经由另一位成员转发,对方能看到你们在交谈,但既读不到签名之外的内容,也无法改动你说过的话。群组会持续尝试为他们建立直连。",
"group.relayOnlyOff": "仅中继模式已关闭,因此每位成员都会直接连到你,并得知你的 IP 地址 —— 包括别人邀请进来的成员。若这一点在此处很重要,请在网络设置中开启它。",
"group.memberOffline": "{name} 处于离线状态,收不到消息。对方仍是成员:移除会让群组重新生成密钥。",
"group.joinNote": "其他成员会知道你在这个群里。没有可以补看的历史记录 - 群组从空白开始。",
"group.inviteSentNote": "在对方接受之前,群组照常运作。他们没有历史记录可补看 —— 只会看到从现在起发送的内容。",
"group.errNotCreated": "群组未创建",
"group.errNobodyAccepted": "没有人及时接受邀请。",
"group.errNothingSent": "什么都没有发送,也没有校验。请关闭此窗口,等所有人都连上后再试。",
"group.errNotFormed": "无法组建这个群组。",
"group.errFull": "这个群组已满。",
"group.errInviteFailed": "邀请未能发送 - 该聊天未连接。",
"group.errNoMemberList": "群主始终没有发送成员名单。",
"group.errUnsignedList": "成员名单没有群主的签名。请不要重试 - 直接告知对方。",
"group.errNotOwner": "有非群主的人试图改动成员名单。",
"hdr.tagline": "端到端加密",
"hdr.netSettings": "高级网络设置",
"hdr.netSettingsTitle": "高级网络设置(STUN/TURN",
"hdr.disconnect": "断开连接",
"status.connected": "已连接",
"status.connecting": "连接中…",
"status.notConnected": "未连接",
"status.reconnecting": "重新连接中…",
"status.retrying": "重试中…",
"status.verifying": "校验中…",
"status.peerDisconnected": "对方已断开",
"sec.replayProtection": "重放攻击防护",
"sec.messageIntegrity": "消息完整性(HMAC",
"sec.forwardSecrecy": "完美前向保密",
"sec.metadataProtection": "元数据保护",
"sec.trafficObfuscation": "流量混淆",
"sec.realTests": "真实的密码学测试",
"sec.simulatedData": "模拟数据",
"sec.testPassed": "测试通过",
"sec.testFailed": "测试失败或不可用",
"sec.verificationDone": "真实的密码学校验已完成",
"sec.verificationInProgress": "安全校验进行中…",
"sec.verificationWait": "安全校验进行中…\n请等待实时的密码学校验完成。",
"sec.verificationUnavailable": "无法进行安全校验",
"chat.placeholder": "写一条加密消息…",
"chat.send": "发送消息",
"chat.sendFiles": "发送文件",
"chat.hideFiles": "隐藏文件",
"chat.recordVoice": "录制语音消息",
"chat.sendVoice": "发送语音消息",
"chat.discard": "放弃",
"chat.codeBlock": "作为代码块发送(会展开输入框)",
"chat.codeHint": "代码片段 · 保留格式 · ⌘↵ 发送",
"chat.viewOnce": "阅后即焚",
"chat.viewOnceTitle": "阅后即焚 - 对方读过后即消失",
"chat.viewOncePrefix": "阅后即焚 · ",
"chat.viewOnceTap": "阅后即焚 · 轻触查看",
"chat.viewedOnce": "已查看",
"chat.disappearing": "定时消息 - 双方都会删除",
"chat.disappearAfter": "多久后消失",
"chat.visibleFor": "可见时长",
"chat.timerPrefix": "定时 · ",
"chat.expired": "这条消息已过期",
"chat.deleteForEveryone": "为所有人删除",
"chat.sending": "发送中",
"chat.delivered": "已送达",
"chat.notSent": "未发送",
"chat.notSentReason": "未发送 - 安全通道尚未就绪。请重新连接后继续。",
"chat.encrypted": "已加密",
"chat.decrypted": "已解密",
"chat.encryptedOnDevice": "已在你的设备上加密",
"chat.uploading": "上传中",
"chat.downloading": "下载中",
"chat.transferring": "传输中…",
"chat.copied": "已复制!",
"chat.collapse": "收起",
"chat.closeMenu": "关闭菜单",
"chat.newChat": "新建聊天",
"chat.newGroup": "新建群组",
"chat.createGroup": "创建群组",
"chat.groupChats": "群聊",
"chat.secureChat": "安全聊天",
"chat.nameThis": "给这个聊天起个名字",
"chat.rename": "重命名聊天(仅本地)",
"chat.renameHint": "双击可重命名",
"chat.localLabel": "本地名称 · 只保存在这台设备上",
"chat.setStatus": "设置你的状态",
"chat.yourStatusPrefix": "你的状态 - ",
"chat.meshHint": "最多 8 人 · P2P 网状连接",
"chat.offline": "离线",
"chat.noNetwork": "无网络 · 正在重连",
"chat.startVoiceCall": "发起加密语音通话",
"chat.startVideoCall": "发起加密视频通话",
"chat.verifyForCalls": "先校验会话才能通话",
"chat.e2eeNote": "每条消息在离开你的设备之前都会被端到端加密。",
"chat.peersOnly": "仅以端到端方式发给已连接的对端 - 从不存放在服务器上。",
"flow.invitationCreated": "已创建安全邀请",
"flow.invitationCreatedBang": "安全邀请已创建并加密。",
"flow.responseCreated": "已创建安全应答",
"flow.responseCreatedBang": "安全应答已创建。",
"flow.sendInvitation": "通过安全渠道(通话、短信等)把邀请码发给对方。",
"flow.sendResponse": "通过安全渠道把应答码发给发起方,或让对方扫描下方的二维码。",
"flow.sendEncryptedCode": "发送加密代码",
"flow.sendTheResponse": "发送应答",
"flow.pasteOrWrite": "粘贴或输入代码…",
"flow.processingInvitation": "正在处理安全邀请…",
"flow.processingResponse": "正在处理安全应答…",
"flow.finalizing": "正在完成安全连接…",
"flow.channelEstablished": "安全通道已建立",
"flow.channelReady": "安全通道已就绪",
"flow.restoring": "正在恢复连接…",
"flow.invitationCaptured": "已读取邀请。",
"err.needInvitation": "需要粘贴对方给你的邀请码。",
"err.needResponse": "需要粘贴对方给你的应答码。",
"err.responseFormat": "应答格式无效 - 请检查代码",
"err.responseNoKey": "应答码无效 - 缺少或损坏了密码学密钥。请检查代码后重试。",
"err.responseNoSignKey": "应答码无效 - 缺少签名校验密钥。请检查代码后重试。",
"err.responseOutdated": "应答数据已过期 - 请使用新的邀请",
"err.setupError": "建立连接时出错",
"err.notReady": "连接尚未就绪",
"err.securityBreach": "检测到安全漏洞 - 连接已拒绝",
"err.securityValidation": "安全校验未通过 - 可能存在攻击",
"err.retiredQr": "这个二维码使用了已弃用的格式,无法传递邀请。请让对方重新生成,或改用复制粘贴。",
"err.compressedQrNote": "压缩的二维码为了简短可能省略 SDP。如果连接失败,请改用复制粘贴。",
"err.inviteNotConnected": "邀请未能发送。该聊天当前未连接。",
"err.inviteNotConnectedRetry": "邀请未能发送。该聊天当前未连接 - 请重新打开后再试。",
"err.nobodyAccepted": "没有人接受邀请。群组保持不变。",
"err.noAudio": "没有录到声音 - 请检查麦克风权限后重试。",
"err.voiceNeedsConnection": "发送语音消息需要处于活动状态的安全连接。请重新连接后重试。",
"err.voiceRestoring": "正在恢复连接 - 请稍后再试着发送语音消息。",
"err.fileTooLarge": "文件过大",
"sas.safetyNumber": "安全码",
"sas.incorrect": "安全码不正确。请与对方核对后重试。",
"sas.noMatch": "安全码不一致",
"sas.makeSure": "请确认两边的安全码完全一致。",
"sas.tooManyAttempts": "错误次数过多。为安全起见,会话已重置。",
"sas.verificationFailed": "校验失败",
"sas.verified": "已校验 · 完美前向保密",
"sas.runVerification": "运行安全校验",
"sec.panelTitle": "网络与密码学详情",
"sec.security": "安全",
"sec.transport": "传输",
"sec.keyExchange": "密钥交换",
"sec.allEnabled": "所有安全功能默认开启",
"sec.realTimeNote": "使用真实密码学函数进行实时校验 - 没有任何伪造数据。",
"sec.simulatedWarning": "注意:连接可能尚未完全建立 - 这些数值可能是模拟的。",
"dl.title": "下载 SecureBit",
"dl.free": "免费 · 开源",
"dl.soon": "移动端应用(iOS、Android)与浏览器扩展(Chrome、Firefox、Opera)即将推出。",
"chatHdr.chat": "聊天",
"chatHdr.chats": "聊天",
"chatHdr.newChat": "+ 新建",
"chatHdr.secure": "已加密",
"chatHdr.p2pSub": "P2P · 端到端加密",
"chatHdr.save": "保存",
"chatHdr.close": "关闭",
"chatHdr.expand": "展开",
"chatHdr.you": "你",
"chatHdr.qrCode": "二维码",
"chat.disconnected": "已断开",
"call.mute": "静音",
"call.endShort": "结束",
"group.add": "添加",
"group.send": "发送",
"sec.pfsShort": "完美前向保密",
"sec.cipher": "加密算法",
"chat.close": "关闭",
"file.needConnection": "文件传输需要已建立的连接",
"presence.available": "在线",
"presence.away": "离开",
"presence.busy": "忙碌",
"presence.offline": "离线",
"presence.invisible": "隐身",
"presence.availableDesc": "在线且可联系",
"presence.awayDesc": "空闲 · 暂时离开",
"presence.busyDesc": "请勿打扰",
"presence.invisibleDesc": "对他人显示为离线",
"presence.online": "在线",
"conn.p2p": "P2P · 已连接",
"conn.verifying": "校验中…",
"conn.connecting": "连接中…",
"conn.reconnecting": "重新连接中…",
"conn.peerDisconnected": "对方已断开",
"conn.disconnected": "已断开",
"chat.defaultLabel": "聊天",
"groupPhase.forming": "正在组建…",
"groupPhase.commitments": "正在交换承诺…",
"groupPhase.revealing": "正在揭示…",
"groupPhase.compare": "请核对群组安全码",
"groupPhase.ready": "群组已就绪",
"groupPhase.failed": "群组未创建",
"call.qualityGood": "良好",
"call.qualityFair": "一般",
"call.qualityWeak": "较差",
"msg.code": "代码",
"msg.timer": "定时",
"msg.voice": "语音",
"msg.play": "播放",
"msg.sent": "已发送",
"msg.read": "已读",
"report.title": "实时安全校验",
"report.active": "运行中",
"report.testsPassed": "通过的测试",
"report.verifiedAt": "校验于",
"report.source": "来源",
"secTest.verifyECDHKeyExchange": "ECDH 密钥交换",
"secTest.verifyECDSASignatures": "ECDSA 数字签名",
"secTest.verifyEncryption": "AES-GCM 加密",
"secTest.verifyMessageIntegrity": "消息完整性",
"secTest.verifyPerfectForwardSecrecy": "完美前向保密",
"secTest.verifyPFS": "完美前向保密",
"secTest.verifyReplayProtection": "重放攻击防护",
"secTest.verifyDTLSFingerprint": "DTLS 指纹",
"secTest.verifySASVerification": "SAS 校验",
"secTest.verifyMetadataProtection": "元数据保护",
"secTest.verifyTrafficObfuscation": "流量混淆",
"secTest.verifyPacketPadding": "数据包填充",
"secTest.verifyNestedEncryption": "嵌套加密",
"secTest.verifyNonExtractableKeys": "不可导出的密钥",
"secTest.verifyRateLimiting": "速率限制",
"secTest.verifyMutualAuth": "双向身份验证",
"secTest.verifyAuthProof": "身份验证凭证",
"secTest.verifyEnhancedValidation": "强化校验",
"secTest.verifyAdvancedFeatures": "高级功能",
"secTest.verifySignature": "签名检查",
"secDetail.Security system initializing...": "安全系统正在启动…",
"secDetail.Nested encryption active": "嵌套加密已启用",
"secDetail.Nested encryption failed": "嵌套加密失败",
"secDetail.Packet padding active": "数据包填充已启用",
"secDetail.Packet padding failed": "数据包填充失败",
"secDetail.Advanced features active": "高级功能已启用",
"secDetail.Advanced features failed": "高级功能失败",
"secDetail.No encryption key available": "没有可用的加密密钥",
"secDetail.AES-GCM encryption/decryption working correctly": "AES-GCM 加解密工作正常",
"secDetail.No ECDH key pair available": "没有可用的 ECDH 密钥对",
"secDetail.Key derivation failed": "密钥推导失败",
"secDetail.No ECDSA key pair available": "没有可用的 ECDSA 密钥对",
"secDetail.ECDSA digital signatures working correctly": "ECDSA 数字签名工作正常",
"secDetail.MAC key not available or invalid": "MAC 密钥缺失或无效",
"secDetail.Rate limiter did not block a message over the limit": "速率限制器未拦截超出限额的消息",
"secDetail.Rate limiter is not available": "速率限制器不可用",
"secDetail.Replay protection is working correctly": "重放攻击防护工作正常",
"secDetail.Replay protection not enabled": "未启用重放攻击防护",
"secDetail.SAS code not available": "SAS 安全码不可用",
"secDetail.SAS verification code is valid and available": "SAS 校验码有效且可用",
"secDetail.Traffic obfuscation is working correctly": "流量混淆工作正常",
"secDetail.Traffic obfuscation not enabled": "未启用流量混淆",
"secDetail.No non-extractable ephemeral ECDH key pair for this session": "本次会话没有不可导出的临时 ECDH 密钥对",
"secDetail.Session-level PFS only: keys are ephemeral per session, but the Double Ratchet is not active for this connection (peer on an older version), so a compromised session key exposes the whole conversation": "仅有会话级前向保密:密钥按会话临时生成,但此连接未启用 Double Ratchet(对方使用较旧版本),因此一旦会话密钥泄露,整段对话都会暴露。",
"msg.pause": "暂停",
"msg.failed": "失败",
"groupErr.timeout": "有成员在安全码准备好之前就不再响应。",
"groupErr.keyMismatch": "某位成员的密钥与其声称的身份不符。",
"groupErr.revealMismatch": "某位成员揭示的值与其先前的承诺不符。",
"groupErr.commitChanged": "有成员中途更改了自己的承诺。",
"groupErr.missingKey": "名单里有一位成员,其密钥始终没有送到。",
"groupErr.outsider": "收到了来自群组之外的数据帧。",
"groupErr.limit": "一个群组最多八位成员。",
"groupErr.tooLarge": "有一条消息过大,无法发送给群组。",
"fileType.text": "纯文本",
"fileType.images": "图片",
"fileType.archives": "压缩包",
"fileType.voice": "语音消息",
"fileType.unsupported": "不支持",
"qrScan.title": "扫描二维码",
"qrScan.auto": "自动模式",
"qrScan.reset": "重置",
"qrScan.autoScroll": "已启用自动滚动",
"qrScan.starting": "正在启动摄像头…",
"qrScan.point": "把摄像头对准对方的二维码",
"qrScan.tapFocus": "轻触屏幕对焦",
"qrScan.focusing": "对焦中…",
"iceErr.notArray": "服务器列表必须是数组",
"iceErr.invalidJson": "JSON 无效",
"iceErr.tooMany": "服务器过多(最多 {max} 个)",
"iceErr.invalidEntry": "{label}:条目无效",
"iceErr.urlCount": "{label}:需要 1 到 {max} 个 URL",
"iceErr.turnCreds": "{label}TURN 服务器通常需要用户名与凭据",
"iceUrl.notString": "URL 必须是字符串",
"iceUrl.empty": "URL 为空",
"iceUrl.tooLong": "URL 过长",
"iceUrl.badChars": "URL 含有无效字符",
"iceUrl.badScheme": "URL 必须以 stun:、stuns:、turn: 或 turns: 开头",
"iceUrl.badQuery": "URL 的查询部分无效",
"iceUrl.noHost": "URL 缺少主机",
"iceUrl.badHost": "URL 的主机或端口无效",
"iceUrl.badTransport": "URL 的查询必须是 transport=udp 或 transport=tcp",
"msg.off": "关闭",
"file.consentUnavailable": "无法征得同意",
"secLevel.MAXIMUM": "最高",
"secLevel.INITIALIZING": "启动中",
"secLevel.ERROR": "错误",
"secLevel.UNKNOWN": "未知",
"status.error": "错误",
"offline.disconnect": "断开连接",
"offline.learnMore": "了解更多",
"pwa.installApp": "安装应用",
"chat.onWeb": "你正在使用网页版",
"groupCall.startVoice": "发起群组语音通话",
"groupCall.startVideo": "发起群组视频通话",
"groupCall.join": "加入",
"groupCall.dismiss": "暂不加入",
"groupCall.leave": "离开通话",
"groupCall.you": "你",
"groupCall.connecting": "连接中…",
"groupCall.waitingLink": "正在等待直连…",
"groupCall.legFailed": "无法连接",
"groupCall.startedVoice": "{name} 发起了语音通话",
"groupCall.startedVideo": "{name} 发起了视频通话",
"groupCall.inCall": "{count} 人在通话中",
"groupCall.err.permission_denied": "通话无法开始 - 麦克风和摄像头权限被拒绝。请为本站点允许后重试。",
"groupCall.err.device_not_found": "通话无法开始 - 此设备上未找到麦克风。",
"groupCall.err.device_busy": "通话无法开始 - 麦克风正被其他应用占用。请关闭后重试。",
"groupCall.err.media_failed": "通话无法开始 - 无法打开麦克风。",
"groupCall.err.call_in_progress": "该群组已有通话正在进行。请加入,而不是另开一个。",
"groupCall.err.not_ready": "请先确认群组安全码再通话。",
"groupCall.speaking": "{name} 正在讲话",
"groupCall.pin": "放大显示 {name}",
"groupCall.unpin": "返回所有人",
"groupCall.showEveryone": "所有人",
"msg.after5s": "阅后 5 秒",
"msg.after15s": "阅后 15 秒",
"msg.after30s": "阅后 30 秒",
"msg.after1m": "阅后 1 分钟",
"msg.sec30": "30 秒",
"msg.min5": "5 分钟",
"msg.hour1": "1 小时",
"desktop.shareDesc": "把代码发给对方。它只能使用一次,并会很快过期。",
"desktop.invitationCreated": "安全邀请已创建 - 发送给对方。",
"desktop.joinDesc": "粘贴对方的邀请码,以生成你的安全应答。",
"desktop.offerTag": "邀请 · 复制文本",
"desktop.answerTag": "应答 · 复制文本",
"desktop.offerPlaceholder": "邀请码将显示在这里…",
"desktop.answerPlaceholder": "应答码将显示在这里…",
"desktop.backToChats": "返回聊天",
"desktop.sendFeedback": "发送反馈",
"desktop.callsNeedVerified": "通话需要已验证的安全通道。",
"desktop.noOpenChannel": "没有已打开的安全通道。",
"desktop.chatCarriesCall": "此聊天正在承载一场群组通话。请先离开群组通话,再发起一对一通话。",
"desktop.err.permission_denied": "通话无法开始 - 麦克风和摄像头权限被阻止。请在系统设置中允许后重试。",
"desktop.language": "语言",
"desktop.languageHint": "立即生效。已发送的消息保持原本的文字。",
"desktop.compareCode": "与对方核对验证码,一致则确认。",
"desktop.verifyBeforeFiles": "发送文件前请先完成验证。",
"desktop.verifyBeforeSending": "发送消息前请先完成验证。",
"desktop.disconnectedByBackend": "连接已安全断开。",
"desktop.restoreFailed": "无法恢复连接,正在关闭此聊天。",
"desktop.channelNotReady": "数据通道尚不可用,请等待连接建立。",
"desktop.enterCode": "输入验证码以确认。",
"desktop.noOffer": "未找到邀请,请先创建一个。",
"desktop.notInitiator": "此连接不是你创建的,因此没有可应用的应答。",
"desktop.decryptFailed": "一条消息无法解密,已丢弃。",
"desktop.badMessageFormat": "收到格式错误的数据帧,已丢弃。",
"desktop.notSentNotReady": "消息未发送:安全通道尚未就绪。请等待验证完成或重新连接。",
"desktop.micDenied": "麦克风权限被拒绝。",
"desktop.noChannelWait": "没有已打开的安全通道 - 请等待连接建立。",
"desktop.sasFailed": "验证失败。可能存在中间人,连接已中止。",
"desktop.sasOk": "验证成功。此通道已端到端认证。",
"desktop.iceForgotten": "已忘记保存的服务器,改用公共 ICE 服务器。",
"desktop.icePublic": "正在使用公共 ICE 服务器。",
"desktop.verificationInProgress": "安全验证仍在进行,请等待完成。",
"desktop.fileGone": "此文件已无法下载。",
"desktop.codeMismatch": "验证码不一致,为安全起见正在断开连接。",
"desktop.noLocalCode": "验证失败:本地没有可比对的派生验证码。为安全起见正在断开连接。",
"desktop.protocolViolation": "对方在你确认验证码之前就声称已确认。为安全起见正在断开连接。",
"desktop.verificationRejected": "验证被拒绝。为安全起见已中止连接。",
"secLevel.HIGH": "高",
"secLevel.MEDIUM": "中",
"secLevel.LOW": "低",
"desktop.rerun": "重新检测",
"desktop.ice.customDesc": "最多 {max} 个服务器,每行一个 URL 或使用 JSON。",
"desktop.ice.persistDesc": "保存在本设备上。关闭则仅在本次会话中使用。",
"desktop.group.leaveNote": "其他成员会得知你已离开。此后本设备上不会留下这个群组的任何内容——没有服务器保存副本可供重新加入,你需要一份新的邀请。",
"desktop.sec.ecdsaOk": "握手期间已验证对方密钥包的签名(ECDSA P-384 / SHA-384",
"desktop.sec.ecdsaNone": "没有完成的握手",
"desktop.sec.ecdhOk": "会话密钥由临时 ECDH P-384 交换经 HKDF-SHA-256 派生",
"desktop.sec.ecdhNone": "未派生会话密钥",
"desktop.sec.encryptionOk": "已在核心中验证 AES-GCM 加解密",
"desktop.sec.encryptionNa": "无法运行 AES-GCM 自检",
"desktop.sec.integrityOk": "已验证消息完整性(AES-GCM 认证)",
"desktop.sec.integrityNa": "无法运行完整性自检",
"desktop.sec.pfsOk": "Double Ratchet 已启用——每条消息都有自己的密钥",
"desktop.sec.pfsNa": "未测量",
"desktop.sec.replayOk": "棘轮消息密钥用后即销毁,被截获的帧无法重放",
"desktop.sec.replayNa": "未测量",
"desktop.sec.dtlsPinned": "已固定对方 DTLS 指纹:{fp}",
"desktop.sec.dtlsNone": "没有可用的远端 DTLS 指纹",
"desktop.sec.sasBoth": "双方已在带外确认安全码",
"desktop.sec.sasIncomplete": "安全码尚未由双方确认",
"desktop.sec.metadataOk": "已派生专用的元数据密钥(HKDF metadata-protection-v4",
"desktop.sec.metadataNone": "没有元数据密钥",
"desktop.sec.coverOn": "掩护流量已启用:在棘轮通道上发送随机伪帧(每 15-30 秒 32-128 字节)",
"desktop.sec.coverOff": "掩护流量生成器未运行",
"desktop.sec.coverUnsupported": "掩护流量需要 Double Ratchet 会话(对方使用较旧版本)",
"desktop.tagline": "端到端的自由",
"desktop.callsNotHere": "此版本暂不支持通话。消息、文件和群聊一切正常。"
};
const registry = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
registry["zh"] = DICTIONARY;
+17 -10999
View File
File diff suppressed because it is too large Load Diff
+31 -4
View File
@@ -11,10 +11,33 @@
* language the recipient happened to pick last, which makes links unshareable.
*/
import { DEFAULT_LOCALE, SUPPORTED_LOCALES, LOCALE_META, DICTIONARIES } from './generated.js';
import { DEFAULT_LOCALE, SUPPORTED_LOCALES, LOCALE_META, CROSS_LOCALE_STRINGS } from './generated.js';
// Side-effect import: loading the default locale's dictionary registers the strings
// t() falls back to when a translation is missing a key. It is the one dictionary that
// has to be present on every page, so it is the one that gets bundled.
import './dict/default.js';
export { DEFAULT_LOCALE, SUPPORTED_LOCALES, LOCALE_META };
/**
* Loaded dictionaries, by locale code.
*
* On a global rather than in module scope, and that is the point. index.js exists twice
* on a page: once bundled inside dist/app.js, and once as raw source, because the PWA
* install prompt, the PWA manager and the update checker import it directly. Two module
* instances mean two module-scoped registries, and the /ru/ dictionary loaded by the
* page would have been invisible to the half of the app that needed it.
*
* A page loads its own dictionary through a <script type="module"> that runs before the
* bundles; every locale other than the default arrives that way. See scripts/build-i18n.js.
*/
const REGISTRY = globalThis.__SECUREBIT_I18N__ || (globalThis.__SECUREBIT_I18N__ = Object.create(null));
/** The dictionary for a locale, or an empty one if that locale was never loaded. */
function dictionary(code) {
return REGISTRY[code] || null;
}
const STORAGE_KEY = 'securebit-locale';
/** The locale a path belongs to, or null for the default locale at the root. */
@@ -191,7 +214,7 @@ export function suggestedLocale({ pathname = '/', languages = [], stored = null
* the count belongs to the translation, not to the component.
*/
export function tList(key, locale = currentLocale()) {
const value = DICTIONARIES[locale]?.[key] ?? DICTIONARIES[DEFAULT_LOCALE]?.[key];
const value = dictionary(locale)?.[key] ?? dictionary(DEFAULT_LOCALE)?.[key];
return Array.isArray(value) ? value : [];
}
@@ -224,8 +247,12 @@ export function languageLinks({ pathname = '/', active = DEFAULT_LOCALE } = {})
*/
export function t(key, vars, locale = currentLocale()) {
const template =
DICTIONARIES[locale]?.[key] ??
DICTIONARIES[DEFAULT_LOCALE]?.[key] ??
dictionary(locale)?.[key] ??
// Asked for a locale whose dictionary is not on this page. Only the language
// suggestion does that, and only for the handful of keys it needs, so those
// ship for every locale; anything else falls through to the default below.
CROSS_LOCALE_STRINGS[locale]?.[key] ??
dictionary(DEFAULT_LOCALE)?.[key] ??
key;
if (!vars) return template;
return String(template).replace(/\{(\w+)\}/g, (match, name) =>
+35
View File
@@ -41,6 +41,40 @@ const purgeLegacyOfferRecords = () => {
}
};
/**
* QR generation and scanning live in their own bundle 142 KB gzipped, the third
* largest thing this site serves. It used to be a <script type="module"> in <head>,
* which meant every first visit paid for it before the app was interactive, on a
* screen that has no QR on it: the scanner only exists behind a button, and the
* generator only runs once a channel is being created.
*
* So it is fetched after the app has mounted and the browser is idle. Every call site
* already checks `typeof window.<fn> === 'function'` before using it, so arriving late
* is not an error condition but the scanner effect in app.jsx keys off this event to
* start the camera for anyone who opened the modal in the meantime.
*/
const loadQrBundle = () => {
if (window.__qrReady) return window.__qrReady;
window.__qrReady = import('/dist/qr-local.js')
.then(() => {
window.dispatchEvent(new Event('securebit:qr-ready'));
})
.catch((error) => {
console.warn('QR bundle failed to load:', error && error.message);
// Let a later attempt retry rather than caching the rejection forever.
window.__qrReady = null;
});
return window.__qrReady;
};
const scheduleQrBundle = () => {
if (typeof window.requestIdleCallback === 'function') {
window.requestIdleCallback(loadQrBundle, { timeout: 3000 });
} else {
setTimeout(loadQrBundle, 1200);
}
};
// Mount application once DOM and modules are ready
const start = () => {
purgeLegacyOfferRecords();
@@ -49,6 +83,7 @@ const start = () => {
} else if (window.DEBUG_MODE) {
console.error('initializeApp is not defined on window');
}
scheduleQrBundle();
};
if (document.readyState === 'loading') {
-3
View File
@@ -30,10 +30,7 @@
import(`../components/ui/Header.jsx?v=${timestamp}`),
import(`../components/ui/DownloadApps.jsx?v=${timestamp}`),
import(`../components/ui/BecomePartner.jsx?v=${timestamp}`),
import(`../components/ui/ComparisonTable.jsx?v=${timestamp}`),
import(`../components/ui/UniqueFeatureSlider.jsx?v=${timestamp}`),
import(`../components/ui/SecurityFeatures.jsx?v=${timestamp}`),
import(`../components/ui/Testimonials.jsx?v=${timestamp}`),
import(`../components/ui/Roadmap.jsx?v=${timestamp}`),
import(`../components/ui/FileTransfer.jsx?v=${timestamp}`),
import(`../components/ui/IceServerSettings.jsx?v=${timestamp}`),
+5 -3
View File
@@ -4,12 +4,14 @@
// within the page CSP (script-src 'self', style-src 'self' 'unsafe-inline').
//
// Deferred here (decorative / non-layout, not needed for the initial paint):
// - FontAwesome (~102KB): icon glyphs. Their webfonts are still <link rel=preload>ed
// in index.html, so they download in parallel and apply as soon as this CSS lands.
// - Prism (tiny): syntax-highlighting theme, only used inside code blocks in chat.
//
// FontAwesome used to be the reason this file existed: 102 KB of stylesheet for 2468
// icons, of which the interface draws 82. Subset to those, it is 7 KB and rides in the
// main bundle instead, so the icons are styled from the first paint rather than a beat
// after it. See scripts/subset-icons.py.
(function () {
var sheets = [
'/assets/fontawesome/css/all.min.css',
'/libs/prism/prism.css'
];
for (var i = 0; i < sheets.length; i++) {