feat: Full UI internationalization, pool hashrate stats, and layout caching
- Replace all hardcoded English strings with TR() translation keys across every tab, dialog, and component (~20 UI files) - Expand all 8 language files (de, es, fr, ja, ko, pt, ru, zh) with complete translations (~37k lines added) - Improve i18n loader with exe-relative path fallback and English base fallback for missing keys - Add pool-side hashrate polling via pool stats API in xmrig_manager - Introduce Layout::beginFrame() per-frame caching and refresh balance layout config only on schema generation change - Offload daemon output parsing to worker thread - Add CJK subset fallback font for Chinese/Japanese/Korean glyphs
This commit is contained in:
665
scripts/gen_es.py
Normal file
665
scripts/gen_es.py
Normal file
@@ -0,0 +1,665 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate complete Spanish (es.json) translations for ObsidianDragon wallet."""
|
||||
import json
|
||||
|
||||
es = {
|
||||
# ---- Navigation & Tabs ----
|
||||
"overview": "Resumen",
|
||||
"balance": "Saldo",
|
||||
"send": "Enviar",
|
||||
"receive": "Recibir",
|
||||
"transactions": "Transacciones",
|
||||
"history": "Historial",
|
||||
"mining": "Minería",
|
||||
"peers": "Nodos",
|
||||
"market": "Mercado",
|
||||
"settings": "Configuración",
|
||||
"console": "Consola",
|
||||
"tools": "HERRAMIENTAS",
|
||||
"advanced": "AVANZADO",
|
||||
"network": "Red",
|
||||
|
||||
# ---- Settings sections ----
|
||||
"appearance": "APARIENCIA",
|
||||
"wallet": "CARTERA",
|
||||
"node_security": "NODO Y SEGURIDAD",
|
||||
"node": "NODO",
|
||||
"security": "SEGURIDAD",
|
||||
"explorer": "EXPLORADOR",
|
||||
"about": "Acerca de",
|
||||
"backup_data": "RESPALDO Y DATOS",
|
||||
"general": "General",
|
||||
|
||||
# ---- Settings options ----
|
||||
"balance_layout": "Diseño de Saldo",
|
||||
"low_spec_mode": "Modo bajo rendimiento",
|
||||
"simple_background": "Fondo simple",
|
||||
"console_scanline": "Líneas de consola",
|
||||
"theme_effects": "Efectos de tema",
|
||||
"language": "Idioma",
|
||||
"save_z_transactions": "Guardar Z-tx en lista",
|
||||
"allow_custom_fees": "Permitir comisiones personalizadas",
|
||||
"custom_fees": "Comisiones personalizadas",
|
||||
"auto_shield": "Auto-proteger minería",
|
||||
"fetch_prices": "Obtener precios",
|
||||
"use_tor": "Usar Tor",
|
||||
"font_scale": "Escala de fuente",
|
||||
"keep_daemon": "Mantener daemon activo",
|
||||
"stop_external": "Detener daemon externo",
|
||||
"mine_when_idle": "Minar en reposo",
|
||||
"verbose_logging": "Registro detallado",
|
||||
"acrylic": "Acrílico",
|
||||
"noise": "Ruido",
|
||||
"ui_opacity": "Opacidad de UI",
|
||||
"window_opacity": "Opacidad de ventana",
|
||||
|
||||
# ---- Settings buttons ----
|
||||
"save_settings": "Guardar Configuración",
|
||||
"reset_to_defaults": "Restablecer Valores",
|
||||
"report_bug": "Reportar Error",
|
||||
"website": "Sitio Web",
|
||||
"setup_wizard": "Asistente de Configuración",
|
||||
"rescan": "Re-escanear",
|
||||
"test_connection": "Probar",
|
||||
|
||||
# ---- Settings fields ----
|
||||
"rpc_host": "Host RPC",
|
||||
"rpc_port": "Puerto",
|
||||
"rpc_user": "Usuario",
|
||||
"rpc_pass": "Contraseña",
|
||||
"transaction_url": "URL de Transacción",
|
||||
"address_url": "URL de Dirección",
|
||||
"block_explorer": "Explorador de Bloques",
|
||||
|
||||
# ---- Common actions ----
|
||||
"add": "Agregar",
|
||||
"edit": "Editar",
|
||||
"delete": "Eliminar",
|
||||
"cancel": "Cancelar",
|
||||
"close": "Cerrar",
|
||||
"clear": "Limpiar",
|
||||
"copy": "Copiar",
|
||||
"paste": "Pegar",
|
||||
"save": "Guardar",
|
||||
"refresh": "Actualizar",
|
||||
"export": "Exportar",
|
||||
"import": "Importar",
|
||||
"show": "Mostrar",
|
||||
"hide": "Ocultar",
|
||||
"share": "Compartir",
|
||||
"confirm_and_send": "Confirmar y Enviar",
|
||||
"confirm_send": "Confirmar Envío",
|
||||
"confirm_transaction": "Confirmar Transacción",
|
||||
"review_send": "Revisar Envío",
|
||||
"copy_address": "Copiar Dirección Completa",
|
||||
"copy_to_clipboard": "Copiar al Portapapeles",
|
||||
"paste_from_clipboard": "Pegar del Portapapeles",
|
||||
"copy_txid": "Copiar TxID",
|
||||
"copy_uri": "Copiar URI",
|
||||
"copy_error": "Copiar Error",
|
||||
"search_placeholder": "Buscar...",
|
||||
"exit": "Salir",
|
||||
"help": "Ayuda",
|
||||
"file": "Archivo",
|
||||
"display": "Pantalla",
|
||||
"new": "+ Nuevo",
|
||||
"dismiss": "Descartar",
|
||||
"keep": "Mantener",
|
||||
"yes_clear": "Sí, Limpiar",
|
||||
"undo_clear": "Deshacer Limpieza",
|
||||
|
||||
# ---- Common labels ----
|
||||
"address": "Dirección",
|
||||
"address_label": "Dirección:",
|
||||
"amount": "Cantidad",
|
||||
"amount_label": "Cantidad:",
|
||||
"date": "Fecha",
|
||||
"date_label": "Fecha:",
|
||||
"fee": "Comisión",
|
||||
"fee_label": "Comisión:",
|
||||
"label": "Etiqueta:",
|
||||
"memo": "Memo (opcional, encriptado)",
|
||||
"memo_label": "Memo:",
|
||||
"notes": "Notas",
|
||||
"notes_optional": "Notas (opcional):",
|
||||
"total": "Total",
|
||||
"from": "Desde",
|
||||
"to_upper": "PARA",
|
||||
"from_upper": "DESDE",
|
||||
"max": "Máximo",
|
||||
"characters": "caracteres",
|
||||
"ping": "Ping",
|
||||
"height": "Altura",
|
||||
"block": "Bloque",
|
||||
"available": "Disponible",
|
||||
"unknown": "Desconocido",
|
||||
"loading": "Cargando...",
|
||||
"validating": "Validando...",
|
||||
"warning_upper": "¡ADVERTENCIA!",
|
||||
"output_filename": "Nombre del archivo:",
|
||||
"file_save_location": "El archivo se guardará en: ~/.config/ObsidianDragon/",
|
||||
"light": "Claro",
|
||||
"dark": "Oscuro",
|
||||
|
||||
# ---- Status ----
|
||||
"connected": "Conectado",
|
||||
"disconnected": "Desconectado",
|
||||
"connecting": "Conectando...",
|
||||
"confirmed": "Confirmada",
|
||||
"confirmations": "Confirmaciones",
|
||||
"not_connected_to_daemon": "No conectado al daemon",
|
||||
"waiting_for_daemon": "Esperando conexión al daemon...",
|
||||
"blockchain_syncing": "Sincronizando blockchain (%.1f%%)... Los saldos pueden ser inexactos.",
|
||||
"error": "Error",
|
||||
"success": "Éxito",
|
||||
"warning": "Advertencia",
|
||||
|
||||
# ---- Time ----
|
||||
"time_days_ago": "hace %d días",
|
||||
"time_hours_ago": "hace %d horas",
|
||||
"time_minutes_ago": "hace %d minutos",
|
||||
"time_seconds_ago": "hace %d segundos",
|
||||
|
||||
# ---- Transaction types/filters ----
|
||||
"sent_type": "Enviado",
|
||||
"sent_filter": "Enviado",
|
||||
"sent_upper": "ENVIADO",
|
||||
"received_label": "Recibido",
|
||||
"received_filter": "Recibido",
|
||||
"received_upper": "RECIBIDO",
|
||||
"mined_type": "Minado",
|
||||
"mined_filter": "Minado",
|
||||
"mined_upper": "MINADO",
|
||||
"immature_type": "Inmaduro",
|
||||
"mature": "Maduro",
|
||||
"recv_type": "Recibido",
|
||||
"all_filter": "Todos",
|
||||
"shielded_type": "Protegido",
|
||||
|
||||
# ---- Balance / Overview ----
|
||||
"address_upper": "DIRECCIÓN",
|
||||
"address_details": "Detalles de Dirección",
|
||||
"amount_details": "DETALLES DE CANTIDAD",
|
||||
"transactions_upper": "TRANSACCIONES",
|
||||
"addresses_appear_here": "Tus direcciones de recepción aparecerán aquí una vez conectado.",
|
||||
"wallet_empty": "Tu cartera está vacía",
|
||||
"wallet_empty_hint": "Cambia a Recibir para obtener tu dirección y empezar a recibir fondos.",
|
||||
"loading_addresses": "Cargando direcciones...",
|
||||
"no_addresses_match": "No hay direcciones que coincidan con el filtro",
|
||||
"no_addresses_with_balance": "No hay direcciones con saldo",
|
||||
"click_copy_address": "Clic para copiar dirección",
|
||||
"click_copy_uri": "Clic para copiar URI",
|
||||
"address_copied": "Dirección copiada al portapapeles",
|
||||
"about_dragonx": "Acerca de DragonX",
|
||||
"dragonx_green": "DragonX (Verde)",
|
||||
|
||||
# ---- Transactions tab ----
|
||||
"no_transactions": "No se encontraron transacciones",
|
||||
"no_matching": "No hay transacciones coincidentes",
|
||||
"showing_transactions": "Mostrando %d\u2013%d de %d transacciones (total: %zu)",
|
||||
"conf_count": "%d conf",
|
||||
"confirmations_display": "%d confirmaciones | %s",
|
||||
"txs_count": "%d txs",
|
||||
"view_details": "Ver Detalles",
|
||||
"full_details": "Detalles Completos",
|
||||
"export_csv": "Exportar CSV",
|
||||
"transaction_id": "ID DE TRANSACCIÓN",
|
||||
|
||||
# ---- Receive tab ----
|
||||
"select_receiving_address": "Seleccionar dirección de recepción...",
|
||||
"payment_request": "SOLICITUD DE PAGO",
|
||||
"recent_received": "RECIBIDOS RECIENTES",
|
||||
"no_recent_receives": "No hay recepciones recientes",
|
||||
"qr_unavailable": "QR no disponible",
|
||||
"clear_request": "Limpiar Solicitud",
|
||||
"clear_form_confirm": "¿Limpiar todos los campos del formulario?",
|
||||
"payment_request_copied": "Solicitud de pago copiada",
|
||||
"payment_uri_copied": "URI de pago copiada",
|
||||
"failed_create_shielded": "Error al crear dirección protegida",
|
||||
"failed_create_transparent": "Error al crear dirección transparente",
|
||||
"new_shielded_created": "Nueva dirección protegida creada",
|
||||
"new_transparent_created": "Nueva dirección transparente creada",
|
||||
|
||||
# ---- Send tab ----
|
||||
"send_sending_from": "ENVIANDO DESDE",
|
||||
"send_select_source": "Seleccionar dirección de origen...",
|
||||
"send_no_balance": "Sin saldo",
|
||||
"send_recipient": "DESTINATARIO",
|
||||
"send_amount_upper": "CANTIDAD",
|
||||
"send_amount": "Cantidad",
|
||||
"send_amount_details": "DETALLES DE CANTIDAD",
|
||||
"send_fee": "Comisión",
|
||||
"send_fee_low": "Baja",
|
||||
"send_fee_normal": "Normal",
|
||||
"send_fee_high": "Alta",
|
||||
"send_network_fee": "COMISIÓN DE RED",
|
||||
"send_total": "Total",
|
||||
"send_recent_sends": "ENVÍOS RECIENTES",
|
||||
"send_no_recent": "No hay envíos recientes",
|
||||
"send_clear_fields": "¿Limpiar todos los campos del formulario?",
|
||||
"send_yes_clear": "Sí, Limpiar",
|
||||
"send_keep": "Mantener",
|
||||
"send_form_restored": "Formulario restaurado",
|
||||
"send_valid_shielded": "Dirección protegida válida",
|
||||
"send_valid_transparent": "Dirección transparente válida",
|
||||
"send_exceeds_available": "Excede disponible (%.8f)",
|
||||
"send_submitting": "Enviando transacción...",
|
||||
"send_tx_sent": "¡Transacción enviada!",
|
||||
"send_tx_success": "¡Transacción enviada exitosamente!",
|
||||
"send_tx_failed": "Error en la transacción",
|
||||
"send_error_prefix": "Error: %s",
|
||||
"send_error_copied": "Error copiado al portapapeles",
|
||||
"send_copy_error": "Copiar Error",
|
||||
"send_dismiss": "Descartar",
|
||||
"send_txid_copied": "TxID copiado al portapapeles",
|
||||
"send_txid_label": "TxID: %s",
|
||||
"send_go_to_receive": "Ir a Recibir",
|
||||
"send_wallet_empty": "Tu cartera está vacía",
|
||||
"send_switch_to_receive": "Cambia a Recibir para obtener tu dirección y empezar a recibir fondos.",
|
||||
"send_tooltip_select_source": "Selecciona una dirección de origen primero",
|
||||
"send_tooltip_invalid_address": "Ingresa una dirección de destinatario válida",
|
||||
"send_tooltip_enter_amount": "Ingresa una cantidad a enviar",
|
||||
"send_tooltip_exceeds_balance": "La cantidad excede el saldo disponible",
|
||||
"send_tooltip_not_connected": "No conectado al daemon",
|
||||
"send_tooltip_syncing": "Espera a que se sincronice el blockchain",
|
||||
"send_tooltip_in_progress": "Transacción ya en progreso",
|
||||
"sending_from": "ENVIANDO DESDE",
|
||||
"select_source_address": "Seleccionar dirección de origen...",
|
||||
"recipient": "DESTINATARIO",
|
||||
"memo_optional": "MEMO (OPCIONAL)",
|
||||
"memo_upper": "MEMO",
|
||||
"network_fee": "COMISIÓN DE RED",
|
||||
"fee_low": "Baja",
|
||||
"fee_normal": "Normal",
|
||||
"fee_high": "Alta",
|
||||
"recent_sends": "ENVÍOS RECIENTES",
|
||||
"no_recent_sends": "No hay envíos recientes",
|
||||
"shielded_to": "PROTEGIDA PARA",
|
||||
"submitting_transaction": "Enviando transacción...",
|
||||
"transaction_sent_msg": "¡Transacción enviada!",
|
||||
"amount_exceeds_balance": "La cantidad excede el saldo",
|
||||
|
||||
# ---- Mining tab ----
|
||||
"mining_solo": "Solo",
|
||||
"mining_pool": "Pool",
|
||||
"mining_pool_url": "URL del Pool",
|
||||
"mining_pool_hashrate": "Hashrate del Pool",
|
||||
"mining_local_hashrate": "Hashrate Local",
|
||||
"mining_payout_address": "Dirección de Pago",
|
||||
"mining_payout_tooltip": "Dirección para recibir recompensas de minería",
|
||||
"mining_mine": "Minar",
|
||||
"mining_stop": "Detener",
|
||||
"mining_starting": "Iniciando...",
|
||||
"mining_stopping": "Deteniendo...",
|
||||
"mining_active": "Activo",
|
||||
"mining_connected": "Conectado",
|
||||
"mining_connecting": "Conectando...",
|
||||
"mining_network": "Red",
|
||||
"mining_shares": "Shares",
|
||||
"mining_uptime": "Tiempo activo",
|
||||
"mining_mining_addr": "Dir. Minería",
|
||||
"mining_est_block": "Bloque Est.",
|
||||
"mining_est_daily": "Diario Est.",
|
||||
"mining_today": "Hoy",
|
||||
"mining_yesterday": "Ayer",
|
||||
"mining_all_time": "Todo el Tiempo",
|
||||
"mining_recent_blocks": "BLOQUES RECIENTES",
|
||||
"mining_recent_payouts": "PAGOS DE POOL RECIENTES",
|
||||
"mining_no_blocks_yet": "Aún no se han encontrado bloques",
|
||||
"mining_no_payouts_yet": "Aún no hay pagos del pool",
|
||||
"mining_show_chart": "Gráfico",
|
||||
"mining_show_log": "Registro",
|
||||
"mining_chart_now": "Ahora",
|
||||
"mining_chart_start": "Inicio",
|
||||
"mining_chart_1m_ago": "hace 1m",
|
||||
"mining_chart_5m_ago": "hace 5m",
|
||||
"mining_save_pool_url": "Guardar URL del pool",
|
||||
"mining_save_payout_address": "Guardar dirección de pago",
|
||||
"mining_saved_pools": "Pools Guardados:",
|
||||
"mining_saved_addresses": "Direcciones Guardadas:",
|
||||
"mining_no_saved_pools": "No hay pools guardados",
|
||||
"mining_no_saved_addresses": "No hay direcciones guardadas",
|
||||
"mining_already_saved": "URL del pool ya guardada",
|
||||
"mining_remove": "Eliminar",
|
||||
"mining_reset_defaults": "Restablecer Valores",
|
||||
"mining_click": "Clic",
|
||||
"mining_to_save": "para guardar",
|
||||
"mining_click_copy_address": "Clic para copiar dirección",
|
||||
"mining_click_copy_block": "Clic para copiar hash de bloque",
|
||||
"mining_click_copy_difficulty": "Clic para copiar dificultad",
|
||||
"mining_address_copied": "Dirección de minería copiada",
|
||||
"mining_block_copied": "Hash de bloque copiado",
|
||||
"mining_difficulty_copied": "Dificultad copiada",
|
||||
"mining_open_in_explorer": "Abrir en explorador",
|
||||
"mining_starting_tooltip": "El minero está iniciando...",
|
||||
"mining_stopping_tooltip": "El minero está deteniéndose...",
|
||||
"mining_syncing_tooltip": "El blockchain está sincronizando...",
|
||||
"mining_idle_on_tooltip": "Desactivar minería en reposo",
|
||||
"mining_idle_off_tooltip": "Activar minería en reposo",
|
||||
"mining_stop_solo_for_pool": "Detener minería solo antes de iniciar minería en pool",
|
||||
"mining_stop_solo_for_pool_settings": "Detener minería solo para cambiar configuración del pool",
|
||||
"mining_filter_all": "Todos",
|
||||
"mining_filter_tip_all": "Mostrar todas las ganancias",
|
||||
"mining_filter_tip_solo": "Mostrar solo ganancias solo",
|
||||
"mining_filter_tip_pool": "Mostrar solo ganancias del pool",
|
||||
"local_hashrate": "Tasa Hash Local",
|
||||
"est_time_to_block": "Tiempo Est. al Bloque",
|
||||
"difficulty": "Dificultad",
|
||||
"current_price": "Precio Actual",
|
||||
"market_cap": "Cap. de Mercado",
|
||||
|
||||
# ---- Peers tab ----
|
||||
"peers_blockchain": "BLOCKCHAIN",
|
||||
"peers_blocks": "Bloques",
|
||||
"peers_connected": "Conectados",
|
||||
"peers_connected_count": "Conectados: %d",
|
||||
"peers_banned": "Bloqueados",
|
||||
"peers_banned_count": "Bloqueados: %d",
|
||||
"peers_upper": "NODOS",
|
||||
"peers_avg_ping": "Ping Prom.",
|
||||
"peers_best_block": "Mejor Bloque",
|
||||
"peers_hashrate": "Hashrate",
|
||||
"peers_longest": "Más Larga",
|
||||
"peers_longest_chain": "Cadena Más Larga",
|
||||
"peers_memory": "Memoria",
|
||||
"peers_notarized": "Notarizado",
|
||||
"peers_p2p_port": "Puerto P2P",
|
||||
"peers_protocol": "Protocolo",
|
||||
"peers_version": "Versión",
|
||||
"peers_in_out": "Ent/Sal",
|
||||
"peers_dir_in": "Ent",
|
||||
"peers_dir_out": "Sal",
|
||||
"peers_received": "Recibido",
|
||||
"peers_sent": "Enviado",
|
||||
"peers_refresh": "Actualizar",
|
||||
"peers_refresh_tooltip": "Actualizar lista de nodos",
|
||||
"peers_refreshing": "Actualizando...",
|
||||
"peers_no_connected": "No hay nodos conectados",
|
||||
"peers_no_banned": "No hay nodos bloqueados",
|
||||
"peers_ban_24h": "Bloquear Nodo 24h",
|
||||
"peers_unban": "Desbloquear",
|
||||
"peers_clear_all_bans": "Limpiar Todos los Bloqueos",
|
||||
"peers_copy_ip": "Copiar IP",
|
||||
"peers_click_copy": "Clic para copiar",
|
||||
"peers_hash_copied": "Hash copiado",
|
||||
"peers_no_tls": "Sin TLS",
|
||||
"peers_blocks_left": "%d bloques restantes",
|
||||
"peers_ban_score": "Puntuación: %d",
|
||||
"peers_tt_id": "ID: %d",
|
||||
"peers_tt_sent": "Enviado: %s",
|
||||
"peers_tt_received": "Recibido: %s",
|
||||
"peers_tt_services": "Servicios: %s",
|
||||
"peers_tt_start_height": "Altura Inicial: %d",
|
||||
"peers_tt_synced": "Sinc H/B: %d/%d",
|
||||
"peers_tt_tls_cipher": "TLS: %s",
|
||||
"connected_peers": "Nodos Conectados",
|
||||
"banned_peers": "Nodos Bloqueados",
|
||||
"ban": "Bloquear",
|
||||
"clear_all_bans": "Limpiar Todos los Bloqueos",
|
||||
"ip_address": "Dirección IP",
|
||||
|
||||
# ---- Market tab ----
|
||||
"market_btc_price": "PRECIO BTC",
|
||||
"market_24h_volume": "VOLUMEN 24H",
|
||||
"market_portfolio": "PORTAFOLIO",
|
||||
"market_pct_shielded": "%.0f%% Protegido",
|
||||
"market_attribution": "Datos de precios de NonKYC",
|
||||
"market_no_price": "Sin datos de precio",
|
||||
"market_no_history": "No hay historial de precios disponible",
|
||||
"market_price_unavailable": "Datos de precio no disponibles",
|
||||
"market_refresh_price": "Actualizar datos de precio",
|
||||
"market_trade_on": "Operar en %s",
|
||||
"market_now": "Ahora",
|
||||
"market_6h": "6h",
|
||||
"market_12h": "12h",
|
||||
"market_18h": "18h",
|
||||
"market_24h": "24h",
|
||||
"24h_change": "Cambio 24h",
|
||||
"24h_volume": "Volumen 24h",
|
||||
|
||||
# ---- Console tab ----
|
||||
"console_welcome": "Bienvenido a la Consola de ObsidianDragon",
|
||||
"console_type_help": "Escribe 'help' para ver los comandos disponibles",
|
||||
"console_available_commands": "Comandos disponibles:",
|
||||
"console_common_rpc": "Comandos RPC comunes:",
|
||||
"console_rpc_reference": "Referencia de Comandos RPC",
|
||||
"console_auto_scroll": "Auto-desplazamiento",
|
||||
"console_clear": "Limpiar",
|
||||
"console_clear_console": "Limpiar Consola",
|
||||
"console_cleared": "Consola limpiada",
|
||||
"console_commands": "Comandos",
|
||||
"console_completions": "Completaciones:",
|
||||
"console_tab_completion": "Tab para completar",
|
||||
"console_connected": "Conectado al daemon",
|
||||
"console_disconnected": "Desconectado del daemon",
|
||||
"console_not_connected": "Error: No conectado al daemon",
|
||||
"console_no_daemon": "Sin daemon",
|
||||
"console_daemon": "Daemon",
|
||||
"console_daemon_error": "¡Error del daemon!",
|
||||
"console_daemon_started": "Daemon iniciado",
|
||||
"console_daemon_stopped": "Daemon detenido",
|
||||
"console_errors": "Errores",
|
||||
"console_filter_hint": "Filtrar salida...",
|
||||
"console_search_commands": "Buscar comandos...",
|
||||
"console_copy_all": "Copiar Todo",
|
||||
"console_copy_selected": "Copiar",
|
||||
"console_select_all": "Seleccionar Todo",
|
||||
"console_zoom_in": "Acercar",
|
||||
"console_zoom_out": "Alejar",
|
||||
"console_show_daemon_output": "Mostrar salida del daemon",
|
||||
"console_show_errors_only": "Mostrar solo errores",
|
||||
"console_show_rpc_ref": "Mostrar referencia de comandos RPC",
|
||||
"console_capturing_output": "Capturando salida del daemon...",
|
||||
"console_starting_node": "Iniciando nodo...",
|
||||
"console_line_count": "%zu líneas",
|
||||
"console_new_lines": "%d nuevas líneas",
|
||||
"console_showing_lines": "Mostrando %zu de %zu líneas",
|
||||
"console_click_commands": "Clic en los comandos de arriba para insertarlos",
|
||||
"console_click_insert": "Clic para insertar",
|
||||
"console_click_insert_params": "Clic para insertar con parámetros",
|
||||
"console_close": "Cerrar",
|
||||
"console_status_running": "Ejecutando",
|
||||
"console_status_stopped": "Detenido",
|
||||
"console_status_starting": "Iniciando",
|
||||
"console_status_stopping": "Deteniendo",
|
||||
"console_status_error": "Error",
|
||||
"console_status_unknown": "Desconocido",
|
||||
"console_help_help": " help - Mostrar este mensaje de ayuda",
|
||||
"console_help_getinfo": " getinfo - Mostrar información del nodo",
|
||||
"console_help_getblockcount": " getblockcount - Mostrar altura actual del bloque",
|
||||
"console_help_getbalance": " getbalance - Mostrar saldo transparente",
|
||||
"console_help_gettotalbalance": " gettotalbalance - Mostrar saldo total",
|
||||
"console_help_getmininginfo": " getmininginfo - Mostrar estado de minería",
|
||||
"console_help_getpeerinfo": " getpeerinfo - Mostrar nodos conectados",
|
||||
"console_help_setgenerate": " setgenerate - Controlar minería",
|
||||
"console_help_stop": " stop - Detener el daemon",
|
||||
"console_help_clear": " clear - Limpiar la consola",
|
||||
|
||||
# ---- About dialog ----
|
||||
"about_title": "Acerca de ObsidianDragon",
|
||||
"about_edition": "Edición ImGui",
|
||||
"about_version": "Versión:",
|
||||
"about_imgui": "ImGui:",
|
||||
"about_build_date": "Fecha de Compilación:",
|
||||
"about_build_type": "Tipo de Compilación:",
|
||||
"about_debug": "Depuración",
|
||||
"about_release": "Producción",
|
||||
"about_daemon": "Daemon:",
|
||||
"about_chain": "Cadena:",
|
||||
"about_block_height": "Altura de Bloque:",
|
||||
"about_connections": "Conexiones:",
|
||||
"about_peers_count": "%zu nodos",
|
||||
"about_credits": "Créditos",
|
||||
"about_license": "Licencia",
|
||||
"about_license_text": "Este software se distribuye bajo la Licencia Pública General de GNU v3 (GPLv3). Usted es libre de usar, modificar y distribuir este software bajo los términos de la licencia.",
|
||||
"about_website": "Sitio Web",
|
||||
"about_github": "GitHub",
|
||||
"about_block_explorer": "Explorador de Bloques",
|
||||
|
||||
# ---- Address Book dialog ----
|
||||
"address_book_title": "Libreta de Direcciones",
|
||||
"address_book_add_new": "Agregar Nueva",
|
||||
"address_book_add": "Agregar Dirección",
|
||||
"address_book_edit": "Editar Dirección",
|
||||
"address_book_empty": "No hay direcciones guardadas. Haz clic en 'Agregar Nueva' para añadir una.",
|
||||
"address_book_count": "%zu direcciones guardadas",
|
||||
"address_book_deleted": "Entrada eliminada",
|
||||
"address_book_added": "Dirección agregada a la libreta",
|
||||
"address_book_exists": "La dirección ya existe en la libreta",
|
||||
"address_book_updated": "Dirección actualizada",
|
||||
"address_book_update_failed": "Error al actualizar - la dirección puede estar duplicada",
|
||||
|
||||
# ---- Backup dialog ----
|
||||
"backup_title": "Respaldar Cartera",
|
||||
"backup_description": "Crea un respaldo de tu archivo wallet.dat. Este archivo contiene todas tus claves privadas e historial de transacciones. Guarda el respaldo en un lugar seguro.",
|
||||
"backup_destination": "Destino del respaldo:",
|
||||
"backup_wallet_not_found": "Advertencia: wallet.dat no encontrado en la ubicación esperada",
|
||||
"backup_create": "Crear Respaldo",
|
||||
"backup_created": "Respaldo de cartera creado",
|
||||
"backup_backing_up": "Respaldando...",
|
||||
"backup_tips": "Consejos:",
|
||||
"backup_tip_external": "Guarda respaldos en unidades externas o almacenamiento en la nube",
|
||||
"backup_tip_multiple": "Crea múltiples respaldos en diferentes ubicaciones",
|
||||
"backup_tip_test": "Prueba restaurar desde el respaldo periódicamente",
|
||||
"backup_wallet": "Respaldar Cartera...",
|
||||
|
||||
# ---- Block Info dialog ----
|
||||
"block_info_title": "Información del Bloque",
|
||||
"block_height": "Altura del Bloque:",
|
||||
"block_get_info": "Obtener Info del Bloque",
|
||||
"block_hash": "Hash del Bloque:",
|
||||
"block_timestamp": "Fecha y Hora:",
|
||||
"block_transactions": "Transacciones:",
|
||||
"block_size": "Tamaño:",
|
||||
"block_bits": "Bits:",
|
||||
"block_merkle_root": "Raíz Merkle:",
|
||||
"block_previous": "Bloque Anterior:",
|
||||
"block_next": "Bloque Siguiente:",
|
||||
"block_click_prev": "Clic para ver bloque anterior",
|
||||
"block_click_next": "Clic para ver bloque siguiente",
|
||||
"block_nav_prev": "<< Anterior",
|
||||
"block_nav_next": "Siguiente >>",
|
||||
|
||||
# ---- Export Keys dialog ----
|
||||
"export_keys_title": "Exportar Todas las Claves Privadas",
|
||||
"export_keys_danger": "PELIGRO: ¡Esto exportará TODAS las claves privadas de tu cartera! Cualquiera con acceso a este archivo puede robar tus fondos. Guárdalo de forma segura y elimínalo después de usar.",
|
||||
"export_keys_options": "Opciones de exportación:",
|
||||
"export_keys_include_z": "Incluir direcciones Z (protegidas)",
|
||||
"export_keys_include_t": "Incluir direcciones T (transparentes)",
|
||||
"export_keys_btn": "Exportar Claves",
|
||||
"export_keys_success": "Claves exportadas exitosamente",
|
||||
"export_private_key": "Exportar Clave Privada",
|
||||
"export_viewing_key": "Exportar Clave de Vista",
|
||||
|
||||
# ---- Export Transactions dialog ----
|
||||
"export_tx_title": "Exportar Transacciones a CSV",
|
||||
"export_tx_count": "Exportar %zu transacciones a archivo CSV.",
|
||||
"export_tx_none": "No hay transacciones para exportar",
|
||||
"export_tx_file_fail": "Error al crear archivo CSV",
|
||||
"export_tx_success": "Transacciones exportadas exitosamente",
|
||||
|
||||
# ---- Import Key dialog ----
|
||||
"import_key_title": "Importar Clave Privada",
|
||||
"import_key_warning": "Advertencia: ¡Nunca compartas tus claves privadas! Importar claves de fuentes no confiables puede comprometer tu cartera.",
|
||||
"import_key_label": "Clave(s) Privada(s):",
|
||||
"import_key_tooltip": "Ingresa una o más claves privadas, una por línea.\nSoporta claves de direcciones z y t.\nLas líneas que empiezan con # se tratan como comentarios.",
|
||||
"import_key_btn": "Importar Clave(s)",
|
||||
"import_key_no_valid": "No se encontraron claves válidas en la entrada",
|
||||
"import_key_success": "Claves importadas exitosamente",
|
||||
"import_key_rescan": "Re-escanear blockchain después de importar",
|
||||
"import_key_start_height": "Altura inicial:",
|
||||
"import_key_full_rescan": "(0 = re-escaneo completo)",
|
||||
"import_key_formats": "Formatos de clave soportados:",
|
||||
"import_key_z_format": "Claves de gasto de direcciones Z (secret-extended-key-...)",
|
||||
"import_key_t_format": "Claves privadas WIF de direcciones T",
|
||||
"import_private_key": "Importar Clave Privada...",
|
||||
"invalid_address": "Formato de dirección inválido",
|
||||
|
||||
# ---- Key Export dialog ----
|
||||
"key_export_private_key": "Clave Privada:",
|
||||
"key_export_viewing_key": "Clave de Vista:",
|
||||
"key_export_private_warning": "¡Mantén esta clave en SECRETO! Cualquiera con esta clave puede gastar tus fondos. Nunca la compartas en línea ni con personas no confiables.",
|
||||
"key_export_viewing_warning": "Esta clave de vista permite a otros ver tus transacciones entrantes y saldo, pero NO gastar tus fondos. Comparte solo con personas de confianza.",
|
||||
"key_export_fetching": "Obteniendo clave de la cartera...",
|
||||
"key_export_reveal": "Revelar Clave",
|
||||
|
||||
# ---- QR dialog ----
|
||||
"qr_title": "Código QR",
|
||||
"qr_failed": "Error al generar código QR",
|
||||
|
||||
# ---- Request Payment dialog ----
|
||||
"request_title": "Solicitar Pago",
|
||||
"request_description": "Genera una solicitud de pago que otros pueden escanear o copiar. El código QR contiene tu dirección y cantidad/memo opcionales.",
|
||||
"request_receive_address": "Dirección de Recepción:",
|
||||
"request_select_address": "Seleccionar dirección...",
|
||||
"request_shielded_addrs": "-- Direcciones Protegidas --",
|
||||
"request_transparent_addrs": "-- Direcciones Transparentes --",
|
||||
"request_amount": "Cantidad (opcional):",
|
||||
"request_label": "Etiqueta (opcional):",
|
||||
"request_memo": "Memo (opcional):",
|
||||
"request_payment_uri": "URI de Pago:",
|
||||
"request_copy_uri": "Copiar URI",
|
||||
"request_uri_copied": "URI de pago copiada al portapapeles",
|
||||
|
||||
# ---- Shield dialog ----
|
||||
"shield_title": "Proteger Recompensas de Coinbase",
|
||||
"shield_description": "Protege tus recompensas de minería enviando salidas coinbase de direcciones transparentes a una dirección protegida. Esto mejora la privacidad ocultando tus ingresos de minería.",
|
||||
"shield_from_address": "Dirección de Origen:",
|
||||
"shield_wildcard_hint": "Usa '*' para proteger desde todas las direcciones transparentes",
|
||||
"shield_to_address": "Dirección Destino (Protegida):",
|
||||
"shield_select_z": "Seleccionar dirección z...",
|
||||
"shield_utxo_limit": "Límite UTXO:",
|
||||
"shield_max_utxos": "UTXOs máximos por operación",
|
||||
"shield_funds": "Proteger Fondos",
|
||||
"shield_started": "Operación de protección iniciada",
|
||||
"shield_check_status": "Verificar Estado",
|
||||
"shield_completed": "¡Operación completada exitosamente!",
|
||||
"shield_merge_done": "¡Protección/fusión completada!",
|
||||
"shield_in_progress": "Operación en progreso...",
|
||||
"merge_title": "Fusionar a Dirección",
|
||||
"merge_description": "Fusiona múltiples UTXOs en una sola dirección protegida. Esto puede ayudar a reducir el tamaño de la cartera y mejorar la privacidad.",
|
||||
"merge_funds": "Fusionar Fondos",
|
||||
"merge_started": "Operación de fusión iniciada",
|
||||
|
||||
# ---- Transaction Details dialog ----
|
||||
"tx_details_title": "Detalles de Transacción",
|
||||
"tx_received": "RECIBIDO",
|
||||
"tx_sent": "ENVIADO",
|
||||
"tx_mined": "MINADO",
|
||||
"tx_immature": "INMADURO",
|
||||
"tx_confirmations": "%d confirmaciones",
|
||||
"tx_id_label": "ID de Transacción:",
|
||||
"tx_to_address": "Dirección Destino:",
|
||||
"tx_from_address": "Dirección Origen:",
|
||||
"tx_view_explorer": "Ver en Explorador",
|
||||
"pending": "Pendiente",
|
||||
|
||||
# ---- Validate Address dialog ----
|
||||
"validate_title": "Validar Dirección",
|
||||
"validate_description": "Ingresa una dirección DragonX para verificar si es válida y si pertenece a esta cartera.",
|
||||
"validate_btn": "Validar",
|
||||
"validate_results": "Resultados:",
|
||||
"validate_status": "Estado:",
|
||||
"validate_valid": "VÁLIDA",
|
||||
"validate_invalid": "INVÁLIDA",
|
||||
"validate_type": "Tipo:",
|
||||
"validate_ownership": "Propiedad:",
|
||||
"validate_is_mine": "Esta cartera es dueña de esta dirección",
|
||||
"validate_not_mine": "No es propiedad de esta cartera",
|
||||
"validate_shielded_type": "Protegida (dirección z)",
|
||||
"validate_transparent_type": "Transparente (dirección t)",
|
||||
|
||||
# ---- Misc ----
|
||||
"transaction_sent": "Transacción enviada exitosamente",
|
||||
}
|
||||
|
||||
# Load existing to preserve anything we might have missed
|
||||
import os
|
||||
existing_path = os.path.join(os.path.dirname(__file__), '..', 'res', 'lang', 'es.json')
|
||||
out_path = existing_path
|
||||
|
||||
with open(out_path, 'w', encoding='utf-8') as f:
|
||||
json.dump(dict(sorted(es.items())), f, indent=4, ensure_ascii=False)
|
||||
f.write('\n')
|
||||
|
||||
print(f"Wrote {len(es)} Spanish translations to {out_path}")
|
||||
Reference in New Issue
Block a user