feat(ui): implement UI/UX audit — i18n, HiDPI, theme, destructive-action & overflow fixes

Implements all 26 confirmed UI/UX audit findings plus the 4 dashboard/timeline
tile labels. Verified across full-node + Lite + Windows builds (ctest green) and
an adversarial diff review (one market-tab delete regression caught + fixed).

i18n coverage:
- Balance hero/quick-actions/toasts + dashboard & timeline tiles (Total Balance,
  Shielded, Transparent, Quick Send, Quick Receive, Click to open, Market)
- Send: Review Send / Cancel / Paste / view-only tooltip / memo byte counter
- Settings: Lite lifecycle errors, plaintext-RPC security warning, 8 toasts
- Mining pool-payout tooltip
- Resolve daemon_update_title double-assignment collision (new daemon_update_prompt_title)
- 23 new keys translated into all 8 locales; CJK subset font rebuilt

HiDPI: DPI-scale the Send amount bar, mining thread-tile clamp bounds, receive
loading skeleton, and sidebar notification-badge insets.

Light theme: theme-aware material::SurfaceOverlay() for balance bar tracks and
row-hover highlights; contacts active-pill foreground uses OnPrimary().

Destructive actions: arm/confirm for portfolio-group delete, saved pool/worker
remove, and avatar-image delete.

Interaction/overflow: route balance star/eye buttons and the console fold-toggle
through popup-safe guards; clip peer addr/subver; truncate the balance custom
label; measure Settings tool-button widths; mining stepper disabled-state
feedback; +/- stepper buttons restyled to match the thread tiles.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-18 17:54:15 -05:00
parent 0de44569b7
commit e24ca015d1
24 changed files with 599 additions and 148 deletions

View File

@@ -92,7 +92,10 @@
"balance": "Saldo",
"balance_history_collecting": "Historial de saldo — recopilando datos...",
"balance_layout": "Diseño de Saldo",
"balance_layout_switched": "Diseño: %s",
"balance_mining_rate": "Minando %s",
"balance_shielded_fmt": "Protegido: %.8f",
"balance_syncing_pct": "Sincronizando %.1f%%",
"balance_transparent_fmt": "Transparente: %.8f",
"ban": "Bloquear",
"banned_peers": "Nodos Bloqueados",
@@ -132,6 +135,7 @@
"bootstrap_verifying": "Verificando sumas de comprobación...",
"bootstrap_wallet_protected": "(wallet.dat está protegido)",
"bootstrap_warning": "Los datos de bloques existentes (blocks, chainstate, notarizations) se eliminarán y reemplazarán. Su wallet.dat NO será modificado ni eliminado.",
"byte_count_fmt": "%zu / %zu bytes",
"cancel": "Cancelar",
"change_pass_confirm": "Confirmar nueva:",
"change_pass_current": "Frase de contraseña actual:",
@@ -441,6 +445,7 @@
"daemon_update_latest": "Más reciente:",
"daemon_update_loading": "Cargando versiones…",
"daemon_update_now": "Actualizar ahora",
"daemon_update_prompt_title": "¿Actualizar el daemon del nodo?",
"daemon_update_reinstall": "Reinstalar",
"daemon_update_restart_note": "Reinicia el daemon para empezar a ejecutar la nueva versión.",
"daemon_update_restart_now": "Reiniciar el daemon ahora",
@@ -657,6 +662,7 @@
"light": "Claro",
"lite_account_label": "Cuenta",
"lite_action": "Acción",
"lite_backend_unavailable": "Backend de billetera Lite no disponible",
"lite_backup_keys": "Respaldo y claves",
"lite_birthday_backup": "Cumpleaños: %llu (respalda esto también)",
"lite_birthday_hint": "Altura de bloque desde la que empezar a escanear. Deja 0 si se desconoce (escaneo completo más lento).",
@@ -664,9 +670,12 @@
"lite_console_backend_commands": "Comandos del backend:",
"lite_console_help_passthrough": "Cualquier otra entrada se ejecuta como un comando de consola de la cartera lite.",
"lite_copy": "Copiar",
"lite_could_not_start": "No se pudo iniciar la operación",
"lite_could_not_write": "No se pudo escribir ",
"lite_encrypt_wallet": "Cifrar cartera",
"lite_encryption_removed": "Cifrado eliminado",
"lite_enter_all_seed_words": "Ingrese las 24 palabras semilla para restaurar (se obtuvieron %d)",
"lite_enter_wallet_path": "Ingrese una ruta de billetera",
"lite_hide_wipe": "Ocultar y borrar",
"lite_import": "Importar",
"lite_import_key_label": "Importar clave",
@@ -920,6 +929,7 @@
"mining_pool": "Pool",
"mining_pool_fee": "Comisión",
"mining_pool_hashrate": "Hashrate del Pool",
"mining_pool_needs_payout_tooltip": "Ingrese primero una dirección de pago (genere una dirección Z)",
"mining_pool_url": "URL del Pool",
"mining_pools_header": "POOLS",
"mining_recent_blocks": "BLOQUES RECIENTES",
@@ -1121,6 +1131,8 @@
"qr_failed": "Error al generar código QR",
"qr_title": "Código QR",
"qr_unavailable": "QR no disponible",
"quick_receive": "Recepción rápida",
"quick_send": "Envío rápido",
"ram_daemon_gb": "Daemon: %.1f GB (%s)",
"ram_daemon_mb": "Daemon: %.0f MB (%s)",
"ram_system_gb": "Sistema: %.1f / %.0f GB",
@@ -1170,6 +1182,7 @@
"rpc_connection": "Conexión RPC...",
"rpc_host": "Host RPC",
"rpc_pass": "Contraseña",
"rpc_plaintext_remote_warning": "El RPC remoto está usando HTTP sin cifrar. Agregue rpctls=1 a DRAGONX.conf si su daemon admite TLS.",
"rpc_port": "Puerto",
"rpc_user": "Usuario",
"save": "Guardar",
@@ -1279,6 +1292,7 @@
"send_tooltip_not_connected": "No conectado al daemon",
"send_tooltip_select_source": "Selecciona una dirección de origen primero",
"send_tooltip_syncing": "Espera a que se sincronice el blockchain",
"send_tooltip_view_only": "Dirección de solo vista — sin clave de gasto, no se puede enviar",
"send_total": "Total",
"send_transaction": "Enviar Transacción",
"send_tx_failed": "Error en la transacción",
@@ -1342,6 +1356,7 @@
"settings_locked": "Bloqueado",
"settings_merge_to_address": "Fusionar a dirección...",
"settings_noise_opacity": "Opacidad de ruido:",
"settings_not_connected": "No conectado al daemon",
"settings_not_encrypted": "Sin cifrar",
"settings_not_found": "No encontrado",
"settings_open_app_dir": "Abrir carpeta de la aplicación",
@@ -1352,18 +1367,23 @@
"settings_privacy": "Privacidad",
"settings_quick_unlock_pin": "PIN de desbloqueo rápido",
"settings_reduce_transparency": "Reducir transparencia",
"settings_reloaded": "Configuración recargada desde el disco",
"settings_remove_encryption": "Quitar cifrado",
"settings_remove_pin": "Quitar PIN",
"settings_request_payment": "Solicitar pago...",
"settings_rescan_desc": "Reescanear la cadena de bloques en busca de transacciones faltantes",
"settings_restart_daemon": "Reiniciar daemon",
"settings_rpc_connection": "Conexión RPC",
"settings_rpc_error_prefix": "Error de RPC: ",
"settings_rpc_note": "Nota: Los ajustes de conexión se detectan automáticamente desde DRAGONX.conf",
"settings_rpc_ok": "Conexión RPC correcta",
"settings_save_shielded_desc": "Almacena transacciones z-addr en un archivo local para visualización",
"settings_save_shielded_local": "Guardar historial de transacciones blindadas localmente",
"settings_saved": "Configuración guardada",
"settings_set_pin": "Establecer PIN",
"settings_shield_mining": "Blindar minería...",
"settings_solid_colors_desc": "Usar colores sólidos en lugar de efectos de desenfoque (accesibilidad)",
"settings_theme_refreshed": "Lista de temas actualizada",
"settings_tor_desc": "Enrutar todas las conexiones a través de Tor para mayor privacidad",
"settings_unlocked": "Desbloqueado",
"settings_use_tor_network": "Usar Tor para conexiones de red",
@@ -1375,6 +1395,8 @@
"settings_wallet_maintenance": "Mantenimiento de billetera",
"settings_wallet_not_found": "Archivo de billetera no encontrado",
"settings_wallet_size_label": "Tamaño de billetera:",
"settings_ztx_cleared": "Historial de transacciones Z borrado",
"settings_ztx_not_found": "No se encontró archivo de historial",
"setup_wizard": "Asistente de Configuración",
"share": "Compartir",
"shield_check_status": "Verificar Estado",
@@ -1457,6 +1479,7 @@
"theme": "Tema",
"theme_effects": "Efectos de tema",
"theme_language": "TEMA E IDIOMA",
"tile_click_to_open": "Clic para abrir",
"time_days_ago": "hace %d días",
"time_hours_ago": "hace %d horas",
"time_minutes_ago": "hace %d minutos",
@@ -1472,6 +1495,7 @@
"tools": "HERRAMIENTAS",
"tools_actions": "Herramientas y Acciones...",
"total": "Total",
"total_balance_label": "Saldo Total",
"transaction_id": "ID DE TRANSACCIÓN",
"transaction_sent": "Transacción enviada exitosamente",
"transaction_sent_msg": "¡Transacción enviada!",