export default { // 登入 login: { title: 'Hermes Web UI', description: '輸入使用者名稱和密碼以繼續。', placeholder: '存取權杖', submit: '登入', tokenRequired: '請輸入存取權杖', invalidToken: '權杖無效', connectionFailed: '無法連線至伺服器', passwordLogin: '密碼登入', tokenLogin: '權杖登入', usernamePlaceholder: '使用者名稱', passwordPlaceholder: '密碼', defaultCredentialsHint: '預設登入名:admin,預設密碼:123456', credentialsRequired: '請輸入使用者名稱和密碼', invalidCredentials: '使用者名稱或密碼錯誤', tooManyAttempts: '登入失敗次數過多,請稍後再試', lockResetHint: '如果這是你的伺服器,可以執行以下命令清除登入鎖定:', defaultLoginResetHint: '如需重置預設 admin 密碼,可以執行:', sessionExpired: '登入已過期,請重新登入', accessDenied: '你沒有權限存取此資源', passwordMismatch: '兩次密碼不一致', passwordTooShort: '密碼長度至少 6 個字元', setupSuccess: '密碼登入設定成功', passwordChanged: '密碼修改成功', passwordRemoved: '密碼登入已移除', setupPassword: '設定密碼登入', changePassword: '修改密碼', changeUsername: '修改使用者名稱', removePasswordLogin: '移除', username: '使用者名稱', currentPassword: '目前密碼', newPassword: '新密碼', confirmPassword: '確認密碼', newUsername: '新使用者名稱', usernameChanged: '使用者名稱修改成功', usernameTooShort: '使用者名稱至少 2 個字元', setupDescription: '管理用於登入的使用者名稱和密碼。', removeConfirm: '使用者帳號必須保留密碼登入。', passwordLoginNotConfigured: '密碼登入未設定', passwordLoginConfigured: '目前帳號:{username}', defaultCredentialTitle: '請修改預設帳號和密碼', defaultCredentialMessage: '目前登入帳號仍在使用預設使用者名稱或預設密碼。為避免未授權存取,請盡快進入目前帳號修改使用者名稱和密碼。', defaultCredentialAction: '去修改', defaultCredentialLater: '稍後提醒', }, users: { title: '帳號管理', description: '建立使用者、分配角色,並控制一般管理員可存取的設定檔。', create: '建立使用者', edit: '編輯使用者', username: '使用者名稱', role: '角色', statusLabel: '狀態', profiles: '可存取設定檔', profilesPlaceholder: '選擇可存取的設定檔', allProfiles: '全部設定檔', noProfiles: '未關聯設定檔', lastLogin: '最後登入', newPasswordOptional: '新密碼(留空不修改)', loadFailed: '使用者列表載入失敗', deleteConfirm: '確認刪除此使用者?', enable: '啟用', disable: '停用', roles: { superAdmin: '超級管理員', admin: '一般管理員', }, status: { active: '啟用', disabled: '停用', }, }, // 通用 common: { loading: '載入中...', cancel: '取消', delete: '刪除', retry: '重試', edit: '編輯', save: '儲存', saved: '已儲存', saveFailed: '儲存失敗', deleteFailed: '刪除失敗', ok: '確定', copied: '已複製', copy: '複製', update: '更新', create: '建立', noData: '目前無資料', expired: '已過期', fetch: '取得', add: '新增', enable: '啟用', disable: '停用', configured: '已設定', notConfigured: '未設定', confirm: '確定', expand: '展開', collapse: '收起', start: '啟動', stop: '停止', }, // 側邊欄 // MCP 管理 mcp: { title: 'MCP 伺服器', loadFailed: '載入 MCP 伺服器失敗', reloadAll: '全部重載', refresh: '重新整理', total: '總計', connected: '已連線', disconnected: '未連線', tools: '工具', tool: '工具', searchPlaceholder: '搜尋伺服器...', addServer: '+ 新增伺服器', zeroTools: '0 個工具', loading: '載入中...', empty: '暫無 MCP 伺服器設定', reloaded: '已重載 {server}', reloadedAll: '所有 MCP 伺服器已重載', reloadFailed: '重載失敗', serverAdded: '伺服器 "{name}" 已新增', addFailed: '新增伺服器失敗', serverUpdated: '伺服器 "{name}" 已更新', updateFailed: '更新伺服器失敗', saveFailed: '儲存失敗', serverRemoved: '已移除 "{name}"', enabled: "已啟用 {name}", disabled: "已禁用 {name}", connectedStatus: '已連線', disconnectedStatus: '未連線', disabledStatus: '已停用', toolList: '工具列表', count: '個', more: '更多', removeFailed: '移除伺服器失敗', testOk: '測試成功 — {count} 個工具可用', testEmpty: '測試未回傳工具', testFailed: '測試失敗', edit: '編輯', test: '測試', reload: '重載', remove: '移除', confirmRemove: '確認刪除伺服器 "{name}"?', cancel: '取消', add: '新增', save: '儲存', addTitle: '新增 MCP 伺服器', editTitle: '編輯 MCP 伺服器', invalidJson: 'JSON 格式錯誤', invalidYaml: 'YAML 格式錯誤', invalidConfig: '配置格式錯誤', invalidServerConfig: '伺服器配置無效', missingCommandOrUrl: '必須包含 command 或 url', manageTools: '管理工具', toolsVisibilityTitle: '工具可見性管理', fetchTools: '獲取工具列表', fetchToolsFailed: '獲取工具列表失敗', toolsMode: '模式:', toolsModeAll: '全部', toolsModeInclude: '包含', toolsModeExclude: '排除', toolsListHeader: '工具名稱', toolsEmpty: '暫無工具,請先獲取工具列表', toolsSummaryAll: '共 {count} 個工具,全部啟用', toolsSummaryInclude: '共 {total} 個工具,已選 {count} 個', toolsSummaryExclude: '共 {total} 個工具,已排除 {count} 個', toolsVisibilitySaved: '工具可見性已儲存', toolsSelectAll: '全選', toolsClearSelection: '取消全選', toolsExcludeAll: '全部排除', toolsClearExcluded: '清空排除', }, sidebar: { chat: '對話', search: '搜尋', apiRelay: '中轉站', history: '歷史', jobs: '任務', kanban: '看板', models: '模型', profiles: '使用者', plugins: '插件', mcp: 'MCP', skills: '技能', memory: '記憶', logs: '日誌', usage: '用量', performance: '效能監控', skillsUsage: '技能用量', channels: '頻道', gateways: '閘道', terminal: '終端機', groupChat: '群聊', files: '檔案', groupConversation: '對話', groupConversationShort: '對話', groupPlatform: '平台', groupAgent: '代理', groupAgentShort: '代理', groupSystem: '系統', groupSystemShort: '系統', groupMonitoring: '監控', groupMonitoringShort: '監控', groupTools: '工具', groupToolsShort: "工具", codingAgents: "編程工具", versionPreview: "版本預覽", settings: '設定', connected: '已連線', disconnected: '未連線', collapse: '收起選單', expand: '展開選單', updateTip: '在終端機執行 "hermes-web-ui update" 即可更新', updateVersion: '升級版本 v{version}', reloadClientVersion: '重新整理到 v{version}', updating: '正在更新...', updateSuccess: '更新成功,請稍後重新整理頁面,如長時間未啟動,請手動啟動', updateFailed: '更新失敗', logout: '登出', nodeVersionWarning: '偵測到 Node.js v{version},請升級至 23 以上版本。', changelog: '更新日誌', noChangelog: '目前無更新日誌', }, performance: { title: '效能監控', subtitle: '查看系統資源、Bridge Broker、Workers 和活躍會話', refresh: '重新整理', autoRefreshOn: '自動重新整理', autoRefreshOff: '手動重新整理', loadFailed: '效能資料載入失敗', systemCpu: '系統 CPU', systemMemory: '系統記憶體', activeSessions: '活躍會話', runningSessions: '執行中 {count}', workers: 'Workers', totalWorkerMemory: 'Worker 總記憶體', processes: '程序', uptime: '執行', running: '執行中', stopped: '已停止', workerMemory: 'Worker 記憶體', lastUpdated: '更新時間', profile: 'Profile', memory: '記憶體', sessions: '會話', runningActiveSessions: '執行中 / 活躍', lastUsed: '最後使用', status: '狀態', noWorkers: '暫無 Worker', sessionsByProfile: '按 Profile 統計會話', noActiveSessions: '暫無活躍會話', }, // 抽屜 drawer: { terminal: '終端機', files: '工作區', }, // 對話 chat: { contextRemaining: '剩餘', contextClickToEdit: '點擊編輯上下文長度', contextEditTitle: '編輯上下文長度', contextEditDesc: '設定目前模型的上下文長度限制(token 數量)', contextEditPlaceholder: '請輸入上下文長度', contextEditHint: '常見值:256k (Hermes 預設), 128k (GPT-4), 32k (GPT-3.5)', contextEditSave: '儲存', contextEditCancel: '取消', contextEditInvalid: '請輸入有效的上下文長度', contextEditSuccess: '上下文長度已更新', contextEditFailed: '更新失敗', emptyState: '開始與 Hermes Agent 對話', outlineTitle: '會話大綱', outlineEmpty: '暫無會話內容', outlineUserQuestion: '使用者問題', inputPlaceholder: '輸入訊息... (Enter 發送,Shift+Enter 換行)', slashCommandArgs: { message: '<訊息>', title: '<標題>', text: '<文字>', }, slashCommands: { usage: '計算目前會話用量', status: '查看會話狀態和佇列', abort: '停止目前 Bridge 執行', queue: '將訊息加入目前執行後的佇列', plan: '產生一份 Markdown 實作計畫', goal: '設定一個跨輪次持續推進的目標', goalStatus: '查看目前目標狀態', goalPause: '暫停目前目標循環', goalResume: '繼續已暫停的目標循環', goalDone: '完成並清除目前目標', goalClear: '清除目前目標', subgoal: '為目前目標追加驗收條件', clear: '清空目前顯示內容', clearHistory: '刪除目前會話已儲存的訊息歷史', title: '重新命名目前會話', compress: '空閒時觸發上下文壓縮', steer: '向目前 Bridge 執行傳送引導文字', destroy: '釋放目前會話的 Bridge Agent', reloadMcp: '重載 MCP 伺服器', }, attachFiles: '新增附件', autoPlaySpeech: '自動播放語音', showToolCalls: '顯示工具呼叫', hideToolCalls: '隱藏工具呼叫', messageQueue: '訊息佇列', removeQueuedMessage: '移除佇列訊息', stop: '停止', start: '啟動', stopGateway: '停止閘道', send: '發送', contextUsed: '上下文已用:', sessions: '工作階段', webUiSessions: '工作階段', allProfiles: '全部設定', profileMissingModelsTip: '此工作階段所屬設定「{profile}」沒有可用的 provider 或模型', sessionScopeHint: '這裡只顯示目前工作階段;CLI、Telegram、Discord、Cron 等頻道工作階段在歷史中以唯讀方式查看。', openHistory: '開啟歷史', hermesHistory: 'Hermes 歷史', historyScopeHint: '這裡按來源以唯讀方式查看目前 profile 的 Hermes 歷史工作階段。', noSessions: '目前無工作階段', searchTitle: '搜尋工作階段', searchSubtitle: '依標題或訊息內容搜尋', searchScope: '搜尋範圍:僅 Web UI 本地工作階段資料庫;不包含唯讀 Hermes 歷史工作階段。', searchHint: 'Cmd/Ctrl+K', searchPlaceholder: '搜尋工作階段...', searchEmpty: '最近工作階段', searchRecent: '最近工作階段', searchNoResults: '沒有符合的工作階段', searchNoSnippet: '沒有可顯示的摘要', searchEnterHint: 'Enter 開啟 · Esc 關閉', searchFailed: '搜尋工作階段失敗', newChat: '新增對話', approvalKicker: '終端授權', approvalTitle: '執行前請確認命令', approvalAllowOnce: '僅本次允許', approvalAllowSession: '本工作階段允許', approvalAlways: '永遠允許', approvalDeny: '拒絕', clarifyKicker: 'Agent 需要確認', clarifyTitle: 'Agent 有一個問題需要您回答', clarifyPlaceholder: '輸入你的回答...', clarifySubmit: '回覆', clarifyDismiss: '忽略', deleteSession: '確定刪除此工作階段?', sessionDeleted: '工作階段已刪除', toggleBatchMode: '批次選取', selectAll: '全選', confirmBatchDelete: '確定刪除選取的 {count} 個工作階段?', batchDeleteSuccess: '已刪除 {count} 個工作階段', batchDeletePartial: '{failed} 個工作階段刪除失敗', batchDeleteFailed: '批次刪除失敗', importToWebUi: '匯入到 Web UI', importSessionSuccess: '工作階段已匯入 Web UI', importSessionAlreadyExists: '工作階段已存在於 Web UI', importSessionFailed: '匯入工作階段失敗', rename: '重新命名', pin: '釘選', unpin: '取消釘選', pinned: '已釘選', chatMode: '聊天', liveMode: '即時', liveSessions: '即時工作階段', recentBadge: '最近', linkedSessions: '關聯 {count} 個工作階段', noVisibleMessages: '沒有人類可見訊息。', monitorRoleUser: '使用者', monitorRoleAssistant: '助手', copySessionLink: '複製工作階段連結', openSessionInNewTab: '在新分頁開啟', sessionLinkCopied: 'Session link copied', copySessionId: '複製工作階段 ID', export: '匯出', exportFull: '完整匯出 (JSON)', exportCompressed: '壓縮匯出 (TXT)', exportCompressing: '正在壓縮上下文,請稍候...', exportSuccess: '工作階段已匯出', exportFailed: '匯出失敗', renamed: '已重新命名', renameFailed: '重新命名失敗', renameSession: '重新命名工作階段', sessionNotFound: '找不到工作階段', enterNewTitle: '輸入新標題', workspace: '工作區', setWorkspace: '設定工作區', setWorkspaceTitle: '設定工作階段工作區', workspacePlaceholder: '輸入專案路徑,例如 /home/user/project', workspaceSet: '工作區已設定', workspaceSetFailed: '設定工作區失敗', other: '其他', runFailed: '執行失敗', error: '錯誤', tool: '工具', arguments: '參數', result: '結果', truncated: '... (已截斷)', executionDuration: '執行時長', thinkingLabel: '思考過程', thinkingInProgress: '思考中…', thinkingShow: '展開思考過程', thinkingHide: '收起思考過程', thinkingDuration: '已觀察 {duration}', thinkingChars: '{count} 字', copyBubble: '複製訊息', copiedBubble: '已複製', copyFailed: '複製失敗', playSpeech: '播放語音', pauseSpeech: '暫停', resumeSpeech: '繼續', stopSpeech: '停止', speechNotSupported: '此瀏覽器不支援語音播放', modelSetFailed: '設定模型失敗', modelSet: '模型已設定', setModelTitle: '設定工作階段模型', setModel: '設定模型', newCliChat: '新增 CLI', cliEmptyState: '開始 CLI 對話', }, // 看板 kanban: { title: '看板', createTask: '新增任務', noTasks: '目前無任務', allStatuses: '所有狀態', allAssignees: '所有負責人', board: { create: '新增看板', archive: '封存看板', slugPlaceholder: '看板識別碼,例如 project-a', namePlaceholder: '顯示名稱(選填)', slugRequired: '看板識別碼不能為空', created: '看板已建立', archived: '看板已封存', archiveConfirm: '確定封存目前看板?', }, columns: { triage: '待分類', todo: '待辦', ready: '就緒', running: '進行中', blocked: '阻塞', done: '已完成', archived: '已封存', }, form: { title: '標題', titlePlaceholder: '任務標題', titleRequired: '標題不能為空', body: '描述', bodyPlaceholder: '任務描述(選填)', assignee: '負責人', selectAssignee: '選擇負責人...', priority: '優先級', selectPriority: '選擇優先級...', }, card: { assigneeTooltip: '負責人', priority: { low: '低', medium: '中', high: '高', }, timeAgo: { justNow: '剛剛', minutes: '{count} 分鐘前', hours: '{count} 小時前', days: '{count} 天前', }, }, detail: { status: '狀態', assignee: '負責人', priority: '優先級', tenant: '租戶', createdAt: '建立時間', startedAt: '開始時間', completedAt: '完成時間', comments: '評論', events: '事件', runs: '執行記錄', result: '完成結果', sessions: '關聯工作階段', sessionMessages: '工作階段記錄', noSessions: '找不到關聯工作階段。', artifacts: '產出檔案', sources: '資料來源', highlights: '關鍵資訊', }, action: { title: '操作', complete: '完成', completeSummary: '完成摘要(選填)', block: '阻塞', blockReason: '阻塞原因', unblock: '解除阻塞', assign: '指派', assignTo: '指派給...', }, message: { taskCreated: '任務已建立', taskCompleted: '任務已完成', taskBlocked: '任務已阻塞', taskUnblocked: '任務已解除阻塞', taskAssigned: '任務已指派', loadFailed: '載入任務失敗', }, stats: { total: '總計', tasks: '任務數', }, }, // 排程任務 jobs: { title: '排程任務', createJob: '建立任務', editJob: '編輯任務', noJobs: '目前無排程任務,建立一個開始吧。', name: '名稱', namePlaceholder: '任務名稱', schedule: '排程運算式 (Cron)', schedulePlaceholder: '例如 0 9 * * *', quickPresets: '快速預設', selectPreset: '選擇預設...', presetEveryMinute: '每分鐘', presetEvery5Min: '每 5 分鐘', presetEveryHour: '每小時', presetEveryDay: '每天 00:00', presetEveryDay9: '每天 09:00', presetEveryMonday: '每週一 09:00', presetEveryMonth: '每月 1 日 09:00', prompt: '提示詞', promptPlaceholder: '要執行的內容', deliverTarget: '投遞目標', origin: '來源', local: '本地', repeatCount: '重複次數(選填)', modelPlaceholder: '預設模型', repeatPlaceholder: '留空表示無限重複', jobCreated: '任務已建立', jobUpdated: '任務已更新', nameRequired: '名稱為必填項', scheduleRequired: '排程運算式為必填項', loadFailed: '載入任務失敗', jobPaused: '任務已暫停', jobResumed: '任務已恢復', jobTriggered: '任務已觸發', modelUpdated: '模型已更新', jobDeleted: '任務已刪除', status: { running: '執行中', paused: '已暫停', disabled: '已停用', scheduled: '已排程', }, info: { model: '模型', schedule: '排程', lastRun: '上次執行', nextRun: '下次執行', deliver: '投遞', repeat: '重複', }, action: { pause: '暫停', pauseJob: '暫停任務', resume: '恢復', resumeJob: '恢復任務', runNow: '立即執行', triggerImmediately: '立即觸發', }, runHistory: { title: '執行歷史', runs: '次執行', noRuns: '目前無執行歷史。', }, }, // 技能 skills: { title: '技能', searchPlaceholder: '搜尋技能...', noMatch: '沒有符合的技能', noSkills: '目前無技能', backTo: '返回', attachedFiles: '附件檔案', loadFailed: '載入技能失敗', fileLoadFailed: '載入檔案失敗', modified: '使用者已修改', archived: '已封存', pinned: '已釘選', pin: '釘選技能', unpin: '取消釘選', pinFailed: '變更釘選狀態失敗', toggleFailed: '切換技能狀態失敗', source: { builtin: '內建', hub: 'Hub 安裝', local: '本地安裝', external: '外部目錄', }, }, // 插件 plugins: { title: '插件', refresh: '重新整理', notice: '唯讀顯示可發現的 Hermes 插件 manifest。發現元資料讀取不會載入插件程式碼。v1 管理動作仍保留在 CLI,新 Hermes 工作階段生效。', loadFailed: '載入插件失敗', commandCopied: '指令已複製', searchPlaceholder: '搜尋 key、名稱、描述、路徑...', source: '來源', kind: '類型', statusTitle: '狀態', configStatus: '設定:{status}', notAvailable: '無', copyCommand: '複製指令', managedElsewhere: '由其他位置管理', noMatch: '沒有符合目前篩選條件的插件', enabled: '已啟用', disabled: '已停用', summary: { total: '總數', active: '已啟用 / 自動', inactive: '未啟用', disabled: '已停用', providerManaged: 'Provider 管理', }, status: { enabled: '已啟用', 'auto-active': '自動啟用', inactive: '未啟用', disabled: '已停用', 'provider-managed': 'Provider 管理', }, statusLabel: { enabled: '設定啟用', 'auto-active': '自動啟用', inactive: '未啟用', disabled: '已停用', 'provider-managed': 'Provider 管理', }, configStatuses: { enabled: '已啟用', disabled: '已停用', 'not-enabled': '未啟用', auto: '自動', 'provider-managed': 'Provider 管理', }, table: { plugin: '插件', status: '狀態', source: '來源', kind: '類型', capabilities: '能力', path: '路徑 / 入口', cli: 'CLI', }, capabilities: { tools: '{count} 個工具', hooks: '{count} 個 hook', env: '{count} 個環境變數', }, metadata: { agentRoot: 'Agent 根目錄', python: 'Python', scanCwd: '掃描 cwd', projectPlugins: '專案插件', }, }, // 記憶 memory: { title: '記憶', refresh: '重新整理', loadFailed: '載入記憶失敗', myNotes: '我的筆記', noNotes: '目前無筆記。', notesPlaceholder: '輸入筆記內容...', userProfile: '使用者畫像', noProfile: '目前無畫像。', profilePlaceholder: '輸入使用者畫像...', soul: '靈魂', noSoul: '目前無靈魂設定。', soulPlaceholder: '輸入靈魂設定...', }, // 模型 models: { title: '模型', searchPlaceholder: '搜尋模型...', addProvider: '新增 Provider', providerType: 'Provider 類型', preset: '預設', custom: '自訂', selectProvider: '選擇 Provider', chooseProvider: '選擇一個 provider...', getApiKey: '取得 API Key', name: '名稱', autoGeneratedName: '依 Base URL 自動產生', baseUrl: 'Base URL', region: '區域', regionIntl: '國際版', regionCn: '中國大陸', baseUrlPlaceholder: '例如 https://api.example.com/v1', apiKey: 'API Key', apiKeyPlaceholder: 'sk-...', defaultModel: '預設模型', selectOrInput: '選擇或輸入模型名稱...', selectModel: '選擇模型...', providerAdded: 'Provider 已新增', providerDeleted: 'Provider 已刪除', deleteProvider: '刪除 Provider', deleteConfirm: '確定刪除「{name}」嗎?', codexLoginTitle: 'OpenAI Codex 登入', codexWaiting: '在授權頁面輸入以下代碼完成登入:', codexCopyCode: '代碼已複製', codexOpenLink: '開啟授權頁面', codexApproved: '登入成功', codexExpired: '授權已過期,請重試。', nousLoginTitle: 'Nous Portal 登入', nousWaiting: '在授權頁面輸入此代碼完成登入:', nousCopyCode: '代碼已複製', nousOpenLink: '開啟授權頁面', nousApproved: '登入成功', nousDenied: '授權被拒絕,請重試。', nousExpired: '授權已過期,請重試。', copilotLoginTitle: 'GitHub Copilot 登入', copilotWaiting: '請前往 GitHub 輸入下方裝置代碼完成授權。授權完成後視窗會自動關閉。', copilotCopyCode: '代碼已複製', copilotOpenLink: '開啟 GitHub 授權頁', copilotApproved: '登入成功!', copilotDenied: '授權被拒絕。', copilotExpired: '授權連結已過期,請重試。', copilotAddDetectedTitle: '偵測到 GitHub Copilot', copilotAddDetected: '已在本機偵測到 GitHub Copilot OAuth 憑證,點擊「新增」即可在 Hermes 中啟用 Copilot。', copilotAddSourceEnv: '來源:~/.hermes/.env(COPILOT_GITHUB_TOKEN)', copilotAddSourceGhCli: '來源:gh CLI(gh auth token)', copilotAddSourceAppsJson: '來源:VS Code Copilot 插件(apps.json)', copilotDeleteHintEnv: '此操作會清除 ~/.hermes/.env 中的 COPILOT_GITHUB_TOKEN,不影響其他工具。', copilotDeleteHintGhCli: 'Copilot 將從 Hermes 清單移除。不會影響 gh CLI —— `gh auth status` 仍顯示已登入。', copilotDeleteHintAppsJson: 'Copilot 將從 Hermes 清單移除。不會影響 VS Code Copilot 插件的登入。', customBadge: '自訂', previewBadge: '預覽', disabledBadge: '不可用', disabledTooltip: '此模型目前帳號不可用', customModelPlaceholder: '自訂模型名稱', customModelHint: '按 Enter 載入', removeCustomModel: '移除這個未列出的模型', noProviders: '目前無 Provider,新增一個開始吧。', models: '模型清單', count: '個模型', more: '個更多', builtIn: '內建', customType: '自訂', provider: 'Provider', contextLength: '上下文長度', contextLengthPlaceholder: '例如 256000(選填)', local: '本地 ({host})', selectProviderRequired: '請選擇 Provider', baseUrlRequired: 'Base URL 為必填項', apiKeyRequired: 'API Key 為必填項', modelRequired: '預設模型為必填項', enterBaseUrl: '請先輸入 Base URL', unexpectedFormat: '回應格式異常', foundModels: '找到 {count} 個模型', fetchFailed: '取得模型失敗', manageVisibleModels: '管理可見模型', manageVisibleModelsFor: '管理 {name} 可見模型', visibilityHint: '僅影響 Web UI 的模型選擇器和模型頁展示,不會改寫 Hermes CLI 的 provider/model 配置。實際呼叫仍使用原始模型 ID。', visibilitySaved: '可見模型已儲存', visibilitySaveFailed: '儲存可見模型失敗', showAllModels: '顯示全部模型', clearVisibleModels: '取消全選', currentDefault: '目前預設', defaultShort: '預設', aliasEdit: '重新命名', aliasTitle: '模型顯示名', aliasTitleFor: '{model} 的顯示名', aliasPlaceholder: '留空則使用原始模型 ID', aliasHint: '僅修改 Web UI 顯示名,傳送給 Hermes 的仍是原始模型 ID。', aliasCanonical: '原始 ID:{model}', aliasUseOriginal: '恢復原始 ID', aliasManage: '顯示名', aliasManageFor: '{provider} 的顯示名', aliasSaveFailed: '儲存顯示名失敗', visibilitySelectOne: '至少保留一個可見模型', xaiWaiting: '請在開啟的 xAI 頁面完成授權。授權完成後視窗會自動關閉。', xaiOpenLink: '開啟 xAI 授權頁', xaiLoginTitle: 'xAI Grok OAuth 登入', xaiExpired: '授權連結已過期,請重試。', xaiCopyLink: '複製授權連結', xaiApproved: '登入成功!', }, // 設定檔 profiles: { title: '設定檔', create: '建立設定檔', import: '匯入', export: '匯出', rename: '重新命名', delete: '刪除', switchTo: '切換 Hermes Profile', switchConfirm: '將執行 `hermes profile use {name}` 並切換 Hermes CLI 的 active profile,是否繼續?', switchSuccess: 'Hermes active profile 已切換為「{name}」', switchFailed: '切換 Hermes Profile 失敗,閘道可能需要手動重新啟動', createSuccess: '設定檔「{name}」已建立', createFailed: '建立設定檔失敗', renameSuccess: '設定檔已重新命名', renameFailed: '重新命名設定檔失敗', deleteConfirm: '確定刪除設定檔「{name}」嗎?', deleteSuccess: '設定檔已刪除', deleteFailed: '刪除設定檔失敗', exportSuccess: '設定檔已匯出', exportFailed: '匯出設定檔失敗', importSuccess: '設定檔已匯入', importFailed: '匯入設定檔失敗', importSelectFile: '選擇封存檔案', importInvalidFile: '請選擇有效的封存檔案 (.tar.gz, .tgz, .gz, .zip)', name: '設定檔名稱', namePlaceholder: '僅限小寫字母、數字、連字號', nameValidation: '設定檔名稱只能包含小寫字母、數字、底線和連字號', newName: '新名稱', newNamePlaceholder: '小寫字母、數字、連字號', cloneFromCurrent: '從目前設定檔複製', cloneCleanupNotice: '複製時會自動略過獨占型平台憑證(Weixin / Telegram / Slack 等),避免與來源設定檔衝突', cloneStrippedCredentials: '已清理 {count} 項獨占憑證:{list}', cloneDisabledPlatforms: '已停用 {count} 個平台:{list}', cloneStrippedConfigCredentials: '已清理 config.yaml 中 {count} 項嵌入憑證:{list}', archivePath: '封存路徑', archivePathPlaceholder: '封存檔案的伺服器路徑', importName: '設定檔名稱(選填)', importNamePlaceholder: '留空則使用封存名稱', active: '使用中', model: '模型', gateway: '閘道', alias: '別名', provider: 'Provider', path: '路徑', skills: '技能', hasEnv: '有 .env', hasSoulMd: '有 soul.md', noProfiles: '目前無設定檔,建立一個開始吧。', avatar: { title: '自訂頭像', customize: '頭像', upload: '上傳圖片', random: '隨機產生', reset: '恢復預設', hint: '支援 PNG、JPEG、WebP,最大 1MB', invalidType: '請選擇 PNG、JPEG 或 WebP 圖片', tooLarge: '頭像圖片不能超過 1MB', saveSuccess: '頭像已儲存', saveFailed: '儲存頭像失敗', resetSuccess: '已恢復預設頭像', resetFailed: '恢復預設頭像失敗', }, runtime: { activeProfile: '目前:{name}', bridgeWorker: '橋接狀態', gateway: '閘道', active: '使用中', activeTag: '目前', idle: '閒置', checking: '檢測中', running: '執行中', stopped: '已停止', restartGateway: '重啟閘道', restartProfile: '重啟設定檔', switchProfile: '切換前端設定檔', gatewayRestarted: '閘道已重啟:{name}', gatewayRestartFailed: '重啟閘道失敗', profileRestarted: '設定檔已重啟:{name}', profileRestartFailed: '重啟設定檔失敗', }, }, // 日誌 logs: { title: '日誌', all: '全部', searchPlaceholder: '搜尋...', refresh: '重新整理', noEntries: '目前無日誌', }, // 設定 settings: { title: '設定', saved: '已儲存', saveFailed: '儲存失敗', tabs: { display: '顯示', account: '目前帳號', users: '帳號管理', agent: '代理', memory: '記憶', compression: '上下文壓縮', session: '工作階段', privacy: '隱私', apiServer: 'API 伺服器', models: '模型', voice: '語音', }, models: { apiKey: 'API Key', apiKeyPlaceholder: '輸入 API Key', save: '儲存', saved: '已儲存', saveFailed: '儲存失敗', noProviders: '目前無已設定的模型', }, display: { streaming: '串流回應', streamingHint: '即時顯示 AI 回覆', compact: '緊湊模式', compactHint: '減少訊息間距', showReasoning: '顯示推理過程', showReasoningHint: '展示模型思考過程', showCost: '顯示費用', showCostHint: '在回覆中顯示 token 使用量', inlineDiffs: '內嵌差異', inlineDiffsHint: '程式碼變更以內嵌方式顯示', bellOnComplete: '完成提示音', bellOnCompleteHint: 'AI 回覆完成時播放提示音', busyInputMode: '忙碌輸入模式', busyInputModeHint: 'AI 處理中仍可輸入', theme: '主題', themeHint: '選擇淺色、暗色或跟隨系統', themeLight: '淺色', themeDark: '暗色', themeSystem: '跟隨系統', }, agent: { maxTurns: '最大輪次', maxTurnsHint: '單次對話最大互動輪數', gatewayTimeout: '閘道逾時', gatewayTimeoutHint: '單次請求逾時時間(秒)', restartDrainTimeout: '重啟排空逾時', restartDrainTimeoutHint: '重啟前排空請求的逾時時間(秒)', toolEnforcement: '工具執行策略', toolEnforcementHint: '控制工具呼叫的執行模式', auto: '自動', always: '始終', never: '從不', }, memory: { enabled: '啟用記憶', enabledHint: '允許 AI 記住對話上下文', userProfile: '使用者畫像', userProfileHint: '允許 AI 記住使用者偏好資訊', charLimit: '記憶字元上限', charLimitHint: 'MEMORY.md 最大字元數', userCharLimit: '使用者畫像字元上限', userCharLimitHint: 'USER.md 最大字元數', }, compression: { enabled: '啟用壓縮', enabledHint: '長對話接近模型上下文上限前自動壓縮歷史', threshold: '壓縮閾值', thresholdHint: '預估 token 超過上下文比例時開始壓縮', targetRatio: '目標比例', targetRatioHint: '壓縮後歷史保留到上下文的目標比例', protectLastN: '保護最近訊息', protectLastNHint: '最近多少則訊息不參與壓縮', protectFirstN: '保護開頭訊息', protectFirstNHint: '最早多少則訊息不參與壓縮', }, session: { mode: '重設模式', modeHint: '工作階段重設的觸發條件', modeBoth: '閒置 + 定時', modeIdle: '僅閒置', modeDaily: '僅定時', modeNone: '永不(僅手動)', idleMinutes: '閒置逾時', idleMinutesHint: '無操作後自動重設的等待時間(分鐘)', atHour: '定時重設時間', humanOnly: '僅顯示人類工作階段', humanOnlyHint: '預設隱藏子代理和工作階段監看雜訊', liveMonitorHumanOnly: '即時監看:僅顯示人類工作階段', liveMonitorHumanOnlyHint: '在即時監看中預設隱藏子代理和工作階段監看雜訊', atHourHint: '每天在指定小時重設工作階段', requireAuth: '工作階段授權', requireAuthHint: '修改工作階段操作是否授權', }, privacy: { redactPii: '遮蔽 PII', redactPiiHint: '自動偵測並隱藏敏感資訊(密碼、金鑰等)', }, apiServer: { enable: '啟用', enableHint: '啟用 API 伺服器', host: '主機', hostHint: '監聽位址', port: '連接埠', portHint: '監聽連接埠', key: '金鑰', keyHint: 'API 存取金鑰', cors: 'CORS 來源', corsHint: '允許的跨域來源', }, lockedIps: { title: '鎖定 IP 管理', count: '{count} 個 IP 被鎖定', empty: '目前無鎖定 IP', unlock: '解鎖', unlockAll: '全部解鎖', unlockAllConfirm: '確認解鎖所有鎖定的 IP?', unlocked: 'IP 已解鎖', allUnlocked: '已解鎖 {count} 個 IP', }, voice: { ttsProvider: 'TTS 提供者', ttsProviderHint: '選擇訊息朗讀使用的語音引擎', providerWebSpeech: 'WebSpeech API(瀏覽器內建)', providerOpenai: 'OpenAI TTS', providerCustom: '自訂端點(相容 OpenAI)', providerEdge: 'Edge TTS(免費,無需 API Key)', // WebSpeech webspeechVoice: '音色', webspeechVoiceHint: '從瀏覽器或系統提供的語音中選擇', webspeechVoicePlaceholder: '自動(預設語音)', // OpenAI openaiKey: 'API 金鑰', openaiKeyHint: '具有 TTS 權限的 OpenAI API Key', openaiUrl: 'API 基礎位址', openaiUrlHint: '例如 https://api.openai.com/v1/audio/speech', openaiModel: '模型', openaiModelHint: 'tts-1(快速)/ tts-1-hd(高音質)', openaiVoice: '音色', openaiVoiceHint: '用於語音合成的音色', // 自訂端點 customHint: '支援任何 OpenAI 相容的 TTS 服務——可用於 GPT-SoVITS、CosyVoice 等自部署服務。', customUrl: 'API 位址', customUrlHint: 'TTS 服務的完整基礎位址', customUrlPlaceholder: '本地適配器中設定的位址,如:http://127.0.0.1:9880', customApiKey: 'API 金鑰(選填)', customApiKeyHint: '部分自部署服務需要身份驗證', customApiKeyPlaceholder: '不需要則留空', // Edge TTS edgeHint: '由 Microsoft Edge TTS 驅動(node-edge-tts)。', edgeUrl: '適配器位址', edgeUrlHint: 'Edge TTS 適配器位址,例如 http://127.0.0.1:9882', edgeUrlPlaceholder: 'http://127.0.0.1:9882', edgeVoice: '音色', edgeVoiceHint: '選擇用於語音合成的音色', edgeRate: '語速', edgeRateHint: '調整語音速度(0.5~2.0 倍)', edgePitch: '音調', edgePitchHint: '調整語音音調(-20~+20 Hz)', // 試聽 testTitle: '試聽測試', testText: '測試文字', testTextPlaceholder: '輸入測試文字...', testTextDefault: '你好,這是一個語音測試。', testButton: '試聽', testButtonPlaying: '播放中...', testFailed: '測試失敗:{error}', // MiMo TTS providerMimo: 'MiMo TTS', mimoHint: '小米 MiMo TTS,支援預設音色、音色設計、音色複製三種模式', mimoApiKey: 'API Key', mimoApiKeyHint: '在 platform.xiaomimimo.com 取得', mimoApiKeyPlaceholder: 'MiMo API Key', mimoBaseUrl: 'Base URL', mimoBaseUrlHint: 'MiMo API 端點位址', mimoModel: '模型', mimoModelHint: '選擇語音合成模型', mimoModelPreset: '預設音色', mimoModelVoiceDesign: '音色設計', mimoModelVoiceClone: '音色複製', mimoVoice: '音色', mimoVoiceHint: '選擇預設音色', mimoVoiceDesignPrompt: '音色描述', mimoVoiceDesignPromptHint: '描述你想要的音色特徵', mimoVoiceDesignPromptPlaceholder: '例如:溫柔的年輕女聲,語速稍慢,帶著磁性', mimoCloneAudio: '上傳音訊', mimoCloneAudioHint: '上傳音訊樣本用於音色複製,支援 mp3/wav,最大 10MB', mimoCloneAudioUpload: '選擇檔案', mimoCloneAudioClear: '清除音訊', mimoStylePrompt: '風格指令', mimoStylePromptHint: '可選,用自然語言描述語音風格', mimoStylePromptPlaceholder: '例如:用輕快上揚的語調,語速稍快', }, }, githubPreview: { title: "版本預覽", description: "將選取的 GitHub tag 複製到 Web UI 預覽工作目錄,安裝依賴並以開發連接埠執行。", refresh: "重新整理", selectTag: "選擇 tag", prepare: "準備程式碼", install: "安裝依賴", start: "開啟預覽", stop: "停止", note: "預覽程式碼存放在 Web UI 資料目錄下。正式環境仍使用 8648,預覽開發環境使用前端 8651、後端 8650。", path: "預覽路徑", webuiHome: "預覽資料目錄", currentTag: "目前 Tag", repoReady: "倉庫就緒", dependencies: "依賴已安裝", running: "執行狀態", notRunning: "未執行", open: "開啟預覽", log: "操作日誌路徑", logOutput: "日誌輸出", actionLog: "操作日誌", devLog: "開發服務日誌", yes: "是", no: "否", actionFailed: "操作失敗", nodeEnvironmentMissing: "未偵測到可用的 Node/npm 環境,請先安裝 Node.js 後重試。", prepareSuccess: "預覽程式碼已準備好", installSuccess: "依賴安裝完成", startSuccess: "預覽已啟動", stopSuccess: "預覽已停止", }, codingAgents: { title: "編程工具", notice: "並非所有提供商和模型都相容。", claudeDescription: "Anthropic CLI,適合 print mode 單次任務和互動式編程工作階段。", codexDescription: "OpenAI CLI,以及 Hermes openai-codex 提供商的倉庫任務流程。", copyCommand: "複製", commandCopied: "命令已複製", commandCopyFailed: "複製失敗", refresh: "重新整理", checking: "偵測中", installStatus: "安裝狀態", installed: "已安裝", notInstalled: "未安裝", installNow: "安裝", installing: "安裝中", installSuccess: "安裝完成", installFailed: "安裝失敗", nodeEnvironmentMissing: "未偵測到可用的 Node/npm 環境,請先安裝 Node.js 後重試。", deleteNow: "刪除", deleting: "刪除中", deleteSuccess: "刪除完成", deleteFailed: "刪除失敗", configFiles: "設定檔", profileScope: "設定", providerScope: "提供商", providerPlaceholder: "例如 custom:glm", modelScope: "模型", modelPlaceholder: "選擇模型", launchModeScope: "啟動方式", launchModeGlobal: "全域預設設定", launchModeScoped: "選擇提供商和模型", protocolScope: "協議", protocolOpenAiChat: "OpenAI Chat Completions (/v1/chat/completions)", protocolOpenAiResponses: "OpenAI Responses (/v1/responses)", protocolAnthropicMessages: "Anthropic Messages (/v1/messages)", reloadConfig: "重新讀取設定", configFileNotCreated: "未建立", configLoadFailed: "讀取設定檔失敗", loadFailed: "偵測編程工具失敗", launch: "啟動", launchTitle: "啟動編程工具", nativeTerminal: "原生終端機", builtInTerminal: "內建終端機", launchPrepared: "啟動設定已產生", launchPrepareFailed: "產生啟動設定失敗", nativeLaunchStarted: "已開啟原生終端機", nativeLaunchFailed: "開啟原生終端機失敗", terminalTitle: "編程工具終端機", loadProvidersFailed: "讀取目前設定的提供商失敗", selectProviderModel: "請選擇提供商和模型", launchConfigDir: "啟動設定目錄", launchCommand: "啟動命令", table: { tool: "工具", kind: "步驟", command: "命令", note: "說明", action: "操作", }, kinds: { install: "安裝", auth: "認證", health: "檢查", run: "執行", }, notes: { claudeInstall: "全域安裝 Claude Code CLI。", codexInstall: "全域安裝 Codex CLI。", claudeAuth: "檢查 Claude Code 登入狀態;未登入時先執行 claude。", codexAuth: "新增 Hermes 管理的 OpenAI Codex OAuth 憑證。", claudeHealth: "檢查自動更新器和本機 CLI 健康狀態。", codexHealth: "確認 Codex CLI 已在 PATH 中可用。", claudeRun: "Print mode 最適合 API 驅動的單次任務。", codexRun: "Codex 單次任務需要在 git 倉庫中執行。", }, }, // 平台頻道設定 platform: { requireMention: "需要 {'@'}提及", requireMentionGroup: "群組中需要 {'@'}機器人 才會回應", requireMentionChannel: "頻道中需要 {'@'}機器人 才會回應", requireMentionRoom: "房間中需要 {'@'}機器人 才會回應", reactions: '表情回應', reactionsHint: '對訊息新增表情回應', freeResponseChats: '自由回應聊天', freeResponseChatsHint: "不需要 {'@'}提及即回應的聊天 ID(逗號分隔)", freeResponseChannels: '自由回應頻道', freeResponseChannelsHint: "不需要 {'@'}提及即回應的頻道 ID(逗號分隔)", freeResponseRooms: '自由回應房間', freeResponseRoomsHint: "不需要 {'@'}提及即回應的房間 ID(逗號分隔)", mentionPatterns: '自訂提及模式', mentionPatternsHint: '額外的觸發模式清單', autoThread: '自動建立討論串', autoThreadHint: "{'@'}提及後自動建立回覆討論串", autoThreadHintRoom: '在房間中自動建立回覆討論串', dmMentionThreads: 'DM 提及討論串', dmMentionThreadsHint: '在私聊中也使用討論串回覆提及', allowBots: '允許機器人訊息', allowBotsHint: '回應其他機器人傳送的訊息', allowedChannels: '允許的頻道', allowedChannelsHint: '白名單頻道 ID(逗號分隔)', ignoredChannels: '忽略的頻道', ignoredChannelsHint: '不回應的頻道 ID(逗號分隔)', noThreadChannels: '無討論串頻道', noThreadChannelsHint: '不建立討論串的頻道 ID(逗號分隔)', exclusiveTokenWarning: '此平台使用獨占 token 鎖。每個 profile 必須使用不同的身份 token,否則會與其他 profile 衝突導致 gateway 啟動失敗。', botToken: 'Bot Token', botTokenHint: '開發者入口網站取得的 Bot Token', accessToken: 'Access Token', accessTokenHint: 'Matrix Access Token', homeserver: 'Homeserver URL', homeserverHint: 'Matrix 伺服器位址', appId: 'App ID', appIdHint: '飛書 App ID', appSecret: 'App Secret', appSecretHint: '飛書 App Secret', clientId: 'Client ID', clientIdHint: '釘釘 Client ID', clientSecret: 'Client Secret', clientSecretHint: '釘釘 Client Secret', cardTemplateId: 'AI 卡片範本 ID', cardTemplateIdHint: '釘釘 AI 卡片範本 ID;留空則不啟用 AI 卡片', allowedUsers: '允許使用者', allowedUsersHint: '使用者 ID 或 OpenID 白名單,多個請用英文逗號分隔', allowAllUsers: '允許所有使用者', allowAllUsersHint: '允許任意使用者發起訊息;關閉後使用白名單', botId: 'Bot ID', botIdHint: '企業微信 Bot ID', wecomSecretHint: '企業微信 Bot Secret', waEnabled: '啟用 WhatsApp', waEnabledHint: '透過 QR Code 配對啟用 WhatsApp', weixinToken: '微信 Token', weixinTokenHint: '透過 weixin CLI 掃碼登入取得 (hermes weixin)', accountId: 'Account ID', accountIdHint: '微信 Account ID', qrLogin: '掃碼登入', qrRelogin: '重新登入', qrFetching: '正在取得 QR Code...', qrScanHint: '使用微信掃描 QR Code 登入', qrScanedHint: '已掃描,請在手機上確認...', // QQ qqAppId: 'App ID', qqAppIdHint: 'QQ 開放平台機器人 App ID', qqAppSecret: 'App Secret', qqAppSecretHint: 'QQ 開放平台機器人 App Secret', qqMarkdown: 'Markdown 支援', qqMarkdownHint: '啟用 Markdown 格式訊息(部分客戶端可能不支援)', qqSandbox: '沙箱模式', qqSandboxHint: '啟用沙箱環境(測試用)', qqQrScanHint: '使用 QQ 掃描上方 QR Code,或在手機上開啟連結完成綁定', }, // 閘道 gateways: { title: '閘道', running: '執行中', stopped: '已停止', started: '已啟動', startFailed: '啟動失敗', stopFailed: '停止失敗', }, // 語言 language: { label: '語言', zh: '中文(簡體)', 'zh-TW': '繁體中文', en: 'English', }, // 終端機 terminal: { sessions: '工作階段', newTab: '新增終端機', closeSession: '關閉此工作階段?', sessionExited: '已退出', processExited: '程序已退出,代碼 {code}', noSessions: '目前無終端機工作階段', connectionFailed: '終端機服務連線失敗', connectionClosed: '終端機連線已關閉', connectionError: '終端機連線錯誤', }, // 群聊 groupChat: { title: '群聊', createRoom: '建立房間', joinByCode: '透過邀請碼加入', roomName: '房間名稱', roomNamePlaceholder: '輸入房間名稱', inviteCode: '邀請碼', autoGenerate: '自動產生', noRooms: '目前無房間', selectOrCreate: '選擇或建立一個房間開始聊天', agents: '智慧代理', addAgent: '新增智慧代理', selectProfile: '選擇一個設定檔', agentAdded: '智慧代理已新增', agentAlreadyInRoom: '該智慧代理已在房間中', agentAddFailedCount: '{count} 個智慧代理未新增:{details}', noAgents: '目前房間無智慧代理', members: '成員', roomCreated: '房間已建立', roomDeleted: '房間已刪除', roomCloned: '房間已複製', cloneRoom: '複製房間', copyRoomLink: '複製房間連結', deleteRoomConfirm: '確定刪除這個房間嗎?', clearContext: '清理上下文', clearContextConfirm: '確定清理目前房間上下文嗎?訊息和壓縮快照會被刪除,智慧代理和成員會保留。', contextCleared: '上下文已清理', you: '你', joined: '已加入房間', joinFailed: '加入房間失敗', inputPlaceholder: '輸入訊息... (Enter 發送)', enterCode: '輸入邀請碼', yourName: '你的名稱', yourNamePlaceholder: '輸入你的群聊暱稱', yourDescription: '自我介紹(選填)', yourDescriptionPlaceholder: '介紹一下你自己...', agentName: 'Agent 名稱', agentNamePlaceholder: '自訂名稱(留空則使用 profile 名稱)', agentDesc: 'Agent 描述', agentDescPlaceholder: '描述這個 agent 的作用...', agentReplying: '正在回覆...', agentCompressing: '正在壓縮上下文...', compressionSettings: '壓縮設定', triggerTokens: '觸發壓縮 Token 數', triggerTokensDesc: '訊息 token 數超過此值時觸發上下文壓縮', maxHistoryTokens: '最大歷史 Token 數', maxHistoryTokensDesc: '壓縮後傳送給 LLM 的最大 token 數', tailMessageCount: '保留最近訊息數', tailMessageCountDesc: '壓縮後保留最近的原始訊息條數', compressionConfig: '壓縮設定', compressionSaved: '壓縮設定已儲存', compressNow: '立即壓縮', compressingInProgress: '正在壓縮中,請稍後', }, // 用量統計 usage: { title: '用量統計', refresh: '重新整理', totalTokens: '總 Token 數', inputTokens: '輸入', outputTokens: '輸出', totalSessions: '總工作階段數', avgPerDay: '日均 ~{n}', estimatedCost: '預估費用', cacheHitRate: '快取命中率', modelBreakdown: '模型分布', dailyTrend: '每日用量', date: '日期', tokens: 'Token', cache: '快取', cacheRead: '快取讀取', cacheWrite: '快取寫入', sessions: '工作階段', cost: '費用', noData: '目前無用量資料', }, skillsUsage: { title: '技能用量', subtitle: '追蹤 Hermes 工作階段中的技能載入與編輯', refresh: '重新整理', periodSelector: '技能用量期間', periodLabel: '{days}天', summary: '總覽', totalActions: '操作', loads: '載入', edits: '編輯', distinctSkills: '技能數', topSkills: '熱門', dailyTrend: '趨勢', periodSummary: '最近 {days} 天', skill: '技能', share: '占比', lastUsed: '最近', noData: '暫無技能用量資料', loadFailed: '技能用量載入失敗', otherSkills: '其他技能', }, // 檔案管理 files: { title: '檔案', fileTree: '檔案樹', tree: '目錄樹', list: '檔案清單', breadcrumbRoot: '根目錄', newFile: '新增檔案', newFolder: '新增資料夾', upload: '上傳', refresh: '重新整理', open: '開啟', edit: '編輯', preview: '預覽', download: '下載', copyPath: '複製路徑', rename: '重新命名', delete: '刪除', name: '名稱', size: '大小', modified: '修改時間', actions: '操作', emptyDir: '空目錄', loading: '載入中...', confirmDelete: '確定要刪除「{name}」嗎?', confirmDeleteDir: '確定要刪除目錄「{name}」及其所有內容嗎?', deleteFailed: '刪除失敗', deleted: '已刪除', renameTo: '重新命名為', newFileName: '檔案名稱', newFolderName: '資料夾名稱', created: '已建立', createFailed: '建立失敗', renamed: '已重新命名', renameFailed: '重新命名失敗', uploadSuccess: '已上傳 {count} 個檔案', uploadFailed: '上傳失敗', saveFailed: '儲存失敗', saved: '已儲存', unsavedChanges: '有未儲存的變更,是否捨棄?', pathCopied: '路徑已複製', fileTooLarge: '檔案過大(最大 10MB)', permissionDenied: '無法修改受保護的檔案', notFound: '檔案或目錄不存在', backendError: '檔案操作失敗', dragDropHint: '拖曳檔案至此處上傳', closeEditor: '關閉編輯器', closePreview: '關閉', saveFile: '儲存', }, // 下載 download: { downloading: '正在下載...', downloadFailed: '下載失敗', fileNotFound: '檔案不存在或已被刪除', fileTooLarge: '檔案過大(超過限制)', backendError: '檔案讀取失敗,遠端環境可能不可用', backendTimeout: '檔案讀取逾時', unsupportedBackend: '目前 terminal backend 暫不支援檔案下載', invalidPath: '無效的檔案路徑', contentDisplay: '內容展示', download: '下載', downloadFile: '下載檔案', }, // 更新日誌 changelog: { new_0_6_7_1: '桌面版預設使用 8748 連接埠,支援區域網路內存取,也可以直接用本機瀏覽器開啟 Web UI', new_0_6_7_9: '桌面端下載入口已補充到官網 https://ekkolearnai.com/,也可以繼續從 GitHub Releases 取得最新安裝包', new_0_6_7_2: 'MCP 工具鏈繼續完善:修復 bridge 工具發現與 MCP 管理生命週期,並在管理頁支援按模型控制工具可見性', new_0_6_7_3: '訊息列表體驗優化:修復空狀態置中、捲動抖動、歷史會話載入串訊息,並在切換會話時保留捲動位置與 1.5 秒淡入效果', new_0_6_7_4: 'Bridge 與執行狀態更穩定:保持文字和 tool-call 順序、修復 Profile runtime 狀態載入、改進 Node/npm 偵測,並避免正式環境自動建立資料目錄', new_0_6_7_5: 'Desktop 發佈鏈路補齊 Electron 打包、應用命名、preload 建置、release artifact 上傳、Windows Hermes CLI 啟動、Linux 圖示與可寫資料路徑、macOS 無憑證跳過簽名和 Windows 啟動無視窗體驗', new_0_6_7_6: '官網發佈支援下載頁和部署工作流,並修復沒有 rsync 的環境下部署失敗的問題', new_0_6_7_7: '服務端與認證修復:Windows 憑據目錄使用 dirname 解析,頭像上傳 body 限制提高,避免大圖觸發 413', new_0_6_7_8: '補充 coding agents 倉庫 harness、驗證文件和 agent 指南,同時移除過期 setup script 文件', new_0_6_4_1: 'CI 流程加固:PR 檢查固定 npm 安裝路徑,並補齊 Docker smoke 校驗', new_0_6_4_2: '聊天訊息列表新增虛擬分頁,長工作階段捲動與載入更穩定', new_0_6_4_3: 'Docker 映像發布改為僅在 release 場景執行,避免一般 PR 觸發發布流程', new_0_6_4_4: '新增版本預覽工作流:超級管理員可選擇 main 或 GitHub tag,準備預覽程式碼、安裝依賴、啟動/停止預覽並查看日誌', new_0_6_4_5: '預覽實例隔離前後端連接埠、Web UI home 與 agent bridge endpoint,並在執行時修補舊版本的連接埠、WebSocket、base URL 與巢狀預覽入口', new_0_6_4_6: '修復 legacy session_usage 表缺少 created_at 時的遷移問題,舊資料會以預設值補齊', new_0_6_4_7: '預覽與正式環境的 bridge profile worker endpoint 會依 broker 隔離,避免同名 Profile 並發聊天時互相搶占導致 unknown run', new_0_6_5_1: 'Coding Agents 新增完整啟動工作流:支援 Claude Code 與 Codex、全域設定啟動、按設定/提供商隔離的工作區,以及內建/原生終端機啟動', new_0_6_5_2: 'Codex 啟動補齊 OpenAI Chat Completions、OpenAI Responses 和 Anthropic Messages 三種協議,並透過本機代理適配不同提供商', new_0_6_5_3: 'Windows 下 Coding Agents 安裝偵測與終端機啟動更穩定,支援 .cmd/.bat shim,Claude Code 自訂模型啟動也避開本機型號校驗', new_0_6_5_4: '訊息列表、History 分頁、TTS 認證、群聊 agent 提及、版本檢查開關和 bridge worker transport 等執行體驗繼續完善', new_0_6_3_1: 'Bridge spinner 狀態不再寫入模型 reasoning,避免裝飾性 thinking 文字污染後續上下文', new_0_6_3_2: 'History 新增 Hermes CLI 工作階段匯入控制,並在匯入時更安全地規範化訊息結構', new_0_6_3_3: 'Provider 設定支援編輯內建 base URL,新增 LM Studio 內建 Provider,並支援從 LM Studio /models 即時發現模型', new_0_6_3_4: '透過 Web UI bridge 發起的 OpenRouter 請求會攜帶 Hermes Web UI 應用歸因 headers', new_0_6_3_5: '公開 auth status 介面不再向未登入請求暴露第一個使用者名稱', new_0_6_3_6: '釘釘設定新增 AI Card Template ID,並持久化為 DINGTALK_CARD_TEMPLATE_ID', new_0_6_3_7: 'Bridge socket JSON 輸出會清洗孤立 Unicode surrogate 字元,避免聊天 SSE 崩潰', new_0_6_2_1: 'Web Bridge 支援 /plan 命令,計畫命令會正確啟動並顯示執行狀態', new_0_6_2_2: '聊天輸入框指令選單新增 /goal 和 /subgoal,支援狀態、暫停、恢復、完成和清空等操作', new_0_6_2_3: 'Goal 與 subgoal 工作流接入聊天工作階段,支援目標延續與狀態更新', new_0_6_2_4: '修復任務投遞目標渠道選項,排程任務可以選擇正確的投遞位置', new_0_6_2_5: '上下文 token 用量在重新連線後會依快照感知邏輯準確恢復', new_0_6_2_6: '上下文檢查點壓縮對較慢的 Codex 摘要更穩定:Web UI 等待 5 分鐘,Python bridge broker 不再於 2 分鐘後提前切斷 worker 請求', new_0_6_2_7: '修復聊天佇列推進,queued 訊息不會提前跳入訊息列表,多視窗同步場景也保持一致', new_0_6_2_8: 'Clarify 彈窗輸入框不再按 Enter 直接提交,已回覆的 Clarify 也不會在切換工作階段後重複彈出', new_0_6_2_9: 'Bridge 終端環境刷新與 stale pid 清理收斂到更準確的作用域,減少前端執行狀態殘留', new_0_6_2_10: '預設上下文長度遵循 Hermes 規範,調整為 256,000 tokens', new_0_5_35_1: 'Bridge 工作階段支援不同 session 並發執行,同一 session 仍保持串行以避免訊息順序錯亂', new_0_5_35_2: '新增「效能監控」頁面,可查看系統 CPU/記憶體、Web UI、Bridge Broker、Workers 和活躍工作階段狀態', new_0_5_35_3: '新增 Worker 級資源統計,展示每個 worker 的 CPU、記憶體、Profile、工作階段數和執行狀態', new_0_5_35_4: '最佳化 Bridge worker 生命週期清理,Broker 關閉或父行程退出時會回收 worker,減少殘留 Python 行程', new_0_5_35_5: '監控介面增強跨平台相容,支援 macOS、Windows、Linux、Docker 和 Termux 的資源採集降級', new_0_5_35_6: '效能監控不再因 Agent 初始化中的 worker 請求而阻塞,降低 Windows 上 request timed out 的機率', new_0_5_35_7: '聊天 Markdown 新增文字內容內嵌預覽,下載圖示會直接下載檔案,避免被預覽抽屜攔截', new_0_5_35_8: '最佳化內容展示抽屜:行動端全寬並提供關閉入口,桌面端加寬到 800px,文字與 Markdown 背景保持一致', new_0_6_0_1: '分帳戶、分 Profile 管理現在一致保護工作階段、模型、用量、看板、任務、上傳、媒體與相關 Hermes API', new_0_6_0_2: '內建媒體 Skills 只會在媒體端點使用產生的伺服器 token,並依請求的 Profile 讀取 fun-codex/xAI 憑證', new_0_6_0_3: '單聊與群聊都會把目前 Hermes Profile 注入執行提示,方便 Skills 請求時帶上 X-Hermes-Profile', new_0_6_0_4: 'delegate_task 的 subagent 進度會即時顯示在聊天介面,包含開始、工具、進度與完成狀態', new_0_6_0_5: '停止或中止執行時會清理暫時事件,避免舊的 abort 狀態帶入下一次聊天', new_0_6_0_6: '同步更新文件與官網文案,涵蓋帳戶管理、預設憑證、分帳戶分 Profile 管理、上傳下載與內建媒體 Skills', new_0_6_0_7: '新增 CLI 維護命令,用於清理登入 IP 鎖與重設預設 admin / 123456 登入帳戶', new_0_6_0_8: '0.6.0 是 Web UI 從單使用者走向多使用者的分界版本;如果多使用者模式遇到問題,請提交 issue,必要時可回退到 0.5.35 單使用者版本', new_0_6_1_1: '會話列表預設顯示目前帳戶可用的全部 Profile;只有明確選擇 Profile 篩選時才會限定 Profile,同時 CLI start/stop/status 不再列印 node:sqlite 實驗警告', new_0_6_1_2: 'Clarify 與確認回覆現在會透過已鑑權的聊天 socket 傳到 Hermes bridge,並補上回應鏈路測試', new_0_6_1_3: '導覽項目與聊天會話列改用原生連結,支援新分頁開啟、複製連結,並保留側邊欄摺疊狀態', new_0_6_1_4: '會話連結不再把路由 Profile 洩漏到一般會話列表篩選,並補齊「在新分頁開啟」多語文案', new_0_6_1_5: 'Skills 會讀取目前 Profile config 中的 skills.external_dirs,標記 external 來源,保留本地優先,並支援讀取外部 skill 檔案', new_0_6_1_6: '登入 IP 鎖定門檻提高到 10 次失敗,鎖定後的登入頁會提示清除鎖定與重設預設登入的復原命令', new_0_6_1_7: '行動端或背景造成的聊天斷線會視為暫時斷線,重連後從服務端恢復執行狀態', new_0_6_1_8: 'Bridge 工具標記 flush 會在工具與執行邊界持久化殘留的工具呼叫前綴,避免重新整理後內容截斷', new_0_6_1_9: 'History 與會話刪除改為帶上 Profile 精確目標,並在全域 Profile 切換時刷新歷史頁', new_0_6_1_10: '移除舊的 AUTH_DISABLED 認證繞過以符合多使用者權限模型,同時保留 AUTH_TOKEN 支援', }, }