2327 lines
89 KiB
TypeScript
2327 lines
89 KiB
TypeScript
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 两项',
|
||
},
|
||
}
|