feat(migrate): daemon-update prompt + migrate-to-seed UX polish + i18n

Fixes the Windows migrate-to-seed failure (the old bundled daemon lacked
z_exportmnemonic) and rounds out the flow:

- seed_wallet_creator: actionable "daemon too old" message instead of the
  raw "Method not found" RPC error.
- Startup daemon-update prompt: if the wallet bundles a newer node than the
  installed one, offer to update it (once per version, keyed on a new
  daemon_update_prompted_size setting; never silently clobbers a custom
  node). "Install bundled" now also works when attached to an external /
  leftover daemon (RPC-stops it, then swaps + restarts).
- Migrate-to-seed Intro pre-flight: detect an already-mnemonic wallet
  (offer backup instead), an old daemon, or a locked/disconnected wallet
  before offering to create anything.
- No-funds path: a zero-balance wallet can adopt the new seed wallet
  directly (behind an acknowledgement checkbox) instead of a dead sweep.
- Loading spinners on the Working/Sweeping/Adopting steps; sweep coverage
  for the new intro / no-funds surfaces.
- Translations for all 18 new strings across 8 languages (+ rebuilt CJK
  subset font).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-07 22:16:47 -05:00
parent 48c79567d7
commit 82e61da62f
17 changed files with 418 additions and 22 deletions

View File

@@ -227,6 +227,11 @@
"copy_uri": "Copiar URI",
"current_price": "Precio Actual",
"custom_fees": "Comisiones personalizadas",
"daemon_update_body": "Esta versión de la cartera incluye un nodo DragonX más reciente que el que está instalado actualmente. Al actualizar se reemplaza el dragonxd instalado (y dragonx-cli/dragonx-tx), y luego se detiene y reinicia el nodo para que la nueva versión surta efecto. Recomendado: un nodo más reciente puede añadir funciones (p. ej. compatibilidad con frase de recuperación) que el antiguo no tiene.",
"daemon_update_keep": "Mantener actual",
"daemon_update_now": "Actualizar ahora",
"daemon_update_safe": "Tu cartera, tus claves y los datos de la blockchain no se ven afectados: solo se reemplazan los archivos del programa daemon. Si ejecutas deliberadamente un nodo personalizado, elige Mantener actual.",
"daemon_update_title": "¿Actualizar el daemon del nodo?",
"daemon_version": "Daemon",
"dark": "Oscuro",
"date": "Fecha",
@@ -384,21 +389,33 @@
"merge_started": "Operación de fusión iniciada",
"merge_title": "Fusionar a Dirección",
"mig_adopt": "Hacer que esta sea mi cartera",
"mig_adopt_now": "Adoptar cartera con frase",
"mig_adopting": "Instalando tu nueva cartera y reescaneando…",
"mig_adopting_note": "El nodo se está reiniciando con tu nueva cartera y reescaneará la cadena: esto puede tardar varios minutos. Deja la cartera en funcionamiento; se reconecta automáticamente.",
"mig_already_mnemonic": "Tu cartera ya tiene una frase de recuperación de 24 palabras: no hay nada que migrar. Simplemente respáldala y guarda las palabras en un lugar seguro.",
"mig_backed_up": "He anotado mi frase de recuperación",
"mig_backup_instead": "Respaldar frase de recuperación",
"mig_balance": "Saldo de la cartera actual: %.8f DRGX (menos una pequeña comisión)",
"mig_check_failed": "No se pudo comprobar tu cartera. Asegúrate de que esté desbloqueada y conectada, y luego vuelve a comprobar.",
"mig_checking_balance": "Comprobando tu saldo",
"mig_confirming": "Esperando a que el barrido se confirme en la cadena antes de cambiar de cartera: esto garantiza que tus fondos realmente se han movido.",
"mig_confs": "Confirmaciones del barrido: %d",
"mig_continue_sweep": "Continuar al barrido",
"mig_copy_seed": "Copiar frase",
"mig_create": "Crear cartera con frase",
"mig_daemon_too_old": "Tu nodo DragonX es demasiado antiguo para crear una cartera con frase de recuperación: le falta la compatibilidad con mnemónicos que esto necesita. Actualiza el nodo (Configuración → NODO Y SEGURIDAD → Instalar integrado, o Buscar actualizaciones) y vuelve a intentarlo.",
"mig_discard": "Descartar migración",
"mig_done": "Migración completada. Tu cartera ahora está respaldada por tu frase de recuperación.",
"mig_done_btn": "Listo",
"mig_done_detail": "El daemon está reescaneando para mostrar tus fondos: esto puede tardar unos minutos. Tu cartera anterior se guardó como un .bak en la carpeta de datos.",
"mig_intro": "Esto crea una cartera totalmente nueva respaldada por una frase de recuperación de 24 palabras, en un nodo aislado, para que puedas trasladar tus fondos a ella. Tu cartera actual NO se modifica y NO se mueve ningún fondo en este paso: primero respaldarás la nueva frase de recuperación y luego barrerás tus fondos hacia ella en un paso aparte y confirmado.",
"mig_later": "Más tarde",
"mig_no_funds": "Tu cartera no tiene fondos para migrar. Puedes adoptar directamente la nueva cartera con frase de recuperación: reemplaza tu cartera actual (vacía) por la respaldada con la frase. Tu cartera anterior se guarda de todos modos aparte, en un respaldo con marca de tiempo, por si acaso.",
"mig_nofunds_confirm": "Entiendo que esto reemplaza mi cartera actual por la nueva cartera con frase de recuperación",
"mig_not_connected": "Conéctate primero a tu nodo y luego vuelve a abrir esto para migrar.",
"mig_precheck_checking": "Comprobando tu cartera",
"mig_receive_addr": "Dirección de recepción de la nueva cartera:",
"mig_recheck": "Volver a comprobar",
"mig_remainder": "Aún quedan algunos fondos en tu cartera antigua (demasiadas entradas para una sola transacción): barre el resto antes de cambiar.",
"mig_remaining": "Restante en la cartera antigua: %.8f DRGX",
"mig_seed_warning": "Anota estas 24 palabras en orden y guárdalas sin conexión. Son el único respaldo de tu nueva cartera: si las pierdes, los fondos que migres se perderán para siempre.",
@@ -411,6 +428,7 @@
"mig_to": "Para: ",
"mig_txid": "txid: ",
"mig_unlock_first": "Desbloquea primero tu cartera para poder gastar desde ella.",
"mig_unlock_to_migrate": "Desbloquea primero tu cartera y luego vuelve a abrir esto para migrar.",
"mig_waiting_mine": "Esperando a que se mine la transacción de barrido…",
"mig_working": "Creando tu nueva cartera con frase de recuperación en un nodo aislado: esto puede tardar un minuto. Tu cartera principal sigue funcionando.",
"mine_when_idle": "Minar en reposo",