diff --git a/res/fonts/NotoSansCJK-Subset.ttf b/res/fonts/NotoSansCJK-Subset.ttf index 27b81cf..183fd8f 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 f733fde..d333216 100644 --- a/res/lang/de.json +++ b/res/lang/de.json @@ -271,6 +271,7 @@ "console_app": "App", "console_auto_scroll": "Automatisch scrollen", "console_available_commands": "Verfügbare Befehle:", + "console_backend_unavailable": "Kein Backend", "console_capturing_output": "Erfasse Daemon-Ausgabe...", "console_cat_blockchain": "Blockchain", "console_cat_control": "Steuerung", @@ -310,11 +311,14 @@ "console_help_help": " help - Diese Hilfe anzeigen", "console_help_setgenerate": " setgenerate - Mining steuern", "console_help_stop": " stop - Daemon stoppen", + "console_last_error": "Letzter Fehler:", "console_line_count": "%zu Zeilen", "console_matches": "Treffer", "console_new_lines": "%d neue Zeilen", "console_no_daemon": "Kein Daemon", + "console_no_output": "(keine Ausgabe)", "console_not_connected": "Fehler: Nicht mit Daemon verbunden", + "console_not_connected_lite": "Fehler: Keine Wallet geöffnet", "console_quit_note": "'quit'/'exit' werden hier nicht benötigt — schließen Sie einfach das Fenster.", "console_ref_builds": "Ergibt", "console_ref_cancel": "Abbrechen", @@ -348,6 +352,7 @@ "console_status_stopped": "Gestoppt", "console_status_stopping": "Stoppt", "console_status_unknown": "Unbekannt", + "console_stop_confirm_node": "'stop' fährt den Node herunter und trennt die Wallet. Geben Sie zur Bestätigung erneut 'stop' ein.", "console_tab_completion": "Tab zur Vervollständigung", "console_text_colors": "Textfarben", "console_toggle_accents": "Farbakzente der Zeilen umschalten", @@ -626,6 +631,7 @@ "lite_birthday_backup": "Geburtstag: %llu (auch diesen sichern)", "lite_birthday_hint": "Blockhöhe, ab der gescannt werden soll. Bei 0 belassen, falls unbekannt (langsamerer vollständiger Scan).", "lite_birthday_label": "Geburtsblock", + "lite_console_backend_commands": "Backend-Befehle:", "lite_console_help_passthrough": "Jede andere Eingabe wird als Lite-Wallet-Konsolenbefehl ausgeführt.", "lite_copy": "Kopieren", "lite_could_not_write": "Konnte nicht schreiben ", @@ -643,6 +649,7 @@ "lite_net_add_url_hint": "https://ihr-lite-server", "lite_net_checking": "wird geprüft…", "lite_net_connected": "Verbunden", + "lite_net_connecting": "Verbinde…", "lite_net_custom": "Benutzerdefiniert", "lite_net_disconnected": "Nicht verbunden", "lite_net_hidden_section": "Ausgeblendete Server", diff --git a/res/lang/es.json b/res/lang/es.json index 46ab427..f36f7b1 100644 --- a/res/lang/es.json +++ b/res/lang/es.json @@ -271,6 +271,7 @@ "console_app": "App", "console_auto_scroll": "Auto-desplazamiento", "console_available_commands": "Comandos disponibles:", + "console_backend_unavailable": "Sin backend", "console_capturing_output": "Capturando salida del daemon...", "console_cat_blockchain": "Blockchain", "console_cat_control": "Control", @@ -310,11 +311,14 @@ "console_help_help": " help - Mostrar este mensaje de ayuda", "console_help_setgenerate": " setgenerate - Controlar minería", "console_help_stop": " stop - Detener el daemon", + "console_last_error": "Último error:", "console_line_count": "%zu líneas", "console_matches": "coincidencias", "console_new_lines": "%d nuevas líneas", "console_no_daemon": "Sin daemon", + "console_no_output": "(sin salida)", "console_not_connected": "Error: No conectado al daemon", + "console_not_connected_lite": "Error: No hay ninguna cartera abierta", "console_quit_note": "'quit'/'exit' no son necesarios aquí — simplemente cierra la ventana.", "console_ref_builds": "Genera", "console_ref_cancel": "Cancelar", @@ -348,6 +352,7 @@ "console_status_stopped": "Detenido", "console_status_stopping": "Deteniendo", "console_status_unknown": "Desconocido", + "console_stop_confirm_node": "'stop' apagará el nodo y desconectará la cartera. Escribe 'stop' de nuevo para confirmar.", "console_tab_completion": "Tab para completar", "console_text_colors": "Colores de texto", "console_toggle_accents": "Alternar acentos de color de línea", @@ -626,6 +631,7 @@ "lite_birthday_backup": "Cumpleaños: %llu (respalda esto también)", "lite_birthday_hint": "Altura de bloque desde la que empezar a escanear. Deja 0 si se desconoce (escaneo completo más lento).", "lite_birthday_label": "Fecha de creación", + "lite_console_backend_commands": "Comandos del backend:", "lite_console_help_passthrough": "Cualquier otra entrada se ejecuta como un comando de consola de la cartera lite.", "lite_copy": "Copiar", "lite_could_not_write": "No se pudo escribir ", @@ -643,6 +649,7 @@ "lite_net_add_url_hint": "https://tu-servidor-lite", "lite_net_checking": "comprobando…", "lite_net_connected": "Conectado", + "lite_net_connecting": "Conectando…", "lite_net_custom": "Personalizado", "lite_net_disconnected": "No conectado", "lite_net_hidden_section": "Servidores ocultos", diff --git a/res/lang/fr.json b/res/lang/fr.json index 404acc1..189c59d 100644 --- a/res/lang/fr.json +++ b/res/lang/fr.json @@ -271,6 +271,7 @@ "console_app": "App", "console_auto_scroll": "Défilement auto", "console_available_commands": "Commandes disponibles :", + "console_backend_unavailable": "Aucun backend", "console_capturing_output": "Capture de la sortie du daemon...", "console_cat_blockchain": "Blockchain", "console_cat_control": "Contrôle", @@ -310,11 +311,14 @@ "console_help_help": " help - Afficher ce message d'aide", "console_help_setgenerate": " setgenerate - Contrôler le minage", "console_help_stop": " stop - Arrêter le daemon", + "console_last_error": "Dernière erreur :", "console_line_count": "%zu lignes", "console_matches": "correspondances", "console_new_lines": "%d nouvelles lignes", "console_no_daemon": "Pas de daemon", + "console_no_output": "(aucune sortie)", "console_not_connected": "Erreur : Non connecté au daemon", + "console_not_connected_lite": "Erreur : Aucun portefeuille ouvert", "console_quit_note": "'quit'/'exit' ne sont pas nécessaires ici — fermez simplement la fenêtre.", "console_ref_builds": "Génère", "console_ref_cancel": "Annuler", @@ -348,6 +352,7 @@ "console_status_stopped": "Arrêté", "console_status_stopping": "Arrêt", "console_status_unknown": "Inconnu", + "console_stop_confirm_node": "'stop' arrêtera le nœud et déconnectera le portefeuille. Tapez à nouveau 'stop' pour confirmer.", "console_tab_completion": "Tab pour compléter", "console_text_colors": "Couleurs du texte", "console_toggle_accents": "Basculer les accents de couleur des lignes", @@ -626,6 +631,7 @@ "lite_birthday_backup": "Date de création : %llu (à sauvegarder également)", "lite_birthday_hint": "Hauteur de bloc à partir de laquelle commencer l'analyse. Laissez 0 si inconnue (analyse complète plus lente).", "lite_birthday_label": "Bloc de création", + "lite_console_backend_commands": "Commandes du backend :", "lite_console_help_passthrough": "Toute autre entrée est exécutée comme une commande de la console du portefeuille lite.", "lite_copy": "Copier", "lite_could_not_write": "Impossible d'écrire ", @@ -643,6 +649,7 @@ "lite_net_add_url_hint": "https://votre-serveur-lite", "lite_net_checking": "vérification…", "lite_net_connected": "Connecté", + "lite_net_connecting": "Connexion…", "lite_net_custom": "Personnalisé", "lite_net_disconnected": "Non connecté", "lite_net_hidden_section": "Serveurs masqués", diff --git a/res/lang/ja.json b/res/lang/ja.json index 9e21727..3e5a005 100644 --- a/res/lang/ja.json +++ b/res/lang/ja.json @@ -271,6 +271,7 @@ "console_app": "アプリ", "console_auto_scroll": "自動スクロール", "console_available_commands": "利用可能なコマンド:", + "console_backend_unavailable": "バックエンドなし", "console_capturing_output": "デーモン出力をキャプチャ中...", "console_cat_blockchain": "ブロックチェーン", "console_cat_control": "制御", @@ -310,11 +311,14 @@ "console_help_help": " help - このヘルプを表示", "console_help_setgenerate": " setgenerate - マイニングを制御", "console_help_stop": " stop - デーモンを停止", + "console_last_error": "最後のエラー:", "console_line_count": "%zu 行", "console_matches": "件一致", "console_new_lines": "%d 新しい行", "console_no_daemon": "デーモンなし", + "console_no_output": "(出力なし)", "console_not_connected": "エラー:デーモンに接続されていません", + "console_not_connected_lite": "エラー:ウォレットが開かれていません", "console_quit_note": "ここでは 'quit'/'exit' は不要です — ウィンドウを閉じるだけで構いません。", "console_ref_builds": "生成", "console_ref_cancel": "キャンセル", @@ -348,6 +352,7 @@ "console_status_stopped": "停止済み", "console_status_stopping": "停止中", "console_status_unknown": "不明", + "console_stop_confirm_node": "'stop' はノードを停止し、ウォレットを切断します。確認するにはもう一度 'stop' と入力してください。", "console_tab_completion": "Tabで補完", "console_text_colors": "テキスト色", "console_toggle_accents": "行のカラーアクセントを切り替え", @@ -626,6 +631,7 @@ "lite_birthday_backup": "誕生日:%llu (これもバックアップしてください)", "lite_birthday_hint": "スキャンを開始するブロック高。不明な場合は0のままにしてください(完全スキャンが遅くなります)。", "lite_birthday_label": "バースデー", + "lite_console_backend_commands": "バックエンドコマンド:", "lite_console_help_passthrough": "その他の入力はライトウォレットのコンソールコマンドとして実行されます。", "lite_copy": "コピー", "lite_could_not_write": "書き込めませんでした ", @@ -643,6 +649,7 @@ "lite_net_add_url_hint": "https://your-lite-server", "lite_net_checking": "確認中…", "lite_net_connected": "接続済み", + "lite_net_connecting": "接続中…", "lite_net_custom": "カスタム", "lite_net_disconnected": "未接続", "lite_net_hidden_section": "非表示のサーバー", diff --git a/res/lang/ko.json b/res/lang/ko.json index ed28413..748dca1 100644 --- a/res/lang/ko.json +++ b/res/lang/ko.json @@ -271,6 +271,7 @@ "console_app": "앱", "console_auto_scroll": "자동 스크롤", "console_available_commands": "사용 가능한 명령어:", + "console_backend_unavailable": "백엔드 없음", "console_capturing_output": "데몬 출력 캡처 중...", "console_cat_blockchain": "블록체인", "console_cat_control": "제어", @@ -310,11 +311,14 @@ "console_help_help": " help - 도움말 표시", "console_help_setgenerate": " setgenerate - 채굴 제어", "console_help_stop": " stop - 데몬 중지", + "console_last_error": "마지막 오류:", "console_line_count": "%zu줄", "console_matches": "일치", "console_new_lines": "%d 새 줄", "console_no_daemon": "데몬 없음", + "console_no_output": "(출력 없음)", "console_not_connected": "오류: 데몬에 연결되지 않았습니다", + "console_not_connected_lite": "오류: 열린 지갑 없음", "console_quit_note": "여기서는 'quit'/'exit'가 필요 없습니다 — 그냥 창을 닫으세요.", "console_ref_builds": "생성", "console_ref_cancel": "취소", @@ -348,6 +352,7 @@ "console_status_stopped": "중지됨", "console_status_stopping": "중지 중", "console_status_unknown": "알 수 없음", + "console_stop_confirm_node": "'stop'은 노드를 종료하고 지갑 연결을 끊습니다. 확인하려면 'stop'을 다시 입력하세요.", "console_tab_completion": "Tab으로 자동 완성", "console_text_colors": "텍스트 색상", "console_toggle_accents": "줄 색상 강조 전환", @@ -626,6 +631,7 @@ "lite_birthday_backup": "생성 블록: %llu (이 값도 백업하세요)", "lite_birthday_hint": "스캔을 시작할 블록 높이입니다. 모르면 0으로 두세요(전체 스캔이 느려짐).", "lite_birthday_label": "생일 블록", + "lite_console_backend_commands": "백엔드 명령:", "lite_console_help_passthrough": "그 외 입력은 라이트 지갑 콘솔 명령으로 실행됩니다.", "lite_copy": "복사", "lite_could_not_write": "쓸 수 없습니다: ", @@ -643,6 +649,7 @@ "lite_net_add_url_hint": "https://your-lite-server", "lite_net_checking": "확인 중…", "lite_net_connected": "연결됨", + "lite_net_connecting": "연결 중…", "lite_net_custom": "사용자 지정", "lite_net_disconnected": "연결되지 않음", "lite_net_hidden_section": "숨겨진 서버", diff --git a/res/lang/pt.json b/res/lang/pt.json index 944b7d1..7d714d9 100644 --- a/res/lang/pt.json +++ b/res/lang/pt.json @@ -271,6 +271,7 @@ "console_app": "App", "console_auto_scroll": "Rolagem automática", "console_available_commands": "Comandos disponíveis:", + "console_backend_unavailable": "Sem backend", "console_capturing_output": "Capturando saída do daemon...", "console_cat_blockchain": "Blockchain", "console_cat_control": "Controle", @@ -310,11 +311,14 @@ "console_help_help": " help - Mostrar esta mensagem de ajuda", "console_help_setgenerate": " setgenerate - Controlar mineração", "console_help_stop": " stop - Parar o daemon", + "console_last_error": "Último erro:", "console_line_count": "%zu linhas", "console_matches": "correspondências", "console_new_lines": "%d novas linhas", "console_no_daemon": "Sem daemon", + "console_no_output": "(sem saída)", "console_not_connected": "Erro: Não conectado ao daemon", + "console_not_connected_lite": "Erro: Nenhuma carteira aberta", "console_quit_note": "'quit'/'exit' não são necessários aqui — basta fechar a janela.", "console_ref_builds": "Gera", "console_ref_cancel": "Cancelar", @@ -348,6 +352,7 @@ "console_status_stopped": "Parado", "console_status_stopping": "Parando", "console_status_unknown": "Desconhecido", + "console_stop_confirm_node": "'stop' irá desligar o nó e desconectar a carteira. Digite 'stop' novamente para confirmar.", "console_tab_completion": "Tab para completar", "console_text_colors": "Cores do texto", "console_toggle_accents": "Alternar destaques de cor das linhas", @@ -626,6 +631,7 @@ "lite_birthday_backup": "Aniversário: %llu (faça o backup disto também)", "lite_birthday_hint": "Altura do bloco a partir da qual começar a escanear. Deixe 0 se desconhecida (escaneamento completo mais lento).", "lite_birthday_label": "Data de nascimento", + "lite_console_backend_commands": "Comandos do backend:", "lite_console_help_passthrough": "Qualquer outra entrada é executada como um comando de console da carteira leve.", "lite_copy": "Copiar", "lite_could_not_write": "Não foi possível gravar ", @@ -643,6 +649,7 @@ "lite_net_add_url_hint": "https://seu-servidor-lite", "lite_net_checking": "verificando…", "lite_net_connected": "Conectado", + "lite_net_connecting": "Conectando…", "lite_net_custom": "Personalizado", "lite_net_disconnected": "Não conectado", "lite_net_hidden_section": "Servidores ocultos", diff --git a/res/lang/ru.json b/res/lang/ru.json index 7bf0a7d..5ebb3c1 100644 --- a/res/lang/ru.json +++ b/res/lang/ru.json @@ -271,6 +271,7 @@ "console_app": "Прил.", "console_auto_scroll": "Авто-прокрутка", "console_available_commands": "Доступные команды:", + "console_backend_unavailable": "Нет бэкенда", "console_capturing_output": "Захват вывода daemon...", "console_cat_blockchain": "Блокчейн", "console_cat_control": "Управление", @@ -310,11 +311,14 @@ "console_help_help": " help - Показать эту справку", "console_help_setgenerate": " setgenerate - Управление майнингом", "console_help_stop": " stop - Остановить daemon", + "console_last_error": "Последняя ошибка:", "console_line_count": "%zu строк", "console_matches": "совпадений", "console_new_lines": "%d новых строк", "console_no_daemon": "Нет daemon", + "console_no_output": "(нет вывода)", "console_not_connected": "Ошибка: Не подключено к daemon", + "console_not_connected_lite": "Ошибка: Нет открытого кошелька", "console_quit_note": "Здесь не нужны 'quit'/'exit' — просто закройте окно.", "console_ref_builds": "Формирует", "console_ref_cancel": "Отмена", @@ -348,6 +352,7 @@ "console_status_stopped": "Остановлен", "console_status_stopping": "Остановка", "console_status_unknown": "Неизвестно", + "console_stop_confirm_node": "'stop' остановит узел и отключит кошелёк. Введите 'stop' ещё раз для подтверждения.", "console_tab_completion": "Tab для дополнения", "console_text_colors": "Цвета текста", "console_toggle_accents": "Переключить цветовые акценты строк", @@ -626,6 +631,7 @@ "lite_birthday_backup": "Дата рождения: %llu (сохраните её тоже)", "lite_birthday_hint": "Высота блока, с которой начинать сканирование. Оставьте 0, если неизвестно (медленное полное сканирование).", "lite_birthday_label": "Дата рождения", + "lite_console_backend_commands": "Команды бэкенда:", "lite_console_help_passthrough": "Любой другой ввод выполняется как команда консоли лайт-кошелька.", "lite_copy": "Копировать", "lite_could_not_write": "Не удалось записать ", @@ -643,6 +649,7 @@ "lite_net_add_url_hint": "https://your-lite-server", "lite_net_checking": "проверка…", "lite_net_connected": "Подключено", + "lite_net_connecting": "Подключение…", "lite_net_custom": "Свой", "lite_net_disconnected": "Не подключено", "lite_net_hidden_section": "Скрытые серверы", diff --git a/res/lang/zh.json b/res/lang/zh.json index 3f5d0f2..dccfdb7 100644 --- a/res/lang/zh.json +++ b/res/lang/zh.json @@ -271,6 +271,7 @@ "console_app": "应用", "console_auto_scroll": "自动滚动", "console_available_commands": "可用命令:", + "console_backend_unavailable": "无后端", "console_capturing_output": "正在捕获守护进程输出...", "console_cat_blockchain": "区块链", "console_cat_control": "控制", @@ -310,11 +311,14 @@ "console_help_help": " help - 显示此帮助信息", "console_help_setgenerate": " setgenerate - 控制挖矿", "console_help_stop": " stop - 停止守护进程", + "console_last_error": "上次错误:", "console_line_count": "%zu 行", "console_matches": "个匹配", "console_new_lines": "%d 新行", "console_no_daemon": "无守护进程", + "console_no_output": "(无输出)", "console_not_connected": "错误:未连接到守护进程", + "console_not_connected_lite": "错误:没有打开的钱包", "console_quit_note": "这里不需要 'quit'/'exit'——直接关闭窗口即可。", "console_ref_builds": "生成", "console_ref_cancel": "取消", @@ -348,6 +352,7 @@ "console_status_stopped": "已停止", "console_status_stopping": "停止中", "console_status_unknown": "未知", + "console_stop_confirm_node": "'stop' 将关闭节点并断开钱包连接。再次输入 'stop' 以确认。", "console_tab_completion": "Tab 补全", "console_text_colors": "文本颜色", "console_toggle_accents": "切换行颜色强调", @@ -626,6 +631,7 @@ "lite_birthday_backup": "生日区块:%llu (也请一并备份)", "lite_birthday_hint": "开始扫描的区块高度。如未知请保留 0(完整扫描更慢)。", "lite_birthday_label": "诞生区块", + "lite_console_backend_commands": "后端命令:", "lite_console_help_passthrough": "其他任何输入都将作为轻钱包控制台命令运行。", "lite_copy": "复制", "lite_could_not_write": "无法写入 ", @@ -643,6 +649,7 @@ "lite_net_add_url_hint": "https://your-lite-server", "lite_net_checking": "检查中…", "lite_net_connected": "已连接", + "lite_net_connecting": "连接中…", "lite_net_custom": "自定义", "lite_net_disconnected": "未连接", "lite_net_hidden_section": "隐藏的服务器", diff --git a/src/ui/windows/console_command_executor.cpp b/src/ui/windows/console_command_executor.cpp index ca651c1..4ff4f0e 100644 --- a/src/ui/windows/console_command_executor.cpp +++ b/src/ui/windows/console_command_executor.cpp @@ -258,7 +258,7 @@ bool LiteConsoleExecutor::pollResult(std::string& result, bool& isError) if (!lw) return false; wallet::LiteConsoleResult res; if (!lw->takeConsoleResult(res)) return false; - result = res.response.empty() ? std::string("(no output)") : res.response; + result = res.response.empty() ? std::string(TR("console_no_output")) : res.response; isError = !res.ok; return true; } @@ -286,6 +286,13 @@ void LiteConsoleExecutor::printHelp(const ConsoleAddLineFn& add) add(TR("console_help_clear"), ConsoleChannel::None); add(TR("console_help_help"), ConsoleChannel::None); add(TR("lite_console_help_passthrough"), ConsoleChannel::Info); + // The lite backend's own command verbs (literal command tokens, not RPC methods — mirrors the + // backend's get_commands() registry). Listed for discoverability: the C++ tab intercepts `help` + // before it can reach the backend's own HelpCommand, so its "type help" advice would dead-end. + add(TR("lite_console_backend_commands"), ConsoleChannel::Info); + add(" sync syncstatus balance addresses height info list notes encryptionstatus", ConsoleChannel::None); + add(" send shield new seed import timport export", ConsoleChannel::None); + add(" encrypt decrypt lock unlock rescan save sietch saplingtree coinsupply", ConsoleChannel::None); } std::vector LiteConsoleExecutor::statusLines() const @@ -294,20 +301,20 @@ std::vector LiteConsoleExecutor::statusLines() const wallet::LiteWalletController* lw = app_->liteWallet(); if (lw && lw->walletOpen()) { const SyncInfo& sync = app_->state().sync; - char buf[96]; + char buf[128]; if (sync.syncing && !sync.isSynced()) { double vp = sync.verification_progress; if (vp < 0.0) vp = 0.0; else if (vp > 1.0) vp = 1.0; - std::snprintf(buf, sizeof(buf), "Syncing %.1f%% (block %d / %d)", - vp * 100.0, sync.blocks, sync.headers); + std::snprintf(buf, sizeof(buf), "%s %.1f%% (block %d / %d)", + TR("lite_net_syncing"), vp * 100.0, sync.blocks, sync.headers); } else { - std::snprintf(buf, sizeof(buf), "Synced (block %d)", sync.blocks); + std::snprintf(buf, sizeof(buf), "%s (block %d)", TR("lite_net_synced"), sync.blocks); } out.push_back({std::string(buf), OnSurfaceMedium(), false}); } const std::string& err = app_->liteOpenError(); if (!err.empty() && (!lw || !lw->walletOpen())) - out.push_back({std::string("Last error: ") + err, Error(), false}); + out.push_back({std::string(TR("console_last_error")) + " " + err, Error(), false}); return out; } @@ -315,10 +322,10 @@ ConsoleStatusLine LiteConsoleExecutor::toolbarStatus() const { ConsoleStatusLine s; wallet::LiteWalletController* lw = app_->liteWallet(); - if (!lw) { s.text = "No backend"; s.color = Error(); return s; } - if (lw->walletOpen()) { s.text = "Connected"; s.color = Success(); } - else if (lw->openInProgress()) { s.text = "Connecting"; s.color = Warning(); s.pulse = true; } - else { s.text = "Disconnected"; s.color = Error(); } + if (!lw) { s.text = TR("console_backend_unavailable"); s.color = Error(); return s; } + if (lw->walletOpen()) { s.text = TR("lite_net_connected"); s.color = Success(); } + else if (lw->openInProgress()) { s.text = TR("lite_net_connecting"); s.color = Warning(); s.pulse = true; } + else { s.text = TR("lite_net_disconnected"); s.color = Error(); } return s; } diff --git a/src/ui/windows/console_tab.cpp b/src/ui/windows/console_tab.cpp index f19d70b..b5aa60b 100644 --- a/src/ui/windows/console_tab.cpp +++ b/src/ui/windows/console_tab.cpp @@ -1434,18 +1434,22 @@ bool ConsoleTab::submitConsoleCommand(ConsoleCommandExecutor& exec, const std::s exec.printHelp(add); } else if (first == "quit" || first == "exit") { addLine(TR("console_quit_note"), ConsoleChannel::Info); - } else if (first == "stop") { + } else if (first == "stop" && exec.hasRpcReference()) { + // Full-node 'stop' shuts down the daemon (destructive) — gate behind a confirming second + // 'stop'. Lite has no node: `stop` isn't a backend verb, so it falls through below and the + // backend reports it as unknown — no misleading "shut down the node" warning or dead gate. if (!stop_confirm_pending_) { stop_confirm_pending_ = true; - addLine("'stop' will shut down the node and disconnect the wallet. Type 'stop' again to confirm.", - ConsoleChannel::Warning); + addLine(TR("console_stop_confirm_node"), ConsoleChannel::Warning); } else { stop_confirm_pending_ = false; if (!exec.isReady()) addLine(TR("console_not_connected"), ConsoleChannel::Error); else exec.submit(cmd); } } else if (!exec.isReady()) { - addLine(TR("console_not_connected"), ConsoleChannel::Error); + // Full node connects to a daemon; the lite backend opens a wallet — word the error per variant. + addLine(exec.hasRpcReference() ? TR("console_not_connected") : TR("console_not_connected_lite"), + ConsoleChannel::Error); } else { exec.submit(cmd); } diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index 9881b3e..e580e45 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -1395,6 +1395,12 @@ void I18n::loadBuiltinEnglish() strings_["console_available_commands"] = "Available commands:"; strings_["console_quit_note"] = "'quit'/'exit' aren't needed here — just close the window."; strings_["lite_console_help_passthrough"] = "Any other input runs as a lite-wallet console command."; + strings_["lite_console_backend_commands"] = "Backend commands:"; + strings_["console_no_output"] = "(no output)"; + strings_["console_backend_unavailable"] = "No backend"; + strings_["console_last_error"] = "Last error:"; + strings_["console_not_connected_lite"] = "Error: no wallet open"; + strings_["console_stop_confirm_node"] = "'stop' will shut down the node and disconnect the wallet. Type 'stop' again to confirm."; strings_["console_capturing_output"] = "Capturing daemon output..."; strings_["console_clear"] = "Clear"; strings_["console_clear_console"] = "Clear Console"; @@ -1854,6 +1860,7 @@ void I18n::loadBuiltinEnglish() strings_["lite_net_show_hidden"] = "Show hidden servers"; strings_["lite_net_hidden_section"] = "Hidden servers"; strings_["lite_net_connected"] = "Connected"; + strings_["lite_net_connecting"] = "Connecting"; strings_["lite_net_disconnected"] = "Not connected"; strings_["lite_net_syncing"] = "Syncing"; strings_["lite_net_synced"] = "Synced";