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 <noreply@anthropic.com>
This commit is contained in:
jack 2026-08-01 11:27:46 +02:00
parent 889341e49b
commit 6d53ae2fef
2 changed files with 194 additions and 0 deletions

View File

@ -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() {

View File

@ -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" : {