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

3863 lines
172 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 { EN_RUNTIME_SETTINGS } from './en-runtime-settings'
import { EN_SURFACES } from './en-surfaces'
import type { Translations } from './types'
export const zh: Translations = {
surfaces: EN_SURFACES,
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: '在访达中显示',
revealExplorer: '在文件资源管理器中显示',
revealFileManager: '打开所在文件夹',
revealInSidebar: '在文件树中显示',
copyPath: '复制路径',
copyRelativePath: '复制相对路径',
download: '下载',
downloadSaved: '已保存',
downloadFailed: '下载失败',
rename: '重命名…',
delete: '删除',
renameTitle: '重命名',
renameLabel: '新名称',
deleteTitle: name => `删除 ${name}?`,
deleteBody: '将移至废纸篓,你可以从那里恢复。',
pathCopied: '已复制路径'
},
boot: {
ready: 'Hermes 桌面版已就绪',
desktopBootFailedWithMessage: message => `桌面启动失败:${message}`,
steps: {
connectingGateway: '正在连接桌面网关',
loadingSettings: '正在加载 Hermes 设置',
loadingSessions: '正在加载最近会话',
retryingRemoteBackend: '正在重新连接远程 Hermes 后端…',
startingDesktopConnection: '正在启动桌面连接',
startingHermesDesktop: '正在启动 Hermes 桌面版…'
},
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 key (401)。',
diskFull: '磁盘已满 — 请腾出一些空间后再试。',
gatewayAuthFailed: '网关认证失败 — 请检查你的 API_SERVER_KEY。',
methodNotAllowed: '桌面后端拒绝了该请求 (405 Method Not Allowed)。请尝试重启 Hermes Desktop。',
microphonePermission: '麦克风权限已被拒绝。',
openaiRejectedApiKey: 'OpenAI 拒绝了该 API key。',
openaiRejectedApiKeyWithStatus: status => `OpenAI 拒绝了该 API key (${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: '打开记忆图谱',
enterHud: 'HUD 模式',
exitHud: '退出 HUD 模式',
resetHudLayout: '重置 HUD 大小和位置',
layoutEditor: '布局编辑器',
layoutEditorTitle: mod => `布局编辑器 — ${mod} 点击重置布局`
},
keybinds: {
title: '键盘快捷键',
subtitle: open => `点击快捷键即可重新绑定 · ${open} 可重新打开此面板。`,
search: '搜索快捷键…',
rebind: '重新绑定',
reset: '恢复默认',
resetAll: '全部重置',
pressKey: '请按下按键…',
set: '设置',
conflictWith: label => `已绑定到“${label}”`,
categories: {
composer: '输入框',
profiles: '配置',
session: '会话',
navigation: '导航',
view: '视图'
},
actions: {
'keybinds.openPanel': '打开键盘快捷键',
'nav.commandPalette': '打开命令面板',
'nav.commandCenter': '打开命令中心',
'nav.settings': '打开设置',
'nav.profiles': '打开配置',
'nav.skills': '打开技能',
'nav.messaging': '打开消息',
'nav.artifacts': '打开制品',
'nav.cron': '打开定时任务',
'nav.agents': '打开智能体',
'session.new': '新建会话',
'session.newTab': '新建会话标签',
'session.newWindow': '新建窗口',
'session.next': '下一个会话',
'session.prev': '上一个会话',
'session.slot.1': '切换到最近会话 1',
'session.slot.2': '切换到最近会话 2',
'session.slot.3': '切换到最近会话 3',
'session.slot.4': '切换到最近会话 4',
'session.slot.5': '切换到最近会话 5',
'session.slot.6': '切换到最近会话 6',
'session.slot.7': '切换到最近会话 7',
'session.slot.8': '切换到最近会话 8',
'session.slot.9': '切换到最近会话 9',
'session.focusSearch': '搜索会话',
'session.togglePin': '固定/取消固定当前会话',
'session.archive': '归档当前会话',
'workspace.newWorktree': '新建工作树',
'workspace.openFolder': '打开文件夹为项目',
'composer.focus': '聚焦输入框',
'composer.modelPicker': '打开模型选择器',
'composer.voice': '开始 / 停止语音对话',
'view.toggleSidebar': '切换会话侧边栏',
'view.toggleRightSidebar': '切换文件浏览器',
'view.toggleReview': '切换审查面板',
'view.toggleStatusbar': '切换状态栏',
'view.toggleTabStrip': '切换标签',
'view.showFiles': '显示文件浏览器',
'view.showBrowser': '打开浏览器',
'view.showTerminal': '显示终端',
'view.selectionToComposer': '将选区发送到输入框',
'view.terminalCopy': '复制终端选区',
'view.terminalPaste': '粘贴到终端',
'view.closeTab': '关闭标签',
'view.reopenTab': '重新打开已关闭的标签',
'view.flipPanes': '交换侧边栏位置',
'view.findInPage': '页面内查找',
'view.findNext': '查找下一个',
'view.findPrevious': '查找上一个',
'appearance.toggleMode': '切换浅色/深色',
'profile.default': '切换到默认配置',
'profile.switch.1': '切换到配置 1',
'profile.switch.2': '切换到配置 2',
'profile.switch.3': '切换到配置 3',
'profile.switch.4': '切换到配置 4',
'profile.switch.5': '切换到配置 5',
'profile.switch.6': '切换到配置 6',
'profile.switch.7': '切换到配置 7',
'profile.switch.8': '切换到配置 8',
'profile.switch.9': '切换到配置 9',
'profile.switch.10': '切换到配置 10',
'profile.switch.11': '切换到配置 11',
'profile.switch.12': '切换到配置 12',
'profile.switch.13': '切换到配置 13',
'profile.switch.14': '切换到配置 14',
'profile.switch.15': '切换到配置 15',
'profile.switch.16': '切换到配置 16',
'profile.switch.17': '切换到配置 17',
'profile.switch.18': '切换到配置 18',
'profile.next': '下一个配置',
'profile.prev': '上一个配置',
'profile.toggleAll': '切换全部配置视图',
'profile.create': '创建配置',
'composer.send': '发送消息',
'composer.newline': '插入换行',
'composer.steer': '引导正在运行的回合',
'composer.queue': '消息排队',
'composer.sendQueued': '发送下一条排队消息',
'composer.mention': '引用文件、文件夹、网址',
'composer.slash': '斜杠命令面板',
'composer.help': '快速帮助',
'composer.history': '切换弹窗/历史',
'composer.cancel': '关闭弹窗·取消运行'
}
},
findInPage: {
next: '下一个匹配',
previous: '上一个匹配'
},
language: {
label: '语言',
description: '选择桌面界面的语言。',
saving: '正在保存语言…',
saveError: '语言更新失败',
switchTo: '切换语言',
searchPlaceholder: '搜索语言…',
noResults: '未找到语言'
},
settings: {
runtime: EN_RUNTIME_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: '通知',
plugins: '插件'
},
plugins: {
title: '桌面插件',
blurb:
'加载到此应用中的界面扩展——随构建捆绑,或放入 desktop-plugins 文件夹(包括 Hermes 编写的插件)。禁用会即时卸载插件并在重启后保持。',
count: n => `已安装 ${n} 个`,
openFolder: '打开插件文件夹',
rescan: '重新扫描',
reveal: '在文件管理器中显示',
enable: '启用',
disable: '禁用',
failed: '失败',
empty: '尚未安装桌面插件。',
kinds: { bundled: '内置', disk: '磁盘', runtime: '运行时' },
agent: {
title: '智能体插件',
blurb:
'你安装到 Hermes 后端的插件——工具、技能、MCP 服务器、钩子和斜杠命令。「便携」插件是 Agent Plugins 标准包(技能 + MCP 组合,也可在其他智能体中使用)。开关在新会话中生效。',
appliesTo: '应用于:',
empty: '尚未安装智能体插件。',
loadFailed: '无法加载智能体插件',
portable: '便携',
search: '搜索插件…',
noMatches: '没有匹配的插件。',
toggleFailed: (name: string) => `无法切换 ${name}`,
updateBackendToManage: '请更新 Hermes 后端以便在桌面端管理此插件。',
sources: { bundled: '内置', user: '用户', git: 'git', project: '项目', entrypoint: 'pip' }
},
installModal: {
title: '安装插件',
description: '在安装前查看此仓库包含哪些组件。',
repoLabel: '仓库',
includesHeading: '此包包含',
agentLabel: '智能体插件',
desktopLabel: '桌面 UI',
agentTargetLocal: profile => `安装到 ${profile} 后端(~/.hermes/plugins/)`,
agentTargetRemote: profile => `安装到已连接的 ${profile} 后端`,
desktopTarget: '安装到此应用的本地 desktop-plugins 文件夹',
desktopOnlyNote: '仅桌面包不会安装后端智能体插件。',
insecureWarning: '此 URL 使用了不安全的本地 scheme。生产环境请优先使用 https:// 或 git@。',
securityHeading: '安装前须知',
securityIntro: '请仅安装你信任的来源 — 如需了解将添加的内容,可先查看下方仓库。',
sourceHeading: '源代码',
viewRepository: '查看仓库',
viewPluginFiles: '查看插件文件',
gitCloneLabel: 'Git 克隆地址',
enableAgent: '安装后启用智能体插件',
forceReinstall: '强制重装(替换已存在的安装)',
install: '安装',
installing: '正在安装…',
probing: '正在检查仓库…',
probeUnavailable: '当前环境无法检查插件仓库。',
desktopUnavailable: '当前环境无法安装桌面插件。',
selectComponent: '请至少选择一个要安装的组件。',
agentSuccess: name => `智能体插件 ${name} 已安装`,
desktopSuccess: name => `桌面插件 ${name} 已安装`,
agentFailed: '智能体插件安装失败',
desktopFailed: '桌面插件安装失败',
missingEnv: vars => `缺少环境变量:${vars}。请在设置 → 密钥中添加。`
}
},
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: '产品模式隐藏原始工具数据;技术模式显示完整输入/输出。',
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 从应用内更新时(无终端提示),保留本地源码修改(暂存)或丢弃(放弃)。通过终端更新时始终会询问。'
}
}),
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 无效',
toolsetsWipeConfirm:
'确定移除所有已启用的工具集吗?这将禁用记忆、终端、网络搜索、委派以及大多数其他工具,直到你重新启用它们。',
keepAwakeTitle: '保持电脑唤醒',
keepAwakeDesc: '阻止本机休眠,让长时间或通宵运行继续进行。屏幕仍可变暗。',
disableF12Title: '禁用 F12 开发者工具',
disableF12Desc: '阻止 F12 打开开发者工具。Ctrl+Shift+I(Mac 上为 Cmd+Opt+I)仍然可用。',
attachmentSizeTitle: '预览 / 图片加载大小上限',
attachmentSizeDesc:
'桌面端为预览和图片附件加载本地文件的大小上限(MB)。默认为 16。远程非图片附件使用单独的 256 MB 上限。设置过大会将整个文件读入内存,可能导致应用卡死或崩溃。',
attachmentSizeUnit: 'MB',
attachmentSizeLabel: '预览 / 图片加载大小上限(MB)'
},
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: '清除'
},
// v2 多连接注册表:设置 → 网关。
connections: {
title: '已注册网关',
intro: '管理本机以及通过远程、SSH 或 Hermes Cloud 连接可访问的每个 Hermes 网关。',
stagedNote:
'可在“会话”侧边栏切换网关。配置档案、聊天、消息和定时任务归属于各自网关;其他网关上的工作会继续运行。',
launchModeTitle: '启动时返回上次使用网关的会话视图',
launchModeDesc: '关闭时,会话将在主网关上打开。',
searchPlaceholder: '搜索网关…',
noSearchResults: '没有与搜索匹配的网关。',
loadFailed: '无法加载连接',
currentPill: '当前',
primaryPill: '主连接',
managedPill: '应用管理',
addConnection: '添加连接',
editConnection: '编辑',
removeConnection: '移除',
removeConfirmTitle: '移除此连接?',
removeConfirmDesc: (label: string) => `“${label}”将从本应用移除。实例本身不受影响——你可以随时重新添加。`,
makePrimary: '设为主连接',
testConnection: '测试',
testOk: '可访问',
testFailed: '连接测试失败',
saveFailed: '无法保存连接',
removeFailed: '无法移除连接',
updateAll: '更新所有实例',
updateAllRunning: '正在更新所有实例…',
updateAllDone: '更新已分发',
updateAllFailed: '批量更新失败',
updateSkippedCloud: '由 Hermes Cloud 托管',
kindLocal: '本地',
kindRemote: '远程网关',
kindCloud: 'Hermes Cloud',
kindSsh: 'SSH',
kindLocalDesc: '由本应用管理的 Hermes 运行时。',
kindRemoteDesc: '可通过 HTTP(S) 访问的 Hermes 网关——局域网、Tailscale 或互联网。',
kindCloudDesc: '通过你的 Hermes Cloud 账户发现的托管实例。',
kindSshDesc: '通过 SSH 访问的 Hermes 安装。',
labelTitle: '名称',
labelDesc: '必填。此实例出现的所有位置都会显示该名称;必须唯一(例如“家庭服务器”、“工作笔记本”)。',
labelPlaceholder: '家庭服务器',
urlTitle: '网关 URL',
sshHostTitle: 'SSH 主机',
headersTitle: '额外网关请求头',
headersDesc:
'随发往此网关的每个 HTTP 和 WebSocket 请求一起发送——用于 Cloudflare Access 等访问代理(CF-Access-Client-Id / CF-Access-Client-Secret)。值加密存储。由 Hermes 管理的请求头(Authorization、Cookie、Host 等)会被忽略。',
headerValuePlaceholder: '值',
headerValueSaved: '已保存——留空以保留',
headerAdd: '添加请求头',
headerRemove: '移除',
duplicateLocal: '本应用已管理一个本地连接——只能有一个。',
duplicateUrl: (label: string) => `已存在指向此网关 URL 的连接(“${label}”)。`,
duplicateSsh: (label: string) => `已存在指向此 SSH 主机的连接(“${label}”)。`,
sameBackendHint: (label: string) => `与“${label}”是同一后端`,
localAddHint: '“本地”不可用:应用管理的本地连接已存在(永远只有一个)。',
cloudAddHint: '提示:在上方登录 Hermes Cloud 可自动发现你的智能体——此表单仅用于手动注册已知的实例 URL。',
save: '保存连接',
saving: '保存中…',
cancel: '取消',
empty: '尚未注册任何连接。'
},
managedUpdates: {
title: '托管更新',
intro:
'以事务方式更新由桌面端托管的 SSH 安装:先排空会话,再更新远端检出,最后恢复每个 profile,并生成关联回执。',
sshConnection: '桌面端托管的 SSH 安装',
update: '更新',
updating: '更新中…',
progress: '正在排空会话、更新远端安装并恢复 profile…',
updated: '已更新',
partial: '已更新 — 恢复失败',
refused: '已拒绝',
failed: '更新失败',
alreadyRunning: '更新已在进行中',
receipt: (id: string, outcome: string) => `回执 ${id} · ${outcome}`,
receiptVersions: (pre: string, post: string) => `${pre} → ${post}`,
scopesRestored: (profiles: string) => `已恢复的 profile:${profiles}`,
scopeNotRestored: (profile: string, error: string) => `Profile“${profile}”未恢复:${error}`
},
gateway: {
loading: '正在加载网关设置...',
unavailableTitle: '网关设置不可用',
unavailableDesc: '桌面 IPC 桥未暴露网关设置。',
title: '网关连接',
envOverride: '环境变量覆盖',
intro:
'Hermes Desktop 默认会启动自己的本地网关。当你希望此应用控制另一台机器上或可信代理后的现有 Hermes 后端时,可以使用远程网关。网关连接属于本机级设置;profile 是从所连接的网关中发现的。',
envOverrideTitle: '环境变量正在控制此桌面会话。',
envOverrideDesc: '取消设置 HERMES_DESKTOP_REMOTE_URL 和 HERMES_DESKTOP_REMOTE_TOKEN 后才会使用下面保存的设置。',
modeTitle: '连接模式',
localTitle: '本地网关',
localDesc: '在 localhost 启动私有 Hermes 后端。这是默认方式,并且可离线工作。',
remoteTitle: '远程网关',
remoteDesc: '将此桌面外壳连接到远程 Hermes 后端。',
remoteAuthHint: '托管网关使用 OAuth 或用户名密码;自托管网关也可能使用会话 token。',
cloudTitle: 'Hermes Cloud',
cloudDesc: '只需登录 Hermes Cloud 一次,即可从你账户下的智能体中选择——无需粘贴 URL。',
cloudSignInTitle: 'Hermes Cloud',
cloudSignIn: '登录 Hermes Cloud',
cloudSignedIn: '已登录 Hermes Cloud',
cloudNeedsSignIn: '登录 Hermes Cloud 以发现你账户下的智能体。',
cloudSignedInDesc: '你已登录。在下方选择一个智能体;会话会自动刷新。',
cloudAgentsTitle: '你的智能体',
cloudOrgPickerTitle: '选择一个组织',
cloudOrgSelect: '选择',
cloudOrgChange: '切换组织',
cloudOrgRole: role => `角色:${role}`,
cloudLoadingAgents: '正在加载你的智能体…',
cloudNoAgents: {
before: '此账户下未找到智能体。请在',
linkText: 'Nous 门户',
after: '中创建一个,然后刷新。'
},
cloudRefresh: '刷新',
cloudConnect: '连接',
cloudConnecting: '正在连接…',
cloudDiscoverFailed: '无法加载你的 Hermes Cloud 智能体',
cloudConnectFailed: '无法连接到该智能体',
cloudSignInFailed: 'Hermes Cloud 登录失败',
cloudSignedOutTitle: '已退出 Hermes Cloud',
cloudSignedOutMessage: '已清除 Hermes Cloud 会话。',
cloudConnectedTitle: '已连接',
cloudConnectedPill: '已连接',
cloudConnectedTo: name => `已连接到 ${name}。`,
cloudAgentProvisioning: '正在配置…',
cloudStatusLabel: status => `状态:${status}`,
remoteUrlTitle: '远程 URL',
remoteUrlDesc: '远程 dashboard 后端的基础 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 访问的 dashboard 会话 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: '保存服务器',
test: '测试连接',
testing: '测试中…',
testOk: count => `已连接 — ${count} 个工具可用`,
testFailed: '连接失败',
enableServer: name => `启用 ${name}`,
disableServer: name => `禁用 ${name}`,
serverEnabled: name => `${name} 已启用 — 对新会话生效。`,
serverDisabled: name => `${name} 已禁用 — 对新会话生效。`,
toggleFailed: (name, enabled) => `${enabled ? '开启' : '关闭'} ${name} 失败`,
tabServers: '服务器',
tabCatalog: '目录',
catalogLoading: '正在加载 MCP 目录…',
catalogLoadFailed: 'MCP 目录加载失败',
catalogEmpty: '没有可用的目录条目。',
catalogInstalled: '已安装',
catalogEnabled: '已启用',
catalogNeedsInstall: '需要构建',
catalogInstall: '安装',
catalogInstalling: '安装中…',
catalogInstallStarted: name => `正在安装 ${name}… 完成后对新会话生效。`,
catalogInstallFailed: name => `安装 ${name} 失败`,
catalogEnvPrompt: name => `${name} 需要凭据`,
catalogEnvRequired: '安装前请填写必需的值。',
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: '应用中...',
defaultsLabel: '默认值',
reasoning: '推理',
reasoningOff: '关闭',
defaultsFailed: '保存模型默认值失败',
loadFailed: '无法加载模型',
restartRequired: '更新后此后端仍在运行旧代码。请重启以加载新代码。',
restartBackend: '重启后端',
restartingBackend: '正在重启后端...',
restartFailed: '无法重启后端',
auxiliaryTitle: '辅助模型',
resetAllToMain: '全部重置为主模型',
auxiliaryDesc: '辅助任务默认使用主模型。你可以为任意任务指定专用模型。',
setToMain: '设为主模型',
change: '更改',
autoUseMain: '自动 · 使用主模型',
providerDefault: '(提供方默认)',
fallbackAdd: '添加备用模型',
fallbackEmpty: '未配置备用模型 — 默认模型失败时才会使用备用模型。',
notInCatalog: '不在该提供方的模型列表中 — 调用可能回退到备用模型。',
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: '运行时安装失败',
quickstartTitle: '在本机运行模型',
quickstartDetail: (model, size) =>
`一键完成所有设置:本地引擎、${model}(需下载 ${size}),并设为新会话的默认模型。数据不会离开这台电脑。`,
quickstartDetailReady: model => `一键将 ${model} 设为新会话的默认模型。所有内容都在本机运行。`,
quickstartAction: '为我设置',
quickstartConfigure: '自定义…',
quickstartDoneToast: model => `${model} 已就绪——新会话将在本机运行。`,
quickstartFailed: '本地模型设置失败',
quickstartStageEngine: '引擎',
quickstartStageModel: '模型',
quickstartStageFinish: '完成',
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: '其他提供方',
disconnect: '断开连接',
disconnectInTerminal: '断开连接(在终端中运行移除命令)',
removeConfirm: provider => `移除 ${provider}?`,
removeExternalGeneric: provider => `${provider} 由其自身的 CLI 管理 — 请在那里移除。`,
removeKeyManaged: provider => `${provider} 由 API 密钥配置。请从 API Keys 中移除。`,
removeTerminalConfirm: (provider, command) => `断开 ${provider}?这将在终端中运行 "${command}" 以清除凭据。`,
removeTerminalRunning: provider => `正在终端中断开 ${provider}…`,
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: '新会话默认从此文件夹开始,除非你选择其他目录。留空则使用你的 home 目录。',
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}`,
loadingModels: '正在加载模型目录…',
modelSectionTitle: '模型',
modelCount: count => `${count} 个模型`,
modelInUse: '使用中',
modelDefault: '默认',
modelInactiveHint: '请先选择此后端,然后再更改其模型。',
modelSelectedTitle: '模型已选择',
modelSelectedMessage: model => `${model} 将应用于新会话。`,
failedSelectModel: model => `选择 ${model} 失败`,
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: '工具集',
configuringProfile: '正在配置:',
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: '官方',
hub: {
searchPlaceholder: '搜索技能中心',
search: '搜索',
searching: '搜索中…',
connectingHubs: '正在连接技能中心…',
connectedHubs: '已连接的来源:',
featured: '精选技能',
landingHint: '搜索技能中心,浏览来自官方索引、GitHub 和社区来源的可安装技能。',
noResults: '技能中心没有匹配的技能。',
resultCount: (count, ms) => `${count} 个结果${ms !== null ? `(${ms}ms)` : ''}`,
timedOut: sources => `超时:${sources}`,
installed: '已安装',
install: '安装',
installing: '安装中…',
uninstall: '卸载',
uninstalling: '卸载中…',
updateAll: '更新已安装',
updating: '更新中…',
preview: '预览',
scan: '扫描',
scanning: '扫描中…',
close: '关闭',
files: '文件',
noReadme: '该技能没有 SKILL.md 预览。',
trust: {
builtin: '内置',
trusted: '可信',
community: '社区'
},
verdictSafe: '安全',
verdictCaution: '注意',
verdictDangerous: '危险',
policyAllow: '允许安装',
policyAsk: '安装前请复查',
policyBlock: '安装被策略阻止',
findings: count => `${count} 项发现`,
noFindings: '无安全发现。',
installStarted: name => `正在安装 ${name}…`,
uninstallStarted: name => `正在卸载 ${name}…`,
updateStarted: '正在更新已安装技能…',
actionFailed: '技能操作失败',
actionLog: '操作日志',
alreadyInstalled: name => `“${name}”已安装`,
pickerTitle: '技能中心',
pickerBrowse: '浏览完整技能中心',
pickerHide: '隐藏技能中心浏览器',
pickerHint: '点击任意技能上的“+ Add to this Agent”即可安装,安装后会出现在上方列表中。',
loadFailed: '技能中心加载失败',
previewFailed: '技能预览失败',
scanFailed: '安全扫描失败',
searchFailed: '技能中心搜索失败'
}
},
starmap: {
title: '记忆图谱',
subtitle: (nodes, clusters) => `${clusters} 个类别中的 ${nodes} 个技能`,
close: '关闭记忆图谱',
refresh: '刷新',
memory: '记忆',
filterAll: '全部',
filterUsed: '已使用',
filterLearned: '已学习',
viewGraph: '图谱',
loadFailed: '无法加载记忆图谱',
loading: '加载中…',
emptyTitle: '尚无学习内容',
emptyDesc: '当 Hermes 为你的工作构建技能和记忆时,会显示在这里。',
share: '分享图谱',
shareHint: '复制代码以分享此图谱,或粘贴代码以载入。仅包含布局,不含你的记忆或技能内容。',
shareTitle: '导入 / 导出图谱',
sharePlaceholder: '粘贴图谱代码…',
copy: '复制图谱代码',
copied: '已复制!',
importMap: '导入图谱',
importBtn: '加载',
importEmpty: '粘贴图谱代码以加载。',
importSuccess: nodes => `已加载包含 ${nodes} 个节点的图谱。`,
importedBadge: '导入的图谱',
resetToMine: '返回我的图谱'
},
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: '分支',
projects: '项目',
openFolder: '打开文件夹为项目…',
openFolderAt: path => `打开文件夹为项目 — ${path}`,
newSessionInProject: project => `在 ${project} 中新建会话`,
commands: '命令',
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: { maintenance: '维护', sessions: '会话', system: '系统', usage: '用量' },
sectionDescriptions: {
maintenance: '诊断、备份、维护器与记忆数据',
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} 次操作`,
logFile: '日志文件',
logLevel: '级别',
logSearchPlaceholder: '筛选日志行…',
maintenance: {
runOps: '诊断',
doctor: '运行体检',
doctorDesc: '检查安装、配置与提供方的健康状态',
securityAudit: '安全审计',
securityAuditDesc: '扫描配置与技能中的风险设置',
backup: '创建备份',
backupDesc: '打包配置、记忆、技能与会话',
debugShare: '调试分享',
debugShareDesc: '上传脱敏报告与日志,获取可分享链接(6 小时后自动删除)',
debugShareRunning: '正在上传调试报告…',
debugShareLinks: '分享链接',
debugShareFailed: '调试分享失败',
copyLink: '复制链接',
linkCopied: '链接已复制',
curator: '技能维护器',
curatorDesc: '后台审查并归档过期的智能体自建技能',
curatorPaused: '已暂停',
curatorActive: '运行中',
curatorDisabled: '已禁用',
curatorLastRun: when => `上次运行 ${when}`,
curatorNeverRan: '从未运行',
pause: '暂停',
resume: '恢复',
runNow: '立即运行',
memoryData: '记忆数据',
memoryDataDesc: '注入每个会话的内置记忆文件',
memoryProvider: name => `当前提供方:${name}`,
builtinMemory: '内置',
memoryFile: '智能体记忆(MEMORY.md)',
userFile: '用户画像(USER.md)',
bytes: size => size,
empty: '空',
resetMemory: '重置记忆',
resetUser: '重置画像',
resetAll: '全部重置',
resetConfirm: target => `删除 ${target}?此操作不可撤销。`,
resetDone: files => `已删除 ${files}。`,
resetFailed: '记忆重置失败',
actionStarted: name => `${name} 已启动 — 正在跟踪日志…`,
actionFailed: name => `${name} 启动失败`,
running: '运行中…',
viewLog: '操作日志'
}
},
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: '此平台无需在此填写令牌。请按上方设置指南操作,然后在下方启用。',
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} 失败`,
pendingRequests: count => `待处理请求(${count})`,
pendingAria: count => `${count} 条待处理配对请求`,
approvedUsers: count => `已批准用户(${count})`,
approve: '批准',
approving: '批准中…',
revoke: '撤销',
revoking: '撤销中…',
revokeAria: name => `撤销 ${name}`,
revokeTitle: '撤销访问权限',
revokeDesc: name => `${name} 将失去访问权限,下次发送消息时不再被识别。`,
approvedUser: name => `已批准 ${name}`,
approvedHint: '对方下次发送消息时会被自动识别。',
revokedUser: name => `已撤销 ${name}`,
failedApprove: name => `批准 ${name} 失败`,
failedRevoke: name => `撤销 ${name} 失败`,
pairingLockedOut: '批准失败次数过多,该平台已被暂时锁定,请稍后再试。',
waitingSince: minutes => (minutes < 1 ? '刚刚' : `${minutes} 分钟前`),
fieldCopy: {
TELEGRAM_BOT_TOKEN: {
label: 'Bot 令牌',
help: '用 @BotFather 创建一个机器人,然后粘贴它给你的令牌。',
placeholder: '粘贴 Telegram bot 令牌'
},
TELEGRAM_ALLOWED_USERS: {
label: '允许的 Telegram 用户 ID',
help: '推荐。来自 @userinfobot 的逗号分隔数字 ID。不设置则任何人都能私信你的机器人。'
},
TELEGRAM_PROXY: { label: '代理 URL', help: '仅在 Telegram 被屏蔽的网络中需要。' },
DISCORD_BOT_TOKEN: { label: 'Bot 令牌', help: '在 Discord 开发者门户创建应用,添加机器人,然后粘贴其令牌。' },
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 时,任何人都可以私信 bot,不需要允许列表。'
},
DISCORD_HOME_CHANNEL: { label: '主页频道 ID', help: 'bot 主动发送消息的频道(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 令牌',
help: '安装 Slack 应用后,在 OAuth & Permissions 中找到 bot 令牌。',
placeholder: '粘贴 Slack bot 令牌'
},
SLACK_APP_TOKEN: {
label: 'Slack app 令牌',
help: 'Socket Mode 需要 app 级令牌。',
placeholder: '粘贴 Slack app 令牌'
},
SLACK_ALLOWED_USERS: { label: '允许的 Slack 用户 ID', help: '推荐。逗号分隔的 Slack 用户 ID。' },
MATTERMOST_URL: { label: '服务器 URL', placeholder: 'https://mattermost.example.com' },
MATTERMOST_TOKEN: { label: 'Bot 令牌' },
MATTERMOST_ALLOWED_USERS: { label: '允许的用户 ID', help: '推荐。逗号分隔的 Mattermost 用户 ID。' },
MATRIX_HOMESERVER: { label: 'Homeserver URL', placeholder: 'https://matrix.org' },
MATRIX_ACCESS_TOKEN: { label: '访问令牌' },
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: {
telegram:
'在 Telegram 中,与 @BotFather 对话,运行 /newbot,复制它给你的令牌。然后从 @userinfobot 获取你的数字用户 ID。',
discord:
'打开 Discord 开发者门户,创建应用,添加 Bot,然后复制其令牌。用正确的权限范围把机器人邀请到你的服务器。',
slack: '创建 Slack 应用,启用 Socket Mode,安装到你的工作区,然后复制 bot 令牌和 app 级令牌。',
mattermost: '在你的 Mattermost 服务器上,创建机器人账户或个人访问令牌,然后在此粘贴服务器 URL 和令牌。',
matrix: '用机器人账户登录你的 homeserver,然后复制访问令牌、用户 ID 和 homeserver URL。',
signal: '在可访问的位置运行 signal-cli REST 桥接,然后把 Hermes 指向该 URL 和已注册的电话号码。',
whatsapp: '启动 Hermes 自带的 WhatsApp 桥接,首次运行时扫描二维码,然后启用该平台。',
bluebubbles:
'在装有 iMessage 的 Mac 上运行 BlueBubbles Server,暴露其 API,然后用服务器密码把 Hermes 指向该 URL。',
homeassistant: '在 Home Assistant 中打开你的个人资料并创建长期访问令牌。把它连同你的 HA URL 一起粘贴到这里。',
email: '使用专用邮箱。对于 Gmail/Workspace,创建应用专用密码并使用 imap.gmail.com / smtp.gmail.com。',
sms: '从 Twilio 控制台获取你的 Account SID 和 Auth Token,以及一个可发送短信的电话号码。',
dingtalk: '在开发者控制台创建钉钉应用,然后在此复制 Client ID(App key) 和 Client Secret。',
feishu: '创建飞书 / Lark 应用,配置机器人能力,复制 App ID、App secret 和事件加密密钥。',
wecom: '在企业微信中添加群机器人,复制其 webhook key 作为 WECOM_BOT_ID。仅可发送——双向请用企业微信 (应用) 选项。',
wecom_callback: '设置一个企业微信自建应用,暴露其回调 URL,并提供 corp ID、secret、agent ID 和 AES key。',
weixin:
'运行 `hermes gateway setup`,选择 Weixin,然后使用个人微信账号扫描并确认二维码。Hermes 会通过腾讯 iLink Bot API 连接并保存凭据。',
qqbot: '在 QQ 开放平台 (q.qq.com) 注册一个应用,复制 App ID 和 Client Secret。',
api_server:
'把 Hermes 暴露为兼容 OpenAI 的 API。设置一个鉴权密钥,然后把 Open WebUI / LobeChat 等指向 host:port。',
webhook: '运行一个 HTTP 服务器,供其他工具 (GitHub、GitLab、自定义应用)POST。用 secret 验证签名。'
}
},
webhooks: {
search: '搜索 Webhook…',
loading: '正在加载 Webhook…',
loadFailed: 'Webhook 加载失败',
subscriptions: (count: number) => `订阅(${count})`,
hint: '接收器运行后,订阅更改会热重载。已禁用的订阅会拒绝传入事件。',
empty: '暂无 Webhook 订阅。',
disabledTitle: 'Webhook 接收器已禁用',
disabledBody:
'Webhook 是独立的网关平台。在此启用以接受传入的 HTTP 事件;仅当订阅投递到 Telegram、Discord、Slack 或其他渠道时才需要聊天渠道。',
enable: '启用 Webhook',
enabling: '正在启用…',
enabled: (name: string) => `已启用:“${name}”`,
disabled: (name: string) => `已禁用:“${name}”`,
enableRow: '启用',
disableRow: '禁用',
delete: '删除',
deleting: '删除中…',
deleted: 'Webhook 已删除',
deleteTitle: '删除 Webhook',
deleteDescPrefix: '这将永久移除 ',
deleteDescSuffix: '。此操作无法撤销。',
deleteFailed: (name: string) => `删除“${name}”失败`,
toggleFailed: (name, enabled) => `${enabled ? '开启' : '关闭'}“${name}”失败`,
newSubscription: '新建订阅',
restarting: '网关正在重启…',
restartNeeded: 'Webhook 已启用,但网关仍需重启后接收器才能上线。',
restartGateway: '重启网关',
restartingGateway: '正在重启…',
restartFailed: (detail: string) => `网关重启失败${detail}`,
enabledRestarting: 'Webhook 已启用;网关正在重启…',
all: '(全部)',
deliverOnly: '仅投递',
createdTitle: '订阅已创建',
createdSecretHint: '请立即复制密钥 —— 它只显示一次。',
webhookUrl: 'Webhook URL',
secretOnce: '密钥(仅显示一次)',
done: '完成',
fieldName: '名称',
fieldNamePlaceholder: '例如 github-push',
fieldDescription: '描述',
fieldDescriptionPlaceholder: '此 Webhook 的用途(可选)',
fieldEvents: '事件',
fieldEventsPlaceholder: '以逗号分隔,留空表示全部',
fieldSkills: '技能',
fieldSkillsPlaceholder: '以逗号分隔的技能名称(可选)',
fieldDeliver: '投递到',
fieldDeliverOnly: '仅投递载荷',
fieldPrompt: '提示词',
fieldPromptPlaceholder: '此 Webhook 触发时给智能体的说明(可选)',
nameRequired: '需要名称',
create: '创建',
creating: '正在创建…',
created: '已创建',
createFailed: (detail: string) => `创建失败:${detail}`,
copy: '复制',
deliverOptions: {
log: '日志',
telegram: 'Telegram',
discord: 'Discord',
slack: 'Slack',
email: '电子邮件',
github_comment: 'GitHub 评论'
}
},
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: '管理配置档案…',
connectGateway: '管理网关…',
fleet: {
allOnGateway: '此网关上的全部配置档案',
gateway: gateway => `${gateway} 上的配置档案`,
gatewayUnreachable: gateway => `${gateway} · 无法连接`,
onGateway: (name, gateway) => `${name} · ${gateway}`,
switchTo: (name, gateway) => `切换到 ${gateway} 上的 ${name}`,
deleteOn: gateway => `(位于 ${gateway})`
},
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: '重命名配置档案',
displayNameTitle: '为智能体命名',
displayNameDesc: '设置一个在整个应用中显示的名称。内部配置档案 ID 仍为 "default"。',
displayNameLabel: '显示名称',
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: '总结我未读的 Slack 话题,并把前 5 条邮件发给我…',
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: '删除',
moveToProject: '移动到项目',
movedTo: name => `已移动到 ${name}`,
moveFailed: '无法移动会话',
moveNoFolder: '该项目没有可移入的文件夹',
moveNoProjects: '没有其他项目',
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}`,
reorder: label => `重新排序 ${label}`,
toggle: (label, open) => `${open ? '展开' : '收起'} ${label} 会话`,
back: '全部项目'
},
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: '在终端中打开',
hideTabBar: '隐藏标签栏',
openInNewTab: '在新标签页中打开',
openInSplit: '在分屏中打开',
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}`,
messageCount: count => `${count} 条消息`,
todoProgress: '任务完成度',
ageNow: '刚刚',
ageDay: '天',
ageHour: '时',
ageMin: '分'
},
dateDivider: {
today: '今天早些时候',
yesterday: '昨天',
thisWeek: '本周',
lastWeek: '上周',
thisMonth: '本月'
},
statusDivider: {
working: '进行中',
done: '已完成'
},
markAllRead: '全部标记为已读'
},
composer: {
message: '消息',
wakingProfile: profile => `正在唤醒 ${profile}…`,
placeholderStarting: '正在启动 Hermes…',
placeholderReconnecting: '正在重新连接 Hermes…',
placeholderFollowUp: '发送后续消息',
newSessionPlaceholders: [
'我们要构建什么?',
'给 Hermes 一个任务',
'你在想什么?',
'描述你需要什么',
'我们该处理什么?',
'随便问点什么',
'从一个目标开始'
],
followUpPlaceholders: [
'发送后续消息',
'补充更多上下文',
'细化这个请求',
'下一步是什么?',
'继续推进',
'再深入一点',
'调整或继续'
],
startVoice: '开始语音对话',
openDirective: '打开',
queueMessage: '排队消息',
steer: '引导当前运行',
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: '拖放以链接此对话',
mcpSuggestions: {
label: server => `添加 ${server}`,
tip: keyword => `因为你提到了“${keyword}”而推荐 — 点击连接`,
connecting: server => `正在连接 ${server}…`,
cancelTip: '点击取消',
added: server => `已添加 ${server}`,
addedTip: '已连接 — 其工具已在此对话中可用',
connectFailed: server => `无法连接 ${server}`
},
skillSuggestions: {
label: skill => `使用技能: ${skill}`,
tip: skill => `你提到了“${skill}” — 点击以该技能开头`,
done: skill => `已添加 /${skill}`,
doneTip: '发送时将加载该技能'
},
githubSuggestions: {
label: '设置 GitHub',
tip: '这里通过 gh CLI 技能使用 GitHub — 点击连接你的账号',
done: '已添加 /github-auth',
doneTip: '发送消息后,agent 将引导你完成 GitHub 登录'
},
repairSuggestions: {
label: server => `重新连接 ${server}`,
tip: server => `${server} 调用刚因连接错误失败`,
working: server => `正在重新连接 ${server}…`,
workingTip: '点击取消',
done: server => `已重新连接 ${server}`,
doneTip: '新凭据已在此对话中生效',
failed: server => `无法重新连接 ${server}`
},
cronSuggestions: {
label: '定时执行',
tip: phrase => `“${phrase}”听起来是周期性任务 — 可以按计划运行`,
prefix: '将此设置为定时任务:',
done: '已标记为定时任务',
doneTip: '发送后由智能体创建任务'
},
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: '分离头指针',
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 密钥',
localApiKeyPlaceholder: '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: '无法加载模型',
loadingIntoMemory: '正在载入内存',
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: '网关',
customizeTitle: '在状态栏中显示',
hideStatusbar: '隐藏状态栏',
resetStatusbar: '恢复默认设置',
toggleApprovalMode: '审批',
toggleBackendVersion: '后端版本',
toggleCacheHitRate: '缓存命中率',
toggleCommandCenter: '命令中心',
toggleContextUsage: '上下文用量',
toggleRunningTimer: '回合计时',
toggleSessionTimer: '会话计时',
toggleTerminal: '终端',
toggleTokensPerSecond: '每秒 token 数',
toggleVersion: '版本与更新',
toggleWorkspace: '工作区',
cacheHitRateTitle: '本会话的提示缓存命中率 — 缓存 token 更便宜,越高越省',
tokensPerSecondTitle: '每秒输出 token 数,取最近 10 次模型调用的平均值',
agents: '代理',
closeAgents: '关闭代理',
openAgents: '打开代理',
subagents: count => `${count} 个子代理`,
failed: count => `${count} 个失败`,
running: count => `${count} 个运行中`,
cron: '排程',
openCron: '打开排程任务',
webhooks: 'Webhook',
openWebhooks: '打开 Webhook',
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: '预览',
annotate: '标注',
annotateOn: '停止标注',
annotateNeedPage: '请先在内置浏览器中打开页面。',
annotateFailed: '无法开始标注',
commenting: '标注中',
addComments: count => (count === 1 ? '添加 1 条批注' : `添加 ${count} 条批注`),
commentPlaceholder: '添加批注…',
commentTitle: n => `批注 ${n}`,
saveComment: '保存',
cancelComment: '取消批注'
}
},
zones: {
bots: '机器人',
showTabStrip: '显示标签',
hideTabStrip: '隐藏标签',
showStripTab: title => `显示 ${title}`,
hideStripTab: title => `隐藏 ${title}`,
lastTabKeptTitle: '保留最后一个标签',
lastTabKeptBody: '该区域至少需要一个可见标签。请先显示另一个标签,或折叠整个侧边栏。',
toggleStripTab: title => `切换 ${title} 标签`,
minimize: '最小化',
restore: '还原',
closeRunningTitle: '关闭正在运行的标签?',
closeRunningBody: '此对话仍在运行(或正在等待你的输入)。关闭标签只会隐藏它——会话将保留进度,可从侧边栏重新打开。',
closeRunningConfirm: '关闭标签',
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 正在加载回复',
loadingLocalModel: model => `正在将 ${model} 载入内存`,
processingPrompt: '正在处理提示词',
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: '编辑消息',
expandMessage: '展开消息',
scrollToBottom: '滚动到底部',
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: '此问题已不再等待回答。选择一个选项会将其起草为后续消息。'
},
mcpSetup: {
installTitle: server => `添加 ${server} MCP 服务器?`,
enableTitle: server => `启用 ${server} MCP 服务器?`,
authorizeTitle: server => `授权 ${server} MCP 服务器?`,
installAction: '安装',
enableAction: '启用',
authorizeAction: '授权',
decline: '暂不',
declined: '已拒绝',
installed: server => `已安装 ${server}`,
enabled: server => `已启用 ${server}`,
authorized: server => `已授权 ${server}`,
failed: server => `${server} 设置失败`,
unanswered: '未响应',
toolCount: count => `${count} 个工具`,
notInCatalog: server => `“${server}”不在 MCP 目录中`,
catalogSource: '来自 Nous 认证目录',
envRequired: '请先填写所需凭据',
sendFailed: '无法发送 MCP 设置响应',
reloadFailed: '服务器已保存,但重新加载 MCP 工具失败 — 将在下个会话加载',
gatewayDisconnected: 'Hermes 网关未连接'
},
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 密码来运行特权命令。它只会发送给你的本地 agent。',
sudoPlaceholder: 'sudo 密码',
secretTitle: '需要密钥',
secretDesc: 'Hermes 需要一个凭据才能继续。',
secretPlaceholder: '密钥值'
},
desktop: {
audioReadFailed: '无法读取录制的音频',
sessionUnavailable: '会话不可用',
createSessionFailed: '无法创建新会话',
promptFailed: '提示词发送失败',
providerCredentialRequired: '发送第一条消息前请先添加提供方凭据。',
emptySlashCommand: '空 slash 命令',
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 桌面版后可使用保存图片。',
restartToSaveImages: '重启 Hermes 桌面版以保存图片',
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` 是否正在运行?'
}
},
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: '文件、终端、审阅和内置浏览器都在侧边面板里。'
}
}
},
errors: {
genericFailure: '发生错误',
boundaryTitle: '界面出错了',
boundaryDesc: '此视图遇到意外错误。你的对话和设置是安全的。',
reloadWindow: '重新加载窗口',
openLogs: '打开日志'
},
ui: {
search: {
clear: '清除搜索'
},
pagination: {
label: '分页',
previous: '上一页',
previousAria: '前往上一页',
next: '下一页',
nextAria: '前往下一页'
},
sidebar: {
title: '侧边栏',
description: '显示移动端侧边栏。',
toggle: open => `${open ? '显示' : '隐藏'}侧边栏`
}
}
}