diff --git a/res/fonts/NotoSansCJK-Subset.ttf b/res/fonts/NotoSansCJK-Subset.ttf index 9122891..5a4acd6 100644 Binary files a/res/fonts/NotoSansCJK-Subset.ttf and b/res/fonts/NotoSansCJK-Subset.ttf differ diff --git a/res/lang/de.json b/res/lang/de.json index 574e4cb..ac20877 100644 --- a/res/lang/de.json +++ b/res/lang/de.json @@ -1474,6 +1474,8 @@ "wallets_add_folder_toggle": "+ Weiteren Ordner nach Wallets durchsuchen…", "wallets_badge_encrypted": "Verschlüsselt (passphrasengeschützt)", "wallets_badge_encrypted_short": "Verschlüsselt", + "wallets_badge_hd": "HD-Wallet – Seed-Phrase ohne Öffnen nicht bestätigbar", + "wallets_badge_hd_short": "HD-Wallet", "wallets_badge_legacy": "Legacy-Wallet (keine Seed-Phrase)", "wallets_badge_legacy_short": "Legacy", "wallets_badge_seed": "Seed-Phrase-Wallet (HD)", diff --git a/res/lang/es.json b/res/lang/es.json index 57dcf74..a877ba0 100644 --- a/res/lang/es.json +++ b/res/lang/es.json @@ -1474,6 +1474,8 @@ "wallets_add_folder_toggle": "+ Buscar wallets en otra carpeta…", "wallets_badge_encrypted": "Cifrada (protegida con contraseña)", "wallets_badge_encrypted_short": "Cifrada", + "wallets_badge_hd": "Cartera HD: no se puede confirmar la frase semilla sin abrirla", + "wallets_badge_hd_short": "Cartera HD", "wallets_badge_legacy": "Billetera heredada (sin frase semilla)", "wallets_badge_legacy_short": "Heredada", "wallets_badge_seed": "Billetera con frase semilla (HD)", diff --git a/res/lang/fr.json b/res/lang/fr.json index 24726ba..d537add 100644 --- a/res/lang/fr.json +++ b/res/lang/fr.json @@ -1474,6 +1474,8 @@ "wallets_add_folder_toggle": "+ Analyser un autre dossier pour les portefeuilles…", "wallets_badge_encrypted": "Chiffré (protégé par phrase secrète)", "wallets_badge_encrypted_short": "Chiffré", + "wallets_badge_hd": "Portefeuille HD — impossible de confirmer une phrase de récupération sans l'ouvrir", + "wallets_badge_hd_short": "Portefeuille HD", "wallets_badge_legacy": "Portefeuille hérité (sans phrase de récupération)", "wallets_badge_legacy_short": "Hérité", "wallets_badge_seed": "Portefeuille à phrase de récupération (HD)", diff --git a/res/lang/ja.json b/res/lang/ja.json index ebaae7b..0dfb124 100644 --- a/res/lang/ja.json +++ b/res/lang/ja.json @@ -1474,6 +1474,8 @@ "wallets_add_folder_toggle": "+ 別のフォルダーをウォレット検索…", "wallets_badge_encrypted": "暗号化済み(パスフレーズ保護)", "wallets_badge_encrypted_short": "暗号化", + "wallets_badge_hd": "HDウォレット — 開かないとシードフレーズを確認できません", + "wallets_badge_hd_short": "HDウォレット", "wallets_badge_legacy": "レガシーウォレット(シードフレーズなし)", "wallets_badge_legacy_short": "レガシー", "wallets_badge_seed": "シードフレーズウォレット (HD)", diff --git a/res/lang/ko.json b/res/lang/ko.json index fb15395..fb83487 100644 --- a/res/lang/ko.json +++ b/res/lang/ko.json @@ -1474,6 +1474,8 @@ "wallets_add_folder_toggle": "+ 다른 폴더에서 지갑 검색…", "wallets_badge_encrypted": "암호화됨 (암호로 보호됨)", "wallets_badge_encrypted_short": "암호화됨", + "wallets_badge_hd": "HD 지갑 — 열지 않으면 시드 문구를 확인할 수 없습니다", + "wallets_badge_hd_short": "HD 지갑", "wallets_badge_legacy": "레거시 지갑 (시드 문구 없음)", "wallets_badge_legacy_short": "레거시", "wallets_badge_seed": "시드 문구 지갑 (HD)", diff --git a/res/lang/pt.json b/res/lang/pt.json index 3c50c74..8eb68c0 100644 --- a/res/lang/pt.json +++ b/res/lang/pt.json @@ -1474,6 +1474,8 @@ "wallets_add_folder_toggle": "+ Procurar carteiras noutra pasta…", "wallets_badge_encrypted": "Encriptada (protegida por senha)", "wallets_badge_encrypted_short": "Encriptada", + "wallets_badge_hd": "Carteira HD — não é possível confirmar a frase-semente sem abri-la", + "wallets_badge_hd_short": "Carteira HD", "wallets_badge_legacy": "Carteira legada (sem frase semente)", "wallets_badge_legacy_short": "Legada", "wallets_badge_seed": "Carteira com frase semente (HD)", diff --git a/res/lang/ru.json b/res/lang/ru.json index 5436273..23c69ba 100644 --- a/res/lang/ru.json +++ b/res/lang/ru.json @@ -1474,6 +1474,8 @@ "wallets_add_folder_toggle": "+ Искать кошельки в другой папке…", "wallets_badge_encrypted": "Зашифрован (защищён паролем)", "wallets_badge_encrypted_short": "Зашифрован", + "wallets_badge_hd": "HD-кошелёк — невозможно подтвердить seed-фразу без открытия", + "wallets_badge_hd_short": "HD-кошелёк", "wallets_badge_legacy": "Устаревший кошелёк (без seed-фразы)", "wallets_badge_legacy_short": "Устаревший", "wallets_badge_seed": "Кошелёк с seed-фразой (HD)", diff --git a/res/lang/zh.json b/res/lang/zh.json index ce48963..c856b2f 100644 --- a/res/lang/zh.json +++ b/res/lang/zh.json @@ -1474,6 +1474,8 @@ "wallets_add_folder_toggle": "+ 扫描其他文件夹中的钱包…", "wallets_badge_encrypted": "已加密(密码保护)", "wallets_badge_encrypted_short": "已加密", + "wallets_badge_hd": "HD 钱包 — 打开钱包才能确认助记词", + "wallets_badge_hd_short": "HD 钱包", "wallets_badge_legacy": "旧版钱包(无助记词)", "wallets_badge_legacy_short": "旧版", "wallets_badge_seed": "助记词钱包 (HD)", diff --git a/src/ui/windows/wallets_dialog.h b/src/ui/windows/wallets_dialog.h index c31bb8c..87e7768 100644 --- a/src/ui/windows/wallets_dialog.h +++ b/src/ui/windows/wallets_dialog.h @@ -301,15 +301,19 @@ public: } const bool bSeed = (seed == 1); const bool bLegacy = (seed == 2); - // Undecided: probed but neither the runtime status nor the on-disk flag could classify it - // (incomplete scan, or an unreadable hdchain value) — show a question mark rather than - // mislabel. Suppressed for encrypted rows, which still carry a definitive Lock badge. - const bool bUnknown = (seed == 0) && pres.probed && !pres.encrypted; + // seed==0 splits by what the probe DID learn: if it saw HD records we know it's an HD + // wallet (we just couldn't read the phrase flag — e.g. the tier-1 byte-scan fallback), so + // label it "HD wallet" rather than a bare "?"; only a scan that couldn't even establish + // that (incomplete, no HD marker yet) stays "Unknown". Both yield to the Lock badge when + // encrypted, so an encrypted-but-unclassified row shows just the lock. + const bool bHd = (seed == 0) && pres.probed && pres.hdSeed && !pres.encrypted; + const bool bUnknown = (seed == 0) && pres.probed && !pres.hdSeed && !pres.encrypted; struct Badge { const char* glyph; ImU32 col; const char* label; const char* tip; }; - Badge bl[4]; int nb = 0; + Badge bl[4]; int nb = 0; // seed/legacy/hd/unknown are mutually exclusive → at most one + lock if (bSeed) bl[nb++] = { ICON_MD_ECO, WithAlpha(Success(), 235), TR("wallets_badge_seed_short"), TR("wallets_badge_seed") }; if (bLock) bl[nb++] = { ICON_MD_LOCK, WithAlpha(Warning(), 240), TR("wallets_badge_encrypted_short"), TR("wallets_badge_encrypted") }; if (bLegacy) bl[nb++] = { ICON_MD_HISTORY, WithAlpha(OnSurfaceMedium(), 220), TR("wallets_badge_legacy_short"), TR("wallets_badge_legacy") }; + if (bHd) bl[nb++] = { ICON_MD_ACCOUNT_TREE, WithAlpha(OnSurfaceMedium(), 210), TR("wallets_badge_hd_short"), TR("wallets_badge_hd") }; if (bUnknown) bl[nb++] = { ICON_MD_HELP_OUTLINE, WithAlpha(OnSurfaceMedium(), 185), TR("wallets_badge_unknown_short"), TR("wallets_badge_unknown") }; const float bGap = Layout::spacingSm(); float maxLabelW = 0.0f; diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index 248d745..9a640e3 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -276,9 +276,11 @@ void I18n::loadBuiltinEnglish() strings_["wallets_badge_seed"] = "Seed phrase wallet (HD)"; strings_["wallets_badge_legacy"] = "Legacy wallet (no seed phrase)"; strings_["wallets_badge_unknown"] = "Wallet type not fully determined (large file — open to confirm)"; + strings_["wallets_badge_hd"] = "HD wallet — can't confirm a seed phrase without opening it"; strings_["wallets_badge_seed_short"] = "Seed phrase"; strings_["wallets_badge_encrypted_short"] = "Encrypted"; strings_["wallets_badge_legacy_short"] = "Legacy"; + strings_["wallets_badge_hd_short"] = "HD wallet"; strings_["wallets_badge_unknown_short"] = "Unknown"; strings_["wallets_open"] = "Open"; strings_["wallets_open_folder"] = "Open folder location";