i18n: strings the desktop client needed, and its screenshots
CodeQL Analysis / Analyze CodeQL (push) Canceled after 0s
Deploy Application / deploy (push) Canceled after 0s
Mirror to Codeberg / mirror (push) Canceled after 0s
Mirror to PrivacyGuides / mirror (push) Canceled after 0s

The dictionaries here are the single source both clients read: the desktop
copies src/i18n/generated.js byte for byte, so a key added on either side is
available to the other.

  * desktop.* — sentences only the desktop says. It has no QR display and no
    browser to grant permissions, so its copy differs where the browser's would
    mislead: "allow the microphone in system settings", not "for this site".
  * msg.after5s and the rest of the disappearing-message timers, which this
    client renders from hardcoded English today and can now translate too.
  * secLevel.HIGH / MEDIUM / LOW, which the security panel needed and the
    dictionary only had MAXIMUM for.

All of it translated into the full thirteen. Nothing here changes what this site
renders — the web client does not reference the new keys yet.

assets/screenshots/desktop-*.png are captures of the desktop client at 1.0.0,
for its Flathub listing. A reviewer opens each URL, so they have to be served
from this domain rather than from a code host.
This commit is contained in:
lockbitchat
2026-09-01 21:05:47 -04:00
parent 8ad4b4558d
commit 46be54b59f
19 changed files with 1976 additions and 26 deletions
+76 -1
View File
@@ -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"
}
}