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} говорит",
"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": "Сквозная свобода"
}
}