Files
aiturk-hermes-ide/apps/desktop/src/i18n/zh-hant.ts
T

3185 lines
140 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineFieldCopy } from '@/app/settings/field-copy'
import { defineLocale } from './define-locale'
export const zhHant = defineLocale({
common: {
apply: '套用',
back: '返回',
save: '儲存',
saving: '儲存中…',
cancel: '取消',
change: '變更',
choose: '選擇',
clear: '清除',
close: '關閉',
collapse: '收合',
confirm: '確認',
connect: '連線',
connecting: '連線中',
continue: '繼續',
copied: '已複製',
copy: '複製',
copyFailed: '複製失敗',
delete: '刪除',
docs: '文件',
done: '完成',
error: '錯誤',
expand: '展開',
failed: '失敗',
formatJson: '格式化 JSON',
free: '免費',
loading: '載入中…',
notSet: '未設定',
refresh: '重新整理',
remove: '移除',
replace: '取代',
retry: '重試',
run: '執行',
send: '傳送',
set: '設定',
skip: '略過',
update: '更新',
tryHint: term => `試試「${term}」`,
on: '開啟',
off: '關閉'
},
fileMenu: {
revealFinder: '在 Finder 中顯示',
revealExplorer: '在檔案總管中顯示',
revealFileManager: '開啟所在資料夾',
revealInSidebar: '在檔案樹中顯示',
copyPath: '複製路徑',
copyRelativePath: '複製相對路徑',
download: '下載',
downloadSaved: '已儲存',
downloadFailed: '下載失敗',
rename: '重新命名…',
delete: '刪除',
renameTitle: '重新命名',
renameLabel: '新名稱',
deleteTitle: name => `刪除 ${name}?`,
deleteBody: '將移至垃圾桶,你可以從那裡還原。',
pathCopied: '已複製路徑'
},
boot: {
ready: 'Hermes Desktop 已就緒',
desktopBootFailedWithMessage: message => `桌面啟動失敗:${message}`,
steps: {
connectingGateway: '正在連線桌面閘道',
loadingSettings: '正在載入 Hermes 設定',
loadingSessions: '正在載入最近工作階段',
retryingRemoteBackend: '正在重新連線遠端 Hermes 後端…',
startingDesktopConnection: '正在啟動桌面連線',
startingHermesDesktop: '正在啟動 Hermes Desktop…'
},
errors: {
backgroundExited: 'Hermes 背景程序已結束。',
backgroundExitedDuringStartup: 'Hermes 背景程序在啟動期間結束。',
backendStopped: '後端已停止',
desktopBootFailed: '桌面啟動失敗',
gatewayConnectionLost: '與閘道的連線已中斷',
gatewayConnectionLostDetail:
'Still retrying in the background. You can keep reading and drafting — open Gateway settings if this persists.',
gatewaySignInRequired: '需要閘道登入',
ipcBridgeUnavailable: '桌面 IPC 橋接器不可用。'
},
failure: {
title: 'Hermes 無法啟動',
description: '背景閘道未啟動。請嘗試下面的復原步驟。這裡的操作不會刪除您的聊天或設定。',
remoteTitle: '需要重新登入遠端閘道',
remoteDescription: '您的遠端閘道工作階段已過期。請重新登入以重新連線。這裡的操作不會刪除您的聊天或設定。',
retry: '重試',
repairInstall: '修復安裝',
useLocalGateway: '使用本機閘道',
gatewaySettings: '閘道設定',
back: '返回',
openLogs: '開啟記錄',
repairHint: '修復會重新執行安裝程式,在新機器上可能需要幾分鐘。',
remoteSignInHint: signInLabel =>
`先登出已儲存的遠端瀏覽器工作階段,然後開啟${signInLabel}。使用本機閘道可切換至內建後端。`,
signOutAndSignIn: '登出並重新登入',
remoteFailureHint: '在「閘道設定」中檢查閘道 URL 與登入,或切換至本機閘道。',
cloudDownTitle: 'Nous Cloud 代理已停機',
cloudDownDescription:
'此閘道連線的 Nous 託管雲端代理正在回傳伺服器錯誤。無法在此處重新啟動——請檢查其狀態、切換至本機閘道,或取得支援。',
cloudDownHint: '使用下方按鈕開啟 Nous Portal(檢視執行個體狀態與操作)或加入 Discord 取得支援。',
cloudDownCheckPortal: '查看 Portal 狀態',
cloudDownDiscord: '在 Discord 取得協助',
hideRecentLogs: '隱藏最近記錄',
showRecentLogs: '顯示最近記錄',
signedInTitle: '已登入',
signedInMessage: '正在重新連線至遠端閘道…',
signInIncompleteTitle: '登入未完成',
signInIncompleteMessage: '登入視窗在驗證完成前關閉。',
signInFailed: '登入失敗',
signInToRemoteGateway: '登入遠端閘道',
signInWithProvider: provider => `使用 ${provider} 登入`,
identityProvider: '您的身分提供方'
}
},
notifications: {
region: '通知',
hide: '隱藏',
show: '顯示',
more: count => `另外 ${count} 則通知`,
clearAll: '全部清除',
dismiss: '關閉通知',
details: '詳細資訊',
copyDetail: '複製詳情',
copyDetailFailed: '無法複製通知詳情',
backendOutOfDateTitle: '後端版本過舊',
backendOutOfDateMessage: '您的 Hermes 後端早於目前的桌面版本,可能無法正常運作。請更新以保持一致。',
installMethodUnsupportedTitle: '不受支援的安裝方式',
updateHermes: '更新 Hermes',
updateReadyTitle: '有可用更新',
updateReadyMessage: count => `有 ${count} 項新變更可用。`,
updateReadyMessageUnknown: '有新更新可用。',
seeWhatsNew: '查看新增內容',
mcp: {
needsAuthTitle: 'MCP 伺服器需要重新驗證',
needsAuthMessage: name => `${name} MCP 需要重新驗證。`,
errorTitle: 'MCP 伺服器無法連線',
errorMessage: name => `${name} MCP 健康檢查失敗。`,
signIn: '登入',
view: '檢視'
},
errors: {
elevenLabsNeedsKey: 'ElevenLabs STT 需要 ELEVENLABS_API_KEY。',
elevenLabsRejectedKey: 'ElevenLabs 拒絕了該 API 金鑰 (401)。',
diskFull: '磁碟已滿 — 請騰出一些空間後再試。',
gatewayAuthFailed: '閘道認證失敗 — 請檢查你的 API_SERVER_KEY。',
methodNotAllowed: '桌面後端拒絕了該請求 (405 Method Not Allowed)。請嘗試重新啟動 Hermes Desktop。',
microphonePermission: '麥克風權限已被拒絕。',
openaiRejectedApiKey: 'OpenAI 拒絕了該 API 金鑰。',
openaiRejectedApiKeyWithStatus: status => `OpenAI 拒絕了該 API 金鑰 (${status} invalid_api_key)。`,
openaiTtsNeedsKey: 'OpenAI TTS 需要 VOICE_TOOLS_OPENAI_KEY 或 OPENAI_API_KEY。',
codeSkewRestartRequired: '更新後此後端仍在執行舊程式碼。請重新啟動以載入新程式碼。'
},
voice: {
configureSpeechToText: '設定語音轉文字後即可使用語音模式。',
couldNotStartSession: '無法啟動語音工作階段',
microphoneAccessDenied: '麥克風存取被拒絕。',
microphoneConstraintsUnsupported: '此裝置不支援目前的麥克風限制條件。',
microphoneFailed: '麥克風發生錯誤',
microphoneInUse: '麥克風正被其他應用程式使用中。',
microphonePermissionDenied: '麥克風權限被拒絕。',
microphoneStartFailed: '無法開始麥克風錄音。',
microphoneUnsupported: '目前執行環境不支援麥克風錄音。',
noMicrophone: '找不到麥克風。',
noSpeechDetected: '未偵測到語音',
playbackFailed: '語音播放失敗',
recordingFailed: '語音錄製失敗',
sayStopToEnd: phrase => `說「${phrase}」即可結束語音對話。`,
transcriptionFailed: '語音轉寫失敗',
transcriptionUnavailable: '語音轉寫暫不可用。',
tryRecordingAgain: '請再錄製一次。',
unavailable: '語音不可用'
},
native: {
approvalTitle: '需要核准',
approveAction: '核准',
rejectAction: '拒絕',
inputTitle: '需要輸入',
inputBody: 'Hermes 正在等待你的回應。',
turnDoneTitle: 'Hermes 已完成',
turnDoneBody: '',
turnErrorTitle: '本輪失敗',
backgroundDoneTitle: '背景工作已完成',
backgroundFailedTitle: '背景工作失敗',
creditsTitle: '額度'
}
},
remoteDisplayBanner: {
message: reason => `軟體繪圖已啟用 — 偵測到遠端顯示(${reason})。為防止畫面閃爍,已停用 GPU 加速。`
},
billingBlock: {
titleNous: 'Nous 額度已用盡',
titleProvider: provider => `額度已用盡 — ${provider}`,
fallbackMessage: '您的帳戶額度已用盡。請儲值以繼續使用。',
openBilling: '開啟帳單',
addCredits: '新增額度',
dismiss: '忽略'
},
sendDiagnostics: {
title: '向 Nous 傳送診斷資訊',
privacyNotice:
'這會將偵錯套件上傳到 Nous 內部儲存空間(並非公開貼上板)。內容包括系統資訊(作業系統、版本、服務商、已設定的 API 金鑰種類 — 絕不包含金鑰本身)以及完整的 agent、gateway 與桌面端日誌(每個最多 512 KB,很可能包含對話內容、工具輸出與檔案路徑)。上傳前會先遮罩機密資訊。僅 Nous 員工與獲准的 Discord 版主可檢視,14 天後自動刪除。',
upload: '上傳',
uploading: '上傳中…',
cancel: '取消',
close: '關閉',
copyLink: '複製連結',
uploadIdFallback: id => `未回傳檢視連結 — 請向支援人員提供上傳 ID ${id}`,
doneTitle: '診斷資訊已傳送',
doneDescription: '偵錯套件已私密上傳。在您的支援討論串中分享以下連結,團隊即可檢視您的日誌。',
failedTitle: '上傳失敗',
failedHint:
'您也可以在終端機執行 `hermes debug share --nous`,或執行 `hermes debug share --local` 在不上傳的情況下檢視報告。',
handoffLead: '在以下位置繼續討論:',
links: {
github: 'GitHub Issues',
portal: 'Nous Portal 支援',
discord: 'Discord'
}
},
titlebar: {
hideSidebar: '隱藏側邊欄',
showSidebar: '顯示側邊欄',
search: '搜尋',
searchTitle: '搜尋工作階段、檢視和動作',
swapSidebarSides: '交換側邊欄位置',
hideRightSidebar: '隱藏右側邊欄',
showRightSidebar: '顯示右側邊欄',
unreadSessions: count => (count === 1 ? '1 個未讀工作階段' : `${count} 個未讀工作階段`),
muteHaptics: '靜音觸感回饋',
unmuteHaptics: '開啟觸感回饋',
openSettings: '開啟設定',
openStarmap: '開啟記憶圖譜',
resetHudLayout: '重設 HUD 大小和位置'
},
language: {
label: '語言',
description: '選擇桌面介面的語言。',
saving: '正在儲存語言…',
saveError: '語言更新失敗',
switchTo: '切換語言',
searchPlaceholder: '搜尋語言…',
noResults: '找不到語言'
},
settings: {
closeSettings: '關閉設定',
exportConfig: '匯出設定',
importConfig: '匯入設定',
resetToDefaults: '恢復預設值',
resetConfirm: '要將所有設定恢復為 Hermes 預設值嗎?',
exportFailed: '匯出失敗',
resetFailed: '重設失敗',
nav: {
providers: '提供方',
providerAccounts: '帳號',
providerApiKeys: 'API 金鑰',
providerCustomEndpoints: '自訂端點',
providerLocalModels: '本地模型',
gateway: '閘道',
apiKeys: '工具與金鑰',
keybinds: '鍵盤快捷鍵',
keysTools: '工具',
keysSettings: '設定',
mcp: 'MCP',
archivedChats: '已封存聊天',
about: '關於',
billing: '帳單',
notifications: '通知'
},
notifications: {
title: '通知',
intro: '原生桌面通知,與應用程式內提示不同。設定會依裝置保存,每台電腦各自獨立。',
enableAll: '啟用通知',
enableAllDesc: '關閉後靜音下方所有通知。',
focusedHint: '完成提醒僅在 Hermes 位於背景時觸發。',
kinds: {
approval: {
label: '需要核准',
description: '有指令正在等待你核准或拒絕。'
},
input: {
label: '需要輸入',
description: 'Hermes 提出了問題,或需要密碼或密鑰。'
},
turnDone: {
label: '回覆就緒',
description: 'Hermes 在背景時完成了一輪對話。'
},
turnError: {
label: '本輪失敗',
description: '背景回合錯誤。'
},
backgroundDone: {
label: '背景工作完成',
description: '背景終端機指令已完成。'
},
credits: {
label: '額度提醒',
description: '額度存取被暫停或恢復。'
},
plugin: {
label: '外掛通知',
description: 'Hermes 在背景時,桌面外掛傳送了通知。'
}
},
test: '傳送測試通知',
testTitle: 'Hermes',
testBody: '通知運作正常。',
testSent: '測試已傳送。若沒有出現,請檢查系統通知權限與專注模式/勿擾模式。',
testUnsupported: '此系統不支援原生通知。',
completionSoundTitle: '完成提示音',
completionSoundDesc: '代理回合結束時播放。可在此選擇預設並預覽。',
completionSoundPreview: '預覽'
},
sections: {
model: '模型',
chat: '聊天',
appearance: '外觀',
workspace: '工作區',
safety: '安全性',
memory: '記憶與上下文',
voice: '語音',
advanced: '進階'
},
searchPlaceholder: {
about: '關於 Hermes Desktop',
config: '搜尋設定…',
gateway: '閘道連線…',
keys: '搜尋 API 金鑰…',
mcp: '搜尋 MCP 伺服器…',
sessions: '搜尋已封存工作階段…'
},
modeOptions: {
light: { label: '明亮', description: '明亮的桌面介面' },
dark: { label: '深色', description: '降低眩光的工作區' },
system: { label: '跟隨系統', description: '跟隨作業系統外觀' }
},
appearance: {
title: '外觀',
intro: '這些是僅限桌面端的顯示偏好。模式控制亮度;主題控制強調色與聊天介面樣式。',
colorMode: '色彩模式',
colorModeDesc: '選擇固定模式,或讓 Hermes 跟隨系統設定。',
toolViewTitle: '工具呼叫顯示',
toolViewDesc: '產品模式會隱藏原始工具 payload;技術模式會顯示完整輸入/輸出。',
reasoningCollapsedTitle: '預設摺疊推理過程',
reasoningCollapsedDesc: '保留串流推理內容,但在您開啟前維持摺疊。',
uiScaleTitle: '介面縮放',
uiScaleDesc: (percent: number) =>
`縮放整個應用程式的文字與介面。也可使用 Cmd/Ctrl 加 +、- 或 0 調整。目前:${percent}%`,
sessionDensityTitle: '工作階段列表密度',
sessionDensityDesc: '選擇側邊欄工作階段標題下方顯示的資訊量。',
sessionDensityCompact: '緊湊',
sessionDensityComfortable: '舒適',
sessionDensityDetailed: '詳細',
tabStripTitle: '分頁列',
tabStripDesc: '在分區上方顯示分頁。自動模式會在分區只有一個面板時隱藏分頁。',
tabStripAuto: '自動',
tabStripAlways: '一律',
tabStripNever: '永不',
terminalFontTitle: '終端機字型',
terminalFontDesc:
'選擇已安裝的字型用於桌面端終端機。Nerd Font 可正確顯示 Powerlevel10k 與 Shell 圖示;留空則使用內建的 JetBrains Mono。',
terminalFontPlaceholder: 'MesloLGS NF 或 CSS 字型堆疊',
terminalFontPreview: '字形預覽',
terminalFontReset: '使用預設字型',
translucencyTitle: '視窗透明',
translucencyDesc: '讓整個視窗(包括文字)透出桌面。',
translucencyGlassDesc: '霧面玻璃:桌面以柔和模糊透出,文字保持清晰。',
translucencyModeClear: '透明',
translucencyModeGlass: '玻璃',
translucencyTintTitle: '色調',
translucencyFadeTitle: '淡出',
translucencyFrostTitle: '磨砂質感',
translucencyFrost: {
'under-window': '深邃',
popover: '柔和',
titlebar: '明亮',
header: '透亮'
},
translucencyScopeTitle: '套用範圍',
translucencyScope: {
window: '整個視窗',
sidebar: '僅側邊欄'
},
backdropTitle: '聊天背景',
backdropDesc: '對話後方那張淡淡的雕像圖片。',
introSplashTitle: '開場標識',
introSplashDesc: '空白對話中顯示的字標和提示語。',
reactionsTitle: '訊息回應',
reactionsDesc: 'iMessage 風格的表情回應 — 你可以對訊息做出回應,Hermes 也能回應你的訊息。',
tipsTitle: '應用程式內提示',
tipsDesc: '指向應用程式某處的小氣泡:閒置時偶爾出現,需要時 Hermes 也會給你一則。關掉一則就不再出現。',
tipsReset: (count: number) => `復原 ${count} 則已關閉的提示`,
toursTitle: '導覽',
toursDesc: '讓 Hermes 帶你認識應用程式:調暗畫面並逐步標示每個位置。',
composerPopoutTitle: '懸浮輸入框',
composerPopoutDesc: '允許將輸入框拖出底部停靠區。關閉後,輸入框會鎖定在底部。',
vibeHeartsTitle: '心情愛心',
vibeHeartsDesc: '當你說謝謝、愛你、good bot 或送出愛心時飄出的愛心。與上方的訊息回應是兩回事。',
embedsTitle: '內嵌預覽',
embedsDesc:
'豐富預覽會從第三方網站(YouTube、X 等)載入。詢問會在你允許前顯示佔位符;一律會自動載入;關閉則保留純連結。',
embedsAsk: '詢問',
embedsAlways: '一律',
embedsOff: '關閉',
embedsReset: (count: number) => `重設 ${count} 個已允許的服務`,
resumeLastSessionTitle: '啟動時恢復上次會話',
resumeLastSessionDesc: '開啟後,應用冷啟動時重新打開最近的聊天。關閉則始終從空白新會話開始。',
product: '產品',
productDesc: '易讀的工具活動與精簡摘要。',
technical: '技術',
technicalDesc: '包含原始工具參數、結果與底層細節。',
themeTitle: '主題',
themeDesc: '僅限桌面端的調色盤。所選模式會套用在其上。',
themeProfileNote: profile => `已為「${profile}」設定檔儲存——每個設定檔保留各自的主題。`,
installTitle: '從 VS Code 安裝',
installDesc: '貼上 Marketplace 擴充功能 ID(例如 dracula-theme.theme-dracula),將其配色主題轉換為桌面調色盤。',
installPlaceholder: 'publisher.extension',
installButton: '安裝',
installing: '安裝中…',
installError: '無法安裝該主題。',
installed: name => `已安裝「${name}」。`,
removeTheme: '移除主題',
importedBadge: '已匯入',
pet: {
title: '寵物',
intro:
'領養一隻懸浮在應用上的 petdex 動畫寵物,它會根據 Hermes 的狀態做出反應——工具執行時奔跑、成功時歡呼、出錯時沮喪。',
restartHint: '寵物功能需要重新啟動——目前執行的應用在此功能加入前啟動。請結束並重新開啟 Hermes,然後回到此處。',
scaleTitle: '大小',
scaleDesc: '調整懸浮寵物的大小,所有介面即時生效。',
roamTitle: '漫遊',
roamDesc: '閒置時讓寵物自己在視窗內四處走動。',
on: '開啟',
off: '關閉',
chooseTitle: '選擇寵物',
chooseDesc: '選擇後會自動安裝(如需)並設為目前寵物。',
searchPlaceholder: '搜尋寵物…',
unreachable: '無法連線至 petdex 畫廊。請檢查網路連線並重新開啟此頁面。',
noMatch: query => `沒有符合「${query}」的寵物。`,
installedTag: '已安裝',
generatedTag: '生成',
countCapped: (cap, total) => `顯示 ${total} 個中的 ${cap} 個——輸入關鍵字以縮小範圍。`,
count: n => `${n} 個寵物。`,
uninstall: name => `解除安裝 ${name}`,
delete: name => `刪除 ${name}`,
deleteTitle: name => `刪除 ${name}?`,
deleteBody: '此操作會永久刪除寵物,且無法重新安裝。',
deleteConfirm: '刪除',
rename: name => `重新命名 ${name}`,
renameTitle: '重新命名寵物',
renamePlaceholder: '為寵物取個名字',
renameSave: '儲存',
exportPet: name => `匯出 ${name}`,
adoptFailed: slug => `無法領養 ${slug}`,
uninstallFailed: slug => `無法解除安裝 ${slug}`,
renameFailed: slug => `無法重新命名 ${slug}`,
exportFailed: slug => `無法匯出 ${slug}`,
noneAvailable: '目前沒有可開啟的寵物。',
turnOnFailed: '無法開啟寵物。',
turnOffFailed: '無法關閉寵物。'
}
},
fieldLabels: defineFieldCopy({
model: '預設模型',
modelContextLength: '上下文視窗',
fallbackProviders: '備用模型',
toolsets: '已啟用工具集',
timezone: '時區',
display: {
personality: '人格',
showReasoning: '推理區塊'
},
desktop: {
repoScanEnabled: '自動探索程式碼儲存庫',
repoScanRoots: '程式碼儲存庫掃描根目錄',
repoScanExcludePaths: '排除的程式碼儲存庫路徑'
},
agent: {
maxTurns: '最大代理步數',
imageInputMode: '圖片附件',
apiMaxRetries: 'API 重試次數',
serviceTier: '服務層級',
toolUseEnforcement: '工具使用強制'
},
terminal: {
cwd: '工作目錄',
backend: '執行後端',
timeout: '指令逾時',
persistentShell: '持久化 Shell',
envPassthrough: '環境變數傳遞',
dockerImage: 'Docker 映像',
singularityImage: 'Singularity 映像',
modalImage: 'Modal 映像',
daytonaImage: 'Daytona 映像'
},
fileReadMaxChars: '檔案讀取上限',
toolOutput: {
maxBytes: '終端機輸出上限',
maxLines: '檔案頁面上限',
maxLineLength: '行長上限'
},
codeExecution: {
mode: '程式碼執行模式'
},
approvals: {
mode: '批准模式',
timeout: '批准逾時',
mcpReloadConfirm: '確認 MCP 重新載入'
},
commandAllowlist: '指令允許清單',
security: {
redactSecrets: '遮蔽密鑰',
allowPrivateUrls: '允許私有 URL'
},
browser: {
allowPrivateUrls: '瀏覽器私有 URL',
autoLocalForPrivateUrls: '私有 URL 使用本機瀏覽器'
},
checkpoints: {
enabled: '檔案檢查點',
maxSnapshots: '檢查點上限'
},
voice: {
recordKey: '語音快捷鍵',
maxRecordingSeconds: '最長錄音時間',
autoTts: '朗讀回覆'
},
stt: {
enabled: '語音轉文字',
provider: '語音轉文字提供方',
local: {
model: '本機轉寫模型',
language: '轉寫語言'
},
openai: {
model: 'OpenAI STT 模型'
},
groq: {
model: 'Groq STT 模型'
},
mistral: {
model: 'Mistral STT 模型'
},
elevenlabs: {
modelId: 'ElevenLabs STT 模型',
languageCode: 'ElevenLabs 語言',
tagAudioEvents: '標記音訊事件',
diarize: '說話者分離'
}
},
tts: {
provider: '文字轉語音提供方',
edge: {
voice: 'Edge 語音'
},
openai: {
model: 'OpenAI TTS 模型',
voice: 'OpenAI 語音'
},
elevenlabs: {
voiceId: 'ElevenLabs 語音',
modelId: 'ElevenLabs 模型'
},
xai: {
voiceId: 'xAI (Grok) 語音',
language: 'xAI 語言',
speed: '播放速度',
autoSpeechTags: '自動語音標籤',
optimizeStreamingLatency: '串流延遲最佳化',
sampleRate: '取樣率',
bitRate: '位元率'
},
minimax: {
model: 'MiniMax TTS 模型',
voiceId: 'MiniMax 語音'
},
mistral: {
model: 'Mistral TTS 模型',
voiceId: 'Mistral 語音'
},
gemini: {
model: 'Gemini TTS 模型',
voice: 'Gemini 語音'
},
neutts: {
model: 'NeuTTS 模型',
device: 'NeuTTS 裝置'
},
kittentts: {
model: 'KittenTTS 模型',
voice: 'KittenTTS 語音'
},
piper: {
voice: 'Piper 語音'
}
},
memory: {
memoryEnabled: '持久記憶',
userProfileEnabled: '使用者設定檔',
memoryCharLimit: '記憶預算',
userCharLimit: '設定檔預算',
provider: '記憶提供方'
},
context: {
engine: '上下文引擎'
},
compression: {
enabled: '自動壓縮',
threshold: '壓縮閾值',
targetRatio: '壓縮目標',
protectLastN: '保護最近訊息'
},
delegation: {
model: '子代理模型',
provider: '子代理提供方',
maxIterations: '子代理輪次上限',
maxConcurrentChildren: '平行子代理',
childTimeoutSeconds: '子代理逾時',
reasoningEffort: '子代理推理強度'
},
updates: {
nonInteractiveLocalChanges: '應用程式內更新的本機變更'
}
}),
fieldDescriptions: defineFieldCopy({
model: '除非你在輸入框選擇其他模型,否則新聊天會使用此模型。',
modelContextLength: '保留 0 會使用所選模型偵測到的上下文視窗。',
fallbackProviders: '預設模型失敗時要嘗試的備用 provider:model 項目。',
display: {
personality: '新工作階段的預設助手風格。',
showReasoning: '後端提供推理內容時顯示該區塊。'
},
desktop: {
repoScanEnabled: '掃描本機資料夾,並在「專案」中顯示 Git 程式碼儲存庫。',
repoScanRoots: '要掃描的資料夾。留空時掃描主目錄。',
repoScanExcludePaths: '探索程式碼儲存庫時略過這些資料夾及其子目錄。'
},
timezone: 'Hermes 需要本機時間上下文時使用。留空則使用系統時區。',
agent: {
imageInputMode: '控制圖片附件如何傳送給模型。',
maxTurns: 'Hermes 停止一次執行前的工具呼叫輪次上限。'
},
terminal: {
cwd: '工具與終端機操作的預設專案資料夾。',
persistentShell: '後端支援時,在指令之間保留 Shell 狀態。',
envPassthrough: '傳入工具執行的環境變數。'
},
codeExecution: {
mode: '程式碼執行被限制在目前專案中的嚴格程度。'
},
fileReadMaxChars: 'Hermes 單次檔案讀取可讀取的最大字元數。',
approvals: {
mode: 'Hermes 如何處理需要明確批准的指令。',
timeout: '批准提示逾時前等待的時間。'
},
security: {
redactSecrets: '盡可能從模型可見內容中隱藏偵測到的密鑰。'
},
checkpoints: {
enabled: '在檔案編輯前建立可回復的快照。'
},
memory: {
memoryEnabled: '儲存有助於未來工作階段的持久記憶。',
userProfileEnabled: '維護一份精簡的使用者偏好設定檔。'
},
context: {
engine: '長對話接近上下文上限時的管理策略。'
},
compression: {
enabled: '對話變大時摘要較早的上下文。'
},
voice: {
autoTts: '自動朗讀助手回覆。'
},
stt: {
enabled: '啟用本機或提供方支援的語音轉寫。',
elevenlabs: {
languageCode: '可選的 ISO-639-3 語言代碼。留空讓 ElevenLabs 自動偵測。'
}
},
updates: {
nonInteractiveLocalChanges:
'Hermes 從應用程式內更新自身時,保留本機原始碼變更(stash)或丟棄(discard)。終端機更新一律會詢問。'
}
}),
about: {
heading: 'Hermes Desktop',
version: value => `版本 ${value}`,
versionUnavailable: '版本不可用',
bundleOutOfSync: '應用程式建置版本過舊',
bundleOutOfSyncDesc:
'Hermes 執行環境已更新,但桌面應用程式本身仍是舊建置——在應用程式更新之前,新的介面功能(如 Bot Mode)不會顯示。請執行下方的更新以重新建置應用程式。如果此警告仍未消除,請從最新的桌面安裝程式重新安裝。',
bundleOutOfSyncAction: '取得安裝程式',
bundleSwapPending: '重新啟動以完成更新',
bundleSwapPendingDesc:
'更新後的應用程式已安裝完成,只需重新啟動 Hermes 即可載入新版本。聊天記錄和設定不會受到影響。',
bundleSwapPendingAction: '重新啟動 Hermes',
updates: '更新',
checkNow: '立即檢查',
checking: '檢查中…',
seeWhatsNew: '查看新增內容',
updateNow: '立即更新',
releaseNotes: '發行說明',
onLatest: '你已是最新版本。',
installing: '正在安裝更新。',
cantUpdate: '此版本無法從應用程式內自行更新。',
cantReach: '無法連線到更新伺服器。',
tapCheck: '點選「立即檢查」以尋找更新。',
updateReady: count => `新更新已就緒(包含 ${count} 項變更)。`,
updateReadyUnknown: '新更新已就緒。',
lastChecked: age => `上次檢查:${age}`,
justNowSuffix: ' · 剛剛',
automaticUpdates: '自動更新',
automaticUpdatesDesc: 'Hermes 會在背景自動檢查更新,並在有可用更新時通知你。',
branchCommit: (branch, commit) => `分支 ${branch} · 提交 ${commit}`,
never: '從未',
justNow: '剛剛',
minAgo: count => `${count} 分鐘前`,
hoursAgo: count => `${count} 小時前`,
daysAgo: count => `${count} 天前`
},
config: {
none: '無',
noneParen: '(無)',
builtinOnly: '僅內建',
notSet: '未設定',
commaSeparated: '逗號分隔的值',
searchPlaceholder: '搜尋…',
noResults: '找不到結果',
systemDefault: '系統預設',
loading: '正在載入 Hermes 設定...',
emptyTitle: '無可設定項目',
emptyDesc: '此區段沒有可調整的設定。',
failedLoad: '設定載入失敗',
autosaveFailed: '自動儲存失敗',
imported: '設定已匯入',
invalidJson: '設定 JSON 無效',
keepAwakeTitle: '保持電腦喚醒',
keepAwakeDesc: '阻止本機睡眠,讓長時間或整夜執行持續進行。螢幕仍可變暗。'
},
quickEntry: {
enabledTitle: '快速輸入',
enabledDesc: '用全域快速鍵在任何地方喚出一個小輸入框,無需開啟 Hermes 即可送出提示。',
shortcutTitle: '快速輸入快速鍵',
shortcutDesc: '至少需要一個修飾鍵,例如 CommandOrControl+Shift+Space。',
active: '快速鍵已生效。',
takenBy: '此快速鍵已被其他應用程式占用,請換一個。',
invalidShortcut: '不是有效的快速鍵。請至少包含一個修飾鍵。'
},
credentials: {
pasteKey: '貼上金鑰',
pasteLabelKey: label => `貼上 ${label} 金鑰`,
optional: '選填',
enterValueFirst: '請先輸入一個值。',
couldNotSave: '無法儲存憑證。',
remove: '移除',
getKey: '取得金鑰',
saving: '儲存中'
},
envActions: {
actions: '動作',
manageInKeys: '在 API 金鑰中管理',
docs: '文件',
hideValue: '隱藏值',
revealValue: '顯示值',
replace: '取代',
set: '設定',
clear: '清除'
},
gateway: {
loading: '正在載入閘道設定...',
unavailableTitle: '閘道設定不可用',
unavailableDesc: '桌面 IPC 橋接器未公開閘道設定。',
title: '閘道連線',
envOverride: '環境變數覆寫',
intro:
'Hermes Desktop 預設會啟動自己的本機閘道。如果您希望此應用程式控制另一台機器或可信代理後面已執行的 Hermes 後端,請使用遠端閘道。閘道連線屬於本機層級設定;設定檔是從已連線的閘道中探索出來的。',
envOverrideTitle: '環境變數正在控制此桌面工作階段。',
envOverrideDesc: '取消設定 HERMES_DESKTOP_REMOTE_URL 和 HERMES_DESKTOP_REMOTE_TOKEN 後才會使用下方儲存的設定。',
localTitle: '本機閘道',
localDesc: '在 localhost 啟動私有 Hermes 後端。這是預設方式,可離線使用。',
remoteTitle: '遠端閘道',
remoteDesc:
'將此桌面殼層連線至遠端 Hermes 後端。託管閘道使用 OAuth 或帳號密碼;自託管閘道也可使用工作階段 Token。',
remoteUrlTitle: '遠端 URL',
remoteUrlDesc: '遠端儀表板後端的基礎 URL。支援路徑前綴,例如 /hermes。',
probing: '正在檢查此閘道的驗證方式…',
probeError: '暫時無法連線此閘道。請檢查 URL;閘道回應後將顯示驗證方式。',
signedIn: '已登入',
signIn: '登入',
signOut: '登出',
signInWith: provider => `使用 ${provider} 登入`,
authTitle: '驗證',
authSignedInPassword: '此閘道使用帳號和密碼。您已登入,工作階段會自動重新整理。',
authSignedInOauth: '此閘道使用 OAuth。您已登入,工作階段會自動重新整理。',
authNeedsPassword: '此閘道使用帳號和密碼。請登入以授權此桌面應用程式。',
authNeedsOauth: provider => `此閘道使用 OAuth。請使用 ${provider} 登入以授權此桌面應用程式。`,
tokenTitle: '工作階段 Token',
tokenDesc: '用於 REST 和 WebSocket 存取的儀表板工作階段 Token。留空則保留已儲存的 Token。',
existingToken: value => `現有 Token ${value}`,
savedToken: '已儲存',
pasteSessionToken: '貼上工作階段 Token',
plainTextConfirmTitle: '以純文字儲存閘道 Token?',
plainTextConfirmDesc:
'在此裝置上找不到作業系統的金鑰環服務,因此 Token 將以未加密的純文字儲存在應用程式的連線設定檔中,以該使用者身分執行的任何處理程序皆可讀取。請安裝或啟用 GNOME Keyring 或 KWallet 以進行加密儲存。',
plainTextConfirmAction: '以純文字儲存',
plainTextStoredTitle: 'Token 以純文字儲存',
plainTextStoredDesc:
'安全儲存無法使用,因此已儲存的 Token 以未加密方式儲存在此裝置上應用程式的連線設定檔中。請安裝或啟用 GNOME Keyring 或 KWallet 以將其加密。',
keychainEncryptionTitle: '使用系統鑰匙圈加密已儲存的機密',
keychainEncryptionDesc:
'預設關閉。開啟後,閘道 Token 與登入憑證將使用系統鑰匙圈(Keychain Access、GNOME Keyring 或 Windows DPAPI)加密——系統可能會要求授權或密碼。關閉時,它們以僅目前使用者可讀的一般檔案形式儲存。',
keychainEncryptionFailed: '無法變更機密加密設定',
testRemote: '測試遠端',
saveForRestart: '儲存至下次重新啟動',
saveAndReconnect: '儲存並重新連線',
diagnostics: '診斷',
diagnosticsDesc: '在檔案管理員中顯示 desktop.log,閘道啟動失敗時很有用。',
openLogs: '開啟記錄',
incompleteTitle: '遠端閘道設定不完整',
incompleteSignIn: '切換至遠端前,請輸入遠端 URL 並完成登入。',
incompleteToken: '切換至遠端前,請輸入遠端 URL 和工作階段 Token。',
incompleteSignInTest: '測試前,請輸入遠端 URL 並完成登入。',
incompleteTokenTest: '測試前,請輸入遠端 URL 和工作階段 Token。',
enterUrlFirst: '請先輸入遠端 URL。',
restartingTitle: '閘道連線正在重新啟動',
savedTitle: '閘道設定已儲存',
restartingMessage: 'Hermes Desktop 將使用已儲存的設定重新連線。',
savedMessage: '已儲存,下次重新啟動後生效。',
connectedTo: (baseUrl, version) => `已連線至 ${baseUrl}${version ? ` · Hermes ${version}` : ''}`,
reachableTitle: '遠端閘道可連線',
signedOutTitle: '已登出',
signedOutMessage: '已清除遠端閘道工作階段。',
failedLoad: '閘道設定載入失敗',
signInFailed: '登入失敗',
signOutFailed: '登出失敗',
testFailed: '遠端閘道測試失敗',
applyFailed: '無法套用閘道設定',
saveFailed: '無法儲存閘道設定',
sshTitle: '透過 SSH 連線',
sshDesc:
'Hermes 會透過 SSH 在遠端啟動並以通道連線到本應用程式——無需自行啟動或公開任何服務。前提:已具備到該主機的金鑰 SSH 存取。',
sshTrustHint: '首次提供的主機金鑰會被信任並固定;後續變更將被拒絕。',
sshHostTitle: '主機',
sshHostDesc: 'user@host,或 ~/.ssh/config 中的 Host 別名。',
sshHostPick: '選擇主機…',
sshHostPickTitle: '主機',
sshHostPickDesc: '~/.ssh/config 中的 Host 別名,或選擇「自訂」手動輸入。',
sshHostCustom: '自訂(手動輸入)…',
sshUserTitle: '使用者',
sshUserDesc: '留空 = ~/.ssh/config 或目前使用者。',
sshUserPlaceholder: '來自 ~/.ssh/config',
sshPortTitle: '連接埠',
sshPortDesc: '留空 = 22 或 ~/.ssh/config 中的連接埠。',
sshKeyTitle: '金鑰檔案',
sshKeyDesc: '私密金鑰路徑。留空 = ssh-agent 或 ~/.ssh/config。',
sshHermesPathTitle: 'Hermes 路徑(選用)',
sshHermesPathDesc: '遠端 hermes 執行檔的完整路徑。留空 = 自動偵測。',
sshHermesPathPlaceholder: '自動偵測',
sshTestConnection: '測試 SSH',
sshConnect: '連線',
sshButtonsHint: '「儲存」會在下次啟動時生效,「連線」則立即重新連線。',
sshReachable: (host, platform) => `可連線:${host}(${platform})——已找到 Hermes`,
sshIncompleteHost: '連線前請輸入 SSH 主機。',
sshErrUnreachable: '無法透過 SSH 連線到該主機。請檢查主機、連接埠和網路。',
sshErrAuth:
'SSH 驗證失敗。請將金鑰載入 ssh-agent(ssh-add),或在 ~/.ssh/config 中設定 IdentityFile——Hermes 以非互動方式執行 ssh。',
sshErrHostKey: '自上次連線以來主機金鑰已變更。請確認這是預期的,然後執行 ssh-keygen -R <host> 並重新連線。',
sshErrNotInstalled:
'遠端主機上未安裝 Hermes。請在遠端安裝(curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh)或設定 Hermes 路徑。',
sshErrPlatform: '不支援的遠端平台。Hermes Desktop 的 SSH 模式支援 Linux、macOS 和 Windows 遠端主機。',
sshErrTimeout: 'SSH 連線逾時。主機可能無法存取或處於睡眠狀態。',
sshErrUpdateRequired: '使用 Desktop SSH 連線前,請更新遠端主機上的 Hermes。',
sshErrUnknown: 'SSH 連線失敗。'
},
keys: {
loading: '正在載入 API 金鑰和憑證...',
failedLoad: 'API 金鑰載入失敗',
empty: '此類別尚未有任何設定。'
},
search: {
placeholder: '搜尋所有設定...',
pill: '搜尋'
},
profileScope: {
appliesTo: '套用至',
editsProfile: profile => `此頁面的變更將套用至「${profile}」設定檔。`
},
mcp: {
loading: '正在載入 MCP 伺服器...',
failedLoad: 'MCP 設定載入失敗',
nameRequiredTitle: '需要名稱',
nameRequiredMessage: '請為此 MCP 伺服器提供設定鍵。',
objectRequired: '伺服器設定必須是 JSON 物件',
invalidJson: 'MCP JSON 無效',
saveFailed: '儲存失敗',
removeFailed: '移除失敗',
gatewayUnavailableTitle: '閘道不可用',
gatewayUnavailableMessage: '重新載入 MCP 前請先重新連線閘道。',
reloadedTitle: 'MCP 工具已重新載入',
reloadedMessage: '新的工具 Schema 將套用至後續回合。',
reloadFailed: 'MCP 重新載入失敗',
savedTitle: 'MCP 伺服器已儲存',
savedMessage: name => `${name} 會在 MCP 重新載入後生效。`,
newServer: '新伺服器',
reload: '重新載入 MCP',
reloading: '重新載入中...',
emptyTitle: '沒有 MCP 伺服器',
emptyDesc: '新增 stdio 或 HTTP 伺服器以公開 MCP 工具。',
disabled: '已停用',
editServer: '編輯伺服器',
name: '名稱',
serverJson: '伺服器 JSON',
remove: '移除',
saveServer: '儲存伺服器',
capabilitySummary: (tools, prompts, resources) =>
`已啟用 ${[`${tools} 個工具`, ...(prompts ? [`${prompts} 個提示`] : []), ...(resources ? [`${resources} 個資源`] : [])].join('、')}`,
costTokens: tokens => `每次呼叫約 ${tokens} token`,
usage30d: uses => `30 天內 ${uses} 次呼叫`,
unusedPill: '未使用',
statusConnecting: '連線中…',
statusNeedsAuth: '需要驗證',
statusError: '錯誤',
statusOff: '關閉',
allServers: '所有伺服器',
authenticatedTitle: '已驗證',
authenticatedMessage: (server, count) => `${server}:${count} 個工具`,
waitingForBrowser: '等待瀏覽器…',
authenticate: '驗證',
unsavedConnect: '未儲存 — 儲存 mcp.json 以連線。',
enableTool: tool => `啟用 ${tool}`,
disableTool: tool => `停用 ${tool}`,
noOutput: '尚無輸出。',
deepLinkTitle: '新增 MCP 伺服器?',
deepLinkDescription: '一個連結要求將此 MCP 伺服器加入 Hermes。請檢查下方的完整設定——它來自該連結,而非 Hermes。',
deepLinkStdioWarning: '此伺服器會使用下方所示指令在你的電腦上執行本機程序。僅在信任其來源時繼續。',
deepLinkConfirm: '新增伺服器',
deepLinkNameInvalid: '名稱須為 1-64 個字母、數字、點、連字號或底線。',
deepLinkNameConflict: name => `已存在名為 ${name} 的伺服器——請改用其他名稱或取消。`,
deepLinkErrorTitle: '已拒絕 MCP 安裝連結',
deepLinkErrorName: '連結中的伺服器名稱缺失或無效。',
deepLinkErrorConfig: '連結中的設定不是有效的 base64 編碼 JSON。',
deepLinkErrorShape: '設定必須是包含字串 `url` 或 `command` 欄位的 JSON 物件。',
deepLinkErrorUrl: '僅允許 http:// 和 https:// 伺服器網址。',
deepLinkErrorTooLarge: '設定內容超過 32KB 上限。',
importButton: '匯入',
importPlaceholder: '貼上 mcp.json 片段、npx/docker 指令、claude mcp add 指令、URL 或 Cursor 連結…',
importNoMatch: '貼上的文字中未識別到伺服器設定。',
importConfirm: '加入 mcp.json',
importConfirmMany: count => `將 ${count} 個伺服器加入 mcp.json`
},
model: {
loading: '正在載入模型設定...',
appliesDesc: '套用至新工作階段。可在輸入框的模型選擇器中臨時切換目前對話。',
provider: '提供方',
model: '模型',
applying: '套用中...',
loadFailed: '無法載入模型',
restartRequired: '更新後此後端仍在執行舊程式碼。請重新啟動以載入新程式碼。',
restartBackend: '重新啟動後端',
restartingBackend: '正在重新啟動後端...',
restartFailed: '無法重新啟動後端',
auxiliaryTitle: '輔助模型',
resetAllToMain: '全部重設為主要模型',
auxiliaryDesc: '輔助任務預設使用主要模型。您可以為任何任務指定專用模型。',
setToMain: '設為主要模型',
change: '變更',
autoUseMain: '自動 · 使用主要模型',
providerDefault: '(提供方預設)',
tasks: {
vision: { label: '視覺', hint: '圖片分析' },
compression: { label: '壓縮', hint: '上下文壓縮' },
skills_hub: { label: '技能中心', hint: '技能搜尋' },
approval: { label: '核准', hint: '智慧自動核准' },
mcp: { label: 'MCP', hint: 'MCP 工具路由' },
title_generation: { label: '標題生成', hint: '工作階段標題' },
review: { label: '評審', hint: '/review 評審子代理' },
curator: { label: '策展器', hint: '技能使用審查' }
}
},
localModels: {
title: '本地模型',
runtimeTitle: '本地執行環境',
runtimeReady: backend => `就緒 · ${backend}`,
serverRunning: '執行中',
runtimeInstalled: '已安裝 llama.cpp 執行環境',
runtimeInstalledDetail: (tag, backend) => `組建 ${tag},${backend} 後端。Hermes 會為您啟動並管理伺服器。`,
installTitle: '安裝本地執行環境',
installDetail: '下載 llama.cpp 推理引擎(數百 MB)。下載的模型完全在本機執行——無需帳號,資料不會離開您的電腦。',
installAction: '安裝執行環境',
installing: '正在安裝執行環境…',
installFailed: '執行環境安裝失敗',
hardwareTitle: '本機配置',
hardwareLoading: '正在檢測硬體…',
vram: label => `${label} 顯示記憶體`,
ram: label => `${label} 記憶體`,
unifiedMemory: '統一記憶體',
modelsTitle: '模型',
recommended: '推薦',
recommendedReason: {
'best-quality-resident': '在完全駐留 GPU 且保持全速的模型中品質最高。推薦會在品質與該硬體的預計速度之間權衡。',
'speed-gated-quality':
'有更高品質的模型可以裝入這台機器,但受記憶體頻寬限制回應會太慢——這是保持流暢的最佳模型。',
'fastest-resident': '沒有模型能在該硬體上達到全速;這是完全駐留 GPU 記憶體中最快的一個。',
'least-painful-spilled': '沒有模型能完全裝入 GPU 記憶體——這是從系統記憶體執行表現最好的一個。'
} as Record<string, string>,
downloaded: '已下載',
downloadAction: size => `下載 · ${size}`,
downloadProgress: (done, total) => `正在下載 ${done} / ${total}`,
downloadDoneToast: model => `${model} 已就緒。`,
installDoneToast: '本地執行環境已安裝就緒。',
useAction: '使用',
activePill: '預設',
updateTitle: '引擎有可用更新',
updateDetail: (next, current) =>
`新的 llama.cpp 組建(${next})可以安裝——目前為 ${current}。下載期間模型仍可正常使用。`,
updateAction: '更新引擎',
updating: '正在更新引擎…',
upToDateTitle: '引擎已是最新',
upToDateDetail: (tag, backend) => `正在執行 llama.cpp ${tag}(${backend})——Hermes 提供的最新組建。`,
updateToast: next => `本地引擎有新組建(${next})。可在 設定 → 本地模型 中更新。`,
activeDetail: '新對話使用此模型——傳送首條訊息時載入',
activeNotLoaded: '首條訊息時載入',
loadedPill: '已載入',
placementResident: '全部在 GPU',
placementSpilled: '部分在記憶體',
placementResidentTip: '完全在 GPU 記憶體中以此上下文視窗執行——全速。',
placementSpilledTip:
'模型的一部分從系統記憶體執行——可用但較慢。更緊湊的版本或更小的上下文可以完全放入顯示記憶體。',
loadingPill: '載入中…',
ejectTip: '釋放顯示記憶體(需要時重新載入)',
ejected: '模型已卸載——顯示記憶體已釋放。',
ejectFailed: '無法卸載模型',
stopServer: '關閉',
startServer: '開啟',
runtimeRunningDetail: '本地伺服器執行中。關閉後將釋放全部顯示記憶體,新對話將不再使用本地模型,直到您重新開啟。',
serverStopped: '本地伺服器已停止——顯示記憶體已釋放。',
serverStarted: '本地伺服器執行中。',
serverStopFailed: '無法停止本地伺服器',
serverStartFailed: '無法啟動本地伺服器',
activating: '啟動中…',
activateFailed: model => `無法切換到 ${model}`,
activateDoneToast: model => `新對話將使用 ${model}。`,
downloadFailed: model => `${model} 下載失敗`,
pillFitsGpu: '完全在 GPU 上執行',
pillUsesRam: '使用系統記憶體',
pillTooBig: '超出本機記憶體',
browseTitle: '發現更多模型',
browseHint: '搜尋整個 Hugging Face。在這裡下載的模型會自動適配你的機器,但未經我們測試。',
browsePlaceholder: '按名稱或作者搜尋模型…',
browseSearching: '正在搜尋 Hugging Face',
browseListing: '正在讀取模型檔案',
browseShowFiles: '查看檔案',
browseRefresh: '重新整理',
browseDownloads: '次下載',
browseLikes: '個讚',
browseGated: '需要登入 Hugging Face',
browseNoGguf: '未找到相容的模型檔案。',
browseFitUnknown: '適配情況未知',
browseAlreadyDownloaded: '已下載。',
addedByYou: '由你新增',
browseDownloadStarted: '正在下載 {name}',
browseDownloadAria: '下載 {name}',
sideloadButton: '新增模型檔案',
sideloadTitle: '選擇 GGUF 模型檔案',
sideloadDone: '已新增 {name}。',
sideloadAlreadyPresent: '已在你的庫中。',
pillFullContext: max => `完整 ${max} 上下文`,
pillFullContextTip: '從一開始就以模型的完整上下文視窗執行',
pillUpTo: max => `最高 ${max} 上下文`,
pillGrowsTip: '隨著對話需要更多空間自動增長',
pillVision: '識圖',
deleteAction: '刪除模型',
deleteConfirm: model => `從磁碟刪除 ${model}?`,
deleted: model => `已刪除 ${model}。`,
deleteFailed: '刪除失敗'
},
providers: {
connectAccount: '連結帳號',
haveApiKey: '改用 API 金鑰?',
intro: '使用訂閱登入,無需複製 API 金鑰。Hermes 會在應用程式中為您完成瀏覽器登入。',
connected: '已連線',
collapse: '收合',
connectAnother: '連結其他提供方',
otherProviders: '其他提供方',
removeConfirm: provider => `移除 ${provider}?`,
removeKeyManaged: provider => `${provider} 由 API 金鑰設定。請從 API Keys 中移除。`,
removedTitle: '帳號已移除',
removedMessage: provider => `${provider} 已移除。`,
failedRemove: provider => `無法移除 ${provider}`,
noProviderKeys: '沒有可用的提供方 API 金鑰。',
searchKeys: '搜尋提供方…',
noKeysMatch: '沒有符合的提供方。',
localEndpoint: {
title: '本地 / 自訂端點',
description: '將 Hermes 指向任意 OpenAI 相容端點(Zyphra、vLLM、llama.cpp、Ollama 等)。'
},
loading: '正在載入提供方...'
},
sessions: {
loading: '正在載入已封存工作階段…',
archivedTitle: '已封存工作階段',
archivedIntro: '已封存的聊天會從側邊欄隱藏,但保留全部訊息。在側邊欄 Ctrl/⌘ 點擊聊天即可封存。',
emptyArchivedTitle: '暫無封存',
emptyArchivedDesc: '封存一個聊天後會顯示在這裡。',
unarchive: '取消封存',
deletePermanently: '永久刪除',
messages: count => `${count} 則訊息`,
restored: '已還原',
deleteConfirm: title => `永久刪除「${title}」?此操作無法復原。`,
autoArchiveTitle: '自動封存閒置對話',
autoArchiveDesc:
'自動封存你一段時間未使用的對話。已釘選的對話永遠不會被封存,也不會刪除任何內容——封存的對話會移到這裡。',
autoArchiveDaysLabel: '封存前',
autoArchiveDaysUnit: '天無活動',
autoArchiveFailed: '無法更新自動封存設定',
defaultDirTitle: '預設專案目錄',
defaultDirDesc: '新工作階段預設從此資料夾開始,除非您選擇其他目錄。留空則使用您的家目錄。',
defaultDirUpdated: '預設專案目錄已更新',
defaultsTo: label => `預設使用 ${label}。`,
change: '變更',
choose: '選擇',
clear: '清除',
notSet: '未設定',
failedLoad: '無法載入已封存工作階段',
unarchiveFailed: '取消封存失敗',
deleteFailed: '刪除失敗',
updateDirFailed: '無法更新預設目錄',
clearDirFailed: '無法清除預設目錄'
},
toolsets: {
loadingConfig: '正在載入設定',
savedTitle: '憑證已儲存',
savedMessage: key => `${key} 已更新。`,
removedTitle: '憑證已移除',
removedMessage: key => `${key} 已移除。`,
failedSave: key => `儲存 ${key} 失敗`,
failedRemove: key => `移除 ${key} 失敗`,
failedReveal: key => `顯示 ${key} 失敗`,
removeConfirm: key => `從 .env 中移除 ${key}?`,
set: '已設定',
notSet: '未設定',
selectedTitle: '已選擇提供方',
selectedMessage: provider => `${provider} 現在處於作用中狀態。`,
failedSelect: provider => `選擇 ${provider} 失敗`,
failedLoad: '工具設定載入失敗',
noProviderOptions: '此工具集沒有提供方選項;啟用後即可使用目前設定。',
noProviders: '此工具集目前沒有可用提供方。',
ready: '就緒',
needsSignIn: '需要登入',
needsSetup: '需要安裝',
activeBackend: '目前後端',
activeBackendHint: '這是你目前使用的後端',
useBackend: '使用此後端',
nousIncluded: '包含在 Nous 訂閱中;登入 Nous Portal 即可啟用。',
nousAuthNeededTitle: '登入 Nous Portal',
nousAuthNeededMessage: provider => `已儲存 ${provider},但在登入 Nous Portal 之前不會啟用。`,
nousAuthSignIn: '登入',
nousAuthDoneTitle: '已連接 Nous Portal',
nousAuthDoneMessage: '訂閱後端現已啟用。',
nousAuthFailed: 'Nous Portal 登入未完成',
noApiKeyRequired: '不需要 API 金鑰。',
postSetupHint: step => `此後端需要一次性安裝 (${step})。將在此機器上執行,可能需要幾分鐘。`,
postSetupInstalledHint: '已安裝。僅在出現問題時才需要重新執行安裝。',
postSetupRun: '執行設定',
postSetupRerun: '重新執行設定',
postSetupInstalled: '已安裝',
postSetupRunning: '安裝中…',
postSetupStarting: '啟動中…',
postSetupCompleteTitle: '設定完成',
postSetupCompleteMessage: step => `已安裝 ${step}。`,
postSetupErrorTitle: '設定完成但有錯誤',
postSetupErrorMessage: step => `請檢查 ${step} 日誌。`,
postSetupFailed: step => `執行 ${step} 設定失敗`,
webSearchActive: backend => `搜尋:${backend}`,
webExtractActive: backend => `擷取:${backend}`,
webCapabilityUnset: '未設定',
webUseForSearch: '用於搜尋',
webUseForExtract: '用於擷取',
webUsedForSearch: '搜尋後端',
webUsedForExtract: '擷取後端',
webCapabilitySelectedMessage: (provider, capability) =>
`${provider} 現在負責網頁${capability === 'search' ? '搜尋' : '擷取'}。`,
failedSelectCapability: provider => `無法設定 ${provider}`,
terminalBackend: {
sectionTitle: '執行後端',
loading: '正在檢查執行後端…',
failedLoad: '無法載入終端後端',
ready: '就緒',
needsSetup: '需要設定',
unavailable: '不可用',
inUse: '使用中',
selectedTitle: '已選擇後端',
selectedMessage: backend => `終端命令現在透過 ${backend} 執行。將套用於新工作階段。`,
failedSelect: backend => `選擇 ${backend} 失敗`,
needsSetupHint: '現在即可選擇此後端——但在完成設定前命令將會失敗。'
},
browserRealProfile: {
label: '使用我的真實瀏覽器設定檔',
description:
'將預設瀏覽器的登入資訊與 Cookie 複製到受管理的快照中,代理使用該快照進行瀏覽。絕不會直接開啟你的真實設定檔。將套用於新工作階段。',
enabledTitle: '真實設定檔瀏覽:已開啟',
enabledMessage: '新工作階段將使用預設瀏覽器設定檔的快照進行瀏覽。',
disabledTitle: '真實設定檔瀏覽:已關閉',
disabledMessage: '設定檔快照將被刪除;新工作階段使用乾淨的瀏覽器。',
failedSave: '無法儲存真實設定檔設定',
prompt: {
title: '讓網站保持登入狀態',
body: '讓 Hermes 使用預設瀏覽器設定檔的快照進行瀏覽,網站開啟時即已登入。',
bulletSnapshot: 'Cookie 與登入資訊會複製到受管理的快照中。',
bulletLiveProfile: '絕不會直接開啟你的真實瀏覽器設定檔。',
bulletLocal: '所有資料都不會離開這台電腦。',
dontShowAgain: '不再顯示',
notNow: '暫不',
enable: '使用我的設定檔'
}
}
}
},
skills: {
tabSkills: '技能',
tabToolsets: '工具集',
tabMcp: 'MCP',
all: '全部',
searchSkills: '搜尋技能...',
searchToolsets: '搜尋工具集...',
refresh: '重新整理技能',
refreshing: '正在重新整理技能',
loading: '正在載入功能…',
noSkillsTitle: '找不到技能',
noSkillsDesc: '請嘗試更廣泛的搜尋或不同類別。',
noToolsetsTitle: '找不到工具集',
noToolsetsDesc: '請嘗試更廣泛的搜尋詞。',
noDescription: '無可用描述。',
configured: '已設定',
needsKeys: '需要金鑰',
visionModelHint: '視覺功能使用你的輔助模型設定——支援影像的模型在那裡選擇,而不是在此處按供應商選擇。',
visionModelLink: '在 設定 → 模型 中選擇視覺模型',
toolsetsEnabled: (enabled, total) => `已啟用 ${enabled}/${total} 個工具集`,
configureToolset: label => `設定 ${label}`,
toggleToolset: (label, enabled) => `${enabled ? '開啟' : '關閉'} ${label} 工具集`,
skillsLoadFailed: '技能載入失敗',
toolsetsRefreshFailed: '工具集重新整理失敗',
skillEnabled: '技能已啟用',
skillDisabled: '技能已停用',
toolsetEnabled: '工具集已啟用',
toolsetDisabled: '工具集已停用',
appliesToNewSessions: name => `${name} 將套用至新工作階段。`,
failedToUpdate: name => `更新 ${name} 失敗`,
sortMostUsed: '最常用',
sortAlpha: 'A–Z',
sortMostUsedDesc: '↓ 最常用',
sortLeastUsedAsc: '↑ 最少用',
enableAll: '全部啟用',
disableAll: '全部停用',
disableUnused: '停用未使用',
bulkUpdated: count => `已為新工作階段更新 ${count} 項。`,
bulkNoChange: '沒有需要變更的內容。',
usageCount: count => `已使用 ${count} 次`,
provenance: {
agent: '已學習',
bundled: '內建',
hub: '技能中心'
},
emptyNoneFound: noun => `找不到${noun}`,
emptyNothingMatches: query => `沒有符合「${query}」的內容。`,
emptyNoneAvailable: noun => `尚無可用的${noun}。`,
changesApplyNewSessions: '變更將套用至新工作階段。',
skillUpdated: '技能已更新',
edit: '編輯',
archive: '封存',
skillArchivedTitle: '技能已封存',
skillArchivedMessage: '可透過 hermes curator restore 還原。',
officialCatalog: '可安裝',
officialPill: '官方'
},
starmap: {
title: '記憶圖譜',
subtitle: (nodes, clusters) => `${clusters} 個類別中的 ${nodes} 個技能`,
close: '關閉記憶圖譜',
refresh: '重新整理',
memory: '記憶',
filterAll: '全部',
filterUsed: '已使用',
filterLearned: '已學習',
viewGraph: '圖譜',
loadFailed: '無法載入記憶圖譜',
loading: '載入中…',
emptyTitle: '尚無學習內容',
emptyDesc: '當 Hermes 為你的工作建立技能與記憶時,會顯示在這裡。'
},
agents: {
close: '關閉代理',
title: '派生樹',
subtitle: '目前回合的子代理即時活動。',
emptyTitle: '暫無活躍子代理',
emptyDesc: '當某個回合派發任務時,子代理會在此即時顯示進度。',
running: '執行中',
failed: '失敗',
done: '完成',
streaming: '串流傳輸中',
files: '檔案',
moreFiles: count => `還有 ${count} 個檔案`,
delegation: index => `派發 ${index}`,
workers: count => `${count} 個工作單元`,
workersActive: count => `${count} 個活躍`,
agentsCount: count => `${count} 個代理`,
activeCount: count => `${count} 個活躍`,
failedCount: count => `${count} 個失敗`,
toolsCount: count => `${count} 個工具`,
filesCount: count => `${count} 個檔案`,
updatedAgo: age => `更新於 ${age}`,
ageNow: '剛才',
ageSeconds: seconds => `${seconds} 秒前`,
ageMinutes: minutes => `${minutes} 分鐘前`,
ageHours: hours => `${hours} 小時前`,
ageDays: days => `${days} 天前`,
durationSeconds: seconds => `${seconds} 秒`,
durationMinutes: (minutes, seconds) => `${minutes} 分 ${seconds} 秒`,
tokens: value => `${value} 詞元`
},
commandCenter: {
close: '關閉命令中心',
paletteTitle: '命令面板',
back: '返回',
searchPlaceholder: '搜尋工作階段、檢視和動作',
goTo: '前往',
goToSession: '前往工作階段',
branches: '分支',
startInBranch: branch => `在 ${branch} 中開始新對話`,
commandCenter: '命令中心',
appearance: '外觀',
settings: '設定',
changeTheme: '變更主題',
changeColorMode: '變更色彩模式…',
pets: {
title: '寵物',
placeholder: '搜尋寵物…',
loading: '正在載入 petdex 畫廊…',
error: '無法連線至 petdex 畫廊。',
staleBackend: '請重新啟動 Hermes 以使用寵物功能。',
empty: '沒有符合的寵物。',
turnOff: '關閉',
turnOn: '開啟',
installed: '已安裝',
generatedTag: '生成',
adoptFailed: '無法領養該寵物。',
toggleFailed: enabled => `無法${enabled ? '開啟' : '關閉'}寵物顯示。`,
noneAvailable: '尚無可用寵物——請在下方選擇一個安裝。'
},
generatePet: {
title: '生成寵物',
placeholder: '描述要生成的寵物……',
promptHint: '輸入描述,然後按 Enter 生成四種造型。',
readyHint: '按 Enter 依描述生成四種造型。',
generate: '生成',
generating: '生成中……',
retry: '重試',
hatch: '孵化',
spawning: '召喚中……',
hatching: '正在孵化你的寵物……',
hatchingSub: '正在注入生命……',
hatched: '孵化成功!',
hatchRow: (_state, done, total) => `正在繪製畫面…… ${done}/${total}`,
hatchComposing: '正在拼合……',
hatchSaving: '快好了……',
namePlaceholder: '為寵物命名',
staleBackend: '請更新 Hermes 以生成寵物。',
backgroundHint: '你可以關閉此視窗——完成後 Hermes 會通知你。',
slowProviderHint: '這可能需要幾分鐘',
remix: '混合生成',
remixConfirmTitle: '以此造型混合生成?',
remixConfirmBody: '將以此造型為起點生成一組新草圖,可能需要幾分鐘。',
genericError: '生成失敗——請重試或選一個建議。',
referenceImageTooLarge: '參考圖片過大。請使用小於 16 MB 的圖片。',
referenceImageInvalid: '無法讀取該參考圖片。請嘗試 PNG、JPG、WebP 或 GIF。',
adopt: '領養',
startOver: '重新開始'
},
installTheme: {
title: '安裝主題…',
pageTitle: '安裝主題',
placeholder: '搜尋 VS Code Marketplace...',
loading: '正在搜尋 Marketplace...',
error: '無法連接到 Marketplace。',
empty: '沒有符合的主題。',
install: '安裝',
installing: '安裝中...',
installed: '已安裝',
installs: count => `${count} 次安裝`
},
settingsFields: '設定欄位',
mcpServers: 'MCP 伺服器',
archivedChats: '已封存聊天',
sections: { sessions: '工作階段', system: '系統', usage: '使用量' },
sectionDescriptions: {
sessions: '搜尋和管理工作階段',
system: '狀態、記錄和系統動作',
usage: '一段時間內的詞元、費用和技能活動'
},
nav: {
newChat: { title: '新工作階段', detail: '開始新的工作階段' },
settings: { title: '設定', detail: '設定 Hermes 桌面端' },
skills: { title: '技能與工具', detail: '啟用技能、工具集和提供方' },
messaging: { title: '訊息平台', detail: '設定 Telegram、Slack、Discord 等' },
artifacts: { title: '成品', detail: '瀏覽產生的輸出' }
},
sectionEntries: {
sessions: { title: '工作階段面板', detail: '搜尋、釘選和管理工作階段' },
system: { title: '系統面板', detail: '閘道狀態、記錄、重新啟動/更新' },
usage: { title: '使用量面板', detail: '詞元、費用和技能活動' }
},
providerNavigate: '導覽',
providerSessions: '工作階段',
refresh: '重新整理',
refreshing: '重新整理中…',
noResults: '找不到相符的結果。',
pinSession: '釘選工作階段',
unpinSession: '取消釘選',
exportSession: '匯出工作階段',
deleteSession: '刪除工作階段',
noSessions: '暫無工作階段。',
gatewayRunning: '訊息閘道執行中',
gatewayStopped: '訊息閘道已停止',
hermesActiveSessions: (version, count) => `Hermes ${version} · 活躍工作階段 ${count}`,
restartGateway: '重新啟動閘道',
openBrowser: '開啟瀏覽器',
gatewayRestartFailed: '閘道重新啟動失敗。',
updateHermes: '更新 Hermes',
reloadWindow: '重新載入視窗',
actionRunning: '執行中',
actionDone: '完成',
actionFailed: '失敗',
actionStartedWaiting: '動作已啟動,等待狀態…',
loadingStatus: '正在載入狀態…',
recentLogs: '最近記錄',
noLogs: '尚未載入記錄。',
days: count => `${count} 天`,
statSessions: '工作階段',
statApiCalls: 'API 呼叫',
statTokens: '輸入/輸出詞元',
statCost: '預估費用',
actualCost: cost => `實際 ${cost}`,
loadingUsage: '正在載入使用量…',
noUsage: period => `最近 ${period} 天暫無使用量。`,
retry: '重試',
dailyTokens: '每日詞元',
input: '輸入',
output: '輸出',
noDailyActivity: '暫無每日活動。',
topModels: '常用模型',
noModelUsage: '暫無模型使用量。',
topSkills: '常用技能',
noSkillActivity: '暫無技能活動。',
actions: count => `${count} 次動作`
},
messaging: {
search: '搜尋訊息平台…',
loading: '正在載入訊息平台…',
loadFailed: '訊息平台載入失敗',
states: {
connected: '已連線',
connecting: '連線中',
disabled: '已停用',
fatal: '錯誤',
gateway_stopped: '訊息閘道已停止',
not_configured: '需要設定',
pending_restart: '需要重新啟動',
retrying: '重試中',
startup_failed: '啟動失敗'
},
unknown: '未知',
hintPendingRestart: '在狀態列重新啟動閘道以套用此變更。',
hintGatewayStopped: '在狀態列啟動閘道以建立連線。',
credentialsSet: '憑證已設定',
needsSetup: '需要設定',
gatewayStopped: '訊息閘道已停止',
getCredentials: '取得您的憑證',
openSetupGuide: '開啟設定指南',
required: '必填',
recommended: '建議',
advanced: count => `進階 (${count})`,
noTokenNeeded: '此平台不需要在此填寫 Token。請按照上方設定指南操作,然後在下方啟用。',
enabled: '已啟用',
disabled: '已停用',
unsavedChanges: '有未儲存的變更',
saving: '儲存中…',
saveChanges: '儲存變更',
saved: '已儲存',
replaceValue: '取代目前值',
openDocs: '開啟文件',
clearField: key => `清除 ${key}`,
enableAria: name => `啟用 ${name}`,
disableAria: name => `停用 ${name}`,
platformEnabled: name => `${name} 已啟用`,
platformDisabled: name => `${name} 已停用`,
restartToApply: '此變更將在閘道重新啟動後生效。',
setupSaved: name => `${name} 設定已儲存`,
restartToReconnect: '新憑證將在閘道重新啟動後生效。',
keyCleared: key => `${key} 已清除`,
setupUpdated: name => `${name} 設定已更新。`,
failedUpdate: name => `更新 ${name} 失敗`,
failedSave: name => `儲存 ${name} 失敗`,
failedClear: key => `清除 ${key} 失敗`,
fieldCopy: {
TELEGRAM_BOT_TOKEN: {
label: 'Bot Token',
help: '用 @BotFather 建立機器人,然後貼上它給您的 Token。',
placeholder: '貼上 Telegram bot Token'
},
TELEGRAM_ALLOWED_USERS: {
label: '允許的 Telegram 使用者 ID',
help: '建議設定。來自 @userinfobot 的逗號分隔數字 ID。不設定則任何人都能私訊您的機器人。'
},
TELEGRAM_PROXY: { label: '代理 URL', help: '僅在 Telegram 被封鎖的網路中需要。' },
DISCORD_BOT_TOKEN: {
label: 'Bot Token',
help: '在 Discord 開發者入口網站建立應用程式,新增機器人,然後貼上其 Token。'
},
DISCORD_ALLOWED_USERS: { label: '允許的 Discord 使用者 ID', help: '建議設定。逗號分隔的 Discord 使用者 ID。' },
DISCORD_REPLY_TO_MODE: { label: '回覆方式', help: 'first、all 或 off。' },
DISCORD_ALLOW_ALL_USERS: {
label: '允許所有 Discord 使用者',
help: '僅供開發使用。為 true 時,任何人都可以私訊機器人,不需要允許清單。'
},
DISCORD_HOME_CHANNEL: {
label: '主頻道 ID',
help: '機器人主動傳送訊息的頻道(cron 輸出、提醒等)。'
},
DISCORD_HOME_CHANNEL_NAME: {
label: '主頻道名稱',
help: '記錄和狀態輸出中顯示的主頻道名稱。'
},
BLUEBUBBLES_ALLOW_ALL_USERS: { label: '允許所有 iMessage 使用者', help: '為 true 時略過 BlueBubbles 允許清單。' },
MATTERMOST_ALLOW_ALL_USERS: { label: '允許所有 Mattermost 使用者' },
MATTERMOST_HOME_CHANNEL: { label: '主頻道' },
QQ_ALLOW_ALL_USERS: { label: '允許所有 QQ 使用者' },
QQBOT_HOME_CHANNEL: { label: 'QQ 主頻道', help: 'cron 傳遞的預設頻道或群組。' },
QQBOT_HOME_CHANNEL_NAME: { label: 'QQ 主頻道名稱' },
SLACK_BOT_TOKEN: {
label: 'Slack bot Token',
help: '安裝 Slack 應用程式後,在 OAuth & Permissions 中找到 bot Token。',
placeholder: '貼上 Slack bot Token'
},
SLACK_APP_TOKEN: {
label: 'Slack app Token',
help: 'Socket Mode 需要 app 層級 Token。',
placeholder: '貼上 Slack app Token'
},
SLACK_ALLOWED_USERS: { label: '允許的 Slack 使用者 ID', help: '建議設定。逗號分隔的 Slack 使用者 ID。' },
MATTERMOST_URL: { label: '伺服器 URL', placeholder: 'https://mattermost.example.com' },
MATTERMOST_TOKEN: { label: 'Bot Token' },
MATTERMOST_ALLOWED_USERS: { label: '允許的使用者 ID', help: '建議設定。逗號分隔的 Mattermost 使用者 ID。' },
MATRIX_HOMESERVER: { label: 'Homeserver URL', placeholder: 'https://matrix.org' },
MATRIX_ACCESS_TOKEN: { label: '存取 Token' },
MATRIX_USER_ID: { label: 'Bot 使用者 ID', placeholder: '@hermes:example.org' },
MATRIX_ALLOWED_USERS: {
label: '允許的 Matrix 使用者 ID',
help: '建議設定。@user:server 格式的逗號分隔使用者 ID。'
},
SIGNAL_HTTP_URL: {
label: 'Signal 橋接 URL',
placeholder: 'http://127.0.0.1:8080',
help: '執行中的 signal-cli REST 橋接的 URL。'
},
SIGNAL_ACCOUNT: { label: '電話號碼', help: '在 signal-cli 橋接中註冊的號碼。' },
SIGNAL_ALLOWED_USERS: { label: '允許的 Signal 使用者', help: '建議設定。逗號分隔的 Signal 識別碼。' },
WHATSAPP_ENABLED: {
label: '啟用 WhatsApp 橋接',
help: '由下方切換開關自動設定。除非確知需要,否則請勿變更。'
},
WHATSAPP_MODE: { label: '橋接模式' },
WHATSAPP_ALLOWED_USERS: {
label: '允許的 WhatsApp 使用者',
help: '建議設定。逗號分隔的電話號碼或 WhatsApp ID。'
}
},
platformIntro: {}
},
profiles: {
close: '關閉設定檔',
nameHint: '小寫字母、數字、連字號和底線。必須以字母或數字開頭。',
title: '設定檔',
count: count => `${count} 個設定檔`,
search: '搜尋設定檔…',
loading: '正在載入設定檔…',
newProfile: '新增設定檔',
importProfile: '匯入設定檔…',
exportProfile: '匯出設定檔…',
imported: '設定檔已匯入',
exported: '設定檔已匯出',
failedImport: '匯入設定檔失敗',
failedExport: '匯出設定檔失敗',
allProfiles: '全部設定檔',
showAllProfiles: '顯示全部設定檔',
switchToProfile: name => `切換至 ${name}`,
switchToConnection: name => `切換至 ${name}`,
switchConnectionFailed: name => `無法連線至 ${name}`,
manageProfiles: '管理設定檔…',
remoteOverride: {
menuItem: '連線至遠端主機…',
badge: (host: string) => `執行於 ${host}`,
title: (profile: string) => `將 ${profile} 連線至遠端主機`,
description: '此設定檔中的工作階段將在你指定的遠端 Hermes 上執行,而不是這台電腦。',
urlLabel: '遠端位址',
urlPlaceholder: 'https://hermes.example.com',
urlInvalid: '請輸入以 http:// 或 https:// 開頭的完整位址',
tokenLabel: '存取權杖',
tokenPlaceholder: '貼上遠端工作階段權杖',
tokenSavedHint: '已儲存權杖。留空以保留現有權杖。',
plainTextOptIn: '這台電腦沒有安全金鑰儲存空間,權杖將以未加密方式儲存到磁碟。仍要儲存。',
collisionWarning: (label: string) => `設定中已存在名為「${label}」的閘道。此設定檔連線是獨立的,不會變更它。`,
confirmTitle: '將此設定檔連線至遠端主機?',
confirmNote: (profile: string, host: string) =>
`${profile} 中的新對話將在 ${host} 上執行。指令執行與檔案讀取都會發生在那台電腦上,而不是這台。請只連線你信任的主機。`,
confirmBack: '返回',
connect: '連線',
connecting: '連線中…',
disconnect: '移除遠端連線',
savedTitle: '設定檔已連線',
savedMessage: (profile: string, host: string) => `${profile} 現在執行於 ${host}`,
removedTitle: '已移除遠端連線',
removedMessage: (profile: string) => `${profile} 現在在這台電腦上執行`,
removeFailed: '無法移除遠端連線',
authFailedTitle: '遠端主機拒絕了已儲存的權杖',
authFailedMessage: (profile: string, host: string) =>
`${host} 拒絕了為 ${profile} 儲存的權杖。它可能已在遠端被變更。`,
updateToken: '輸入新權杖…'
},
actions: '動作',
color: '顏色…',
colorFor: '顏色',
setColor: color => `設定顏色 ${color}`,
autoColor: '自動',
noProfiles: '找不到設定檔。',
selectPrompt: '選擇一個設定檔以檢視其詳細資訊。',
refresh: '重新整理設定檔',
refreshing: '正在重新整理設定檔',
default: '預設',
skills: count => `${count} 個技能`,
env: 'env',
defaultBadge: '預設',
rename: '重新命名',
renameMenu: '重新命名…',
exportMenu: '匯出…',
editSoul: '編輯 SOUL.md…',
copySetup: '複製安裝指令',
copying: '複製中…',
modelLabel: '模型',
skillsLabel: '技能',
notSet: '未設定',
soulDesc: '內建於此設定檔的系統提示詞與角色指令。',
soulOptional: '選填',
soulPlaceholder: mode => `此設定檔的系統提示詞 / 角色說明。\n留空則保留${mode}預設值。`,
soulPlaceholderCloned: '複製的',
soulPlaceholderEmpty: '空的',
unsavedChanges: '有未儲存的變更',
loadingSoul: '正在載入 SOUL.md…',
emptySoul: '空的 SOUL.md — 開始撰寫角色設定…',
saving: '儲存中…',
saveSoul: '儲存 SOUL.md',
deleteTitle: '刪除設定檔?',
deleteDescPrefix: '這將刪除 ',
deleteDescMid: ' 並移除其 ',
deleteDescSuffix: ' 目錄。此操作無法復原。',
deleting: '刪除中…',
createDesc: '設定檔是獨立的 Hermes 環境:各自擁有獨立的設定、技能和 SOUL.md。',
nameLabel: '名稱',
cloneFrom: '複製來源',
cloneFromNone: '無(空白)',
cloneFromDesc: '從選取的來源設定檔複製設定、技能和 SOUL.md。',
cloneFromDefault: '從預設設定檔複製設定',
cloneFromDefaultDesc: '從您的預設設定檔複製設定、技能和 SOUL.md。',
invalidName: hint => `設定檔名稱無效。${hint}`,
nameRequired: '名稱為必填',
creating: '建立中…',
createAction: '建立設定檔',
renameTitle: '重新命名設定檔',
renameDescPrefix: '重新命名會更新設定檔目錄以及 ',
renameDescSuffix: ' 中的所有包裝指令碼。',
newNameLabel: '新名稱',
renaming: '重新命名中…',
created: '已建立',
renamed: '已重新命名',
deleted: '已刪除',
setupCopied: '安裝指令已複製',
soulSaved: 'SOUL.md 已儲存',
failedLoad: '載入設定檔失敗',
failedDelete: '刪除設定檔失敗',
failedCopy: '複製安裝指令失敗',
failedLoadSoul: '載入 SOUL.md 失敗',
failedSaveSoul: '儲存 SOUL.md 失敗',
failedCreate: '建立設定檔失敗',
failedRename: '重新命名設定檔失敗'
},
cron: {
close: '關閉排程',
title: '排程工作',
count: count => `${count} 個工作`,
modelImpact: {
title: '排程工作需要檢查',
message: count => `在您檢查模型設定之前,${count} 個排程工作將被略過。`,
detailMore: (names, remaining) => `${names},以及另外 ${remaining} 個`,
review: '檢查排程工作',
saveFailed: 'Hermes 未儲存該模型變更。',
confirmTitle: '模型選擇警告',
confirmDetail: '僅在你接受此權衡時確認。',
confirmAction: '確認',
declined: '已取消模型變更 — 你拒絕了資料訓練層級警告。'
},
search: '搜尋排程工作…',
loading: '正在載入排程工作…',
states: {
enabled: '已啟用',
scheduled: '已排程',
running: '執行中',
paused: '已暫停',
disabled: '已停用',
error: '錯誤',
completed: '已完成'
},
deliveryLabels: {
local: '此桌面',
telegram: 'Telegram',
discord: 'Discord',
slack: 'Slack',
email: '電子郵件'
},
scheduleLabels: {
daily: '每天',
weekdays: '工作日',
weekly: '每週',
monthly: '每月',
hourly: '每小時',
'every-15-minutes': '每 15 分鐘',
custom: '自訂'
},
scheduleHints: {
daily: '每天上午 9:00',
weekdays: '週一至週五上午 9:00',
weekly: '每週一上午 9:00',
monthly: '每月第一天上午 9:00',
hourly: '每個整點',
'every-15-minutes': '每 15 分鐘',
custom: 'Cron 語法或自然語言'
},
days: {
'0': '週日',
'1': '週一',
'2': '週二',
'3': '週三',
'4': '週四',
'5': '週五',
'6': '週六',
'7': '週日'
},
dayFallback: value => `第 ${value} 天`,
everyDayAt: time => `每天 ${time}`,
weekdaysAt: time => `工作日 ${time}`,
everyDayOfWeekAt: (day, time) => `每${day} ${time}`,
monthlyOnDayAt: (dayOfMonth, time) => `每月 ${dayOfMonth} 日 ${time}`,
topOfHour: '每個整點',
everyHourAt: minute => `每小時的 :${minute}`,
newCron: '新排程工作',
emptyDescNew: '按 cron 表達式排程一個提示詞。Hermes 會執行它,並將結果傳送至您選擇的目的地。',
emptyDescSearch: '請嘗試更廣泛的搜尋詞。',
emptyTitleNew: '暫無排程工作',
emptyTitleSearch: '無相符項目',
last: '上次:',
next: '下次:',
noRuns: '尚無執行',
manage: '管理',
showRuns: '顯示執行記錄',
hideRuns: '隱藏執行記錄',
runHistory: '執行記錄',
actionsTitle: '排程工作動作',
resume: '繼續',
pause: '暫停',
resumeTitle: '繼續',
pauseTitle: '暫停',
triggerNow: '立即觸發',
edit: '編輯排程工作',
deleteTitle: '刪除排程工作?',
deleteDescPrefix: '這將永久移除 ',
deleteDescSuffix: '。它會立即停止觸發。',
deleting: '刪除中…',
resumed: '排程工作已繼續',
paused: '排程工作已暫停',
triggered: '排程工作已觸發',
deleted: '排程工作已刪除',
created: '排程工作已建立',
updated: '排程工作已更新',
failedLoad: '載入排程工作失敗',
failedUpdate: '更新排程工作失敗',
failedTrigger: '觸發排程工作失敗',
failedDelete: '刪除排程工作失敗',
failedSave: '儲存排程工作失敗',
editTitle: '編輯排程工作',
createTitle: '新排程工作',
editDesc: '更新排程、提示詞或傳遞目標。變更將在下次執行時生效。',
createDesc: '排程一個提示詞以自動執行。使用 cron 語法或類似「每 15 分鐘」的自然語言。',
nameLabel: '名稱',
namePlaceholder: '例如:每日摘要',
promptLabel: '提示詞',
promptPlaceholder: '代理每次執行時應做什麼?',
frequencyLabel: '頻率',
deliverLabel: '傳遞至',
deliverNeedsHomeChannel: '請先設定主頻道',
modelLabel: '模型',
modelDefault: '預設(全域模型)',
customScheduleLabel: '自訂排程',
customPlaceholder: '0 9 * * * 或 weekdays at 9am',
customHint: 'Cron 表達式,或類似「每小時」「工作日上午 9 點」的短語。',
optional: '選填',
promptRequired: '提示詞為必填項目。',
promptScheduleRequired: '提示詞和排程為必填項目。',
scheduleRequired: '排程為必填項目。',
scriptOnlyEditHint: '僅腳本任務(無 AI 提示詞)。任務 ID:',
saveChanges: '儲存變更',
createAction: '建立排程工作',
tabs: {
jobs: '工作',
blueprints: '藍圖'
},
blueprints: {
tab: '藍圖',
startFrom: '從此開始',
custom: '自訂',
subtitle: '現成的自動化',
dialogDesc: '填寫詳細資訊並進行排程。',
scheduleIt: '安排工作',
scheduling: '安排中...',
scheduled: '藍圖已安排',
loading: '正在載入藍圖...',
failedLoad: '載入藍圖失敗',
emptyTitle: '沒有可用的藍圖',
emptyDesc: '此後端上沒有可用的自動化藍圖。'
}
},
artifacts: {
search: '搜尋成品…',
refresh: '重新整理成品',
refreshing: '正在重新整理成品',
indexing: '正在索引最近工作階段的成品',
tabAll: '全部',
tabImages: '圖片',
tabFiles: '檔案',
tabLinks: '連結',
noArtifactsTitle: '找不到成品',
noArtifactsDesc: '當工作階段產生圖片和檔案輸出時,它們會顯示在這裡。',
failedLoad: '成品載入失敗',
openFailed: '開啟失敗',
itemsImage: '張圖片',
itemsLink: '個連結',
itemsFile: '個檔案',
itemsGeneric: '項',
zero: '0',
rangeOf: (start, end, total) => `${start}-${end},共 ${total}`,
goToPage: (itemLabel, page) => `前往${itemLabel}第 ${page} 頁`,
colTitleLink: '連結標題',
colTitleFile: '名稱',
colTitleDefault: '標題 / 名稱',
colLocationLink: 'URL',
colLocationFile: '路徑',
colLocationDefault: '位置',
colSession: '工作階段',
kindImage: '圖片',
kindFile: '檔案',
kindLink: '連結',
chat: '聊天',
copyUrl: '複製 URL',
copyPath: '複製路徑'
},
artifactCard: {
kind: { code: '程式碼', html: '互動頁面', svg: '圖形' },
generating: lines => `產生中… ${lines} 行`,
versionBadge: count => `${count} 個版本`,
open: '開啟'
},
artifactPreview: {
versionOf: (current, total) => `第 ${current}/${total} 版`,
olderVersion: '較舊版本',
newerVersion: '較新版本',
latest: '最新',
copyContent: '複製內容',
download: '下載',
openInBrowser: '在瀏覽器中開啟',
openInBrowserFailed: '無法在瀏覽器中開啟',
missingTitle: '產物無法使用',
missingBody: '此產物已不在本機註冊表中。'
},
sidebar: {
nav: {
'new-session': '新工作階段',
skills: '技能與工具',
messaging: '訊息平台',
artifacts: '成品',
cron: '排程工作'
},
searchAria: '搜尋工作階段',
searchPlaceholder: '搜尋工作階段…',
clearSearch: '清除搜尋',
noMatch: query => `沒有工作階段符合「${query}」。`,
results: '結果',
pinned: '已釘選',
sessions: '工作階段',
cronJobs: '排程任務',
groupAriaGrouped: '以單一清單顯示工作階段',
groupAriaUngrouped: '依工作區分組工作階段',
showProjects: '顯示專案',
showSessions: '顯示工作階段',
groupTitleGrouped: '取消分組',
groupTitleUngrouped: '依工作區分組',
allPinned: '這裡的全部已釘選。取消釘選某個聊天即可在最近中顯示。',
shiftClickHint: 'Shift + 點擊聊天以釘選 · 拖曳以重新排序',
noWorkspace: '無工作區',
projectEmpty: '尚無工作階段',
noSessions: '尚無工作階段',
noFilterMatches: '沒有工作階段符合這些篩選條件',
projects: {
sectionLabel: '專案',
home: '主頁',
newButton: '新增專案',
createTitle: '新增專案',
createDesc: '為工作區命名並新增一個或多個資料夾。',
renameTitle: '重新命名專案',
addFolderTitle: '新增資料夾',
namePlaceholder: '例如 Skunkworks',
foldersLabel: '資料夾',
ideaLabel: '想法',
ideaPlaceholder: '這個專案是關於什麼的?(儲存到 IDEA.md)',
ideaGenerate: '產生想法',
ideaGenerating: '產生中…',
ideaShuffle: '隨機範本',
noFolders: '尚未新增資料夾。',
addFolder: '新增資料夾',
primaryBadge: '主要',
removeFolder: '移除',
create: '建立',
menu: '動作',
menuRename: '重新命名…',
menuAppearance: '外觀',
noColor: '無顏色',
menuAddFolder: '新增資料夾',
menuSetActive: '設為使用中',
menuDelete: '刪除',
reveal: '在資料夾中顯示',
copyPath: '複製路徑',
removeFromSidebar: '從側邊欄移除',
createFailed: '無法建立專案',
staleBackend: '請更新 Hermes 後端以建立專案——目前後端比桌面應用舊(設定 → 更新 → 後端)。',
deleteConfirm: '這會從 Hermes 中移除已儲存的專案。檔案、git 儲存庫和工作樹維持不變。',
startWork: '新增工作樹',
newWorktreeTitle: '新增工作樹',
newWorktreeDesc: '為這個工作樹命名分支。',
branchPlaceholder: '例如 my-feature',
branchOff: () => ({ after: ' 分支', before: '從 ' }),
baseBranchPlaceholder: '搜尋分支…',
baseBranchNone: '未找到分支',
startWorkFailed: '無法建立工作樹',
worktreeStaleBackend: '請更新 Hermes 後端以在此遠端連線上建立工作樹 —— 該後端早於 git 工作樹 API。',
worktreeProjectLabel: '專案',
worktreeProjectPlaceholder: '搜尋專案…',
worktreeProjectNone: '沒有包含資料夾的專案',
convertBranch: '轉換分支…',
convertBranchTitle: '轉換分支',
convertBranchDesc: '開啟已簽出的分支,或為可用分支建立工作樹。',
convertBranchPlaceholder: '搜尋分支…',
convertBranchInstead: '轉換現有分支',
branchOpenExisting: '開啟',
branchSwitchHome: '切回主簽出',
branchCreateWorktree: '新增工作樹',
branchTrackRemote: '追蹤遠端',
branchesLoading: '正在載入分支…',
noBranches: '找不到分支',
removeWorktree: '移除工作樹',
removeWorktreeFailed: '無法移除工作樹(有未提交的變更?)',
removeWorktreeConfirm:
'從 git 中移除(刪除工作樹目錄,但保留分支),或僅從側邊欄隱藏該軌道並將工作樹保留在磁碟上。',
removeWorktreeDirty: '此工作樹有未提交的變更。強制移除(捨棄這些變更),或僅隱藏軌道並保留在磁碟上。',
forceRemove: '強制移除',
enter: label => `開啟 ${label}`
},
newSessionIn: label => `在 ${label} 中新建工作階段`,
showMoreIn: (count, label) => `在 ${label} 中再顯示 ${count} 個`,
loading: '載入中…',
loadMore: '載入更多',
loadCount: step => `再載入 ${step} 個`,
messageCount: count => `${count} 條訊息`,
toolCallCount: count => `${count} 次工具調用`,
row: {
pin: '釘選',
unpin: '取消釘選',
markUnread: '標記為未讀',
markRead: '標記為已讀',
unreadFailed: '無法更新未讀狀態',
copyId: '複製 ID',
export: '匯出',
branchFrom: '分支',
rename: '重新命名…',
archive: '封存',
newWindow: '新視窗',
openInTerminal: '在終端機中開啟',
copyIdFailed: '無法複製工作階段 ID',
sessionActions: '工作階段動作',
sessionRunning: '工作階段執行中',
needsInput: '需要您的輸入',
waitingForAnswer: '等待您的回答',
finishedUnread: '已完成 — 未讀',
backgroundRunning: '背景任務執行中',
draftSession: '草稿 — 尚未傳送',
handoffOrigin: platform => `從 ${platform} 轉接`,
ownedByProfile: profile => `設定檔:${profile}`,
renamed: '已重新命名',
renameFailed: '重新命名失敗',
renameTitle: '重新命名工作階段',
renameDesc: '留空則清除。',
untitledPlaceholder: '未命名工作階段',
deleteTitle: '刪除會話?',
deleteDesc: title => `這將永久刪除「${title}」,且無法復原。`,
deleting: '正在刪除…',
deleted: '會話已刪除',
untitledChat: id => `工作階段 ${id}`,
ageNow: '剛才',
ageDay: '天',
ageHour: '時',
ageMin: '分'
},
dateDivider: {
today: '今天稍早',
yesterday: '昨天',
thisWeek: '本週',
lastWeek: '上週',
thisMonth: '本月'
},
statusDivider: {
working: '進行中',
done: '已完成'
}
},
composer: {
message: '訊息',
wakingProfile: profile => `正在喚醒 ${profile}…`,
placeholderStarting: '正在啟動 Hermes...',
placeholderReconnecting: '正在重新連線至 Hermes…',
placeholderFollowUp: '傳送後續訊息',
newSessionPlaceholders: [
'我們要建立什麼?',
'給 Hermes 一個任務',
'您在想什麼?',
'描述您需要什麼',
'我們該處理什麼?',
'盡管問',
'從一個目標開始'
],
followUpPlaceholders: [
'傳送後續訊息',
'補充更多脈絡',
'細化此請求',
'下一步是什麼?',
'繼續推進',
'再深入一點',
'調整或繼續'
],
startVoice: '開始語音對話',
openDirective: '開啟',
queueMessage: '排隊訊息',
stop: '停止',
send: '傳送',
speaking: '說話中',
transcribing: '轉寫中',
thinking: '思考中',
muted: '已靜音',
listening: '聆聽中',
muteMic: '麥克風靜音',
unmuteMic: '取消麥克風靜音',
stopListening: '停止聆聽並傳送',
stopShort: '停止',
endConversation: '結束語音對話',
endShort: '結束',
stopDictation: '停止聽寫',
transcribingDictation: '正在轉寫聽寫',
voiceControls: '語音',
voiceDictation: '語音聽寫',
speakReplies: '朗讀回覆',
stopSpeakingReplies: '停止朗讀回覆',
wakeWordListening: phrase => `喚醒詞:「${phrase}」— 正在聆聽`,
wakeWordOff: phrase => `喚醒詞:「${phrase}」— 已關閉`,
wakeWordPausedVoice: phrase => `喚醒詞:「${phrase}」— 語音對話期間暫停`,
lookupLoading: '查詢中…',
lookupNoMatches: '沒有相符項目。',
lookupTry: '試試',
lookupOr: '或',
commonCommands: '常用指令',
hotkeys: '快捷鍵',
helpFooter: '開啟完整面板 · 退格鍵關閉',
commandDescs: {
'/help': '指令與快捷鍵的完整清單',
'/clear': '開始新工作階段',
'/resume': '繼續之前的工作階段',
'/details': '控制對話記錄的詳細程度',
'/copy': '複製所選內容或最後一條助手訊息',
'/quit': '結束 hermes'
},
hotkeyDescs: {
'composer.mention': '參照檔案、資料夾、URL、git',
'composer.slash': '斜線指令面板',
'composer.help': '此快速說明(刪除以關閉)',
'composer.sendNewline': '傳送 · Shift+Enter 換行',
'composer.sendQueued': '傳送下一個排隊的回合',
'keybinds.openPanel': '所有鍵盤快捷鍵',
'composer.cancel': '關閉彈出視窗 · 取消執行',
'composer.history': '循環彈出視窗 / 歷史記錄'
},
attachUrlTitle: '附加 URL',
attachUrlDesc: 'Hermes 將擷取該頁面並作為此回合的脈絡。',
urlPlaceholder: 'https://example.com/post',
urlHintPre: '請輸入完整 URL,例如 ',
attach: '附加',
queued: count => `${count} 個排隊中`,
queuedPaused: count => `${count} 個排隊中 — 已暫停`,
attachmentOnly: '僅附件回合',
emptyTurn: '空回合',
attachments: count => `${count} 個附件`,
editingInComposer: '在輸入框中編輯',
editingQueuedInComposer: '在輸入框中編輯排隊回合',
queueEdit: '編輯',
queueSendNext: '下一個',
queueSteer: '引導 — 立即修正目前回合',
queueSend: '傳送',
queueDelete: '刪除',
queueResume: '繼續',
queueResumeTip: '已被停止操作暫停 — 繼續傳送排隊的回合',
queueStuckTitle: '佇列訊息未送出',
queueStuckBody: '佇列中的對話多次傳送失敗。它仍在佇列中,請重試傳送。',
previewUnavailable: '預覽不可用',
previewLabel: label => `預覽 ${label}`,
couldNotPreview: label => `無法預覽 ${label}`,
removeAttachment: label => `移除 ${label}`,
dictating: '聽寫中',
preparingAudio: '正在準備音訊',
speakingResponse: '正在朗讀回覆',
readingAloud: '朗讀中',
themeSuggestions: '桌面主題建議',
noMatchingThemes: '沒有相符的主題。',
themeTryPre: '試試 ',
themeTryPost: '。',
attachLabel: '附加',
files: '檔案…',
folder: '資料夾…',
images: '圖片…',
pasteImage: '貼上圖片',
url: 'URL…',
promptSnippets: '提示詞片段…',
tipPre: '提示:輸入 ',
tipPost: ' 以行內參照檔案。',
snippetsTitle: '提示詞片段',
snippetsDesc: '選擇一個起始提示詞放入輸入框。',
dropFiles: '拖曳檔案以附加',
dropSession: '拖曳以連結此聊天',
snippets: {
codeReview: {
label: '程式碼審查',
description: '審查目前的變更是否有回歸、遺漏的邊緣情況和缺少的測試。',
text: '請審查這部分是否有錯誤、回歸和缺少的測試。'
},
implementationPlan: {
label: '實作計劃',
description: '在動程式碼之前先勾勒方案,讓 diff 保持聚焦。',
text: '請在修改程式碼前制定一個簡潔的實作計劃。'
},
explainThis: {
label: '解釋這段',
description: '說明所選程式碼的運作方式,並連結到關鍵檔案。',
text: '請解釋這是如何運作的,並告訴我關鍵檔案在哪裡。'
}
}
},
statusStack: {
agents: '代理',
background: count => `${count} 個背景任務`,
goalActive: '目標進行中',
goalDone: '目標已完成',
goalPaused: '目標已暫停',
goalWaiting: '目標等待中',
subagents: count => `${count} 個子代理`,
todos: (done, total) => `任務 ${done}/${total}`,
running: '執行中',
stop: '停止',
dismiss: '關閉',
exit: code => `結束碼 ${code}`,
coding: {
title: '工作區',
noBranch: '無分支',
detached: '分離 HEAD',
clean: '乾淨',
changed: count => `${count} 處變更`,
ahead: count => `領先 ${count}`,
behind: count => `落後 ${count}`,
review: '審查',
close: '關閉',
openChanges: '開啟變更',
openFile: '開啟檔案',
stage: '暫存',
unstage: '取消暫存',
stageAll: '全部暫存',
viewAsTree: '樹狀檢視',
viewAsList: '清單檢視',
revert: '還原',
revertAll: '全部還原',
revertConfirm: '捨棄對此檔案的變更並將其還原至已提交狀態?此操作無法復原。',
revertAllConfirm: '捨棄所有變更並將檔案還原至已提交狀態?此操作無法復原。',
staged: '已暫存',
noChanges: '沒有變更',
notRepo: '不是 Git 儲存庫',
noDiff: '沒有可顯示的差異',
scopeUncommitted: '未提交',
scopeBranch: '分支',
scopeLastTurn: '上一輪',
commit: '提交',
commitAndPush: '提交並推送',
commitPlaceholder: shortcut => `訊息(${shortcut} 提交)`,
generateCommitMessage: '產生提交訊息',
stopGenerating: '停止產生',
createPr: '建立 PR',
openPr: '開啟 PR',
ghMissing: '安裝 GitHub CLI (gh) 並登入後可開啟 PR',
agentShip: '讓 Hermes 提交並開 PR',
agentShipUnavailable: '擁有這些變更的對話目前不在畫面上。',
agentShipPrompt: '檢查目前的變更,使用清晰的約定式提交訊息提交,推送分支,並開啟一個拉取請求。',
newBranch: '新增分支',
branchOffFrom: base => `從 ${base} 建立新分支`,
switchTo: branch => `切換到 ${branch}`,
switchFailed: branch => `無法切換到 ${branch}`,
worktrees: '工作樹'
}
},
updates: {
stages: {
idle: '準備中…',
prepare: '準備中…',
fetch: '下載中…',
pull: '快完成了…',
pydeps: '收尾中…',
update: '正在更新 Hermes…',
rebuild: '正在重新建置桌面應用程式…',
restart: '正在重新啟動 Hermes…',
done: '更新完成',
manual: '從終端機更新',
guiSkew: '請更新桌面應用程式',
error: '更新已暫停'
},
checking: '正在檢查更新…',
checkFailedTitle: '無法檢查更新',
tryAgain: '重試',
notAvailableTitle: '更新不可用',
unsupportedMessage: '此版本的 Hermes 無法在應用程式內自行更新。',
connectionRetry: '請檢查網路連線後重試。',
latestBody: '您正在執行最新版本。',
latestBodyBackend: '後端正在執行最新版本。',
allSetTitle: '已是最新版本',
availableTitle: '有可用更新',
availableBody: '新版 Hermes 已可安裝。',
availableTitleBackend: '後端有可用更新',
availableBodyBackend: '已連接的 Hermes 後端有新版本可安裝。',
availableBodyNoChangelog: '已有新版本可用。此安裝方式無法顯示更新日誌。',
updateNow: '立即更新',
maybeLater: '稍後再說',
moreChanges: count => `另有 ${count} 項變更。`,
manualTitle: '從終端機更新',
manualBody: '您是從命令列安裝的 Hermes,因此更新也需要在那裡執行。請將此指令貼到終端機:',
manualPickedUp: '下次啟動 Hermes 時會使用新版本。',
guiSkewTitle: '請更新桌面應用程式',
guiSkewBody:
'後端已更新,但此桌面應用程式套件未變更。請更新或重新安裝 Hermes 桌面應用程式(你的 AppImage / .deb / .rpm)以保持一致。',
copy: '複製',
copied: '已複製',
done: '完成',
applyingBody:
'Hermes 更新程式會在自己的視窗中接管,並在完成後自動重新開啟 Hermes。更新期間請勿自行重新開啟 Hermes。',
applyingBodyBackend: '遠端後端正在套用更新並將重新啟動。恢復後 Hermes 會自動重新連線。',
applyingClose: '此視窗會在更新期間關閉,隨後 Hermes 會自動重新開啟。',
errorTitle: '更新未完成',
errorBody: '沒有資料遺失。您可以現在重試。',
blockerTitle: '關閉本機預覽以更新 Hermes?',
blockerBody: 'Hermes 需要在更新前停止這些本機預覽。這不會修改或刪除您的檔案。',
foreignBlockerTitle: '關閉其他處理程序以更新 Hermes',
foreignBlockerBody:
'Hermes 無法安全地自動關閉這些處理程序。請關閉擁有這些處理程序的應用程式、終端機或服務,然後重試更新。',
mixedBlockerBody: 'Hermes 可以關閉下方列出的本機預覽。其他處理程序必須手動關閉,更新才能繼續。',
closePreviewsAndUpdate: '關閉預覽並更新',
closePreviewsAndCheckAgain: '關閉預覽並重新檢查',
localPreview: '本機預覽',
portLabel: port => `連接埠 ${port}`,
pidLabel: pid => `PID ${pid}`,
technicalDetails: '技術詳細資料',
notNow: '暫不',
clientAlsoBehindTitle: '桌面應用版本落後',
clientAlsoBehindMessage: '後端已是最新,但此桌面應用仍是舊版本。請更新以取得最新修復。',
clientAlsoBehindAction: '更新桌面應用',
everythingDispatched: '更新已派送',
everythingSkipped: '已略過',
everythingRowFailed: '更新失敗',
everythingFanoutFailedTitle: '無法更新其他執行個體',
applyStatus: {
preparing: '正在更新後端…',
pulling: '後端更新中…',
restarting: '後端正在重新啟動以載入更新…',
notAvailable: '此後端無法更新。',
failed: '後端更新失敗。',
noReturn: '後端未恢復連線。更新可能未完成——請檢查後端主機。'
}
},
install: {
stageStates: {
pending: '等待中',
running: '安裝中',
succeeded: '完成',
skipped: '已略過',
failed: '失敗'
},
oneTimeTitle: 'Hermes 需要一次性安裝',
unsupportedDesc: platform =>
`${platform} 暫不支援自動首次啟動安裝。請開啟終端機並執行下面的指令,然後重新啟動此應用程式。之後啟動會略過此步驟。`,
installCommand: '安裝指令',
copyCommand: '複製指令',
viewDocs: '檢視安裝文件',
installTo: '將安裝至',
retryAfterRun: '我已執行 -- 重試',
setupChoiceTitle: '設定 Hermes Desktop',
setupChoiceDesc: '將此應用程式連線到您已執行的 Hermes 閘道,或在這台電腦上本機安裝 Hermes。',
connectExistingTitle: '連線到現有 Hermes',
connectExistingShort: '連線現有環境',
connectExistingDesc: '使用工作階段權杖或瀏覽器登入連線遠端後端。不會啟動本機安裝。',
installLocalTitle: '本機安裝 Hermes',
installLocalDesc: '下載 Hermes、建立 Python 環境,並在這台電腦上執行後端。',
localStartUnavailable: '無法啟動本機安裝。請重新啟動 Hermes Desktop 後再試一次。',
remoteSetupTitle: '連線到現有 Hermes',
remoteSetupDesc: '輸入閘道 URL。Hermes Desktop 會偵測需要權杖還是瀏覽器登入。',
remoteUrlTitle: '閘道 URL',
remoteUrlDesc: '使用 Hermes 閘道的基礎 URL;遠端位址請包含 https://。',
remoteUrlPlaceholder: 'https://gateway.example.com/hermes',
probing: '正在偵測閘道驗證方式...',
probeError: '無法連線到該 Hermes 閘道。',
identityProvider: '您的身分提供者',
authTitle: '驗證',
authNeedsOauth: provider => `測試此閘道前請先使用 ${provider} 登入。`,
authSignedIn: '瀏覽器登入已完成。',
connected: '已連線',
signIn: '登入',
signInWith: provider => `使用 ${provider} 登入`,
enterUrlFirst: '請先輸入閘道 URL。',
signInIncomplete: '驗證完成前登入視窗已關閉。',
tokenTitle: '工作階段權杖',
tokenDesc: '貼上遠端閘道 .env 檔案中的工作階段權杖。',
pasteSessionToken: '貼上工作階段權杖',
incompleteSignInTest: '測試此受 OAuth 保護的閘道前請先登入。',
incompleteTokenTest: '測試此閘道前請輸入工作階段權杖。',
testConnection: '測試連線',
testSucceeded: (baseUrl, version) => `已連線到 ${baseUrl}${version ? ` (${version})` : ''}。`,
applyRemote: '套用並重新連線',
backToSetup: '返回',
failedTitle: '安裝失敗',
settingUpTitle: '正在設定 Hermes Agent',
finishingTitle: '正在收尾',
failedDesc:
'某個安裝步驟失敗。在 Windows 上,如果另一個 Hermes CLI 或桌面執行個體正在執行,可能會出現這種情況。請停止正在執行的 Hermes 執行個體後重試。可查看下方的詳細資訊或 desktop 記錄中的完整記錄。',
activeDesc: '這是一次性設定。Hermes 安裝程式正在下載相依套件並設定您的電腦。之後啟動會略過此步驟。',
progress: (completed, total) => `${completed}/${total} 個步驟已完成`,
currentStage: stage => ` -- 目前:${stage}`,
fetchingManifest: '正在取得安裝程式 manifest...',
error: '錯誤',
hideOutput: '隱藏安裝程式輸出',
showOutput: '顯示安裝程式輸出',
lines: count => `${count} 行`,
noOutput: '暫無輸出。',
cancelling: '取消中...',
cancelInstall: '取消安裝',
transcriptSaved: '完整記錄已儲存至',
copiedOutput: '已複製!',
copyOutput: '複製輸出',
reloadRetry: '重新載入並重試'
},
onboarding: {
headerTitle: '開始設定 Hermes Agent',
headerDesc: '連線模型提供方即可開始聊天。大多數選項只需一次點擊。',
preparingInstall: 'Hermes 正在完成安裝。首次執行通常不到一分鐘。',
starting: '正在啟動 Hermes…',
lookingUpProviders: '正在查詢提供方...',
collapse: '收合',
otherProviders: '其他提供方',
haveApiKey: '我有 API 金鑰',
chooseLater: '稍後再選擇提供方',
recommended: '建議',
connected: '已連線',
featuredPitch: '一個訂閱,300+ 前沿模型 — 執行 Hermes 的建議方式',
fireworksPitch: '直接模型 API — Fireworks 託管的前沿模型',
localModelsTitle: '本地執行模型',
localModelsPitch: '無需帳號——下載模型,在本機執行',
openRouterPitch: '一個金鑰,數百個模型 — 穩定的預設選擇',
apiKeyOptions: {
fireworks: { short: '直接模型 API', description: '直接存取 Fireworks AI 託管的模型。' },
openrouter: { short: '一個金鑰,多個模型', description: '用一個金鑰存取數百個模型。適合新安裝的預設選擇。' },
openai: { short: 'GPT 等級模型', description: '直接存取 OpenAI 模型。' },
gemini: { short: 'Gemini 模型', description: '直接存取 Google Gemini 模型。' },
xai: { short: 'Grok 模型', description: '直接存取 xAI Grok 模型。' },
local: {
short: '自託管',
description: '將 Hermes 指向本機或自託管的 OpenAI 相容端點(vLLM、llama.cpp、Ollama 等)。'
}
},
backToSignIn: '返回登入',
getKey: '取得金鑰',
replaceCurrent: '取代目前值',
pasteApiKey: '貼上 API 金鑰',
couldNotSave: '無法儲存憑證。',
connecting: '連線中',
update: '更新',
flowSubtitles: {
pkce: '開啟瀏覽器登入,然後回到這裡繼續',
device_code: '在瀏覽器中開啟驗證頁面 — Hermes 會自動連線',
external: '先在終端機登入一次,然後回來繼續聊天'
},
startingSignIn: provider => `正在為 ${provider} 啟動登入...`,
verifyingCode: provider => `正在透過 ${provider} 驗證您的代碼...`,
connectedProvider: provider => `${provider} 已連線`,
connectedPicking: provider => `${provider} 已連線。正在選擇預設模型...`,
signInFailed: '登入失敗,請重試。',
signInExpired:
'等待授權逾時。通常是因為登入頁面在開啟的分頁中卡住(伺服器端問題)——請在該頁面完成登入後重試。若仍失敗,請改用 API 金鑰或 CLI 方式。',
pickDifferentProvider: '選擇其他提供方',
signInWith: provider => `使用 ${provider} 登入`,
openedBrowser: provider => `已在瀏覽器中開啟 ${provider}。`,
authorizeThere: '請在那裡授權 Hermes。',
copyAuthCode: '複製授權碼並貼到下方。',
pasteAuthCode: '貼上授權碼',
reopenAuthPage: '重新開啟授權頁面',
autoBrowser: provider => `已在瀏覽器中開啟 ${provider}。請在那裡授權 Hermes,連線會自動完成,無需複製或貼上。`,
reopenSignInPage: '重新開啟登入頁面',
waitingAuthorize: '等待您授權...',
externalPending: provider => `${provider} 透過自己的 CLI 登入。請在終端機執行此指令,然後回來選擇「我已登入」:`,
signedIn: '我已登入',
deviceCodeOpened: provider => `已在瀏覽器中開啟 ${provider}。請在那裡輸入此代碼:`,
reopenVerification: '重新開啟驗證頁面',
copy: '複製',
defaultModel: '預設模型',
freeTier: '免費層',
pro: 'Pro',
free: '免費',
price: (input, output) => `${input} 輸入 / ${output} 輸出 每 Mtok`,
change: '變更',
startChatting: '開始',
docs: provider => `${provider} 文件`
},
modelPicker: {
title: '切換模型',
current: '目前:',
unknown: '(未知)',
search: '篩選提供方和模型...',
noModels: '找不到模型。',
addProvider: '新增提供方',
loadFailed: '無法載入模型',
downloading: '下載中',
localDownloadsHeading: '本地',
noAuthenticatedProviders: '沒有已驗證的提供方。',
pro: 'Pro',
proNeedsSubscription: 'Pro 模型需要付費 Nous 訂閱。',
free: '免費',
freeTier: '免費層',
priceTitle: '每百萬 Token 的輸入/輸出價格',
wasPrice: '原價'
},
modelVisibility: {
title: '模型',
search: '搜尋模型',
noAuthenticatedProviders: '沒有已驗證的提供方。',
addProvider: '新增提供方…'
},
shell: {
windowControls: '視窗控制項',
paneControls: '窗格控制項',
appControls: '應用程式控制項',
modelMenu: {
search: '搜尋模型',
noModels: '找不到模型',
editModels: '編輯模型…',
refreshModels: '重新整理模型',
fast: '快速'
},
modelOptions: {
comboDetails: '模型 / 組合詳細資料',
noOptions: '此模型沒有可用選項',
options: '選項',
thinking: '思考',
fast: '快速',
effort: '推理強度',
minimal: '最小',
low: '低',
medium: '中',
high: '高',
xhigh: '極高',
max: '最高',
ultra: '超高',
updateFailed: '模型選項更新失敗',
fastFailed: '快速模式更新失敗'
},
gatewayMenu: {
gateway: '閘道',
connected: '已連線',
connecting: '連線中',
offline: '離線',
inferenceReady: '推論已就緒',
inferenceNotReady: '推論未就緒',
checkingInference: '正在檢查推論',
disconnected: '已中斷連線',
reconnectGateway: '重新連線閘道',
openSystem: '開啟系統面板',
connection: label => `連線:${label}`,
recentActivity: '最近活動',
viewAllLogs: '查看全部記錄 →',
messagingPlatforms: '訊息平台'
},
approvalMode: {
title: '核准模式',
ariaLabel: mode => `核准模式:${mode}`,
manual: '手動',
manualDescription: '執行需要核准的操作前詢問',
smart: '智慧',
smartDescription: '自動評估操作,並在需要時詢問',
off: '關閉',
offDescription: '不顯示核准提示,直接執行'
},
statusbar: {
unknown: '未知',
restart: '重新啟動',
update: '更新',
updateInProgress: '更新中',
commitsBehind: (count, branch) => `落後 ${branch} ${count} 個提交`,
desktopVersion: version => `Hermes Desktop v${version}`,
backendVersion: version => `後端 v${version}`,
clientLabel: version => `用戶端 v${version}`,
connectionSsh: host => `SSH: ${host}`,
connectionRemote: host => `遠端: ${host}`,
connectionCloud: host => `雲端: ${host}`,
connectionCloudTooltip: host => `Hermes Cloud · ${host}`,
connectionSshTooltip: host => `SSH · ${host}`,
connectionRemoteTooltip: host => `Remote · ${host}`,
backendLabel: version => `後端 v${version}`,
commit: sha => `提交 ${sha}`,
branch: branch => `分支 ${branch}`,
closeCommandCenter: '關閉命令中心',
openCommandCenter: '開啟命令中心',
showTerminal: '顯示終端機',
hideTerminal: '隱藏終端機',
gateway: '閘道',
gatewayReady: '就緒',
gatewayNeedsSetup: '需要設定',
gatewayUnavailable: '推論不可用',
gatewayChecking: '檢查中',
gatewayConnecting: '連線中',
gatewayOffline: '離線',
gatewayRestarting: '重新啟動中…',
gatewayTitle: '閘道',
agents: '代理',
closeAgents: '關閉代理',
openAgents: '開啟代理',
subagents: count => `${count} 個子代理`,
failed: count => `${count} 個失敗`,
running: count => `${count} 個執行中`,
cron: '排程',
openCron: '開啟排程工作',
starmap: '記憶圖譜',
openStarmap: '開啟記憶圖譜',
turnRunning: '執行中',
contextUsage: '上下文使用量',
systemResources: {
title: '系統資源',
loading: '資源…',
gpuUtilization: 'GPU 使用率',
gpuMemory: '顯示記憶體',
ram: '記憶體',
unifiedNote: '統一記憶體——GPU 與系統共享此記憶體池。',
toggle: '系統資源'
},
contextUsagePanel: {
categories: {
conversation: '對話',
mcp: 'MCP',
memory: '記憶',
rules: '規則',
skills: '技能',
subagent_definitions: '子代理定義',
system_prompt: '系統提示詞',
tool_definitions: '工具定義'
},
empty: '尚無上下文資料',
loading: '正在載入明細…',
percentFull: percent => `已用 ${percent}%`,
title: '上下文使用量',
tokenSummary: (used, max) => `${used} / ${max} Tokens`
},
session: '工作階段',
yoloOn: 'YOLO 已開啟 — 自動核准危險指令。Shift+點擊可全域切換。',
yoloOff: 'YOLO 已關閉。Shift+點擊可全域切換。',
modelNone: '無',
noModel: '無模型',
switchModel: '切換模型',
openModelPicker: '開啟模型選擇器',
modelPinned: '已由你固定;新對話將使用此模型而非「設定」中的預設模型',
modelTitle: (provider, model) => `模型 · ${provider}:${model}`,
providerModelTitle: (provider, model) => `${provider} · ${model}`
}
},
rightSidebar: {
aria: '右側邊欄',
panelsAria: '右側邊欄面板',
files: '檔案系統',
terminal: '終端機',
noFolderSelected: '未選擇資料夾',
changeCwdTitle: '變更工作目錄',
remotePickerTitle: '選擇遠端資料夾',
remotePickerDescription: '瀏覽已連線後端上的資料夾。',
remotePickerSelect: '選擇資料夾',
folderTip: cwd => cwd,
openFolder: '開啟資料夾',
refreshTree: '重新整理檔案樹',
collapseAll: '收合所有資料夾',
previewUnavailable: '預覽不可用',
couldNotPreview: path => `無法預覽 ${path}`,
noProjectTitle: '沒有專案',
noProjectBody: '開啟一個專案以瀏覽檔案並檢視變更。',
noProjectOpen: '未開啟專案',
noDiffs: '無差異',
unreadableTitle: '無法讀取',
unreadableBody: error => `無法讀取此資料夾 (${error})。`,
emptyTitle: '空資料夾',
emptyBody: '此資料夾是空的。',
treeErrorTitle: '檔案樹錯誤',
treeErrorBody: '檔案樹在渲染此資料夾時發生錯誤。',
tryAgain: '重試',
loadingTree: '正在載入檔案樹',
loadingFiles: '正在載入檔案',
terminalHide: '隱藏終端機',
terminalsAria: '終端機',
terminalNew: '新增終端機',
terminalCloseOthers: '關閉其他',
terminalCloseAll: '全部關閉',
addToChat: '新增至聊天'
},
preview: {
tab: '預覽',
closePane: '關閉預覽窗格',
loading: '正在載入預覽',
unavailable: '預覽不可用',
opening: '開啟中...',
hide: '隱藏',
openPreview: '開啟預覽',
openInBrowser: '在瀏覽器中開啟',
openInExternal: '在外部開啟',
popIn: '彈回',
popOut: '彈出',
linkHint: '⌘/Ctrl+點擊在預覽窗格開啟',
sourceLineTitle: '點擊選取 · shift 點擊擴展 · 拖曳至輸入框',
source: '原始碼',
renderedPreview: '預覽',
diff: '差異',
unknownSize: '大小未知',
binaryTitle: '這看起來像二進位檔案',
binaryBody: label => `預覽 ${label} 可能會顯示無法讀取的文字。`,
largeTitle: '此檔案較大',
largeBody: (label, size) => `${label} 大小為 ${size}。Hermes 只會顯示前 512 KB。`,
previewAnyway: '仍然預覽',
truncated: '顯示前 512 KB。',
noInlineTitle: '沒有行內預覽',
noInlineBody: mimeType => `${mimeType || '此檔案類型'} 仍可作為脈絡附件。`,
edit: '編輯',
editing: '編輯中',
unsavedChanges: '未儲存的變更',
saveFailed: message => `無法儲存:${message}`,
diskChangedTitle: '檔案已在磁碟上變更',
diskChangedBody: '此檔案自開啟以來已變更。用你的版本覆寫,還是放棄你的編輯並重新載入?',
overwrite: '覆寫',
discardReload: '放棄並重新載入',
console: {
deselect: '取消選取項目',
select: '選取項目',
copyFailed: '無法複製主控台輸出',
copyEntry: '複製此項目',
sendEntry: '將此項目傳送至聊天',
messages: count => `${count} 則主控台訊息`,
resize: '調整預覽主控台大小',
title: '預覽主控台',
selected: count => `已選取 ${count} 個`,
sendToChat: '傳送至聊天',
copySelected: '複製所選至剪貼簿',
copyAll: '全部複製至剪貼簿',
copy: '複製',
clear: '清除',
empty: '暫無主控台訊息。',
promptHeader: '預覽主控台:',
sentTitle: '已傳送至聊天',
sentMessage: count => `已將 ${count} 條記錄新增至輸入框`
},
web: {
appFailedToBoot: '預覽應用程式啟動失敗',
serverNotFound: '找不到伺服器',
remoteLoopback:
'這個位址指向執行代理的那台機器,而不是本機。瀏覽器窗格會在本機載入頁面,因此遠端開發伺服器需要連接埠轉送或可連線的主機名稱。',
failedToLoad: '預覽載入失敗',
tryAgain: '重試',
restarting: 'Hermes 正在重新啟動...',
askRestart: '請 Hermes 重新啟動伺服器',
lookingRestart: taskId => `Hermes 正在尋找要重新啟動的預覽伺服器 (${taskId})`,
restartingTitle: '正在重新啟動預覽伺服器',
restartingMessage: 'Hermes 正在背景執行。可在預覽主控台查看進度。',
startRestartFailed: message => `無法啟動伺服器重新啟動:${message}`,
restartFailed: '伺服器重新啟動失敗',
hideConsole: '隱藏預覽主控台',
showConsole: '顯示預覽主控台',
hideDevTools: '隱藏預覽 DevTools',
openDevTools: '開啟預覽 DevTools',
goBack: '上一頁',
goForward: '下一頁',
reload: '重新載入頁面',
address: '網址',
addressPlaceholder: '輸入網址',
blankPageBody: '在上方輸入網址開始瀏覽,或請 Hermes 開啟頁面。',
finishedRestarting: message => `Hermes 已完成預覽伺服器重新啟動${message ? `:${message}` : ''}`,
failedRestarting: message => `伺服器重新啟動失敗:${message}`,
unknownError: '未知錯誤',
restartedTitle: '預覽伺服器已重新啟動',
reloadingNow: '正在重新載入預覽。',
restartFailedTitle: '預覽重新啟動失敗',
restartFailedMessage: 'Hermes 無法重新啟動伺服器。',
stillWorking: 'Hermes 仍在執行,但尚未收到重新啟動結果。伺服器指令可能正在前台執行。',
workspaceReloading: '工作區已變更,正在重新載入預覽',
fileChanged: url => `檔案已變更,正在重新載入預覽:${url}`,
filesChanged: (count, url) => `${count} 個檔案變更,正在重新載入預覽:${url}`,
watchFailed: message => `無法監看預覽檔案:${message}`,
moduleMimeDescription:
'模組指令碼使用了錯誤的 MIME 類型。這通常表示靜態檔案伺服器正在服務 Vite/React 應用程式,而不是專案開發伺服器。',
loadFailedConsole: (code, message) => `載入失敗${code ? ` (${code})` : ''}:${message}`,
unreachableDescription: '無法連線至預覽頁面。',
openTarget: url => `開啟 ${url}`,
fallbackTitle: '預覽'
}
},
zones: {
showTabStrip: '顯示分頁',
hideTabStrip: '隱藏分頁',
showStripTab: title => `顯示 ${title}`,
hideStripTab: title => `隱藏 ${title}`,
lastTabKeptTitle: '保留最後一個分頁',
lastTabKeptBody: '此區域至少需要一個可見分頁。請先顯示另一個分頁,或收合整個側邊欄。',
toggleStripTab: title => `切換 ${title} 分頁`,
minimize: '最小化',
restore: '還原',
reload: '重新載入',
closeOthers: '關閉其他',
closeToRight: '關閉右側',
closeAll: '全部關閉',
newSessionTab: '新增工作階段分頁',
newTab: '新增分頁',
pluginDisabled: pluginId => `外掛「${pluginId}」已停用`,
pluginDisabledBody: '在 設定 → 外掛 中重新啟用即可恢復面板。',
missingPane: paneId => `缺少面板:${paneId}`,
editTitle: '版面配置',
editHint: '選擇一個版面配置,或在區域之間拖曳面板。',
reset: '重設',
templates: '範本',
custom: '自訂',
newGridLayout: '新增網格版面',
saveCurrentAs: '將目前排列儲存為範本',
nameLayoutPlaceholder: '為版面命名…',
deletePreset: name => `刪除 ${name}`,
zoneEditorTitle: '區域編輯器',
editorHintPre: '點擊分割 · ',
editorHintPost: ' 翻轉分割線 · 拖曳跨越多個區域可合併 · 拖曳共用邊可調整大小',
templateColumns: '欄',
templateRows: '列',
templateGrid: '網格',
templatePriority: '優先',
zoneTag: index => `區域 ${index}`,
mergeZones: count => `合併 ${count} 個區域`,
customZoneName: count => `自訂 ${count} 區`,
layoutNamePlaceholder: fallback => `版面名稱(${fallback})`,
saveApply: '儲存並套用',
notExpressible: '此排列互相咬合(風車形)——暫時無法表示為巢狀分割',
zoneCount: count => `${count} 個區域`,
tabCount: count => `${count} 個分頁`
},
contextMenu: {
link: {
openInApp: '在應用程式內瀏覽器中開啟',
openExternal: '在外部瀏覽器中開啟',
copyUrl: '複製 URL',
copyResolvedUrl: '複製解析後的 URL'
},
image: {
copyImage: '複製圖片',
copyImageAddress: '複製圖片位址',
saveImageAs: '圖片另存為…'
},
edit: {
cut: '剪下',
paste: '貼上',
selectAll: '全選',
addToDictionary: '新增至字典'
},
page: {
copyPageUrl: '複製頁面 URL',
inspectElement: '檢查元素'
}
},
assistant: {
thread: {
loadingSession: '正在載入工作階段',
showEarlier: '顯示較早的訊息',
loadingResponse: 'Hermes 正在載入回覆',
resumeWhenBackgroundDone: count =>
count === 1 ? '背景工作完成後將自動繼續' : `${count} 個背景工作完成後將自動繼續`,
thinking: '思考中',
thought: '已思考',
thoughtBriefly: '思考了片刻',
thoughtFor: duration => `思考了 ${duration}`,
turnDuration: duration => `本輪耗時 ${duration}`,
today: time => `今天,${time}`,
yesterday: time => `昨天,${time}`,
copy: '複製',
refresh: '重新整理',
moreActions: '更多動作',
branchNewChat: '在新聊天中分支',
react: '回應',
dismissError: '关闭错误',
errorLayers: {
auth: '認證錯誤',
billing: '額度不足',
disk: '磁碟已滿',
endpoint: '自訂端點錯誤',
gateway: '閘道錯誤',
generic: '本輪失敗',
provider: '模型服務商錯誤',
runtime: '本機執行環境錯誤',
streaming: '串流連線錯誤'
},
errorRetry: '重試',
errorSwitchProvider: '切換服務商',
errorOpenLogs: '開啟日誌',
errorOpenLogsFailed: '無法開啟日誌資料夾',
errorOpenDesktopLogs: '開啟桌面端日誌',
errorCopyDiagnostics: '複製錯誤詳細資訊',
errorSendDiagnostics: '傳送診斷資訊',
filesChanged: count => `${count} 個檔案已變更`,
reviewChanges: '檢視',
readAloudFailed: '朗讀失敗',
preparingAudio: '正在準備音訊...',
stopReading: '停止朗讀',
readAloud: '朗讀',
editMessage: '編輯訊息',
stop: '停止',
restorePrevious: '還原至上一個檢查點',
restoreCheckpoint: '還原檢查點',
restoreFromHere: '還原檢查點 — 從此提示重新執行',
restoreTitle: '還原至此檢查點?',
restoreBody: '此提示之後的所有訊息將從對話中移除,並從此處重新執行該提示。',
restoreConfirm: '還原並重新執行',
restoreNext: '還原至下一個檢查點',
goForward: '前進',
sendEdited: '傳送編輯後的訊息',
attachingFile: '正在附加…'
},
approval: {
gatewayDisconnected: 'Hermes 閘道未連線',
sendFailed: '無法傳送核准回應',
run: '執行',
command: '指令',
moreOptions: '更多核准選項',
allowSession: '允許本工作階段',
alwaysAllowMenu: '一律允許…',
jumpToApproval: '需要核准',
reject: '拒絕',
alwaysTitle: '一律允許此指令?',
alwaysDescription: pattern =>
`這會將「${pattern}」模式加入永久允許清單(~/.hermes/config.yaml)。Hermes 對類似指令將不再詢問,包括目前工作階段和未來工作階段。`,
alwaysAllow: '一律允許'
},
clarify: {
notReady: '澄清請求尚未就緒',
gatewayDisconnected: 'Hermes 閘道未連線',
sendFailed: '無法傳送澄清回應',
loadingQuestion: '正在載入問題…',
other: '其他(輸入您的答案)',
placeholder: '輸入您的答案…',
skip: '略過',
skipped: '已略過',
continueLabel: '繼續',
confirmAndContinueLabel: '確認並繼續',
answeredBadge: '已回答',
questionProgress: (answered, total) => `已回答 ${answered}/${total}`,
lateAnswer: (question, choice) => `關於「${question}」 — 我的回答: ${choice}`,
lateAnswerTip: '將此回答起草為後續訊息',
lateAnswerHint: '此問題已不再等待回答。選擇一個選項會將其起草為後續訊息。'
},
tool: {
copyCode: '複製程式碼',
renderingImage: '正在渲染圖片',
copyOutput: '複製輸出',
copyCommand: '複製指令',
copyContent: '複製內容',
copyUrl: '複製 URL',
copyResults: '複製結果',
copyQuery: '複製查詢',
copyFile: '複製檔案',
copyPath: '複製路徑',
outputAlt: '工具輸出',
rawResponse: '原始回應',
copyActivity: '複製活動',
recoveredOne: '在 1 個失敗步驟後已復原',
recoveredMany: count => `在 ${count} 個失敗步驟後已復原`,
failedOne: '1 個步驟失敗',
failedMany: count => `${count} 個步驟失敗`,
statusRunning: '執行中',
statusError: '錯誤',
statusRecovered: '已復原',
statusDone: '完成',
memoryWriteNoted: '已記下記憶寫入',
actions: {
read: '已讀取',
reading: '正在讀取',
opened: '已開啟',
opening: '正在開啟',
failedToOpen: '開啟失敗',
searched: '已搜尋',
searching: '正在搜尋',
ran: '已執行',
running: '正在執行',
ranCode: '已執行程式碼',
runningCode: '正在撰寫腳本'
},
prefixes: {
browser: '瀏覽器',
web: '網頁'
},
titleTemplates: {
actionCommand: (action, command) => `${action} ${command}`,
actionQuoted: (action, value) => `${action}「${value}」`,
actionTarget: (action, target) => `${action} ${target}`,
prefixedDone: (prefix, action) => `${prefix}${action}`,
runningPrefixedTool: (prefix, action) => `正在執行${prefix}${action}`,
runningTool: action => `正在執行 ${action}`
},
titles: {
browser_click: { done: '已點擊頁面元素', pending: '正在點擊頁面元素', pendingAction: '正在點擊' },
browser_fill: { done: '已填寫表單欄位', pending: '正在填寫表單欄位', pendingAction: '正在填寫' },
browser_navigate: { done: '已開啟頁面', pending: '正在開啟頁面', pendingAction: '正在開啟' },
browser_snapshot: { done: '已擷取頁面快照', pending: '正在擷取頁面快照', pendingAction: '正在擷取' },
browser_take_screenshot: { done: '已擷取截圖', pending: '正在擷取截圖', pendingAction: '正在擷取' },
browser_type: { done: '已在頁面輸入', pending: '正在頁面輸入', pendingAction: '正在輸入' },
clarify: { done: '已提問', pending: '正在提問', pendingAction: '正在提問' },
cronjob: { done: 'Cron 工作', pending: '正在安排 Cron 工作', pendingAction: '正在安排' },
edit_file: { done: '已編輯檔案', pending: '正在編輯檔案', pendingAction: '正在編輯' },
execute_code: { done: '已執行程式碼', pending: '正在撰寫腳本', pendingAction: '正在撰寫腳本' },
image_generate: { done: '已生成圖片', pending: '正在生成圖片', pendingAction: '正在生成' },
list_files: { done: '已列出檔案', pending: '正在列出檔案', pendingAction: '正在列出' },
memory: { done: '已儲存至記憶', pending: '正在儲存至記憶', pendingAction: '正在儲存' },
patch: { done: '已修補檔案', pending: '正在修補檔案', pendingAction: '正在修補' },
read_file: { done: '已讀取檔案', pending: '正在讀取檔案', pendingAction: '正在讀取' },
search_files: { done: '已搜尋檔案', pending: '正在搜尋檔案', pendingAction: '正在搜尋' },
session_search_recall: {
done: '已搜尋工作階段歷史',
pending: '正在搜尋工作階段歷史',
pendingAction: '正在搜尋'
},
terminal: { done: '已執行指令', pending: '正在執行指令', pendingAction: '正在執行' },
todo: { done: '已更新待辦', pending: '正在更新待辦', pendingAction: '正在更新' },
vision_analyze: { done: '已分析圖片', pending: '正在分析圖片', pendingAction: '正在分析' },
web_extract: { done: '已讀取網頁', pending: '正在讀取網頁', pendingAction: '正在讀取' },
web_search: { done: '已搜尋網頁', pending: '正在搜尋網頁', pendingAction: '正在搜尋' },
write_file: { done: '已編輯檔案', pending: '正在編輯檔案', pendingAction: '正在編輯' }
}
}
},
prompts: {
gatewayDisconnected: 'Hermes 閘道未連線',
sudoSendFailed: '無法傳送 sudo 密碼',
secretSendFailed: '無法傳送密鑰',
sudoTitle: '管理員密碼',
sudoDesc: 'Hermes 需要您的 sudo 密碼來執行特權指令。它只會傳送給您的本機代理。',
sudoPlaceholder: 'sudo 密碼',
secretTitle: '需要密鑰',
secretDesc: 'Hermes 需要一個憑證才能繼續。',
secretPlaceholder: '密鑰值'
},
desktop: {
audioReadFailed: '無法讀取錄製的音訊',
sessionUnavailable: '工作階段不可用',
createSessionFailed: '無法建立新工作階段',
promptFailed: '提示詞傳送失敗',
providerCredentialRequired: '傳送第一則訊息前請先新增提供方憑證。',
emptySlashCommand: '空的斜線指令',
desktopCommands: '桌面端指令',
skillCommandsAvailable: count => `${count} 個技能指令可用。`,
warningLine: message => `警告:${message}`,
yoloArmed: '此聊天已啟用 YOLO',
yoloOff: 'YOLO 已關閉',
yoloSystem: active => `此工作階段 YOLO ${active ? '已開啟' : '已關閉'}`,
yoloTitle: 'YOLO',
yoloToggleFailed: '無法切換 YOLO',
profileStatus: current => `設定檔:${current}。使用 /profile <name> 或「新工作階段」選擇器在其他設定檔中開始聊天。`,
unknownProfile: '未知設定檔',
noProfileNamed: (target, available) => `沒有名為「${target}」的設定檔。可用的:${available}`,
newChatsProfile: name => `新聊天將使用設定檔 ${name}。`,
setProfileFailed: '設定設定檔失敗',
sttDisabled: '設定中已停用語音轉文字。',
stopFailed: '停止失敗',
regenerateFailed: '重新生成失敗',
editFailed: '編輯失敗',
editTurnUnavailable: '此回合已不在伺服器歷史中(可能已被壓縮移除)。',
resumeFailed: '繼續失敗',
readOnlyTranscriptTitle: '已以唯讀方式開啟',
readOnlyTranscriptBody:
'尚無已連線的後端認領這個較早的對話,因此它以唯讀逐字稿方式開啟。歷史紀錄完好;在有後端認領之前無法傳送訊息。',
readOnlyTranscriptSendBlocked: '此對話目前以唯讀逐字稿方式開啟——傳送已停用。',
resumeStrandedTitle: '無法載入此工作階段',
resumeStrandedBody: '與此工作階段的連線失敗,自動重試已停止。請確認閘道正在執行,然後重試。',
resumeRetry: '重試',
nothingToBranch: '沒有可分支的內容',
branchNeedsChat: '分支前請先開始或繼續一個聊天。',
sessionBusy: '工作階段忙碌中',
branchStopCurrent: '分支此聊天前請先停止目前回合。',
branchNoText: '此訊息沒有可用於分支的文字。',
branchTitle: n => `草稿:分支 #${n}`,
branchFailed: '分支失敗',
deleteFailed: '刪除失敗',
archived: '已封存',
archiveFailed: '封存失敗',
cwdChangeFailed: '工作目錄變更失敗',
cwdStagedTitle: '工作目錄已暫存',
cwdStagedMessage: '重新啟動桌面後端後,工作目錄變更才會套用至此作用中工作階段。',
modelSwitchFailed: '模型切換失敗',
hydrationSyncing: (profile: string) => `正在同步 ${profile}\u2026`,
sessionExported: '工作階段已匯出',
sessionExportFailed: '無法匯出工作階段',
imageSaved: '圖片已儲存',
downloadStarted: '下載已開始',
restartToUseSaveImage: '重新啟動 Hermes Desktop 後可使用儲存圖片。',
restartToSaveImages: '重新啟動 Hermes Desktop 以儲存圖片',
imageDownloadFailed: '圖片下載失敗',
openImage: '開啟圖片',
downloadImage: '下載圖片',
savingImage: '正在儲存圖片',
imagePreviewFailed: '圖片預覽失敗',
imageAttach: '附加圖片',
imageWriteFailed: '無法將圖片寫入磁碟。',
imageAttachFailed: '附加圖片失敗',
attachImages: '附加圖片',
clipboard: '剪貼簿',
noClipboardImage: '剪貼簿中沒有圖片',
clipboardPasteFailed: '剪貼簿貼上失敗',
dropFiles: '拖曳檔案',
handoff: {
pickPlatform: '選擇目標平台',
success: platform => `已移交到 ${platform}。隨時可在此處恢復。`,
systemNote: platform => `↻ 已移交到 ${platform} — 隨時可在此處恢復。`,
failed: error => `移交失敗:${error}`,
timedOut: '等待閘道逾時。`hermes gateway` 是否正在執行?'
}
},
errors: {
genericFailure: '發生錯誤',
boundaryTitle: '介面出現問題',
boundaryDesc: '此檢視遇到意外錯誤。您的聊天和設定是安全的。',
reloadWindow: '重新載入視窗',
openLogs: '開啟記錄'
},
tips: {
close: '不再顯示這則提示',
items: {
'new-session': {
title: '從頭開始',
text: '新對話擁有獨立的上下文、終端機與工作目錄。'
},
skills: {
title: '教一次就夠',
text: '技能是一組說明檔,Hermes 會在需要時自行載入。'
},
messaging: {
title: '離開電腦也能用',
text: '接上 Telegram、Discord、Slack 等 — 同一個代理,同一份記憶。'
},
artifacts: {
title: 'Hermes 做過的一切',
text: '所有工作階段的圖片、檔案與連結,都彙整在這裡。'
},
cron: {
title: '會自己執行的工作',
text: '讓一則提示按小時、按夜間,或依 cron 運算式定時執行。'
},
'command-palette': {
title: '一個輸入框搞定一切',
text: '工作階段、設定、技能與指令都能從命令選單找到。'
},
profiles: {
title: '設定檔彼此獨立',
text: '每個都是獨立的 Hermes — 自己的金鑰、記憶與工作階段。'
},
'composer-mentions': {
title: '附件與指令',
text: '輸入 @ 把檔案帶入對話,輸入 / 執行指令。'
},
'local-setup': {
title: '這台電腦可以本地執行模型',
text: '你的硬體可以執行本地模型。對話不離開你的電腦,而且完全免費。',
action: '立即設定'
},
'right-pane': {
title: '工作面板',
text: '檔案、終端機、審閱與內建瀏覽器都在側邊面板裡。'
}
}
},
ui: {
search: {
clear: '清除搜尋'
},
pagination: {
label: '分頁',
previous: '上一頁',
previousAria: '前往上一頁',
next: '下一頁',
nextAria: '前往下一頁'
},
sidebar: {
title: '側邊欄',
description: '顯示行動裝置側邊欄。',
toggle: open => `${open ? '顯示' : '隱藏'}側邊欄`
}
}
})