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