mirror of
https://github.com/greenart7c3/Amber.git
synced 2026-10-05 10:58:23 +00:00
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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YQTVwy8RBj7spdEK3aEc3i
This commit is contained in:
+15
-8
@@ -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.
|
||||
|
||||
@@ -868,7 +868,6 @@
|
||||
<string name="d_accept">Annehmen</string>
|
||||
<string name="d_delete_permission">Berechtigung löschen</string>
|
||||
<string name="d_no_activity">Noch keine Aktivität</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">angenommen</string>
|
||||
<string name="d_rejected">abgelehnt</string>
|
||||
<string name="d_disconnect_delete">Trennen und Anwendung löschen</string>
|
||||
@@ -892,4 +891,6 @@
|
||||
<string name="d_tray_hide">Amber ausblenden</string>
|
||||
<string name="d_tray_open">Amber öffnen</string>
|
||||
<string name="d_tray_quit">Amber beenden</string>
|
||||
<string name="switch_relays">möchte die Relais wechseln</string>
|
||||
<string name="invalid_request">hat eine ungültige Anfrage gesendet</string>
|
||||
</resources>
|
||||
|
||||
@@ -879,7 +879,6 @@
|
||||
<string name="d_accept">Accept</string>
|
||||
<string name="d_delete_permission">Delete permission</string>
|
||||
<string name="d_no_activity">No activity yet</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">accepted</string>
|
||||
<string name="d_rejected">rejected</string>
|
||||
<string name="d_disconnect_delete">Disconnect and delete application</string>
|
||||
|
||||
@@ -871,7 +871,6 @@
|
||||
<string name="d_accept">Aceptar</string>
|
||||
<string name="d_delete_permission">Eliminar permiso</string>
|
||||
<string name="d_no_activity">Aún no hay actividad</string>
|
||||
<string name="d_kind_paren">tipo %1$s</string>
|
||||
<string name="d_accepted">aceptado</string>
|
||||
<string name="d_rejected">rechazado</string>
|
||||
<string name="d_disconnect_delete">Desconectar y eliminar aplicación</string>
|
||||
@@ -895,4 +894,6 @@
|
||||
<string name="d_tray_hide">Ocultar Amber</string>
|
||||
<string name="d_tray_open">Abrir Amber</string>
|
||||
<string name="d_tray_quit">Salir de Amber</string>
|
||||
<string name="switch_relays">quiere cambiar los relays</string>
|
||||
<string name="invalid_request">envió una solicitud no válida</string>
|
||||
</resources>
|
||||
|
||||
@@ -868,7 +868,6 @@
|
||||
<string name="d_accept">Accepter</string>
|
||||
<string name="d_delete_permission">Supprimer l'autorisation</string>
|
||||
<string name="d_no_activity">Aucune activité pour le moment</string>
|
||||
<string name="d_kind_paren">type %1$s</string>
|
||||
<string name="d_accepted">accepté</string>
|
||||
<string name="d_rejected">rejeté</string>
|
||||
<string name="d_disconnect_delete">Déconnecter et supprimer l'application</string>
|
||||
@@ -892,4 +891,6 @@
|
||||
<string name="d_tray_hide">Masquer Amber</string>
|
||||
<string name="d_tray_open">Ouvrir Amber</string>
|
||||
<string name="d_tray_quit">Quitter Amber</string>
|
||||
<string name="switch_relays">veut changer de relais</string>
|
||||
<string name="invalid_request">a envoyé une requête invalide</string>
|
||||
</resources>
|
||||
|
||||
@@ -871,7 +871,6 @@
|
||||
<string name="d_accept">Terima</string>
|
||||
<string name="d_delete_permission">Hapus izin</string>
|
||||
<string name="d_no_activity">Belum ada aktivitas</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">diterima</string>
|
||||
<string name="d_rejected">ditolak</string>
|
||||
<string name="d_disconnect_delete">Putuskan dan hapus aplikasi</string>
|
||||
@@ -895,4 +894,6 @@
|
||||
<string name="d_tray_hide">Sembunyikan Amber</string>
|
||||
<string name="d_tray_open">Buka Amber</string>
|
||||
<string name="d_tray_quit">Keluar dari Amber</string>
|
||||
<string name="switch_relays">ingin mengganti relay</string>
|
||||
<string name="invalid_request">mengirim permintaan yang tidak valid</string>
|
||||
</resources>
|
||||
|
||||
@@ -871,7 +871,6 @@
|
||||
<string name="d_accept">Accetta</string>
|
||||
<string name="d_delete_permission">Elimina permesso</string>
|
||||
<string name="d_no_activity">Nessuna attività ancora</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">accettato</string>
|
||||
<string name="d_rejected">rifiutato</string>
|
||||
<string name="d_disconnect_delete">Disconnetti ed elimina applicazione</string>
|
||||
@@ -895,4 +894,6 @@
|
||||
<string name="d_tray_hide">Nascondi Amber</string>
|
||||
<string name="d_tray_open">Apri Amber</string>
|
||||
<string name="d_tray_quit">Esci da Amber</string>
|
||||
<string name="switch_relays">vuole cambiare i relay</string>
|
||||
<string name="invalid_request">ha inviato una richiesta non valida</string>
|
||||
</resources>
|
||||
|
||||
@@ -847,7 +847,6 @@
|
||||
<string name="d_accept">承認</string>
|
||||
<string name="d_delete_permission">権限を削除</string>
|
||||
<string name="d_no_activity">アクティビティはまだありません</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">承認済み</string>
|
||||
<string name="d_rejected">拒否済み</string>
|
||||
<string name="d_disconnect_delete">アプリを切断して削除</string>
|
||||
@@ -871,4 +870,6 @@
|
||||
<string name="d_tray_hide">Amber を隠す</string>
|
||||
<string name="d_tray_open">Amber を開く</string>
|
||||
<string name="d_tray_quit">Amber を終了</string>
|
||||
<string name="switch_relays">Relay の切り替えを求めています</string>
|
||||
<string name="invalid_request">無効なリクエストを送信しました</string>
|
||||
</resources>
|
||||
|
||||
@@ -871,7 +871,6 @@
|
||||
<string name="d_accept">수락</string>
|
||||
<string name="d_delete_permission">권한 삭제</string>
|
||||
<string name="d_no_activity">아직 활동이 없습니다</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">수락됨</string>
|
||||
<string name="d_rejected">거부됨</string>
|
||||
<string name="d_disconnect_delete">애플리케이션 연결 해제 및 삭제</string>
|
||||
@@ -895,4 +894,6 @@
|
||||
<string name="d_tray_hide">Amber 숨기기</string>
|
||||
<string name="d_tray_open">Amber 열기</string>
|
||||
<string name="d_tray_quit">Amber 종료</string>
|
||||
<string name="switch_relays">Relay 전환을 요청합니다</string>
|
||||
<string name="invalid_request">잘못된 요청을 보냈습니다</string>
|
||||
</resources>
|
||||
|
||||
@@ -866,7 +866,6 @@
|
||||
<string name="d_accept">Aceitar</string>
|
||||
<string name="d_delete_permission">Excluir permissão</string>
|
||||
<string name="d_no_activity">Nenhuma atividade ainda</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">aceito</string>
|
||||
<string name="d_rejected">rejeitado</string>
|
||||
<string name="d_disconnect_delete">Desconectar e excluir aplicativo</string>
|
||||
@@ -890,4 +889,6 @@
|
||||
<string name="d_tray_hide">Ocultar Amber</string>
|
||||
<string name="d_tray_open">Abrir Amber</string>
|
||||
<string name="d_tray_quit">Sair do Amber</string>
|
||||
<string name="switch_relays">quer trocar os relays</string>
|
||||
<string name="invalid_request">enviou uma solicitação inválida</string>
|
||||
</resources>
|
||||
|
||||
@@ -871,7 +871,6 @@
|
||||
<string name="d_accept">Принять</string>
|
||||
<string name="d_delete_permission">Удалить разрешение</string>
|
||||
<string name="d_no_activity">Пока нет активности</string>
|
||||
<string name="d_kind_paren">тип %1$s</string>
|
||||
<string name="d_accepted">принято</string>
|
||||
<string name="d_rejected">отклонено</string>
|
||||
<string name="d_disconnect_delete">Отключить и удалить приложение</string>
|
||||
@@ -895,4 +894,6 @@
|
||||
<string name="d_tray_hide">Скрыть Amber</string>
|
||||
<string name="d_tray_open">Открыть Amber</string>
|
||||
<string name="d_tray_quit">Выйти из Amber</string>
|
||||
<string name="switch_relays">хочет сменить Relay-серверы</string>
|
||||
<string name="invalid_request">отправил недопустимый запрос</string>
|
||||
</resources>
|
||||
|
||||
@@ -847,7 +847,6 @@
|
||||
<string name="d_accept">ยอมรับ</string>
|
||||
<string name="d_delete_permission">ลบสิทธิ์</string>
|
||||
<string name="d_no_activity">ยังไม่มีกิจกรรม</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">ยอมรับแล้ว</string>
|
||||
<string name="d_rejected">ปฏิเสธแล้ว</string>
|
||||
<string name="d_disconnect_delete">ตัดการเชื่อมต่อและลบแอปพลิเคชัน</string>
|
||||
@@ -871,4 +870,6 @@
|
||||
<string name="d_tray_hide">ซ่อน Amber</string>
|
||||
<string name="d_tray_open">เปิด Amber</string>
|
||||
<string name="d_tray_quit">ออกจาก Amber</string>
|
||||
<string name="switch_relays">ต้องการเปลี่ยน Relay</string>
|
||||
<string name="invalid_request">ส่งคำขอที่ไม่ถูกต้อง</string>
|
||||
</resources>
|
||||
|
||||
@@ -867,7 +867,6 @@
|
||||
<string name="d_accept">Kabul et</string>
|
||||
<string name="d_delete_permission">İzni sil</string>
|
||||
<string name="d_no_activity">Henüz etkinlik yok</string>
|
||||
<string name="d_kind_paren">tür %1$s</string>
|
||||
<string name="d_accepted">kabul edildi</string>
|
||||
<string name="d_rejected">reddedildi</string>
|
||||
<string name="d_disconnect_delete">Bağlantıyı kes ve uygulamayı sil</string>
|
||||
@@ -891,4 +890,6 @@
|
||||
<string name="d_tray_hide">Amber'i gizle</string>
|
||||
<string name="d_tray_open">Amber'i aç</string>
|
||||
<string name="d_tray_quit">Amber'den çık</string>
|
||||
<string name="switch_relays">Relay'leri değiştirmek istiyor</string>
|
||||
<string name="invalid_request">geçersiz bir istek gönderdi</string>
|
||||
</resources>
|
||||
|
||||
@@ -847,7 +847,6 @@
|
||||
<string name="d_accept">Chấp nhận</string>
|
||||
<string name="d_delete_permission">Xóa quyền</string>
|
||||
<string name="d_no_activity">Chưa có hoạt động nào</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">đã chấp nhận</string>
|
||||
<string name="d_rejected">đã từ chối</string>
|
||||
<string name="d_disconnect_delete">Ngắt kết nối và xóa ứng dụng</string>
|
||||
@@ -871,4 +870,6 @@
|
||||
<string name="d_tray_hide">Ẩn Amber</string>
|
||||
<string name="d_tray_open">Mở Amber</string>
|
||||
<string name="d_tray_quit">Thoát Amber</string>
|
||||
<string name="switch_relays">muốn chuyển relay</string>
|
||||
<string name="invalid_request">đã gửi một yêu cầu không hợp lệ</string>
|
||||
</resources>
|
||||
|
||||
@@ -852,7 +852,6 @@
|
||||
<string name="d_accept">接受</string>
|
||||
<string name="d_delete_permission">删除权限</string>
|
||||
<string name="d_no_activity">尚无活动</string>
|
||||
<string name="d_kind_paren">kind %1$s</string>
|
||||
<string name="d_accepted">已接受</string>
|
||||
<string name="d_rejected">已拒绝</string>
|
||||
<string name="d_disconnect_delete">断开连接并删除应用程序</string>
|
||||
@@ -876,4 +875,6 @@
|
||||
<string name="d_tray_hide">隐藏 Amber</string>
|
||||
<string name="d_tray_open">打开 Amber</string>
|
||||
<string name="d_tray_quit">退出 Amber</string>
|
||||
<string name="switch_relays">想要切换中继</string>
|
||||
<string name="invalid_request">发送了无效的请求</string>
|
||||
</resources>
|
||||
|
||||
@@ -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"))
|
||||
|
||||
Reference in New Issue
Block a user