diff --git a/assets/screenshots/desktop-call-ringing.png b/assets/screenshots/desktop-call-ringing.png new file mode 100644 index 0000000..b3dd39b Binary files /dev/null and b/assets/screenshots/desktop-call-ringing.png differ diff --git a/assets/screenshots/desktop-chat.png b/assets/screenshots/desktop-chat.png new file mode 100644 index 0000000..496e415 Binary files /dev/null and b/assets/screenshots/desktop-chat.png differ diff --git a/assets/screenshots/desktop-group-call.png b/assets/screenshots/desktop-group-call.png new file mode 100644 index 0000000..799d6d3 Binary files /dev/null and b/assets/screenshots/desktop-group-call.png differ diff --git a/assets/screenshots/desktop-start.png b/assets/screenshots/desktop-start.png new file mode 100644 index 0000000..daca25a Binary files /dev/null and b/assets/screenshots/desktop-start.png differ diff --git a/assets/screenshots/desktop-verification.png b/assets/screenshots/desktop-verification.png new file mode 100644 index 0000000..d17acf9 Binary files /dev/null and b/assets/screenshots/desktop-verification.png differ diff --git a/locales/ar.json b/locales/ar.json index cdd4b31..48d6aa2 100644 --- a/locales/ar.json +++ b/locales/ar.json @@ -806,6 +806,81 @@ "groupCall.speaking": "{name} يتحدّث الآن", "groupCall.pin": "عرض {name} بحجم كبير", "groupCall.unpin": "العودة إلى الجميع", - "groupCall.showEveryone": "الجميع" + "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": "حرية من طرف إلى طرف" } } diff --git a/locales/de.json b/locales/de.json index b0f6ae4..c5661d1 100644 --- a/locales/de.json +++ b/locales/de.json @@ -806,6 +806,81 @@ "groupCall.speaking": "{name} spricht", "groupCall.pin": "{name} groß anzeigen", "groupCall.unpin": "Zurück zu allen", - "groupCall.showEveryone": "Alle" + "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" } } diff --git a/locales/en.json b/locales/en.json index a4d39b8..5b68bdf 100644 --- a/locales/en.json +++ b/locales/en.json @@ -801,6 +801,81 @@ "groupCall.speaking": "{name} is speaking", "groupCall.pin": "Show {name} large", "groupCall.unpin": "Back to everyone", - "groupCall.showEveryone": "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" } } diff --git a/locales/es.json b/locales/es.json index 719c78a..b40de39 100644 --- a/locales/es.json +++ b/locales/es.json @@ -806,6 +806,81 @@ "groupCall.speaking": "{name} está hablando", "groupCall.pin": "Ver a {name} en grande", "groupCall.unpin": "Volver a todos", - "groupCall.showEveryone": "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" } } diff --git a/locales/fa.json b/locales/fa.json index 1c64ee0..67187e4 100644 --- a/locales/fa.json +++ b/locales/fa.json @@ -806,6 +806,81 @@ "groupCall.speaking": "{name} در حال صحبت است", "groupCall.pin": "نمایش بزرگ {name}", "groupCall.unpin": "بازگشت به همه", - "groupCall.showEveryone": "همه" + "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": "آزادی سرتاسری" } } diff --git a/locales/fr.json b/locales/fr.json index 4206ffd..2464dcd 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -801,7 +801,82 @@ "groupCall.speaking": "{name} parle", "groupCall.pin": "Afficher {name} en grand", "groupCall.unpin": "Revenir à tous", - "groupCall.showEveryone": "Tout le monde" + "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 s’il correspond.", + "desktop.verifyBeforeFiles": "Terminez la vérification avant d’envoyer des fichiers.", + "desktop.verifyBeforeSending": "Terminez la vérification avant d’envoyer 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 n’est 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 d’abord.", + "desktop.notInitiator": "Vous n’avez pas créé cette connexion, il n’y a donc aucune réponse à appliquer.", + "desktop.decryptFailed": "Un message n’a 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é n’est pas prêt. Attendez la fin de la vérification ou reconnectez-vous.", + "desktop.micDenied": "L’accè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 n’est 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 l’utiliser 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 n’en 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 d’un é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": "L’autotest AES-GCM n’a pas pu être exécuté", + "desktop.sec.integrityOk": "Intégrité des messages vérifiée (authentification AES-GCM)", + "desktop.sec.integrityNa": "L’autotest d’intégrité n’a 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é n’a 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" }, "manifest": { "name": "SecureBit.chat - Messagerie privée et chiffrée", diff --git a/locales/he.json b/locales/he.json index c91be03..ff3ae64 100644 --- a/locales/he.json +++ b/locales/he.json @@ -806,6 +806,81 @@ "groupCall.speaking": "{name} מדבר/ת", "groupCall.pin": "הצגת {name} בגדול", "groupCall.unpin": "חזרה לכולם", - "groupCall.showEveryone": "כולם" + "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": "חופש מקצה לקצה" } } diff --git a/locales/hi.json b/locales/hi.json index 6c7ac45..bbabbbe 100644 --- a/locales/hi.json +++ b/locales/hi.json @@ -801,7 +801,82 @@ "groupCall.speaking": "{name} बोल रहे हैं", "groupCall.pin": "{name} को बड़ा दिखाएँ", "groupCall.unpin": "सभी पर लौटें", - "groupCall.showEveryone": "सभी" + "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": "सिरे से सिरे तक आज़ादी" }, "manifest": { "name": "SecureBit.chat - निजी, एन्क्रिप्टेड मैसेंजर", diff --git a/locales/ko.json b/locales/ko.json index 34586cb..15c3f86 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -801,7 +801,82 @@ "groupCall.speaking": "{name} 님이 말하는 중", "groupCall.pin": "{name} 크게 보기", "groupCall.unpin": "전체 보기로 돌아가기", - "groupCall.showEveryone": "전체" + "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": "종단 간 자유" }, "manifest": { "name": "SecureBit.chat - 종단 간 암호화 비공개 메신저", diff --git a/locales/ru.json b/locales/ru.json index 3ce3e1c..eb102aa 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -806,6 +806,81 @@ "groupCall.speaking": "{name} говорит", "groupCall.pin": "Показать {name} крупно", "groupCall.unpin": "Вернуться ко всем", - "groupCall.showEveryone": "Все" + "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": "Сквозная свобода" } } diff --git a/locales/uk.json b/locales/uk.json index ec84be5..2b9be0b 100644 --- a/locales/uk.json +++ b/locales/uk.json @@ -806,6 +806,81 @@ "groupCall.speaking": "{name} говорить", "groupCall.pin": "Показати {name} великим", "groupCall.unpin": "Повернутися до всіх", - "groupCall.showEveryone": "Усі" + "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": "Наскрізна свобода" } } diff --git a/locales/ur.json b/locales/ur.json index 36ed897..65fc5ab 100644 --- a/locales/ur.json +++ b/locales/ur.json @@ -806,6 +806,81 @@ "groupCall.speaking": "{name} بول رہے ہیں", "groupCall.pin": "{name} کو بڑا دکھائیں", "groupCall.unpin": "سب پر واپس جائیں", - "groupCall.showEveryone": "سب" + "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": "سرے سے سرے تک آزادی" } } diff --git a/locales/zh.json b/locales/zh.json index b17bd08..f1c3609 100644 --- a/locales/zh.json +++ b/locales/zh.json @@ -801,7 +801,82 @@ "groupCall.speaking": "{name} 正在讲话", "groupCall.pin": "放大显示 {name}", "groupCall.unpin": "返回所有人", - "groupCall.showEveryone": "所有人" + "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": "端到端的自由" }, "manifest": { "name": "SecureBit.chat - 私密的端到端加密通讯工具", diff --git a/src/i18n/generated.js b/src/i18n/generated.js index a230131..8bc74ae 100644 --- a/src/i18n/generated.js +++ b/src/i18n/generated.js @@ -869,7 +869,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} is speaking", "groupCall.pin": "Show {name} large", "groupCall.unpin": "Back to everyone", - "groupCall.showEveryone": "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" }, "de": { "language.label": "Sprache", @@ -1643,7 +1718,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} spricht", "groupCall.pin": "{name} groß anzeigen", "groupCall.unpin": "Zurück zu allen", - "groupCall.showEveryone": "Alle" + "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" }, "fr": { "language.label": "Langue", @@ -2417,7 +2567,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} parle", "groupCall.pin": "Afficher {name} en grand", "groupCall.unpin": "Revenir à tous", - "groupCall.showEveryone": "Tout le monde" + "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 s’il correspond.", + "desktop.verifyBeforeFiles": "Terminez la vérification avant d’envoyer des fichiers.", + "desktop.verifyBeforeSending": "Terminez la vérification avant d’envoyer 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 n’est 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 d’abord.", + "desktop.notInitiator": "Vous n’avez pas créé cette connexion, il n’y a donc aucune réponse à appliquer.", + "desktop.decryptFailed": "Un message n’a 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é n’est pas prêt. Attendez la fin de la vérification ou reconnectez-vous.", + "desktop.micDenied": "L’accè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 n’est 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 l’utiliser 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 n’en 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 d’un é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": "L’autotest AES-GCM n’a pas pu être exécuté", + "desktop.sec.integrityOk": "Intégrité des messages vérifiée (authentification AES-GCM)", + "desktop.sec.integrityNa": "L’autotest d’intégrité n’a 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é n’a 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" }, "es": { "language.label": "Idioma", @@ -3191,7 +3416,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} está hablando", "groupCall.pin": "Ver a {name} en grande", "groupCall.unpin": "Volver a todos", - "groupCall.showEveryone": "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" }, "uk": { "language.label": "Мова", @@ -3965,7 +4265,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} говорить", "groupCall.pin": "Показати {name} великим", "groupCall.unpin": "Повернутися до всіх", - "groupCall.showEveryone": "Усі" + "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": "Наскрізна свобода" }, "ru": { "language.label": "Язык", @@ -4739,7 +5114,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} говорит", "groupCall.pin": "Показать {name} крупно", "groupCall.unpin": "Вернуться ко всем", - "groupCall.showEveryone": "Все" + "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": "Сквозная свобода" }, "zh": { "language.label": "语言", @@ -5513,7 +5963,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} 正在讲话", "groupCall.pin": "放大显示 {name}", "groupCall.unpin": "返回所有人", - "groupCall.showEveryone": "所有人" + "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": "端到端的自由" }, "ko": { "language.label": "언어", @@ -6287,7 +6812,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} 님이 말하는 중", "groupCall.pin": "{name} 크게 보기", "groupCall.unpin": "전체 보기로 돌아가기", - "groupCall.showEveryone": "전체" + "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": "종단 간 자유" }, "hi": { "language.label": "भाषा", @@ -7061,7 +7661,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} बोल रहे हैं", "groupCall.pin": "{name} को बड़ा दिखाएँ", "groupCall.unpin": "सभी पर लौटें", - "groupCall.showEveryone": "सभी" + "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": "सिरे से सिरे तक आज़ादी" }, "ar": { "language.label": "اللغة", @@ -7835,7 +8510,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} يتحدّث الآن", "groupCall.pin": "عرض {name} بحجم كبير", "groupCall.unpin": "العودة إلى الجميع", - "groupCall.showEveryone": "الجميع" + "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": "حرية من طرف إلى طرف" }, "he": { "language.label": "שפה", @@ -8609,7 +9359,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} מדבר/ת", "groupCall.pin": "הצגת {name} בגדול", "groupCall.unpin": "חזרה לכולם", - "groupCall.showEveryone": "כולם" + "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": "חופש מקצה לקצה" }, "fa": { "language.label": "زبان", @@ -9383,7 +10208,82 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} در حال صحبت است", "groupCall.pin": "نمایش بزرگ {name}", "groupCall.unpin": "بازگشت به همه", - "groupCall.showEveryone": "همه" + "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": "آزادی سرتاسری" }, "ur": { "language.label": "زبان", @@ -10157,6 +11057,81 @@ export const DICTIONARIES = { "groupCall.speaking": "{name} بول رہے ہیں", "groupCall.pin": "{name} کو بڑا دکھائیں", "groupCall.unpin": "سب پر واپس جائیں", - "groupCall.showEveryone": "سب" + "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": "سرے سے سرے تک آزادی" } };