From e150daea739d0bfdcb5c4464db34a5cabf0d2794 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 15:05:01 +0000 Subject: [PATCH] desktop: localize the remaining permission-screen strings The application detail screen's Activity tab printed raw permission types ("SIGN_EVENT (kind 1)") instead of localized descriptions; entries now share the same localized title logic as the permission cards ("Assinar Nota de texto curta"), and the now-unused d_kind_paren key is dropped from all locale files. The switch_relays and invalid_request request descriptions existed only in English; add native translations in all 13 languages, phrased to match each locale's existing relay vocabulary, with a regression test that they stay translated everywhere. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01YQTVwy8RBj7spdEK3aEc3i --- .../desktop/ui/ApplicationDetailScreen.kt | 23 ++++++++++++------- .../src/main/resources/i18n/strings_de.xml | 3 ++- .../src/main/resources/i18n/strings_en.xml | 1 - .../src/main/resources/i18n/strings_es.xml | 3 ++- .../src/main/resources/i18n/strings_fr.xml | 3 ++- .../src/main/resources/i18n/strings_in.xml | 3 ++- .../src/main/resources/i18n/strings_it.xml | 3 ++- .../src/main/resources/i18n/strings_ja.xml | 3 ++- .../src/main/resources/i18n/strings_ko.xml | 3 ++- .../src/main/resources/i18n/strings_pt-BR.xml | 3 ++- .../src/main/resources/i18n/strings_ru.xml | 3 ++- .../src/main/resources/i18n/strings_th.xml | 3 ++- .../src/main/resources/i18n/strings_tr.xml | 3 ++- .../src/main/resources/i18n/strings_vi.xml | 3 ++- .../src/main/resources/i18n/strings_zh.xml | 3 ++- .../nostrsigner/desktop/StringsTest.kt | 19 +++++++++++++-- 16 files changed, 58 insertions(+), 24 deletions(-) diff --git a/desktop/src/main/kotlin/com/greenart7c3/nostrsigner/desktop/ui/ApplicationDetailScreen.kt b/desktop/src/main/kotlin/com/greenart7c3/nostrsigner/desktop/ui/ApplicationDetailScreen.kt index c7f958d1..10e901ec 100644 --- a/desktop/src/main/kotlin/com/greenart7c3/nostrsigner/desktop/ui/ApplicationDetailScreen.kt +++ b/desktop/src/main/kotlin/com/greenart7c3/nostrsigner/desktop/ui/ApplicationDetailScreen.kt @@ -194,7 +194,7 @@ fun ApplicationDetailScreen( val entry = appHistory[index] Column(Modifier.fillMaxWidth().padding(vertical = 4.dp)) { Text( - entry.type + (entry.kind?.let { " (${Strings.format("d_kind_paren", it, language = language)})" } ?: ""), + permissionTitle(entry.type, entry.kind, language), style = MaterialTheme.typography.bodyMedium, ) Text( @@ -228,6 +228,19 @@ fun ApplicationDetailScreen( } } +/** + * Localized display title for a permission or history entry — the kind / + * method description, wrapped in "Sign %1$s" for signing types like the + * mobile screens do. + */ +private fun permissionTitle(type: String, kind: Int?, language: String): String { + val description = SignerDescriptions.permission(type, kind, language) + return when (type.trim().lowercase()) { + "sign_event", "nip" -> Strings.format("sign", description, language = language) + else -> description + } +} + /** * One permission, with the same options as the mobile `PermissionRow`: * an Allow / Deny / Ask action and, when not asking, the "automatically @@ -241,13 +254,7 @@ private fun PermissionCard( onChange: (AppPermissionRecord) -> Unit, onDelete: () -> Unit, ) { - val typeLower = permission.type.trim().lowercase() - val description = SignerDescriptions.permission(permission.type, permission.kind, language) - val title = if (typeLower == "sign_event" || typeLower == "nip") { - Strings.format("sign", description, language = language) - } else { - description - } + val title = permissionTitle(permission.type, permission.kind, language) // Mirrors the mobile mapping: accept window -> Allow, reject window -> // Deny, neither -> Ask; a NEVER remember choice edits as ALWAYS. diff --git a/desktop/src/main/resources/i18n/strings_de.xml b/desktop/src/main/resources/i18n/strings_de.xml index a65e7757..6a9c3a5d 100644 --- a/desktop/src/main/resources/i18n/strings_de.xml +++ b/desktop/src/main/resources/i18n/strings_de.xml @@ -868,7 +868,6 @@ Annehmen Berechtigung löschen Noch keine Aktivität - kind %1$s angenommen abgelehnt Trennen und Anwendung löschen @@ -892,4 +891,6 @@ Amber ausblenden Amber öffnen Amber beenden + möchte die Relais wechseln + hat eine ungültige Anfrage gesendet diff --git a/desktop/src/main/resources/i18n/strings_en.xml b/desktop/src/main/resources/i18n/strings_en.xml index 1e90c30f..f1f0714a 100644 --- a/desktop/src/main/resources/i18n/strings_en.xml +++ b/desktop/src/main/resources/i18n/strings_en.xml @@ -879,7 +879,6 @@ Accept Delete permission No activity yet - kind %1$s accepted rejected Disconnect and delete application diff --git a/desktop/src/main/resources/i18n/strings_es.xml b/desktop/src/main/resources/i18n/strings_es.xml index 0575fc94..ae29151c 100644 --- a/desktop/src/main/resources/i18n/strings_es.xml +++ b/desktop/src/main/resources/i18n/strings_es.xml @@ -871,7 +871,6 @@ Aceptar Eliminar permiso Aún no hay actividad - tipo %1$s aceptado rechazado Desconectar y eliminar aplicación @@ -895,4 +894,6 @@ Ocultar Amber Abrir Amber Salir de Amber + quiere cambiar los relays + envió una solicitud no válida diff --git a/desktop/src/main/resources/i18n/strings_fr.xml b/desktop/src/main/resources/i18n/strings_fr.xml index bbfa24cf..5a272c9b 100644 --- a/desktop/src/main/resources/i18n/strings_fr.xml +++ b/desktop/src/main/resources/i18n/strings_fr.xml @@ -868,7 +868,6 @@ Accepter Supprimer l'autorisation Aucune activité pour le moment - type %1$s accepté rejeté Déconnecter et supprimer l'application @@ -892,4 +891,6 @@ Masquer Amber Ouvrir Amber Quitter Amber + veut changer de relais + a envoyé une requête invalide diff --git a/desktop/src/main/resources/i18n/strings_in.xml b/desktop/src/main/resources/i18n/strings_in.xml index 15e32858..7b6157c5 100644 --- a/desktop/src/main/resources/i18n/strings_in.xml +++ b/desktop/src/main/resources/i18n/strings_in.xml @@ -871,7 +871,6 @@ Terima Hapus izin Belum ada aktivitas - kind %1$s diterima ditolak Putuskan dan hapus aplikasi @@ -895,4 +894,6 @@ Sembunyikan Amber Buka Amber Keluar dari Amber + ingin mengganti relay + mengirim permintaan yang tidak valid diff --git a/desktop/src/main/resources/i18n/strings_it.xml b/desktop/src/main/resources/i18n/strings_it.xml index a379188f..b0ef6f04 100644 --- a/desktop/src/main/resources/i18n/strings_it.xml +++ b/desktop/src/main/resources/i18n/strings_it.xml @@ -871,7 +871,6 @@ Accetta Elimina permesso Nessuna attività ancora - kind %1$s accettato rifiutato Disconnetti ed elimina applicazione @@ -895,4 +894,6 @@ Nascondi Amber Apri Amber Esci da Amber + vuole cambiare i relay + ha inviato una richiesta non valida diff --git a/desktop/src/main/resources/i18n/strings_ja.xml b/desktop/src/main/resources/i18n/strings_ja.xml index b7f8ab72..41fbeb37 100644 --- a/desktop/src/main/resources/i18n/strings_ja.xml +++ b/desktop/src/main/resources/i18n/strings_ja.xml @@ -847,7 +847,6 @@ 承認 権限を削除 アクティビティはまだありません - kind %1$s 承認済み 拒否済み アプリを切断して削除 @@ -871,4 +870,6 @@ Amber を隠す Amber を開く Amber を終了 + Relay の切り替えを求めています + 無効なリクエストを送信しました diff --git a/desktop/src/main/resources/i18n/strings_ko.xml b/desktop/src/main/resources/i18n/strings_ko.xml index db744c85..12cbc72f 100644 --- a/desktop/src/main/resources/i18n/strings_ko.xml +++ b/desktop/src/main/resources/i18n/strings_ko.xml @@ -871,7 +871,6 @@ 수락 권한 삭제 아직 활동이 없습니다 - kind %1$s 수락됨 거부됨 애플리케이션 연결 해제 및 삭제 @@ -895,4 +894,6 @@ Amber 숨기기 Amber 열기 Amber 종료 + Relay 전환을 요청합니다 + 잘못된 요청을 보냈습니다 diff --git a/desktop/src/main/resources/i18n/strings_pt-BR.xml b/desktop/src/main/resources/i18n/strings_pt-BR.xml index 54814897..1dcc4491 100644 --- a/desktop/src/main/resources/i18n/strings_pt-BR.xml +++ b/desktop/src/main/resources/i18n/strings_pt-BR.xml @@ -866,7 +866,6 @@ Aceitar Excluir permissão Nenhuma atividade ainda - kind %1$s aceito rejeitado Desconectar e excluir aplicativo @@ -890,4 +889,6 @@ Ocultar Amber Abrir Amber Sair do Amber + quer trocar os relays + enviou uma solicitação inválida diff --git a/desktop/src/main/resources/i18n/strings_ru.xml b/desktop/src/main/resources/i18n/strings_ru.xml index 3c902676..79788ebc 100644 --- a/desktop/src/main/resources/i18n/strings_ru.xml +++ b/desktop/src/main/resources/i18n/strings_ru.xml @@ -871,7 +871,6 @@ Принять Удалить разрешение Пока нет активности - тип %1$s принято отклонено Отключить и удалить приложение @@ -895,4 +894,6 @@ Скрыть Amber Открыть Amber Выйти из Amber + хочет сменить Relay-серверы + отправил недопустимый запрос diff --git a/desktop/src/main/resources/i18n/strings_th.xml b/desktop/src/main/resources/i18n/strings_th.xml index 4ae303ea..100ba1aa 100644 --- a/desktop/src/main/resources/i18n/strings_th.xml +++ b/desktop/src/main/resources/i18n/strings_th.xml @@ -847,7 +847,6 @@ ยอมรับ ลบสิทธิ์ ยังไม่มีกิจกรรม - kind %1$s ยอมรับแล้ว ปฏิเสธแล้ว ตัดการเชื่อมต่อและลบแอปพลิเคชัน @@ -871,4 +870,6 @@ ซ่อน Amber เปิด Amber ออกจาก Amber + ต้องการเปลี่ยน Relay + ส่งคำขอที่ไม่ถูกต้อง diff --git a/desktop/src/main/resources/i18n/strings_tr.xml b/desktop/src/main/resources/i18n/strings_tr.xml index a8f383c8..096c227d 100644 --- a/desktop/src/main/resources/i18n/strings_tr.xml +++ b/desktop/src/main/resources/i18n/strings_tr.xml @@ -867,7 +867,6 @@ Kabul et İzni sil Henüz etkinlik yok - tür %1$s kabul edildi reddedildi Bağlantıyı kes ve uygulamayı sil @@ -891,4 +890,6 @@ Amber'i gizle Amber'i aç Amber'den çık + Relay'leri değiştirmek istiyor + geçersiz bir istek gönderdi diff --git a/desktop/src/main/resources/i18n/strings_vi.xml b/desktop/src/main/resources/i18n/strings_vi.xml index 2d0eaa46..8dab585e 100644 --- a/desktop/src/main/resources/i18n/strings_vi.xml +++ b/desktop/src/main/resources/i18n/strings_vi.xml @@ -847,7 +847,6 @@ Chấp nhận Xóa quyền Chưa có hoạt động nào - kind %1$s đã chấp nhận đã từ chối Ngắt kết nối và xóa ứng dụng @@ -871,4 +870,6 @@ Ẩn Amber Mở Amber Thoát Amber + muốn chuyển relay + đã gửi một yêu cầu không hợp lệ diff --git a/desktop/src/main/resources/i18n/strings_zh.xml b/desktop/src/main/resources/i18n/strings_zh.xml index f3015288..9e59d020 100644 --- a/desktop/src/main/resources/i18n/strings_zh.xml +++ b/desktop/src/main/resources/i18n/strings_zh.xml @@ -852,7 +852,6 @@ 接受 删除权限 尚无活动 - kind %1$s 已接受 已拒绝 断开连接并删除应用程序 @@ -876,4 +875,6 @@ 隐藏 Amber 打开 Amber 退出 Amber + 想要切换中继 + 发送了无效的请求 diff --git a/desktop/src/test/kotlin/com/greenart7c3/nostrsigner/desktop/StringsTest.kt b/desktop/src/test/kotlin/com/greenart7c3/nostrsigner/desktop/StringsTest.kt index 8cc9c87e..25a6406c 100644 --- a/desktop/src/test/kotlin/com/greenart7c3/nostrsigner/desktop/StringsTest.kt +++ b/desktop/src/test/kotlin/com/greenart7c3/nostrsigner/desktop/StringsTest.kt @@ -27,9 +27,10 @@ class StringsTest { @Test fun missingKeyFallsBackToEnglishThenKey() { - // "switch_relays" only exists in the English supplement -> other locales fall back. + // "switch_relays" is translated everywhere now; use a key that exists + // nowhere but English to prove the English fallback. assertEquals("wants to switch relays", Strings.get("switch_relays", "en")) - assertEquals(Strings.get("switch_relays", "en"), Strings.get("switch_relays", "de")) + assertEquals("möchte die Relais wechseln", Strings.get("switch_relays", "de")) // A key that exists nowhere returns itself. assertEquals("totally_unknown_key", Strings.get("totally_unknown_key", "fr")) } @@ -83,6 +84,20 @@ class StringsTest { assertTrue(Strings.format("d_public_key", "npub1abc", language = "ja").contains("npub1abc")) } + @Test + fun requestDescriptionsAreTranslatedInEveryLanguage() { + Strings.supportedLanguages.filter { it.first != "en" }.forEach { (tag, _) -> + assertTrue( + "switch_relays not translated for $tag", + Strings.get("switch_relays", tag) != Strings.get("switch_relays", "en"), + ) + assertTrue( + "invalid_request not translated for $tag", + Strings.get("invalid_request", tag) != Strings.get("invalid_request", "en"), + ) + } + } + @Test fun rememberTypeLabelsAreLocalized() { assertEquals("Just once", RememberType.NEVER.label("en"))