From 6d53ae2fefd5ff366a18a3de6b1c5d711093f931 Mon Sep 17 00:00:00 2001 From: jack Date: Sat, 1 Aug 2026 11:27:46 +0200 Subject: [PATCH] Add verified_sender catalog entry (30 locales) + live seal repaint on verify The accessibility label existed only in code, so VoiceOver read english in 29 locales; the coverage test can't see source-only keys. Also forward peerIdentityStore.$verifiedFingerprints into objectWillChange so toggling verification repaints rows in an open DM instead of waiting for the next unrelated invalidation. Co-Authored-By: Claude Fable 5 --- bitchat/App/ConversationUIModel.swift | 9 ++ bitchat/Localizable.xcstrings | 185 ++++++++++++++++++++++++++ 2 files changed, 194 insertions(+) diff --git a/bitchat/App/ConversationUIModel.swift b/bitchat/App/ConversationUIModel.swift index 9311c152..53062d45 100644 --- a/bitchat/App/ConversationUIModel.swift +++ b/bitchat/App/ConversationUIModel.swift @@ -231,6 +231,15 @@ final class ConversationUIModel: ObservableObject { self?.refreshComputedState() } .store(in: &cancellables) + + // Verify/unverify while a DM is open must repaint existing rows — + // showsVerifiedSeal is computed per render, so forward the store change. + chatViewModel.peerIdentityStore.$verifiedFingerprints + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.objectWillChange.send() + } + .store(in: &cancellables) } private func refreshComputedState() { diff --git a/bitchat/Localizable.xcstrings b/bitchat/Localizable.xcstrings index f34ed351..81b4ddcd 100644 --- a/bitchat/Localizable.xcstrings +++ b/bitchat/Localizable.xcstrings @@ -25857,6 +25857,191 @@ } } }, + "content.accessibility.verified_sender" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مرسل موثق" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "যাচাইকৃত প্রেরক" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifizierter absender" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verified sender" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remitente verificado" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "فرستنده تأییدشده" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beripikadong nagpadala" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Expéditeur vérifié" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שולח מאומת" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "सत्यापित प्रेषक" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pengirim terverifikasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mittente verificato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "確認済みの送信者" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인된 보낸 사람" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pengirim yang disahkan" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रमाणित प्रेषक" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geverifieerde afzender" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zweryfikowany nadawca" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remetente verificado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remetente verificado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подтверждённый отправитель" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifierad avsändare" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "சரிபார்க்கப்பட்ட அனுப்புநர்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ผู้ส่งที่ยืนยันแล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doğrulanmış gönderen" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Підтверджений відправник" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تصدیق شدہ مرسل" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Người gửi đã xác minh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已验证的发送者" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已驗證的傳送者" + } + } + } + }, "content.accessibility.view_fingerprint_hint" : { "extractionState" : "manual", "localizations" : {