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} 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"
}
}