feat(ui): treat transparent addresses as mining-only addresses
DragonX is a private chain (-ac_private=1): consensus rejects any
non-coinbase output to a transparent address, so a t-address can only
ever receive mining rewards, and its coins can only move to a shielded
address. The wallet treated them like ordinary recipients.
Block paying one:
- Send: a transparent recipient shows "Mining address - can't be paid"
and disables Review Send (tooltip explains; ask for a zs... address).
Typing, paste, contacts and payment URIs all go through this field.
- Overview drag-to-transfer: a mining-address row is never a transfer
target (it only reorders).
- Pool payout must be shielded (pools pay with ordinary transactions):
field tooltip, disabled Start button and the start check say why.
- isValidRecipientAddress() is now shielded-only; new isDragonXAddress()
and classifyRecipient() (Shielded / MiningOnly / Invalid).
Call them mining addresses:
- Overview: "Mining rewards" card (amber "Not yet shielded" when there
is a balance; hover explains; click opens the Shield dialog), "New
mining address" button with a tooltip, rows typed "Mining".
- QR / label dialogs, portfolio filter, contact badge ("Mining only"),
Receive notifications.
i18n: 17 new keys in all 8 languages, 12 dead keys removed, CJK subset
rebuilt. Tests: recipient classification, translation completeness.
UI sweep: new "send-mining-recipient" target.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
+17
-12
@@ -25,6 +25,7 @@
|
|||||||
"about_website": "Webseite",
|
"about_website": "Webseite",
|
||||||
"acrylic": "Acryl",
|
"acrylic": "Acryl",
|
||||||
"add": "Hinzufügen",
|
"add": "Hinzufügen",
|
||||||
|
"addr_type_mining": "Mining",
|
||||||
"address": "Adresse",
|
"address": "Adresse",
|
||||||
"address_book_add": "Adresse hinzufügen",
|
"address_book_add": "Adresse hinzufügen",
|
||||||
"address_book_add_new": "Neue hinzufügen",
|
"address_book_add_new": "Neue hinzufügen",
|
||||||
@@ -172,21 +173,20 @@
|
|||||||
"balance_history_collecting": "Guthabenverlauf — Daten werden gesammelt...",
|
"balance_history_collecting": "Guthabenverlauf — Daten werden gesammelt...",
|
||||||
"balance_layout": "Guthaben-Layout",
|
"balance_layout": "Guthaben-Layout",
|
||||||
"balance_layout_switched": "Layout: %s",
|
"balance_layout_switched": "Layout: %s",
|
||||||
|
"balance_mining_fmt": "Mining-Belohnungen: %.8f",
|
||||||
"balance_mining_rate": "Schürfe %s",
|
"balance_mining_rate": "Schürfe %s",
|
||||||
"balance_shielded_fmt": "Abgeschirmt: %.8f",
|
"balance_shielded_fmt": "Abgeschirmt: %.8f",
|
||||||
"balance_syncing_pct": "Synchronisiere %.1f%%",
|
"balance_syncing_pct": "Synchronisiere %.1f%%",
|
||||||
"balance_transparent_fmt": "Transparent: %.8f",
|
|
||||||
"baltab_market": "Markt",
|
"baltab_market": "Markt",
|
||||||
"baltab_market_price_4dp": "Markt: $%.4f",
|
"baltab_market_price_4dp": "Markt: $%.4f",
|
||||||
"baltab_market_price_8dp": "Markt: $%.8f",
|
"baltab_market_price_8dp": "Markt: $%.8f",
|
||||||
|
"baltab_mining_addresses_count": "%d Mining-Adressen",
|
||||||
|
"baltab_mining_amount": "Mining-Belohnungen %.8f",
|
||||||
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
||||||
"baltab_pct_of_total_zaddr": "%.0f%% des Gesamtbetrags · %d Z-addr",
|
"baltab_pct_of_total_zaddr": "%.0f%% des Gesamtbetrags · %d Z-addr",
|
||||||
"baltab_shielded": "Geschützt",
|
"baltab_shielded": "Geschützt",
|
||||||
"baltab_shielded_amount": "Geschützt %.8f",
|
"baltab_shielded_amount": "Geschützt %.8f",
|
||||||
"baltab_t_addresses_count": "%d T-Adressen",
|
|
||||||
"baltab_total_balance": "Gesamtguthaben",
|
"baltab_total_balance": "Gesamtguthaben",
|
||||||
"baltab_transparent": "Transparent",
|
|
||||||
"baltab_transparent_amount": "Transparent %.8f",
|
|
||||||
"ban": "Sperren",
|
"ban": "Sperren",
|
||||||
"banned_peers": "Gesperrte Peers",
|
"banned_peers": "Gesperrte Peers",
|
||||||
"block": "Block",
|
"block": "Block",
|
||||||
@@ -511,7 +511,7 @@
|
|||||||
"contact_avatar_image_hint": "Das Bild wird in die App kopiert, damit es verfügbar bleibt, wenn das Original verschoben wird.",
|
"contact_avatar_image_hint": "Das Bild wird in die App kopiert, damit es verfügbar bleibt, wenn das Original verschoben wird.",
|
||||||
"contact_avatar_remove": "Entfernen",
|
"contact_avatar_remove": "Entfernen",
|
||||||
"contact_avatar_shielded": "Abgeschirmt",
|
"contact_avatar_shielded": "Abgeschirmt",
|
||||||
"contact_avatar_transparent": "Transparent",
|
"contact_chip_mining": "Nur Mining",
|
||||||
"contact_global": "In jeder Wallet anzeigen (globaler Kontakt)",
|
"contact_global": "In jeder Wallet anzeigen (globaler Kontakt)",
|
||||||
"contact_global_badge_tt": "Globaler Kontakt — in jeder Wallet sichtbar",
|
"contact_global_badge_tt": "Globaler Kontakt — in jeder Wallet sichtbar",
|
||||||
"contact_global_tt": "Ein: Dieser Kontakt bleibt sichtbar, egal welche Wallet Sie laden. Aus: Er gehört nur zur aktuellen Wallet.",
|
"contact_global_tt": "Ein: Dieser Kontakt bleibt sichtbar, egal welche Wallet Sie laden. Aus: Er gehört nur zur aktuellen Wallet.",
|
||||||
@@ -707,8 +707,8 @@
|
|||||||
"export_tx_success": "Transaktionen erfolgreich exportiert",
|
"export_tx_success": "Transaktionen erfolgreich exportiert",
|
||||||
"export_tx_title": "Transaktionen als CSV exportieren",
|
"export_tx_title": "Transaktionen als CSV exportieren",
|
||||||
"export_viewing_key": "Betrachtungsschlüssel exportieren",
|
"export_viewing_key": "Betrachtungsschlüssel exportieren",
|
||||||
|
"failed_create_mining_address": "Mining-Adresse konnte nicht erstellt werden",
|
||||||
"failed_create_shielded": "Abgeschirmte Adresse konnte nicht erstellt werden",
|
"failed_create_shielded": "Abgeschirmte Adresse konnte nicht erstellt werden",
|
||||||
"failed_create_transparent": "Transparente Adresse konnte nicht erstellt werden",
|
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"faq_d_mgmt_1_a": "Der eingebettete Node startet automatisch mit der Wallet und stoppt bei Bedarf, sodass Sie ihn normalerweise nicht manuell verwalten müssen. Erweiterte Steuerelemente (einschließlich des Neustarts des Daemons) finden Sie unter Einstellungen > Node & Sicherheit.",
|
"faq_d_mgmt_1_a": "Der eingebettete Node startet automatisch mit der Wallet und stoppt bei Bedarf, sodass Sie ihn normalerweise nicht manuell verwalten müssen. Erweiterte Steuerelemente (einschließlich des Neustarts des Daemons) finden Sie unter Einstellungen > Node & Sicherheit.",
|
||||||
"faq_d_mgmt_1_q": "Wie starte oder stoppe ich den Node?",
|
"faq_d_mgmt_1_q": "Wie starte oder stoppe ich den Node?",
|
||||||
@@ -1226,6 +1226,7 @@
|
|||||||
"miner_fee": "Miner-Gebühr",
|
"miner_fee": "Miner-Gebühr",
|
||||||
"mining": "Mining",
|
"mining": "Mining",
|
||||||
"mining_active": "Aktiv",
|
"mining_active": "Aktiv",
|
||||||
|
"mining_address": "Mining-Adresse",
|
||||||
"mining_address_copied": "Mining-Adresse kopiert",
|
"mining_address_copied": "Mining-Adresse kopiert",
|
||||||
"mining_all_time": "Gesamt",
|
"mining_all_time": "Gesamt",
|
||||||
"mining_already_saved": "Pool-URL bereits gespeichert",
|
"mining_already_saved": "Pool-URL bereits gespeichert",
|
||||||
@@ -1239,6 +1240,8 @@
|
|||||||
"mining_benchmark_testing": "Testen",
|
"mining_benchmark_testing": "Testen",
|
||||||
"mining_benchmark_tooltip": "Optimale Thread-Anzahl für diese CPU finden",
|
"mining_benchmark_tooltip": "Optimale Thread-Anzahl für diese CPU finden",
|
||||||
"mining_block_copied": "Block-Hash kopiert",
|
"mining_block_copied": "Block-Hash kopiert",
|
||||||
|
"mining_card_click_to_shield": "Klicken, um gereifte Belohnungen jetzt abzuschirmen.",
|
||||||
|
"mining_card_tooltip": "Solo-Mining-Belohnungen gehen an Ihre Mining-Adressen (transparent, R…). Diese Adressen können keine Zahlungen empfangen. Belohnungen werden automatisch abgeschirmt, sobald sie gereift sind.",
|
||||||
"mining_chart_1m_ago": "vor 1m",
|
"mining_chart_1m_ago": "vor 1m",
|
||||||
"mining_chart_5m_ago": "vor 5m",
|
"mining_chart_5m_ago": "vor 5m",
|
||||||
"mining_chart_now": "Jetzt",
|
"mining_chart_now": "Jetzt",
|
||||||
@@ -1283,6 +1286,7 @@
|
|||||||
"mining_payout_address": "Auszahlungsadresse",
|
"mining_payout_address": "Auszahlungsadresse",
|
||||||
"mining_payout_foreign": "⚠ Diese Auszahlungsadresse befindet sich nicht in Ihrer aktuellen Wallet — geschürfte Belohnungen würden an eine andere Wallet gehen. Aktualisieren Sie sie, wenn Sie die Wallet gewechselt haben.",
|
"mining_payout_foreign": "⚠ Diese Auszahlungsadresse befindet sich nicht in Ihrer aktuellen Wallet — geschürfte Belohnungen würden an eine andere Wallet gehen. Aktualisieren Sie sie, wenn Sie die Wallet gewechselt haben.",
|
||||||
"mining_payout_invalid": "Keine gültige DragonX-Adresse — vor dem Start korrigieren, sonst gehen die Mining-Belohnungen verloren.",
|
"mining_payout_invalid": "Keine gültige DragonX-Adresse — vor dem Start korrigieren, sonst gehen die Mining-Belohnungen verloren.",
|
||||||
|
"mining_payout_needs_shielded": "Pools zahlen mit gewöhnlichen Transaktionen aus, die bei DragonX keine Mining-Adresse (transparent, R…) erreichen können. Verwenden Sie eine abgeschirmte Adresse (sie beginnt mit zs) als Auszahlungsadresse.",
|
||||||
"mining_payout_tooltip": "Adresse für Mining-Belohnungen",
|
"mining_payout_tooltip": "Adresse für Mining-Belohnungen",
|
||||||
"mining_pool": "Pool",
|
"mining_pool": "Pool",
|
||||||
"mining_pool_fee": "Gebühr",
|
"mining_pool_fee": "Gebühr",
|
||||||
@@ -1295,6 +1299,8 @@
|
|||||||
"mining_refresh": "Aktualisieren",
|
"mining_refresh": "Aktualisieren",
|
||||||
"mining_remove": "Entfernen",
|
"mining_remove": "Entfernen",
|
||||||
"mining_reset_defaults": "Standardwerte zurücksetzen",
|
"mining_reset_defaults": "Standardwerte zurücksetzen",
|
||||||
|
"mining_rewards": "Mining-Belohnungen",
|
||||||
|
"mining_rewards_unshielded": "Noch nicht abgeschirmt",
|
||||||
"mining_save_payout_address": "Auszahlungsadresse speichern",
|
"mining_save_payout_address": "Auszahlungsadresse speichern",
|
||||||
"mining_save_pool_url": "Pool-URL speichern",
|
"mining_save_pool_url": "Pool-URL speichern",
|
||||||
"mining_saved_addresses": "Gespeicherte Adressen:",
|
"mining_saved_addresses": "Gespeicherte Adressen:",
|
||||||
@@ -1328,10 +1334,10 @@
|
|||||||
"network_fee": "NETZWERKGEBÜHR",
|
"network_fee": "NETZWERKGEBÜHR",
|
||||||
"network_hashrate": "Netzwerk-Hashrate",
|
"network_hashrate": "Netzwerk-Hashrate",
|
||||||
"new": "+ Neu",
|
"new": "+ Neu",
|
||||||
|
"new_mining_address": "Neue Mining-Adresse",
|
||||||
|
"new_mining_address_created": "Neue Mining-Adresse erstellt",
|
||||||
"new_shielded_created": "Neue abgeschirmte Adresse erstellt",
|
"new_shielded_created": "Neue abgeschirmte Adresse erstellt",
|
||||||
"new_t_address": "Neue T-Adresse",
|
|
||||||
"new_t_transparent": "Neue t-Adresse (Transparent)",
|
"new_t_transparent": "Neue t-Adresse (Transparent)",
|
||||||
"new_transparent_created": "Neue transparente Adresse erstellt",
|
|
||||||
"new_z_address": "Neue Z-Adresse",
|
"new_z_address": "Neue Z-Adresse",
|
||||||
"new_z_shielded": "Neue z-Adresse (Abgeschirmt)",
|
"new_z_shielded": "Neue z-Adresse (Abgeschirmt)",
|
||||||
"no_addresses": "Keine Adressen gefunden. Erstellen Sie eine mit den Schaltflächen oben.",
|
"no_addresses": "Keine Adressen gefunden. Erstellen Sie eine mit den Schaltflächen oben.",
|
||||||
@@ -1696,6 +1702,8 @@
|
|||||||
"send_from_this_address": "Von dieser Adresse senden",
|
"send_from_this_address": "Von dieser Adresse senden",
|
||||||
"send_go_to_receive": "Zum Empfangen",
|
"send_go_to_receive": "Zum Empfangen",
|
||||||
"send_keep": "Behalten",
|
"send_keep": "Behalten",
|
||||||
|
"send_mining_addr_blocked": "Dies ist eine Mining-Adresse (transparent). Bei DragonX können solche Adressen nur Mining-Belohnungen empfangen – das Netzwerk lehnt Zahlungen an sie ab. Bitten Sie den Empfänger um eine abgeschirmte Adresse (sie beginnt mit zs).",
|
||||||
|
"send_mining_addr_short": "Mining-Adresse – kann keine Zahlungen empfangen",
|
||||||
"send_network_fee": "NETZWERKGEBÜHR",
|
"send_network_fee": "NETZWERKGEBÜHR",
|
||||||
"send_no_balance": "Kein Guthaben",
|
"send_no_balance": "Kein Guthaben",
|
||||||
"send_no_recent": "Keine kürzlichen Sendungen",
|
"send_no_recent": "Keine kürzlichen Sendungen",
|
||||||
@@ -1723,7 +1731,6 @@
|
|||||||
"send_txid_copied": "TxID in Zwischenablage kopiert",
|
"send_txid_copied": "TxID in Zwischenablage kopiert",
|
||||||
"send_txid_label": "TxID: %s",
|
"send_txid_label": "TxID: %s",
|
||||||
"send_valid_shielded": "Gültige abgeschirmte Adresse",
|
"send_valid_shielded": "Gültige abgeschirmte Adresse",
|
||||||
"send_valid_transparent": "Gültige transparente Adresse",
|
|
||||||
"send_wallet_empty": "Ihre Wallet ist leer",
|
"send_wallet_empty": "Ihre Wallet ist leer",
|
||||||
"send_yes_clear": "Ja, leeren",
|
"send_yes_clear": "Ja, leeren",
|
||||||
"sender_balance": "Absender: %.8f → %.8f DRGX",
|
"sender_balance": "Absender: %.8f → %.8f DRGX",
|
||||||
@@ -1929,7 +1936,6 @@
|
|||||||
"switch_stopnode_title": "Laufenden Knoten stoppen?",
|
"switch_stopnode_title": "Laufenden Knoten stoppen?",
|
||||||
"switch_stopnode_warn": "Es läuft bereits ein Knoten, den diese Wallet nicht gestartet hat.",
|
"switch_stopnode_warn": "Es läuft bereits ein Knoten, den diese Wallet nicht gestartet hat.",
|
||||||
"syncing": "Synchronisiere...",
|
"syncing": "Synchronisiere...",
|
||||||
"t_address": "T-Adresse",
|
|
||||||
"t_addresses": "T-Adressen",
|
"t_addresses": "T-Adressen",
|
||||||
"test_connection": "Testen",
|
"test_connection": "Testen",
|
||||||
"theme": "Design",
|
"theme": "Design",
|
||||||
@@ -1964,8 +1970,6 @@
|
|||||||
"transfer_sent": "Überweisung gesendet",
|
"transfer_sent": "Überweisung gesendet",
|
||||||
"transfer_sent_desc": "Ihre Überweisung wurde an das Netzwerk gesendet.",
|
"transfer_sent_desc": "Ihre Überweisung wurde an das Netzwerk gesendet.",
|
||||||
"transfer_to": "Überweisen an:",
|
"transfer_to": "Überweisen an:",
|
||||||
"transparent": "Transparent",
|
|
||||||
"transparent_address": "Transparente Adresse",
|
|
||||||
"try_again": "Erneut versuchen",
|
"try_again": "Erneut versuchen",
|
||||||
"tt_addr_url": "Basis-URL zum Anzeigen von Adressen in einem Block-Explorer",
|
"tt_addr_url": "Basis-URL zum Anzeigen von Adressen in einem Block-Explorer",
|
||||||
"tt_address_book": "Gespeicherte Adressen für schnelles Senden verwalten",
|
"tt_address_book": "Gespeicherte Adressen für schnelles Senden verwalten",
|
||||||
@@ -2037,6 +2041,7 @@
|
|||||||
"tt_low_spec": "Alle aufwendigen visuellen Effekte deaktivieren\\nHotkey: Ctrl+Shift+Down",
|
"tt_low_spec": "Alle aufwendigen visuellen Effekte deaktivieren\\nHotkey: Ctrl+Shift+Down",
|
||||||
"tt_merge": "Mehrere UTXOs einer Adresse zusammenführen",
|
"tt_merge": "Mehrere UTXOs einer Adresse zusammenführen",
|
||||||
"tt_mine_idle": "Mining automatisch starten, wenn das\\nSystem inaktiv ist (keine Tastatur-/Mauseingabe)",
|
"tt_mine_idle": "Mining automatisch starten, wenn das\\nSystem inaktiv ist (keine Tastatur-/Mauseingabe)",
|
||||||
|
"tt_new_mining_address": "Erstellt eine transparente Adresse (R…) für Solo-Mining-Belohnungen. Sie kann keine Zahlungen empfangen – teilen Sie dafür eine abgeschirmte Adresse.",
|
||||||
"tt_noise": "Körnungstextur-Intensität (0% = aus, 100% = maximum)",
|
"tt_noise": "Körnungstextur-Intensität (0% = aus, 100% = maximum)",
|
||||||
"tt_open_app_dir": "Den ObsidianDragon-Ordner (Einstellungen, Themes, Logs) im Dateimanager öffnen",
|
"tt_open_app_dir": "Den ObsidianDragon-Ordner (Einstellungen, Themes, Logs) im Dateimanager öffnen",
|
||||||
"tt_open_data_dir": "Den Ordner mit Ihren Wallet- und Blockchain-Daten im Dateimanager öffnen",
|
"tt_open_data_dir": "Den Ordner mit Ihren Wallet- und Blockchain-Daten im Dateimanager öffnen",
|
||||||
|
|||||||
+17
-12
@@ -25,6 +25,7 @@
|
|||||||
"about_website": "Sitio Web",
|
"about_website": "Sitio Web",
|
||||||
"acrylic": "Acrílico",
|
"acrylic": "Acrílico",
|
||||||
"add": "Agregar",
|
"add": "Agregar",
|
||||||
|
"addr_type_mining": "Minería",
|
||||||
"address": "Dirección",
|
"address": "Dirección",
|
||||||
"address_book_add": "Agregar Dirección",
|
"address_book_add": "Agregar Dirección",
|
||||||
"address_book_add_new": "Agregar Nueva",
|
"address_book_add_new": "Agregar Nueva",
|
||||||
@@ -172,21 +173,20 @@
|
|||||||
"balance_history_collecting": "Historial de saldo — recopilando datos...",
|
"balance_history_collecting": "Historial de saldo — recopilando datos...",
|
||||||
"balance_layout": "Diseño de Saldo",
|
"balance_layout": "Diseño de Saldo",
|
||||||
"balance_layout_switched": "Diseño: %s",
|
"balance_layout_switched": "Diseño: %s",
|
||||||
|
"balance_mining_fmt": "Recompensas de minería: %.8f",
|
||||||
"balance_mining_rate": "Minando %s",
|
"balance_mining_rate": "Minando %s",
|
||||||
"balance_shielded_fmt": "Protegido: %.8f",
|
"balance_shielded_fmt": "Protegido: %.8f",
|
||||||
"balance_syncing_pct": "Sincronizando %.1f%%",
|
"balance_syncing_pct": "Sincronizando %.1f%%",
|
||||||
"balance_transparent_fmt": "Transparente: %.8f",
|
|
||||||
"baltab_market": "Mercado",
|
"baltab_market": "Mercado",
|
||||||
"baltab_market_price_4dp": "Mercado: $%.4f",
|
"baltab_market_price_4dp": "Mercado: $%.4f",
|
||||||
"baltab_market_price_8dp": "Mercado: $%.8f",
|
"baltab_market_price_8dp": "Mercado: $%.8f",
|
||||||
|
"baltab_mining_addresses_count": "%d direcciones de minería",
|
||||||
|
"baltab_mining_amount": "Recompensas de minería %.8f",
|
||||||
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
||||||
"baltab_pct_of_total_zaddr": "%.0f%% del total · %d Z-addr",
|
"baltab_pct_of_total_zaddr": "%.0f%% del total · %d Z-addr",
|
||||||
"baltab_shielded": "Blindado",
|
"baltab_shielded": "Blindado",
|
||||||
"baltab_shielded_amount": "Blindado %.8f",
|
"baltab_shielded_amount": "Blindado %.8f",
|
||||||
"baltab_t_addresses_count": "%d T-addresses",
|
|
||||||
"baltab_total_balance": "Saldo total",
|
"baltab_total_balance": "Saldo total",
|
||||||
"baltab_transparent": "Transparente",
|
|
||||||
"baltab_transparent_amount": "Transparente %.8f",
|
|
||||||
"ban": "Bloquear",
|
"ban": "Bloquear",
|
||||||
"banned_peers": "Nodos Bloqueados",
|
"banned_peers": "Nodos Bloqueados",
|
||||||
"block": "Bloque",
|
"block": "Bloque",
|
||||||
@@ -511,7 +511,7 @@
|
|||||||
"contact_avatar_image_hint": "La imagen se copia en la app para que siga disponible si el original se mueve.",
|
"contact_avatar_image_hint": "La imagen se copia en la app para que siga disponible si el original se mueve.",
|
||||||
"contact_avatar_remove": "Quitar",
|
"contact_avatar_remove": "Quitar",
|
||||||
"contact_avatar_shielded": "Blindada",
|
"contact_avatar_shielded": "Blindada",
|
||||||
"contact_avatar_transparent": "Transparente",
|
"contact_chip_mining": "Solo minería",
|
||||||
"contact_global": "Mostrar en todas las carteras (contacto global)",
|
"contact_global": "Mostrar en todas las carteras (contacto global)",
|
||||||
"contact_global_badge_tt": "Contacto global — visible en todas las carteras",
|
"contact_global_badge_tt": "Contacto global — visible en todas las carteras",
|
||||||
"contact_global_tt": "Activado: este contacto permanece visible sin importar qué cartera cargues. Desactivado: pertenece solo a la cartera actual.",
|
"contact_global_tt": "Activado: este contacto permanece visible sin importar qué cartera cargues. Desactivado: pertenece solo a la cartera actual.",
|
||||||
@@ -707,8 +707,8 @@
|
|||||||
"export_tx_success": "Transacciones exportadas exitosamente",
|
"export_tx_success": "Transacciones exportadas exitosamente",
|
||||||
"export_tx_title": "Exportar Transacciones a CSV",
|
"export_tx_title": "Exportar Transacciones a CSV",
|
||||||
"export_viewing_key": "Exportar Clave de Vista",
|
"export_viewing_key": "Exportar Clave de Vista",
|
||||||
|
"failed_create_mining_address": "No se pudo crear la dirección de minería",
|
||||||
"failed_create_shielded": "Error al crear dirección protegida",
|
"failed_create_shielded": "Error al crear dirección protegida",
|
||||||
"failed_create_transparent": "Error al crear dirección transparente",
|
|
||||||
"faq": "Preguntas frecuentes",
|
"faq": "Preguntas frecuentes",
|
||||||
"faq_d_mgmt_1_a": "El nodo integrado se inicia automáticamente con la cartera y se detiene cuando corresponde, así que normalmente no necesitas administrarlo a mano. Los controles avanzados (incluido reiniciar el daemon) están en Ajustes > Nodo y seguridad.",
|
"faq_d_mgmt_1_a": "El nodo integrado se inicia automáticamente con la cartera y se detiene cuando corresponde, así que normalmente no necesitas administrarlo a mano. Los controles avanzados (incluido reiniciar el daemon) están en Ajustes > Nodo y seguridad.",
|
||||||
"faq_d_mgmt_1_q": "¿Cómo inicio o detengo el nodo?",
|
"faq_d_mgmt_1_q": "¿Cómo inicio o detengo el nodo?",
|
||||||
@@ -1226,6 +1226,7 @@
|
|||||||
"miner_fee": "Tarifa de minero",
|
"miner_fee": "Tarifa de minero",
|
||||||
"mining": "Minería",
|
"mining": "Minería",
|
||||||
"mining_active": "Activo",
|
"mining_active": "Activo",
|
||||||
|
"mining_address": "Dirección de minería",
|
||||||
"mining_address_copied": "Dirección de minería copiada",
|
"mining_address_copied": "Dirección de minería copiada",
|
||||||
"mining_all_time": "Todo el Tiempo",
|
"mining_all_time": "Todo el Tiempo",
|
||||||
"mining_already_saved": "URL del pool ya guardada",
|
"mining_already_saved": "URL del pool ya guardada",
|
||||||
@@ -1239,6 +1240,8 @@
|
|||||||
"mining_benchmark_testing": "Probando",
|
"mining_benchmark_testing": "Probando",
|
||||||
"mining_benchmark_tooltip": "Encontrar el número óptimo de hilos para esta CPU",
|
"mining_benchmark_tooltip": "Encontrar el número óptimo de hilos para esta CPU",
|
||||||
"mining_block_copied": "Hash de bloque copiado",
|
"mining_block_copied": "Hash de bloque copiado",
|
||||||
|
"mining_card_click_to_shield": "Haz clic para blindar ahora las recompensas maduras.",
|
||||||
|
"mining_card_tooltip": "Las recompensas de minería en solitario llegan a tus direcciones de minería (transparentes, R…). Esas direcciones no pueden recibir pagos. Las recompensas se blindan automáticamente cuando maduran.",
|
||||||
"mining_chart_1m_ago": "hace 1m",
|
"mining_chart_1m_ago": "hace 1m",
|
||||||
"mining_chart_5m_ago": "hace 5m",
|
"mining_chart_5m_ago": "hace 5m",
|
||||||
"mining_chart_now": "Ahora",
|
"mining_chart_now": "Ahora",
|
||||||
@@ -1283,6 +1286,7 @@
|
|||||||
"mining_payout_address": "Dirección de Pago",
|
"mining_payout_address": "Dirección de Pago",
|
||||||
"mining_payout_foreign": "⚠ Esta dirección de pago no está en tu cartera actual — las recompensas minadas irían a otra cartera. Actualízala si cambiaste de cartera.",
|
"mining_payout_foreign": "⚠ Esta dirección de pago no está en tu cartera actual — las recompensas minadas irían a otra cartera. Actualízala si cambiaste de cartera.",
|
||||||
"mining_payout_invalid": "No es una dirección DragonX válida — corrígela antes de empezar, o se pierden las recompensas de minería.",
|
"mining_payout_invalid": "No es una dirección DragonX válida — corrígela antes de empezar, o se pierden las recompensas de minería.",
|
||||||
|
"mining_payout_needs_shielded": "Los pools pagan con transacciones normales, que en DragonX no pueden llegar a una dirección de minería (transparente, R…). Usa una dirección blindada (empieza por zs) como dirección de pago.",
|
||||||
"mining_payout_tooltip": "Dirección para recibir recompensas de minería",
|
"mining_payout_tooltip": "Dirección para recibir recompensas de minería",
|
||||||
"mining_pool": "Pool",
|
"mining_pool": "Pool",
|
||||||
"mining_pool_fee": "Comisión",
|
"mining_pool_fee": "Comisión",
|
||||||
@@ -1295,6 +1299,8 @@
|
|||||||
"mining_refresh": "Actualizar",
|
"mining_refresh": "Actualizar",
|
||||||
"mining_remove": "Eliminar",
|
"mining_remove": "Eliminar",
|
||||||
"mining_reset_defaults": "Restablecer Valores",
|
"mining_reset_defaults": "Restablecer Valores",
|
||||||
|
"mining_rewards": "Recompensas de minería",
|
||||||
|
"mining_rewards_unshielded": "Aún sin blindar",
|
||||||
"mining_save_payout_address": "Guardar dirección de pago",
|
"mining_save_payout_address": "Guardar dirección de pago",
|
||||||
"mining_save_pool_url": "Guardar URL del pool",
|
"mining_save_pool_url": "Guardar URL del pool",
|
||||||
"mining_saved_addresses": "Direcciones Guardadas:",
|
"mining_saved_addresses": "Direcciones Guardadas:",
|
||||||
@@ -1328,10 +1334,10 @@
|
|||||||
"network_fee": "COMISIÓN DE RED",
|
"network_fee": "COMISIÓN DE RED",
|
||||||
"network_hashrate": "Tasa de Hash de la Red",
|
"network_hashrate": "Tasa de Hash de la Red",
|
||||||
"new": "+ Nuevo",
|
"new": "+ Nuevo",
|
||||||
|
"new_mining_address": "Nueva dirección de minería",
|
||||||
|
"new_mining_address_created": "Nueva dirección de minería creada",
|
||||||
"new_shielded_created": "Nueva dirección protegida creada",
|
"new_shielded_created": "Nueva dirección protegida creada",
|
||||||
"new_t_address": "Nueva Dirección T",
|
|
||||||
"new_t_transparent": "Nueva dirección t (Transparente)",
|
"new_t_transparent": "Nueva dirección t (Transparente)",
|
||||||
"new_transparent_created": "Nueva dirección transparente creada",
|
|
||||||
"new_z_address": "Nueva Dirección Z",
|
"new_z_address": "Nueva Dirección Z",
|
||||||
"new_z_shielded": "Nueva dirección z (Blindada)",
|
"new_z_shielded": "Nueva dirección z (Blindada)",
|
||||||
"no_addresses": "No se encontraron direcciones. Cree una usando los botones de arriba.",
|
"no_addresses": "No se encontraron direcciones. Cree una usando los botones de arriba.",
|
||||||
@@ -1696,6 +1702,8 @@
|
|||||||
"send_from_this_address": "Enviar desde esta dirección",
|
"send_from_this_address": "Enviar desde esta dirección",
|
||||||
"send_go_to_receive": "Ir a Recibir",
|
"send_go_to_receive": "Ir a Recibir",
|
||||||
"send_keep": "Mantener",
|
"send_keep": "Mantener",
|
||||||
|
"send_mining_addr_blocked": "Esta es una dirección de minería (transparente). En DragonX solo pueden recibir recompensas de minería; la red rechaza los pagos a ellas. Pide al destinatario una dirección blindada (empieza por zs).",
|
||||||
|
"send_mining_addr_short": "Dirección de minería: no puede recibir pagos",
|
||||||
"send_network_fee": "COMISIÓN DE RED",
|
"send_network_fee": "COMISIÓN DE RED",
|
||||||
"send_no_balance": "Sin saldo",
|
"send_no_balance": "Sin saldo",
|
||||||
"send_no_recent": "No hay envíos recientes",
|
"send_no_recent": "No hay envíos recientes",
|
||||||
@@ -1723,7 +1731,6 @@
|
|||||||
"send_txid_copied": "TxID copiado al portapapeles",
|
"send_txid_copied": "TxID copiado al portapapeles",
|
||||||
"send_txid_label": "TxID: %s",
|
"send_txid_label": "TxID: %s",
|
||||||
"send_valid_shielded": "Dirección protegida válida",
|
"send_valid_shielded": "Dirección protegida válida",
|
||||||
"send_valid_transparent": "Dirección transparente válida",
|
|
||||||
"send_wallet_empty": "Tu cartera está vacía",
|
"send_wallet_empty": "Tu cartera está vacía",
|
||||||
"send_yes_clear": "Sí, Limpiar",
|
"send_yes_clear": "Sí, Limpiar",
|
||||||
"sender_balance": "Remitente: %.8f → %.8f DRGX",
|
"sender_balance": "Remitente: %.8f → %.8f DRGX",
|
||||||
@@ -1929,7 +1936,6 @@
|
|||||||
"switch_stopnode_title": "¿Detener el nodo en ejecución?",
|
"switch_stopnode_title": "¿Detener el nodo en ejecución?",
|
||||||
"switch_stopnode_warn": "Ya hay un nodo en ejecución que esta cartera no inició.",
|
"switch_stopnode_warn": "Ya hay un nodo en ejecución que esta cartera no inició.",
|
||||||
"syncing": "Sincronizando...",
|
"syncing": "Sincronizando...",
|
||||||
"t_address": "Dirección T",
|
|
||||||
"t_addresses": "Direcciones T",
|
"t_addresses": "Direcciones T",
|
||||||
"test_connection": "Probar",
|
"test_connection": "Probar",
|
||||||
"theme": "Tema",
|
"theme": "Tema",
|
||||||
@@ -1964,8 +1970,6 @@
|
|||||||
"transfer_sent": "Transferencia Enviada",
|
"transfer_sent": "Transferencia Enviada",
|
||||||
"transfer_sent_desc": "Su transferencia ha sido enviada a la red.",
|
"transfer_sent_desc": "Su transferencia ha sido enviada a la red.",
|
||||||
"transfer_to": "Transferir a:",
|
"transfer_to": "Transferir a:",
|
||||||
"transparent": "Transparente",
|
|
||||||
"transparent_address": "Dirección Transparente",
|
|
||||||
"try_again": "Reintentar",
|
"try_again": "Reintentar",
|
||||||
"tt_addr_url": "URL base para ver direcciones en un explorador de bloques",
|
"tt_addr_url": "URL base para ver direcciones en un explorador de bloques",
|
||||||
"tt_address_book": "Administrar direcciones guardadas para envío rápido",
|
"tt_address_book": "Administrar direcciones guardadas para envío rápido",
|
||||||
@@ -2037,6 +2041,7 @@
|
|||||||
"tt_low_spec": "Desactivar todos los efectos visuales pesados\\nAtajo: Ctrl+Shift+Down",
|
"tt_low_spec": "Desactivar todos los efectos visuales pesados\\nAtajo: Ctrl+Shift+Down",
|
||||||
"tt_merge": "Consolidar múltiples UTXOs en una dirección",
|
"tt_merge": "Consolidar múltiples UTXOs en una dirección",
|
||||||
"tt_mine_idle": "Iniciar minería automáticamente cuando el\\nsistema esté inactivo (sin entrada de teclado/ratón)",
|
"tt_mine_idle": "Iniciar minería automáticamente cuando el\\nsistema esté inactivo (sin entrada de teclado/ratón)",
|
||||||
|
"tt_new_mining_address": "Crea una dirección transparente (R…) para recompensas de minería en solitario. No puede recibir pagos; para eso comparte una dirección blindada.",
|
||||||
"tt_noise": "Intensidad de textura granulada (0% = apagado, 100% = máximo)",
|
"tt_noise": "Intensidad de textura granulada (0% = apagado, 100% = máximo)",
|
||||||
"tt_open_app_dir": "Abrir la carpeta de ObsidianDragon (configuración, temas, registros) en el explorador de archivos",
|
"tt_open_app_dir": "Abrir la carpeta de ObsidianDragon (configuración, temas, registros) en el explorador de archivos",
|
||||||
"tt_open_data_dir": "Abre en el gestor de archivos la carpeta con los datos de tu cartera y de la blockchain",
|
"tt_open_data_dir": "Abre en el gestor de archivos la carpeta con los datos de tu cartera y de la blockchain",
|
||||||
|
|||||||
+17
-12
@@ -25,6 +25,7 @@
|
|||||||
"about_website": "Site web",
|
"about_website": "Site web",
|
||||||
"acrylic": "Acrylique",
|
"acrylic": "Acrylique",
|
||||||
"add": "Ajouter",
|
"add": "Ajouter",
|
||||||
|
"addr_type_mining": "Minage",
|
||||||
"address": "Adresse",
|
"address": "Adresse",
|
||||||
"address_book_add": "Ajouter une adresse",
|
"address_book_add": "Ajouter une adresse",
|
||||||
"address_book_add_new": "Ajouter",
|
"address_book_add_new": "Ajouter",
|
||||||
@@ -172,21 +173,20 @@
|
|||||||
"balance_history_collecting": "Historique du solde — collecte des données...",
|
"balance_history_collecting": "Historique du solde — collecte des données...",
|
||||||
"balance_layout": "Disposition du solde",
|
"balance_layout": "Disposition du solde",
|
||||||
"balance_layout_switched": "Disposition : %s",
|
"balance_layout_switched": "Disposition : %s",
|
||||||
|
"balance_mining_fmt": "Récompenses de minage : %.8f",
|
||||||
"balance_mining_rate": "Minage %s",
|
"balance_mining_rate": "Minage %s",
|
||||||
"balance_shielded_fmt": "Blindé : %.8f",
|
"balance_shielded_fmt": "Blindé : %.8f",
|
||||||
"balance_syncing_pct": "Synchronisation %.1f%%",
|
"balance_syncing_pct": "Synchronisation %.1f%%",
|
||||||
"balance_transparent_fmt": "Transparent : %.8f",
|
|
||||||
"baltab_market": "Marché",
|
"baltab_market": "Marché",
|
||||||
"baltab_market_price_4dp": "Marché : %.4f $",
|
"baltab_market_price_4dp": "Marché : %.4f $",
|
||||||
"baltab_market_price_8dp": "Marché : %.8f $",
|
"baltab_market_price_8dp": "Marché : %.8f $",
|
||||||
|
"baltab_mining_addresses_count": "%d adresses de minage",
|
||||||
|
"baltab_mining_amount": "Récompenses de minage %.8f",
|
||||||
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
||||||
"baltab_pct_of_total_zaddr": "%.0f%% du total · %d Z-addr",
|
"baltab_pct_of_total_zaddr": "%.0f%% du total · %d Z-addr",
|
||||||
"baltab_shielded": "Protégé",
|
"baltab_shielded": "Protégé",
|
||||||
"baltab_shielded_amount": "Protégé %.8f",
|
"baltab_shielded_amount": "Protégé %.8f",
|
||||||
"baltab_t_addresses_count": "%d T-addresses",
|
|
||||||
"baltab_total_balance": "Solde total",
|
"baltab_total_balance": "Solde total",
|
||||||
"baltab_transparent": "Transparent",
|
|
||||||
"baltab_transparent_amount": "Transparent %.8f",
|
|
||||||
"ban": "Bannir",
|
"ban": "Bannir",
|
||||||
"banned_peers": "Pairs bannis",
|
"banned_peers": "Pairs bannis",
|
||||||
"block": "Bloc",
|
"block": "Bloc",
|
||||||
@@ -511,7 +511,7 @@
|
|||||||
"contact_avatar_image_hint": "L'image est copiée dans l'application pour rester disponible si l'original est déplacé.",
|
"contact_avatar_image_hint": "L'image est copiée dans l'application pour rester disponible si l'original est déplacé.",
|
||||||
"contact_avatar_remove": "Retirer",
|
"contact_avatar_remove": "Retirer",
|
||||||
"contact_avatar_shielded": "Blindée",
|
"contact_avatar_shielded": "Blindée",
|
||||||
"contact_avatar_transparent": "Transparente",
|
"contact_chip_mining": "Minage seul",
|
||||||
"contact_global": "Afficher dans tous les portefeuilles (contact global)",
|
"contact_global": "Afficher dans tous les portefeuilles (contact global)",
|
||||||
"contact_global_badge_tt": "Contact global — visible dans tous les portefeuilles",
|
"contact_global_badge_tt": "Contact global — visible dans tous les portefeuilles",
|
||||||
"contact_global_tt": "Activé : ce contact reste visible quel que soit le portefeuille chargé. Désactivé : il appartient au portefeuille actuel uniquement.",
|
"contact_global_tt": "Activé : ce contact reste visible quel que soit le portefeuille chargé. Désactivé : il appartient au portefeuille actuel uniquement.",
|
||||||
@@ -707,8 +707,8 @@
|
|||||||
"export_tx_success": "Transactions exportées avec succès",
|
"export_tx_success": "Transactions exportées avec succès",
|
||||||
"export_tx_title": "Exporter les transactions en CSV",
|
"export_tx_title": "Exporter les transactions en CSV",
|
||||||
"export_viewing_key": "Exporter la clé de visualisation",
|
"export_viewing_key": "Exporter la clé de visualisation",
|
||||||
|
"failed_create_mining_address": "Impossible de créer l'adresse de minage",
|
||||||
"failed_create_shielded": "Échec de la création de l'adresse blindée",
|
"failed_create_shielded": "Échec de la création de l'adresse blindée",
|
||||||
"failed_create_transparent": "Échec de la création de l'adresse transparente",
|
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"faq_d_mgmt_1_a": "Le nœud intégré démarre automatiquement avec le portefeuille et s'arrête quand il le faut, donc vous n'avez normalement pas besoin de le gérer manuellement. Les contrôles avancés (y compris le redémarrage du démon) se trouvent dans Paramètres > Nœud et sécurité.",
|
"faq_d_mgmt_1_a": "Le nœud intégré démarre automatiquement avec le portefeuille et s'arrête quand il le faut, donc vous n'avez normalement pas besoin de le gérer manuellement. Les contrôles avancés (y compris le redémarrage du démon) se trouvent dans Paramètres > Nœud et sécurité.",
|
||||||
"faq_d_mgmt_1_q": "Comment démarrer ou arrêter le nœud ?",
|
"faq_d_mgmt_1_q": "Comment démarrer ou arrêter le nœud ?",
|
||||||
@@ -1226,6 +1226,7 @@
|
|||||||
"miner_fee": "Frais de mineur",
|
"miner_fee": "Frais de mineur",
|
||||||
"mining": "Minage",
|
"mining": "Minage",
|
||||||
"mining_active": "Actif",
|
"mining_active": "Actif",
|
||||||
|
"mining_address": "Adresse de minage",
|
||||||
"mining_address_copied": "Adresse de minage copiée",
|
"mining_address_copied": "Adresse de minage copiée",
|
||||||
"mining_all_time": "Tout le temps",
|
"mining_all_time": "Tout le temps",
|
||||||
"mining_already_saved": "URL du pool déjà enregistrée",
|
"mining_already_saved": "URL du pool déjà enregistrée",
|
||||||
@@ -1239,6 +1240,8 @@
|
|||||||
"mining_benchmark_testing": "Test",
|
"mining_benchmark_testing": "Test",
|
||||||
"mining_benchmark_tooltip": "Trouver le nombre optimal de threads pour ce CPU",
|
"mining_benchmark_tooltip": "Trouver le nombre optimal de threads pour ce CPU",
|
||||||
"mining_block_copied": "Hash du bloc copié",
|
"mining_block_copied": "Hash du bloc copié",
|
||||||
|
"mining_card_click_to_shield": "Cliquez pour blinder dès maintenant les récompenses arrivées à maturité.",
|
||||||
|
"mining_card_tooltip": "Les récompenses de minage en solo arrivent sur vos adresses de minage (transparentes, R…). Ces adresses ne peuvent pas recevoir de paiements. Les récompenses sont blindées automatiquement une fois arrivées à maturité.",
|
||||||
"mining_chart_1m_ago": "il y a 1m",
|
"mining_chart_1m_ago": "il y a 1m",
|
||||||
"mining_chart_5m_ago": "il y a 5m",
|
"mining_chart_5m_ago": "il y a 5m",
|
||||||
"mining_chart_now": "Maintenant",
|
"mining_chart_now": "Maintenant",
|
||||||
@@ -1283,6 +1286,7 @@
|
|||||||
"mining_payout_address": "Adresse de paiement",
|
"mining_payout_address": "Adresse de paiement",
|
||||||
"mining_payout_foreign": "⚠ Cette adresse de paiement ne fait pas partie de votre portefeuille actuel — les récompenses minées iraient vers un autre portefeuille. Mettez-la à jour si vous avez changé de portefeuille.",
|
"mining_payout_foreign": "⚠ Cette adresse de paiement ne fait pas partie de votre portefeuille actuel — les récompenses minées iraient vers un autre portefeuille. Mettez-la à jour si vous avez changé de portefeuille.",
|
||||||
"mining_payout_invalid": "Adresse DragonX invalide — corrigez-la avant de démarrer, sinon les récompenses de minage sont perdues.",
|
"mining_payout_invalid": "Adresse DragonX invalide — corrigez-la avant de démarrer, sinon les récompenses de minage sont perdues.",
|
||||||
|
"mining_payout_needs_shielded": "Les pools paient avec des transactions ordinaires, qui ne peuvent pas atteindre une adresse de minage (transparente, R…) sur DragonX. Utilisez une adresse blindée (elle commence par zs) comme adresse de paiement.",
|
||||||
"mining_payout_tooltip": "Adresse pour recevoir les récompenses de minage",
|
"mining_payout_tooltip": "Adresse pour recevoir les récompenses de minage",
|
||||||
"mining_pool": "Pool",
|
"mining_pool": "Pool",
|
||||||
"mining_pool_fee": "Frais",
|
"mining_pool_fee": "Frais",
|
||||||
@@ -1295,6 +1299,8 @@
|
|||||||
"mining_refresh": "Actualiser",
|
"mining_refresh": "Actualiser",
|
||||||
"mining_remove": "Supprimer",
|
"mining_remove": "Supprimer",
|
||||||
"mining_reset_defaults": "Réinitialiser les paramètres",
|
"mining_reset_defaults": "Réinitialiser les paramètres",
|
||||||
|
"mining_rewards": "Récompenses de minage",
|
||||||
|
"mining_rewards_unshielded": "Pas encore blindées",
|
||||||
"mining_save_payout_address": "Enregistrer l'adresse de paiement",
|
"mining_save_payout_address": "Enregistrer l'adresse de paiement",
|
||||||
"mining_save_pool_url": "Enregistrer l'URL du pool",
|
"mining_save_pool_url": "Enregistrer l'URL du pool",
|
||||||
"mining_saved_addresses": "Adresses enregistrées :",
|
"mining_saved_addresses": "Adresses enregistrées :",
|
||||||
@@ -1328,10 +1334,10 @@
|
|||||||
"network_fee": "FRAIS RÉSEAU",
|
"network_fee": "FRAIS RÉSEAU",
|
||||||
"network_hashrate": "Hashrate du réseau",
|
"network_hashrate": "Hashrate du réseau",
|
||||||
"new": "+ Nouveau",
|
"new": "+ Nouveau",
|
||||||
|
"new_mining_address": "Nouvelle adresse de minage",
|
||||||
|
"new_mining_address_created": "Nouvelle adresse de minage créée",
|
||||||
"new_shielded_created": "Nouvelle adresse blindée créée",
|
"new_shielded_created": "Nouvelle adresse blindée créée",
|
||||||
"new_t_address": "Nouvelle adresse T",
|
|
||||||
"new_t_transparent": "Nouvelle adresse t (Transparente)",
|
"new_t_transparent": "Nouvelle adresse t (Transparente)",
|
||||||
"new_transparent_created": "Nouvelle adresse transparente créée",
|
|
||||||
"new_z_address": "Nouvelle adresse Z",
|
"new_z_address": "Nouvelle adresse Z",
|
||||||
"new_z_shielded": "Nouvelle adresse z (Blindée)",
|
"new_z_shielded": "Nouvelle adresse z (Blindée)",
|
||||||
"no_addresses": "Aucune adresse trouvée. Créez-en une avec les boutons ci-dessus.",
|
"no_addresses": "Aucune adresse trouvée. Créez-en une avec les boutons ci-dessus.",
|
||||||
@@ -1696,6 +1702,8 @@
|
|||||||
"send_from_this_address": "Envoyer depuis cette adresse",
|
"send_from_this_address": "Envoyer depuis cette adresse",
|
||||||
"send_go_to_receive": "Aller à Recevoir",
|
"send_go_to_receive": "Aller à Recevoir",
|
||||||
"send_keep": "Conserver",
|
"send_keep": "Conserver",
|
||||||
|
"send_mining_addr_blocked": "Ceci est une adresse de minage (transparente). Sur DragonX, elles ne peuvent recevoir que des récompenses de minage — le réseau refuse les paiements vers elles. Demandez au destinataire une adresse blindée (elle commence par zs).",
|
||||||
|
"send_mining_addr_short": "Adresse de minage — ne peut pas recevoir de paiements",
|
||||||
"send_network_fee": "FRAIS RÉSEAU",
|
"send_network_fee": "FRAIS RÉSEAU",
|
||||||
"send_no_balance": "Pas de solde",
|
"send_no_balance": "Pas de solde",
|
||||||
"send_no_recent": "Aucun envoi récent",
|
"send_no_recent": "Aucun envoi récent",
|
||||||
@@ -1723,7 +1731,6 @@
|
|||||||
"send_txid_copied": "TxID copié dans le presse-papiers",
|
"send_txid_copied": "TxID copié dans le presse-papiers",
|
||||||
"send_txid_label": "TxID : %s",
|
"send_txid_label": "TxID : %s",
|
||||||
"send_valid_shielded": "Adresse blindée valide",
|
"send_valid_shielded": "Adresse blindée valide",
|
||||||
"send_valid_transparent": "Adresse transparente valide",
|
|
||||||
"send_wallet_empty": "Votre portefeuille est vide",
|
"send_wallet_empty": "Votre portefeuille est vide",
|
||||||
"send_yes_clear": "Oui, effacer",
|
"send_yes_clear": "Oui, effacer",
|
||||||
"sender_balance": "Expéditeur : %.8f → %.8f DRGX",
|
"sender_balance": "Expéditeur : %.8f → %.8f DRGX",
|
||||||
@@ -1929,7 +1936,6 @@
|
|||||||
"switch_stopnode_title": "Arrêter le nœud en cours d'exécution ?",
|
"switch_stopnode_title": "Arrêter le nœud en cours d'exécution ?",
|
||||||
"switch_stopnode_warn": "Un nœud que ce portefeuille n'a pas démarré est déjà en cours d'exécution.",
|
"switch_stopnode_warn": "Un nœud que ce portefeuille n'a pas démarré est déjà en cours d'exécution.",
|
||||||
"syncing": "Synchronisation...",
|
"syncing": "Synchronisation...",
|
||||||
"t_address": "Adresse T",
|
|
||||||
"t_addresses": "Adresses T",
|
"t_addresses": "Adresses T",
|
||||||
"test_connection": "Tester",
|
"test_connection": "Tester",
|
||||||
"theme": "Thème",
|
"theme": "Thème",
|
||||||
@@ -1964,8 +1970,6 @@
|
|||||||
"transfer_sent": "Transfert envoyé",
|
"transfer_sent": "Transfert envoyé",
|
||||||
"transfer_sent_desc": "Votre transfert a été soumis au réseau.",
|
"transfer_sent_desc": "Votre transfert a été soumis au réseau.",
|
||||||
"transfer_to": "Transférer à :",
|
"transfer_to": "Transférer à :",
|
||||||
"transparent": "Transparent",
|
|
||||||
"transparent_address": "Adresse transparente",
|
|
||||||
"try_again": "Réessayer",
|
"try_again": "Réessayer",
|
||||||
"tt_addr_url": "URL de base pour consulter les adresses dans un explorateur de blocs",
|
"tt_addr_url": "URL de base pour consulter les adresses dans un explorateur de blocs",
|
||||||
"tt_address_book": "Gérer les adresses enregistrées pour un envoi rapide",
|
"tt_address_book": "Gérer les adresses enregistrées pour un envoi rapide",
|
||||||
@@ -2037,6 +2041,7 @@
|
|||||||
"tt_low_spec": "Désactiver tous les effets visuels lourds\\nRaccourci : Ctrl+Shift+Down",
|
"tt_low_spec": "Désactiver tous les effets visuels lourds\\nRaccourci : Ctrl+Shift+Down",
|
||||||
"tt_merge": "Consolider plusieurs UTXOs vers une adresse",
|
"tt_merge": "Consolider plusieurs UTXOs vers une adresse",
|
||||||
"tt_mine_idle": "Démarrer le minage automatiquement quand le\\nsystème est inactif (aucune entrée clavier/souris)",
|
"tt_mine_idle": "Démarrer le minage automatiquement quand le\\nsystème est inactif (aucune entrée clavier/souris)",
|
||||||
|
"tt_new_mining_address": "Crée une adresse transparente (R…) pour les récompenses de minage en solo. Elle ne peut pas recevoir de paiements — partagez une adresse blindée pour cela.",
|
||||||
"tt_noise": "Intensité de texture grainée (0% = désactivé, 100% = maximum)",
|
"tt_noise": "Intensité de texture grainée (0% = désactivé, 100% = maximum)",
|
||||||
"tt_open_app_dir": "Ouvrir le dossier ObsidianDragon (paramètres, thèmes, journaux) dans le gestionnaire de fichiers",
|
"tt_open_app_dir": "Ouvrir le dossier ObsidianDragon (paramètres, thèmes, journaux) dans le gestionnaire de fichiers",
|
||||||
"tt_open_data_dir": "Ouvrir le dossier contenant les données de votre portefeuille et de la blockchain dans le gestionnaire de fichiers",
|
"tt_open_data_dir": "Ouvrir le dossier contenant les données de votre portefeuille et de la blockchain dans le gestionnaire de fichiers",
|
||||||
|
|||||||
+17
-12
@@ -25,6 +25,7 @@
|
|||||||
"about_website": "ウェブサイト",
|
"about_website": "ウェブサイト",
|
||||||
"acrylic": "アクリル",
|
"acrylic": "アクリル",
|
||||||
"add": "追加",
|
"add": "追加",
|
||||||
|
"addr_type_mining": "マイニング",
|
||||||
"address": "アドレス",
|
"address": "アドレス",
|
||||||
"address_book_add": "アドレスを追加",
|
"address_book_add": "アドレスを追加",
|
||||||
"address_book_add_new": "新規追加",
|
"address_book_add_new": "新規追加",
|
||||||
@@ -172,21 +173,20 @@
|
|||||||
"balance_history_collecting": "残高履歴 — データを収集中...",
|
"balance_history_collecting": "残高履歴 — データを収集中...",
|
||||||
"balance_layout": "残高レイアウト",
|
"balance_layout": "残高レイアウト",
|
||||||
"balance_layout_switched": "レイアウト: %s",
|
"balance_layout_switched": "レイアウト: %s",
|
||||||
|
"balance_mining_fmt": "マイニング報酬:%.8f",
|
||||||
"balance_mining_rate": "マイニング中 %s",
|
"balance_mining_rate": "マイニング中 %s",
|
||||||
"balance_shielded_fmt": "シールド: %.8f",
|
"balance_shielded_fmt": "シールド: %.8f",
|
||||||
"balance_syncing_pct": "同期中 %.1f%%",
|
"balance_syncing_pct": "同期中 %.1f%%",
|
||||||
"balance_transparent_fmt": "透明: %.8f",
|
|
||||||
"baltab_market": "市場",
|
"baltab_market": "市場",
|
||||||
"baltab_market_price_4dp": "市場価格: $%.4f",
|
"baltab_market_price_4dp": "市場価格: $%.4f",
|
||||||
"baltab_market_price_8dp": "市場価格: $%.8f",
|
"baltab_market_price_8dp": "市場価格: $%.8f",
|
||||||
|
"baltab_mining_addresses_count": "マイニングアドレス %d 件",
|
||||||
|
"baltab_mining_amount": "マイニング報酬 %.8f",
|
||||||
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
||||||
"baltab_pct_of_total_zaddr": "全体の%.0f%% · %d Z-addr",
|
"baltab_pct_of_total_zaddr": "全体の%.0f%% · %d Z-addr",
|
||||||
"baltab_shielded": "シールド",
|
"baltab_shielded": "シールド",
|
||||||
"baltab_shielded_amount": "シールド %.8f",
|
"baltab_shielded_amount": "シールド %.8f",
|
||||||
"baltab_t_addresses_count": "%d 個のT-address",
|
|
||||||
"baltab_total_balance": "合計残高",
|
"baltab_total_balance": "合計残高",
|
||||||
"baltab_transparent": "透明",
|
|
||||||
"baltab_transparent_amount": "透明 %.8f",
|
|
||||||
"ban": "ブロック",
|
"ban": "ブロック",
|
||||||
"banned_peers": "ブロック済みピア",
|
"banned_peers": "ブロック済みピア",
|
||||||
"block": "ブロック",
|
"block": "ブロック",
|
||||||
@@ -511,7 +511,7 @@
|
|||||||
"contact_avatar_image_hint": "画像はアプリ内にコピーされ、元のファイルが移動しても利用できます。",
|
"contact_avatar_image_hint": "画像はアプリ内にコピーされ、元のファイルが移動しても利用できます。",
|
||||||
"contact_avatar_remove": "削除",
|
"contact_avatar_remove": "削除",
|
||||||
"contact_avatar_shielded": "シールド",
|
"contact_avatar_shielded": "シールド",
|
||||||
"contact_avatar_transparent": "透明",
|
"contact_chip_mining": "マイニング専用",
|
||||||
"contact_global": "すべてのウォレットで表示(グローバル連絡先)",
|
"contact_global": "すべてのウォレットで表示(グローバル連絡先)",
|
||||||
"contact_global_badge_tt": "グローバル連絡先 — すべてのウォレットで表示",
|
"contact_global_badge_tt": "グローバル連絡先 — すべてのウォレットで表示",
|
||||||
"contact_global_tt": "オン:この連絡先はどのウォレットを読み込んでも表示されます。オフ:現在のウォレットにのみ属します。",
|
"contact_global_tt": "オン:この連絡先はどのウォレットを読み込んでも表示されます。オフ:現在のウォレットにのみ属します。",
|
||||||
@@ -707,8 +707,8 @@
|
|||||||
"export_tx_success": "取引のエクスポートに成功しました",
|
"export_tx_success": "取引のエクスポートに成功しました",
|
||||||
"export_tx_title": "取引をCSVにエクスポート",
|
"export_tx_title": "取引をCSVにエクスポート",
|
||||||
"export_viewing_key": "閲覧鍵をエクスポート",
|
"export_viewing_key": "閲覧鍵をエクスポート",
|
||||||
|
"failed_create_mining_address": "マイニングアドレスを作成できませんでした",
|
||||||
"failed_create_shielded": "シールドアドレスの作成に失敗しました",
|
"failed_create_shielded": "シールドアドレスの作成に失敗しました",
|
||||||
"failed_create_transparent": "透明アドレスの作成に失敗しました",
|
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"faq_d_mgmt_1_a": "組み込みノードはウォレットと同時に自動的に起動し、適切なタイミングで停止するため、通常は手動で管理する必要はありません。高度な操作(デーモンの再起動を含む)は設定 > ノードとセキュリティにあります。",
|
"faq_d_mgmt_1_a": "組み込みノードはウォレットと同時に自動的に起動し、適切なタイミングで停止するため、通常は手動で管理する必要はありません。高度な操作(デーモンの再起動を含む)は設定 > ノードとセキュリティにあります。",
|
||||||
"faq_d_mgmt_1_q": "ノードの起動・停止はどうすればいいですか?",
|
"faq_d_mgmt_1_q": "ノードの起動・停止はどうすればいいですか?",
|
||||||
@@ -1226,6 +1226,7 @@
|
|||||||
"miner_fee": "マイナー手数料",
|
"miner_fee": "マイナー手数料",
|
||||||
"mining": "マイニング",
|
"mining": "マイニング",
|
||||||
"mining_active": "アクティブ",
|
"mining_active": "アクティブ",
|
||||||
|
"mining_address": "マイニングアドレス",
|
||||||
"mining_address_copied": "マイニングアドレスをコピーしました",
|
"mining_address_copied": "マイニングアドレスをコピーしました",
|
||||||
"mining_all_time": "全期間",
|
"mining_all_time": "全期間",
|
||||||
"mining_already_saved": "プールURLは既に保存済みです",
|
"mining_already_saved": "プールURLは既に保存済みです",
|
||||||
@@ -1239,6 +1240,8 @@
|
|||||||
"mining_benchmark_testing": "テスト中",
|
"mining_benchmark_testing": "テスト中",
|
||||||
"mining_benchmark_tooltip": "このCPUに最適なスレッド数を検出",
|
"mining_benchmark_tooltip": "このCPUに最適なスレッド数を検出",
|
||||||
"mining_block_copied": "ブロックハッシュをコピーしました",
|
"mining_block_copied": "ブロックハッシュをコピーしました",
|
||||||
|
"mining_card_click_to_shield": "クリックすると成熟した報酬を今すぐシールドします。",
|
||||||
|
"mining_card_tooltip": "ソロマイニング報酬はマイニング(透明、R…)アドレスに届きます。これらのアドレスは支払いを受け取れません。報酬は成熟すると自動的にシールドされます。",
|
||||||
"mining_chart_1m_ago": "1分前",
|
"mining_chart_1m_ago": "1分前",
|
||||||
"mining_chart_5m_ago": "5分前",
|
"mining_chart_5m_ago": "5分前",
|
||||||
"mining_chart_now": "現在",
|
"mining_chart_now": "現在",
|
||||||
@@ -1283,6 +1286,7 @@
|
|||||||
"mining_payout_address": "支払いアドレス",
|
"mining_payout_address": "支払いアドレス",
|
||||||
"mining_payout_foreign": "⚠ この支払いアドレスは現在のウォレットに含まれていません — マイニング報酬が別のウォレットに送られます。ウォレットを切り替えた場合は更新してください。",
|
"mining_payout_foreign": "⚠ この支払いアドレスは現在のウォレットに含まれていません — マイニング報酬が別のウォレットに送られます。ウォレットを切り替えた場合は更新してください。",
|
||||||
"mining_payout_invalid": "有効な DragonX アドレスではありません — 開始前に修正してください。さもないとマイニング報酬が失われます。",
|
"mining_payout_invalid": "有効な DragonX アドレスではありません — 開始前に修正してください。さもないとマイニング報酬が失われます。",
|
||||||
|
"mining_payout_needs_shielded": "プールは通常のトランザクションで支払いますが、DragonX ではそれがマイニング(透明、R…)アドレスに届きません。支払い先にはシールドアドレス(zs で始まる)を使用してください。",
|
||||||
"mining_payout_tooltip": "マイニング報酬の受取アドレス",
|
"mining_payout_tooltip": "マイニング報酬の受取アドレス",
|
||||||
"mining_pool": "プール",
|
"mining_pool": "プール",
|
||||||
"mining_pool_fee": "手数料",
|
"mining_pool_fee": "手数料",
|
||||||
@@ -1295,6 +1299,8 @@
|
|||||||
"mining_refresh": "更新",
|
"mining_refresh": "更新",
|
||||||
"mining_remove": "削除",
|
"mining_remove": "削除",
|
||||||
"mining_reset_defaults": "デフォルトにリセット",
|
"mining_reset_defaults": "デフォルトにリセット",
|
||||||
|
"mining_rewards": "マイニング報酬",
|
||||||
|
"mining_rewards_unshielded": "未シールド",
|
||||||
"mining_save_payout_address": "支払いアドレスを保存",
|
"mining_save_payout_address": "支払いアドレスを保存",
|
||||||
"mining_save_pool_url": "プールURLを保存",
|
"mining_save_pool_url": "プールURLを保存",
|
||||||
"mining_saved_addresses": "保存済みアドレス:",
|
"mining_saved_addresses": "保存済みアドレス:",
|
||||||
@@ -1328,10 +1334,10 @@
|
|||||||
"network_fee": "ネットワーク手数料",
|
"network_fee": "ネットワーク手数料",
|
||||||
"network_hashrate": "ネットワークハッシュレート",
|
"network_hashrate": "ネットワークハッシュレート",
|
||||||
"new": "+ 新規",
|
"new": "+ 新規",
|
||||||
|
"new_mining_address": "新しいマイニングアドレス",
|
||||||
|
"new_mining_address_created": "新しいマイニングアドレスを作成しました",
|
||||||
"new_shielded_created": "新しいシールドアドレスを作成しました",
|
"new_shielded_created": "新しいシールドアドレスを作成しました",
|
||||||
"new_t_address": "新しいTアドレス",
|
|
||||||
"new_t_transparent": "新しいtアドレス(透明)",
|
"new_t_transparent": "新しいtアドレス(透明)",
|
||||||
"new_transparent_created": "新しい透明アドレスを作成しました",
|
|
||||||
"new_z_address": "新しいZアドレス",
|
"new_z_address": "新しいZアドレス",
|
||||||
"new_z_shielded": "新しいzアドレス(シールド)",
|
"new_z_shielded": "新しいzアドレス(シールド)",
|
||||||
"no_addresses": "アドレスが見つかりません。上のボタンを使用して作成してください。",
|
"no_addresses": "アドレスが見つかりません。上のボタンを使用して作成してください。",
|
||||||
@@ -1696,6 +1702,8 @@
|
|||||||
"send_from_this_address": "このアドレスから送金",
|
"send_from_this_address": "このアドレスから送金",
|
||||||
"send_go_to_receive": "受信へ移動",
|
"send_go_to_receive": "受信へ移動",
|
||||||
"send_keep": "保持",
|
"send_keep": "保持",
|
||||||
|
"send_mining_addr_blocked": "これはマイニング(透明)アドレスです。DragonX ではこのアドレスはマイニング報酬しか受け取れず、ネットワークはこのアドレスへの支払いを拒否します。受取人にシールドアドレス(zs で始まる)を依頼してください。",
|
||||||
|
"send_mining_addr_short": "マイニングアドレス — 支払いを受け取れません",
|
||||||
"send_network_fee": "ネットワーク手数料",
|
"send_network_fee": "ネットワーク手数料",
|
||||||
"send_no_balance": "残高なし",
|
"send_no_balance": "残高なし",
|
||||||
"send_no_recent": "最近の送信なし",
|
"send_no_recent": "最近の送信なし",
|
||||||
@@ -1723,7 +1731,6 @@
|
|||||||
"send_txid_copied": "TxIDをクリップボードにコピーしました",
|
"send_txid_copied": "TxIDをクリップボードにコピーしました",
|
||||||
"send_txid_label": "TxID:%s",
|
"send_txid_label": "TxID:%s",
|
||||||
"send_valid_shielded": "有効なシールドアドレス",
|
"send_valid_shielded": "有効なシールドアドレス",
|
||||||
"send_valid_transparent": "有効な透明アドレス",
|
|
||||||
"send_wallet_empty": "ウォレットは空です",
|
"send_wallet_empty": "ウォレットは空です",
|
||||||
"send_yes_clear": "はい、クリア",
|
"send_yes_clear": "はい、クリア",
|
||||||
"sender_balance": "送信者: %.8f → %.8f DRGX",
|
"sender_balance": "送信者: %.8f → %.8f DRGX",
|
||||||
@@ -1929,7 +1936,6 @@
|
|||||||
"switch_stopnode_title": "実行中のノードを停止しますか?",
|
"switch_stopnode_title": "実行中のノードを停止しますか?",
|
||||||
"switch_stopnode_warn": "このウォレットが起動していないノードがすでに実行中です。",
|
"switch_stopnode_warn": "このウォレットが起動していないノードがすでに実行中です。",
|
||||||
"syncing": "同期中...",
|
"syncing": "同期中...",
|
||||||
"t_address": "Tアドレス",
|
|
||||||
"t_addresses": "Tアドレス",
|
"t_addresses": "Tアドレス",
|
||||||
"test_connection": "テスト",
|
"test_connection": "テスト",
|
||||||
"theme": "テーマ",
|
"theme": "テーマ",
|
||||||
@@ -1964,8 +1970,6 @@
|
|||||||
"transfer_sent": "送金完了",
|
"transfer_sent": "送金完了",
|
||||||
"transfer_sent_desc": "送金がネットワークに送信されました。",
|
"transfer_sent_desc": "送金がネットワークに送信されました。",
|
||||||
"transfer_to": "送金先:",
|
"transfer_to": "送金先:",
|
||||||
"transparent": "透明",
|
|
||||||
"transparent_address": "トランスペアレントアドレス",
|
|
||||||
"try_again": "再試行",
|
"try_again": "再試行",
|
||||||
"tt_addr_url": "ブロックエクスプローラーでアドレスを表示するためのベース URL",
|
"tt_addr_url": "ブロックエクスプローラーでアドレスを表示するためのベース URL",
|
||||||
"tt_address_book": "クイック送信用の保存済みアドレスを管理",
|
"tt_address_book": "クイック送信用の保存済みアドレスを管理",
|
||||||
@@ -2037,6 +2041,7 @@
|
|||||||
"tt_low_spec": "すべての重い視覚効果を無効化\\nホットキー:Ctrl+Shift+Down",
|
"tt_low_spec": "すべての重い視覚効果を無効化\\nホットキー:Ctrl+Shift+Down",
|
||||||
"tt_merge": "複数の UTXO を一つのアドレスに統合",
|
"tt_merge": "複数の UTXO を一つのアドレスに統合",
|
||||||
"tt_mine_idle": "システムがアイドル状態(キーボード/マウス入力なし)\\nのとき自動的にマイニングを開始",
|
"tt_mine_idle": "システムがアイドル状態(キーボード/マウス入力なし)\\nのとき自動的にマイニングを開始",
|
||||||
|
"tt_new_mining_address": "ソロマイニング報酬用の透明(R…)アドレスを作成します。支払いは受け取れません。支払いにはシールドアドレスを共有してください。",
|
||||||
"tt_noise": "グレインテクスチャ強度(0% = オフ、100% = 最大)",
|
"tt_noise": "グレインテクスチャ強度(0% = オフ、100% = 最大)",
|
||||||
"tt_open_app_dir": "ObsidianDragon フォルダ(設定、テーマ、ログ)をファイルマネージャーで開く",
|
"tt_open_app_dir": "ObsidianDragon フォルダ(設定、テーマ、ログ)をファイルマネージャーで開く",
|
||||||
"tt_open_data_dir": "ファイルマネージャーでウォレットとブロックチェーンデータのフォルダを開きます",
|
"tt_open_data_dir": "ファイルマネージャーでウォレットとブロックチェーンデータのフォルダを開きます",
|
||||||
|
|||||||
+17
-12
@@ -25,6 +25,7 @@
|
|||||||
"about_website": "웹사이트",
|
"about_website": "웹사이트",
|
||||||
"acrylic": "아크릴",
|
"acrylic": "아크릴",
|
||||||
"add": "추가",
|
"add": "추가",
|
||||||
|
"addr_type_mining": "채굴",
|
||||||
"address": "주소",
|
"address": "주소",
|
||||||
"address_book_add": "주소 추가",
|
"address_book_add": "주소 추가",
|
||||||
"address_book_add_new": "새로 추가",
|
"address_book_add_new": "새로 추가",
|
||||||
@@ -172,21 +173,20 @@
|
|||||||
"balance_history_collecting": "잔액 내역 — 데이터 수집 중...",
|
"balance_history_collecting": "잔액 내역 — 데이터 수집 중...",
|
||||||
"balance_layout": "잔액 레이아웃",
|
"balance_layout": "잔액 레이아웃",
|
||||||
"balance_layout_switched": "레이아웃: %s",
|
"balance_layout_switched": "레이아웃: %s",
|
||||||
|
"balance_mining_fmt": "채굴 보상: %.8f",
|
||||||
"balance_mining_rate": "채굴 중 %s",
|
"balance_mining_rate": "채굴 중 %s",
|
||||||
"balance_shielded_fmt": "차폐: %.8f",
|
"balance_shielded_fmt": "차폐: %.8f",
|
||||||
"balance_syncing_pct": "동기화 중 %.1f%%",
|
"balance_syncing_pct": "동기화 중 %.1f%%",
|
||||||
"balance_transparent_fmt": "투명: %.8f",
|
|
||||||
"baltab_market": "시세",
|
"baltab_market": "시세",
|
||||||
"baltab_market_price_4dp": "시세: $%.4f",
|
"baltab_market_price_4dp": "시세: $%.4f",
|
||||||
"baltab_market_price_8dp": "시세: $%.8f",
|
"baltab_market_price_8dp": "시세: $%.8f",
|
||||||
|
"baltab_mining_addresses_count": "채굴 주소 %d개",
|
||||||
|
"baltab_mining_amount": "채굴 보상 %.8f",
|
||||||
"baltab_pct_change_24h": "%s%.1f%% 24시간",
|
"baltab_pct_change_24h": "%s%.1f%% 24시간",
|
||||||
"baltab_pct_of_total_zaddr": "전체의 %.0f%% · Z-addr %d개",
|
"baltab_pct_of_total_zaddr": "전체의 %.0f%% · Z-addr %d개",
|
||||||
"baltab_shielded": "실드됨",
|
"baltab_shielded": "실드됨",
|
||||||
"baltab_shielded_amount": "실드됨 %.8f",
|
"baltab_shielded_amount": "실드됨 %.8f",
|
||||||
"baltab_t_addresses_count": "T-address %d개",
|
|
||||||
"baltab_total_balance": "총 잔액",
|
"baltab_total_balance": "총 잔액",
|
||||||
"baltab_transparent": "투명",
|
|
||||||
"baltab_transparent_amount": "투명 %.8f",
|
|
||||||
"ban": "차단",
|
"ban": "차단",
|
||||||
"banned_peers": "차단된 피어",
|
"banned_peers": "차단된 피어",
|
||||||
"block": "블록",
|
"block": "블록",
|
||||||
@@ -511,7 +511,7 @@
|
|||||||
"contact_avatar_image_hint": "이미지는 앱에 복사되어 원본이 이동해도 계속 사용할 수 있습니다.",
|
"contact_avatar_image_hint": "이미지는 앱에 복사되어 원본이 이동해도 계속 사용할 수 있습니다.",
|
||||||
"contact_avatar_remove": "제거",
|
"contact_avatar_remove": "제거",
|
||||||
"contact_avatar_shielded": "보호",
|
"contact_avatar_shielded": "보호",
|
||||||
"contact_avatar_transparent": "투명",
|
"contact_chip_mining": "채굴 전용",
|
||||||
"contact_global": "모든 지갑에 표시(전역 연락처)",
|
"contact_global": "모든 지갑에 표시(전역 연락처)",
|
||||||
"contact_global_badge_tt": "전역 연락처 — 모든 지갑에서 표시됨",
|
"contact_global_badge_tt": "전역 연락처 — 모든 지갑에서 표시됨",
|
||||||
"contact_global_tt": "켜짐: 어떤 지갑을 불러오든 이 연락처가 계속 표시됩니다. 꺼짐: 현재 지갑에만 속합니다.",
|
"contact_global_tt": "켜짐: 어떤 지갑을 불러오든 이 연락처가 계속 표시됩니다. 꺼짐: 현재 지갑에만 속합니다.",
|
||||||
@@ -707,8 +707,8 @@
|
|||||||
"export_tx_success": "거래 내보내기 성공",
|
"export_tx_success": "거래 내보내기 성공",
|
||||||
"export_tx_title": "거래를 CSV로 내보내기",
|
"export_tx_title": "거래를 CSV로 내보내기",
|
||||||
"export_viewing_key": "조회 키 내보내기",
|
"export_viewing_key": "조회 키 내보내기",
|
||||||
|
"failed_create_mining_address": "채굴 주소를 만들지 못했습니다",
|
||||||
"failed_create_shielded": "차폐 주소 생성 실패",
|
"failed_create_shielded": "차폐 주소 생성 실패",
|
||||||
"failed_create_transparent": "투명 주소 생성 실패",
|
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"faq_d_mgmt_1_a": "내장 노드는 지갑과 함께 자동으로 시작되고 적절한 시점에 중지되므로, 보통 직접 관리할 필요가 없습니다. 고급 제어 기능(데몬 재시작 포함)은 설정 > 노드 및 보안에 있습니다.",
|
"faq_d_mgmt_1_a": "내장 노드는 지갑과 함께 자동으로 시작되고 적절한 시점에 중지되므로, 보통 직접 관리할 필요가 없습니다. 고급 제어 기능(데몬 재시작 포함)은 설정 > 노드 및 보안에 있습니다.",
|
||||||
"faq_d_mgmt_1_q": "노드를 시작하거나 중지하려면 어떻게 하나요?",
|
"faq_d_mgmt_1_q": "노드를 시작하거나 중지하려면 어떻게 하나요?",
|
||||||
@@ -1226,6 +1226,7 @@
|
|||||||
"miner_fee": "채굴 수수료",
|
"miner_fee": "채굴 수수료",
|
||||||
"mining": "채굴",
|
"mining": "채굴",
|
||||||
"mining_active": "활성",
|
"mining_active": "활성",
|
||||||
|
"mining_address": "채굴 주소",
|
||||||
"mining_address_copied": "채굴 주소가 복사되었습니다",
|
"mining_address_copied": "채굴 주소가 복사되었습니다",
|
||||||
"mining_all_time": "전체 기간",
|
"mining_all_time": "전체 기간",
|
||||||
"mining_already_saved": "풀 URL이 이미 저장되어 있습니다",
|
"mining_already_saved": "풀 URL이 이미 저장되어 있습니다",
|
||||||
@@ -1239,6 +1240,8 @@
|
|||||||
"mining_benchmark_testing": "테스트 중",
|
"mining_benchmark_testing": "테스트 중",
|
||||||
"mining_benchmark_tooltip": "이 CPU에 최적의 스레드 수 찾기",
|
"mining_benchmark_tooltip": "이 CPU에 최적의 스레드 수 찾기",
|
||||||
"mining_block_copied": "블록 해시가 복사되었습니다",
|
"mining_block_copied": "블록 해시가 복사되었습니다",
|
||||||
|
"mining_card_click_to_shield": "클릭하면 성숙한 보상을 지금 차폐합니다.",
|
||||||
|
"mining_card_tooltip": "솔로 채굴 보상은 채굴(투명, R…) 주소로 들어옵니다. 이 주소는 결제를 받을 수 없습니다. 보상은 성숙하면 자동으로 차폐됩니다.",
|
||||||
"mining_chart_1m_ago": "1분 전",
|
"mining_chart_1m_ago": "1분 전",
|
||||||
"mining_chart_5m_ago": "5분 전",
|
"mining_chart_5m_ago": "5분 전",
|
||||||
"mining_chart_now": "현재",
|
"mining_chart_now": "현재",
|
||||||
@@ -1283,6 +1286,7 @@
|
|||||||
"mining_payout_address": "지급 주소",
|
"mining_payout_address": "지급 주소",
|
||||||
"mining_payout_foreign": "⚠ 이 지급 주소는 현재 지갑에 없습니다 — 채굴한 보상이 다른 지갑으로 전송됩니다. 지갑을 전환했다면 주소를 업데이트하세요.",
|
"mining_payout_foreign": "⚠ 이 지급 주소는 현재 지갑에 없습니다 — 채굴한 보상이 다른 지갑으로 전송됩니다. 지갑을 전환했다면 주소를 업데이트하세요.",
|
||||||
"mining_payout_invalid": "유효한 DragonX 주소가 아닙니다 — 시작하기 전에 수정하세요. 그렇지 않으면 채굴 보상이 사라집니다.",
|
"mining_payout_invalid": "유효한 DragonX 주소가 아닙니다 — 시작하기 전에 수정하세요. 그렇지 않으면 채굴 보상이 사라집니다.",
|
||||||
|
"mining_payout_needs_shielded": "풀은 일반 트랜잭션으로 지급하는데, DragonX에서는 이것이 채굴(투명, R…) 주소에 도달할 수 없습니다. 지급 주소로 차폐 주소(zs로 시작)를 사용하세요.",
|
||||||
"mining_payout_tooltip": "채굴 보상 수신 주소",
|
"mining_payout_tooltip": "채굴 보상 수신 주소",
|
||||||
"mining_pool": "풀",
|
"mining_pool": "풀",
|
||||||
"mining_pool_fee": "수수료",
|
"mining_pool_fee": "수수료",
|
||||||
@@ -1295,6 +1299,8 @@
|
|||||||
"mining_refresh": "새로고침",
|
"mining_refresh": "새로고침",
|
||||||
"mining_remove": "제거",
|
"mining_remove": "제거",
|
||||||
"mining_reset_defaults": "기본값으로 재설정",
|
"mining_reset_defaults": "기본값으로 재설정",
|
||||||
|
"mining_rewards": "채굴 보상",
|
||||||
|
"mining_rewards_unshielded": "아직 차폐되지 않음",
|
||||||
"mining_save_payout_address": "지급 주소 저장",
|
"mining_save_payout_address": "지급 주소 저장",
|
||||||
"mining_save_pool_url": "풀 URL 저장",
|
"mining_save_pool_url": "풀 URL 저장",
|
||||||
"mining_saved_addresses": "저장된 주소:",
|
"mining_saved_addresses": "저장된 주소:",
|
||||||
@@ -1328,10 +1334,10 @@
|
|||||||
"network_fee": "네트워크 수수료",
|
"network_fee": "네트워크 수수료",
|
||||||
"network_hashrate": "네트워크 해시레이트",
|
"network_hashrate": "네트워크 해시레이트",
|
||||||
"new": "+ 새로 만들기",
|
"new": "+ 새로 만들기",
|
||||||
|
"new_mining_address": "새 채굴 주소",
|
||||||
|
"new_mining_address_created": "새 채굴 주소를 만들었습니다",
|
||||||
"new_shielded_created": "새 차폐 주소가 생성되었습니다",
|
"new_shielded_created": "새 차폐 주소가 생성되었습니다",
|
||||||
"new_t_address": "새 T 주소",
|
|
||||||
"new_t_transparent": "새 t 주소 (투명)",
|
"new_t_transparent": "새 t 주소 (투명)",
|
||||||
"new_transparent_created": "새 투명 주소가 생성되었습니다",
|
|
||||||
"new_z_address": "새 Z 주소",
|
"new_z_address": "새 Z 주소",
|
||||||
"new_z_shielded": "새 z 주소 (차폐)",
|
"new_z_shielded": "새 z 주소 (차폐)",
|
||||||
"no_addresses": "주소가 없습니다. 위의 버튼을 사용하여 생성하세요.",
|
"no_addresses": "주소가 없습니다. 위의 버튼을 사용하여 생성하세요.",
|
||||||
@@ -1696,6 +1702,8 @@
|
|||||||
"send_from_this_address": "이 주소에서 전송",
|
"send_from_this_address": "이 주소에서 전송",
|
||||||
"send_go_to_receive": "수신으로 이동",
|
"send_go_to_receive": "수신으로 이동",
|
||||||
"send_keep": "유지",
|
"send_keep": "유지",
|
||||||
|
"send_mining_addr_blocked": "채굴(투명) 주소입니다. DragonX에서 이런 주소는 채굴 보상만 받을 수 있으며, 네트워크가 이 주소로의 결제를 거부합니다. 받는 사람에게 차폐 주소(zs로 시작)를 요청하세요.",
|
||||||
|
"send_mining_addr_short": "채굴 주소 — 결제를 받을 수 없음",
|
||||||
"send_network_fee": "네트워크 수수료",
|
"send_network_fee": "네트워크 수수료",
|
||||||
"send_no_balance": "잔액 없음",
|
"send_no_balance": "잔액 없음",
|
||||||
"send_no_recent": "최근 전송 없음",
|
"send_no_recent": "최근 전송 없음",
|
||||||
@@ -1723,7 +1731,6 @@
|
|||||||
"send_txid_copied": "TxID가 클립보드에 복사되었습니다",
|
"send_txid_copied": "TxID가 클립보드에 복사되었습니다",
|
||||||
"send_txid_label": "TxID: %s",
|
"send_txid_label": "TxID: %s",
|
||||||
"send_valid_shielded": "유효한 차폐 주소",
|
"send_valid_shielded": "유효한 차폐 주소",
|
||||||
"send_valid_transparent": "유효한 투명 주소",
|
|
||||||
"send_wallet_empty": "지갑이 비어 있습니다",
|
"send_wallet_empty": "지갑이 비어 있습니다",
|
||||||
"send_yes_clear": "예, 지우기",
|
"send_yes_clear": "예, 지우기",
|
||||||
"sender_balance": "발신자: %.8f → %.8f DRGX",
|
"sender_balance": "발신자: %.8f → %.8f DRGX",
|
||||||
@@ -1929,7 +1936,6 @@
|
|||||||
"switch_stopnode_title": "실행 중인 노드를 중지할까요?",
|
"switch_stopnode_title": "실행 중인 노드를 중지할까요?",
|
||||||
"switch_stopnode_warn": "이 지갑이 시작하지 않은 노드가 이미 실행 중입니다.",
|
"switch_stopnode_warn": "이 지갑이 시작하지 않은 노드가 이미 실행 중입니다.",
|
||||||
"syncing": "동기화 중...",
|
"syncing": "동기화 중...",
|
||||||
"t_address": "T 주소",
|
|
||||||
"t_addresses": "T 주소",
|
"t_addresses": "T 주소",
|
||||||
"test_connection": "테스트",
|
"test_connection": "테스트",
|
||||||
"theme": "테마",
|
"theme": "테마",
|
||||||
@@ -1964,8 +1970,6 @@
|
|||||||
"transfer_sent": "이체 전송됨",
|
"transfer_sent": "이체 전송됨",
|
||||||
"transfer_sent_desc": "이체가 네트워크에 제출되었습니다.",
|
"transfer_sent_desc": "이체가 네트워크에 제출되었습니다.",
|
||||||
"transfer_to": "이체 대상:",
|
"transfer_to": "이체 대상:",
|
||||||
"transparent": "투명",
|
|
||||||
"transparent_address": "투명 주소",
|
|
||||||
"try_again": "다시 시도",
|
"try_again": "다시 시도",
|
||||||
"tt_addr_url": "블록 탐색기에서 주소를 보기 위한 기본 URL",
|
"tt_addr_url": "블록 탐색기에서 주소를 보기 위한 기본 URL",
|
||||||
"tt_address_book": "빠른 전송을 위해 저장된 주소 관리",
|
"tt_address_book": "빠른 전송을 위해 저장된 주소 관리",
|
||||||
@@ -2037,6 +2041,7 @@
|
|||||||
"tt_low_spec": "모든 고부하 시각 효과 비활성화\\n단축키: Ctrl+Shift+Down",
|
"tt_low_spec": "모든 고부하 시각 효과 비활성화\\n단축키: Ctrl+Shift+Down",
|
||||||
"tt_merge": "여러 UTXO를 하나의 주소로 통합",
|
"tt_merge": "여러 UTXO를 하나의 주소로 통합",
|
||||||
"tt_mine_idle": "시스템이 유휴 상태(키보드/마우스 입력 없음)일 때\\n자동으로 채굴 시작",
|
"tt_mine_idle": "시스템이 유휴 상태(키보드/마우스 입력 없음)일 때\\n자동으로 채굴 시작",
|
||||||
|
"tt_new_mining_address": "솔로 채굴 보상용 투명(R…) 주소를 만듭니다. 결제는 받을 수 없으니, 결제용으로는 차폐 주소를 공유하세요.",
|
||||||
"tt_noise": "그레인 텍스처 강도 (0% = 끔, 100% = 최대)",
|
"tt_noise": "그레인 텍스처 강도 (0% = 끔, 100% = 최대)",
|
||||||
"tt_open_app_dir": "파일 관리자에서 ObsidianDragon 폴더(설정, 테마, 로그)를 엽니다",
|
"tt_open_app_dir": "파일 관리자에서 ObsidianDragon 폴더(설정, 테마, 로그)를 엽니다",
|
||||||
"tt_open_data_dir": "지갑 및 블록체인 데이터가 있는 폴더를 파일 탐색기에서 엽니다",
|
"tt_open_data_dir": "지갑 및 블록체인 데이터가 있는 폴더를 파일 탐색기에서 엽니다",
|
||||||
|
|||||||
+17
-12
@@ -25,6 +25,7 @@
|
|||||||
"about_website": "Website",
|
"about_website": "Website",
|
||||||
"acrylic": "Acrílico",
|
"acrylic": "Acrílico",
|
||||||
"add": "Adicionar",
|
"add": "Adicionar",
|
||||||
|
"addr_type_mining": "Mineração",
|
||||||
"address": "Endereço",
|
"address": "Endereço",
|
||||||
"address_book_add": "Adicionar Endereço",
|
"address_book_add": "Adicionar Endereço",
|
||||||
"address_book_add_new": "Adicionar Novo",
|
"address_book_add_new": "Adicionar Novo",
|
||||||
@@ -172,21 +173,20 @@
|
|||||||
"balance_history_collecting": "Histórico de saldo — coletando dados...",
|
"balance_history_collecting": "Histórico de saldo — coletando dados...",
|
||||||
"balance_layout": "Layout do Saldo",
|
"balance_layout": "Layout do Saldo",
|
||||||
"balance_layout_switched": "Layout: %s",
|
"balance_layout_switched": "Layout: %s",
|
||||||
|
"balance_mining_fmt": "Recompensas de mineração: %.8f",
|
||||||
"balance_mining_rate": "Minerando %s",
|
"balance_mining_rate": "Minerando %s",
|
||||||
"balance_shielded_fmt": "Blindado: %.8f",
|
"balance_shielded_fmt": "Blindado: %.8f",
|
||||||
"balance_syncing_pct": "Sincronizando %.1f%%",
|
"balance_syncing_pct": "Sincronizando %.1f%%",
|
||||||
"balance_transparent_fmt": "Transparente: %.8f",
|
|
||||||
"baltab_market": "Mercado",
|
"baltab_market": "Mercado",
|
||||||
"baltab_market_price_4dp": "Mercado: $%.4f",
|
"baltab_market_price_4dp": "Mercado: $%.4f",
|
||||||
"baltab_market_price_8dp": "Mercado: $%.8f",
|
"baltab_market_price_8dp": "Mercado: $%.8f",
|
||||||
|
"baltab_mining_addresses_count": "%d endereços de mineração",
|
||||||
|
"baltab_mining_amount": "Recompensas de mineração %.8f",
|
||||||
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
"baltab_pct_change_24h": "%s%.1f%% 24h",
|
||||||
"baltab_pct_of_total_zaddr": "%.0f%% do total · %d Z-addr",
|
"baltab_pct_of_total_zaddr": "%.0f%% do total · %d Z-addr",
|
||||||
"baltab_shielded": "Blindado",
|
"baltab_shielded": "Blindado",
|
||||||
"baltab_shielded_amount": "Blindado %.8f",
|
"baltab_shielded_amount": "Blindado %.8f",
|
||||||
"baltab_t_addresses_count": "%d T-addresses",
|
|
||||||
"baltab_total_balance": "Saldo Total",
|
"baltab_total_balance": "Saldo Total",
|
||||||
"baltab_transparent": "Transparente",
|
|
||||||
"baltab_transparent_amount": "Transparente %.8f",
|
|
||||||
"ban": "Banir",
|
"ban": "Banir",
|
||||||
"banned_peers": "Pares Banidos",
|
"banned_peers": "Pares Banidos",
|
||||||
"block": "Bloco",
|
"block": "Bloco",
|
||||||
@@ -511,7 +511,7 @@
|
|||||||
"contact_avatar_image_hint": "A imagem é copiada para o app para continuar disponível se o original for movido.",
|
"contact_avatar_image_hint": "A imagem é copiada para o app para continuar disponível se o original for movido.",
|
||||||
"contact_avatar_remove": "Remover",
|
"contact_avatar_remove": "Remover",
|
||||||
"contact_avatar_shielded": "Blindado",
|
"contact_avatar_shielded": "Blindado",
|
||||||
"contact_avatar_transparent": "Transparente",
|
"contact_chip_mining": "Só mineração",
|
||||||
"contact_global": "Mostrar em todas as carteiras (contato global)",
|
"contact_global": "Mostrar em todas as carteiras (contato global)",
|
||||||
"contact_global_badge_tt": "Contato global — visível em todas as carteiras",
|
"contact_global_badge_tt": "Contato global — visível em todas as carteiras",
|
||||||
"contact_global_tt": "Ativado: este contato permanece visível em qualquer carteira que você carregar. Desativado: ele pertence apenas à carteira atual.",
|
"contact_global_tt": "Ativado: este contato permanece visível em qualquer carteira que você carregar. Desativado: ele pertence apenas à carteira atual.",
|
||||||
@@ -707,8 +707,8 @@
|
|||||||
"export_tx_success": "Transações exportadas com sucesso",
|
"export_tx_success": "Transações exportadas com sucesso",
|
||||||
"export_tx_title": "Exportar Transações para CSV",
|
"export_tx_title": "Exportar Transações para CSV",
|
||||||
"export_viewing_key": "Exportar Chave de Visualização",
|
"export_viewing_key": "Exportar Chave de Visualização",
|
||||||
|
"failed_create_mining_address": "Falha ao criar o endereço de mineração",
|
||||||
"failed_create_shielded": "Falha ao criar endereço blindado",
|
"failed_create_shielded": "Falha ao criar endereço blindado",
|
||||||
"failed_create_transparent": "Falha ao criar endereço transparente",
|
|
||||||
"faq": "Perguntas frequentes",
|
"faq": "Perguntas frequentes",
|
||||||
"faq_d_mgmt_1_a": "O node incorporado inicia automaticamente com a carteira e para quando apropriado, então normalmente você não precisa gerenciá-lo manualmente. Os controles avançados (incluindo reiniciar o daemon) ficam em Configurações > Node e Segurança.",
|
"faq_d_mgmt_1_a": "O node incorporado inicia automaticamente com a carteira e para quando apropriado, então normalmente você não precisa gerenciá-lo manualmente. Os controles avançados (incluindo reiniciar o daemon) ficam em Configurações > Node e Segurança.",
|
||||||
"faq_d_mgmt_1_q": "Como inicio ou paro o node?",
|
"faq_d_mgmt_1_q": "Como inicio ou paro o node?",
|
||||||
@@ -1226,6 +1226,7 @@
|
|||||||
"miner_fee": "Taxa de Minerador",
|
"miner_fee": "Taxa de Minerador",
|
||||||
"mining": "Mineração",
|
"mining": "Mineração",
|
||||||
"mining_active": "Ativo",
|
"mining_active": "Ativo",
|
||||||
|
"mining_address": "Endereço de mineração",
|
||||||
"mining_address_copied": "Endereço de mineração copiado",
|
"mining_address_copied": "Endereço de mineração copiado",
|
||||||
"mining_all_time": "Todo o Tempo",
|
"mining_all_time": "Todo o Tempo",
|
||||||
"mining_already_saved": "URL do pool já salva",
|
"mining_already_saved": "URL do pool já salva",
|
||||||
@@ -1239,6 +1240,8 @@
|
|||||||
"mining_benchmark_testing": "Testando",
|
"mining_benchmark_testing": "Testando",
|
||||||
"mining_benchmark_tooltip": "Encontrar o número ideal de threads para esta CPU",
|
"mining_benchmark_tooltip": "Encontrar o número ideal de threads para esta CPU",
|
||||||
"mining_block_copied": "Hash do bloco copiado",
|
"mining_block_copied": "Hash do bloco copiado",
|
||||||
|
"mining_card_click_to_shield": "Clique para blindar agora as recompensas amadurecidas.",
|
||||||
|
"mining_card_tooltip": "As recompensas de mineração solo chegam aos seus endereços de mineração (transparentes, R…). Esses endereços não podem receber pagamentos. As recompensas são blindadas automaticamente quando amadurecem.",
|
||||||
"mining_chart_1m_ago": "1m atrás",
|
"mining_chart_1m_ago": "1m atrás",
|
||||||
"mining_chart_5m_ago": "5m atrás",
|
"mining_chart_5m_ago": "5m atrás",
|
||||||
"mining_chart_now": "Agora",
|
"mining_chart_now": "Agora",
|
||||||
@@ -1283,6 +1286,7 @@
|
|||||||
"mining_payout_address": "Endereço de Pagamento",
|
"mining_payout_address": "Endereço de Pagamento",
|
||||||
"mining_payout_foreign": "⚠ Este endereço de pagamento não está na sua carteira atual — as recompensas mineradas iriam para uma carteira diferente. Atualize-o se você trocou de carteira.",
|
"mining_payout_foreign": "⚠ Este endereço de pagamento não está na sua carteira atual — as recompensas mineradas iriam para uma carteira diferente. Atualize-o se você trocou de carteira.",
|
||||||
"mining_payout_invalid": "Endereço DragonX inválido — corrija antes de iniciar, ou as recompensas de mineração serão perdidas.",
|
"mining_payout_invalid": "Endereço DragonX inválido — corrija antes de iniciar, ou as recompensas de mineração serão perdidas.",
|
||||||
|
"mining_payout_needs_shielded": "Os pools pagam com transações comuns, que no DragonX não conseguem chegar a um endereço de mineração (transparente, R…). Use um endereço blindado (começa com zs) como endereço de pagamento.",
|
||||||
"mining_payout_tooltip": "Endereço para receber recompensas de mineração",
|
"mining_payout_tooltip": "Endereço para receber recompensas de mineração",
|
||||||
"mining_pool": "Pool",
|
"mining_pool": "Pool",
|
||||||
"mining_pool_fee": "Taxa",
|
"mining_pool_fee": "Taxa",
|
||||||
@@ -1295,6 +1299,8 @@
|
|||||||
"mining_refresh": "Atualizar",
|
"mining_refresh": "Atualizar",
|
||||||
"mining_remove": "Remover",
|
"mining_remove": "Remover",
|
||||||
"mining_reset_defaults": "Redefinir Padrões",
|
"mining_reset_defaults": "Redefinir Padrões",
|
||||||
|
"mining_rewards": "Recompensas de mineração",
|
||||||
|
"mining_rewards_unshielded": "Ainda não blindadas",
|
||||||
"mining_save_payout_address": "Salvar endereço de pagamento",
|
"mining_save_payout_address": "Salvar endereço de pagamento",
|
||||||
"mining_save_pool_url": "Salvar URL do pool",
|
"mining_save_pool_url": "Salvar URL do pool",
|
||||||
"mining_saved_addresses": "Endereços Salvos:",
|
"mining_saved_addresses": "Endereços Salvos:",
|
||||||
@@ -1328,10 +1334,10 @@
|
|||||||
"network_fee": "TAXA DA REDE",
|
"network_fee": "TAXA DA REDE",
|
||||||
"network_hashrate": "Hashrate da Rede",
|
"network_hashrate": "Hashrate da Rede",
|
||||||
"new": "+ Novo",
|
"new": "+ Novo",
|
||||||
|
"new_mining_address": "Novo endereço de mineração",
|
||||||
|
"new_mining_address_created": "Novo endereço de mineração criado",
|
||||||
"new_shielded_created": "Novo endereço blindado criado",
|
"new_shielded_created": "Novo endereço blindado criado",
|
||||||
"new_t_address": "Novo Endereço T",
|
|
||||||
"new_t_transparent": "Novo endereço t (Transparente)",
|
"new_t_transparent": "Novo endereço t (Transparente)",
|
||||||
"new_transparent_created": "Novo endereço transparente criado",
|
|
||||||
"new_z_address": "Novo Endereço Z",
|
"new_z_address": "Novo Endereço Z",
|
||||||
"new_z_shielded": "Novo endereço z (Blindado)",
|
"new_z_shielded": "Novo endereço z (Blindado)",
|
||||||
"no_addresses": "Nenhum endereço encontrado. Crie um usando os botões acima.",
|
"no_addresses": "Nenhum endereço encontrado. Crie um usando os botões acima.",
|
||||||
@@ -1696,6 +1702,8 @@
|
|||||||
"send_from_this_address": "Enviar deste endereço",
|
"send_from_this_address": "Enviar deste endereço",
|
||||||
"send_go_to_receive": "Ir para Receber",
|
"send_go_to_receive": "Ir para Receber",
|
||||||
"send_keep": "Manter",
|
"send_keep": "Manter",
|
||||||
|
"send_mining_addr_blocked": "Este é um endereço de mineração (transparente). No DragonX eles só podem receber recompensas de mineração — a rede rejeita pagamentos para eles. Peça ao destinatário um endereço blindado (começa com zs).",
|
||||||
|
"send_mining_addr_short": "Endereço de mineração — não pode receber pagamentos",
|
||||||
"send_network_fee": "TAXA DA REDE",
|
"send_network_fee": "TAXA DA REDE",
|
||||||
"send_no_balance": "Sem saldo",
|
"send_no_balance": "Sem saldo",
|
||||||
"send_no_recent": "Nenhum envio recente",
|
"send_no_recent": "Nenhum envio recente",
|
||||||
@@ -1723,7 +1731,6 @@
|
|||||||
"send_txid_copied": "TxID copiado para a área de transferência",
|
"send_txid_copied": "TxID copiado para a área de transferência",
|
||||||
"send_txid_label": "TxID: %s",
|
"send_txid_label": "TxID: %s",
|
||||||
"send_valid_shielded": "Endereço blindado válido",
|
"send_valid_shielded": "Endereço blindado válido",
|
||||||
"send_valid_transparent": "Endereço transparente válido",
|
|
||||||
"send_wallet_empty": "Sua carteira está vazia",
|
"send_wallet_empty": "Sua carteira está vazia",
|
||||||
"send_yes_clear": "Sim, Limpar",
|
"send_yes_clear": "Sim, Limpar",
|
||||||
"sender_balance": "Remetente: %.8f → %.8f DRGX",
|
"sender_balance": "Remetente: %.8f → %.8f DRGX",
|
||||||
@@ -1929,7 +1936,6 @@
|
|||||||
"switch_stopnode_title": "Parar o nó em execução?",
|
"switch_stopnode_title": "Parar o nó em execução?",
|
||||||
"switch_stopnode_warn": "Já há um nó em execução que esta carteira não iniciou.",
|
"switch_stopnode_warn": "Já há um nó em execução que esta carteira não iniciou.",
|
||||||
"syncing": "Sincronizando...",
|
"syncing": "Sincronizando...",
|
||||||
"t_address": "Endereço T",
|
|
||||||
"t_addresses": "Endereços T",
|
"t_addresses": "Endereços T",
|
||||||
"test_connection": "Testar",
|
"test_connection": "Testar",
|
||||||
"theme": "Tema",
|
"theme": "Tema",
|
||||||
@@ -1964,8 +1970,6 @@
|
|||||||
"transfer_sent": "Transferência Enviada",
|
"transfer_sent": "Transferência Enviada",
|
||||||
"transfer_sent_desc": "Sua transferência foi enviada à rede.",
|
"transfer_sent_desc": "Sua transferência foi enviada à rede.",
|
||||||
"transfer_to": "Transferir para:",
|
"transfer_to": "Transferir para:",
|
||||||
"transparent": "Transparente",
|
|
||||||
"transparent_address": "Endereço Transparente",
|
|
||||||
"try_again": "Tentar novamente",
|
"try_again": "Tentar novamente",
|
||||||
"tt_addr_url": "URL base para visualizar endereços em um explorador de blocos",
|
"tt_addr_url": "URL base para visualizar endereços em um explorador de blocos",
|
||||||
"tt_address_book": "Gerenciar endereços salvos para envio rápido",
|
"tt_address_book": "Gerenciar endereços salvos para envio rápido",
|
||||||
@@ -2037,6 +2041,7 @@
|
|||||||
"tt_low_spec": "Desativar todos os efeitos visuais pesados\\nAtalho: Ctrl+Shift+Down",
|
"tt_low_spec": "Desativar todos os efeitos visuais pesados\\nAtalho: Ctrl+Shift+Down",
|
||||||
"tt_merge": "Consolidar múltiplos UTXOs em um endereço",
|
"tt_merge": "Consolidar múltiplos UTXOs em um endereço",
|
||||||
"tt_mine_idle": "Iniciar mineração automaticamente quando o\\nsistema estiver ocioso (sem entrada de teclado/mouse)",
|
"tt_mine_idle": "Iniciar mineração automaticamente quando o\\nsistema estiver ocioso (sem entrada de teclado/mouse)",
|
||||||
|
"tt_new_mining_address": "Cria um endereço transparente (R…) para recompensas de mineração solo. Ele não pode receber pagamentos — compartilhe um endereço blindado para isso.",
|
||||||
"tt_noise": "Intensidade de textura granulada (0% = desligado, 100% = máximo)",
|
"tt_noise": "Intensidade de textura granulada (0% = desligado, 100% = máximo)",
|
||||||
"tt_open_app_dir": "Abrir a pasta ObsidianDragon (configurações, temas, logs) no gerenciador de arquivos",
|
"tt_open_app_dir": "Abrir a pasta ObsidianDragon (configurações, temas, logs) no gerenciador de arquivos",
|
||||||
"tt_open_data_dir": "Abrir a pasta com os dados da sua carteira e da blockchain no gerenciador de arquivos",
|
"tt_open_data_dir": "Abrir a pasta com os dados da sua carteira e da blockchain no gerenciador de arquivos",
|
||||||
|
|||||||
+17
-12
@@ -25,6 +25,7 @@
|
|||||||
"about_website": "Веб-сайт",
|
"about_website": "Веб-сайт",
|
||||||
"acrylic": "Акрил",
|
"acrylic": "Акрил",
|
||||||
"add": "Добавить",
|
"add": "Добавить",
|
||||||
|
"addr_type_mining": "Майнинг",
|
||||||
"address": "Адрес",
|
"address": "Адрес",
|
||||||
"address_book_add": "Добавить адрес",
|
"address_book_add": "Добавить адрес",
|
||||||
"address_book_add_new": "Добавить новый",
|
"address_book_add_new": "Добавить новый",
|
||||||
@@ -172,21 +173,20 @@
|
|||||||
"balance_history_collecting": "История баланса — сбор данных...",
|
"balance_history_collecting": "История баланса — сбор данных...",
|
||||||
"balance_layout": "Макет баланса",
|
"balance_layout": "Макет баланса",
|
||||||
"balance_layout_switched": "Раскладка: %s",
|
"balance_layout_switched": "Раскладка: %s",
|
||||||
|
"balance_mining_fmt": "Награды за майнинг: %.8f",
|
||||||
"balance_mining_rate": "Майнинг %s",
|
"balance_mining_rate": "Майнинг %s",
|
||||||
"balance_shielded_fmt": "Экранировано: %.8f",
|
"balance_shielded_fmt": "Экранировано: %.8f",
|
||||||
"balance_syncing_pct": "Синхронизация %.1f%%",
|
"balance_syncing_pct": "Синхронизация %.1f%%",
|
||||||
"balance_transparent_fmt": "Прозрачный: %.8f",
|
|
||||||
"baltab_market": "Рынок",
|
"baltab_market": "Рынок",
|
||||||
"baltab_market_price_4dp": "Рынок: $%.4f",
|
"baltab_market_price_4dp": "Рынок: $%.4f",
|
||||||
"baltab_market_price_8dp": "Рынок: $%.8f",
|
"baltab_market_price_8dp": "Рынок: $%.8f",
|
||||||
|
"baltab_mining_addresses_count": "Адресов для майнинга: %d",
|
||||||
|
"baltab_mining_amount": "Награды за майнинг %.8f",
|
||||||
"baltab_pct_change_24h": "%s%.1f%% за 24ч",
|
"baltab_pct_change_24h": "%s%.1f%% за 24ч",
|
||||||
"baltab_pct_of_total_zaddr": "%.0f%% от общего · %d Z-addr",
|
"baltab_pct_of_total_zaddr": "%.0f%% от общего · %d Z-addr",
|
||||||
"baltab_shielded": "Скрытый",
|
"baltab_shielded": "Скрытый",
|
||||||
"baltab_shielded_amount": "Скрытый %.8f",
|
"baltab_shielded_amount": "Скрытый %.8f",
|
||||||
"baltab_t_addresses_count": "%d T-адресов",
|
|
||||||
"baltab_total_balance": "Общий баланс",
|
"baltab_total_balance": "Общий баланс",
|
||||||
"baltab_transparent": "Прозрачный",
|
|
||||||
"baltab_transparent_amount": "Прозрачный %.8f",
|
|
||||||
"ban": "Заблокировать",
|
"ban": "Заблокировать",
|
||||||
"banned_peers": "Заблокированные узлы",
|
"banned_peers": "Заблокированные узлы",
|
||||||
"block": "Блок",
|
"block": "Блок",
|
||||||
@@ -511,7 +511,7 @@
|
|||||||
"contact_avatar_image_hint": "Изображение копируется в приложение, чтобы оставаться доступным, если оригинал переместят.",
|
"contact_avatar_image_hint": "Изображение копируется в приложение, чтобы оставаться доступным, если оригинал переместят.",
|
||||||
"contact_avatar_remove": "Удалить",
|
"contact_avatar_remove": "Удалить",
|
||||||
"contact_avatar_shielded": "Защищённый",
|
"contact_avatar_shielded": "Защищённый",
|
||||||
"contact_avatar_transparent": "Прозрачный",
|
"contact_chip_mining": "Только майнинг",
|
||||||
"contact_global": "Показывать во всех кошельках (глобальный контакт)",
|
"contact_global": "Показывать во всех кошельках (глобальный контакт)",
|
||||||
"contact_global_badge_tt": "Глобальный контакт — виден во всех кошельках",
|
"contact_global_badge_tt": "Глобальный контакт — виден во всех кошельках",
|
||||||
"contact_global_tt": "Вкл.: этот контакт остаётся видимым, какой бы кошелёк вы ни загрузили. Выкл.: он принадлежит только текущему кошельку.",
|
"contact_global_tt": "Вкл.: этот контакт остаётся видимым, какой бы кошелёк вы ни загрузили. Выкл.: он принадлежит только текущему кошельку.",
|
||||||
@@ -707,8 +707,8 @@
|
|||||||
"export_tx_success": "Транзакции успешно экспортированы",
|
"export_tx_success": "Транзакции успешно экспортированы",
|
||||||
"export_tx_title": "Экспорт транзакций в CSV",
|
"export_tx_title": "Экспорт транзакций в CSV",
|
||||||
"export_viewing_key": "Экспорт ключа просмотра",
|
"export_viewing_key": "Экспорт ключа просмотра",
|
||||||
|
"failed_create_mining_address": "Не удалось создать адрес для майнинга",
|
||||||
"failed_create_shielded": "Не удалось создать экранированный адрес",
|
"failed_create_shielded": "Не удалось создать экранированный адрес",
|
||||||
"failed_create_transparent": "Не удалось создать прозрачный адрес",
|
|
||||||
"faq": "ЧаВо",
|
"faq": "ЧаВо",
|
||||||
"faq_d_mgmt_1_a": "Встроенный узел запускается автоматически вместе с кошельком и останавливается, когда это уместно, поэтому обычно управлять им вручную не нужно. Расширенные элементы управления (включая перезапуск демона) находятся в Настройки > Узел и безопасность.",
|
"faq_d_mgmt_1_a": "Встроенный узел запускается автоматически вместе с кошельком и останавливается, когда это уместно, поэтому обычно управлять им вручную не нужно. Расширенные элементы управления (включая перезапуск демона) находятся в Настройки > Узел и безопасность.",
|
||||||
"faq_d_mgmt_1_q": "Как запустить или остановить узел?",
|
"faq_d_mgmt_1_q": "Как запустить или остановить узел?",
|
||||||
@@ -1226,6 +1226,7 @@
|
|||||||
"miner_fee": "Комиссия майнера",
|
"miner_fee": "Комиссия майнера",
|
||||||
"mining": "Майнинг",
|
"mining": "Майнинг",
|
||||||
"mining_active": "Активен",
|
"mining_active": "Активен",
|
||||||
|
"mining_address": "Адрес для майнинга",
|
||||||
"mining_address_copied": "Адрес майнинга скопирован",
|
"mining_address_copied": "Адрес майнинга скопирован",
|
||||||
"mining_all_time": "За всё время",
|
"mining_all_time": "За всё время",
|
||||||
"mining_already_saved": "URL пула уже сохранён",
|
"mining_already_saved": "URL пула уже сохранён",
|
||||||
@@ -1239,6 +1240,8 @@
|
|||||||
"mining_benchmark_testing": "Тестирование",
|
"mining_benchmark_testing": "Тестирование",
|
||||||
"mining_benchmark_tooltip": "Найти оптимальное количество потоков для этого процессора",
|
"mining_benchmark_tooltip": "Найти оптимальное количество потоков для этого процессора",
|
||||||
"mining_block_copied": "Хэш блока скопирован",
|
"mining_block_copied": "Хэш блока скопирован",
|
||||||
|
"mining_card_click_to_shield": "Нажмите, чтобы экранировать созревшие награды сейчас.",
|
||||||
|
"mining_card_tooltip": "Награды за соло-майнинг поступают на ваши адреса для майнинга (прозрачные, R…). Эти адреса не принимают платежи. Награды экранируются автоматически, когда созревают.",
|
||||||
"mining_chart_1m_ago": "1м назад",
|
"mining_chart_1m_ago": "1м назад",
|
||||||
"mining_chart_5m_ago": "5м назад",
|
"mining_chart_5m_ago": "5м назад",
|
||||||
"mining_chart_now": "Сейчас",
|
"mining_chart_now": "Сейчас",
|
||||||
@@ -1283,6 +1286,7 @@
|
|||||||
"mining_payout_address": "Адрес выплат",
|
"mining_payout_address": "Адрес выплат",
|
||||||
"mining_payout_foreign": "⚠ Этот адрес выплат отсутствует в вашем текущем кошельке — намайненные вознаграждения будут отправлены в другой кошелёк. Обновите его, если вы сменили кошелёк.",
|
"mining_payout_foreign": "⚠ Этот адрес выплат отсутствует в вашем текущем кошельке — намайненные вознаграждения будут отправлены в другой кошелёк. Обновите его, если вы сменили кошелёк.",
|
||||||
"mining_payout_invalid": "Недействительный адрес DragonX — исправьте перед запуском, иначе награды за майнинг будут потеряны.",
|
"mining_payout_invalid": "Недействительный адрес DragonX — исправьте перед запуском, иначе награды за майнинг будут потеряны.",
|
||||||
|
"mining_payout_needs_shielded": "Пулы выплачивают обычными транзакциями, которые в DragonX не могут дойти до адреса для майнинга (прозрачного, R…). Укажите экранированный адрес (начинается с zs) как адрес для выплат.",
|
||||||
"mining_payout_tooltip": "Адрес для получения вознаграждений за майнинг",
|
"mining_payout_tooltip": "Адрес для получения вознаграждений за майнинг",
|
||||||
"mining_pool": "Пул",
|
"mining_pool": "Пул",
|
||||||
"mining_pool_fee": "Комиссия",
|
"mining_pool_fee": "Комиссия",
|
||||||
@@ -1295,6 +1299,8 @@
|
|||||||
"mining_refresh": "Обновить",
|
"mining_refresh": "Обновить",
|
||||||
"mining_remove": "Удалить",
|
"mining_remove": "Удалить",
|
||||||
"mining_reset_defaults": "Сбросить настройки",
|
"mining_reset_defaults": "Сбросить настройки",
|
||||||
|
"mining_rewards": "Награды за майнинг",
|
||||||
|
"mining_rewards_unshielded": "Ещё не экранированы",
|
||||||
"mining_save_payout_address": "Сохранить адрес выплат",
|
"mining_save_payout_address": "Сохранить адрес выплат",
|
||||||
"mining_save_pool_url": "Сохранить URL пула",
|
"mining_save_pool_url": "Сохранить URL пула",
|
||||||
"mining_saved_addresses": "Сохранённые адреса:",
|
"mining_saved_addresses": "Сохранённые адреса:",
|
||||||
@@ -1328,10 +1334,10 @@
|
|||||||
"network_fee": "СЕТЕВАЯ КОМИССИЯ",
|
"network_fee": "СЕТЕВАЯ КОМИССИЯ",
|
||||||
"network_hashrate": "Хешрейт сети",
|
"network_hashrate": "Хешрейт сети",
|
||||||
"new": "+ Новый",
|
"new": "+ Новый",
|
||||||
|
"new_mining_address": "Новый адрес для майнинга",
|
||||||
|
"new_mining_address_created": "Новый адрес для майнинга создан",
|
||||||
"new_shielded_created": "Создан новый экранированный адрес",
|
"new_shielded_created": "Создан новый экранированный адрес",
|
||||||
"new_t_address": "Новый T-адрес",
|
|
||||||
"new_t_transparent": "Новый t-адрес (Прозрачный)",
|
"new_t_transparent": "Новый t-адрес (Прозрачный)",
|
||||||
"new_transparent_created": "Создан новый прозрачный адрес",
|
|
||||||
"new_z_address": "Новый Z-адрес",
|
"new_z_address": "Новый Z-адрес",
|
||||||
"new_z_shielded": "Новый z-адрес (Экранированный)",
|
"new_z_shielded": "Новый z-адрес (Экранированный)",
|
||||||
"no_addresses": "Адреса не найдены. Создайте один, используя кнопки выше.",
|
"no_addresses": "Адреса не найдены. Создайте один, используя кнопки выше.",
|
||||||
@@ -1696,6 +1702,8 @@
|
|||||||
"send_from_this_address": "Отправить с этого адреса",
|
"send_from_this_address": "Отправить с этого адреса",
|
||||||
"send_go_to_receive": "Перейти к получению",
|
"send_go_to_receive": "Перейти к получению",
|
||||||
"send_keep": "Сохранить",
|
"send_keep": "Сохранить",
|
||||||
|
"send_mining_addr_blocked": "Это адрес для майнинга (прозрачный). В DragonX такие адреса могут получать только награды за майнинг — сеть отклоняет платежи на них. Попросите у получателя экранированный адрес (начинается с zs).",
|
||||||
|
"send_mining_addr_short": "Адрес для майнинга — не принимает платежи",
|
||||||
"send_network_fee": "СЕТЕВАЯ КОМИССИЯ",
|
"send_network_fee": "СЕТЕВАЯ КОМИССИЯ",
|
||||||
"send_no_balance": "Нет баланса",
|
"send_no_balance": "Нет баланса",
|
||||||
"send_no_recent": "Нет недавних отправлений",
|
"send_no_recent": "Нет недавних отправлений",
|
||||||
@@ -1723,7 +1731,6 @@
|
|||||||
"send_txid_copied": "TxID скопирован в буфер обмена",
|
"send_txid_copied": "TxID скопирован в буфер обмена",
|
||||||
"send_txid_label": "TxID: %s",
|
"send_txid_label": "TxID: %s",
|
||||||
"send_valid_shielded": "Действительный экранированный адрес",
|
"send_valid_shielded": "Действительный экранированный адрес",
|
||||||
"send_valid_transparent": "Действительный прозрачный адрес",
|
|
||||||
"send_wallet_empty": "Ваш кошелёк пуст",
|
"send_wallet_empty": "Ваш кошелёк пуст",
|
||||||
"send_yes_clear": "Да, очистить",
|
"send_yes_clear": "Да, очистить",
|
||||||
"sender_balance": "Отправитель: %.8f → %.8f DRGX",
|
"sender_balance": "Отправитель: %.8f → %.8f DRGX",
|
||||||
@@ -1929,7 +1936,6 @@
|
|||||||
"switch_stopnode_title": "Остановить запущенный узел?",
|
"switch_stopnode_title": "Остановить запущенный узел?",
|
||||||
"switch_stopnode_warn": "Уже запущен узел, который не был запущен этим кошельком.",
|
"switch_stopnode_warn": "Уже запущен узел, который не был запущен этим кошельком.",
|
||||||
"syncing": "Синхронизация...",
|
"syncing": "Синхронизация...",
|
||||||
"t_address": "T-адрес",
|
|
||||||
"t_addresses": "T-адреса",
|
"t_addresses": "T-адреса",
|
||||||
"test_connection": "Тест",
|
"test_connection": "Тест",
|
||||||
"theme": "Тема",
|
"theme": "Тема",
|
||||||
@@ -1964,8 +1970,6 @@
|
|||||||
"transfer_sent": "Перевод отправлен",
|
"transfer_sent": "Перевод отправлен",
|
||||||
"transfer_sent_desc": "Ваш перевод отправлен в сеть.",
|
"transfer_sent_desc": "Ваш перевод отправлен в сеть.",
|
||||||
"transfer_to": "Перевести на:",
|
"transfer_to": "Перевести на:",
|
||||||
"transparent": "Прозрачный",
|
|
||||||
"transparent_address": "Прозрачный адрес",
|
|
||||||
"try_again": "Повторить",
|
"try_again": "Повторить",
|
||||||
"tt_addr_url": "Базовый URL для просмотра адресов в обозревателе блоков",
|
"tt_addr_url": "Базовый URL для просмотра адресов в обозревателе блоков",
|
||||||
"tt_address_book": "Управление сохранёнными адресами для быстрой отправки",
|
"tt_address_book": "Управление сохранёнными адресами для быстрой отправки",
|
||||||
@@ -2037,6 +2041,7 @@
|
|||||||
"tt_low_spec": "Отключить все тяжёлые визуальные эффекты\\nГорячая клавиша: Ctrl+Shift+Down",
|
"tt_low_spec": "Отключить все тяжёлые визуальные эффекты\\nГорячая клавиша: Ctrl+Shift+Down",
|
||||||
"tt_merge": "Объединить несколько UTXO в один адрес",
|
"tt_merge": "Объединить несколько UTXO в один адрес",
|
||||||
"tt_mine_idle": "Автоматически начать майнинг при\\nпростое системы (нет ввода с клавиатуры/мыши)",
|
"tt_mine_idle": "Автоматически начать майнинг при\\nпростое системы (нет ввода с клавиатуры/мыши)",
|
||||||
|
"tt_new_mining_address": "Создаёт прозрачный адрес (R…) для наград за соло-майнинг. Он не принимает платежи — для них сообщайте экранированный адрес.",
|
||||||
"tt_noise": "Интенсивность зернистой текстуры (0% = выкл., 100% = максимум)",
|
"tt_noise": "Интенсивность зернистой текстуры (0% = выкл., 100% = максимум)",
|
||||||
"tt_open_app_dir": "Открыть папку ObsidianDragon (настройки, темы, логи) в файловом менеджере",
|
"tt_open_app_dir": "Открыть папку ObsidianDragon (настройки, темы, логи) в файловом менеджере",
|
||||||
"tt_open_data_dir": "Открыть в файловом менеджере папку с данными кошелька и блокчейна",
|
"tt_open_data_dir": "Открыть в файловом менеджере папку с данными кошелька и блокчейна",
|
||||||
|
|||||||
+17
-12
@@ -25,6 +25,7 @@
|
|||||||
"about_website": "网站",
|
"about_website": "网站",
|
||||||
"acrylic": "亚克力",
|
"acrylic": "亚克力",
|
||||||
"add": "添加",
|
"add": "添加",
|
||||||
|
"addr_type_mining": "挖矿",
|
||||||
"address": "地址",
|
"address": "地址",
|
||||||
"address_book_add": "添加地址",
|
"address_book_add": "添加地址",
|
||||||
"address_book_add_new": "添加新地址",
|
"address_book_add_new": "添加新地址",
|
||||||
@@ -172,21 +173,20 @@
|
|||||||
"balance_history_collecting": "余额历史——正在收集数据…",
|
"balance_history_collecting": "余额历史——正在收集数据…",
|
||||||
"balance_layout": "余额布局",
|
"balance_layout": "余额布局",
|
||||||
"balance_layout_switched": "布局:%s",
|
"balance_layout_switched": "布局:%s",
|
||||||
|
"balance_mining_fmt": "挖矿奖励:%.8f",
|
||||||
"balance_mining_rate": "挖矿中 %s",
|
"balance_mining_rate": "挖矿中 %s",
|
||||||
"balance_shielded_fmt": "屏蔽:%.8f",
|
"balance_shielded_fmt": "屏蔽:%.8f",
|
||||||
"balance_syncing_pct": "同步中 %.1f%%",
|
"balance_syncing_pct": "同步中 %.1f%%",
|
||||||
"balance_transparent_fmt": "透明:%.8f",
|
|
||||||
"baltab_market": "市价",
|
"baltab_market": "市价",
|
||||||
"baltab_market_price_4dp": "市价:$%.4f",
|
"baltab_market_price_4dp": "市价:$%.4f",
|
||||||
"baltab_market_price_8dp": "市价:$%.8f",
|
"baltab_market_price_8dp": "市价:$%.8f",
|
||||||
|
"baltab_mining_addresses_count": "%d 个挖矿地址",
|
||||||
|
"baltab_mining_amount": "挖矿奖励 %.8f",
|
||||||
"baltab_pct_change_24h": "%s%.1f%% 24小时",
|
"baltab_pct_change_24h": "%s%.1f%% 24小时",
|
||||||
"baltab_pct_of_total_zaddr": "占总额 %.0f%% · %d 个 Z-addr",
|
"baltab_pct_of_total_zaddr": "占总额 %.0f%% · %d 个 Z-addr",
|
||||||
"baltab_shielded": "隐蔽",
|
"baltab_shielded": "隐蔽",
|
||||||
"baltab_shielded_amount": "隐蔽 %.8f",
|
"baltab_shielded_amount": "隐蔽 %.8f",
|
||||||
"baltab_t_addresses_count": "%d 个 T-address",
|
|
||||||
"baltab_total_balance": "总余额",
|
"baltab_total_balance": "总余额",
|
||||||
"baltab_transparent": "透明",
|
|
||||||
"baltab_transparent_amount": "透明 %.8f",
|
|
||||||
"ban": "封禁",
|
"ban": "封禁",
|
||||||
"banned_peers": "已封禁节点",
|
"banned_peers": "已封禁节点",
|
||||||
"block": "区块",
|
"block": "区块",
|
||||||
@@ -511,7 +511,7 @@
|
|||||||
"contact_avatar_image_hint": "图片会复制到应用中,即使原文件移动也能保持可用。",
|
"contact_avatar_image_hint": "图片会复制到应用中,即使原文件移动也能保持可用。",
|
||||||
"contact_avatar_remove": "移除",
|
"contact_avatar_remove": "移除",
|
||||||
"contact_avatar_shielded": "隐蔽",
|
"contact_avatar_shielded": "隐蔽",
|
||||||
"contact_avatar_transparent": "透明",
|
"contact_chip_mining": "仅限挖矿",
|
||||||
"contact_global": "在每个钱包中显示(全局联系人)",
|
"contact_global": "在每个钱包中显示(全局联系人)",
|
||||||
"contact_global_badge_tt": "全局联系人——在每个钱包中可见",
|
"contact_global_badge_tt": "全局联系人——在每个钱包中可见",
|
||||||
"contact_global_tt": "开启:无论您加载哪个钱包,此联系人都保持可见。关闭:它仅属于当前钱包。",
|
"contact_global_tt": "开启:无论您加载哪个钱包,此联系人都保持可见。关闭:它仅属于当前钱包。",
|
||||||
@@ -707,8 +707,8 @@
|
|||||||
"export_tx_success": "交易导出成功",
|
"export_tx_success": "交易导出成功",
|
||||||
"export_tx_title": "导出交易到 CSV",
|
"export_tx_title": "导出交易到 CSV",
|
||||||
"export_viewing_key": "导出查看密钥",
|
"export_viewing_key": "导出查看密钥",
|
||||||
|
"failed_create_mining_address": "创建挖矿地址失败",
|
||||||
"failed_create_shielded": "无法创建屏蔽地址",
|
"failed_create_shielded": "无法创建屏蔽地址",
|
||||||
"failed_create_transparent": "无法创建透明地址",
|
|
||||||
"faq": "常见问题",
|
"faq": "常见问题",
|
||||||
"faq_d_mgmt_1_a": "内置节点会随钱包自动启动,并在适当时机停止,因此通常无需手动管理。高级控制选项(包括重启守护进程)位于 设置 > 节点与安全。",
|
"faq_d_mgmt_1_a": "内置节点会随钱包自动启动,并在适当时机停止,因此通常无需手动管理。高级控制选项(包括重启守护进程)位于 设置 > 节点与安全。",
|
||||||
"faq_d_mgmt_1_q": "如何启动或停止节点?",
|
"faq_d_mgmt_1_q": "如何启动或停止节点?",
|
||||||
@@ -1226,6 +1226,7 @@
|
|||||||
"miner_fee": "矿工费",
|
"miner_fee": "矿工费",
|
||||||
"mining": "挖矿",
|
"mining": "挖矿",
|
||||||
"mining_active": "活跃",
|
"mining_active": "活跃",
|
||||||
|
"mining_address": "挖矿地址",
|
||||||
"mining_address_copied": "挖矿地址已复制",
|
"mining_address_copied": "挖矿地址已复制",
|
||||||
"mining_all_time": "所有时间",
|
"mining_all_time": "所有时间",
|
||||||
"mining_already_saved": "矿池 URL 已保存",
|
"mining_already_saved": "矿池 URL 已保存",
|
||||||
@@ -1239,6 +1240,8 @@
|
|||||||
"mining_benchmark_testing": "测试中",
|
"mining_benchmark_testing": "测试中",
|
||||||
"mining_benchmark_tooltip": "为此 CPU 找到最佳线程数",
|
"mining_benchmark_tooltip": "为此 CPU 找到最佳线程数",
|
||||||
"mining_block_copied": "区块哈希已复制",
|
"mining_block_copied": "区块哈希已复制",
|
||||||
|
"mining_card_click_to_shield": "点击立即屏蔽已成熟的奖励。",
|
||||||
|
"mining_card_tooltip": "单人挖矿奖励会发送到您的挖矿(透明,R…)地址。这些地址无法接收付款。奖励成熟后会自动屏蔽。",
|
||||||
"mining_chart_1m_ago": "1分钟前",
|
"mining_chart_1m_ago": "1分钟前",
|
||||||
"mining_chart_5m_ago": "5分钟前",
|
"mining_chart_5m_ago": "5分钟前",
|
||||||
"mining_chart_now": "现在",
|
"mining_chart_now": "现在",
|
||||||
@@ -1283,6 +1286,7 @@
|
|||||||
"mining_payout_address": "支付地址",
|
"mining_payout_address": "支付地址",
|
||||||
"mining_payout_foreign": "⚠ 此支付地址不在您当前的钱包中——挖矿奖励将进入另一个钱包。如果您切换过钱包,请更新它。",
|
"mining_payout_foreign": "⚠ 此支付地址不在您当前的钱包中——挖矿奖励将进入另一个钱包。如果您切换过钱包,请更新它。",
|
||||||
"mining_payout_invalid": "不是有效的 DragonX 地址——启动前请更正,否则挖矿奖励将丢失。",
|
"mining_payout_invalid": "不是有效的 DragonX 地址——启动前请更正,否则挖矿奖励将丢失。",
|
||||||
|
"mining_payout_needs_shielded": "矿池使用普通交易付款,而在 DragonX 上普通交易无法到达挖矿(透明,R…)地址。请使用屏蔽地址(以 zs 开头)作为收款地址。",
|
||||||
"mining_payout_tooltip": "接收挖矿奖励的地址",
|
"mining_payout_tooltip": "接收挖矿奖励的地址",
|
||||||
"mining_pool": "矿池",
|
"mining_pool": "矿池",
|
||||||
"mining_pool_fee": "费用",
|
"mining_pool_fee": "费用",
|
||||||
@@ -1295,6 +1299,8 @@
|
|||||||
"mining_refresh": "刷新",
|
"mining_refresh": "刷新",
|
||||||
"mining_remove": "移除",
|
"mining_remove": "移除",
|
||||||
"mining_reset_defaults": "重置默认值",
|
"mining_reset_defaults": "重置默认值",
|
||||||
|
"mining_rewards": "挖矿奖励",
|
||||||
|
"mining_rewards_unshielded": "尚未屏蔽",
|
||||||
"mining_save_payout_address": "保存支付地址",
|
"mining_save_payout_address": "保存支付地址",
|
||||||
"mining_save_pool_url": "保存矿池 URL",
|
"mining_save_pool_url": "保存矿池 URL",
|
||||||
"mining_saved_addresses": "已保存地址:",
|
"mining_saved_addresses": "已保存地址:",
|
||||||
@@ -1328,10 +1334,10 @@
|
|||||||
"network_fee": "网络手续费",
|
"network_fee": "网络手续费",
|
||||||
"network_hashrate": "全网算力",
|
"network_hashrate": "全网算力",
|
||||||
"new": "+ 新建",
|
"new": "+ 新建",
|
||||||
|
"new_mining_address": "新建挖矿地址",
|
||||||
|
"new_mining_address_created": "已创建新的挖矿地址",
|
||||||
"new_shielded_created": "新屏蔽地址已创建",
|
"new_shielded_created": "新屏蔽地址已创建",
|
||||||
"new_t_address": "新 T 地址",
|
|
||||||
"new_t_transparent": "新 t 地址(透明)",
|
"new_t_transparent": "新 t 地址(透明)",
|
||||||
"new_transparent_created": "新透明地址已创建",
|
|
||||||
"new_z_address": "新 Z 地址",
|
"new_z_address": "新 Z 地址",
|
||||||
"new_z_shielded": "新 z 地址(屏蔽)",
|
"new_z_shielded": "新 z 地址(屏蔽)",
|
||||||
"no_addresses": "未找到地址。请使用上方按钮创建一个。",
|
"no_addresses": "未找到地址。请使用上方按钮创建一个。",
|
||||||
@@ -1696,6 +1702,8 @@
|
|||||||
"send_from_this_address": "从此地址发送",
|
"send_from_this_address": "从此地址发送",
|
||||||
"send_go_to_receive": "前往接收",
|
"send_go_to_receive": "前往接收",
|
||||||
"send_keep": "保留",
|
"send_keep": "保留",
|
||||||
|
"send_mining_addr_blocked": "这是一个挖矿(透明)地址。在 DragonX 上,这类地址只能接收挖矿奖励——网络会拒绝向其付款。请向收款人索取屏蔽地址(以 zs 开头)。",
|
||||||
|
"send_mining_addr_short": "挖矿地址——无法接收付款",
|
||||||
"send_network_fee": "网络手续费",
|
"send_network_fee": "网络手续费",
|
||||||
"send_no_balance": "无余额",
|
"send_no_balance": "无余额",
|
||||||
"send_no_recent": "没有最近的发送",
|
"send_no_recent": "没有最近的发送",
|
||||||
@@ -1723,7 +1731,6 @@
|
|||||||
"send_txid_copied": "交易ID 已复制到剪贴板",
|
"send_txid_copied": "交易ID 已复制到剪贴板",
|
||||||
"send_txid_label": "TxID:%s",
|
"send_txid_label": "TxID:%s",
|
||||||
"send_valid_shielded": "有效的屏蔽地址",
|
"send_valid_shielded": "有效的屏蔽地址",
|
||||||
"send_valid_transparent": "有效的透明地址",
|
|
||||||
"send_wallet_empty": "您的钱包是空的",
|
"send_wallet_empty": "您的钱包是空的",
|
||||||
"send_yes_clear": "是,清除",
|
"send_yes_clear": "是,清除",
|
||||||
"sender_balance": "发送方: %.8f → %.8f DRGX",
|
"sender_balance": "发送方: %.8f → %.8f DRGX",
|
||||||
@@ -1929,7 +1936,6 @@
|
|||||||
"switch_stopnode_title": "停止正在运行的节点?",
|
"switch_stopnode_title": "停止正在运行的节点?",
|
||||||
"switch_stopnode_warn": "已有一个并非由此钱包启动的节点正在运行。",
|
"switch_stopnode_warn": "已有一个并非由此钱包启动的节点正在运行。",
|
||||||
"syncing": "同步中...",
|
"syncing": "同步中...",
|
||||||
"t_address": "T 地址",
|
|
||||||
"t_addresses": "T 地址",
|
"t_addresses": "T 地址",
|
||||||
"test_connection": "测试",
|
"test_connection": "测试",
|
||||||
"theme": "主题",
|
"theme": "主题",
|
||||||
@@ -1964,8 +1970,6 @@
|
|||||||
"transfer_sent": "转账已发送",
|
"transfer_sent": "转账已发送",
|
||||||
"transfer_sent_desc": "您的转账已提交到网络。",
|
"transfer_sent_desc": "您的转账已提交到网络。",
|
||||||
"transfer_to": "转账至:",
|
"transfer_to": "转账至:",
|
||||||
"transparent": "透明",
|
|
||||||
"transparent_address": "透明地址",
|
|
||||||
"try_again": "重试",
|
"try_again": "重试",
|
||||||
"tt_addr_url": "在区块浏览器中查看地址的基础 URL",
|
"tt_addr_url": "在区块浏览器中查看地址的基础 URL",
|
||||||
"tt_address_book": "管理已保存的地址以快速发送",
|
"tt_address_book": "管理已保存的地址以快速发送",
|
||||||
@@ -2037,6 +2041,7 @@
|
|||||||
"tt_low_spec": "禁用所有重度视觉效果\\n快捷键:Ctrl+Shift+Down",
|
"tt_low_spec": "禁用所有重度视觉效果\\n快捷键:Ctrl+Shift+Down",
|
||||||
"tt_merge": "将多个 UTXO 合并到一个地址",
|
"tt_merge": "将多个 UTXO 合并到一个地址",
|
||||||
"tt_mine_idle": "系统空闲时自动开始挖矿\\n(无键盘/鼠标输入)",
|
"tt_mine_idle": "系统空闲时自动开始挖矿\\n(无键盘/鼠标输入)",
|
||||||
|
"tt_new_mining_address": "创建一个用于单人挖矿奖励的透明(R…)地址。它无法接收付款——收款请提供屏蔽地址。",
|
||||||
"tt_noise": "颗粒纹理强度(0% = 关闭,100% = 最大)",
|
"tt_noise": "颗粒纹理强度(0% = 关闭,100% = 最大)",
|
||||||
"tt_open_app_dir": "在文件管理器中打开 ObsidianDragon 文件夹(设置、主题、日志)",
|
"tt_open_app_dir": "在文件管理器中打开 ObsidianDragon 文件夹(设置、主题、日志)",
|
||||||
"tt_open_data_dir": "在文件管理器中打开包含您钱包和区块链数据的文件夹",
|
"tt_open_data_dir": "在文件管理器中打开包含您钱包和区块链数据的文件夹",
|
||||||
|
|||||||
@@ -25,6 +25,176 @@ def load_english_keys():
|
|||||||
|
|
||||||
# All translations for the 158 missing keys
|
# All translations for the 158 missing keys
|
||||||
TRANSLATIONS = {
|
TRANSLATIONS = {
|
||||||
|
"send_mining_addr_short": {
|
||||||
|
"de": "Mining-Adresse – kann keine Zahlungen empfangen",
|
||||||
|
"es": "Dirección de minería: no puede recibir pagos",
|
||||||
|
"fr": "Adresse de minage — ne peut pas recevoir de paiements",
|
||||||
|
"pt": "Endereço de mineração — não pode receber pagamentos",
|
||||||
|
"ru": "Адрес для майнинга — не принимает платежи",
|
||||||
|
"zh": "挖矿地址——无法接收付款",
|
||||||
|
"ja": "マイニングアドレス — 支払いを受け取れません",
|
||||||
|
"ko": "채굴 주소 — 결제를 받을 수 없음",
|
||||||
|
},
|
||||||
|
"send_mining_addr_blocked": {
|
||||||
|
"de": "Dies ist eine Mining-Adresse (transparent). Bei DragonX können solche Adressen nur Mining-Belohnungen empfangen – das Netzwerk lehnt Zahlungen an sie ab. Bitten Sie den Empfänger um eine abgeschirmte Adresse (sie beginnt mit zs).",
|
||||||
|
"es": "Esta es una dirección de minería (transparente). En DragonX solo pueden recibir recompensas de minería; la red rechaza los pagos a ellas. Pide al destinatario una dirección blindada (empieza por zs).",
|
||||||
|
"fr": "Ceci est une adresse de minage (transparente). Sur DragonX, elles ne peuvent recevoir que des récompenses de minage — le réseau refuse les paiements vers elles. Demandez au destinataire une adresse blindée (elle commence par zs).",
|
||||||
|
"pt": "Este é um endereço de mineração (transparente). No DragonX eles só podem receber recompensas de mineração — a rede rejeita pagamentos para eles. Peça ao destinatário um endereço blindado (começa com zs).",
|
||||||
|
"ru": "Это адрес для майнинга (прозрачный). В DragonX такие адреса могут получать только награды за майнинг — сеть отклоняет платежи на них. Попросите у получателя экранированный адрес (начинается с zs).",
|
||||||
|
"zh": "这是一个挖矿(透明)地址。在 DragonX 上,这类地址只能接收挖矿奖励——网络会拒绝向其付款。请向收款人索取屏蔽地址(以 zs 开头)。",
|
||||||
|
"ja": "これはマイニング(透明)アドレスです。DragonX ではこのアドレスはマイニング報酬しか受け取れず、ネットワークはこのアドレスへの支払いを拒否します。受取人にシールドアドレス(zs で始まる)を依頼してください。",
|
||||||
|
"ko": "채굴(투명) 주소입니다. DragonX에서 이런 주소는 채굴 보상만 받을 수 있으며, 네트워크가 이 주소로의 결제를 거부합니다. 받는 사람에게 차폐 주소(zs로 시작)를 요청하세요.",
|
||||||
|
},
|
||||||
|
"mining_payout_needs_shielded": {
|
||||||
|
"de": "Pools zahlen mit gewöhnlichen Transaktionen aus, die bei DragonX keine Mining-Adresse (transparent, R…) erreichen können. Verwenden Sie eine abgeschirmte Adresse (sie beginnt mit zs) als Auszahlungsadresse.",
|
||||||
|
"es": "Los pools pagan con transacciones normales, que en DragonX no pueden llegar a una dirección de minería (transparente, R…). Usa una dirección blindada (empieza por zs) como dirección de pago.",
|
||||||
|
"fr": "Les pools paient avec des transactions ordinaires, qui ne peuvent pas atteindre une adresse de minage (transparente, R…) sur DragonX. Utilisez une adresse blindée (elle commence par zs) comme adresse de paiement.",
|
||||||
|
"pt": "Os pools pagam com transações comuns, que no DragonX não conseguem chegar a um endereço de mineração (transparente, R…). Use um endereço blindado (começa com zs) como endereço de pagamento.",
|
||||||
|
"ru": "Пулы выплачивают обычными транзакциями, которые в DragonX не могут дойти до адреса для майнинга (прозрачного, R…). Укажите экранированный адрес (начинается с zs) как адрес для выплат.",
|
||||||
|
"zh": "矿池使用普通交易付款,而在 DragonX 上普通交易无法到达挖矿(透明,R…)地址。请使用屏蔽地址(以 zs 开头)作为收款地址。",
|
||||||
|
"ja": "プールは通常のトランザクションで支払いますが、DragonX ではそれがマイニング(透明、R…)アドレスに届きません。支払い先にはシールドアドレス(zs で始まる)を使用してください。",
|
||||||
|
"ko": "풀은 일반 트랜잭션으로 지급하는데, DragonX에서는 이것이 채굴(투명, R…) 주소에 도달할 수 없습니다. 지급 주소로 차폐 주소(zs로 시작)를 사용하세요.",
|
||||||
|
},
|
||||||
|
"new_mining_address": {
|
||||||
|
"de": "Neue Mining-Adresse",
|
||||||
|
"es": "Nueva dirección de minería",
|
||||||
|
"fr": "Nouvelle adresse de minage",
|
||||||
|
"pt": "Novo endereço de mineração",
|
||||||
|
"ru": "Новый адрес для майнинга",
|
||||||
|
"zh": "新建挖矿地址",
|
||||||
|
"ja": "新しいマイニングアドレス",
|
||||||
|
"ko": "새 채굴 주소",
|
||||||
|
},
|
||||||
|
"tt_new_mining_address": {
|
||||||
|
"de": "Erstellt eine transparente Adresse (R…) für Solo-Mining-Belohnungen. Sie kann keine Zahlungen empfangen – teilen Sie dafür eine abgeschirmte Adresse.",
|
||||||
|
"es": "Crea una dirección transparente (R…) para recompensas de minería en solitario. No puede recibir pagos; para eso comparte una dirección blindada.",
|
||||||
|
"fr": "Crée une adresse transparente (R…) pour les récompenses de minage en solo. Elle ne peut pas recevoir de paiements — partagez une adresse blindée pour cela.",
|
||||||
|
"pt": "Cria um endereço transparente (R…) para recompensas de mineração solo. Ele não pode receber pagamentos — compartilhe um endereço blindado para isso.",
|
||||||
|
"ru": "Создаёт прозрачный адрес (R…) для наград за соло-майнинг. Он не принимает платежи — для них сообщайте экранированный адрес.",
|
||||||
|
"zh": "创建一个用于单人挖矿奖励的透明(R…)地址。它无法接收付款——收款请提供屏蔽地址。",
|
||||||
|
"ja": "ソロマイニング報酬用の透明(R…)アドレスを作成します。支払いは受け取れません。支払いにはシールドアドレスを共有してください。",
|
||||||
|
"ko": "솔로 채굴 보상용 투명(R…) 주소를 만듭니다. 결제는 받을 수 없으니, 결제용으로는 차폐 주소를 공유하세요.",
|
||||||
|
},
|
||||||
|
"mining_address": {
|
||||||
|
"de": "Mining-Adresse",
|
||||||
|
"es": "Dirección de minería",
|
||||||
|
"fr": "Adresse de minage",
|
||||||
|
"pt": "Endereço de mineração",
|
||||||
|
"ru": "Адрес для майнинга",
|
||||||
|
"zh": "挖矿地址",
|
||||||
|
"ja": "マイニングアドレス",
|
||||||
|
"ko": "채굴 주소",
|
||||||
|
},
|
||||||
|
"addr_type_mining": {
|
||||||
|
"de": "Mining",
|
||||||
|
"es": "Minería",
|
||||||
|
"fr": "Minage",
|
||||||
|
"pt": "Mineração",
|
||||||
|
"ru": "Майнинг",
|
||||||
|
"zh": "挖矿",
|
||||||
|
"ja": "マイニング",
|
||||||
|
"ko": "채굴",
|
||||||
|
},
|
||||||
|
"mining_rewards": {
|
||||||
|
"de": "Mining-Belohnungen",
|
||||||
|
"es": "Recompensas de minería",
|
||||||
|
"fr": "Récompenses de minage",
|
||||||
|
"pt": "Recompensas de mineração",
|
||||||
|
"ru": "Награды за майнинг",
|
||||||
|
"zh": "挖矿奖励",
|
||||||
|
"ja": "マイニング報酬",
|
||||||
|
"ko": "채굴 보상",
|
||||||
|
},
|
||||||
|
"mining_rewards_unshielded": {
|
||||||
|
"de": "Noch nicht abgeschirmt",
|
||||||
|
"es": "Aún sin blindar",
|
||||||
|
"fr": "Pas encore blindées",
|
||||||
|
"pt": "Ainda não blindadas",
|
||||||
|
"ru": "Ещё не экранированы",
|
||||||
|
"zh": "尚未屏蔽",
|
||||||
|
"ja": "未シールド",
|
||||||
|
"ko": "아직 차폐되지 않음",
|
||||||
|
},
|
||||||
|
"baltab_mining_addresses_count": {
|
||||||
|
"de": "%d Mining-Adressen",
|
||||||
|
"es": "%d direcciones de minería",
|
||||||
|
"fr": "%d adresses de minage",
|
||||||
|
"pt": "%d endereços de mineração",
|
||||||
|
"ru": "Адресов для майнинга: %d",
|
||||||
|
"zh": "%d 个挖矿地址",
|
||||||
|
"ja": "マイニングアドレス %d 件",
|
||||||
|
"ko": "채굴 주소 %d개",
|
||||||
|
},
|
||||||
|
"baltab_mining_amount": {
|
||||||
|
"de": "Mining-Belohnungen %.8f",
|
||||||
|
"es": "Recompensas de minería %.8f",
|
||||||
|
"fr": "Récompenses de minage %.8f",
|
||||||
|
"pt": "Recompensas de mineração %.8f",
|
||||||
|
"ru": "Награды за майнинг %.8f",
|
||||||
|
"zh": "挖矿奖励 %.8f",
|
||||||
|
"ja": "マイニング報酬 %.8f",
|
||||||
|
"ko": "채굴 보상 %.8f",
|
||||||
|
},
|
||||||
|
"balance_mining_fmt": {
|
||||||
|
"de": "Mining-Belohnungen: %.8f",
|
||||||
|
"es": "Recompensas de minería: %.8f",
|
||||||
|
"fr": "Récompenses de minage : %.8f",
|
||||||
|
"pt": "Recompensas de mineração: %.8f",
|
||||||
|
"ru": "Награды за майнинг: %.8f",
|
||||||
|
"zh": "挖矿奖励:%.8f",
|
||||||
|
"ja": "マイニング報酬:%.8f",
|
||||||
|
"ko": "채굴 보상: %.8f",
|
||||||
|
},
|
||||||
|
"mining_card_tooltip": {
|
||||||
|
"de": "Solo-Mining-Belohnungen gehen an Ihre Mining-Adressen (transparent, R…). Diese Adressen können keine Zahlungen empfangen. Belohnungen werden automatisch abgeschirmt, sobald sie gereift sind.",
|
||||||
|
"es": "Las recompensas de minería en solitario llegan a tus direcciones de minería (transparentes, R…). Esas direcciones no pueden recibir pagos. Las recompensas se blindan automáticamente cuando maduran.",
|
||||||
|
"fr": "Les récompenses de minage en solo arrivent sur vos adresses de minage (transparentes, R…). Ces adresses ne peuvent pas recevoir de paiements. Les récompenses sont blindées automatiquement une fois arrivées à maturité.",
|
||||||
|
"pt": "As recompensas de mineração solo chegam aos seus endereços de mineração (transparentes, R…). Esses endereços não podem receber pagamentos. As recompensas são blindadas automaticamente quando amadurecem.",
|
||||||
|
"ru": "Награды за соло-майнинг поступают на ваши адреса для майнинга (прозрачные, R…). Эти адреса не принимают платежи. Награды экранируются автоматически, когда созревают.",
|
||||||
|
"zh": "单人挖矿奖励会发送到您的挖矿(透明,R…)地址。这些地址无法接收付款。奖励成熟后会自动屏蔽。",
|
||||||
|
"ja": "ソロマイニング報酬はマイニング(透明、R…)アドレスに届きます。これらのアドレスは支払いを受け取れません。報酬は成熟すると自動的にシールドされます。",
|
||||||
|
"ko": "솔로 채굴 보상은 채굴(투명, R…) 주소로 들어옵니다. 이 주소는 결제를 받을 수 없습니다. 보상은 성숙하면 자동으로 차폐됩니다.",
|
||||||
|
},
|
||||||
|
"mining_card_click_to_shield": {
|
||||||
|
"de": "Klicken, um gereifte Belohnungen jetzt abzuschirmen.",
|
||||||
|
"es": "Haz clic para blindar ahora las recompensas maduras.",
|
||||||
|
"fr": "Cliquez pour blinder dès maintenant les récompenses arrivées à maturité.",
|
||||||
|
"pt": "Clique para blindar agora as recompensas amadurecidas.",
|
||||||
|
"ru": "Нажмите, чтобы экранировать созревшие награды сейчас.",
|
||||||
|
"zh": "点击立即屏蔽已成熟的奖励。",
|
||||||
|
"ja": "クリックすると成熟した報酬を今すぐシールドします。",
|
||||||
|
"ko": "클릭하면 성숙한 보상을 지금 차폐합니다.",
|
||||||
|
},
|
||||||
|
"contact_chip_mining": {
|
||||||
|
"de": "Nur Mining",
|
||||||
|
"es": "Solo minería",
|
||||||
|
"fr": "Minage seul",
|
||||||
|
"pt": "Só mineração",
|
||||||
|
"ru": "Только майнинг",
|
||||||
|
"zh": "仅限挖矿",
|
||||||
|
"ja": "マイニング専用",
|
||||||
|
"ko": "채굴 전용",
|
||||||
|
},
|
||||||
|
"failed_create_mining_address": {
|
||||||
|
"de": "Mining-Adresse konnte nicht erstellt werden",
|
||||||
|
"es": "No se pudo crear la dirección de minería",
|
||||||
|
"fr": "Impossible de créer l'adresse de minage",
|
||||||
|
"pt": "Falha ao criar o endereço de mineração",
|
||||||
|
"ru": "Не удалось создать адрес для майнинга",
|
||||||
|
"zh": "创建挖矿地址失败",
|
||||||
|
"ja": "マイニングアドレスを作成できませんでした",
|
||||||
|
"ko": "채굴 주소를 만들지 못했습니다",
|
||||||
|
},
|
||||||
|
"new_mining_address_created": {
|
||||||
|
"de": "Neue Mining-Adresse erstellt",
|
||||||
|
"es": "Nueva dirección de minería creada",
|
||||||
|
"fr": "Nouvelle adresse de minage créée",
|
||||||
|
"pt": "Novo endereço de mineração criado",
|
||||||
|
"ru": "Новый адрес для майнинга создан",
|
||||||
|
"zh": "已创建新的挖矿地址",
|
||||||
|
"ja": "新しいマイニングアドレスを作成しました",
|
||||||
|
"ko": "새 채굴 주소를 만들었습니다",
|
||||||
|
},
|
||||||
"appx_node_busy_try_later": {
|
"appx_node_busy_try_later": {
|
||||||
"de": "Der Node ist mit einer langen Aufgabe beschäftigt (etwa dem Neuaufbau der Note-Witnesses). Versuchen Sie es erneut, wenn sie abgeschlossen ist; ein Stoppen jetzt könnte diese Arbeit von vorn beginnen lassen.",
|
"de": "Der Node ist mit einer langen Aufgabe beschäftigt (etwa dem Neuaufbau der Note-Witnesses). Versuchen Sie es erneut, wenn sie abgeschlossen ist; ein Stoppen jetzt könnte diese Arbeit von vorn beginnen lassen.",
|
||||||
"es": "El nodo está ocupado terminando una tarea larga (como reconstruir los testigos de notas). Vuelve a intentarlo cuando termine; detenerlo ahora podría hacer que empiece ese trabajo de nuevo.",
|
"es": "El nodo está ocupado terminando una tarea larga (como reconstruir los testigos de notas). Vuelve a intentarlo cuando termine; detenerlo ahora podría hacer que empiece ese trabajo de nuevo.",
|
||||||
|
|||||||
+4
-2
@@ -2689,10 +2689,12 @@ void App::startPoolMining(int threads)
|
|||||||
// Validate the payout address at EVERY start entry point (manual Start button, idle auto-start, thread
|
// Validate the payout address at EVERY start entry point (manual Start button, idle auto-start, thread
|
||||||
// scaling) — not just the UI gate — since a stale/hand-edited/wrong-chain address here silently loses
|
// scaling) — not just the UI gate — since a stale/hand-edited/wrong-chain address here silently loses
|
||||||
// mining rewards. (M-01) worker_name IS the pool login the rewards are credited to (see below).
|
// mining rewards. (M-01) worker_name IS the pool login the rewards are credited to (see below).
|
||||||
|
// A pool pays with ordinary transactions, so only a shielded address can be paid (private chain).
|
||||||
if (!cfg.worker_name.empty() && cfg.worker_name != "x" &&
|
if (!cfg.worker_name.empty() && cfg.worker_name != "x" &&
|
||||||
!util::isValidRecipientAddress(cfg.worker_name)) {
|
!util::isValidRecipientAddress(cfg.worker_name)) {
|
||||||
ui::Notifications::instance().error(
|
ui::Notifications::instance().error(util::isTransparentAddress(cfg.worker_name)
|
||||||
"Pool payout address is not a valid DragonX address — mining not started.");
|
? TR("mining_payout_needs_shielded")
|
||||||
|
: "Pool payout address is not a valid DragonX address — mining not started.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// The algo follows the pool: official pools use their own algo (pool.dragonx.cc
|
// The algo follows the pool: official pools use their own algo (pool.dragonx.cc
|
||||||
|
|||||||
@@ -588,6 +588,11 @@ void App::buildSweepCatalog()
|
|||||||
[](App& a) { a.state_.connected = false; a.state_.encryption_state_known = false; },
|
[](App& a) { a.state_.connected = false; a.state_.encryption_state_known = false; },
|
||||||
[](App& a) { a.applyHealthyDemoState(); });
|
[](App& a) { a.applyHealthyDemoState(); });
|
||||||
|
|
||||||
|
// A mining (transparent) address as the recipient: shown as unpayable, Send disabled.
|
||||||
|
add("send-mining-recipient", ui::NavPage::Send,
|
||||||
|
[](App& a) { ui::SweepSetSendRecipient(&a, "R9NXAVJezHiBnT3ijTpg3JUZre7PxhJWti"); },
|
||||||
|
[](App& a) { ui::SweepSetSendRecipient(&a, nullptr); });
|
||||||
|
|
||||||
// Send-confirm popup (state lives in send_tab statics → driven via a debug hook).
|
// Send-confirm popup (state lives in send_tab statics → driven via a debug hook).
|
||||||
add("popup-send-confirm", ui::NavPage::Send,
|
add("popup-send-confirm", ui::NavPage::Send,
|
||||||
[](App& a) { ui::SweepShowSendConfirm(&a, true); },
|
[](App& a) { ui::SweepShowSendConfirm(&a, true); },
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public:
|
|||||||
|
|
||||||
// Address preview
|
// Address preview
|
||||||
Type().textColored(TypeStyle::Caption, OnSurfaceMedium(),
|
Type().textColored(TypeStyle::Caption, OnSurfaceMedium(),
|
||||||
s_isZ ? TR("shielded_address") : TR("transparent_address"));
|
s_isZ ? TR("shielded_address") : TR("mining_address"));
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
{
|
{
|
||||||
std::string display = s_address;
|
std::string display = s_address;
|
||||||
|
|||||||
@@ -213,12 +213,13 @@ void RenderSharedAddressList(App* app, float listH, float availW,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (TactileButton(TR("new_t_address"), ImVec2(buttonWidth, 0),
|
if (TactileButton(TR("new_mining_address"), ImVec2(buttonWidth, 0),
|
||||||
S.resolveFont(addrBtn.font.empty() ? "button" : addrBtn.font))) {
|
S.resolveFont(addrBtn.font.empty() ? "button" : addrBtn.font))) {
|
||||||
app->createNewTAddress([](const std::string& addr) {
|
app->createNewTAddress([](const std::string& addr) {
|
||||||
DEBUG_LOGF("Created new t-address: %s\n", addr.c_str());
|
DEBUG_LOGF("Created new t-address: %s\n", addr.c_str());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("tt_new_mining_address"));
|
||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
|
|
||||||
ImGui::Dummy(ImVec2(0, Layout::spacingXs()));
|
ImGui::Dummy(ImVec2(0, Layout::spacingXs()));
|
||||||
@@ -402,13 +403,13 @@ void RenderSharedAddressList(App* app, float listH, float availW,
|
|||||||
const auto& target = rows[s_dropTargetIdx];
|
const auto& target = rows[s_dropTargetIdx];
|
||||||
material::Tooltip("%s\n%s\n\n%s %s",
|
material::Tooltip("%s\n%s\n\n%s %s",
|
||||||
truncateAddress(addr.address, 32).c_str(),
|
truncateAddress(addr.address, 32).c_str(),
|
||||||
row.isZ ? TR("shielded") : TR("transparent"),
|
row.isZ ? TR("shielded") : TR("addr_type_mining"),
|
||||||
TR("transfer_to"),
|
TR("transfer_to"),
|
||||||
truncateAddress(target.info->address, 32).c_str());
|
truncateAddress(target.info->address, 32).c_str());
|
||||||
} else {
|
} else {
|
||||||
material::Tooltip("%s\n%s\n\n%s",
|
material::Tooltip("%s\n%s\n\n%s",
|
||||||
truncateAddress(addr.address, 32).c_str(),
|
truncateAddress(addr.address, 32).c_str(),
|
||||||
row.isZ ? TR("shielded") : TR("transparent"),
|
row.isZ ? TR("shielded") : TR("addr_type_mining"),
|
||||||
TR("address_reorder_hint"));
|
TR("address_reorder_hint"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -440,7 +441,8 @@ void RenderSharedAddressList(App* app, float listH, float availW,
|
|||||||
if (s_dragActive && s_dragIdx != row_idx && material::IsRectHovered(rowPos, rowEnd)) {
|
if (s_dragActive && s_dragIdx != row_idx && material::IsRectHovered(rowPos, rowEnd)) {
|
||||||
s_dropTargetIdx = row_idx;
|
s_dropTargetIdx = row_idx;
|
||||||
const float relY = rowH > 0.0f ? (mousePos.y - rowPos.y) / rowH : 0.5f;
|
const float relY = rowH > 0.0f ? (mousePos.y - rowPos.y) / rowH : 0.5f;
|
||||||
s_dropMode = (relY < 0.30f || relY > 0.70f) ? 1 : 0;
|
// A mining (transparent) address can't be paid, so it is never a transfer target: reorder only.
|
||||||
|
s_dropMode = (!row.isZ || relY < 0.30f || relY > 0.70f) ? 1 : 0;
|
||||||
if (s_dropMode == 0) {
|
if (s_dropMode == 0) {
|
||||||
// Transfer: highlight the whole target row.
|
// Transfer: highlight the whole target row.
|
||||||
dl->AddRectFilled(rowPos, rowEnd, WithAlpha(Primary(), 40), 4.0f * dp);
|
dl->AddRectFilled(rowPos, rowEnd, WithAlpha(Primary(), 40), 4.0f * dp);
|
||||||
@@ -542,7 +544,7 @@ void RenderSharedAddressList(App* app, float listH, float availW,
|
|||||||
// ---- Type label (first line) ----
|
// ---- Type label (first line) ----
|
||||||
float labelX = rowLayout.labelX;
|
float labelX = rowLayout.labelX;
|
||||||
{
|
{
|
||||||
const char* typeLabel = row.isZ ? TR("shielded") : TR("transparent");
|
const char* typeLabel = row.isZ ? TR("shielded") : TR("addr_type_mining");
|
||||||
const char* hiddenTag = row.hidden ? TR("hidden_tag") : "";
|
const char* hiddenTag = row.hidden ? TR("hidden_tag") : "";
|
||||||
const char* miningTag = row.mining ? TR("mining_tag") : "";
|
const char* miningTag = row.mining ? TR("mining_tag") : "";
|
||||||
char typeBuf[64];
|
char typeBuf[64];
|
||||||
@@ -682,7 +684,7 @@ void RenderSharedAddressList(App* app, float listH, float availW,
|
|||||||
KeyExportDialog::show(addr.address, KeyExportDialog::KeyType::Viewing);
|
KeyExportDialog::show(addr.address, KeyExportDialog::KeyType::Viewing);
|
||||||
}
|
}
|
||||||
if (ImGui::MenuItem(TR("show_qr_code")))
|
if (ImGui::MenuItem(TR("show_qr_code")))
|
||||||
QRPopupDialog::show(addr.address, row.isZ ? TR("z_address") : TR("t_address"));
|
QRPopupDialog::show(addr.address, row.isZ ? TR("z_address") : TR("mining_address"));
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
if (row.hidden) {
|
if (row.hidden) {
|
||||||
if (ImGui::MenuItem(TR("restore_address")))
|
if (ImGui::MenuItem(TR("restore_address")))
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include "qr_popup_dialog.h"
|
#include "qr_popup_dialog.h"
|
||||||
#include "address_label_dialog.h"
|
#include "address_label_dialog.h"
|
||||||
#include "address_transfer_dialog.h"
|
#include "address_transfer_dialog.h"
|
||||||
|
#include "shield_dialog.h"
|
||||||
#include "send_tab.h"
|
#include "send_tab.h"
|
||||||
#include "../../app.h"
|
#include "../../app.h"
|
||||||
#include "../../config/settings.h"
|
#include "../../config/settings.h"
|
||||||
@@ -531,7 +532,7 @@ static void RenderBalanceClassic(App* app)
|
|||||||
float cy = cMin.y + cardPadLg;
|
float cy = cMin.y + cardPadLg;
|
||||||
|
|
||||||
dl->AddText(ovFont, ovFont->LegacySize, ImVec2(cx, cy),
|
dl->AddText(ovFont, ovFont->LegacySize, ImVec2(cx, cy),
|
||||||
OnSurfaceMedium(), TR("transparent"));
|
OnSurfaceMedium(), TR("mining_rewards"));
|
||||||
cy += ovFont->LegacySize + ovGap;
|
cy += ovFont->LegacySize + ovGap;
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%.8f", s_dispTransparent);
|
snprintf(buf, sizeof(buf), "%.8f", s_dispTransparent);
|
||||||
@@ -543,18 +544,24 @@ static void RenderBalanceClassic(App* app)
|
|||||||
OnSurfaceMedium(), DRAGONX_TICKER);
|
OnSurfaceMedium(), DRAGONX_TICKER);
|
||||||
cy += sub1->LegacySize + valGap;
|
cy += sub1->LegacySize + valGap;
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), TR("baltab_t_addresses_count"),
|
// Rewards waiting at a mining address: say so, and let a click shield them now.
|
||||||
(int)state.t_addresses.size());
|
const bool unshielded = s_dispTransparent > 0.0;
|
||||||
|
if (unshielded) snprintf(buf, sizeof(buf), "%s", TR("mining_rewards_unshielded"));
|
||||||
|
else snprintf(buf, sizeof(buf), TR("baltab_mining_addresses_count"), (int)state.t_addresses.size());
|
||||||
dl->AddText(capFont, capFont->LegacySize, ImVec2(cx, cy),
|
dl->AddText(capFont, capFont->LegacySize, ImVec2(cx, cy),
|
||||||
OnSurfaceDisabled(), buf);
|
unshielded ? amberCol : OnSurfaceDisabled(), buf);
|
||||||
|
|
||||||
// Hover glow + click to Receive
|
// Hover glow + explain; click shields waiting rewards (else opens Receive)
|
||||||
if (material::IsRectHovered(cMin, cMax)) {
|
if (material::IsRectHovered(cMin, cMax)) {
|
||||||
dl->AddRect(cMin, cMax, IM_COL32(255, 255, 255, (int)S.drawElement("tabs.balance", "hover-glow-alpha").sizeOr(40.0f)),
|
dl->AddRect(cMin, cMax, IM_COL32(255, 255, 255, (int)S.drawElement("tabs.balance", "hover-glow-alpha").sizeOr(40.0f)),
|
||||||
cardSpec.rounding, 0, S.drawElement("tabs.balance", "hover-glow-thickness").sizeOr(1.5f) * dp);
|
cardSpec.rounding, 0, S.drawElement("tabs.balance", "hover-glow-thickness").sizeOr(1.5f) * dp);
|
||||||
ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
|
ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
|
||||||
if (ImGui::IsMouseClicked(0))
|
material::Tooltip("%s%s%s", TR("mining_card_tooltip"), unshielded ? "\n\n" : "",
|
||||||
app->setCurrentPage(NavPage::Receive);
|
unshielded ? TR("mining_card_click_to_shield") : "");
|
||||||
|
if (ImGui::IsMouseClicked(0)) {
|
||||||
|
if (unshielded) ShieldDialog::showShieldCoinbase();
|
||||||
|
else app->setCurrentPage(NavPage::Receive);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -803,7 +810,7 @@ static void RenderBalanceDonut(App* app) {
|
|||||||
|
|
||||||
// Transparent legend
|
// Transparent legend
|
||||||
dl->AddCircleFilled(ImVec2(legendX + 5 * dp, legendY + capFont->LegacySize * 0.5f), legendDotR, Warning());
|
dl->AddCircleFilled(ImVec2(legendX + 5 * dp, legendY + capFont->LegacySize * 0.5f), legendDotR, Warning());
|
||||||
snprintf(buf, sizeof(buf), TR("baltab_transparent_amount"), s_dispTransparent);
|
snprintf(buf, sizeof(buf), TR("baltab_mining_amount"), s_dispTransparent);
|
||||||
dl->AddText(capFont, capFont->LegacySize, ImVec2(legendX + legendXOff, legendY), Warning(), buf);
|
dl->AddText(capFont, capFont->LegacySize, ImVec2(legendX + legendXOff, legendY), Warning(), buf);
|
||||||
legendY += capFont->LegacySize + legendSectionGap;
|
legendY += capFont->LegacySize + legendSectionGap;
|
||||||
|
|
||||||
@@ -976,7 +983,7 @@ static void RenderBalanceConsolidated(App* app) {
|
|||||||
// Transparent bar
|
// Transparent bar
|
||||||
float transX = cardMin.x + pad * 2 + halfW;
|
float transX = cardMin.x + pad * 2 + halfW;
|
||||||
barY = divY + Layout::spacingSm();
|
barY = divY + Layout::spacingSm();
|
||||||
std::string transLabelUpper = TR("transparent");
|
std::string transLabelUpper = TR("mining_rewards");
|
||||||
std::transform(transLabelUpper.begin(), transLabelUpper.end(), transLabelUpper.begin(),
|
std::transform(transLabelUpper.begin(), transLabelUpper.end(), transLabelUpper.begin(),
|
||||||
[](unsigned char c){ return (char)std::toupper(c); });
|
[](unsigned char c){ return (char)std::toupper(c); });
|
||||||
dl->AddText(ovFont, ovFont->LegacySize, ImVec2(transX, barY), Warning(), transLabelUpper.c_str());
|
dl->AddText(ovFont, ovFont->LegacySize, ImVec2(transX, barY), Warning(), transLabelUpper.c_str());
|
||||||
@@ -1100,7 +1107,7 @@ static void RenderBalanceDashboard(App* app) {
|
|||||||
std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c){ return (char)std::toupper(c); });
|
std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c){ return (char)std::toupper(c); });
|
||||||
return s;
|
return s;
|
||||||
};
|
};
|
||||||
std::string lblShielded = upperTR("shielded"), lblTransparent = upperTR("transparent");
|
std::string lblShielded = upperTR("shielded"), lblTransparent = upperTR("mining_rewards");
|
||||||
std::string lblQuickSend = upperTR("quick_send"), lblQuickReceive = upperTR("quick_receive");
|
std::string lblQuickSend = upperTR("quick_send"), lblQuickReceive = upperTR("quick_receive");
|
||||||
|
|
||||||
TileInfo tiles[4] = {
|
TileInfo tiles[4] = {
|
||||||
@@ -1240,7 +1247,7 @@ static void RenderBalanceVerticalStack(App* app) {
|
|||||||
RowInfo rowInfos[4] = {
|
RowInfo rowInfos[4] = {
|
||||||
{TR("baltab_total_balance"), ICON_MD_ACCOUNT_BALANCE_WALLET, S.resolveColor("var(--accent-total)", OnSurface()), s_dispTotal, 1.0f},
|
{TR("baltab_total_balance"), ICON_MD_ACCOUNT_BALANCE_WALLET, S.resolveColor("var(--accent-total)", OnSurface()), s_dispTotal, 1.0f},
|
||||||
{TR("baltab_shielded"), ICON_MD_SHIELD, S.resolveColor("var(--accent-shielded)", Success()), s_dispShielded, shieldRatio},
|
{TR("baltab_shielded"), ICON_MD_SHIELD, S.resolveColor("var(--accent-shielded)", Success()), s_dispShielded, shieldRatio},
|
||||||
{TR("baltab_transparent"), ICON_MD_CIRCLE, S.resolveColor("var(--accent-transparent)", Warning()), s_dispTransparent, transRatio},
|
{TR("mining_rewards"), ICON_MD_CIRCLE, S.resolveColor("var(--accent-transparent)", Warning()), s_dispTransparent, transRatio},
|
||||||
{TR("baltab_market"), ICON_MD_TRENDING_UP, S.resolveColor("var(--accent-action)", Primary()), state.market.price_usd, 0.0f},
|
{TR("baltab_market"), ICON_MD_TRENDING_UP, S.resolveColor("var(--accent-action)", Primary()), state.market.price_usd, 0.0f},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1437,7 +1444,7 @@ static void RenderBalanceVertical2x2(App* app) {
|
|||||||
// Row 1: Market (left), Transparent (right)
|
// Row 1: Market (left), Transparent (right)
|
||||||
{
|
{
|
||||||
{TR("baltab_market"), ICON_MD_TRENDING_UP, S.resolveColor("var(--accent-action)", Primary()), state.market.price_usd, 0.0f, true, false},
|
{TR("baltab_market"), ICON_MD_TRENDING_UP, S.resolveColor("var(--accent-action)", Primary()), state.market.price_usd, 0.0f, true, false},
|
||||||
{TR("baltab_transparent"), ICON_MD_CIRCLE, S.resolveColor("var(--accent-transparent)", Warning()), s_dispTransparent, transRatio, false, true},
|
{TR("mining_rewards"), ICON_MD_CIRCLE, S.resolveColor("var(--accent-transparent)", Warning()), s_dispTransparent, transRatio, false, true},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1696,7 +1703,7 @@ static void RenderBalanceShield(App* app) {
|
|||||||
std::string shieldLabelUpper = TR("shielded");
|
std::string shieldLabelUpper = TR("shielded");
|
||||||
std::transform(shieldLabelUpper.begin(), shieldLabelUpper.end(), shieldLabelUpper.begin(),
|
std::transform(shieldLabelUpper.begin(), shieldLabelUpper.end(), shieldLabelUpper.begin(),
|
||||||
[](unsigned char c){ return (char)std::toupper(c); });
|
[](unsigned char c){ return (char)std::toupper(c); });
|
||||||
std::string transLabelUpper = TR("transparent");
|
std::string transLabelUpper = TR("mining_rewards");
|
||||||
std::transform(transLabelUpper.begin(), transLabelUpper.end(), transLabelUpper.begin(),
|
std::transform(transLabelUpper.begin(), transLabelUpper.end(), transLabelUpper.begin(),
|
||||||
[](unsigned char c){ return (char)std::toupper(c); });
|
[](unsigned char c){ return (char)std::toupper(c); });
|
||||||
dl->AddText(ovFont, ovFont->LegacySize, ImVec2(infoX, infoY), Success(), shieldLabelUpper.c_str());
|
dl->AddText(ovFont, ovFont->LegacySize, ImVec2(infoX, infoY), Success(), shieldLabelUpper.c_str());
|
||||||
@@ -1855,7 +1862,7 @@ static void RenderBalanceTimeline(App* app) {
|
|||||||
std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c){ return (char)std::toupper(c); });
|
std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c){ return (char)std::toupper(c); });
|
||||||
return s;
|
return s;
|
||||||
};
|
};
|
||||||
std::string cShielded = upperTR("shielded"), cTransparent = upperTR("transparent"), cMarket = upperTR("market");
|
std::string cShielded = upperTR("shielded"), cTransparent = upperTR("mining_rewards"), cMarket = upperTR("market");
|
||||||
SumCard cards[3] = {
|
SumCard cards[3] = {
|
||||||
{cShielded.c_str(), Success(), s_dispShielded, false},
|
{cShielded.c_str(), Success(), s_dispShielded, false},
|
||||||
{cTransparent.c_str(), Warning(), s_dispTransparent, false},
|
{cTransparent.c_str(), Warning(), s_dispTransparent, false},
|
||||||
@@ -2137,7 +2144,7 @@ static void RenderBalanceMinimal(App* app) {
|
|||||||
snprintf(buf, sizeof(buf), TR("balance_shielded_fmt"), s_dispShielded);
|
snprintf(buf, sizeof(buf), TR("balance_shielded_fmt"), s_dispShielded);
|
||||||
Type().textColored(TypeStyle::Caption, Success(), buf);
|
Type().textColored(TypeStyle::Caption, Success(), buf);
|
||||||
ImGui::SameLine(0, Layout::spacingLg());
|
ImGui::SameLine(0, Layout::spacingLg());
|
||||||
snprintf(buf, sizeof(buf), TR("balance_transparent_fmt"), s_dispTransparent);
|
snprintf(buf, sizeof(buf), TR("balance_mining_fmt"), s_dispTransparent);
|
||||||
Type().textColored(TypeStyle::Caption, Warning(), buf);
|
Type().textColored(TypeStyle::Caption, Warning(), buf);
|
||||||
|
|
||||||
// USD value
|
// USD value
|
||||||
|
|||||||
@@ -624,7 +624,7 @@ void RenderContactsTab(App* app)
|
|||||||
float cy = origin.y + std::max(0.0f, (a.y - blockH) * 0.42f);
|
float cy = origin.y + std::max(0.0f, (a.y - blockH) * 0.42f);
|
||||||
float cx = origin.x + a.x * 0.5f;
|
float cx = origin.x + a.x * 0.5f;
|
||||||
struct Chip { bool sh; const char* lbl; };
|
struct Chip { bool sh; const char* lbl; };
|
||||||
Chip chips[2] = { { true, TR("contact_avatar_shielded") }, { false, TR("contact_avatar_transparent") } };
|
Chip chips[2] = { { true, TR("contact_avatar_shielded") }, { false, TR("contact_chip_mining") } };
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
float ccx = cx + (i == 0 ? -(chipR + chipGap * 0.5f) : (chipR + chipGap * 0.5f));
|
float ccx = cx + (i == 0 ? -(chipR + chipGap * 0.5f) : (chipR + chipGap * 0.5f));
|
||||||
ImVec2 cc(ccx, cy + chipR);
|
ImVec2 cc(ccx, cy + chipR);
|
||||||
|
|||||||
@@ -624,7 +624,7 @@ static void pfDrawAddressSection(App* app)
|
|||||||
// Funded (right). Select-all is deferred so it applies to the freshly-filtered set below.
|
// Funded (right). Select-all is deferred so it applies to the freshly-filtered set below.
|
||||||
bool selAllClicked = false;
|
bool selAllClicked = false;
|
||||||
{
|
{
|
||||||
const char* flabels[3] = { TR("portfolio_select_all"), TR("shielded"), TR("transparent") };
|
const char* flabels[3] = { TR("portfolio_select_all"), TR("shielded"), TR("addr_type_mining") };
|
||||||
const char* selLbl = TR("portfolio_select_shown");
|
const char* selLbl = TR("portfolio_select_shown");
|
||||||
const char* clrLbl = TR("portfolio_clear_sel");
|
const char* clrLbl = TR("portfolio_clear_sel");
|
||||||
ImGuiStyle& st = ImGui::GetStyle();
|
ImGuiStyle& st = ImGui::GetStyle();
|
||||||
|
|||||||
@@ -957,7 +957,9 @@ void RenderMiningControls(App* app, const WalletState& state, const MiningInfo&
|
|||||||
else if (poolBlockedBySolo)
|
else if (poolBlockedBySolo)
|
||||||
material::Tooltip("%s", TR("mining_stop_solo_for_pool"));
|
material::Tooltip("%s", TR("mining_stop_solo_for_pool"));
|
||||||
else if (poolNeedsPayout)
|
else if (poolNeedsPayout)
|
||||||
material::Tooltip("%s", TR("mining_pool_needs_payout_tooltip"));
|
material::Tooltip("%s", util::isTransparentAddress(poolPayoutStr)
|
||||||
|
? TR("mining_payout_needs_shielded")
|
||||||
|
: TR("mining_pool_needs_payout_tooltip"));
|
||||||
else
|
else
|
||||||
material::Tooltip("%s", isMiningActive ? TR("stop_mining") : TR("start_mining"));
|
material::Tooltip("%s", isMiningActive ? TR("stop_mining") : TR("start_mining"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -413,7 +413,10 @@ void RenderMiningModeToggle(App* app, const WalletState& state, const MiningInfo
|
|||||||
if (currentWorkerStr.empty()) {
|
if (currentWorkerStr.empty()) {
|
||||||
material::Tooltip("%s", TR("mining_generate_z_address_hint"));
|
material::Tooltip("%s", TR("mining_generate_z_address_hint"));
|
||||||
} else if (currentWorkerStr != "x" && !util::isValidRecipientAddress(currentWorkerStr)) {
|
} else if (currentWorkerStr != "x" && !util::isValidRecipientAddress(currentWorkerStr)) {
|
||||||
material::Tooltip("%s", TR("mining_payout_invalid")); // block start below too (M-01)
|
// Block start below too (M-01). A pool pays with ordinary transactions, which can't reach
|
||||||
|
// a transparent (mining) address on this private chain: say so rather than "invalid".
|
||||||
|
material::Tooltip("%s", util::isTransparentAddress(currentWorkerStr)
|
||||||
|
? TR("mining_payout_needs_shielded") : TR("mining_payout_invalid"));
|
||||||
} else {
|
} else {
|
||||||
material::Tooltip("%s", TR("mining_payout_tooltip"));
|
material::Tooltip("%s", TR("mining_payout_tooltip"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -325,10 +325,10 @@ static void RenderAddressDropdown(App* app, float width) {
|
|||||||
app->createNewTAddress([](const std::string& addr) {
|
app->createNewTAddress([](const std::string& addr) {
|
||||||
s_generating_address = false;
|
s_generating_address = false;
|
||||||
if (addr.empty())
|
if (addr.empty())
|
||||||
Notifications::instance().error(TR("failed_create_transparent"));
|
Notifications::instance().error(TR("failed_create_mining_address"));
|
||||||
else {
|
else {
|
||||||
s_pending_select_address = addr;
|
s_pending_select_address = addr;
|
||||||
Notifications::instance().success(TR("new_transparent_created"));
|
Notifications::instance().success(TR("new_mining_address_created"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -693,6 +693,14 @@ static void RenderTxProgress(ImDrawList* dl, float x, float y, float w,
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Confirmation dialog
|
// Confirmation dialog
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
void SweepSetSendRecipient(App* app, const char* to) {
|
||||||
|
(void)app;
|
||||||
|
std::snprintf(s_from_address, sizeof(s_from_address), "%s",
|
||||||
|
to ? "zs1demoprimaryshieldedaddressforuisweep000000000000000000000000000" : "");
|
||||||
|
std::snprintf(s_to_address, sizeof(s_to_address), "%s", to ? to : "");
|
||||||
|
s_amount = to ? 1.0 : 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
void SweepShowSendConfirm(App* app, bool show) {
|
void SweepShowSendConfirm(App* app, bool show) {
|
||||||
(void)app;
|
(void)app;
|
||||||
if (show) {
|
if (show) {
|
||||||
@@ -975,7 +983,7 @@ static bool RenderZeroBalanceCTA(App* app, ImDrawList* dl, float width) {
|
|||||||
// Action buttons (Send + Clear + Undo)
|
// Action buttons (Send + Clear + Undo)
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
static void RenderActionButtons(App* app, float width, float vScale,
|
static void RenderActionButtons(App* app, float width, float vScale,
|
||||||
bool is_valid_address, double available,
|
bool is_valid_address, bool is_mining_addr, double available,
|
||||||
const char* suffix = "") {
|
const char* suffix = "") {
|
||||||
auto& S = schema::UI();
|
auto& S = schema::UI();
|
||||||
const float dp = Layout::dpiScale();
|
const float dp = Layout::dpiScale();
|
||||||
@@ -1027,6 +1035,8 @@ static void RenderActionButtons(App* app, float width, float vScale,
|
|||||||
material::Tooltip("%s", TR("send_tooltip_syncing"));
|
material::Tooltip("%s", TR("send_tooltip_syncing"));
|
||||||
else if (s_from_address[0] == '\0')
|
else if (s_from_address[0] == '\0')
|
||||||
material::Tooltip("%s", TR("send_tooltip_select_source"));
|
material::Tooltip("%s", TR("send_tooltip_select_source"));
|
||||||
|
else if (is_mining_addr)
|
||||||
|
material::Tooltip("%s", TR("send_mining_addr_blocked"));
|
||||||
else if (!is_valid_address)
|
else if (!is_valid_address)
|
||||||
material::Tooltip("%s", TR("send_tooltip_invalid_address"));
|
material::Tooltip("%s", TR("send_tooltip_invalid_address"));
|
||||||
else if (s_amount <= 0)
|
else if (s_amount <= 0)
|
||||||
@@ -1255,8 +1265,10 @@ void RenderSendTab(App* app)
|
|||||||
|
|
||||||
double available = GetAvailableBalance(app);
|
double available = GetAvailableBalance(app);
|
||||||
bool is_valid_z = IsValidShieldedAddr(s_to_address);
|
bool is_valid_z = IsValidShieldedAddr(s_to_address);
|
||||||
|
// A transparent address is a mining address: it only ever receives mining rewards, and the network
|
||||||
|
// rejects a payment to it (DragonX is a private chain). Recognise it, but never send to it.
|
||||||
bool is_valid_t = IsValidTransparentAddr(s_to_address);
|
bool is_valid_t = IsValidTransparentAddr(s_to_address);
|
||||||
bool is_valid_address = is_valid_z || is_valid_t;
|
bool is_valid_address = is_valid_z;
|
||||||
float sectionGap = Layout::spacingXl() * vScale;
|
float sectionGap = Layout::spacingXl() * vScale;
|
||||||
|
|
||||||
char buf[128];
|
char buf[128];
|
||||||
@@ -1365,7 +1377,9 @@ void RenderSendTab(App* app)
|
|||||||
if (vz)
|
if (vz)
|
||||||
Type().textColored(TypeStyle::Caption, Success(), TR("send_valid_shielded"));
|
Type().textColored(TypeStyle::Caption, Success(), TR("send_valid_shielded"));
|
||||||
else
|
else
|
||||||
Type().textColored(TypeStyle::Caption, Warning(), TR("send_valid_transparent"));
|
Type().textColored(TypeStyle::Caption, Error(), TR("send_mining_addr_short"));
|
||||||
|
if (vt && ImGui::IsItemHovered())
|
||||||
|
material::Tooltip("%s", TR("send_mining_addr_blocked"));
|
||||||
} else if (!checkPreview) {
|
} else if (!checkPreview) {
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
Type().textColored(TypeStyle::Caption, Error(), TR("invalid_address"));
|
Type().textColored(TypeStyle::Caption, Error(), TR("invalid_address"));
|
||||||
@@ -1405,7 +1419,8 @@ void RenderSendTab(App* app)
|
|||||||
trimmed.erase(trimmed.begin());
|
trimmed.erase(trimmed.begin());
|
||||||
while (!trimmed.empty() && (trimmed.back() == ' ' || trimmed.back() == '\n' || trimmed.back() == '\r' || trimmed.back() == '\t'))
|
while (!trimmed.empty() && (trimmed.back() == ' ' || trimmed.back() == '\n' || trimmed.back() == '\r' || trimmed.back() == '\t'))
|
||||||
trimmed.pop_back();
|
trimmed.pop_back();
|
||||||
bool looksValid = dragonx::util::isValidRecipientAddress(trimmed);
|
// Preview any address, a mining one too: once pasted, the field explains why it can't be paid.
|
||||||
|
bool looksValid = dragonx::util::isDragonXAddress(trimmed);
|
||||||
if (looksValid && s_to_address[0] == '\0') {
|
if (looksValid && s_to_address[0] == '\0') {
|
||||||
s_preview_text = trimmed;
|
s_preview_text = trimmed;
|
||||||
s_paste_previewing = true;
|
s_paste_previewing = true;
|
||||||
@@ -1626,7 +1641,7 @@ void RenderSendTab(App* app)
|
|||||||
ImGui::Dummy(ImVec2(0, innerGap * 0.5f));
|
ImGui::Dummy(ImVec2(0, innerGap * 0.5f));
|
||||||
|
|
||||||
// ---- ACTION BUTTONS (full width) ----
|
// ---- ACTION BUTTONS (full width) ----
|
||||||
RenderActionButtons(app, innerW, vScale, is_valid_address, available, "##main");
|
RenderActionButtons(app, innerW, vScale, is_valid_address, is_valid_t, available, "##main");
|
||||||
|
|
||||||
// Add bottom padding
|
// Add bottom padding
|
||||||
ImGui::Dummy(ImVec2(0, pad * vScale));
|
ImGui::Dummy(ImVec2(0, pad * vScale));
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ void RenderSendConfirmPopup(App* app);
|
|||||||
* the only way an external driver (the full UI sweep) can reveal it. Fires no send.
|
* the only way an external driver (the full UI sweep) can reveal it. Fires no send.
|
||||||
*/
|
*/
|
||||||
void SweepShowSendConfirm(App* app, bool show);
|
void SweepShowSendConfirm(App* app, bool show);
|
||||||
|
// UI sweep: put `to` (nullptr: clear) in the recipient field, e.g. a mining address to show it can't be paid.
|
||||||
|
void SweepSetSendRecipient(App* app, const char* to);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Pre-fill the "from" address in the send tab
|
* @brief Pre-fill the "from" address in the send tab
|
||||||
|
|||||||
@@ -164,10 +164,22 @@ bool isShieldedAddress(const std::string& s)
|
|||||||
|| hrp == "zregtestsapling"; // regtest
|
|| hrp == "zregtestsapling"; // regtest
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isValidRecipientAddress(const std::string& s)
|
bool isDragonXAddress(const std::string& s)
|
||||||
{
|
{
|
||||||
return isTransparentAddress(s) || isShieldedAddress(s);
|
return isTransparentAddress(s) || isShieldedAddress(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isValidRecipientAddress(const std::string& s)
|
||||||
|
{
|
||||||
|
return isShieldedAddress(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
RecipientKind classifyRecipient(const std::string& s)
|
||||||
|
{
|
||||||
|
if (isShieldedAddress(s)) return RecipientKind::Shielded;
|
||||||
|
if (isTransparentAddress(s)) return RecipientKind::MiningOnly;
|
||||||
|
return RecipientKind::Invalid;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace util
|
} // namespace util
|
||||||
} // namespace dragonx
|
} // namespace dragonx
|
||||||
|
|||||||
@@ -45,8 +45,18 @@ bool isTransparentAddress(const std::string& s);
|
|||||||
// with a valid Bech32 checksum. Distinguishes a payment address from a viewing key (e.g. "zivks…").
|
// with a valid Bech32 checksum. Distinguishes a payment address from a viewing key (e.g. "zivks…").
|
||||||
bool isShieldedAddress(const std::string& s);
|
bool isShieldedAddress(const std::string& s);
|
||||||
|
|
||||||
// True if `s` is any address a payment can be sent to (transparent or shielded).
|
// True if `s` is a DragonX address of either kind (transparent or shielded) — "is this an address at all".
|
||||||
|
bool isDragonXAddress(const std::string& s);
|
||||||
|
|
||||||
|
// True if `s` is an address a payment can be sent to. DragonX is a private chain (-ac_private=1): consensus
|
||||||
|
// rejects any non-coinbase output to a transparent address, so only a shielded address can be paid — sends,
|
||||||
|
// payment requests and pool payouts included. A transparent address only ever receives mining rewards.
|
||||||
bool isValidRecipientAddress(const std::string& s);
|
bool isValidRecipientAddress(const std::string& s);
|
||||||
|
|
||||||
|
// What sending to `s` would mean: a shielded address (payable), a mining address (transparent: valid, but
|
||||||
|
// it can only receive mining rewards, so a payment to it is rejected), or not an address.
|
||||||
|
enum class RecipientKind { Invalid, Shielded, MiningOnly };
|
||||||
|
RecipientKind classifyRecipient(const std::string& s);
|
||||||
|
|
||||||
} // namespace util
|
} // namespace util
|
||||||
} // namespace dragonx
|
} // namespace dragonx
|
||||||
|
|||||||
+17
-12
@@ -1031,9 +1031,7 @@ void I18n::loadBuiltinEnglish()
|
|||||||
strings_["copied"] = "Copied!";
|
strings_["copied"] = "Copied!";
|
||||||
strings_["hidden_tag"] = " (hidden)";
|
strings_["hidden_tag"] = " (hidden)";
|
||||||
strings_["z_address"] = "Z-Address";
|
strings_["z_address"] = "Z-Address";
|
||||||
strings_["t_address"] = "T-Address";
|
|
||||||
strings_["shielded_address"] = "Shielded Address";
|
strings_["shielded_address"] = "Shielded Address";
|
||||||
strings_["transparent_address"] = "Transparent Address";
|
|
||||||
strings_["label_placeholder"] = "e.g. Savings, Mining...";
|
strings_["label_placeholder"] = "e.g. Savings, Mining...";
|
||||||
strings_["choose_icon"] = "Choose Icon";
|
strings_["choose_icon"] = "Choose Icon";
|
||||||
strings_["clear_icon"] = "Clear Icon";
|
strings_["clear_icon"] = "Clear Icon";
|
||||||
@@ -1169,7 +1167,6 @@ void I18n::loadBuiltinEnglish()
|
|||||||
// Balance Tab
|
// Balance Tab
|
||||||
strings_["summary"] = "Summary";
|
strings_["summary"] = "Summary";
|
||||||
strings_["shielded"] = "Shielded";
|
strings_["shielded"] = "Shielded";
|
||||||
strings_["transparent"] = "Transparent";
|
|
||||||
strings_["total"] = "Total";
|
strings_["total"] = "Total";
|
||||||
strings_["unconfirmed"] = "Unconfirmed";
|
strings_["unconfirmed"] = "Unconfirmed";
|
||||||
strings_["recent_transactions"] = "RECENT TRANSACTIONS";
|
strings_["recent_transactions"] = "RECENT TRANSACTIONS";
|
||||||
@@ -1180,7 +1177,6 @@ void I18n::loadBuiltinEnglish()
|
|||||||
strings_["privacy_low"] = "Low privacy — shield funds";
|
strings_["privacy_low"] = "Low privacy — shield funds";
|
||||||
strings_["balance_history_collecting"] = "Balance history — collecting data...";
|
strings_["balance_history_collecting"] = "Balance history — collecting data...";
|
||||||
strings_["balance_shielded_fmt"] = "Shielded: %.8f";
|
strings_["balance_shielded_fmt"] = "Shielded: %.8f";
|
||||||
strings_["balance_transparent_fmt"] = "Transparent: %.8f";
|
|
||||||
strings_["total_balance_label"] = "Total Balance";
|
strings_["total_balance_label"] = "Total Balance";
|
||||||
strings_["balance_syncing_pct"] = "Syncing %.1f%%";
|
strings_["balance_syncing_pct"] = "Syncing %.1f%%";
|
||||||
strings_["balance_mining_rate"] = "Mining %s";
|
strings_["balance_mining_rate"] = "Mining %s";
|
||||||
@@ -1194,7 +1190,6 @@ void I18n::loadBuiltinEnglish()
|
|||||||
strings_["t_addresses"] = "T-Addresses";
|
strings_["t_addresses"] = "T-Addresses";
|
||||||
strings_["no_addresses"] = "No addresses found. Create one using the buttons above.";
|
strings_["no_addresses"] = "No addresses found. Create one using the buttons above.";
|
||||||
strings_["new_z_address"] = "New Z-Address";
|
strings_["new_z_address"] = "New Z-Address";
|
||||||
strings_["new_t_address"] = "New T-Address";
|
|
||||||
strings_["type"] = "Type";
|
strings_["type"] = "Type";
|
||||||
strings_["address"] = "Address";
|
strings_["address"] = "Address";
|
||||||
strings_["copy_address"] = "Copy Full Address";
|
strings_["copy_address"] = "Copy Full Address";
|
||||||
@@ -1792,7 +1787,6 @@ void I18n::loadBuiltinEnglish()
|
|||||||
strings_["contact_avatar_image"] = "Image";
|
strings_["contact_avatar_image"] = "Image";
|
||||||
strings_["contact_avatar_badge_hint"] = "The badge is chosen automatically from the address type.";
|
strings_["contact_avatar_badge_hint"] = "The badge is chosen automatically from the address type.";
|
||||||
strings_["contact_avatar_shielded"] = "Shielded";
|
strings_["contact_avatar_shielded"] = "Shielded";
|
||||||
strings_["contact_avatar_transparent"] = "Transparent";
|
|
||||||
strings_["contact_avatar_choose"] = "Choose image\xE2\x80\xA6";
|
strings_["contact_avatar_choose"] = "Choose image\xE2\x80\xA6";
|
||||||
strings_["contact_avatar_remove"] = "Remove";
|
strings_["contact_avatar_remove"] = "Remove";
|
||||||
strings_["contact_avatar_image_hint"] = "The image is copied into the app so it stays available if the original moves.";
|
strings_["contact_avatar_image_hint"] = "The image is copied into the app so it stays available if the original moves.";
|
||||||
@@ -2170,6 +2164,23 @@ void I18n::loadBuiltinEnglish()
|
|||||||
strings_["mining_payout_address"] = "Payout Address";
|
strings_["mining_payout_address"] = "Payout Address";
|
||||||
strings_["mining_payout_tooltip"] = "Address to receive mining rewards";
|
strings_["mining_payout_tooltip"] = "Address to receive mining rewards";
|
||||||
strings_["mining_payout_invalid"] = "Not a valid DragonX address — fix it before starting, or mining rewards are lost.";
|
strings_["mining_payout_invalid"] = "Not a valid DragonX address — fix it before starting, or mining rewards are lost.";
|
||||||
|
strings_["send_mining_addr_short"] = "Mining address — can't be paid";
|
||||||
|
strings_["send_mining_addr_blocked"] = "This is a mining (transparent) address. On DragonX these can only receive mining rewards — the network rejects payments to them. Ask the recipient for a shielded address (it starts with zs).";
|
||||||
|
strings_["mining_payout_needs_shielded"] = "Pools pay out with ordinary transactions, which can't reach a mining (transparent, R…) address on DragonX. Use a shielded address (it starts with zs) as your payout address.";
|
||||||
|
strings_["new_mining_address"] = "New mining address";
|
||||||
|
strings_["tt_new_mining_address"] = "Creates a transparent (R…) address for solo-mining rewards. It can't receive payments — share a shielded address for those.";
|
||||||
|
strings_["mining_address"] = "Mining address";
|
||||||
|
strings_["addr_type_mining"] = "Mining";
|
||||||
|
strings_["mining_rewards"] = "Mining rewards";
|
||||||
|
strings_["mining_rewards_unshielded"] = "Not yet shielded";
|
||||||
|
strings_["baltab_mining_addresses_count"] = "%d mining addresses";
|
||||||
|
strings_["baltab_mining_amount"] = "Mining rewards %.8f";
|
||||||
|
strings_["balance_mining_fmt"] = "Mining rewards: %.8f";
|
||||||
|
strings_["mining_card_tooltip"] = "Solo-mining rewards arrive at your mining (transparent, R…) addresses. Those addresses can't receive payments. Rewards are shielded automatically once they mature.";
|
||||||
|
strings_["mining_card_click_to_shield"] = "Click to shield matured rewards now.";
|
||||||
|
strings_["contact_chip_mining"] = "Mining only";
|
||||||
|
strings_["failed_create_mining_address"] = "Failed to create mining address";
|
||||||
|
strings_["new_mining_address_created"] = "New mining address created";
|
||||||
strings_["mining_est_daily_pool_sub"] = "rough solo-equivalent, before pool fee";
|
strings_["mining_est_daily_pool_sub"] = "rough solo-equivalent, before pool fee";
|
||||||
strings_["mining_generate_z_address_hint"] = "Generate a Z address in the Receive tab to use as your payout address";
|
strings_["mining_generate_z_address_hint"] = "Generate a Z address in the Receive tab to use as your payout address";
|
||||||
strings_["mining_pool_needs_payout_tooltip"] = "Enter a payout address first (generate a Z address)";
|
strings_["mining_pool_needs_payout_tooltip"] = "Enter a payout address first (generate a Z address)";
|
||||||
@@ -2388,9 +2399,7 @@ void I18n::loadBuiltinEnglish()
|
|||||||
strings_["click_copy_uri"] = "Click to copy URI";
|
strings_["click_copy_uri"] = "Click to copy URI";
|
||||||
strings_["generating"] = "Generating";
|
strings_["generating"] = "Generating";
|
||||||
strings_["failed_create_shielded"] = "Failed to create shielded address";
|
strings_["failed_create_shielded"] = "Failed to create shielded address";
|
||||||
strings_["failed_create_transparent"] = "Failed to create transparent address";
|
|
||||||
strings_["new_shielded_created"] = "New shielded address created";
|
strings_["new_shielded_created"] = "New shielded address created";
|
||||||
strings_["new_transparent_created"] = "New transparent address created";
|
|
||||||
strings_["payment_request_copied"] = "Payment request copied";
|
strings_["payment_request_copied"] = "Payment request copied";
|
||||||
strings_["payment_uri_copied"] = "Payment URI copied";
|
strings_["payment_uri_copied"] = "Payment URI copied";
|
||||||
|
|
||||||
@@ -2453,7 +2462,6 @@ void I18n::loadBuiltinEnglish()
|
|||||||
strings_["send_txid_copied"] = "TxID copied to clipboard";
|
strings_["send_txid_copied"] = "TxID copied to clipboard";
|
||||||
strings_["send_txid_label"] = "TxID: %s";
|
strings_["send_txid_label"] = "TxID: %s";
|
||||||
strings_["send_valid_shielded"] = "Valid shielded address";
|
strings_["send_valid_shielded"] = "Valid shielded address";
|
||||||
strings_["send_valid_transparent"] = "Valid transparent address";
|
|
||||||
strings_["send_wallet_empty"] = "Your wallet is empty";
|
strings_["send_wallet_empty"] = "Your wallet is empty";
|
||||||
strings_["send_yes_clear"] = "Yes, Clear";
|
strings_["send_yes_clear"] = "Yes, Clear";
|
||||||
|
|
||||||
@@ -2708,15 +2716,12 @@ void I18n::loadBuiltinEnglish()
|
|||||||
|
|
||||||
// balance_tab.cpp
|
// balance_tab.cpp
|
||||||
strings_["baltab_shielded_amount"] = "Shielded %.8f";
|
strings_["baltab_shielded_amount"] = "Shielded %.8f";
|
||||||
strings_["baltab_transparent_amount"] = "Transparent %.8f";
|
|
||||||
strings_["baltab_market_price_4dp"] = "Market: $%.4f";
|
strings_["baltab_market_price_4dp"] = "Market: $%.4f";
|
||||||
strings_["baltab_market_price_8dp"] = "Market: $%.8f";
|
strings_["baltab_market_price_8dp"] = "Market: $%.8f";
|
||||||
strings_["baltab_pct_of_total_zaddr"] = "%.0f%% of total · %d Z-addr";
|
strings_["baltab_pct_of_total_zaddr"] = "%.0f%% of total · %d Z-addr";
|
||||||
strings_["baltab_t_addresses_count"] = "%d T-addresses";
|
|
||||||
strings_["baltab_pct_change_24h"] = "%s%.1f%% 24h";
|
strings_["baltab_pct_change_24h"] = "%s%.1f%% 24h";
|
||||||
strings_["baltab_total_balance"] = "Total Balance";
|
strings_["baltab_total_balance"] = "Total Balance";
|
||||||
strings_["baltab_shielded"] = "Shielded";
|
strings_["baltab_shielded"] = "Shielded";
|
||||||
strings_["baltab_transparent"] = "Transparent";
|
|
||||||
strings_["baltab_market"] = "Market";
|
strings_["baltab_market"] = "Market";
|
||||||
|
|
||||||
// settings_window.cpp
|
// settings_window.cpp
|
||||||
|
|||||||
+48
-17
@@ -4410,21 +4410,10 @@ void testChooseDaemonStatus()
|
|||||||
EXPECT_TRUE(chooseDaemonStatus(false, false, idle) == DaemonStatusKind::Launching); // not bound yet
|
EXPECT_TRUE(chooseDaemonStatus(false, false, idle) == DaemonStatusKind::Launching); // not bound yet
|
||||||
}
|
}
|
||||||
|
|
||||||
// S10: every string added by the daemon-stop work exists in English and in all 8 languages, with the same
|
// Every key exists in English and in all 8 languages, with the same printf arguments (a mismatch is rejected
|
||||||
// printf arguments (a mismatch is rejected at runtime and would fall back to English, or worse).
|
// at runtime and falls back to English, or worse).
|
||||||
void testDaemonStopStringsTranslated()
|
static void expectKeysTranslated(const std::vector<const char*>& keys)
|
||||||
{
|
{
|
||||||
const char* keys[] = {
|
|
||||||
"shutdown_leave_running", "shutdown_leave_running_tip", "shutdown_kill_node", "shutdown_kill_node_tip",
|
|
||||||
"shutdown_kill_confirm_title", "shutdown_kill_confirm_msg", "shutdown_kill_confirm_yes",
|
|
||||||
"shutdown_stop_asking", "shutdown_stop_queued", "shutdown_stop_delivered", "shutdown_stop_cpu_suffix",
|
|
||||||
"shutdown_stop_idle", "node_busy_rebuild_title", "node_busy_rebuild_desc", "node_busy_rebuild_reading",
|
|
||||||
"node_busy_rebuild_extending", "node_busy_replay_title", "node_busy_replay_desc", "node_busy_rpc_title",
|
|
||||||
"node_busy_rpc_desc", "node_starting_title", "node_starting_busy_desc", "node_starting_launch_desc",
|
|
||||||
"sb_node_busy", "stopconfirm_rebuild_title", "stopconfirm_rebuild_body", "stopconfirm_busy_title",
|
|
||||||
"stopconfirm_busy_body", "stopconfirm_stop_wait", "appx_daemon_reinstall_node_busy", "node_busy_running",
|
|
||||||
"appx_node_busy_try_later", "appx_node_not_stopped",
|
|
||||||
};
|
|
||||||
// printf conversions in order, "%%" excluded: what must survive translation.
|
// printf conversions in order, "%%" excluded: what must survive translation.
|
||||||
auto conversions = [](const std::string& s) {
|
auto conversions = [](const std::string& s) {
|
||||||
std::string sig;
|
std::string sig;
|
||||||
@@ -4451,6 +4440,34 @@ void testDaemonStopStringsTranslated()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// S10: every string added by the daemon-stop work.
|
||||||
|
void testDaemonStopStringsTranslated()
|
||||||
|
{
|
||||||
|
expectKeysTranslated({
|
||||||
|
"shutdown_leave_running", "shutdown_leave_running_tip", "shutdown_kill_node", "shutdown_kill_node_tip",
|
||||||
|
"shutdown_kill_confirm_title", "shutdown_kill_confirm_msg", "shutdown_kill_confirm_yes",
|
||||||
|
"shutdown_stop_asking", "shutdown_stop_queued", "shutdown_stop_delivered", "shutdown_stop_cpu_suffix",
|
||||||
|
"shutdown_stop_idle", "node_busy_rebuild_title", "node_busy_rebuild_desc", "node_busy_rebuild_reading",
|
||||||
|
"node_busy_rebuild_extending", "node_busy_replay_title", "node_busy_replay_desc", "node_busy_rpc_title",
|
||||||
|
"node_busy_rpc_desc", "node_starting_title", "node_starting_busy_desc", "node_starting_launch_desc",
|
||||||
|
"sb_node_busy", "stopconfirm_rebuild_title", "stopconfirm_rebuild_body", "stopconfirm_busy_title",
|
||||||
|
"stopconfirm_busy_body", "stopconfirm_stop_wait", "appx_daemon_reinstall_node_busy", "node_busy_running",
|
||||||
|
"appx_node_busy_try_later", "appx_node_not_stopped",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mining addresses: the strings that explain transparent addresses only receive mining rewards.
|
||||||
|
void testMiningAddressStringsTranslated()
|
||||||
|
{
|
||||||
|
expectKeysTranslated({
|
||||||
|
"send_mining_addr_short", "send_mining_addr_blocked", "mining_payout_needs_shielded", "new_mining_address",
|
||||||
|
"tt_new_mining_address", "mining_address", "addr_type_mining", "mining_rewards", "mining_rewards_unshielded",
|
||||||
|
"baltab_mining_addresses_count", "baltab_mining_amount", "balance_mining_fmt", "mining_card_tooltip",
|
||||||
|
"mining_card_click_to_shield", "contact_chip_mining", "failed_create_mining_address",
|
||||||
|
"new_mining_address_created",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// S3: on Linux a node in its final shutdown phase reads comm "hush-shutoff"; its executable still says
|
// S3: on Linux a node in its final shutdown phase reads comm "hush-shutoff"; its executable still says
|
||||||
// dragonxd, so it must still count as running (it holds the datadir lock until it exits).
|
// dragonxd, so it must still count as running (it holds the datadir lock until it exits).
|
||||||
void testDaemonProcessIdentity()
|
void testDaemonProcessIdentity()
|
||||||
@@ -7787,12 +7804,25 @@ void testAddressChecksumValidation()
|
|||||||
EXPECT_FALSE(isShieldedAddress(p2pkh));
|
EXPECT_FALSE(isShieldedAddress(p2pkh));
|
||||||
EXPECT_TRUE(isShieldedAddress(zaddr));
|
EXPECT_TRUE(isShieldedAddress(zaddr));
|
||||||
EXPECT_FALSE(isTransparentAddress(zaddr));
|
EXPECT_FALSE(isTransparentAddress(zaddr));
|
||||||
EXPECT_TRUE(isValidRecipientAddress(p2pkh));
|
// Both kinds are DragonX addresses, but only a shielded one can be paid: the chain is private, so
|
||||||
EXPECT_TRUE(isValidRecipientAddress(p2sh));
|
// consensus rejects a payment to a transparent address (it only ever receives mining rewards).
|
||||||
|
using dragonx::util::isDragonXAddress;
|
||||||
|
using dragonx::util::classifyRecipient;
|
||||||
|
using dragonx::util::RecipientKind;
|
||||||
|
EXPECT_TRUE(isDragonXAddress(p2pkh));
|
||||||
|
EXPECT_TRUE(isDragonXAddress(p2sh));
|
||||||
|
EXPECT_TRUE(isDragonXAddress(zaddr));
|
||||||
|
EXPECT_FALSE(isValidRecipientAddress(p2pkh));
|
||||||
|
EXPECT_FALSE(isValidRecipientAddress(p2sh));
|
||||||
EXPECT_TRUE(isValidRecipientAddress(zaddr));
|
EXPECT_TRUE(isValidRecipientAddress(zaddr));
|
||||||
|
EXPECT_TRUE(classifyRecipient(zaddr) == RecipientKind::Shielded);
|
||||||
|
EXPECT_TRUE(classifyRecipient(p2pkh) == RecipientKind::MiningOnly);
|
||||||
|
EXPECT_TRUE(classifyRecipient(p2sh) == RecipientKind::MiningOnly);
|
||||||
|
EXPECT_TRUE(classifyRecipient("x") == RecipientKind::Invalid);
|
||||||
|
EXPECT_TRUE(classifyRecipient("zivks1qqqsyqcyq5rqwzqfpg9scrgwpugpzysn") == RecipientKind::Invalid);
|
||||||
// A WIF spending key is NOT a recipient (33/34-byte payload, not 21); nor is a typo'd address.
|
// A WIF spending key is NOT a recipient (33/34-byte payload, not 21); nor is a typo'd address.
|
||||||
EXPECT_FALSE(isTransparentAddress("Up3W7uVYkLxCfH91APxjSpkkGBWJyBrm3tt1bCz64V5fpZK9ef3C"));
|
EXPECT_FALSE(isTransparentAddress("Up3W7uVYkLxCfH91APxjSpkkGBWJyBrm3tt1bCz64V5fpZK9ef3C"));
|
||||||
EXPECT_FALSE(isValidRecipientAddress("R9NXAVJezHiBnT3ijTpg3JUZre7PxhJWtX")); // flipped checksum char
|
EXPECT_FALSE(isDragonXAddress("R9NXAVJezHiBnT3ijTpg3JUZre7PxhJWtX")); // flipped checksum char
|
||||||
EXPECT_FALSE(isValidRecipientAddress(""));
|
EXPECT_FALSE(isValidRecipientAddress(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9213,6 +9243,7 @@ int main()
|
|||||||
testOutputSinceAcrossTrim();
|
testOutputSinceAcrossTrim();
|
||||||
testChooseDaemonStatus();
|
testChooseDaemonStatus();
|
||||||
testDaemonStopStringsTranslated();
|
testDaemonStopStringsTranslated();
|
||||||
|
testMiningAddressStringsTranslated();
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
testWindowsStopNeverKillsForeignDaemon();
|
testWindowsStopNeverKillsForeignDaemon();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user