From 45e91a72d2166e1899c53f1f9401a6dc30e89621 Mon Sep 17 00:00:00 2001 From: Junjun Zhang Date: Tue, 20 Oct 2026 03:39:43 +0800 Subject: [PATCH] chore: remove confirmed dead i18n keys (r68 wave) Remove 18 catalog-only keys with zero non-catalog references, verified via full-repo exact-quote grep + dynamic-prefix whitelist, and confirmed absent from all five in-flight deadcode waves (r61/r64/r65/r66/r67): - panel titles x8: conversation, composer, composer_locked, context, metrics, mode_policy, agent_status, startup - panel.provider.api_key (bare key; api_key.missing/.configured and edit/new_vendor variants remain live) - panel.qq x5: bind_channel, entry.bound, qr_code, scan_hint, share_link (r64 owns a disjoint set of 4 other qq keys) - update.restart_failed - command x3: mention_error, usage.export, usage.resume Excluded as live: update.pm_hint.{brew,scoop,winget,snap} (dynamic key, PackageManagerHint domain closed), "interrupted" (dotless key used via m.t in model_pending.go), all tool.* (dynamic "tool.%s"). 360 deletions across 10 language catalogs; build/vet/tui tests green (-tags goolm). Co-Authored-By: ggcode --- internal/tui/i18n_de.go | 36 ------------------------------------ internal/tui/i18n_en.go | 36 ------------------------------------ internal/tui/i18n_es.go | 36 ------------------------------------ internal/tui/i18n_fr.go | 36 ------------------------------------ internal/tui/i18n_ja.go | 36 ------------------------------------ internal/tui/i18n_ko.go | 36 ------------------------------------ internal/tui/i18n_pt.go | 36 ------------------------------------ internal/tui/i18n_ru.go | 36 ------------------------------------ internal/tui/i18n_vi.go | 36 ------------------------------------ internal/tui/i18n_zh.go | 36 ------------------------------------ 10 files changed, 360 deletions(-) diff --git a/internal/tui/i18n_de.go b/internal/tui/i18n_de.go index 37c773c42..abda9694f 100644 --- a/internal/tui/i18n_de.go +++ b/internal/tui/i18n_de.go @@ -23,26 +23,12 @@ func deCatalog(key string) string { return "inaktiv" // --- Panel --- - case "panel.conversation": - return "Unterhaltung" - case "panel.composer": - return "Eingabe" - case "panel.composer_locked": - return "Eingabe gesperrt" case "panel.commands": return "Befehle:" case "panel.files": return "Dateien:" - case "panel.agent_status": - return "Agent-Status" - case "panel.mode_policy": - return "Modus-Richtlinie" case "panel.session_usage": return "Sitzungsnutzung" - case "panel.metrics": - return "Metriken" - case "panel.context": - return "Kontext" case "panel.im": return "IM" case "panel.usage": @@ -85,8 +71,6 @@ func deCatalog(key string) string { return "Tools für %s unverändert (%d Tools)." case "panel.mcp.refreshed": return "%s aktualisiert: %d Tools." - case "panel.startup": - return "Initialisierung" case "panel.approval_required": return "Genehmigung erforderlich" case "panel.bypass_approval": @@ -406,8 +390,6 @@ func deCatalog(key string) string { return "Auth" case "panel.provider.env_var": return "Env-Var" - case "panel.provider.api_key": - return "API-Schlüssel" case "panel.provider.api_key.missing": return "fehlt" case "panel.provider.api_key.configured": @@ -556,10 +538,6 @@ func deCatalog(key string) string { return "/help für verfügbare Befehle eingeben\n\n" case "command.usage.allow": return "Verwendung: /allow \n\n" - case "command.usage.resume": - return "Verwendung: /resume \n\n" - case "command.usage.export": - return "Verwendung: /export \n\n" // --- Init --- case "init.resolve_failed": @@ -598,8 +576,6 @@ func deCatalog(key string) string { return "✓ %s ist jetzt immer erlaubt\n\n" case "command.custom": return "Benutzerdefinierter Befehl /%s:\n" - case "command.mention_error": - return "Erwähnungserweiterungsfehler: %v" // --- Sessions --- case "session.list_failed": @@ -776,8 +752,6 @@ func deCatalog(key string) string { return "Update wird vorbereitet" case "update.failed": return "Update fehlgeschlagen: %v\n\n" - case "update.restart_failed": - return "Update vorbereitet, aber Neustart fehlgeschlagen: %v\n\n" case "update.pm_hint.brew": return "Update installiert. Hinweis: ggcode wurde über Homebrew installiert.\nFühren Sie `brew upgrade ggcode` aus, um Homebrew synchron zu halten.\n\n" case "update.pm_hint.scoop": @@ -978,8 +952,6 @@ func deCatalog(key string) string { return "Keine QQ-Bots konfiguriert." case "panel.qq.entry.available": return "Verfügbar" - case "panel.qq.entry.bound": - return "Gebunden" case "panel.qq.entry.active": return "Aktiv" case "panel.qq.entry.bound_other": @@ -1018,14 +990,6 @@ func deCatalog(key string) string { return "Enter Bot erstellen • Esc abbrechen" case "panel.qq.actions_hint": return "j/k bewegen • d deaktivieren/aktivieren • Enter oder b Bot binden • c Kanal binden • x Kanal lösen • u Bot lösen • i Bot erstellen • e Konfig bearbeiten • q QR zeigen • Esc schließen" - case "panel.qq.bind_channel": - return "Kanal binden" - case "panel.qq.scan_hint": - return "QR-Code scannen, Bot hinzufügen, dann eine Nachricht senden, um das Pairing zu starten." - case "panel.qq.qr_code": - return "QR-Code:" - case "panel.qq.share_link": - return "Freigabe-Link:" case "panel.qq.message.no_bot": return "Kein QQ-Bot verfügbar." case "panel.qq.message.bound_success": diff --git a/internal/tui/i18n_en.go b/internal/tui/i18n_en.go index e7bdecd61..467fe44c0 100644 --- a/internal/tui/i18n_en.go +++ b/internal/tui/i18n_en.go @@ -16,26 +16,12 @@ func enCatalog(key string) string { return "⏰ Cron job triggered" case "activity.idle": return "idle" - case "panel.conversation": - return "Conversation" - case "panel.composer": - return "Composer" - case "panel.composer_locked": - return "Composer locked" case "panel.commands": return "Commands:" case "panel.files": return "Files:" - case "panel.agent_status": - return "Agent status" - case "panel.mode_policy": - return "Mode policy" case "panel.session_usage": return "Session usage" - case "panel.metrics": - return "Metrics" - case "panel.context": - return "Context" case "panel.im": return "IM" case "panel.usage": @@ -80,8 +66,6 @@ func enCatalog(key string) string { return "Tools unchanged for %s (%d tools)." case "panel.mcp.refreshed": return "Refreshed %s: %d tools." - case "panel.startup": - return "Initializing" case "panel.approval_required": return "Approval required" case "panel.bypass_approval": @@ -381,8 +365,6 @@ func enCatalog(key string) string { return "Auth" case "panel.provider.env_var": return "Env var" - case "panel.provider.api_key": - return "API key" case "panel.provider.api_key.missing": return "missing" case "panel.provider.api_key.configured": @@ -573,10 +555,6 @@ func enCatalog(key string) string { return "Type /help for available commands\n\n" case "command.usage.allow": return "Usage: /allow \n\n" - case "command.usage.resume": - return "Usage: /resume \n\n" - case "command.usage.export": - return "Usage: /export \n\n" case "init.resolve_failed": return "Failed to resolve init target: %v\n\n" case "init.generate_failed": @@ -611,8 +589,6 @@ func enCatalog(key string) string { return "✓ %s is now always allowed\n\n" case "command.custom": return "Custom command /%s:\n" - case "command.mention_error": - return "Mention expansion error: %v" case "session.list_failed": return "Error listing sessions: %v\n\n" case "session.untitled": @@ -845,8 +821,6 @@ func enCatalog(key string) string { return "Preparing update" case "update.failed": return "Update failed: %v\n\n" - case "update.restart_failed": - return "Update prepared, but restart failed: %v\n\n" case "update.pm_hint.brew": return "Update installed. Note: ggcode was installed via Homebrew.\nRun `brew upgrade ggcode` to keep Homebrew in sync.\n\n" case "update.pm_hint.scoop": @@ -1105,8 +1079,6 @@ func enCatalog(key string) string { return "No QQ bots configured." case "panel.qq.entry.available": return "Available" - case "panel.qq.entry.bound": - return "Bound" case "panel.qq.entry.active": return "Active" case "panel.qq.entry.bound_other": @@ -1143,14 +1115,6 @@ func enCatalog(key string) string { return "Enter create bot • Esc cancel" case "panel.qq.actions_hint": return "j/k move • d disable/enable • Enter or b bind bot • c bind channel • x unbind channel • u unbind bot • i create bot • e edit config • q show QR • Esc close" - case "panel.qq.bind_channel": - return "Bind Channel" - case "panel.qq.scan_hint": - return "Scan the QR code, add the bot, then send a message to start pairing." - case "panel.qq.qr_code": - return "QR Code:" - case "panel.qq.share_link": - return "Share Link:" case "panel.qq.message.no_bot": return "No QQ bot available." case "panel.qq.message.bound_success": diff --git a/internal/tui/i18n_es.go b/internal/tui/i18n_es.go index e094968ea..d551042c1 100644 --- a/internal/tui/i18n_es.go +++ b/internal/tui/i18n_es.go @@ -18,26 +18,12 @@ func esCatalog(key string) string { return "⏰ tarea cron activada" case "activity.idle": return "inactivo" - case "panel.conversation": - return "Conversación" - case "panel.composer": - return "Editor" - case "panel.composer_locked": - return "Editor bloqueado" case "panel.commands": return "Comandos:" case "panel.files": return "Archivos:" - case "panel.agent_status": - return "Estado del agente" - case "panel.mode_policy": - return "Política de modo" case "panel.session_usage": return "Uso de sesión" - case "panel.metrics": - return "Métricas" - case "panel.context": - return "Contexto" case "panel.im": return "IM" case "panel.usage": @@ -80,8 +66,6 @@ func esCatalog(key string) string { return "Herramientas de %s sin cambios (%d herramientas)." case "panel.mcp.refreshed": return "%s actualizado: %d herramientas." - case "panel.startup": - return "Inicializando" case "panel.approval_required": return "Aprobación requerida" case "panel.bypass_approval": @@ -368,8 +352,6 @@ func esCatalog(key string) string { return "Auth" case "panel.provider.env_var": return "Variable de entorno" - case "panel.provider.api_key": - return "API key" case "panel.provider.api_key.missing": return "faltante" case "panel.provider.api_key.configured": @@ -506,10 +488,6 @@ func esCatalog(key string) string { return "Escriba /help para ver los comandos disponibles\n\n" case "command.usage.allow": return "Uso: /allow \n\n" - case "command.usage.resume": - return "Uso: /resume \n\n" - case "command.usage.export": - return "Uso: /export \n\n" case "init.resolve_failed": return "Error al resolver el objetivo de init: %v\n\n" case "init.generate_failed": @@ -544,8 +522,6 @@ func esCatalog(key string) string { return "✓ %s ahora siempre permitido\n\n" case "command.custom": return "Comando personalizado /%s:\n" - case "command.mention_error": - return "Error de mención: %v" case "session.list_failed": return "Error al listar sesiónes: %v\n\n" case "session.untitled": @@ -704,8 +680,6 @@ func esCatalog(key string) string { return "Preparando actualización" case "update.failed": return "Actualización fallida: %v\n\n" - case "update.restart_failed": - return "Actualización preparada, pero error al reiniciar: %v\n\n" case "update.pm_hint.brew": return "Actualización instalada. Nota: ggcode fue instalado via Homebrew.\nEjecute `brew upgrade ggcode` para mantener Homebrew sincronizado.\n\n" case "update.pm_hint.scoop": @@ -894,8 +868,6 @@ func esCatalog(key string) string { return "Sin bots QQ configurados." case "panel.qq.entry.available": return "Disponible" - case "panel.qq.entry.bound": - return "Vinculado" case "panel.qq.entry.active": return "Activo" case "panel.qq.entry.bound_other": @@ -934,14 +906,6 @@ func esCatalog(key string) string { return "Enter crear bot • Esc cancelar" case "panel.qq.actions_hint": return "j/k mover • d desactivar/activar • Enter o b vincular bot • c vincular canal • x desvincular canal • u desvincular bot • i crear bot • e editar config • q mostrar QR • Esc cerrar" - case "panel.qq.bind_channel": - return "Vincular Canal" - case "panel.qq.scan_hint": - return "Escanee el código QR, agregue el bot, luego envie un mensaje para iniciar la vinculación." - case "panel.qq.qr_code": - return "Código QR:" - case "panel.qq.share_link": - return "Enlace de Compartir:" case "panel.qq.message.no_bot": return "Sin bot QQ disponible." case "panel.qq.message.bound_success": diff --git a/internal/tui/i18n_fr.go b/internal/tui/i18n_fr.go index 9f76eb136..1578845cc 100644 --- a/internal/tui/i18n_fr.go +++ b/internal/tui/i18n_fr.go @@ -18,26 +18,12 @@ func frCatalog(key string) string { return "⏰ Tâche cron déclenchée" case "activity.idle": return "inactif" - case "panel.conversation": - return "Conversation" - case "panel.composer": - return "Éditeur" - case "panel.composer_locked": - return "Éditeur verrouillé" case "panel.commands": return "Commandes:" case "panel.files": return "Fichiers:" - case "panel.agent_status": - return "Statut de l'agent" - case "panel.mode_policy": - return "Politique de mode" case "panel.session_usage": return "Utilisation session" - case "panel.metrics": - return "Métriques" - case "panel.context": - return "Contexte" case "panel.im": return "IM" case "panel.usage": @@ -80,8 +66,6 @@ func frCatalog(key string) string { return "Outils de %s inchangés (%d outils)." case "panel.mcp.refreshed": return "%s actualisé : %d outils." - case "panel.startup": - return "Initialisation" case "panel.approval_required": return "Approbation requise" case "panel.bypass_approval": @@ -368,8 +352,6 @@ func frCatalog(key string) string { return "Auth" case "panel.provider.env_var": return "Variable d'environnement" - case "panel.provider.api_key": - return "API key" case "panel.provider.api_key.missing": return "manquant" case "panel.provider.api_key.configured": @@ -506,10 +488,6 @@ func frCatalog(key string) string { return "Saisissez /help pour voir les commandes disponibles\n\n" case "command.usage.allow": return "Usâge: /allow \n\n" - case "command.usage.resume": - return "Usâge: /resume \n\n" - case "command.usage.export": - return "Usâge: /export \n\n" case "init.resolve_failed": return "Erreur de resolution de la cible d'init: %v\n\n" case "init.generate_failed": @@ -544,8 +522,6 @@ func frCatalog(key string) string { return "✓ %s désormais toujours autorisé\n\n" case "command.custom": return "Commande personnalisée /%s:\n" - case "command.mention_error": - return "Erreur de mention: %v" case "session.list_failed": return "Erreur lors du listâge des sessions: %v\n\n" case "session.untitled": @@ -704,8 +680,6 @@ func frCatalog(key string) string { return "Préparation de la mise à jour" case "update.failed": return "Mise à jour échouée: %v\n\n" - case "update.restart_failed": - return "Mise à jour préparée, mais erreur de redémarrage: %v\n\n" case "update.pm_hint.brew": return "Mise à jour installée. Note : ggcode a été installé via Homebrew.\nExécutez `brew upgrade ggcode` pour garder Homebrew synchronisé.\n\n" case "update.pm_hint.scoop": @@ -894,8 +868,6 @@ func frCatalog(key string) string { return "Aucun bot QQ configuré." case "panel.qq.entry.available": return "Disponible" - case "panel.qq.entry.bound": - return "Lie" case "panel.qq.entry.active": return "Actif" case "panel.qq.entry.bound_other": @@ -934,14 +906,6 @@ func frCatalog(key string) string { return "Enter créer bot • Esc annulér" case "panel.qq.actions_hint": return "j/k déplacer • d désactiver/activer • Enter ou b lier bot • c lier canal • x délier canal • u délier bot • i créer bot • e modifier config • q afficher QR • Esc fermér" - case "panel.qq.bind_channel": - return "Lier Canal" - case "panel.qq.scan_hint": - return "Scannez le code QR, ajoutéz le bot, puis envoyéz un messâge pour démarrer la liaison." - case "panel.qq.qr_code": - return "Code QR:" - case "panel.qq.share_link": - return "Lien de Partâge:" case "panel.qq.message.no_bot": return "Aucun bot QQ disponible." case "panel.qq.message.bound_success": diff --git a/internal/tui/i18n_ja.go b/internal/tui/i18n_ja.go index 3a179458a..f10c530c4 100644 --- a/internal/tui/i18n_ja.go +++ b/internal/tui/i18n_ja.go @@ -17,26 +17,12 @@ func jaCatalog(key string) string { return "実行中" case "activity.idle": return "アイドル" - case "panel.conversation": - return "会話" - case "panel.composer": - return "入力" - case "panel.composer_locked": - return "ロック中" case "panel.commands": return "コマンド" case "panel.files": return "ファイル" - case "panel.agent_status": - return "エージェント状態" - case "panel.mode_policy": - return "モード" case "panel.session_usage": return "セッション使用量" - case "panel.metrics": - return "メトリクス" - case "panel.context": - return "コンテキスト" case "panel.im": return "IM" case "panel.usage": @@ -79,8 +65,6 @@ func jaCatalog(key string) string { return "%s のツールに変更はありません(%d 件)。" case "panel.mcp.refreshed": return "%s を更新しました:%d 件のツール。" - case "panel.startup": - return "起動中..." case "panel.approval_required": return "承認が必要" case "panel.bypass_approval": @@ -373,8 +357,6 @@ func jaCatalog(key string) string { return "認証" case "panel.provider.env_var": return "環境変数" - case "panel.provider.api_key": - return "APIキー" case "panel.provider.api_key.missing": return "未設定" case "panel.provider.api_key.configured": @@ -547,10 +529,6 @@ func jaCatalog(key string) string { return "/helpでコマンド一覧を表示\n\n" case "command.usage.allow": return "使用法: /allow <ツール名>\n\n" - case "command.usage.resume": - return "使用法: /resume <セッションID>\n\n" - case "command.usage.export": - return "使用法: /export <セッションID>\n\n" case "init.resolve_failed": return "初期化ターゲットの解決に失敗しました: %v\n\n" case "init.generate_failed": @@ -587,8 +565,6 @@ func jaCatalog(key string) string { return "✓ %s を永久許可に設定しました\n\n" case "command.custom": return "カスタムコマンド /%s:\n" - case "command.mention_error": - return "メンション展開エラー: %v" case "session.list_failed": return "セッション一覧の取得エラー: %v\n\n" case "session.untitled": @@ -749,8 +725,6 @@ func jaCatalog(key string) string { return "アップデート準備中" case "update.failed": return "更新に失敗しました: %v" - case "update.restart_failed": - return "アップデートの準備が完了しましたが、再起動に失敗しました: %v\n\n" case "update.pm_hint.brew": return "アップデートがインストールされました。注意: ggcode は Homebrew 経由でインストールされています。\nHomebrew を同期するには `brew upgrade ggcode` を実行してください。\n\n" case "update.pm_hint.scoop": @@ -939,8 +913,6 @@ func jaCatalog(key string) string { return "QQ Botが設定されていません。" case "panel.qq.entry.available": return "利用可能" - case "panel.qq.entry.bound": - return "バインド済み" case "panel.qq.entry.active": return "アクティブ" case "panel.qq.entry.bound_other": @@ -979,14 +951,6 @@ func jaCatalog(key string) string { return "Enter でBot作成 • Esc でキャンセル" case "panel.qq.actions_hint": return "j/k 移動 • d 無効/有効 • Enter または b でBotバインド • c でチャネルバインド • x でチャネルバインド解除 • u でBotバインド解除 • i でBot作成 • e 設定編集 • q QR表示 • Esc で閉じる" - case "panel.qq.bind_channel": - return "チャネルをバインド" - case "panel.qq.scan_hint": - return "QRコードをスキャンし、Botを追加して、メッセージを送信してペアリングを開始してください。" - case "panel.qq.qr_code": - return "QRコード:" - case "panel.qq.share_link": - return "共有リンク:" case "panel.qq.message.no_bot": return "利用可能なQQ Botがありません。" case "panel.qq.message.bound_success": diff --git a/internal/tui/i18n_ko.go b/internal/tui/i18n_ko.go index 7213de1ba..8b7628e74 100644 --- a/internal/tui/i18n_ko.go +++ b/internal/tui/i18n_ko.go @@ -22,26 +22,12 @@ func koCatalog(key string) string { return "실행 중" case "activity.idle": return "대기 중" - case "panel.conversation": - return "대화" - case "panel.composer": - return "입력" - case "panel.composer_locked": - return "잠김" case "panel.commands": return "명령" case "panel.files": return "파일" - case "panel.agent_status": - return "에이전트 상태" - case "panel.mode_policy": - return "모드" case "panel.session_usage": return "세션 사용량" - case "panel.metrics": - return "메트릭" - case "panel.context": - return "컨텍스트" case "panel.im": return "IM" case "panel.usage": @@ -84,8 +70,6 @@ func koCatalog(key string) string { return "%s 의 도구에 변화가 없습니다 (%d개)." case "panel.mcp.refreshed": return "%s 새로고침 완료: 도구 %d개." - case "panel.startup": - return "시작 중..." case "panel.approval_required": return "승인 필요" case "panel.bypass_approval": @@ -372,8 +356,6 @@ func koCatalog(key string) string { return "인증" case "panel.provider.env_var": return "환경 변수" - case "panel.provider.api_key": - return "API 키" case "panel.provider.api_key.missing": return "누락" case "panel.provider.api_key.configured": @@ -510,10 +492,6 @@ func koCatalog(key string) string { return "사용 가능한 명령은 /help를 입력하세요\n\n" case "command.usage.allow": return "사용법: /allow <도구-이름>\n\n" - case "command.usage.resume": - return "사용법: /resume <세션-id>\n\n" - case "command.usage.export": - return "사용법: /export <세션-id>\n\n" case "init.resolve_failed": return "초기화 대상 확인 실패: %v\n\n" case "init.generate_failed": @@ -548,8 +526,6 @@ func koCatalog(key string) string { return "✓ %s이(가) 항상 허용되었습니다\n\n" case "command.custom": return "사용자 정의 명령 /%s:\n" - case "command.mention_error": - return "멘션 확장 오류: %v" case "session.list_failed": return "세션 목록 조회 오류: %v\n\n" case "session.untitled": @@ -708,8 +684,6 @@ func koCatalog(key string) string { return "업데이트 준비 중" case "update.failed": return "업데이트 실패: %v\n\n" - case "update.restart_failed": - return "업데이트가 준비되었지만 재시작에 실패했습니다: %v\n\n" case "update.pm_hint.brew": return "업데이트 설치 완료. 참고: Homebrew로 설치되었습니다.\nHomebrew 동기화를 위해 `brew upgrade ggcode`를 실행하세요.\n\n" case "update.pm_hint.scoop": @@ -900,8 +874,6 @@ func koCatalog(key string) string { return "구성된 QQ 봇이 없습니다." case "panel.qq.entry.available": return "사용 가능" - case "panel.qq.entry.bound": - return "바인딩됨" case "panel.qq.entry.active": return "활성" case "panel.qq.entry.bound_other": @@ -940,14 +912,6 @@ func koCatalog(key string) string { return "Enter 봇 생성 • Esc 취소" case "panel.qq.actions_hint": return "j/k 이동 • d 비활성/활성 • Enter 또는 b 봇 바인딩 • c 채널 바인딩 • x 채널 언바인딩 • u 봇 언바인딩 • i 봇 생성 • e 구성 편집 • q QR 표시 • Esc 닫기" - case "panel.qq.bind_channel": - return "채널 바인딩" - case "panel.qq.scan_hint": - return "QR 코드를 스캔하고 봇을 추가한 후 메시지를 보내 페어링을 시작하세요." - case "panel.qq.qr_code": - return "QR 코드:" - case "panel.qq.share_link": - return "공유 링크:" case "panel.qq.message.no_bot": return "사용 가능한 QQ 봇이 없습니다." case "panel.qq.message.bound_success": diff --git a/internal/tui/i18n_pt.go b/internal/tui/i18n_pt.go index a2aa8809e..33059dd97 100644 --- a/internal/tui/i18n_pt.go +++ b/internal/tui/i18n_pt.go @@ -831,8 +831,6 @@ func ptCatalog(key string) string { return "Atualização instalada. Nota: ggcode foi instalado via winget.\nExecute `winget upgrade ggcode` para manter o winget sincronizado.\n\n" case "update.preparing": return "Preparando atualização" - case "update.restart_failed": - return "Atualização preparada, mas reinício falhou: %v\n\n" case "update.sidebar_hint": return "Nova versão disponível. Execute /update." case "update.unavailable": @@ -855,8 +853,6 @@ func ptCatalog(key string) string { return "Nenhum envio anterior para editar." case "command.edit_ready": return "Último envio carregado — edite e pressione Enter para enviar." - case "command.mention_error": - return "Erro de expansão de menção: %v" case "command.model_failed": return "Falha ao trocar modelo: %v\n\n" case "command.provider_current": @@ -881,10 +877,6 @@ func ptCatalog(key string) string { return "Skill %s só pode ser invocada pelo agente." case "command.usage.allow": return "Uso: /allow \n\n" - case "command.usage.export": - return "Uso: /export \n\n" - case "command.usage.resume": - return "Uso: /resume \n\n" // ── Files ───────────────────────────────────────────────────── case "files.disabled": @@ -901,22 +893,12 @@ func ptCatalog(key string) string { return "Falha ao resolver destino de inicialização: %v\n\n" // ── Panel ───────────────────────────────────────────────────── - case "panel.agent_status": - return "Status do agente" case "panel.approval_required": return "Aprovação necessária" case "panel.bypass_approval": return "Aprovação modo bypass" case "panel.commands": return "Comandos:" - case "panel.composer": - return "Compositor" - case "panel.composer_locked": - return "Compositor bloqueado" - case "panel.context": - return "Contexto" - case "panel.conversation": - return "Conversa" case "panel.files": return "Arquivos:" case "panel.im": @@ -949,10 +931,6 @@ func ptCatalog(key string) string { return "Falha ao reconectar %s: %s" case "panel.mcp.uninstalling": return "Desinstalando %s..." - case "panel.metrics": - return "Métricas" - case "panel.mode_policy": - return "Política de modo" case "panel.model.context_applied": return "Aplicado context_window=%d, max_tokens=%d (salvo)" case "panel.model.context_cleared": @@ -1011,8 +989,6 @@ func ptCatalog(key string) string { return "mostrando %d/%d modelos" case "panel.provider.active_draft": return "Rascunho ativo" - case "panel.provider.api_key": - return "Chave de API" case "panel.provider.api_key.configured": return "configurada" case "panel.provider.api_key.missing": @@ -1107,8 +1083,6 @@ func ptCatalog(key string) string { return "Adaptador: %s" case "panel.qq.available": return "Disponíveis: %d" - case "panel.qq.bind_channel": - return "Vincular Canal" case "panel.qq.bot_input": return "Bot QQ: %s" case "panel.qq.bot_list": @@ -1145,8 +1119,6 @@ func ptCatalog(key string) string { return "Ativo" case "panel.qq.entry.available": return "Disponível" - case "panel.qq.entry.bound": - return "Vinculado" case "panel.qq.entry.bound_other": return "Vinculado: %s" case "panel.qq.entry.muted": @@ -1189,18 +1161,12 @@ func ptCatalog(key string) string { return "(nenhum)" case "panel.qq.occupied_by": return "Ocupado por: %s" - case "panel.qq.qr_code": - return "QR Code:" case "panel.qq.runtime.available": return "disponível" case "panel.qq.runtime.disabled": return "desativado (defina im.enabled: true e reinicie o ggcode)" case "panel.qq.runtime.not_started": return "não iniciado (reinicie o ggcode para inicializar o runtime IM)" - case "panel.qq.scan_hint": - return "Escaneie o QR code, adicione o bot, depois envie uma mensagem para iniciar o pareamento." - case "panel.qq.share_link": - return "Link de Compartilhamento:" case "panel.qq.status": return "Status: %s" case "panel.qq.status.not_started": @@ -1231,8 +1197,6 @@ func ptCatalog(key string) string { return "Ferramentas de %s inalteradas (%d ferramentas)." case "panel.mcp.refreshed": return "%s atualizado: %d ferramentas." - case "panel.startup": - return "Inicializando" case "panel.update": return "Atualizar" case "help.text": diff --git a/internal/tui/i18n_ru.go b/internal/tui/i18n_ru.go index d844b5405..f0e27f351 100644 --- a/internal/tui/i18n_ru.go +++ b/internal/tui/i18n_ru.go @@ -23,26 +23,12 @@ func ruCatalog(key string) string { return "ожидание" // --- Panel --- - case "panel.conversation": - return "Беседа" - case "panel.composer": - return "Ввод" - case "panel.composer_locked": - return "Ввод заблокирован" case "panel.commands": return "Команды:" case "panel.files": return "Файлы:" - case "panel.agent_status": - return "Статус агента" - case "panel.mode_policy": - return "Политика режима" case "panel.session_usage": return "Использование сессии" - case "panel.metrics": - return "Метрики" - case "panel.context": - return "Контекст" case "panel.im": return "IM" case "panel.usage": @@ -85,8 +71,6 @@ func ruCatalog(key string) string { return "Инструменты %s не изменились (%d шт.)." case "panel.mcp.refreshed": return "%s обновлён: инструментов: %d." - case "panel.startup": - return "Инициализация" case "panel.approval_required": return "Требуется подтверждение" case "panel.bypass_approval": @@ -406,8 +390,6 @@ func ruCatalog(key string) string { return "Аутентификация" case "panel.provider.env_var": return "Переменная окружения" - case "panel.provider.api_key": - return "API-ключ" case "panel.provider.api_key.missing": return "отсутствует" case "panel.provider.api_key.configured": @@ -548,10 +530,6 @@ func ruCatalog(key string) string { return "Введите /help для списка доступных команд\n\n" case "command.usage.allow": return "Использование: /allow <имя_инструмента>\n\n" - case "command.usage.resume": - return "Использование: /resume \n\n" - case "command.usage.export": - return "Использование: /export \n\n" // --- Init --- case "init.resolve_failed": @@ -590,8 +568,6 @@ func ruCatalog(key string) string { return "✓ %s теперь всегда разрешён\n\n" case "command.custom": return "Пользовательская команда /%s:\n" - case "command.mention_error": - return "Ошибка расширения упоминания: %v" // --- Sessions --- case "session.list_failed": @@ -768,8 +744,6 @@ func ruCatalog(key string) string { return "Подготовка обновления" case "update.failed": return "Обновление не удалось: %v\n\n" - case "update.restart_failed": - return "Обновление подготовлено, но перезапуск не удался: %v\n\n" case "update.pm_hint.brew": return "Обновление установлено. Примечание: ggcode был установлен через Homebrew.\nВыполните `brew upgrade ggcode`, чтобы синхронизировать Homebrew.\n\n" case "update.pm_hint.scoop": @@ -970,8 +944,6 @@ func ruCatalog(key string) string { return "QQ-боты не настроены." case "panel.qq.entry.available": return "Доступен" - case "panel.qq.entry.bound": - return "Привязан" case "panel.qq.entry.active": return "Активен" case "panel.qq.entry.bound_other": @@ -1010,14 +982,6 @@ func ruCatalog(key string) string { return "Enter создать бота • Esc отмена" case "panel.qq.actions_hint": return "j/k перемещение • d откл./вкл. • Enter или b привязать бота • c привязать канал • x отвязать канал • u отвязать бота • i создать бота • e правка конфигурации • q показать QR • Esc закрыть" - case "panel.qq.bind_channel": - return "Привязать канал" - case "panel.qq.scan_hint": - return "Отсканируйте QR-код, добавьте бота, затем отправьте сообщение для начала сопряжения." - case "panel.qq.qr_code": - return "QR-код:" - case "panel.qq.share_link": - return "Ссылка:" case "panel.qq.message.no_bot": return "Нет доступных QQ-ботов." case "panel.qq.message.bound_success": diff --git a/internal/tui/i18n_vi.go b/internal/tui/i18n_vi.go index d114db334..479967c7d 100644 --- a/internal/tui/i18n_vi.go +++ b/internal/tui/i18n_vi.go @@ -18,26 +18,12 @@ func viCatalog(key string) string { return "Cron job đã kích hoạt" case "activity.idle": return "chờ" - case "panel.conversation": - return "Hội thoại" - case "panel.composer": - return "Soạn thảo" - case "panel.composer_locked": - return "Soạn thảo đã khóa" case "panel.commands": return "Lệnh:" case "panel.files": return "Tệp:" - case "panel.agent_status": - return "Trạng thái agent" - case "panel.mode_policy": - return "Chính sách chế độ" case "panel.session_usage": return "Sử dụng phiên" - case "panel.metrics": - return "Chỉ số" - case "panel.context": - return "Ngữ cảnh" case "panel.im": return "IM" case "panel.usage": @@ -80,8 +66,6 @@ func viCatalog(key string) string { return "Công cụ của %s không thay đổi (%d công cụ)." case "panel.mcp.refreshed": return "Đã làm mới %s: %d công cụ." - case "panel.startup": - return "Đang khởi tạo" case "panel.approval_required": return "Cần phê duyệt" case "panel.bypass_approval": @@ -368,8 +352,6 @@ func viCatalog(key string) string { return "Xác thực" case "panel.provider.env_var": return "Biến môi trường" - case "panel.provider.api_key": - return "API key" case "panel.provider.api_key.missing": return "thiếu" case "panel.provider.api_key.configured": @@ -506,10 +488,6 @@ func viCatalog(key string) string { return "Gõ /help để xem lệnh có sẵn\n\n" case "command.usage.allow": return "Cách dùng: /allow \n\n" - case "command.usage.resume": - return "Cách dùng: /resume \n\n" - case "command.usage.export": - return "Cách dùng: /export \n\n" case "init.resolve_failed": return "Không thể giải quyết mục tiêu init: %v\n\n" case "init.generate_failed": @@ -544,8 +522,6 @@ func viCatalog(key string) string { return "✓ %s hiện được luôn cho phép\n\n" case "command.custom": return "Lệnh tùy chỉnh /%s:\n" - case "command.mention_error": - return "Lỗi mở rộng mention: %v" case "session.list_failed": return "Lỗi liệt kê phiên: %v\n\n" case "session.untitled": @@ -704,8 +680,6 @@ func viCatalog(key string) string { return "Đang chuẩn bị cập nhật" case "update.failed": return "Cập nhật thất bại: %v\n\n" - case "update.restart_failed": - return "Cập nhật đã chuẩn bị, nhưng khởi động lại thất bại: %v\n\n" case "update.pm_hint.brew": return "Đã cài đặt cập nhật. Lưu ý: ggcode được cài qua Homebrew.\nChạy `brew upgrade ggcode` để đồng bộ Homebrew.\n\n" case "update.pm_hint.scoop": @@ -894,8 +868,6 @@ func viCatalog(key string) string { return "Chưa cấu hình QQ bot nào." case "panel.qq.entry.available": return "Khả dụng" - case "panel.qq.entry.bound": - return "Đã liên kết" case "panel.qq.entry.active": return "Hoạt động" case "panel.qq.entry.bound_other": @@ -934,14 +906,6 @@ func viCatalog(key string) string { return "Enter tạo bot • Esc hủy" case "panel.qq.actions_hint": return "j/k di chuyển • d tắt/bật • Enter hoặc b liên kết bot • c liên kết kênh • x hủy liên kết kênh • u hủy liên kết bot • i tạo bot • e sửa cấu hình • q hiện QR • Esc đóng" - case "panel.qq.bind_channel": - return "Liên kết kênh" - case "panel.qq.scan_hint": - return "Quét mã QR, thêm bot, sau đó gửi tin nhắn để bắt đầu ghép nối." - case "panel.qq.qr_code": - return "Mã QR:" - case "panel.qq.share_link": - return "Liên kết chia sẻ:" case "panel.qq.message.no_bot": return "Không có QQ bot khả dụng." case "panel.qq.message.bound_success": diff --git a/internal/tui/i18n_zh.go b/internal/tui/i18n_zh.go index 82a0544f1..01eb9bb62 100644 --- a/internal/tui/i18n_zh.go +++ b/internal/tui/i18n_zh.go @@ -14,26 +14,12 @@ func zhCatalog(key string) string { return "%d 个运行中" case "activity.idle": return "空闲" - case "panel.conversation": - return "对话" - case "panel.composer": - return "输入" - case "panel.composer_locked": - return "输入已锁定" case "panel.commands": return "命令:" case "panel.files": return "文件:" - case "panel.agent_status": - return "Agent 状态" - case "panel.mode_policy": - return "模式说明" case "panel.session_usage": return "会话用量" - case "panel.metrics": - return "指标" - case "panel.context": - return "上下文" case "panel.usage": return "用量" case "usage.refreshing": @@ -76,8 +62,6 @@ func zhCatalog(key string) string { return "%s 的工具无变化(%d 个)。" case "panel.mcp.refreshed": return "已刷新 %s:%d 个工具。" - case "panel.startup": - return "正在初始化" case "panel.approval_required": return "需要确认" case "panel.bypass_approval": @@ -389,8 +373,6 @@ func zhCatalog(key string) string { return "认证" case "panel.provider.env_var": return "环境变量" - case "panel.provider.api_key": - return "API Key" case "panel.provider.api_key.missing": return "未配置" case "panel.provider.api_key.configured": @@ -584,10 +566,6 @@ func zhCatalog(key string) string { return "输入 /help 查看可用命令\n\n" case "command.usage.allow": return "用法:/allow \n\n" - case "command.usage.resume": - return "用法:/resume \n\n" - case "command.usage.export": - return "用法:/export \n\n" case "init.resolve_failed": return "解析初始化目标失败:%v\n\n" case "init.generate_failed": @@ -622,8 +600,6 @@ func zhCatalog(key string) string { return "✓ %s 已设为永久允许\n\n" case "command.custom": return "自定义命令 /%s:\n" - case "command.mention_error": - return "展开 @ 引用失败:%v" case "session.list_failed": return "列出会话失败:%v\n\n" case "session.untitled": @@ -856,8 +832,6 @@ func zhCatalog(key string) string { return "正在准备升级" case "update.failed": return "升级失败:%v\n\n" - case "update.restart_failed": - return "升级已准备完成,但重启失败:%v\n\n" case "update.pm_hint.brew": return "更新已安装。注意:ggcode 是通过 Homebrew 安装的。\n建议运行 `brew upgrade ggcode` 以保持 Homebrew 同步。\n\n" case "update.pm_hint.scoop": @@ -1118,8 +1092,6 @@ func zhCatalog(key string) string { return "没有配置 QQ 机器人。" case "panel.qq.entry.available": return "可用" - case "panel.qq.entry.bound": - return "已绑定" case "panel.qq.entry.active": return "活跃" case "panel.qq.entry.bound_other": @@ -1156,14 +1128,6 @@ func zhCatalog(key string) string { return "Enter 创建机器人 • Esc 取消" case "panel.qq.actions_hint": return "j/k 移动 • d 禁用/启用 • Enter 或 b 绑定机器人 • c 绑定渠道 • x 解绑渠道 • u 解绑机器人 • i 创建机器人 • e 编辑配置 • q 显示二维码 • Esc 关闭" - case "panel.qq.bind_channel": - return "绑定渠道" - case "panel.qq.scan_hint": - return "扫描二维码添加机器人,然后发送一条消息开始配对。" - case "panel.qq.qr_code": - return "二维码:" - case "panel.qq.share_link": - return "分享链接:" case "panel.qq.message.no_bot": return "当前没有可用的 QQ 机器人。" case "panel.qq.message.bound_success":