i18n: strings the desktop client needed, and its screenshots
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:
+76
-1
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user