Files
hermes-ui/packages/client/src/i18n/locales/zh.ts
T
2026-10-24 16:34:02 +08:00

2327 lines
89 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export default {
// 登录
login: {
title: 'Hermes Studio',
description: '输入用户名和密码以继续。',
placeholder: '访问令牌',
submit: '登录',
tokenRequired: '请输入访问令牌',
invalidToken: '令牌无效',
connectionFailed: '无法连接到服务器',
passwordLogin: '密码登录',
tokenLogin: '令牌登录',
usernamePlaceholder: '用户名',
passwordPlaceholder: '密码',
credentialsRequired: '请输入用户名和密码',
invalidCredentials: '用户名或密码错误',
tooManyAttempts: '登录失败次数过多,请稍后重试',
lockResetHint: '如果这是你的服务器,可以执行以下命令清除登录锁定:',
defaultLoginResetHint: '如需重置默认 admin 密码,可以执行:',
sessionExpired: '登录已过期,请重新登录',
probing: '正在探测服务端…',
online: '认证服务在线 · 密码登录可用',
offline: '无法连接到服务器 · 登录仍可尝试',
showPassword: '显示密码',
hidePassword: '隐藏密码',
fillDefaults: '使用默认账号登录',
accessDenied: '你没有权限访问该资源',
passwordMismatch: '两次密码不一致',
passwordTooShort: '密码长度至少 6 个字符',
setupSuccess: '密码登录配置成功',
passwordChanged: '密码修改成功',
passwordRemoved: '密码登录已移除',
setupPassword: '设置密码登录',
changePassword: '修改密码',
changeUsername: '修改用户名',
removePasswordLogin: '移除',
username: '用户名',
currentPassword: '当前密码',
newPassword: '新密码',
confirmPassword: '确认密码',
newUsername: '新用户名',
usernameChanged: '用户名修改成功',
usernameTooShort: '用户名至少 2 个字符',
setupDescription: '管理用于登录的用户名和密码。',
removeConfirm: '用户账号必须保留密码登录。',
passwordLoginNotConfigured: '密码登录未配置',
passwordLoginConfigured: '当前账户:{username}',
defaultCredentialTitle: '请修改默认账户和密码',
defaultCredentialMessage: '当前登录账户仍在使用默认用户名或默认密码。为了避免未授权访问,请尽快进入当前账户修改用户名和密码。',
defaultCredentialAction: '去修改',
defaultCredentialLater: '稍后提醒',
},
// hermes CLI 缺失引导
hermesMissing: {
title: '未检测到 hermes CLI',
intro: 'hermes-ui 不再内置 hermes CLI,请先在运行本服务的机器上安装:',
installCmd: 'pip install hermes-agent',
envIntro: '或者设置环境变量指定可执行文件路径:',
envCmd: 'HERMES_BIN=/path/to/hermes',
restartHint: '安装完成后请重启本服务。',
retry: '重新检测',
},
users: {
title: '账户管理',
description: '创建用户、分配角色,并控制普通管理员可访问的配置。',
create: '创建用户',
edit: '编辑用户',
username: '用户名',
role: '角色',
statusLabel: '状态',
profiles: '可访问配置',
profilesPlaceholder: '选择可访问的配置',
allProfiles: '全部配置',
noProfiles: '未关联配置',
lastLogin: '最后登录',
newPasswordOptional: '新密码(留空不修改)',
loadFailed: '用户列表加载失败',
deleteConfirm: '确认删除该用户?',
enable: '启用',
disable: '禁用',
roles: {
superAdmin: '超级管理员',
admin: '普通管理员',
},
status: {
active: '启用',
disabled: '禁用',
},
},
// 通用
common: {
loading: '加载中...',
cancel: '取消',
delete: '删除',
retry: '重试',
reset: '重置',
edit: '编辑',
save: '保存',
saved: '已保存',
saveFailed: '保存失败',
deleteFailed: '删除失败',
ok: '确定',
copied: '已复制',
copy: '复制',
update: '更新',
create: '创建',
noData: '暂无数据',
expired: '已过期',
fetch: '获取',
add: '添加',
enable: '启用',
disable: '禁用',
configured: '已配置',
notConfigured: '未配置',
confirm: '确定',
expand: '展开',
collapse: '收起',
start: '启动',
stop: '停止',
},
// 侧边栏
// MCP 管理
mcp: {
title: 'MCP 服务器',
loadFailed: '加载 MCP 服务器失败',
reloadAll: '全部重载',
refresh: '刷新',
total: '总计',
connected: '已连接',
disconnected: '未连接',
tools: '工具',
tool: '工具',
searchPlaceholder: '搜索服务器...',
addServer: '+ 添加服务器',
zeroTools: '0 个工具',
loading: '加载中...',
empty: '暂无 MCP 服务器配置',
reloaded: '已重载 {server}',
reloadedAll: '所有 MCP 服务器已重载',
reloadFailed: '重载失败',
serverAdded: '服务器 "{name}" 已添加',
addFailed: '添加服务器失败',
serverUpdated: '服务器 "{name}" 已更新',
updateFailed: '更新服务器失败',
saveFailed: '保存失败',
serverRemoved: '已移除 "{name}"',
enabled: "已启用 {name}",
disabled: "已禁用 {name}",
connectedStatus: '已连接',
disconnectedStatus: '未连接',
disabledStatus: '已禁用',
toolList: '工具列表',
count: '个',
more: '更多',
removeFailed: '移除服务器失败',
testOk: '测试成功 — {count} 个工具可用',
testEmpty: '测试未返回工具',
testFailed: '测试失败',
edit: '编辑',
test: '测试',
reload: '重载',
remove: '移除',
confirmRemove: '确认删除服务器 "{name}"?',
cancel: '取消',
add: '添加',
save: '保存',
addTitle: '添加 MCP 服务器',
editTitle: '编辑 MCP 服务器',
invalidJson: 'JSON 格式错误',
invalidYaml: 'YAML 格式错误',
invalidConfig: '配置格式错误',
invalidServerConfig: '服务器配置无效',
missingCommandOrUrl: '必须包含 command 或 url',
manageTools: '管理工具',
toolsVisibilityTitle: '工具可见性管理',
fetchTools: '获取工具列表',
fetchToolsFailed: '获取工具列表失败',
toolsMode: '模式:',
toolsModeAll: '全部',
toolsModeInclude: '包含',
toolsModeExclude: '排除',
toolsListHeader: '工具名称',
toolsEmpty: '暂无工具,请先获取工具列表',
toolsSummaryAll: '共 {count} 个工具,全部启用',
toolsSummaryInclude: '共 {total} 个工具,已选 {count} 个',
toolsSummaryExclude: '共 {total} 个工具,已排除 {count} 个',
toolsVisibilitySaved: '工具可见性已保存',
toolsSelectAll: '全选',
toolsClearSelection: '取消全选',
toolsExcludeAll: '全部排除',
toolsClearExcluded: '清空排除',
},
sidebar: {
chat: '对话',
backToChat: '返回',
search: '搜索',
history: '历史',
jobs: '任务',
kanban: '看板',
workflow: '工作流',
models: '模型',
profiles: 'Agent',
plugins: '插件',
mcp: 'MCP',
skills: '技能',
memory: '记忆',
logs: '日志',
usage: '用量',
performance: '性能监控',
journey: '学习轨迹',
skillsUsage: '技能用量',
channels: '频道',
gateways: '网关',
terminal: '终端',
singleChat: '单聊',
globalAgent: '全局',
groupChat: '群聊',
files: '文件',
devices: '设备',
groupConversation: '对话',
groupConversationShort: '对话',
groupPlatform: '平台',
groupAgent: '助手',
groupAgentShort: '助手',
groupSystem: '系统',
groupSystemShort: '系统',
groupMonitoring: '监控',
groupMonitoringShort: '监控',
groupTools: '工具',
groupToolsShort: "工具",
versionPreview: "版本预览",
settings: '设置',
connected: '已连接',
disconnected: '未连接',
collapse: '收起菜单',
expand: '展开菜单',
updateTip: '在终端运行 "hermes-ui update" 即可更新',
updateVersion: '升级版本 v{version}',
reloadClientVersion: '刷新到 v{version}',
updating: '正在更新...',
updateSuccess: '更新成功,请稍后刷新页面,如长时间未启动,请手动启动',
updateFailed: '更新失败',
logout: '退出登录',
nodeVersionWarning: '检测到 Node.js v{version},请升级到23以上版本。',
changelog: '更新日志',
noChangelog: '暂无更新日志',
updateAvailableLabel: '(有新版)',
dockerUpdateTitle: 'Docker 升级',
dockerUpdateGuide: '当前运行在 Docker 环境中,请拉取最新镜像并重建容器来升级:',
dockerUpdateNote: '数据会持续保留,重建容器不会丢失数据。',
},
runtimeVersions: {
title: '版本管理',
runtimeTitle: 'Hermes Runtime',
webUiTitle: 'Web UI',
platform: '平台',
currentWebUi: '当前 Web UI',
activeVersion: '当前启用版本',
active: '已启用',
installed: '已安装',
download: '下载',
downloadGithub: 'GitHub 下载',
downloadCf: 'Cloudflare 下载',
github: 'GitHub',
cf: 'Cloudflare',
useVersion: '下次启动使用',
deleteVersion: '删除',
deleteRuntimeConfirm: '删除 Hermes Runtime {version}?',
deleteWebUiConfirm: '删除 Web UI {version}?',
deleteRuntimeSuccess: 'Runtime 已删除',
deleteWebUiSuccess: 'Web UI 已删除',
refresh: '刷新',
noVersions: '暂无可用版本',
remoteLoadFailed: '远程版本加载失败',
downloadTasks: '下载任务',
downloadStarted: '已开始下载',
activateSuccess: '版本选择已保存,重启 Hermes Studio 后生效。',
jobStatus: {
queued: '排队中',
running: '下载中',
completed: '已完成',
failed: '失败',
},
jobStageStatus: {
queued: '排队中',
resolve: '解析中',
download: '下载中',
verify: '校验中',
extract: '解压中',
install: '安装中',
completed: '已完成',
failed: '失败',
},
jobStage: {
queued: '排队中',
download: '下载中',
resolveRuntime: '正在解析 Runtime 包',
verifyRuntime: '正在校验 Runtime 压缩包',
extractRuntime: '正在解压 Runtime 压缩包',
installRuntime: '正在安装 Runtime',
resolveWebUi: '正在解析 Web UI 包',
verifyWebUi: '正在校验 Web UI 压缩包',
extractWebUi: '正在解压 Web UI 压缩包',
installWebUi: '正在安装 Web UI',
completed: '已完成',
failed: '失败',
},
},
devices: {
title: '设备',
count: '{count} 台设备',
lastScanned: '上次扫描:{time}',
refresh: '刷新',
empty: '暂无设备',
kpiDiscovered: '已发现',
kpiOnline: '在线',
kpiOffline: '离线',
kpiRequests: '待处理申请',
discoveredHosts: '已发现主机',
computer: '电脑',
endpointLabel: '端',
statusLabel: '状态',
online: '在线',
offline: '离线',
address: '地址',
os: '系统',
agentVersion: 'Agent',
webUiVersion: 'Web UI',
responseMs: '延迟',
lastSeen: '最后发现',
open: '打开',
never: '从未',
unknown: '未知',
loadFailed: '加载设备失败',
scanFailed: '扫描设备失败',
updateFailed: '更新设备失败',
duplicateRequest: '已存在待处理的配对申请',
manualPairing: '远程配对',
copyPairingLink: '复制配对链接',
manualUrlPlaceholder: 'https://device.example.com',
manualUrlRequired: '请输入设备链接',
manualRequestSent: '配对申请已发送',
manualRequestFailed: '远程配对申请失败',
pairingLinkCopied: '配对链接已复制',
pairingLinkCopyFailed: '复制配对链接失败',
pairingCodeTitle: '输入配对码',
pairingCodePlaceholder: '配对码',
pairingCodeRequired: '请输入配对码',
submitPairingRequest: '提交申请',
processed: '已处理',
unprocessed: '未处理',
deleteHistory: '删除记录',
deleteHistoryConfirm: '确认删除这条申请记录并撤销该设备连接权限?',
requests: '申请列表',
requestsWithCount: '申请列表({count})',
noRequests: '暂无申请',
requestPairing: '申请配对',
paired: '已配对',
approve: '通过',
reject: '拒绝',
block: '拉黑',
unblock: '解除拉黑',
inboundStatus: {
none: '允许申请',
pending: '待处理',
approved: '已通过',
rejected: '已拒绝',
blocked: '黑名单',
},
outboundStatus: {
none: '未配对',
pending: '已申请',
approved: '已配对',
rejected: '已拒绝',
blocked: '被拉黑',
},
endpoint: {
web: 'Web 端',
custom: '自定义',
},
},
performance: {
title: '性能监控',
subtitle: '查看系统资源、Bridge Broker、Workers 和活跃会话',
refresh: '刷新',
autoRefreshOn: '自动刷新',
autoRefreshOff: '手动刷新',
loadFailed: '性能数据加载失败',
systemCpu: '系统 CPU',
systemMemory: '系统内存',
activeSessions: '活跃会话',
runningSessions: '运行中 {count}',
workers: 'Workers',
totalWorkerMemory: 'Worker 总内存',
processes: '进程',
uptime: '运行',
running: '运行中',
stopped: '已停止',
workerMemory: 'Worker 内存',
lastUpdated: '更新时间',
profile: 'Profile',
memory: '内存',
sessions: '会话',
runningActiveSessions: '运行中 / 活跃',
lastUsed: '最后使用',
status: '状态',
noWorkers: '暂无 Worker',
sessionsByProfile: '按 Profile 统计会话',
noActiveSessions: '暂无活跃会话',
},
journey: {
title: '学习轨迹',
play: '播放学习轨迹',
pause: '暂停学习轨迹',
refresh: '刷新',
loadFailed: '学习轨迹加载失败',
nodes: '节点',
edges: '关系',
skills: '技能',
memories: '记忆',
clusters: '分组',
profile: 'Profile',
source: '来源',
learnedSkills: '已学习技能',
memorySkillEdges: '记忆关联',
allKinds: '全部类型',
allCategories: '全部分组',
searchPlaceholder: '搜索节点',
noClusters: '暂无分组',
noNodes: '暂无学习轨迹节点',
noCategory: '未分组',
category: '分组',
useCount: '使用次数',
createdBy: '创建来源',
timestamp: '时间',
pinned: '已固定',
},
// 抽屉
drawer: {
terminal: '终端',
files: '工作区',
},
// 对话
chat: {
messageLoadFailed: '会话加载失败,请重试。',
contextRemaining: '剩余',
contextClickToEdit: '点击编辑上下文长度',
contextEditTitle: '编辑上下文长度',
contextEditDesc: '设置当前模型的上下文长度限制(token 数量)',
contextEditPlaceholder: '请输入上下文长度',
contextEditHint: '常见值:256k (Hermes 默认), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: '保存',
contextEditCancel: '取消',
contextEditInvalid: '请输入有效的上下文长度',
contextEditSuccess: '上下文长度已更新',
contextEditFailed: '更新失败',
emptyState: '开始与 Hermes Agent 对话',
emptyStateAgent: '开始与 {agent} 对话',
viewOlderInHistory: '前面的消息请到历史记录查看',
scrollToBottom: '滚动到底部',
forkedFrom: 'Fork 来源',
previousLastMessage: '上一段对话的最后一条消息',
cliEmptyState: '开始 CLI 对话',
outlineTitle: '会话大纲',
outlineEmpty: '暂无会话内容',
outlineUserQuestion: '用户问题',
inputPlaceholder: '输入消息... (Enter 发送,Shift+Enter 换行)',
inputHeightResizeHint: '拖拽调整聊天输入框高度,双击恢复自动高度。',
slashCommandArgs: {
message: '<消息>',
title: '<标题>',
text: '<文本>',
},
slashCommands: {
usage: '计算当前会话用量',
status: '查看会话状态和队列',
abort: '停止当前 Bridge 运行',
queue: '把消息加入当前运行后的队列',
learn: '从描述的来源学习可复用技能',
plan: '生成一份 Markdown 实施计划',
moa: '用默认组合模型运行一次性提示',
goal: '设置一个跨轮次持续推进的目标',
goalStatus: '查看当前目标状态',
goalPause: '暂停当前目标循环',
goalResume: '继续已暂停的目标循环',
goalDone: '完成并清除当前目标',
goalClear: '清除当前目标',
subgoal: '为当前目标追加验收条件',
clear: '清空当前显示内容',
clearHistory: '删除当前会话已入库的消息历史',
title: '重命名当前会话',
compress: '空闲时触发上下文压缩',
fork: '将当前空闲会话 fork 成一个新的关联对话',
steer: '向当前 Bridge 运行发送引导文本',
destroy: '释放当前会话的 Bridge Agent',
reloadMcp: '重载 MCP 服务器',
reloadSkills: '重载技能命令',
},
attachFiles: '添加附件',
reasoningEffort: {
tooltip: '推理强度',
defaultLabel: '默认',
options: {
default: '默认 (config.yaml)',
none: '无',
minimal: '极低',
low: '低',
medium: '中',
high: '高',
xhigh: '超高',
},
},
autoPlaySpeech: '自动播放语音',
voiceInput: {
startCapture: '开始语音输入',
stopCaptureAndInsert: '停止语音输入并插入到输入框',
cancelCapture: '取消语音输入',
statusLabel: '状态:{status}',
transcriptLabel: '转写:{text}',
errorLabel: '错误:{error}',
recentEvents: '最近事件',
status: {
idle: '空闲',
capturing: '正在聆听',
transcribing: '正在转写',
sending: '正在插入输入框',
error: '错误',
},
browserSpeechUnsupported: '当前浏览器不支持内置语音识别。',
browserSpeechFailed: '浏览器语音识别失败。',
browserSpeechFailedWithReason: '浏览器语音识别失败:{error}。',
microphoneUnsupported: '当前浏览器不支持麦克风录音。',
microphoneRecordingFailed: '麦克风录音失败。',
},
showToolCalls: '显示工具调用',
hideToolCalls: '隐藏工具调用',
messageQueue: '消息队列',
removeQueuedMessage: '移除队列消息',
stop: '停止',
start: '启动',
stopGateway: '停止网关',
send: '发送',
contextUsed: '上下文已用:',
sessions: '会话',
webUiSessions: '会话',
allProfiles: '全部配置',
profileMissingModelsTip: '该会话所属配置「{profile}」没有可用的 provider 或模型',
sessionScopeHint: '这里只显示当前会话;CLI、Telegram、Discord、Cron 等通道会话在历史中只读查看。',
openHistory: '打开历史',
hermesHistory: 'Hermes 历史',
historyScopeHint: '这里按来源只读查看当前 profile 的 Hermes 历史会话。',
noSessions: '暂无会话',
searchTitle: '搜索会话',
searchSubtitle: '按标题或消息内容搜索',
searchScope: '搜索范围:仅 Web UI 本地会话库;不包含只读 Hermes 历史会话。',
searchHint: 'Cmd/Ctrl+K',
searchPlaceholder: '搜索会话...',
searchEmpty: '最近会话',
searchRecent: '最近会话',
searchNoResults: '没有匹配的会话',
searchNoSnippet: '没有可显示的摘要',
searchEnterHint: 'Enter 打开 · Esc 关闭',
searchFailed: '搜索会话失败',
newChat: '新建对话',
agent: 'Agent',
approvalKicker: '终端授权',
approvalTitle: '运行前请确认命令',
approvalAgree: '同意',
approvalAllowOnce: '仅本次允许',
approvalAllowSession: '本会话允许',
approvalAlways: '始终允许',
approvalDeny: '拒绝',
clarifyKicker: 'Agent 需要确认',
clarifyTitle: 'Agent 有一个问题需要您回答',
clarifyPlaceholder: '输入你的回答...',
clarifySubmit: '回复',
clarifyDismiss: '忽略',
newCliChat: '新建 CLI',
deleteSession: '确定删除此会话?',
sessionDeleted: '会话已删除',
toggleBatchMode: '批量选择',
selectAll: '全选',
confirmBatchDelete: '确定删除选中的 {count} 个会话?',
batchDeleteSuccess: '已删除 {count} 个会话',
batchDeletePartial: '{failed} 个会话删除失败',
batchDeleteFailed: '批量删除失败',
importToWebUi: '导入到 Web UI',
importSessionSuccess: '会话已导入 Web UI',
importSessionAlreadyExists: '会话已存在于 Web UI',
importSessionFailed: '导入会话失败',
rename: '重命名',
archiveSession: '归档',
unarchiveSession: '取消归档',
pin: '置顶',
unpin: '取消置顶',
pinned: '已置顶',
chatMode: '聊天',
liveMode: '实时',
liveSessions: '实时会话',
recentBadge: '最近',
linkedSessions: '关联 {count} 个会话',
noVisibleMessages: '没有人类可见消息。',
monitorRoleUser: '用户',
monitorRoleAssistant: '助手',
copySessionLink: '复制会话链接',
openSessionInNewTab: '在新标签页打开',
sessionLinkCopied: 'Session link copied',
copySessionId: '复制会话 ID',
export: '导出',
exportFull: '全量导出 (JSON)',
exportCompressed: '压缩导出 (TXT)',
exportCompressing: '正在压缩上下文,请稍候...',
exportSuccess: '会话已导出',
exportFailed: '导出失败',
renamed: '已重命名',
renameFailed: '重命名失败',
sessionArchived: '会话已归档',
archiveSessionFailed: '归档会话失败',
sessionUnarchived: '已取消归档',
unarchiveSessionFailed: '取消归档失败',
renameSession: '重命名会话',
sessionNotFound: '会话未找到',
enterNewTitle: '输入新标题',
workspace: '工作区',
workspaceDefault: '默认',
workspaceDefaultTooltip: '此工作区已设为默认,新建对话时自动填充',
workspacePin: '设为默认工作区',
workspaceUnpin: '取消默认工作区',
workspaceRecent: '最近使用',
defaultWorkspace: '默认工作区',
more: '更多',
setWorkspace: '设置工作区',
setWorkspaceTitle: '设置会话工作区',
workspacePlaceholder: '输入项目路径,例如 /home/user/project',
folderPickerEmpty: '(空)',
folderPickerNoFolders: '暂无工作区文件夹',
folderPickerSelected: '已选择:',
workspaceSet: '工作区已设置',
workspaceSetFailed: '设置工作区失败',
setModel: '设置模型',
setModelTitle: '设置会话模型',
modelSet: '模型已设置',
modelSetFailed: '设置模型失败',
other: '其他',
runFailed: '运行失败',
error: '错误',
tool: '工具',
arguments: '参数',
result: '结果',
workspaceChanges: '工作区变更',
changedFiles: '{files} 个文件已更改',
diffUnavailable: '无法显示 diff',
binaryFileDiffUnavailable: '二进制文件无法显示 diff',
truncated: '... (已截断)',
unchangedLines: '{count} 行未修改',
executionDuration: '执行时长',
thinkingLabel: '思考过程',
thinkingInProgress: '正在思考',
thinkingShow: '展开思考过程',
thinkingHide: '收起思考过程',
thinkingDuration: '已观察 {duration}',
thinkingChars: '{count} 字',
copyBubble: '复制消息',
copiedBubble: '已复制',
copyFailed: '复制失败',
playSpeech: '播放语音',
pauseSpeech: '暂停',
resumeSpeech: '继续',
stopSpeech: '停止',
speechNotSupported: '此浏览器不支持语音播放',
},
workflow: {
title: '工作流',
profile: '配置',
namePlaceholder: '工作流名称',
workspace: {
title: '选择工作区',
select: '选择工作区',
clear: '清空工作区',
},
actions: {
newWorkflow: '新建工作流',
addNode: '添加节点',
createWorkflowFirst: '请先创建工作流',
reset: '重置',
startExecution: '开始执行',
executionPending: '工作流执行功能待接入',
executionStarted: '工作流已开始执行',
executionCompleted: '工作流执行完成',
executionFailed: '工作流执行失败',
rerunDownstreamKeepNode: '保留此节点消息向下执行',
rerunDownstreamClearNode: '清除此节点消息向下运行',
rerunDownstreamStarted: '已开始向下重跑',
rerunFromNodeStarted: '已开始从此节点重跑',
rerunFailed: '工作流重跑失败',
deleteNode: '删除节点',
deleteEdge: '删除连接线',
},
batch: {
toggle: '批量选择',
selectAll: '全选',
confirmDelete: '确定删除选中的 {count} 个工作流?',
deleteSuccess: '已删除 {count} 个工作流',
deletePartial: '{failed} 个工作流删除失败',
deleteFailed: '批量删除失败',
},
validation: {
nodesRequired: '请至少添加一个节点',
nodeNameRequired: '节点 {node} 需要填写名称',
providerRequired: '节点 {node} 需要选择 Provider',
modelRequired: '节点 {node} 需要选择模型',
apiModeRequired: '节点 {node} 需要选择 API 模式',
inputRequired: '节点 {node} 需要填写输入内容',
invalidEdge: '连接线引用了不存在的节点',
invalidConnectionDirection: '连接线只能从右侧输出连接到左侧输入',
orphanNode: '节点 {node} 没有连接到流程',
disconnectedFlow: '流程不能拆成多条互不连接的链路',
cycle: '流程中存在循环连接,请调整后再保存',
},
node: {
title: '节点名称',
agent: 'Agent',
model: '模型',
apiMode: 'API 模式',
input: '输入',
approvalRequired: '完成后审批',
promptPlaceholder: '描述这个 Agent 要做什么...',
skillsPlaceholder: '技能,按 Enter 添加',
uploadImages: '上传图片',
},
status: {
idle: '空闲',
queued: '排队中',
running: '运行中',
pending_approval: '待审批',
completed: '已完成',
failed: '失败',
approval_rejected: '审批拒绝',
canceled: '已取消',
},
runs: {
title: '执行记录',
refresh: '刷新',
empty: '暂无执行记录',
startNodes: '{count} 个起始节点',
show: '显示执行记录',
hide: '隐藏执行记录',
nodeSessionTitle: '节点会话 - {node}',
noNodeSession: '该节点暂无会话记录',
loadNodeSessionFailed: '加载节点会话失败',
stop: '停止执行',
stopRequested: '已请求停止执行',
stopFailed: '停止执行失败',
delete: '删除记录',
deleteSuccess: '执行记录已删除',
},
inspector: {
selected: '选中节点',
none: '未选择节点',
},
stats: {
nodes: '节点',
edges: '连线',
},
agents: {
planner: '规划',
researcher: '研究',
builder: '执行',
reviewer: '审查',
},
models: {
default: '默认模型',
fast: '快速模型',
reasoning: '推理模型',
},
initialNodes: {
node1: '节点 1',
node2: '节点 2',
node3: '节点 3',
plan: '规划',
execute: '执行',
review: '审查',
},
initialPrompts: {
node1: '输入这个节点的内容。',
node2: '输入这个节点的内容。',
node3: '输入这个节点的内容。',
plan: '把需求拆成可执行步骤。',
execute: '执行实现步骤并产出结果。',
review: '审查产出质量并识别后续工作。',
},
newNodeTitle: '节点 {count}',
},
// 看板
kanban: {
title: '看板',
createTask: '新建任务',
noTasks: '暂无任务',
allStatuses: '全部状态',
allAssignees: '全部负责人',
board: {
create: '新建看板',
archive: '归档看板',
slugPlaceholder: '看板标识,例如 project-a',
namePlaceholder: '显示名称(可选)',
slugRequired: '看板标识不能为空',
created: '看板已创建',
archived: '看板已归档',
archiveConfirm: '确定归档当前看板?',
},
columns: {
triage: '待分拣',
todo: '待办',
scheduled: '已调度',
ready: '就绪',
running: '进行中',
blocked: '阻塞',
review: '待审查',
done: '已完成',
archived: '已归档',
},
form: {
title: '标题',
titlePlaceholder: '任务标题',
titleRequired: '标题不能为空',
body: '描述',
bodyPlaceholder: '任务描述(可选)',
assignee: '负责人',
selectAssignee: '选择负责人...',
priority: '优先级',
selectPriority: '选择优先级...',
tenant: '租户',
tenantPlaceholder: '租户(可选)',
workspace: '工作区',
workspaceScratch: '临时工作区',
workspaceDir: '使用目录',
workspaceWorktree: '使用 worktree',
workspacePath: '工作区路径',
workspacePathPlaceholder: '绝对路径(可选)',
branch: '分支',
branchPlaceholder: 'Worktree 分支',
skills: '技能',
skillsPlaceholder: '选择技能...',
triage: '创建到分拣状态',
goalMode: '目标模式',
maxRuntime: '最长运行时间',
maxRuntimePlaceholder: '例如 30m、2h',
maxRetries: '最大重试次数',
maxRetriesPlaceholder: '重试次数',
goalMaxTurns: '目标最大轮次',
goalMaxTurnsPlaceholder: '最大轮次',
},
card: {
assigneeTooltip: '负责人',
priority: {
low: '低',
medium: '中',
high: '高',
},
timeAgo: {
justNow: '刚刚',
minutes: '{count}分钟前',
hours: '{count}小时前',
days: '{count}天前',
},
},
detail: {
status: '状态',
assignee: '负责人',
priority: '优先级',
tenant: '租户',
createdAt: '创建时间',
startedAt: '开始时间',
completedAt: '完成时间',
comments: '评论',
events: '事件',
runs: '运行记录',
result: '完成结果',
sessions: '关联会话',
sessionMessages: '会话记录',
noSessions: '未找到关联会话。',
artifacts: '产出文件',
sources: '数据来源',
highlights: '关键信息',
noLog: '未找到该任务的日志。',
addComment: '添加评论',
commentPlaceholder: '输入任务评论...',
operations: '操作',
},
action: {
title: '操作',
complete: '完成',
completeSummary: '完成摘要(可选)',
block: '阻塞',
blockReason: '阻塞原因',
unblock: '解除阻塞',
assign: '分配',
assignTo: '分配给...',
dispatch: '调度',
recoveryReason: '恢复原因(可选)',
reclaim: '回收',
reassign: '重新分配',
specify: '细化',
loadLog: '加载日志',
loadDiagnostics: '加载诊断',
},
message: {
taskCreated: '任务已创建',
taskCompleted: '任务已完成',
taskBlocked: '任务已阻塞',
taskUnblocked: '任务已解除阻塞',
taskAssigned: '任务已分配',
dispatchNudged: '已触发调度器',
commentAdded: '评论已添加',
taskReclaimed: '任务已回收',
taskReassigned: '任务已重新分配',
taskSpecified: '任务已细化',
loadFailed: '加载任务失败',
},
stats: {
total: '总计',
tasks: '任务数',
},
},
// 定时任务
jobs: {
title: '定时任务',
createJob: '创建任务',
editJob: '编辑任务',
noJobs: '暂无定时任务,创建一个开始吧。',
sortBy: '排序',
sortByName: '名称排序',
sortByTime: '时间排序',
sortByNameHint: '点击按名称排序',
sortByTimeHint: '点击按时间排序',
sortAsc: '升序',
sortDesc: '降序',
name: '名称',
namePlaceholder: '任务名称',
schedule: '调度表达式 (Cron)',
schedulePlaceholder: '例如 0 9 * * *',
quickPresets: '快速预设',
selectPreset: '选择预设...',
presetEveryMinute: '每分钟',
presetEvery5Min: '每 5 分钟',
presetEveryHour: '每小时',
presetEveryDay: '每天 00:00',
presetEveryDay9: '每天 09:00',
presetEveryMonday: '每周一 09:00',
presetEveryMonth: '每月 1 日 09:00',
prompt: '提示词',
promptPlaceholder: '要执行的内容',
skills: '技能',
skillsPlaceholder: '选择技能...',
provider: '服务商',
model: '模型',
defaultProvider: '默认服务商',
defaultModel: '默认模型',
deliverTarget: '投递目标',
origin: '来源',
local: '本地',
repeatCount: '重复次数(可选)',
modelPlaceholder: '选择模型',
repeatPlaceholder: '留空表示无限重复',
jobCreated: '任务已创建',
jobUpdated: '任务已更新',
nameRequired: '名称为必填项',
scheduleRequired: '调度表达式为必填项',
loadFailed: '加载任务失败',
jobPaused: '任务已暂停',
jobResumed: '任务已恢复',
jobTriggered: '任务已触发',
modelUpdated: '模型已更新',
jobDeleted: '任务已删除',
status: {
running: '运行中',
paused: '已暂停',
disabled: '已禁用',
scheduled: '已调度',
},
info: {
model: '模型',
provider: '服务商',
schedule: '调度',
lastRun: '上次运行',
nextRun: '下次运行',
deliver: '投递',
repeat: '重复',
},
action: {
pause: '暂停',
pauseJob: '暂停任务',
resume: '恢复',
resumeJob: '恢复任务',
runNow: '立即运行',
triggerImmediately: '立即触发',
},
runHistory: {
title: '运行历史',
runs: '次运行',
noRuns: '暂无运行历史。',
},
sectionList: '任务列表',
},
// 技能
skills: {
title: '技能',
targetFilter: '运行时',
targets: {
hermes: 'Hermes',
claude: 'Claude',
codex: 'Codex',
},
searchPlaceholder: '搜索技能...',
noMatch: '没有匹配的技能',
noSkills: '暂无技能',
backTo: '返回',
attachedFiles: '附件文件',
loadFailed: '加载技能失败',
fileLoadFailed: '加载文件失败',
modified: '用户已修改',
archived: '已归档',
pinned: '已置顶',
pin: '置顶技能',
unpin: '取消置顶',
pinFailed: '更改置顶状态失败',
edit: '编辑',
saving: '保存中...',
editorLabel: '技能编辑器',
saveSuccess: '技能已保存',
saveFailed: '保存技能失败',
toggleFailed: '切换技能状态失败',
source: {
builtin: '内置',
hub: 'Hub 安装',
local: '本地安装',
external: '外部目录',
},
delete: '删除',
deleteConfirm: '确定要删除技能 "{name}" 吗?此操作不可撤销。',
deleteSuccess: '已删除技能',
deleteFailed: '删除失败',
import: '导入',
importTitle: '导入技能',
importModeZip: 'Zip 包',
importModeFolder: '文件夹',
importHintZip: '上传 .zip 包,应包含含 SKILL.md 的目录',
importHintFolder: '选择本地技能文件夹(需含 SKILL.md)',
importTargetCategory: '目标分类(可选)',
importTargetCategoryPlaceholder: '留空则平铺到 misc',
importSelectFile: '选择 .zip 文件',
importSelectFolder: '选择文件夹',
importInvalidFile: '仅支持 .zip 包',
importFileCount: '个文件',
importNoSelection: '请先选择文件或文件夹',
importSuccess: '已导入技能',
importFailed: '导入失败',
path: {
local: '本地',
external: '外部',
},
externalDirs: {
manage: '外部目录',
title: '外部目录管理',
hint: '在此管理 config.skills.external_dirs。支持 ~ 和 $VAR;不存在的路径会被标灰。',
add: '添加外部目录',
placeholder: '/path/to/skills 或 ~/my-skills',
empty: '暂无外部目录',
missing: '目录不存在',
notDir: '不是目录',
saveSuccess: '外部目录已保存',
saveFailed: '保存失败',
loadFailed: '加载外部目录失败',
removeRow: '移除',
},
pathCopied: '路径已复制',
pathCopyFailed: '复制路径失败',
reloadHint: '活跃会话请执行 /reload-skills;新会话会自动加载。',
writeApprovalButton: '待审核 {count}',
writeApprovalTitle: '待审核写入',
writeApprovalDescription: '批准或拒绝 Hermes Agent 暂存的记忆和技能写入。',
writeApprovalRefresh: '刷新',
writeApprovalEmpty: '暂无待审核写入。',
writeApprovalUnsupported: '当前 Hermes Agent 版本不支持写入审核。请升级 Hermes Agent 后再使用。',
writeApprovalMemory: '记忆',
writeApprovalSkills: '技能',
writeApprovalViewDiff: '查看',
writeApprovalHideDiff: '收起',
writeApprovalNoDiff: '没有可显示的差异。',
writeApprovalLoadFailed: '待审核写入加载失败',
writeApprovalDiffFailed: '写入详情加载失败',
writeApprovalActionFailed: '待审核写入处理失败',
writeApprovalApproved: '已批准写入',
writeApprovalRejected: '已拒绝写入',
writeApprovalApprove: '批准',
writeApprovalReject: '拒绝',
writeApprovalPendingMemoryWrite: '待审核记忆写入',
writeApprovalCurrentFile: '当前 {file}',
writeApprovalProposedFile: '批准后 {file}',
writeApprovalDiffSection: '差异',
writeApprovalPatchOldStringMissing: '当前文件 {file} 中没有找到这次补丁的 old_string,批准后的文件内容不会变化。',
writeApprovalRequestedOldString: '本次请求匹配的 old_string',
writeApprovalCurrentReadFailed: '当前文件 {file} 无法按 UTF-8 文本读取。',
writeApprovalDeleteSkill: '这次审批会删除技能 {skill}。',
writeApprovalRemoveFile: '这次审批会从技能 {skill} 中移除文件 {file}。',
},
// 插件
plugins: {
title: '插件',
refresh: '刷新',
notice: '展示可发现的 Hermes 插件 manifest。发现元数据读取不会加载插件代码。可在此启用或禁用 standalone 用户插件,新 Hermes 会话生效。',
loadFailed: '加载插件失败',
updateFailed: '更新插件失败',
enableSuccess: '已启用 {name}',
disableSuccess: '已禁用 {name}',
commandCopied: '命令已复制',
searchPlaceholder: '搜索 key、名称、描述、路径...',
source: '来源',
kind: '类型',
statusTitle: '状态',
configStatus: '配置:{status}',
notAvailable: '无',
copyCommand: '复制命令',
managedElsewhere: '由其他位置管理',
noMatch: '没有匹配当前筛选条件的插件',
enabled: '已启用',
disabled: '已禁用',
summary: {
total: '总数',
active: '已启用 / 自动',
inactive: '未启用',
disabled: '已禁用',
providerManaged: 'Provider 管理',
},
status: {
enabled: '已启用',
'auto-active': '自动启用',
inactive: '未启用',
disabled: '已禁用',
'provider-managed': 'Provider 管理',
},
statusLabel: {
enabled: '配置启用',
'auto-active': '自动启用',
inactive: '未启用',
disabled: '已禁用',
'provider-managed': 'Provider 管理',
},
configStatuses: {
enabled: '已启用',
disabled: '已禁用',
'not-enabled': '未启用',
auto: '自动',
'provider-managed': 'Provider 管理',
},
table: {
plugin: '插件',
status: '状态',
source: '来源',
kind: '类型',
capabilities: '能力',
path: '路径 / 入口',
manage: '管理',
},
capabilities: {
tools: '{count} 个工具',
hooks: '{count} 个 hook',
env: '{count} 个环境变量',
},
metadata: {
agentRoot: 'Agent 根目录',
python: 'Python',
scanCwd: '扫描 cwd',
projectPlugins: '项目插件',
},
},
// 记忆
memory: {
title: '记忆',
refresh: '刷新',
loadFailed: '加载记忆失败',
editTitle: '修改 · {name}',
writeTo: '写入文件',
charCount: '{count} 字符',
myNotes: '我的笔记',
noNotes: '暂无笔记。',
notesPlaceholder: '输入笔记内容...',
userProfile: '用户画像',
noProfile: '暂无画像。',
profilePlaceholder: '输入用户画像...',
soul: '灵魂',
noSoul: '暂无灵魂配置。',
soulPlaceholder: '输入灵魂配置...',
},
// 模型
models: {
fetchUpstreamModels: '从上游获取模型',
upstreamModelsFetched: '已从上游获取 {count} 个模型',
upstreamModelsFailed: '从上游获取模型失败',
editProviderFor: '修改 {name}',
keepExistingKey: '留空保留现有 Key',
invalidBaseUrl: '请输入有效的 HTTP 或 HTTPS Base URL',
providerUpdated: 'Provider 配置已更新',
providerUpdateFailed: '修改 Provider 配置失败',
title: '模型',
searchPlaceholder: '搜索模型...',
noResults: '无结果',
noModels: '无模型',
addProvider: '添加 Provider',
refreshModelCache: '刷新模型缓存',
refreshModelCacheLoading: '正在刷新模型缓存...',
refreshModelCacheSuccess: '模型缓存已刷新',
refreshModelCacheFailed: '刷新模型缓存失败',
providerType: 'Provider 类型',
preset: '预设',
custom: '自定义',
selectProvider: '选择 Provider',
chooseProvider: '选择一个 provider...',
getApiKey: '获取 API Key',
name: '名称',
autoGeneratedName: '根据 Base URL 自动生成',
baseUrl: 'Base URL',
region: '区域',
regionIntl: '国际版',
regionCn: '中国大陆',
baseUrlPlaceholder: '例如 https://api.example.com/v1',
apiKey: 'API Key',
apiKeyPlaceholder: 'sk-...',
defaultModel: '默认模型',
selectOrInput: '选择或输入模型名称...',
selectModel: '选择模型...',
providerAdded: 'Provider 已添加',
providerDeleted: 'Provider 已删除',
providerCredentialsCleared: 'Provider 凭据已清除',
clearProviderCredentials: '清除凭据',
clearCredentialsConfirm: '确定清除 "{name}" 的已保存凭据吗?这是内置 Provider,条目会继续显示,重新配置凭据后仍可使用。',
disableProvider: '禁用 Provider',
disableProviderConfirm: '确定禁用内置 Provider "{name}" 吗?该 Provider 仍是内置项,之后可以重新启用。',
providerDisabled: 'Provider 已禁用',
defaultProviderUpdated: '默认 Provider 已更新',
defaultProviderUpdateFailed: '更新默认 Provider 失败',
defaultModelUpdated: '默认模型已更新',
defaultModelUpdateFailed: '更新默认模型失败',
deleteProvider: '删除 Provider',
deleteConfirm: '确定删除 "{name}" 吗?',
codexLoginTitle: 'OpenAI Codex 登录',
codexWaiting: '在授权页面输入以下代码完成登录:',
codexCopyCode: '代码已复制',
codexOpenLink: '打开授权页面',
codexApproved: '登录成功',
codexExpired: '授权已过期,请重试。',
nousLoginTitle: 'Nous Portal 登录',
nousWaiting: '在授权页面输入此代码完成登录:',
nousCopyCode: '代码已复制',
nousOpenLink: '打开授权页面',
nousApproved: '登录成功',
nousDenied: '授权被拒绝,请重试。',
nousExpired: '授权已过期,请重试。',
copilotLoginTitle: 'GitHub Copilot 登录',
copilotWaiting: '请前往 GitHub 输入下方设备代码完成授权。授权完成后窗口会自动关闭。',
copilotCopyCode: '代码已复制',
copilotOpenLink: '打开 GitHub 授权页',
copilotApproved: '登录成功!',
copilotDenied: '授权被拒绝。',
copilotExpired: '授权链接已过期,请重试。',
copilotAddDetectedTitle: '检测到 GitHub Copilot',
copilotAddDetected: '已在本机检测到 GitHub Copilot OAuth 凭证,点击「添加」即可在 Hermes 中启用 Copilot。',
copilotAddSourceEnv: '来源:~/.hermes/.env(COPILOT_GITHUB_TOKEN)',
copilotAddSourceGhCli: '来源:gh CLI(gh auth token)',
copilotAddSourceAppsJson: '来源:VS Code Copilot 插件(apps.json)',
copilotDeleteHintEnv: '此操作会清除 ~/.hermes/.env 中的 COPILOT_GITHUB_TOKEN,不影响其他工具。',
copilotDeleteHintGhCli: 'Copilot 将从 Hermes 列表移除。不会影响 gh CLI —— `gh auth status` 仍显示已登录。',
copilotDeleteHintAppsJson: 'Copilot 将从 Hermes 列表移除。不会影响 VS Code Copilot 插件的登录。',
xaiLoginTitle: 'xAI Grok OAuth 登录',
xaiWaiting: '请在打开的 xAI 页面完成授权。授权完成后窗口会自动关闭。',
xaiOpenLink: '打开 xAI 授权页',
xaiCopyLink: '复制授权链接',
xaiApproved: '登录成功!',
xaiExpired: '授权链接已过期,请重试。',
anthropicLoginTitle: 'Claude 授权登录',
anthropicWaiting: '请在 Claude 授权页完成授权,然后把返回的授权代码粘贴到这里。',
anthropicOpenLink: '打开 Claude 授权页',
anthropicCopyLink: '复制授权链接',
anthropicCodePlaceholder: '粘贴授权代码...',
anthropicSubmitCode: '提交代码',
anthropicApproved: '登录成功!',
anthropicExpired: '授权已过期,请重试。',
geminiLoginTitle: 'Google Gemini OAuth 登录',
geminiWaiting: '请在打开的 Google 页面完成授权。授权完成后窗口会自动关闭。',
geminiOpenLink: '打开 Google 授权页',
geminiCopyLink: '复制授权链接',
geminiApproved: '登录成功!',
geminiExpired: '授权链接已过期,请重试。',
customBadge: '自定义',
previewBadge: '预览',
disabledBadge: '不可用',
disabledTooltip: "此模型当前账号不可用",
customModelPlaceholder: '未列出的模型 ID',
customModelHint: '仅用于 provider 支持但未返回的模型;不是重命名。按回车加载。',
removeCustomModel: '移除这个未列出的模型',
refresh: '刷新模型列表(重新加载 config.yaml)',
noProviders: '暂无 Provider,添加一个开始吧。',
models: '模型列表',
count: '个模型',
more: '个更多',
aliasEdit: '重命名',
aliasTitle: '模型显示名',
aliasTitleFor: '{model} 的显示名',
aliasPlaceholder: '留空则使用原始模型 ID',
aliasHint: '仅修改 Web UI 显示名,发送给 Hermes 的仍是原始模型 ID。',
aliasCanonical: '原始 ID:{model}',
aliasUseOriginal: '恢复原始 ID',
aliasManage: '显示名',
aliasManageFor: '{provider} 的显示名',
aliasSaveFailed: '保存显示名失败',
manageVisibleModels: '管理可见模型',
manageVisibleModelsFor: '管理 {name} 可见模型',
visibilityHint: '仅影响 Web UI 的模型选择器和模型页展示,不会改写 Hermes CLI 的 provider/model 配置。实际调用仍使用原始模型 ID。',
visibilitySelectOne: '至少保留一个可见模型',
visibilitySaved: '可见模型已保存',
visibilitySaveFailed: '保存可见模型失败',
showAllModels: '显示全部模型',
clearVisibleModels: '取消全选',
generalTitle: '通用模型',
auxiliaryTitle: '辅助模型',
auxiliarySubtitle: '为压缩、视觉、审批、MCP 和后台维护等辅助任务单独指定模型。',
combinationTitle: '组合模型',
combinationSubtitle: '配置 MoA 预设:多个参考模型先给出视角,再由一个汇总模型负责最终回复和工具调用。',
combinationPreset: '预设',
combinationName: '名称',
combinationAddModel: '添加组合模型',
combinationEditModel: '编辑组合模型',
combinationNewPreset: '新预设',
combinationPresetPlaceholder: '例如 review',
combinationAddPreset: '添加预设',
combinationSetDefault: '设为默认',
combinationEnabled: '启用参考模型',
combinationReferenceModels: '参考模型',
combinationReferenceModel: '参考模型',
combinationAddReference: '添加参考模型',
combinationAggregator: '汇总模型',
combinationReferenceTemperature: '参考温度',
combinationAggregatorTemperature: '汇总温度',
combinationMaxTokens: '最大 Token',
combinationNotSet: '未设置',
combinationSaved: '组合模型已保存',
combinationLoadFailed: '加载组合模型失败',
combinationSaveFailed: '保存组合模型失败',
combinationPresetExists: '预设已存在',
combinationNameRequired: '请输入组合模型名称',
combinationNameInvalid: '名称只能包含字母、数字、下划线、短横线和点',
combinationReferenceRequired: '至少添加一个参考模型',
combinationAggregatorRequired: '请选择汇总模型',
auxiliaryRefresh: '刷新',
auxiliaryTask: '任务',
auxiliaryTimeout: '超时',
auxiliaryDownloadTimeout: '下载超时',
auxiliaryActions: '操作',
auxiliaryDefault: '默认',
auxiliaryCustomEndpoint: '自定义端点',
auxiliaryProviderAuto: '自动',
auxiliaryProviderMain: '主模型',
auxiliaryProviderPlaceholder: 'auto、main 或 provider key',
auxiliaryDownloadShort: '下载',
auxiliaryExtraBody: 'Extra body JSON',
auxiliaryClear: '清除',
auxiliarySaved: '辅助模型已保存',
auxiliaryLoadFailed: '加载辅助模型失败',
auxiliarySaveFailed: '保存辅助模型失败',
auxiliaryInvalidExtraBody: 'Extra body 必须是 JSON 对象',
auxiliaryTaskCompression: '压缩',
auxiliaryTaskVision: '视觉',
auxiliaryTaskWebExtract: '网页提取',
auxiliaryTaskSkillsHub: '技能中心',
auxiliaryTaskApproval: '审批',
auxiliaryTaskMcp: 'MCP',
auxiliaryTaskTitleGeneration: '标题生成',
auxiliaryTaskTriageSpecifier: 'Triage 扩写',
auxiliaryTaskKanbanDecomposer: '看板拆解',
auxiliaryTaskProfileDescriber: 'Profile 描述',
auxiliaryTaskCurator: '策展',
auxiliaryTaskSessionSearch: '会话搜索',
auxiliaryTaskFlushMemories: '写入记忆',
currentDefault: '当前默认',
defaultShort: '默认',
setDefaultProvider: '设为默认 Provider',
setDefault: '设为默认',
builtIn: '内置',
customType: '自定义',
provider: 'Provider',
contextLength: '上下文长度',
contextLengthPlaceholder: '例如 256000(可选)',
apiMode: 'API 模式',
local: '本地 ({host})',
selectProviderRequired: '请选择 Provider',
baseUrlRequired: 'Base URL 为必填项',
apiKeyRequired: 'API Key 为必填项',
modelRequired: '默认模型为必填项',
enterBaseUrl: '请先输入 Base URL',
unexpectedFormat: '响应格式异常',
foundModels: '找到 {count} 个模型',
fetchFailed: '获取模型失败',
},
// 配置
profiles: {
title: '配置',
create: '创建配置',
import: '导入',
export: '导出',
rename: '重命名',
delete: '删除',
editConfig: '编辑配置文件',
switchTo: '切换 Hermes Profile',
switchConfirm: '将执行 `hermes profile use {name}` 并切换 Hermes CLI 的 active profile,是否继续?',
switchSuccess: 'Hermes active profile 已切换为 "{name}"',
switchFailed: '切换 Hermes Profile 失败,网关可能需要手动重启',
createSuccess: '配置 "{name}" 已创建',
createFailed: '创建配置失败',
renameSuccess: '配置已重命名',
renameFailed: '重命名配置失败',
deleteConfirm: '确定删除配置 "{name}" 吗?',
deleteSuccess: '配置已删除',
deleteFailed: '删除配置失败',
exportSuccess: '配置已导出',
exportFailed: '导出配置失败',
importSuccess: '配置已导入',
importFailed: '导入配置失败',
importSelectFile: '选择归档文件',
importInvalidFile: '请选择有效的归档文件 (.tar.gz, .tgz, .gz, .zip)',
name: '配置名称',
namePlaceholder: '仅限小写字母、数字、连字符',
nameValidation: '配置名称只能包含小写字母、数字、下划线和连字符',
newName: '新名称',
newNamePlaceholder: '小写字母、数字、连字符',
cloneFromCurrent: '从当前配置克隆',
cloneCleanupNotice: '克隆时会自动跳过独占型平台凭据(Weixin / Telegram / Slack 等),避免与源配置冲突',
cloneStrippedCredentials: '已清理 {count} 项独占凭据:{list}',
cloneDisabledPlatforms: '已禁用 {count} 个平台:{list}',
cloneStrippedConfigCredentials: '已清理 config.yaml 中 {count} 项内嵌凭据:{list}',
archivePath: '归档路径',
archivePathPlaceholder: '归档文件的服务器路径',
importName: '配置名称(可选)',
importNamePlaceholder: '留空则使用归档名称',
active: '活跃',
model: '模型',
gateway: '网关',
alias: '别名',
provider: 'Provider',
path: '路径',
skills: '技能',
hasEnv: '有 .env',
hasSoulMd: '有 soul.md',
noProfiles: '暂无配置,创建一个开始吧。',
avatar: {
title: '自定义头像',
customize: '头像',
upload: '上传图片',
random: '随机生成',
reset: '恢复默认',
hint: '支持 PNG、JPEG、WebP,最大 1MB',
invalidType: '请选择 PNG、JPEG 或 WebP 图片',
tooLarge: '头像图片不能超过 1MB',
saveSuccess: '头像已保存',
saveFailed: '保存头像失败',
resetSuccess: '已恢复默认头像',
resetFailed: '恢复默认头像失败',
},
runtime: {
activeProfile: '当前:{name}',
bridgeWorker: '桥接状态',
gateway: '网关',
active: '活跃',
activeTag: '当前',
idle: '空闲',
checking: '检测中',
running: '运行中',
stopped: '已停止',
restartGateway: '重启网关',
restartProfile: '重启配置',
switchProfile: '切换前端配置',
gatewayRestarted: '网关已重启:{name}',
gatewayRestartFailed: '重启网关失败',
profileRestarted: '配置已重启:{name}',
profileRestartFailed: '重启配置失败',
restartAllGateways: '重启所有网关',
restartAllProfiles: '重启所有配置',
allGatewaysRestarted: '所有网关已重启',
allGatewaysRestartFailed: '部分网关重启失败:{names}',
allProfilesRestarted: '所有配置已重启',
allProfilesRestartFailed: '部分配置重启失败:{names}',
},
},
// 日志
logs: {
title: '日志',
all: '全部',
searchPlaceholder: '搜索...',
refresh: '刷新',
noEntries: '暂无日志',
total: '总数',
error: 'ERROR',
warning: 'WARNING',
info: 'INFO',
stream: '日志流',
window: '当前窗口',
},
// 设置
settings: {
title: '设置',
paneUnit: '个面板',
saved: '已保存',
saveFailed: '保存失败',
tabs: {
display: '显示',
account: '当前账户',
users: '账户管理',
agent: '网关',
proxy: '代理',
memory: '记忆',
compression: '上下文压缩',
session: '会话',
privacy: '隐私',
apiServer: 'API 服务器',
models: '模型',
voice: '语音',
},
models: {
apiKey: 'API Key',
apiKeyPlaceholder: '输入 API Key',
save: '保存',
saved: '已保存',
saveFailed: '保存失败',
noProviders: '暂无已配置的模型',
},
display: {
streaming: '流式响应',
streamingHint: '实时显示 AI 回复',
compact: '紧凑模式',
compactHint: '减少消息间距',
showReasoning: '显示推理过程',
showReasoningHint: '展示模型思考过程',
showCost: '显示费用',
showCostHint: '在回复中显示 token 使用量',
inlineDiffs: '内联差异',
inlineDiffsHint: '代码变更以内联方式显示',
bellOnComplete: '完成提示音',
bellOnCompleteHint: 'AI 回复完成时播放提示音',
notifyOnComplete: '完成弹窗通知',
notifyOnCompleteHint: 'AI 回复完成时显示系统通知',
notifyOnCompleteMacHint: 'macOS 需要在系统设置里允许浏览器通知。',
notifyOnCompleteDenied: '通知权限已被拒绝',
notifyOnCompleteInsecure: '浏览器通知需要 HTTPS 或 localhost',
notifyOnCompleteUnsupported: '当前浏览器不支持通知',
notifyOnCompleteTest: '通知已开启。',
notifyOnCompleteTestButton: '测试',
notifyOnCompleteTesting: '正在发送测试通知...',
notifyOnCompleteTestSent: '测试通知已发送',
notifyOnCompleteTestFailed: '测试通知发送失败',
busyInputMode: '忙碌输入模式',
busyInputModeHint: 'AI 处理中仍可输入',
chatInputHeight: '聊天输入框高度',
chatInputHeightHint: '桌面端聊天输入框默认高度(像素)。移动端保持自动高度。'
},
agent: {
maxTurns: '最大轮次',
maxTurnsHint: '单次对话最大交互轮数',
gatewayTimeout: '网关超时',
gatewayTimeoutHint: '单次请求超时时间(秒)',
restartDrainTimeout: '重启排空超时',
restartDrainTimeoutHint: '重启前排空请求的超时时间(秒)',
toolEnforcement: '工具执行策略',
toolEnforcementHint: '控制工具调用的执行模式',
auto: '自动',
always: '始终',
never: '从不',
},
gatewayAutoStart: {
title: 'Gateway 自动启动',
description: '控制 Web UI 启动时自动拉起哪些本地 Hermes profile gateway。该项写入 Web UI 配置,不写入 profile config.yaml。',
enabled: '自动启动 gateway',
enabledHint: '关闭后,启动期不会自动拉起任何 profile gateway。',
management: '统一 gateway',
managementHint: '需要 Hermes Agent 0.17.0 及以上版本。开启后会写入 multiplex_profiles,让 default gateway 服务所有 profiles;其他 profile 不能单独配置飞书、微信、QQBot 等通讯工具入口。关闭后会移除该配置。',
managementAuto: '自动',
managementPerProfile: '每个 profile 一个 gateway',
managementUnified: '统一 default gateway',
mode: 'Profile 策略',
modeHint: '启动所有发现到的 profiles,或只启动白名单内的 profiles。',
modeAll: '所有发现到的 profiles',
modeInclude: '仅白名单 profiles',
include: '白名单 profiles',
includeHint: '逗号分隔 profile 名。白名单模式下留空表示不自动启动任何 profile。',
exclude: '排除 profiles',
excludeHint: '逗号分隔 profile 名;会在白名单/全量策略之后再排除。',
profileListPlaceholder: 'default, reviewer',
},
proxy: {
title: 'Gateway 代理',
description: '为当前 profile gateway 设置代理环境变量。保存后会重启 gateway,让通讯平台使用新的网络配置。',
httpsProxy: 'HTTPS_PROXY',
httpsProxyHint: 'HTTPS 请求代理,通常优先配置这一项。',
httpProxy: 'HTTP_PROXY',
httpProxyHint: '普通 HTTP 请求代理。',
allProxy: 'ALL_PROXY',
allProxyHint: '未设置协议专用代理时使用的兜底代理。',
noProxy: 'NO_PROXY',
noProxyHint: '不走代理的主机或域名,使用逗号分隔。',
save: '保存代理设置',
},
memory: {
enabled: '启用记忆',
enabledHint: '允许 AI 记住对话上下文',
userProfile: '用户画像',
userProfileHint: '允许 AI 记住用户偏好信息',
charLimit: '记忆字符上限',
charLimitHint: 'MEMORY.md 最大字符数',
userCharLimit: '用户画像字符上限',
userCharLimitHint: 'USER.md 最大字符数',
},
compression: {
enabled: '启用压缩',
enabledHint: '长对话接近模型上下文上限前自动压缩历史',
threshold: '压缩阈值',
thresholdHint: '预计 token 超过上下文比例时开始压缩',
targetRatio: '目标比例',
targetRatioHint: '压缩后历史保留到上下文的目标比例',
protectLastN: '保护最近消息',
protectLastNHint: '最近多少条消息不参与压缩',
protectFirstN: '保护开头消息',
protectFirstNHint: '最早多少条消息不参与压缩',
},
session: {
mode: '重置模式',
modeHint: '会话重置的触发条件',
modeBoth: '空闲 + 定时',
modeIdle: '仅空闲',
modeDaily: '仅定时',
modeNone: '永不(仅手动)',
idleMinutes: '空闲超时',
idleMinutesHint: '无操作后自动重置的等待时间(分钟)',
atHour: '定时重置时间',
humanOnly: '仅显示人类会话',
humanOnlyHint: '默认隐藏子代理和会话监看噪音',
liveMonitorHumanOnly: '实时监看:仅显示人类会话',
liveMonitorHumanOnlyHint: '在实时监看中默认隐藏子代理和会话监看噪音',
atHourHint: '每天在指定小时重置会话',
requireAuth: '会话授权',
requireAuthHint: '修改会话操作是否授权',
memoryWriteApproval: '记忆写入审核',
memoryWriteApprovalHint: 'Hermes Agent 写入 MEMORY.md / USER.md 前先进入待审核队列。',
skillsWriteApproval: '技能写入审核',
skillsWriteApprovalHint: 'Hermes Agent 创建或修改技能前先进入待审核队列。',
writeApprovalTitle: '待审核写入',
writeApprovalDescription: '批准或拒绝 Hermes Agent 暂存的记忆和技能写入。',
writeApprovalRefresh: '刷新',
writeApprovalEmpty: '暂无待审核写入。',
writeApprovalMemory: '记忆',
writeApprovalSkills: '技能',
writeApprovalViewDiff: '查看',
writeApprovalHideDiff: '收起',
writeApprovalNoDiff: '没有可显示的差异。',
writeApprovalLoadFailed: '待审核写入加载失败',
writeApprovalDiffFailed: '写入详情加载失败',
writeApprovalActionFailed: '待审核写入处理失败',
writeApprovalApproved: '已批准写入',
writeApprovalRejected: '已拒绝写入',
writeApprovalApprove: '批准',
writeApprovalReject: '拒绝',
writeApprovalPendingMemoryWrite: '待审核记忆写入',
writeApprovalCurrentFile: '当前 {file}',
writeApprovalProposedFile: '批准后 {file}',
writeApprovalDiffSection: '差异',
writeApprovalPatchOldStringMissing: '当前文件 {file} 中没有找到这次补丁的 old_string,批准后的文件内容不会变化。',
writeApprovalRequestedOldString: '本次请求匹配的 old_string',
writeApprovalCurrentReadFailed: '当前文件 {file} 无法按 UTF-8 文本读取。',
writeApprovalDeleteSkill: '这次审批会删除技能 {skill}。',
writeApprovalRemoveFile: '这次审批会从技能 {skill} 中移除文件 {file}。',
},
privacy: {
redactPii: '脱敏 PII',
redactPiiHint: '自动检测并隐藏敏感信息(密码、密钥等)',
},
apiServer: {
enable: '启用',
enableHint: '启用 API 服务器',
host: '主机',
hostHint: '监听地址',
port: '端口',
portHint: '监听端口',
key: '密钥',
keyHint: 'API 访问密钥',
cors: 'CORS 来源',
corsHint: '允许的跨域来源',
},
lockedIps: {
title: '锁定 IP 管理',
count: '{count} 个 IP 被锁定',
empty: '暂无锁定 IP',
unlock: '解锁',
unlockAll: '全部解锁',
unlockAllConfirm: '确认解锁所有锁定的 IP?',
unlocked: 'IP 已解锁',
allUnlocked: '已解锁 {count} 个 IP',
type: {
password: '密码',
token: 'API Token',
pairing: '设备配对',
},
},
userAvatar: {
title: '用户头像',
upload: '上传图片',
random: '随机生成',
reset: '恢复默认',
hint: '支持 PNG、JPEG、WebP,最大 1MB,会自动压缩到 500KB 以下',
invalidType: '请选择 PNG、JPEG 或 WebP 图片',
tooLarge: '头像图片不能超过 1MB',
saveSuccess: '头像已保存',
saveFailed: '保存头像失败',
resetSuccess: '已恢复默认头像',
resetFailed: '恢复默认头像失败',
},
voice: {
activeTtsApi: '当前 TTS API',
activeSttApi: '当前 STT API',
ttsProvidersTitle: 'TTS 提供方',
ttsProvidersDescription: '管理用于播放助手回复和语音预览的文字转语音集成。',
sttProvidersTitle: 'STT 提供方',
sttProvidersDescription: '管理用于麦克风和语音输入流程的语音转文字集成。',
noneSelected: '未选择',
keyStored: '已存储',
keyMissing: '未配置',
customApi: 'API',
localBuiltin: '本地内置',
ttsCardHint: '语音合成提供方',
sttCardHint: '语音转写提供方',
setActive: '设为当前',
testAction: '测试',
connect: '连接',
presetEdgeTtsLabel: 'Edge TTS',
presetEdgeTtsDescription: 'Microsoft Edge 提供的免费高质量云端音色。',
presetOpenaiTtsLabel: 'OpenAI TTS',
presetMimoTtsLabel: 'MiMo TTS',
presetDoubaoTtsLabel: 'Volcengine Doubao TTS',
presetCustomTtsLabel: '自定义 TTS',
presetBrowserSttLabel: '浏览器 STT',
presetBrowserSttDescription: '浏览器原生语音识别 API。',
presetOpenaiWhisperLabel: 'OpenAI Whisper',
presetGroqSttLabel: 'Groq STT',
presetDoubaoSttLabel: 'Volcengine Doubao STT',
presetCustomSttLabel: '自定义 STT',
apiCompatibility: 'API 兼容性',
openaiCompatible: 'OpenAI 兼容',
manualCustomEndpoint: '手动自定义端点',
connectionStep: '连接',
discoveryManualHint: '已选择手动自定义端点,无法自动发现模型;请手动输入模型名称。',
discoveryCredentialHint: '输入 Base URL 和 API key 后,点击连接获取可用模型。',
discoveryNoAutoProbeHint: '输入过程中不会发送请求;凭据准备好后点击连接。',
apiKeyConnectPlaceholder: '粘贴 API key 后连接;已存储的 key 不会显示',
connectFetchModels: '连接并获取模型',
modelRecommendedSuffix: '推荐',
modelConnectManualHint: '连接后自动填充,或手动输入。',
modelRequiredConnectManual: '模型必填。请连接后自动填充,或手动输入。',
apiKeyRequired: 'API key 必填。',
apiKeyRequiredForDiscovery: '获取模型需要 API key。',
baseUrlRequired: 'Base URL 必填。',
baseUrlHttpsRequired: '请使用 http:// 或 https:// 协议。',
baseUrlInvalid: '请输入有效的 Base URL,包含 https://。',
discoveryFailedManualFallback: '无法获取模型。你仍可以手动输入模型名称。',
completeRequiredProviderFields: '保存前请补全必填 provider 字段。',
fetchingModels: '正在获取模型……',
recommendedModel: '推荐:{model}。',
useRecommendedModel: '使用此模型。',
modelsDiscovered: '已发现 {count} 个模型。字段为空时会自动选择推荐模型。',
remove: '移除',
testSuccess: '测试完成',
testTextRequired: '测试前请输入文本。',
keyMissingForTest: '测试此提供方前请先添加 API key。',
testing: '测试中……',
transcribing: '转写中……',
browserSttTestHint: '浏览器 STT 请在聊天输入框麦克风中测试。',
sttEmptyAudio: '未录到音频,请重试。',
sttTestSuccess: '转写完成',
sttRecordingHint: '正在录音……点击停止后转写。',
keepStoredKeyPlaceholder: '留空则保留已存储 key',
apiKeyPlaceholder: '输入 API key',
lastTest: '最近测试',
notTested: '—',
recording: '录音中',
testFailedShort: '失败',
testFailedSummary: '测试失败,请检查 provider 设置后重试。',
showDetails: '显示详情',
hideDetails: '隐藏详情',
moreActions: '更多',
moreActionsFor: '{provider} 的更多操作',
addTtsApi: '添加 TTS API',
addSttApi: '添加 STT API',
active: '当前',
builtin: '内置',
connected: '已连接',
disconnected: '未连接',
source: '来源',
model: '模型',
voice: '音色',
doubaoVoiceHint: '选择 Seed TTS 2.0 音色;资源字段会自动更新。',
apiKey: 'API key',
confirmDeleteSecret: '确认删除这个语音 API 已存储的 API key?',
ttsTitle: '文字转语音',
ttsSaved: 'TTS 设置已保存到服务端',
ttsSaveFailed: '保存 TTS 设置失败',
ttsTestSaved: '试听成功,TTS 设置已保存到服务端',
ttsTestSaving: '正在保存 TTS 配置后再试听…',
ttsMissingBaseUrl: '试听前需要填写基础 URL。请输入服务商 endpoint 后再测试。',
ttsMissingApiKey: '试听前需要 API key。请粘贴 key,或先保存服务端已存 key。',
ttsCleared: '已清除服务端 TTS 密钥',
ttsClearFailed: '清除服务端 TTS 密钥失败',
storedBaseUrlsTitle: '已存 Base URLs',
storedBaseUrlsHint: '这里集中管理已保存的语音 provider endpoint。上方输入框只清除当前值,删除已存 URL 在这里操作。',
storedBaseUrlsEmpty: '服务端还没有保存自定义语音 Base URL。',
storedBaseUrlDelete: '删除 URL',
storedApiKeysTitle: '已存 API keys',
storedApiKeysHint: '这里列出服务端已保存的语音 API key,只显示用途和来源,不显示完整 key。',
storedApiKeysEmpty: '服务端还没有保存语音 API key。',
storedKeyKindTts: 'TTS',
storedKeyKindStt: 'STT',
storedApiKeyMasked: '[已存储]',
storedApiKeyDelete: '删除 key',
baseUrlPresetClear: '清除 URL',
baseUrlPresetCleared: '已清除当前 Base URL。',
baseUrlPresetDelete: '删除 URL',
baseUrlPresetDeleted: '已从保存列表删除基础 URL。',
baseUrlPresetDeleteFailed: '删除已保存基础 URL 失败。',
ttsPendingSecret: '将保存新密钥',
ttsStoredSecret: '服务端已有储密钥:{value}',
ttsClearKey: '清除已存储密钥',
sttTitle: '语音转文字',
sttProvider: 'STT 提供方',
sttProviderHint: '选择语音输入的转写方式',
sttProviderBrowser: '浏览器',
sttProviderOpenai: 'OpenAI 兼容',
sttProviderCustom: '自定义',
sttBrowserHint: '可用时使用浏览器内置语音识别。',
sttApiKey: 'API Key',
sttApiKeyHint: '仅在服务端保存,用于需要鉴权的 STT 提供方。',
sttStoredSecret: '服务端已存储密钥:{value}',
sttPendingSecret: '服务端已存储密钥:保存后更新',
sttClearKey: '清除已存储密钥',
sttModel: '模型',
sttModelHint: '用于语音转文字的模型。',
sttLanguage: '语言',
sttLanguageHint: '可选语言提示,例如 en 或 zh。',
sttPrompt: '提示词',
sttPromptHint: '可选转写提示词。',
sttAudioTranscode: '音频转码',
sttAudioTranscodeNone: '发送原始音频',
sttAudioTranscodeFfmpeg: '使用 ffmpeg 转为 WAV',
sttBaseUrl: '基础 URL',
sttBaseUrlHint: '自定义 OpenAI 兼容语音转文字端点。',
sttSave: '保存 STT 设置',
sttSaved: 'STT 设置已保存到服务端。',
sttSaveFailed: '保存 STT 设置失败。',
sttCleared: '服务端已存储的 STT 密钥已清除。',
sttClearFailed: '清除服务端已存储的 STT 密钥失败。',
sttActiveSaved: '当前 STT 提供方已保存到服务端。',
sttSaveActive: '保存当前 STT 提供方',
sttEndpointHint: '最终转写 endpoint:{endpoint}',
sttTestTitle: '测试语音转文字',
sttTestButton: '测试 STT API',
sttTestStopButton: '停止并转写',
sttTestBackendOnly: 'STT API 测试仅适用于 OpenAI 兼容和自定义提供方。',
sttTestRecording: '正在录制测试音频……录完后点击停止并转写。',
sttTestTranscribing: '正在转写测试音频……',
sttTestEmpty: '没有录到可用于 STT 测试的音频。',
sttTestSucceeded: 'STT 测试成功。',
sttTestFailed: 'STT 测试失败:{error} —— {hint}',
sttFailureHintMissingConfig: '请确认已保存 provider 的 Base URL、模型和 API key 后再测试。',
sttFailureHintAuth: '请检查 API key;如果页面显示已储存 key,请重新粘贴当前 key 并保存后再测。',
sttFailureHintForbidden: 'key 已到达供应商但没有该 STT 模型/账号权限,请检查 provider 权限、额度或 billing。',
sttFailureHintEndpointModel: '请检查 Base URL 和模型。Groq 建议使用 {endpoint},模型用 whisper-large-v3-turbo 或其他 Groq STT 模型。',
sttFailureHintModel: '请检查所选 STT 模型是否存在,并且当前账号有权限使用。',
sttFailureHintQuota: '供应商返回额度、billing 或限流问题,请检查账号额度/billing,或稍后重试。',
sttFailureHintNetworkCustom: 'Web UI server 无法访问 custom STT endpoint。请确认 {endpoint} 可从服务器访问,并兼容 OpenAI audio/transcriptions。',
sttFailureHintNetwork: 'Web UI server 无法访问 STT provider,请检查网络、代理或防火墙后重试。',
sttFailureHintAudio: '录音为空或音频格式被拒绝。请允许麦克风权限,录一段清晰短句,或换 Chrome 重试。',
sttFailureHintGenericCustom: '请检查 API key、Base URL、模型,以及最终 endpoint {endpoint}。',
sttFailureHintGeneric: '请检查 API key、模型和 provider 账号权限后重试。',
sttTestRecordFailed: '无法开始麦克风录音:{error}',
sttTestTranscript: '转写结果:{text}',
ttsProvider: 'TTS 提供者',
ttsProviderHint: '选择消息朗读使用的语音引擎',
providerWebSpeech: 'WebSpeech API(浏览器内置)',
providerOpenai: 'OpenAI TTS',
providerCustom: '自定义端点(兼容 OpenAI)',
providerEdge: 'Edge TTS(免费,无需 API Key)',
// WebSpeech
webspeechVoice: '音色',
webspeechVoiceHint: '从浏览器或系统提供的语音中选择',
webspeechVoicePlaceholder: '自动(默认语音)',
// OpenAI
openaiKey: 'API 密钥',
openaiKeyHint: '具有 TTS 权限的 OpenAI API Key',
openaiUrl: 'API 基础地址',
openaiUrlHint: '例如 https://api.openai.com/v1/audio/speech',
openaiModel: '模型',
openaiModelHint: 'tts-1(快速)/ tts-1-hd(高音质)',
openaiVoice: '音色',
openaiVoiceHint: '用于语音合成的音色',
// 自定义端点
customHint: '支持任何 OpenAI 兼容的 TTS 服务——可用于 GPT-SoVITS、CosyVoice 等自部署服务。',
customUrl: 'API 地址',
customUrlHint: 'TTS 服务的完整基础地址',
customUrlPlaceholder: '本地适配器中配置的地址 如:http://127.0.0.1:9880',
customApiKey: 'API 密钥(可选)',
customApiKeyHint: '部分自部署服务需要身份验证',
customApiKeyPlaceholder: '不需要则留空',
// Edge TTS
edgeHint: '由 Microsoft Edge TTS 驱动(node-edge-tts)。',
edgeUrl: '适配器地址',
edgeUrlHint: 'Edge TTS 适配器地址,例如 http://127.0.0.1:9882',
edgeUrlPlaceholder: 'http://127.0.0.1:9882',
edgeVoice: '音色',
edgeVoiceHint: '选择用于语音合成的音色',
edgeRate: '语速',
edgeRateHint: '调整语音速度(0.5~2.0 倍)',
edgePitch: '音调',
edgePitchHint: '调整语音音调(-20~+20 Hz)',
// 试听
testTitle: '试听测试',
testText: '测试文本',
testTextPlaceholder: '输入测试文本...',
testTextDefault: '你好,这是一个语音测试。',
testButton: '试听',
testButtonPlaying: '播放中...',
testFailed: '测试失败:{error}',
// MiMo TTS
providerMimo: 'MiMo TTS',
mimoHint: '小米 MiMo TTS,支持预置音色、音色设计、音色复刻三种模式',
mimoApiKey: 'API Key',
mimoApiKeyHint: '在 platform.xiaomimimo.com 获取',
mimoApiKeyPlaceholder: 'MiMo API Key',
mimoAuthMode: '认证方式',
mimoAuthModeHint: '所选 MiMo 端点要求的鉴权请求头格式',
mimoAuthModeBearer: 'Bearer Token(Authorization)',
mimoAuthModeApiKey: 'API Key 请求头(api-key)',
mimoAuthModeBoth: '同时发送两种请求头',
mimoBaseUrl: 'Base URL',
mimoBaseUrlHint: 'MiMo API 端点地址',
mimoModel: '模型',
mimoModelHint: '选择语音合成模型',
mimoModelPreset: '预置音色',
mimoModelVoiceDesign: '音色设计',
mimoModelVoiceClone: '音色复刻',
mimoVoice: '音色',
mimoVoiceHint: '选择预置音色',
mimoVoiceDesignPrompt: '音色描述',
mimoVoiceDesignPromptHint: '描述你想要的音色特征',
mimoVoiceDesignPromptPlaceholder: '例如:温柔的年轻女声,语速稍慢,带着磁性',
mimoCloneAudio: '上传音频',
mimoCloneAudioHint: '上传音频样本用于音色复刻,支持 mp3/wav,最大 10MB',
mimoCloneAudioUpload: '选择文件',
mimoCloneAudioClear: '清除音频',
mimoStylePrompt: '风格指令',
mimoStylePromptHint: '可选,用自然语言描述语音风格',
mimoStylePromptPlaceholder: '例如:用轻快上扬的语调,语速稍快',
},
},
githubPreview: {
title: "版本预览",
description: "将选中的 GitHub tag 克隆到 Web UI 预览工作目录,安装依赖并以开发端口运行。",
refresh: "刷新",
selectTag: "选择 tag",
prepare: "准备代码",
install: "安装依赖",
start: "开启预览",
stop: "停止",
note: "预览代码存放在 Web UI 数据目录下。正式环境仍使用 8648,预览开发环境使用前端 8651、后端 8650。",
path: "预览路径",
webuiHome: "预览数据目录",
currentTag: "当前 Tag",
repoReady: "仓库就绪",
dependencies: "依赖已安装",
running: "运行状态",
notRunning: "未运行",
open: "打开预览",
log: "操作日志路径",
logOutput: "日志输出",
actionLog: "操作日志",
devLog: "开发服务日志",
yes: "是",
no: "否",
actionFailed: "操作失败",
nodeEnvironmentMissing: "未检测到可用的 Node/npm 环境,请先安装 Node.js 后重试。",
prepareSuccess: "预览代码已准备好",
installSuccess: "依赖安装完成",
startSuccess: "预览已完成",
stopSuccess: "预览已停止",
},
// 平台频道设置
platform: {
requireMention: "需要 {'@'}提及",
requireMentionGroup: "群组中需要 {'@'}机器人 才会响应",
requireMentionChannel: "频道中需要 {'@'}机器人 才会响应",
requireMentionRoom: "房间中需要 {'@'}机器人 才会响应",
reactions: '表情回应',
reactionsHint: '对消息添加表情回应',
freeResponseChats: '自由响应聊天',
freeResponseChatsHint: "不需要 {'@'}提及即响应的聊天 ID(逗号分隔)",
freeResponseChannels: '自由响应频道',
freeResponseChannelsHint: "不需要 {'@'}提及即响应的频道 ID(逗号分隔)",
freeResponseRooms: '自由响应房间',
freeResponseRoomsHint: "不需要 {'@'}提及即响应的房间 ID(逗号分隔)",
mentionPatterns: '自定义提及模式',
mentionPatternsHint: '额外的触发模式列表',
autoThread: '自动创建线程',
autoThreadHint: "{'@'}提及 后自动创建回复线程",
autoThreadHintRoom: '在房间中自动创建回复线程',
dmMentionThreads: 'DM 提及线程',
dmMentionThreadsHint: '在私聊中也使用线程回复提及',
allowBots: '允许机器人消息',
allowBotsHint: '响应其他机器人发送的消息',
allowedChannels: '允许的频道',
allowedChannelsHint: '白名单频道 ID(逗号分隔)',
ignoredChannels: '忽略的频道',
ignoredChannelsHint: '不响应的频道 ID(逗号分隔)',
noThreadChannels: '无线程频道',
noThreadChannelsHint: '不创建线程的频道 ID(逗号分隔)',
exclusiveTokenWarning: '此平台使用独占 token 锁。每个 profile 必须使用不同的身份 token,否则会与其他 profile 冲突导致 gateway 启动失败。',
botToken: 'Bot Token',
botTokenHint: '开发者门户获取的 Bot Token',
proxyUrl: '代理 URL',
proxyUrlHint: '可选的平台专用代理,支持 http://、https:// 和 socks5://',
accessToken: 'Access Token',
accessTokenHint: 'Matrix Access Token',
homeserver: 'Homeserver URL',
homeserverHint: 'Matrix 服务器地址',
matrixUserId: 'Matrix 用户 ID',
matrixUserIdHint: '密码登录必填;Access Token 登录可选',
matrixPassword: 'Matrix 密码',
matrixPasswordHint: '可替代 Access Token 的登录密码',
appId: 'App ID',
appIdHint: '飞书 App ID',
appSecret: 'App Secret',
appSecretHint: '飞书 App Secret',
encryptKey: '加密密钥',
encryptKeyHint: '飞书加密密钥',
verificationToken: '验证令牌',
verificationTokenHint: '飞书验证令牌',
clientId: 'Client ID',
clientIdHint: '钉钉 Client ID',
clientSecret: 'Client Secret',
clientSecretHint: '钉钉 Client Secret',
cardTemplateId: 'AI 卡片模板 ID',
cardTemplateIdHint: '钉钉 AI 卡片模板 ID;留空则不启用 AI 卡片',
allowedUsers: '允许用户',
allowedUsersHint: '用户 ID 或 OpenID 白名单,多个用英文逗号分隔',
allowAllUsers: '允许所有用户',
allowAllUsersHint: '允许任意用户发起消息;关闭后使用白名单',
botId: 'Bot ID',
botIdHint: '企业微信 Bot ID',
wecomSecretHint: '企业微信 Bot Secret',
waEnabled: '启用 WhatsApp',
waEnabledHint: '通过二维码配对启用 WhatsApp',
weixinToken: '微信 Token',
weixinTokenHint: '通过 weixin CLI 扫码登录获取 (hermes weixin)',
accountId: 'Account ID',
accountIdHint: '微信 Account ID',
qrLogin: '扫码登录',
qrRelogin: '重新登录',
qrFetching: '正在获取二维码...',
qrScanHint: '使用微信扫描二维码登录',
qrScanedHint: '已扫描,请在手机上确认...',
// QQ
qqAppId: 'App ID',
qqAppIdHint: 'QQ 开放平台机器人 App ID',
qqAppSecret: 'App Secret',
qqAppSecretHint: 'QQ 开放平台机器人 App Secret',
qqMarkdown: 'Markdown 支持',
qqMarkdownHint: '启用 Markdown 格式消息(部分客户端可能不支持)',
qqSandbox: '沙箱模式',
qqSandboxHint: '启用沙箱环境(测试用)',
qqQrScanHint: '使用 QQ 扫描上方二维码,或在手机上打开链接完成绑定',
},
// 网关
gateways: {
title: '网关',
running: '运行中',
stopped: '已停止',
started: '已启动',
startFailed: '启动失败',
stopFailed: '停止失败',
},
// 语言
language: {
label: '语言',
zh: '中文',
en: 'English',
},
// 终端
terminal: {
sessions: '会话',
newTab: '新建终端',
closeSession: '关闭此会话?',
sessionExited: '已退出',
processExited: '进程已退出,代码 {code}',
noSessions: '暂无终端会话',
connectionFailed: '终端服务连接失败',
connectionClosed: '终端连接已关闭',
connectionError: '终端连接错误',
},
// 群聊
groupChat: {
title: '群聊',
createRoom: '创建房间',
joinByCode: '通过邀请码加入',
roomName: '房间名称',
roomNamePlaceholder: '输入房间名称',
inviteCode: '邀请码',
autoGenerate: '自动生成',
noRooms: '暂无房间',
selectOrCreate: '选择或创建一个房间开始聊天',
agents: '智能体',
addAgent: '添加智能体',
selectProfile: '选择一个配置',
agentAdded: '智能体已添加',
selectRoomFirst: '请先选择一个群组',
agentAlreadyInRoom: '该智能体已在房间中',
agentAddFailedCount: '{count} 个智能体未添加:{details}',
noAgents: '当前房间暂无智能体',
members: '成员',
roomCreated: '房间已创建',
roomDeleted: '房间已删除',
roomCloned: '房间已克隆',
cloneRoom: '克隆房间',
copyRoomLink: '复制房间链接',
deleteRoomConfirm: '确定删除这个房间吗?',
clearContext: '清理上下文',
clearContextConfirm: '确定清理当前房间上下文吗?消息和压缩快照会被删除,智能体和成员会保留。',
contextCleared: '上下文已清理',
you: '你',
joined: '已加入房间',
joinFailed: '加入房间失败',
inputPlaceholder: '输入消息... (Enter 发送)',
messageDisplayLimit: '群聊最多展示 600 条消息',
enterCode: '输入邀请码',
yourName: '你的名称',
yourNamePlaceholder: '输入你的群聊昵称',
yourDescription: '自我描述(选填)',
yourDescriptionPlaceholder: '介绍一下你自己...',
agentName: 'Agent 名称',
agentNamePlaceholder: '自定义名称(留空则使用 profile 名称)',
agentDesc: 'Agent 描述',
agentDescPlaceholder: '描述这个 agent 的作用...',
agentReplying: '正在回复...',
agentCompressing: '正在压缩上下文...',
compressionSettings: '压缩设置',
triggerTokens: '触发压缩 Token 数',
triggerTokensDesc: '消息 token 数超过此值时触发上下文压缩',
maxHistoryTokens: '最大历史 Token 数',
maxHistoryTokensDesc: '压缩后发送给 LLM 的最大 token 数',
tailMessageCount: '保留最近消息数',
tailMessageCountDesc: '压缩后保留最近的原始消息条数',
compressionConfig: '压缩配置',
compressionSaved: '压缩配置已保存',
compressNow: '立即压缩',
compressingInProgress: '正在压缩中,请稍后',
},
// 用量统计
usage: {
title: '用量统计',
refresh: '刷新',
totalTokens: '总 Token 数',
inputTokens: '输入',
outputTokens: '输出',
totalSessions: '总会话数',
avgPerDay: '日均 ~{n}',
estimatedCost: '预估费用',
cacheHitRate: '缓存命中率',
modelBreakdown: '模型分布',
agentBreakdown: 'Agent 分布',
agents: { hermes: 'Hermes Agent', unknown: '未知' },
dailyTrend: '每日用量',
date: '日期',
tokens: 'Token',
cache: '缓存',
cacheRead: '缓存读取',
cacheWrite: '缓存写入',
sessions: '会话',
cost: '费用',
noData: '暂无用量数据',
},
skillsUsage: {
title: '技能用量',
subtitle: '跟踪 Hermes 会话中的技能加载和编辑',
refresh: '刷新',
periodSelector: '技能用量周期',
periodLabel: '{days}天',
summary: '概览',
totalActions: '操作',
loads: '加载',
edits: '编辑',
distinctSkills: '技能数',
topSkills: '热门',
dailyTrend: '趋势',
periodSummary: '最近 {days} 天',
skill: '技能',
share: '占比',
lastUsed: '最近',
noData: '暂无技能用量数据',
loadFailed: '技能用量加载失败',
otherSkills: '其他技能',
},
// 文件管理
files: {
title: '文件',
fileTree: '文件树',
tree: '目录树',
list: '文件列表',
breadcrumbRoot: '根目录',
newFile: '新建文件',
newFolder: '新建文件夹',
upload: '上传',
refresh: '刷新',
open: '打开',
edit: '编辑',
preview: '预览',
download: '下载',
copyPath: '复制路径',
rename: '重命名',
delete: '删除',
name: '名称',
size: '大小',
modified: '修改时间',
actions: '操作',
emptyDir: '空目录',
loading: '加载中...',
confirmDelete: '确定要删除「{name}」吗?',
confirmDeleteDir: '确定要删除目录「{name}」及其所有内容吗?',
deleteFailed: '删除失败',
deleted: '已删除',
renameTo: '重命名为',
newFileName: '文件名',
newFolderName: '文件夹名',
created: '已创建',
createFailed: '创建失败',
renamed: '已重命名',
renameFailed: '重命名失败',
uploadSuccess: '已上传 {count} 个文件',
uploadFailed: '上传失败',
saveFailed: '保存失败',
saved: '已保存',
unsavedChanges: '有未保存的更改,是否丢弃?',
pathCopied: '路径已复制',
fileTooLarge: '文件过大(最大 10MB)',
permissionDenied: '无法修改受保护的文件',
notFound: '文件或目录不存在',
backendError: '文件操作失败',
dragDropHint: '拖拽文件到此处上传',
closeEditor: '关闭编辑器',
closePreview: '关闭',
saveFile: '保存',
},
// 下载
download: {
downloading: '正在下载...',
downloadFailed: '下载失败',
fileNotFound: '文件不存在或已被删除',
fileTooLarge: '文件过大(超过限制)',
backendError: '文件读取失败,远程环境可能不可用',
backendTimeout: '文件读取超时',
unsupportedBackend: '当前 terminal backend 暂不支持文件下载',
invalidPath: '无效的文件路径',
contentDisplay: '内容展示',
download: '下载',
downloadFile: '下载文件',
},
// 更新日志
changelog: {
new_0_6_29_9: '项目更名为 hermes-ui:移除桌面端、营销官网与 ESP32 固件,只保留 Web 与服务端',
new_0_6_29_10: '界面品牌文案统一为 hermes-ui,语言包收敛为简体中文与 English 两项',
},
}