Files
Hermes-ui/packages/client/src/i18n/locales/zh.ts
T
2026-05-12 09:03:07 +08:00

1192 lines
47 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 Web UI',
description: '输入访问令牌以继续。令牌在服务端启动日志中查看。',
placeholder: '访问令牌',
submit: '登录',
tokenRequired: '请输入访问令牌',
invalidToken: '令牌无效',
connectionFailed: '无法连接到服务器',
passwordLogin: '密码登录',
tokenLogin: '令牌登录',
usernamePlaceholder: '用户名',
passwordPlaceholder: '密码',
credentialsRequired: '请输入用户名和密码',
invalidCredentials: '用户名或密码错误',
tooManyAttempts: '登录失败次数过多,请稍后重试',
passwordMismatch: '两次密码不一致',
passwordTooShort: '密码长度至少 6 个字符',
setupSuccess: '密码登录配置成功',
passwordChanged: '密码修改成功',
passwordRemoved: '密码登录已移除',
setupPassword: '设置密码登录',
changePassword: '修改密码',
changeUsername: '修改用户名',
removePasswordLogin: '移除',
username: '用户名',
currentPassword: '当前密码',
newPassword: '新密码',
confirmPassword: '确认密码',
newUsername: '新用户名',
usernameChanged: '用户名修改成功',
usernameTooShort: '用户名至少 2 个字符',
setupDescription: '设置用户名和密码以便快速登录。访问令牌仍可继续使用。',
removeConfirm: '确定要移除密码登录吗?移除后需要使用访问令牌登录。',
passwordLoginNotConfigured: '密码登录未配置',
passwordLoginConfigured: '密码登录已启用({username}',
},
// 通用
common: {
loading: '加载中...',
cancel: '取消',
delete: '删除',
retry: '重试',
edit: '编辑',
save: '保存',
saved: '已保存',
saveFailed: '保存失败',
deleteFailed: '删除失败',
ok: '确定',
copied: '已复制',
copy: '复制',
update: '更新',
create: '创建',
noData: '暂无数据',
expired: '已过期',
fetch: '获取',
add: '添加',
enable: '启用',
disable: '禁用',
configured: '已配置',
notConfigured: '未配置',
confirm: '确定',
expand: '展开',
collapse: '收起',
start: '启动',
stop: '停止',
},
// 侧边栏
sidebar: {
chat: '对话',
search: '搜索',
apiRelay: '中转站',
history: '历史',
jobs: '任务',
kanban: '看板',
models: '模型',
profiles: '用户',
plugins: '插件',
skills: '技能',
memory: '记忆',
logs: '日志',
usage: '用量',
channels: '频道',
gateways: '网关',
terminal: '终端',
groupChat: '群聊',
files: '文件',
groupConversation: '对话',
groupPlatform: '平台',
groupAgent: '代理',
groupSystem: '系统',
groupMonitoring: '监控',
groupTools: '工具',
settings: '设置',
connected: '已连接',
disconnected: '未连接',
collapse: '收起菜单',
expand: '展开菜单',
updateTip: '在终端运行 "hermes-web-ui update" 即可更新',
updateVersion: '升级版本 v{version}',
reloadClientVersion: '刷新到 v{version}',
updating: '正在更新...',
updateSuccess: '更新完成,请重启服务',
updateFailed: '更新失败',
logout: '退出登录',
nodeVersionWarning: '检测到 Node.js v{version},请升级到23以上版本。',
changelog: '更新日志',
noChangelog: '暂无更新日志',
},
// 抽屉
drawer: {
terminal: '终端',
files: '工作区',
},
// 对话
chat: {
contextRemaining: '剩余',
contextClickToEdit: '点击编辑上下文长度',
contextEditTitle: '编辑上下文长度',
contextEditDesc: '设置当前模型的上下文长度限制(token 数量)',
contextEditPlaceholder: '请输入上下文长度',
contextEditHint: '常见值:200k (Claude), 128k (GPT-4), 32k (GPT-3.5)',
contextEditSave: '保存',
contextEditCancel: '取消',
contextEditInvalid: '请输入有效的上下文长度',
contextEditSuccess: '上下文长度已更新',
contextEditFailed: '更新失败',
emptyState: '开始与 Hermes Agent 对话',
inputPlaceholder: '输入消息... (Enter 发送,Shift+Enter 换行)',
attachFiles: '添加附件',
autoPlaySpeech: '自动播放语音',
messageQueue: '消息队列',
removeQueuedMessage: '移除队列消息',
stop: '停止',
start: '启动',
stopGateway: '停止网关',
send: '发送',
contextUsed: '上下文已用:',
sessions: '会话',
webUiSessions: '会话',
sessionScopeHint: '这里只显示当前会话;CLI、Telegram、Discord、Cron 等通道会话在历史中只读查看。',
openHistory: '打开历史',
hermesHistory: 'Hermes 历史',
historyScopeHint: '这里按来源只读查看 Hermes 历史会话。',
noSessions: '暂无会话',
searchTitle: '搜索会话',
searchSubtitle: '按标题或消息内容搜索',
searchHint: 'Cmd/Ctrl+K',
searchPlaceholder: '搜索会话...',
searchEmpty: '最近会话',
searchRecent: '最近会话',
searchNoResults: '没有匹配的会话',
searchNoSnippet: '没有可显示的摘要',
searchEnterHint: 'Enter 打开 · Esc 关闭',
searchFailed: '搜索会话失败',
newChat: '新建对话',
deleteSession: '确定删除此会话?',
sessionDeleted: '会话已删除',
toggleBatchMode: '批量选择',
selectAll: '全选',
confirmBatchDelete: '确定删除选中的 {count} 个会话?',
batchDeleteSuccess: '已删除 {count} 个会话',
batchDeletePartial: '{failed} 个会话删除失败',
batchDeleteFailed: '批量删除失败',
rename: '重命名',
pin: '置顶',
unpin: '取消置顶',
pinned: '已置顶',
chatMode: '聊天',
liveMode: '实时',
liveSessions: '实时会话',
recentBadge: '最近',
linkedSessions: '关联 {count} 个会话',
noVisibleMessages: '没有人类可见消息。',
monitorRoleUser: '用户',
monitorRoleAssistant: '助手',
copySessionId: '复制会话 ID',
export: '导出',
exportFull: '全量导出 (JSON)',
exportCompressed: '压缩导出 (TXT)',
exportCompressing: '正在压缩上下文,请稍候...',
exportSuccess: '会话已导出',
exportFailed: '导出失败',
renamed: '已重命名',
renameFailed: '重命名失败',
renameSession: '重命名会话',
sessionNotFound: '会话未找到',
enterNewTitle: '输入新标题',
workspace: '工作区',
setWorkspace: '设置工作区',
setWorkspaceTitle: '设置会话工作区',
workspacePlaceholder: '输入项目路径,例如 /home/user/project',
workspaceSet: '工作区已设置',
workspaceSetFailed: '设置工作区失败',
other: '其他',
runFailed: '运行失败',
error: '错误',
tool: '工具',
arguments: '参数',
result: '结果',
truncated: '... (已截断)',
executionDuration: '执行时长',
thinkingLabel: '思考过程',
thinkingInProgress: '思考中…',
thinkingShow: '展开思考过程',
thinkingHide: '收起思考过程',
thinkingDuration: '已观察 {duration}',
thinkingChars: '{count} 字',
copyBubble: '复制消息',
copiedBubble: '已复制',
copyFailed: '复制失败',
playSpeech: '播放语音',
pauseSpeech: '暂停',
resumeSpeech: '继续',
stopSpeech: '停止',
speechNotSupported: '此浏览器不支持语音播放',
},
// 看板
kanban: {
title: '看板',
createTask: '新建任务',
noTasks: '暂无任务',
allStatuses: '全部状态',
allAssignees: '全部负责人',
board: {
create: '新建看板',
archive: '归档看板',
slugPlaceholder: '看板标识,例如 project-a',
namePlaceholder: '显示名称(可选)',
slugRequired: '看板标识不能为空',
created: '看板已创建',
archived: '看板已归档',
archiveConfirm: '确定归档当前看板?',
},
columns: {
triage: '待分拣',
todo: '待办',
ready: '就绪',
running: '进行中',
blocked: '阻塞',
done: '已完成',
archived: '已归档',
},
form: {
title: '标题',
titlePlaceholder: '任务标题',
titleRequired: '标题不能为空',
body: '描述',
bodyPlaceholder: '任务描述(可选)',
assignee: '负责人',
selectAssignee: '选择负责人...',
priority: '优先级',
selectPriority: '选择优先级...',
},
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: '关键信息',
},
action: {
title: '操作',
complete: '完成',
completeSummary: '完成摘要(可选)',
block: '阻塞',
blockReason: '阻塞原因',
unblock: '解除阻塞',
assign: '分配',
assignTo: '分配给...',
},
message: {
taskCreated: '任务已创建',
taskCompleted: '任务已完成',
taskBlocked: '任务已阻塞',
taskUnblocked: '任务已解除阻塞',
taskAssigned: '任务已分配',
loadFailed: '加载任务失败',
},
stats: {
total: '总计',
tasks: '任务数',
},
},
// 定时任务
jobs: {
title: '定时任务',
createJob: '创建任务',
editJob: '编辑任务',
noJobs: '暂无定时任务,创建一个开始吧。',
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: '要执行的内容',
deliverTarget: '投递目标',
origin: '来源',
local: '本地',
repeatCount: '重复次数(可选)',
modelPlaceholder: 'Default model',
repeatPlaceholder: '留空表示无限重复',
jobCreated: '任务已创建',
jobUpdated: '任务已更新',
nameRequired: '名称为必填项',
scheduleRequired: '调度表达式为必填项',
loadFailed: '加载任务失败',
jobPaused: '任务已暂停',
jobResumed: '任务已恢复',
jobTriggered: '任务已触发',
modelUpdated: 'Model updated',
jobDeleted: '任务已删除',
status: {
running: '运行中',
paused: '已暂停',
disabled: '已禁用',
scheduled: '已调度',
},
info: {
model: 'Model',
schedule: 'Schedule',
lastRun: '上次运行',
nextRun: '下次运行',
deliver: '投递',
repeat: '重复',
},
action: {
pause: '暂停',
pauseJob: '暂停任务',
resume: '恢复',
resumeJob: '恢复任务',
runNow: '立即运行',
triggerImmediately: '立即触发',
},
runHistory: {
title: '运行历史',
runs: '次运行',
noRuns: '暂无运行历史。',
},
},
// 技能
skills: {
title: '技能',
searchPlaceholder: '搜索技能...',
noMatch: '没有匹配的技能',
noSkills: '暂无技能',
backTo: '返回',
attachedFiles: '附件文件',
loadFailed: '加载技能失败',
fileLoadFailed: '加载文件失败',
modified: '用户已修改',
archived: '已归档',
pinned: '已置顶',
pin: '置顶技能',
unpin: '取消置顶',
pinFailed: '更改置顶状态失败',
toggleFailed: '切换技能状态失败',
source: {
builtin: '内置',
hub: 'Hub 安装',
local: '本地安装',
},
},
// 插件
plugins: {
title: '插件',
refresh: '刷新',
notice: '只读展示可发现的 Hermes 插件 manifest。发现元数据读取不会加载插件代码。v1 管理动作仍保留在 CLI,新 Hermes 会话生效。',
loadFailed: '加载插件失败',
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: '路径 / 入口',
cli: 'CLI',
},
capabilities: {
tools: '{count} 个工具',
hooks: '{count} 个 hook',
env: '{count} 个环境变量',
},
metadata: {
agentRoot: 'Agent 根目录',
python: 'Python',
scanCwd: '扫描 cwd',
projectPlugins: '项目插件',
},
},
// 记忆
memory: {
title: '记忆',
refresh: '刷新',
loadFailed: '加载记忆失败',
myNotes: '我的笔记',
noNotes: '暂无笔记。',
notesPlaceholder: '输入笔记内容...',
userProfile: '用户画像',
noProfile: '暂无画像。',
profilePlaceholder: '输入用户画像...',
soul: '灵魂',
noSoul: '暂无灵魂配置。',
soulPlaceholder: '输入灵魂配置...',
},
// 模型
models: {
title: '模型',
searchPlaceholder: '搜索模型...',
addProvider: '添加 Provider',
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 已删除',
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/.envCOPILOT_GITHUB_TOKEN',
copilotAddSourceGhCli: '来源:gh CLIgh 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 插件的登录。',
customBadge: '自定义',
previewBadge: '预览',
disabledBadge: '不可用',
disabledTooltip: "此模型当前账号不可用",
customModelPlaceholder: '未列出的模型 ID',
customModelHint: '仅用于 provider 支持但未返回的模型;不是重命名。按回车加载。',
removeCustomModel: '移除这个未列出的模型',
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: '显示全部模型',
builtIn: '内置',
customType: '自定义',
provider: 'Provider',
contextLength: '上下文长度',
contextLengthPlaceholder: '例如 200000(可选)',
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: '删除',
switchTo: '切换到',
switchConfirm: '切换到配置 "{name}" 将重启网关,是否继续?',
switchSuccess: '已切换到配置 "{name}"',
switchFailed: '切换配置失败,网关可能需要手动重启',
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: '暂无配置,创建一个开始吧。',
},
// 日志
logs: {
title: '日志',
all: '全部',
searchPlaceholder: '搜索...',
refresh: '刷新',
noEntries: '暂无日志',
},
// 设置
settings: {
title: '设置',
saved: '已保存',
saveFailed: '保存失败',
tabs: {
display: '显示',
account: '账户',
agent: '代理',
memory: '记忆',
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 回复完成时播放提示音',
busyInputMode: '忙碌输入模式',
busyInputModeHint: 'AI 处理中仍可输入',
theme: '主题',
themeHint: '选择浅色、暗色或跟随系统',
themeLight: '浅色',
themeDark: '暗色',
themeSystem: '跟随系统',
},
agent: {
maxTurns: '最大轮次',
maxTurnsHint: '单次对话最大交互轮数',
gatewayTimeout: '网关超时',
gatewayTimeoutHint: '单次请求超时时间(秒)',
restartDrainTimeout: '重启排空超时',
restartDrainTimeoutHint: '重启前排空请求的超时时间(秒)',
toolEnforcement: '工具执行策略',
toolEnforcementHint: '控制工具调用的执行模式',
auto: '自动',
always: '始终',
never: '从不',
},
memory: {
enabled: '启用记忆',
enabledHint: '允许 AI 记住对话上下文',
userProfile: '用户画像',
userProfileHint: '允许 AI 记住用户偏好信息',
charLimit: '记忆字符上限',
charLimitHint: 'MEMORY.md 最大字符数',
userCharLimit: '用户画像字符上限',
userCharLimitHint: 'USER.md 最大字符数',
},
session: {
mode: '重置模式',
modeHint: '会话重置的触发条件',
modeBoth: '空闲 + 定时',
modeIdle: '仅空闲',
modeHourly: '仅定时',
idleMinutes: '空闲超时',
idleMinutesHint: '无操作后自动重置的等待时间(分钟)',
atHour: '定时重置时间',
humanOnly: '仅显示人类会话',
humanOnlyHint: '默认隐藏子代理和会话监看噪音',
liveMonitorHumanOnly: '实时监看:仅显示人类会话',
liveMonitorHumanOnlyHint: '在实时监看中默认隐藏子代理和会话监看噪音',
atHourHint: '每天在指定小时重置会话',
requireAuth: '会话授权',
requireAuthHint: '修改会话操作是否授权',
},
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',
},
voice: {
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.52.0 倍)',
edgePitch: '音调',
edgePitchHint: '调整语音音调(-20+20 Hz',
// 试听
testTitle: '试听测试',
testText: '测试文本',
testTextPlaceholder: '输入测试文本...',
testTextDefault: '你好,这是一个语音测试。',
testButton: '试听',
testButtonPlaying: '播放中...',
testFailed: '测试失败:{error}',
},
},
// 平台频道设置
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',
accessToken: 'Access Token',
accessTokenHint: 'Matrix Access Token',
homeserver: 'Homeserver URL',
homeserverHint: 'Matrix 服务器地址',
appId: 'App ID',
appIdHint: '飞书 App ID',
appSecret: 'App Secret',
appSecretHint: '飞书 App Secret',
clientId: 'Client ID',
clientIdHint: '钉钉 Client ID',
clientSecret: 'Client Secret',
clientSecretHint: '钉钉 Client Secret',
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: '智能体已添加',
agentAlreadyInRoom: '该智能体已在房间中',
noAgents: '当前房间暂无智能体',
members: '成员',
roomCreated: '房间已创建',
roomDeleted: '房间已删除',
deleteRoomConfirm: '确定删除这个房间吗?',
you: '你',
joined: '已加入房间',
joinFailed: '加入房间失败',
inputPlaceholder: '输入消息... (Enter 发送)',
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: '模型分布',
dailyTrend: '每日用量(近 30 天)',
date: '日期',
tokens: 'Token',
cache: '缓存',
cacheRead: '缓存读取',
cacheWrite: '缓存写入',
sessions: '会话',
cost: '费用',
noData: '暂无用量数据',
},
// 文件管理
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: '无效的文件路径',
download: '下载',
downloadFile: '下载文件',
},
// 更新日志
changelog: {
new_0_5_14_1: '新增会话导出功能:支持完整和压缩模式,导出为 JSON 或纯文本',
new_0_5_14_2: '修复终端面板启动即连接导致 PTY 资源耗尽的问题,改为懒加载连接',
new_0_5_14_3: '修复 WSL2 环境下 IPv6 双栈绑定导致健康检查失败、端口无法访问的问题',
new_0_5_14_4: '修复服务关闭时 SQLite 连接未释放导致重启后数据库被锁的问题',
new_0_5_14_5: '更新 FUN-Codex/FUN-Claude 模型列表,新增内置标识、API 中转站入口',
new_0_5_15_1: '新增看板面板,可视化任务与会话管理',
new_0_5_15_2: '新增官网首页与文档站',
new_0_5_15_3: '修复群聊 Agent 客户端使用动态端口而非硬编码 8648',
new_0_5_15_4: '新增 node-edge-tts 语音模块',
new_0_5_15_5: '修复 WSL 默认监听地址绑定问题',
new_0_5_15_6: '新增官网首页 SEO 元数据',
new_0_5_15_7: '新增基于 IP 的登录暴力破解防护',
new_0_5_15_8: '修复 MarkdownRenderer 中下载链接重复包装问题',
new_0_5_15_9: '修复 Hermes Markdown 媒体渲染与同步重试',
new_0_5_15_10: '重构移除上游环境变量依赖',
new_0_5_15_11: '如果看板功能无法使用,请升级 hermes-agent',
new_0_5_16_1: '聊天流式接口从 /v1/runs 迁移至 /v1/responses,降低延迟',
new_0_5_16_2: '持久化真实 API 用量(token、缓存、推理)到用量统计表',
new_0_5_16_3: '官网导航栏新增 QQ 群二维码',
new_0_5_16_4: '移除消息 schema 中未使用的 codex_reasoning_items 字段',
new_0_5_17_1: '全面兼容 Windows:路径处理、进程管理、终端、日志解析',
new_0_5_17_2: '重构 Gateway 进程管理,支持跨平台启动/停止/健康检查',
new_0_5_17_3: '修复 Termux 环境下插件发现失败的问题,自动解析 hermes shebang 定位 Python',
new_0_5_17_5: '优化认证锁定窗口和开发环境关闭流程',
new_0_5_17_4: 'YAML 配置解析容忍重复键',
new_0_5_17_6: 'Comic 主题新增中文(站酷快乐体)、日文(Zen Maru Gothic)、韩文(Gaegu)手写字体',
new_0_5_17_7: '新增 Comic/涂鸦主题风格',
new_0_5_17_8: '许可证变更为 BSL-1.1',
new_0_5_17_9: '新增只读 Hermes 插件页',
new_0_5_17_10: '图片上传转为 base64 多模态格式',
new_0_5_17_11: '修复 Kanban 看板选择与隔离问题',
new_0_5_17_12: '新增语音播放设置,支持 4 种 TTS 提供商',
new_0_5_17_13: '降低上下文压缩提示阈值从 200 到 150',
new_0_5_17_14: '修复 Web UI 自更新重启逻辑',
new_0_5_17_15: '修复 opencode-zen 和 opencode-go 共享环境变量导致配置联动',
new_0_5_17_16: '新增繁体中文(zh-TW)语言支持',
new_0_5_17_17: '模型页支持在 Web UI 里管理可见模型',
new_0_5_17_18: 'Kanban:补齐任务操作链路(评论、日志、分配、派发),明确能力边界',
new_0_5_17_19: '修复删除 Provider 时未清除认证条目',
new_0_5_17_20: '修复 Codex credential-pool 认证识别',
new_0_5_17_21: 'Edge TTS 新增语速/音调调节',
new_0_5_17_22: 'config.yaml 重复键不再导致解析崩溃',
new_0_5_17_23: 'Gateway 端口所有权检查改为基于 PID 文件,防止跨 Profile 端口占用',
new_0_5_17_24: '历史页面现在显示 Cron 会话记录',
new_0_5_17_25: '修复收起侧边栏时语言切换和主题图标挤压问题',
new_0_5_13_1: '新增消息队列,顺序处理运行请求,避免并发冲突',
new_0_5_13_2: '支持二级 Skills 目录结构,扁平化 Skill 归入"杂项"分类',
new_0_5_13_3: '启动同步时过滤临时会话(eph_*),避免导入内部会话',
new_0_5_13_4: '新增 Termux/proot 环境兼容,支持移动端和嵌入式部署',
new_0_5_13_5: '完善聊天运行中止生命周期:用户取消时正确清理状态',
new_0_5_13_6: '移除历史消息列表中的流式指示器,显示更清爽',
new_0_5_13_7: '修复自定义 Provider 的上下文解析,改进模型匹配',
new_0_5_13_8: '修复 IPv6 默认监听地址绑定问题',
new_0_5_13_9: '优化聊天消息显示和上下文压缩逻辑',
new_0_5_13_10: '修复聊天完成提示音开关不生效及 cron 静默运行历史为空的问题',
new_0_5_12_1: '新增会话批量删除功能:支持 checkbox 多选、全选、批量删除,提升会话管理效率',
new_0_5_12_2: '新增模型上下文长度可视化编辑:点击上下文长度即可打开编辑弹窗,支持自定义 token 限制',
new_0_5_12_3: '修复群聊提及功能键盘选择问题:使用自定义下拉菜单替换 NDropdown,支持键盘导航和滚动跟随',
new_0_5_12_4: '新增聊天完成提示音:支持自动播放开关,提升交互体验',
new_0_5_12_5: '优化聊天消息显示:过滤空内容助手消息,改进历史记录和压缩逻辑',
new_0_5_12_6: '改进升级机制:使用 npm prefix -g 动态解析路径,支持 Homebrew 等非标准 Node.js 安装',
new_0_5_6_1: '新增语音播放功能:使用 Web Speech API,支持手动播放按钮、自动播放开关、彩虹边框动画和移动端优化',
new_0_5_6_2: '新增健壮的 LLM JSON 解析器,兼容 Python 格式并从流式事件中提取文本',
new_0_5_6_3: 'Skills 功能增强:使用统计、来源过滤、归档技能、来源追溯和置顶切换',
new_0_5_6_4: '扩展每日使用统计,包含详细的 token 细分,分离缓存读/写统计',
new_0_5_6_5: '优化会话历史范围说明,改进聊天和历史视图的描述',
new_0_5_6_6: '重新设计附件处理,采用 Anthropic 风格的 ContentBlock 数组格式,支持类型区分(文本、图片、文件)',
new_0_5_6_7: '新增前端文件下载功能,支持 ContentBlock 和 Markdown 两种格式,带身份验证',
new_0_5_10_1: 'GitHub Release 时自动构建 Docker 镜像并添加版本标签(如 :v0.5.10',
new_0_5_10_2: '新增会话授权模式配置:approvals.mode(关闭/手动)',
new_0_5_10_3: '新增自动 OpenAPI 文档生成(94 个端点,24 个标签)',
new_0_5_10_4: '增强媒体渲染:支持 Markdown 中的图片、视频和文件',
new_0_5_10_5: '优化群聊提示并修复媒体处理',
new_0_5_6_8: '修复多进程冲突导致的 SQLite 数据库重置问题,清理冗余 nodemon 进程',
new_0_5_9_1: '统一应用程序中的 profile 管理,提供一致的 API 和状态管理',
new_0_5_9_2: '添加 GitHub issue 和 pull request 模板以改进贡献工作流程',
new_0_5_8_1: '新增抽屉面板支持移动端侧边栏,可自定义彩虹边框按钮',
new_0_5_8_2: '修复 profile 切换状态同步问题,立即更新 UI 并验证后端状态',
new_0_5_8_3: '过滤语音播放中的特殊字符和表情符号,改善语音合成效果',
new_0_5_8_4: '添加缺失的 i18n 键并统一会话数据源,优先使用数据库',
new_0_5_8_5: '优化 Vite 构建配置加快 Docker 构建,使用 esbuild 和代码分割',
new_0_5_7_1: '优化上下文压缩以支持富内容(图片、文件),改进工具消息处理',
new_0_5_7_2: '改进会话同步,使用批量插入和事务保护确保数据一致性',
new_0_5_7_3: '修复 usage.updated 事件接收,确保跨运行准确追踪 token',
new_0_5_5_1: '🎉 五一劳动节快乐!这个劳动节就不劳动啦,如果有问题大家忍忍',
new_0_5_5_2: '新增历史页面,用于浏览 Hermes 会话历史记录',
new_0_5_5_3: '历史页面独立管理会话状态,不影响当前聊天页面的活动会话',
new_0_5_5_4: '历史页面默认自动加载并选中第一个 CLI 类型的会话',
new_0_5_5_5: '新增 HistoryMessageList 组件,支持通过 props 注入会话数据',
new_0_5_5_6: '过滤空内容消息和无 toolName 的 tool 消息,提升历史记录显示质量',
new_0_5_5_7: '移除 localStorage 会话缓存,所有会话数据改为直接从后端获取',
new_0_5_5_8: '优化 profile 切换逻辑,移除废弃的缓存清理调用',
new_0_5_4_1: '修复并发聊天会话事件串扰问题,重构 WebSocket 事件路由机制',
new_0_5_4_2: '修复 cron job 编辑 payload,支持长提示词的仅名称编辑',
new_0_5_4_3: '修复 Docker 部署后 Web 终端无法使用 Hermes CLI 的问题',
new_0_5_4_4: '添加工作区对话框标题 i18n 翻译,改进会话持久化',
new_0_5_4_5: '支持代码块复制反馈,显示用户通知',
new_0_5_4_6: '对齐使用分析与 Hermes 状态数据库架构',
new_0_4_8_2: '修复嵌套 Markdown 代码块导致渲染截断',
new_0_4_8_3: '修复压缩续接会话投影和搜索问题',
new_0_4_8_4: '优化会话列表 N+1 查询,修复非 CJK 搜索 500 错误',
new_0_4_8_5: '修复切换标签页返回时强制滚动到底部',
new_0_4_8_6: '切换会话时添加加载过渡动画',
new_0_4_8_7: '修复登录 Token 验证使用正确的会话端点',
new_0_4_8_8: '修复刷新页面后图片附件失效问题',
new_0_4_8_9: '点击图片附件可全屏预览',
new_0_4_8_10: '上传目录从临时目录迁移到 ~/.hermes-web-ui/upload',
new_0_4_7_1: '实时流式显示思考/推理过程',
new_0_4_7_2: 'Docker 构建时跳过 prepare 脚本',
new_0_4_7_3: '群聊移动端体验改进和 UI 优化',
new_0_4_7_4: '将剩余上下文 Token 数限制为 0 而非负数',
new_0_4_7_5: '新增阿里云编码计划内置 Provider,支持 .env base_url 覆盖',
new_0_4_7_6: '启动时跳过远程配置文件以防止卡住',
new_0_4_7_7: '检测并展示被静默吞没的运行错误',
new_0_4_7_8: 'Provider 感知的上下文长度查询',
new_0_4_7_9: '切换时重置 config.model 并解析 CLI 自定义 Provider',
new_0_4_7_10: '删除内置 Provider 时清除 .env 中的 base_url_env',
new_0_4_7_11: '对齐群聊房间侧边栏背景与会话列表',
new_0_4_4_1: '新增文件浏览器,支持多后端(本地/Docker/SSH/Singularity',
new_0_4_4_2: '新增聊天消息附件文件下载',
new_0_4_4_3: '活跃会话显示实时状态标签',
new_0_4_4_4: '新增 StepFun 和 Nous Portal Provider 支持',
new_0_4_4_5: '修复特殊字符搜索导致 500 错误',
new_0_4_5_1: '新增群聊功能,支持多 Agent 房间、提及路由和输入状态恢复',
new_0_4_5_2: '使用 YAML 重写模型上下文配置,新增 context_length 设置',
new_0_4_5_3: '新增 gpt-5.5 到 OpenAI Codex 模型列表',
new_0_4_5_4: '用本地控制器替换任务代理,优化模型加载',
new_0_4_5_5: 'ModelSelector 自定义模型功能新增 i18n 支持',
new_0_4_5_6: '修复侧边栏 i18n 缺失 key 警告',
new_0_4_5_7: '退出登录时清除所有 localStorage',
new_0_4_5_8: '新增日志定期轮转,防止日志无限增长',
new_0_4_2_1: '新增 Token 用量追踪、上下文显示和动态上下文长度',
new_0_4_2_2: '新增会话搜索弹窗',
new_0_4_2_3: '恢复群聊系统(Socket.IO + SQLite 持久化)',
new_0_4_2_4: 'Chat 页面新增固定会话和实时监控',
new_0_4_2_5: '修复内置 Provider 检测和模型匹配问题',
},
}