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
+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;