import type { Messages } from '../types'; export const zhTWAiMessages: Messages = { // AI Settings 'ai.agentSettings': 'Agent 設定', 'ai.chat.preparing': '準備中…', 'ai.chat.compactingContext': '正在壓縮較早的上下文…', 'ai.chat.compactingStep': '正在為下一步整理上下文…', 'ai.chat.compactionRetry': '請求過大,正在壓縮上下文並重試…', 'ai.chat.compactionBanner': '上下文已壓縮:{before}K → {after}K tokens', 'ai.chat.contextUsage': '上下文使用:{used} / {max} tokens', 'ai.chat.activity.title': 'Agent 活動', 'ai.chat.activity.plan': '計畫', 'ai.chat.activity.webSearch': '網頁搜尋', 'ai.chat.activity.fileChanges': '檔案變更', 'ai.chat.activity.status.running': '進行中', 'ai.chat.activity.status.completed': '已完成', 'ai.chat.activity.status.failed': '失敗', 'ai.chat.activity.file.add': '新增', 'ai.chat.activity.file.update': '修改', 'ai.chat.activity.file.delete': '刪除', 'ai.chat.activity.usage': 'Token', 'ai.chat.activity.usage.input': '輸入', 'ai.chat.activity.usage.output': '輸出', 'ai.chat.activity.usage.cached': '快取', 'ai.chat.activity.usage.reasoning': '推理', 'ai.title': 'AI', 'ai.description': '設定 AI 供應商、Agent 和安全設定', 'ai.providers': '供應商', 'ai.agents': 'Agent', 'ai.providers.empty': '尚未設定供應商。新增一個供應商以開始使用。', 'ai.providers.add': '新增供應商', 'ai.providers.active': '使用中', 'ai.providers.apiKeyConfigured': 'API Key 已設定', 'ai.providers.noApiKey': '未設定 API Key', 'ai.providers.configure': '設定', 'ai.providers.remove': '移除', 'ai.providers.name': '顯示名稱', 'ai.providers.name.placeholder': '例如 我的供應商', 'ai.providers.style': '協定風格', 'ai.providers.style.anthropic': 'Anthropic 相容', 'ai.providers.style.openai': 'OpenAI 相容', 'ai.providers.style.google': 'Google 相容', 'ai.providers.style.inherited': '預設', 'ai.providers.style.help': '決定請求使用哪種 API 格式。當第三方端點的協定與其供應商型別不一致時,可手動覆蓋。', 'ai.providers.openaiApi': 'OpenAI 請求格式', 'ai.providers.openaiApi.chat': 'Chat Completions', 'ai.providers.openaiApi.responses': 'Responses', 'ai.providers.openaiApi.help': '預設 Chat Completions,相容大多數 OpenAI 相容介面。部分中繼站在 Responses(/v1/responses)上快取命中率較高。', 'ai.providers.icon.change': '修改圖示', 'ai.providers.icon.upload': '上傳圖片', 'ai.providers.icon.reset': '恢復預設', 'ai.providers.icon.close': '收起', 'ai.providers.icon.uploadedNote': '自訂圖示(64×64 WebP)', 'ai.providers.icon.errorType': '請選擇圖片檔案。', 'ai.providers.apiKey': 'API Key', 'ai.providers.apiKey.placeholder': '輸入 API Key', 'ai.providers.apiKey.decrypting': '解密中...', 'ai.providers.baseUrl': 'Base URL', 'ai.providers.baseUrl.anthropicHelp': 'Anthropic 相容:可填不帶或帶 /v1 的主機(例如 https://gateway.example 或 https://gateway.example/v1)。偵測與聊天都會請求 /v1/models、/v1/messages。', 'ai.providers.baseUrl.ollamaHelp': '本機 Ollama:http://localhost:11434/v1(不需 API Key)。Ollama Cloud:https://ollama.com/v1,並填寫 Cloud API Key。', 'ai.providers.skipTLSVerify': '跳過 TLS 憑證驗證(用於自我簽署憑證)', 'ai.providers.defaultModel': '預設模型', 'ai.providers.defaultModel.placeholder': '例如 gpt-4o, claude-sonnet-4-20250514', 'ai.providers.contextWindow': '上下文視窗', 'ai.providers.contextWindow.placeholder': '例如 128000', 'ai.providers.contextWindow.help': '留空時優先使用模型列表傳回的值;如果沒有,NetMesh 會使用安全預設值。', 'ai.providers.contextWindow.error': '請輸入正整數,或留空。', 'ai.providers.refreshModels': '重新整理模型列表', 'ai.providers.test': '檢測', 'ai.providers.test.testing': '檢測中…', 'ai.providers.test.ok': '連線正常({latency} ms)', 'ai.providers.test.warn': '已連通,但回應不完整({latency} ms)', 'ai.providers.test.warnSlow': '已連通,但較慢({latency} ms)', 'ai.providers.test.error': '檢測失敗({detail})', 'ai.providers.test.missingBaseUrl': '請先填寫 Base URL', 'ai.providers.test.missingApiKey': '請先填寫 API Key', 'ai.providers.test.unavailable': '目前環境無法進行連線檢測', 'ai.providers.searchModel': '搜尋或輸入模型 ID...', 'ai.providers.filterModels': '篩選模型...', 'ai.providers.loadingModels': '載入模型中...', 'ai.providers.noMatchingModels': '沒有相符的模型', 'ai.providers.clickToLoadModels': '點選載入模型', 'ai.providers.showingModels': '顯示前 100 個,共 {count} 個模型。輸入以篩選。', 'ai.providers.advancedParams': '高階引數', 'ai.providers.advancedParams.hint': '留空則使用供應商預設值。', 'ai.providers.advancedParams.maxTokens.placeholder': '例如 4096', 'ai.providers.advancedParams.default': '供應商預設', // AI Codex 'ai.codex': 'Codex', 'ai.codex.title': 'Codex CLI', 'ai.codex.description': '介接 OpenAI Codex。可以在這裡登入 ChatGPT,也可以在設定裡啟用相容 OpenAI 的 API Key 和自訂介面位址。', 'ai.codex.appServer.title': '使用 Codex App Server', 'ai.codex.appServer.experimental': '實驗性', 'ai.codex.appServer.description': '使用持久化 Codex 協定,提供原生核准、沙箱控制、動態模型和對話中提問。預設仍使用 SDK。', 'ai.codex.appServer.checking': '正在檢查 App Server 支援…', 'ai.codex.appServer.available': '目前 Codex CLI 支援 App Server。', 'ai.codex.appServer.modelCatalogWarning': 'Codex 動態模型目錄暫時無法使用,目前將使用內建模型清單。', 'ai.codex.appServer.approval.allowSession': '本工作階段允許', 'ai.codex.appServer.userInput.title': 'Codex 需要你的輸入', 'ai.codex.appServer.userInput.description': '回答以下問題以繼續目前任務。', 'ai.codex.appServer.userInput.other': '輸入其他答案', 'ai.codex.appServer.userInput.autoResolve': '若未及時回答,Codex 將自動繼續。', 'ai.codex.appServer.userInput.skip': '略過', 'ai.codex.appServer.userInput.submit': '繼續', 'ai.codex.steer.addInstruction': '補充指令', 'ai.codex.steer.sending': '正在補充指令…', 'ai.codex.steer.placeholder': '在 Codex 工作時補充指令…', 'ai.codex.steer.notSteerableReview': '目前 Codex 審查任務無法接收補充指令,草稿已保留。', 'ai.codex.steer.notSteerableCompact': '目前 Codex 壓縮任務無法接收補充指令,草稿已保留。', 'ai.codex.steer.busy': '已有一則補充指令正在傳送給 Codex。', 'ai.codex.steer.inactive': '目前 Codex 任務已經結束,草稿已保留。', 'ai.codex.steer.unsupported': '執行中補充指令僅支援 Codex App Server。', 'ai.codex.steer.failed': 'Codex 無法接收補充指令,草稿已保留。', 'ai.codex.detecting': '偵測中...', 'ai.codex.notFound': '未找到', 'ai.codex.awaitingLogin': '等待登入', 'ai.codex.connectedChatGPT': '已透過 ChatGPT 連線', 'ai.codex.connectedApiKey': '已透過 API Key 連線', 'ai.codex.connectedCustomConfig': '使用 ~/.codex/config.toml 自訂 provider', 'ai.codex.customConfigIncomplete': '偵測到自訂設定(缺少環境變數)', 'ai.codex.customConfigHint': '使用 ~/.codex/config.toml 中設定的自訂 provider "{provider}",無需 ChatGPT 登入。', 'ai.codex.customConfigMissingEnvKey': '警告:環境變數 {envKey} 未在目前 shell 中設定。請 export 它(或從包含該變數的 shell 啟動 NetMesh),否則 Codex 無法完成認證。', 'ai.codex.notConnected': '未連線', 'ai.codex.statusUnknown': '狀態未知', 'ai.codex.path': '路徑:', 'ai.codex.notFoundHint': '在 PATH 中未找到 codex。請安裝或在下方指定執行檔路徑。', 'ai.codex.customPathPlaceholder': '例如 /usr/local/bin/codex', 'ai.codex.check': '檢查', 'ai.codex.resetPath': '重設', 'ai.codex.openLogin': '開啟登入', 'ai.codex.logout': '登出', 'ai.codex.connectChatGPT': '連線 ChatGPT', 'ai.codex.refreshStatus': '重新整理狀態', // AI Claude Code 'ai.claude.title': 'Claude Code', 'ai.claude.description': 'Anthropic 的智慧程式設計助手。需要系統中已安裝 Claude Code CLI。', 'ai.claude.detecting': '偵測中...', 'ai.claude.detected': '已偵測到', 'ai.claude.notFound': '未找到', 'ai.claude.path': '路徑:', 'ai.claude.notFoundHint': '在 PATH 中未找到 claude。請安裝或在下方指定執行檔路徑。', 'ai.claude.customPathPlaceholder': '例如 /usr/local/bin/claude', 'ai.claude.configSection': '認證與設定(可選)', 'ai.claude.configDir': '設定目錄', 'ai.claude.configDir.placeholder': '~/.claude(留空用預設)', 'ai.claude.configDir.hint': '設定 CLAUDE_CONFIG_DIR —— 指向你已執行 `claude` 登入的目錄(含 settings.json 和憑證)。', 'ai.claude.settings': 'Settings 檔案', 'ai.claude.settings.placeholder': '~/team-settings.json(路徑,或內聯 {"model":"..."})', 'ai.claude.settings.hint': '可選。settings.json 路徑或內聯 JSON,作為 SDK 的 `settings` 傳入。與上面的「設定目錄」互補且獨立(疊加合併,不是替換)。', 'ai.claude.envVars': '環境變數', 'ai.claude.envVars.placeholder': 'ANTHROPIC_BASE_URL=https://...\nANTHROPIC_MODEL=...', 'ai.claude.envVars.hint': '每行一個 KEY=VALUE,傳給 Claude agent。明文存在本機——API key/憑證建議用上面的「設定目錄」(claude 登入),不要放這裡。', 'ai.claude.check': '檢查', 'ai.claude.resetPath': '重設', // AI GitHub Copilot CLI 'ai.copilot.title': 'GitHub Copilot CLI', 'ai.copilot.description': '介接 GitHub Copilot CLI。偵測到後即可作為外部程式設計 Agent 使用。', 'ai.copilot.detecting': '偵測中...', 'ai.copilot.detected': '已偵測到', 'ai.copilot.notFound': '未找到', 'ai.copilot.path': '路徑:', 'ai.copilot.notFoundHint': '在 PATH 中未找到 copilot。請安裝或在下方指定執行檔路徑。', 'ai.copilot.customPathPlaceholder': '例如 /usr/local/bin/copilot', 'ai.copilot.check': '檢查', 'ai.copilot.resetPath': '重設', // AI Cursor SDK 'ai.cursor.title': 'Cursor', 'ai.cursor.description': '使用 Cursor SDK 或本機 Agent CLI 登入。', 'ai.cursor.detecting': '偵測中...', 'ai.cursor.detected': '可用', 'ai.cursor.notFound': '不可用', 'ai.cursor.path': '執行環境:', 'ai.cursor.notFoundHint': '填寫 API Key,或切換到 CLI 登入模式。', 'ai.cursor.notInstalledHint': '未偵測到 Cursor SDK / Agent CLI。', 'ai.cursor.installStatus': 'Cursor 執行環境', 'ai.cursor.installed': '已偵測到', 'ai.cursor.notInstalled': '未偵測到', 'ai.cursor.modeCli': 'CLI 登入', 'ai.cursor.modeApiKey': 'API Key', 'ai.cursor.modeCliHint': '使用本機 `cursor-agent login` 工作階段與訂閱 Auto 額度。已儲存的 API Key 會保留,但此模式不會使用。', 'ai.cursor.modeApiKeyHint': '走 Cursor 計量 API。此模式下不會使用 CLI 登入。', 'ai.cursor.cliLoginStatus': 'CLI 登入', 'ai.cursor.cliLoginOk': '已登入', 'ai.cursor.cliLoginAs': '已登入為 {{email}}', 'ai.cursor.cliLoginMissing': '未登入', 'ai.cursor.cliLoginHint': '在終端機執行 `cursor-agent login`,然後點「檢查」。', 'ai.cursor.apiKeyStatus': 'API Key', 'ai.cursor.apiKeyConfigured': '已填寫', 'ai.cursor.apiKeyMissing': '未填寫', 'ai.cursor.apiKeyFromEnv': '來自環境變數', 'ai.cursor.apiKey': 'API Key', 'ai.cursor.apiKeyPlaceholder': '輸入 Cursor API Key', 'ai.cursor.apiKeyPlaceholder.env': '已使用 CURSOR_API_KEY;填寫後會覆蓋', 'ai.cursor.apiKeyEnvHint': '已偵測到本機 CURSOR_API_KEY。留空即可繼續使用,填寫儲存後會覆蓋它。', 'ai.cursor.apiKeyOverrideHint': '目前優先使用這裡儲存的 Key;清空儲存後會回到 CURSOR_API_KEY。', 'ai.cursor.saveApiKey': '儲存', 'ai.cursor.saved': '已儲存', 'ai.cursor.showApiKey': '顯示 API Key', 'ai.cursor.hideApiKey': '隱藏 API Key', 'ai.cursor.customPathPlaceholder': '例如 /usr/local/bin/cursor', 'ai.cursor.check': '檢查', // AI CodeBuddy Code 'ai.codebuddy.title': 'CodeBuddy Code', 'ai.codebuddy.description': '透過官方 Agent SDK(`@tencent-ai/agent-sdk`)介接 CodeBuddy Code。偵測到後即可作為外部程式設計 Agent 使用。', 'ai.codebuddy.detecting': '偵測中...', 'ai.codebuddy.detected': '已偵測到', 'ai.codebuddy.notFound': '未找到', 'ai.codebuddy.path': '路徑:', 'ai.codebuddy.notFoundHint': '在 PATH 中未找到 codebuddy。請安裝或在下方指定執行檔路徑。', 'ai.codebuddy.customPathPlaceholder': '例如 /usr/local/bin/codebuddy', 'ai.codebuddy.check': '檢查', 'ai.codebuddy.resetPath': '重設', 'ai.codebuddy.configSection': '認證與設定(可選)', 'ai.codebuddy.internetEnv': '網路環境', 'ai.codebuddy.internetEnv.default': '預設(海外)', 'ai.codebuddy.internetEnv.internal': 'Internal', 'ai.codebuddy.internetEnv.ioa': 'IOA', 'ai.codebuddy.internetEnv.hint': '設定 CODEBUDDY_INTERNET_ENVIRONMENT —— 受限網路環境請選擇 Internal 或 IOA。', 'ai.codebuddy.envVars': '環境變數', 'ai.codebuddy.envVars.placeholder': 'CODEBUDDY_API_KEY=...\nCODEBUDDY_AUTH_TOKEN=...\nOTHER_VAR=...', 'ai.codebuddy.envVars.hint': '每行一個 KEY=VALUE,傳給 CodeBuddy agent。可在此設定 CODEBUDDY_API_KEY 或 CODEBUDDY_AUTH_TOKEN 完成認證。明文存在本機。', 'ai.codebuddy.advancedSection': '進階選項(SDK 0.3.230)', 'ai.codebuddy.effort': '推理力度', 'ai.codebuddy.effort.default': '預設', 'ai.codebuddy.effort.low': 'Low', 'ai.codebuddy.effort.medium': 'Medium', 'ai.codebuddy.effort.high': 'High', 'ai.codebuddy.effort.xhigh': 'XHigh', 'ai.codebuddy.effort.hint': '控制模型推理深度。簡單命令用 Low 節省 token,複雜診斷用 High/XHigh。', 'ai.codebuddy.maxTurns': '最大輪次', 'ai.codebuddy.maxTurns.hint': '限制每次請求的最大對話輪次,防止 AI 失控循環。留空使用預設值。', 'ai.codebuddy.maxBudget': '預算上限 (USD)', 'ai.codebuddy.maxBudget.hint': '每次請求的最大花費(美元)。超出後自動停止。留空不限制。', 'ai.codebuddy.sandbox': '沙箱模式', 'ai.codebuddy.sandbox.hint': '在沙箱中執行工具呼叫,限制檔案系統和網路存取。', 'ai.codebuddy.fileCheckpointing': '檔案檢查點', 'ai.codebuddy.fileCheckpointing.hint': '啟用檔案操作檢查點,AI 修改檔案後可回滾。', 'ai.codebuddy.elicitation.title': 'CodeBuddy 需要你的輸入', 'ai.codebuddy.elicitation.description': '請確認或填寫請求內容以繼續目前輪次。', 'ai.codebuddy.elicitation.select': '請選擇', 'ai.codebuddy.elicitation.yes': '是', 'ai.codebuddy.elicitation.no': '否', 'ai.codebuddy.elicitation.decline': '拒絕', 'ai.codebuddy.elicitation.accept': '繼續', 'ai.codebuddy.elicitation.validation.required': '{field} 為必填項。', 'ai.codebuddy.elicitation.validation.invalidType': '{field} 的值無效。', 'ai.codebuddy.elicitation.validation.integer': '{field} 必須是整數。', 'ai.codebuddy.elicitation.validation.notInteger': '{field} 必須是整數。', 'ai.codebuddy.elicitation.validation.minimum': '{field} 不能小於 {limit}。', 'ai.codebuddy.elicitation.validation.maximum': '{field} 不能大於 {limit}。', 'ai.codebuddy.elicitation.validation.minLength': '{field} 至少需要 {limit} 個字元。', 'ai.codebuddy.elicitation.validation.maxLength': '{field} 最多允許 {limit} 個字元。', 'ai.codebuddy.elicitation.validation.minItems': '{field} 至少選擇 {limit} 項。', 'ai.codebuddy.elicitation.validation.maxItems': '{field} 最多選擇 {limit} 項。', 'ai.codebuddy.elicitation.validation.format': '{field} 必須符合 {format} 格式。', 'ai.codebuddy.elicitation.validation.option': '請為 {field} 選擇有效選項。', // AI OpenCode 'ai.opencode.title': 'OpenCode', 'ai.opencode.description': '透過官方 SDK 介接 OpenCode。先在 OpenCode 裡設定 provider 和金鑰,偵測到後即可作為外部程式設計 Agent 使用。', 'ai.opencode.detecting': '偵測中...', 'ai.opencode.detected': '已偵測到', 'ai.opencode.notFound': '未找到', 'ai.opencode.path': '路徑:', 'ai.opencode.notFoundHint': '在 PATH 中未找到 opencode。請安裝或在下方指定執行檔路徑。', 'ai.opencode.customPathPlaceholder': '例如 /usr/local/bin/opencode', 'ai.opencode.check': '檢查', 'ai.opencode.resetPath': '重設', // AI Grok Build(應用內託管 Agent,與 External MCP「新增到 Grok」不同) 'ai.grok.title': 'Grok Build', 'ai.grok.description': 'xAI 的 Grok Build 程式設計 Agent CLI。安裝 Grok CLI,使用 `grok login` 登入或設定 XAI_API_KEY 後,即可作為外部 Agent 選擇。', 'ai.grok.detecting': '偵測中...', 'ai.grok.detected': '已偵測到', 'ai.grok.notFound': '未找到', 'ai.grok.path': '路徑:', 'ai.grok.notFoundHint': '在 PATH 中未找到 grok。請安裝 Grok Build CLI 或在下方指定執行檔路徑。', 'ai.grok.customPathPlaceholder': '例如 /usr/local/bin/grok', 'ai.grok.check': '檢查', 'ai.grok.resetPath': '重設', 'ai.grok.runtime.acp.title': '使用 Grok ACP(agent stdio)', 'ai.grok.runtime.acp.default': '預設', 'ai.grok.runtime.acp.description': '透過 Agent Client Protocol(grok agent stdio)接入 Grok。在 session/new 注入 NetMesh MCP。關閉後使用原始 headless streaming-json CLI 路徑。', 'ai.grok.runtime.streamingJson.hint': '目前為 headless streaming-json(grok -p --output-format streaming-json)。MCP 透過專案 .grok/config.toml 注入。', // AI Default Agent 'ai.defaultAgent': '預設 Agent', 'ai.defaultAgent.description': '建立新 AI 工作階段時使用的 Agent', 'ai.defaultAgent.catty': 'Catty(內建)', 'ai.toolAccess.title': '工具介接', 'ai.toolAccess.mode': 'NetMesh 介接模式', 'ai.toolAccess.description': '選擇外部 Agent 存取 NetMesh 工作階段的方式。MCP 會公開內建伺服器,Skills + CLI 會引導 Agent 讀取本機 Skill 並呼叫 NetMesh CLI。', 'ai.toolAccess.mode.mcp': 'MCP', 'ai.toolAccess.mode.skills': 'Skills + CLI', 'ai.toolAccess.mcpPrompt.title': '餵給 AI 的接入提示詞', 'ai.toolAccess.mcpPrompt.description': '把這段提示詞貼到你的 AI 用戶端(Codex、Claude Code 等),它就會幫你完成 NetMesh MCP 的註冊。', 'ai.toolAccess.mcpPrompt.enableHint': '先在下方開啟對外 MCP 開關,提示詞中才會包含 launcher 路徑。', 'ai.toolAccess.skills.file': 'Skill 檔案', 'ai.toolAccess.skills.description': 'Skills + CLI 模式下,Agent 會自動被指向這個本機 Skill 檔案。NetMesh CLI 啟動路徑會在每個工作階段提供給 Agent。', 'ai.toolAccess.skills.unavailable': '暫時無法取得 Skill 檔案路徑', 'ai.externalMcp.title': '對外 MCP', 'ai.externalMcp.description': '將 NetMesh 作為 MCP 伺服器暴露給 Codex、Claude Code、Cursor、Grok 等外部用戶端。工具面與應用內 Agent 相同。用戶端連線期間請保持 NetMesh 執行。', 'ai.externalMcp.sessionsExposed': '作用域內工作階段:{count}', 'ai.externalMcp.mode': '可用模式', 'ai.externalMcp.mode.temporary': '暫時', 'ai.externalMcp.mode.persistent': '常開', 'ai.externalMcp.mode.description': '暫時模式會在閒置逾時後自動關閉;常開模式會在 NetMesh 啟動時還原對外 MCP。', 'ai.externalMcp.idleTimeout': '閒置逾時', 'ai.externalMcp.idleTimeout.description': '暫時模式下,若超過該分鐘數沒有 MCP 操作,將自動關閉對外 MCP。', 'ai.externalMcp.idleTimeout.minutes': '分鐘', 'ai.externalMcp.focusOnHostOpen': 'host_open 時啟用視窗', 'ai.externalMcp.focusOnHostOpen.description': '當 MCP 用戶端開啟主機連線時,將主視窗切換到前景。關閉後可不受打擾地繼續目前工作。', 'ai.externalMcp.silentSessions': 'AI 工作階段靜默執行', 'ai.externalMcp.silentSessions.description': 'AI 開啟的工作階段不會出現在分頁列,重新啟動後也不會還原。可隨時在系統匣面板中查看。', 'ai.externalMcp.sessionIdleTimeout': '已開啟工作階段閒置逾時', 'ai.externalMcp.sessionIdleTimeout.description': 'AI 開啟的工作階段若超過該分鐘數沒有終端或檔案操作,將自動關閉。', 'ai.externalMcp.usage.title': '使用說明', 'ai.externalMcp.usage.keepRunning': '1. 開啟對外 MCP 開關,並保持 NetMesh 執行。', 'ai.externalMcp.usage.localhost': '2. 用戶端透過本機 launcher 連線(僅 127.0.0.1)。關閉開關後會刪除 discovery。', 'ai.externalMcp.usage.permissions': '3. 寫入操作遵循「設定 → AI → 安全」以及命令黑名單。', 'ai.externalMcp.usage.capabilities': '4. 完整 catalog 工具可用:終端機、SFTP、Vault、連接埠轉發。密碼 / 私鑰不會回傳。', 'ai.externalMcp.help.ariaLabel': '對外 MCP 使用說明', 'ai.externalMcp.security': '安全', 'ai.externalMcp.security.description': '僅監聽 127.0.0.1,使用輪替 token,寫入操作重用 AI 權限模式,關閉時刪除 discovery。', 'ai.externalMcp.permissionMode': '目前權限模式:{mode}', 'ai.externalMcp.permissionMode.label': '寫入權限模式', 'ai.externalMcp.permissionMode.hint': '與「設定 → AI → 安全」為同一項。自動:NetMesh 寫入操作不再彈本應用核准;確認:每次詢問。外部用戶端(Codex / Claude / Grok)仍可能有自己的工具核准介面。', 'ai.externalMcp.permissionMode.unknown': '未知', 'ai.externalMcp.discovery': 'Discovery', 'ai.externalMcp.launcher': 'Launcher', 'ai.externalMcp.unavailable': '無法使用', 'ai.externalMcp.bridgeUnavailable': '對外 MCP 橋接無法使用', 'ai.externalMcp.copy': '複製', 'ai.externalMcp.copied': '已複製', 'ai.externalMcp.copyFailed': '複製失敗,請手動複製。', 'ai.externalMcp.refresh': '重新整理', 'ai.externalMcp.clientConfiguration': '用戶端設定', 'ai.externalMcp.clientConfiguration.description': '選擇用戶端一鍵安裝,或複製 CLI / 設定片段。', 'ai.externalMcp.client.codex': 'Codex', 'ai.externalMcp.client.claude': 'Claude Code', 'ai.externalMcp.client.grok': 'Grok', 'ai.externalMcp.client.cursor': 'Cursor', 'ai.externalMcp.cliCommand': 'CLI 命令', 'ai.externalMcp.configSnippet': '設定片段', 'ai.externalMcp.addToCodex': '新增到 Codex', 'ai.externalMcp.addToClaude': '新增到 Claude Code', 'ai.externalMcp.addToGrok': '新增到 Grok', 'ai.externalMcp.codexAdded': '已新增 Codex MCP 項目。請重新啟動 Codex 或開啟新工作階段。', 'ai.externalMcp.claudeAdded': '已新增 Claude Code MCP 項目。請重新啟動 Claude Code 或開啟新工作階段。', 'ai.externalMcp.grokAdded': '已新增 Grok MCP 項目。請重新啟動 Grok 或開啟新工作階段。', 'ai.externalMcp.installCodex': '請先另外安裝 Codex,然後按重新整理。', 'ai.externalMcp.installClaude': '請先另外安裝 Claude Code,然後按重新整理。', 'ai.externalMcp.installGrok': '請先另外安裝 Grok CLI,然後按重新整理。', 'ai.externalMcp.conflict.description': '已存在指向其他位置的 NetMesh-external 項目,請手動刪除或修改。', 'ai.externalMcp.enableForLauncher': '請先啟用對外 MCP,以取得可用的 launcher 路徑。', 'ai.externalMcp.cursor.title': 'Cursor / 其他用戶端', 'ai.externalMcp.cursor.description': '合併到 MCP 設定檔(例如 ~/.cursor/mcp.json)。若已有其他伺服器,請勿整檔覆蓋。', 'ai.externalMcp.status.unavailable': '無法使用', 'ai.externalMcp.status.disabled': '已關閉', 'ai.externalMcp.status.running': '執行中', 'ai.externalMcp.status.starting': '啟動中', 'ai.externalMcp.status.error': '錯誤', 'ai.externalMcp.status.configured': '已設定', 'ai.externalMcp.status.notConfigured': '未設定', 'ai.externalMcp.status.checking': '檢查中', 'ai.externalMcp.status.codexNotFound': '找不到 Codex', 'ai.externalMcp.status.claudeNotFound': '找不到 Claude Code', 'ai.externalMcp.status.grokNotFound': '找不到 Grok', 'ai.externalMcp.status.conflict': '衝突', 'ai.userSkills.title': '使用者 Skills', 'ai.userSkills.description': '開啟 NetMesh 的 Skills 資料夾以新增你自己的技能目錄。NetMesh 會自動掃描這些 skills,預設只注入輕量索引,只有在請求明顯命中某個 skill 時才展開正文。', 'ai.userSkills.openFolder': '開啟 Skills 資料夾', 'ai.userSkills.reload': '重新載入 Skills', 'ai.userSkills.location': '位置', 'ai.userSkills.loading': '正在掃描使用者 skills...', 'ai.userSkills.summary': '已就緒 {ready} 個,警告 {warnings} 個', 'ai.userSkills.empty': '暫未發現使用者 skills。開啟資料夾後可新增包含 SKILL.md 的技能目錄。', 'ai.userSkills.unavailable': '目前環境不支援使用者 skills。', 'ai.userSkills.status.ready': '正常', 'ai.userSkills.status.warning': '警告', // AI Quick Messages 'ai.quickMessages.title': '快捷訊息', 'ai.quickMessages.description': '建立常用提示詞,在 AI 聊天框輸入 / 或點選快捷按鈕即可插入到輸入框。與使用者 Skills 不同,快捷訊息會直接填入訊息內容。', 'ai.quickMessages.add': '新增快捷訊息', 'ai.quickMessages.createTitle': '新增快捷訊息', 'ai.quickMessages.editTitle': '編輯快捷訊息', 'ai.quickMessages.name': '名稱', 'ai.quickMessages.name.placeholder': '例如:檢查磁碟空間', 'ai.quickMessages.slug': '指令', 'ai.quickMessages.slug.placeholder': 'disk-check', 'ai.quickMessages.descriptionField': '說明(可選)', 'ai.quickMessages.descriptionField.placeholder': '簡短描述這條快捷訊息的用途', 'ai.quickMessages.content': '訊息內容', 'ai.quickMessages.content.placeholder': '輸入選擇後要插入的完整提示詞...', 'ai.quickMessages.empty': '還沒有快捷訊息。新增幾條常用提示,聊天時就能一鍵插入。', 'ai.quickMessages.confirmDelete': '確定刪除快捷訊息「{name}」嗎?', 'ai.quickMessages.error.nameRequired': '請填寫名稱。', 'ai.quickMessages.error.invalidSlug': '指令只能包含小寫字母、數字和連字元。', 'ai.quickMessages.error.contentRequired': '請填寫訊息內容。', 'ai.quickMessages.error.slugTaken': '該指令已被其他快捷訊息使用。', 'ai.quickMessages.error.slugConflictsWithSkill': '該指令與使用者 Skill「/{slug}」衝突,請換一個指令。', 'ai.quickMessages.error.maxItems': '最多只能儲存 {max} 條快捷訊息。', // AI Chat 'ai.chat.noProvider': '尚未設定 AI 供應商。請前往 **設定 → AI → 供應商** 新增並啟用一個供應商。', 'ai.chat.toolDenied': '操作已被使用者拒絕。', 'ai.chat.toolApproved': '已核准', 'ai.chat.toolApprovalHint': 'Enter 允許 · Esc 拒絕', 'ai.chat.approve': '核准', 'ai.chat.approveOnce': '允許', 'ai.chat.alwaysAllow': '始終', 'ai.chat.slashStopDesc': '停止目前 AI 回合並取消進行中的工具', 'ai.chat.slashCompactDesc': '壓縮較早的對話上下文', 'ai.chat.reject': '拒絕', 'ai.chat.toolLabel': '工具', 'ai.chat.targetLabel': '目標', 'ai.chat.rawCommand': '指令', 'ai.chat.copyCommand': '複製', 'ai.chat.commandCopied': '已複製', 'ai.chat.approvalSession': '工作階段', 'ai.chat.approvalShell': 'Shell', 'ai.chat.approvalCwd': '目錄', 'ai.chat.approvalReason': '原因', 'ai.chat.approvalInvocation': '呼叫詳情', 'ai.chat.permissionRequired': '需要權限', 'ai.chat.permissionDescription': 'AI Agent 希望執行一個需要你核准的工具呼叫。', 'ai.chat.commandBlocked': '此指令已被安全策略攔截,無法執行。', 'ai.chat.recommendAllow': '允許', 'ai.chat.recommendConfirm': '確認', 'ai.chat.recommendDeny': '拒絕', 'ai.chat.exportConversation': '匯出對話', 'ai.chat.exportAs': '匯出為', 'ai.chat.exportMarkdown': 'Markdown', 'ai.chat.exportJSON': 'JSON', 'ai.chat.exportPlainText': '純文字', 'ai.chat.thinking': '思考中', 'ai.chat.thoughtFor': '思考了 {duration}', 'ai.chat.thought': '思考', 'ai.chat.agents': 'Agents', 'ai.chat.detectedOnMachine': '在本機偵測到', 'ai.chat.rescan': '重新掃描', 'ai.chat.permObserver': '觀察', 'ai.chat.permConfirm': '確認', 'ai.chat.permAuto': '自動', 'ai.chat.permObserverDesc': '只讀', 'ai.chat.permConfirmDesc': '寫入前確認', 'ai.chat.permAutoDesc': '自由執行', 'ai.chat.emptyHint': '詢問伺服器相關問題、執行指令或取得設定協助。', 'ai.chat.placeholder': '向 {agent} 傳送訊息 — @ 引用上下文,/ 使用指令', 'ai.chat.placeholderDefault': '向 Catty Agent 傳送訊息...', 'ai.chat.noModel': '未選擇模型', 'ai.chat.noProviderModel': '未設定預設模型——前往 設定 → AI → 供應商 設定。', 'ai.chat.selectProvider': '選擇供應商', 'ai.chat.selectProviderAndModel': '選擇供應商與模型', 'ai.chat.selectModel': '選擇模型', 'ai.chat.searchModels': '搜尋模型', 'ai.chat.providers': '供應商', 'ai.chat.models': '模型', 'ai.chat.pinned': '已釘選', 'ai.chat.useCustomModel': '使用「{id}」', 'ai.chat.thinkingLevel': '思考強度', 'ai.chat.thinkingOff': '關閉', 'ai.chat.pinModel': '釘選模型', 'ai.chat.unpinModel': '取消釘選', 'ai.chat.loadingModels': '正在載入模型...', 'ai.chat.noMatchingModels': '沒有符合的模型', 'ai.chat.recent': '最近', 'ai.chat.viewAll': '檢視全部', 'ai.chat.untitled': '無標題', 'ai.chat.justNow': '剛剛', 'ai.chat.minutesAgo': '{n}分鐘前', 'ai.chat.hoursAgo': '{n}小時前', 'ai.chat.daysAgo': '{n}天前', 'ai.chat.newChat': '新對話', 'ai.chat.allSessions': '所有工作階段', 'ai.chat.loadEarlierMessages': '載入更早的訊息(還有 {n} 條)', 'ai.chat.jumpNav': '跳轉到訊息', 'ai.chat.jumpUntitled': '(空訊息)', 'ai.chat.usedTools': '已使用 {n} 個工具', 'ai.chat.loadMoreSessions': '載入更多工作階段(還有 {n} 條)', 'ai.chat.noSessions': '沒有歷史工作階段', 'ai.chat.retryHint': '你可以重新發送訊息來重試。', 'ai.chat.approvalTimeout': '工具核准已超時(5 分鐘)。你可以重新發送訊息來重試。', 'ai.chat.menuHosts': '主機', 'ai.chat.menuContext': '上下文', 'ai.chat.menuFiles': '檔案', 'ai.chat.menuImage': '圖片', 'ai.chat.menuMentionHost': '提及主機', 'ai.chat.menuMentionNote': '提及筆記', 'ai.chat.mentionNoteSearch': '搜尋筆記…', 'ai.chat.mentionNoteEmpty': '沒有符合的筆記', 'ai.chat.mentionNoteUnavailable': '目前連線方式下,此 AI 無法讀取保險箱筆記。', 'ai.chat.mentionNoteTooMany': '這些筆記無法一起引用,請減少選擇。', 'ai.chat.mentionNoteInvalid': '無法附加「{{title}}」:筆記的識別碼無效。', 'ai.chat.untitledNote': '未命名筆記', 'ai.chat.menuUserSkills': '使用者 Skills', 'ai.chat.menuSlashCommands': '快捷指令', 'ai.chat.slashCommands': '快捷指令', 'ai.chat.slashSystemCommands': '系統指令', 'ai.chat.slashQuickMessages': '快捷訊息', 'ai.chat.slashUserSkills': '使用者 Skills', 'ai.chat.quickMessages': '快捷指令', 'ai.chat.slashNoResults': '沒有相符的指令', 'ai.chat.slashEmptyHint': '可在 設定 → AI → 快捷訊息 中新增常用提示詞。', // AI 聊天快捷入口 'ai.chatShortcuts.title': '聊天快捷入口', 'ai.chatShortcuts.selectionAction': '選取終端內容時顯示「新增到對話」', 'ai.chatShortcuts.selectionAction.description': '在終端裡選取文字後顯示 AI 快捷按鈕。', // AI Error 'ai.codex.bridgeError': 'Codex 主程序處理器尚未載入。請完全重新啟動 NetMesh 或重新啟動 Electron 開發程序,然後重試。', // AI Web Search 'ai.webSearch.title': '網路搜尋', 'ai.webSearch.enable': '啟用網路搜尋', 'ai.webSearch.enable.description': '允許 AI 代理搜尋網際網路取得最新資訊。', 'ai.webSearch.provider': '搜尋供應商', 'ai.webSearch.provider.description': '選擇一個網路搜尋 API 供應商。', 'ai.webSearch.apiKey': 'API 金鑰', 'ai.webSearch.apiKey.description': '所選搜尋供應商的 API 金鑰。', 'ai.webSearch.apiKey.placeholder': '輸入 API 金鑰...', 'ai.webSearch.apiHost': 'API 位址', 'ai.webSearch.apiHost.description': '自訂 API 端點。除非使用代理,否則保持預設值。', 'ai.webSearch.apiHost.searxngDescription': 'SearXNG 例項的 URL(必填)。', 'ai.webSearch.maxResults': '最大結果數', 'ai.webSearch.maxResults.description': '搜尋傳回的最大結果數(1-20)。', // AI Safety Settings 'ai.safety.title': '安全', 'ai.safety.permissionMode': '權限模式', 'ai.safety.permissionMode.description': '控制 AI 透過 NetMesh 存取終端工作階段的方式。觀察者模式會阻止經由 NetMesh 的寫操作;外部 Agent CLI 可能仍有自己的本機工具和核准流程。', 'ai.safety.permissionMode.observer': '觀察者 - 只讀,禁止操作', 'ai.safety.permissionMode.confirm': '確認 - 操作前詢問', 'ai.safety.permissionMode.auto': '自動 - 自由執行', 'ai.safety.commandTimeout': '指令超時', 'ai.safety.commandTimeout.description': '透過 NetMesh 執行指令時允許執行的最長秒數,超時將被終止。', 'ai.safety.commandTimeout.unit': '秒', 'ai.safety.responseIdleTimeout': '內建 AI 回應等待時間', 'ai.safety.responseIdleTimeout.description': '內建 AI 請求連續這麼多秒沒有收到新回應時會被取消。此設定不控制整段回應總時長,也不影響指令超時。', 'ai.safety.responseIdleTimeout.unit': '秒', 'ai.safety.maxIterations': '最大迭代次數', 'ai.safety.maxIterations.description': '防止 AI 失控執行的最大工具呼叫迴圈次數。外部 Agent 可能有自己的內部迭代限制,以其為準。', 'ai.safety.blocklist': '指令黑名單', 'ai.safety.blocklist.description': '用於攔截透過 NetMesh 執行的危險指令的正規表示式。', 'ai.safety.blocklist.placeholder': '正規表示式...', 'ai.safety.blocklist.reset': '恢復預設', 'ai.safety.blocklist.add': '新增規則', 'ai.safety.grants.title': '許可記憶表', 'ai.safety.grants.heading': 'Confirm 模式放行規則', 'ai.safety.grants.description': 'Confirm 模式會先詢問再執行;儲存為規則後,相符的同類操作會自動放行。規則對所有終端節點/工作階段生效,也可手動編輯。', 'ai.safety.grants.empty': '尚無規則。可在核准時選擇「一律許可」,或手動新增。', 'ai.safety.grants.capability': '能力', 'ai.safety.grants.sessionPattern': '節點/工作階段模式', 'ai.safety.grants.commandPattern': '指令模式(可選)', 'ai.safety.grants.note': '備註(可選)', 'ai.safety.grants.add': '新增規則', 'ai.safety.grants.remove': '刪除', 'ai.safety.grants.export': '匯出 JSON', 'ai.safety.grants.import': '匯入 JSON', 'ai.safety.note': '這些安全設定會約束經由 NetMesh 執行的操作。外部 Agent CLI 也可能提供本機工具,那部分由 Agent 自己的控制規則約束。', // 統一終端工作區和頂部標籤的 tooltip 文案 (issue #954) 'terminal.layer.addTerminal': '新增終端', 'terminal.layer.switchToSplitView': '切換到分割檢視', 'terminal.layer.sftp': '檔案傳輸', 'terminal.layer.scripts': '指令碼', 'terminal.layer.history': '指令歷史', 'terminal.layer.theme': '主題', 'terminal.layer.notes': '筆記', 'terminal.layer.aiChat': 'AI 助手', 'terminal.layer.movePanelLeft': '面板移至左側', 'terminal.layer.movePanelRight': '面板移至右側', 'terminal.layer.closePanel': '關閉面板', 'terminal.layer.closePane': '關閉分割', 'terminal.layer.resizeSplit': '調整分割大小', 'terminal.layer.splitHorizontal': '上下分割', 'terminal.layer.splitVertical': '左右分割', 'terminal.layer.openInNewSplit': '在新分割中開啟', 'terminal.layer.hostTree.search': '搜尋主機...', 'terminal.layer.hostTree.searchButton': '搜尋', 'terminal.layer.hostTree.tagsButton': '按標籤篩選', 'terminal.layer.hostTree.newHost': '新增主機', 'terminal.layer.hostTree.newHostInGroup': '在此群組中新增主機', 'terminal.layer.hostTree.editHost': '編輯主機', 'terminal.layer.hostTree.hostSavedNextConnection': '主機已更新,連線設定將在下次連線時生效。', 'terminal.layer.hostTree.newGroup': '新增群組', 'terminal.layer.hostTree.localShell': '本機 Shell', 'terminal.layer.hostTree.tagsEmpty': '暫無標籤', 'terminal.layer.hostTree.clearTags': '清除篩選', 'terminal.layer.hostTree.collapse': '收起主機列表', 'terminal.layer.hostTree.expand': '展開主機列表', 'terminal.layer.hostTree.empty': '沒有相符的主機', 'terminal.layer.hostTree.details.host': '主機', 'terminal.layer.hostTree.details.user': '使用者', 'terminal.layer.hostTree.details.port': '埠', 'terminal.layer.hostTree.details.protocol': '協定', 'terminal.layer.hostTree.details.group': '群組', 'terminal.layer.hostTree.details.tags': '標籤', 'terminal.layer.hostTree.details.lastConnected': '最近連線', 'topTabs.openQuickSwitcher': '開啟快速切換', 'topTabs.moreTabs': '更多分頁', 'topTabs.aiAssistant': 'AI 助手', 'topTabs.newLocalTerminal': '新增本機終端', 'topTabs.controlPanel': '快捷控制', 'topTabs.controlPanel.externalMcp': '對外 MCP', 'topTabs.controlPanel.theme': '主題', 'topTabs.controlPanel.theme.light': '淺色', 'topTabs.controlPanel.theme.dark': '深色', 'topTabs.controlPanel.theme.system': '系統', 'topTabs.externalMcp.enable': '啟用對外 MCP', 'topTabs.externalMcp.disable': '停用對外 MCP', 'topTabs.windowOpacity': '視窗透明度', 'topTabs.openSettings': '開啟設定', 'ai.chat.sessionHistory': '工作階段歷史', 'ai.chat.resizeInput': '拖曳調整訊息輸入框高度', 'ai.chat.attach': '附件', 'ai.chat.terminalSelectionAttachment': '終端選區', 'ai.chat.terminalSelectionLines': '{count} 行', 'ai.chat.collapse': '收起', 'ai.chat.expand': '展開', 'ai.chat.enableAgent': '啟用 {name}', 'ai.chat.artifact.noteFallback': 'Vault 筆記', 'ai.chat.artifact.openNotes': '開啟筆記', 'ai.chat.artifact.openHosts': '開啟主機', 'ai.chat.artifact.notesSummary': 'Vault 中有 {count} 條筆記', 'ai.chat.artifact.hostsSummary': 'Vault 中有 {count} 台主機', 'ai.chat.artifact.hostsAdded': '已新增 {count} 台主機', 'ai.chat.artifact.hostsPreview': '預覽 {count} 台主機', 'ai.chat.artifact.failed': 'Vault 操作失敗', 'ai.chat.artifact.unavailableTitle': '不可用', 'ai.chat.artifact.noteMissing': '該筆記已不在 Vault 中。', 'ai.chat.artifact.hostMissing': '該主機已不在 Vault 中。', 'ai.chat.artifact.snippetMissing': '該 Snippet 或指令碼已不在 Vault 中。', 'ai.chat.artifact.openSnippets': '開啟 Snippets', 'ai.chat.artifact.snippetsSummary': 'Vault 中有 {count} 個 Snippet', 'ai.chat.artifact.scriptsSummary': 'Vault 中有 {count} 個指令碼', 'ai.chat.artifact.snippetFallback': 'Vault Snippet', 'ai.chat.artifact.scriptFallback': '自動化指令碼', 'ai.chat.artifact.scriptLanguage': '{language} 指令碼', 'ai.chat.artifact.snippetDeleted': 'Snippet 已刪除', 'ai.chat.artifact.scriptDeleted': '指令碼已刪除', 'ai.chat.artifact.snippetRan': 'Snippet 已執行', 'ai.chat.artifact.scriptStarted': '指令碼執行已啟動', 'ai.chat.artifact.scriptRunStatus': '指令碼執行 {status}', 'ai.chat.artifact.scriptRunsSummary': '{count} 個指令碼執行', 'ai.chat.artifact.scriptRunStopped': '指令碼執行已停止', 'ai.chat.artifact.scriptRunPaused': '指令碼執行已暫停', 'ai.chat.artifact.scriptRunResumed': '指令碼執行已恢復', 'ai.chat.artifact.scriptReference': 'nct API 參考', 'zmodem.waitingForRemote': '等待遠端...', 'zmodem.uploading': '上傳中', 'zmodem.downloading': '下載中', 'zmodem.cancelTransfer': '取消傳輸 (Ctrl+C)', 'zmodem.overwrite.title': '遠端已存在同名檔案', 'zmodem.overwrite.applyToRest': '套用到其餘衝突檔案', 'zmodem.overwrite.overwrite': '覆蓋', 'zmodem.overwrite.skip': '跳過', 'zmodem.overwrite.cancel': '取消', 'settings.shortcuts.resetToDefault': '重設為預設值', };