fix(diagnostics): address adversarial review of the QoL UI (popup, staleness, DPI, i18n)

Follow-up to the node-banner / staleness-badge / alert-history features — a 5-dimension
finder->verify review surfaced 4 real issues (the ImGui-stack-balance finder found none):

- Alert popup grew off the right edge: pivot (0,1) pinned the panel's LEFT edge at the
  bell, which sits near the window's right edge, so a 320px panel overflowed rightward
  (an explicit SetNextWindowPos pivot skips ImGui's on-screen clamp). Anchor the
  bottom-RIGHT corner at the bell instead (pivot (1,1) at bellMax.x) so it grows left.

- Staleness badge could flash red on reconnect: WalletState::clear() reset everything
  except the four last_*_update stamps, so the pre-outage timestamp survived and the
  badge briefly showed "Updated Nm ago" the same frame the node banner cleared. Zero the
  stamps in clear() (all readers treat 0 as "never"; app_network.cpp:1473 guards != 0).

- Banner min-height floor wasn't DPI-scaled: std::max(minH, baseH*vScale()) now uses
  minH * dpiScale() so both operands are in scaled px.

- New i18n keys weren't in res/lang/: back-filled all 16 diagnostics/QoL keys into the 8
  language files, additively (128 insertions, 0 deletions). zh/ja/ko reworded around 2
  glyphs missing from the CJK subset and hard-asserted tofu-free against the subset font.

Build-clean both variants; ctest 1/1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-02 21:14:38 -05:00
parent 4b3f0fa92b
commit 8bb3198562
11 changed files with 147 additions and 5 deletions

View File

@@ -48,6 +48,10 @@
"advanced": "高级",
"advanced_effects": "高级特效...",
"ago": "前",
"alerts_clear": "清除通知历史",
"alerts_history_tooltip": "最近通知",
"alerts_none": "暂无通知",
"alerts_recent": "最近通知",
"all_filter": "全部",
"allow_custom_fees": "允许自定义手续费",
"amount": "金额",
@@ -451,6 +455,8 @@
"daemon_update_version": "版本:",
"daemon_version": "守护进程",
"dark": "深色",
"data_stale_prefix": "更新于",
"data_stale_tooltip": "余额可能已过时 — 钱包最近未收到更新。请检查您的节点连接。",
"date": "日期",
"date_label": "日期:",
"debug_logging": "调试日志",
@@ -955,6 +961,11 @@
"no_transactions": "未找到交易",
"no_transactions_yet": "尚无交易",
"node": "节点",
"node_banner_crashed_title": "节点意外停止",
"node_banner_lite_open_failed": "无法打开您的钱包",
"node_banner_offline_title": "未连接到 DragonX 节点",
"node_banner_reconnect": "重新连接",
"node_banner_restart": "重启节点",
"node_security": "节点与安全",
"noise": "噪点",
"not_connected": "未连接到守护进程...",
@@ -1289,12 +1300,14 @@
"settings_configure_explorer": "配置外部区块浏览器链接",
"settings_configure_rpc": "配置 dragonxd 守护进程连接",
"settings_connection": "连接",
"settings_copy_diagnostics": "复制诊断信息",
"settings_copyright": "版权所有 2024-2026 DragonX 开发者 | GPLv3 许可证",
"settings_custom": "自定义",
"settings_data_dir": "数据目录:",
"settings_debug_changed": "调试类别已更改——重启守护进程以应用",
"settings_debug_restart_note": "更改将在重启守护进程后生效。",
"settings_debug_select": "选择要启用的守护进程调试日志类别(-debug= 标志)。",
"settings_diagnostics_copied": "诊断信息已复制到剪贴板",
"settings_encrypt_first_pin": "请先加密钱包以启用 PIN",
"settings_encrypt_wallet": "加密钱包",
"settings_explorer_hint": "URL 应包含尾部斜杠。将自动附加 txid/地址。",
@@ -1315,6 +1328,7 @@
"settings_not_found": "未找到",
"settings_open_app_dir": "打开应用文件夹",
"settings_open_data_dir": "打开数据文件夹",
"settings_open_log_folder": "打开日志文件夹",
"settings_other": "其他",
"settings_pin_active": "PIN",
"settings_privacy": "隐私",
@@ -1474,6 +1488,7 @@
"tt_chat_timestamp": "仅此标签页的时间戳格式:跟随全应用时钟,或强制使用 24-hour 或 12-hour",
"tt_clear_ztx": "删除本地缓存的 z-交易历史",
"tt_clock_format": "24 或 12 小时制,应用全局。聊天可覆盖。",
"tt_copy_diagnostics": "将支持诊断摘要(版本、守护进程/钱包/日志状态 — 不含机密)复制到剪贴板",
"tt_custom_fees": "发送交易时启用手动费用输入",
"tt_custom_theme": "自定义主题已激活",
"tt_daemon_install_bundled": "停止节点,用此钱包版本内置的 dragonxd 覆盖已安装的版本,然后重启",
@@ -1527,6 +1542,7 @@
"tt_open_app_dir": "在文件管理器中打开 ObsidianDragon 文件夹(设置、主题、日志)",
"tt_open_data_dir": "在文件管理器中打开包含您钱包和区块链数据的文件夹",
"tt_open_dir": "点击在文件管理器中打开",
"tt_open_log_folder": "打开包含调试和崩溃日志的文件夹",
"tt_reduce_motion": "禁用动画过渡和余额渐变以提高无障碍性",
"tt_remove_encrypt": "移除加密并以未受保护状态存储钱包",
"tt_remove_pin": "移除 PIN 并要求密码解锁",