3863 lines
172 KiB
TypeScript
3863 lines
172 KiB
TypeScript
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 ? '显示' : '隐藏'}侧边栏`
|
||
}
|
||
}
|
||
}
|