Files
Hermes-ui/packages/client/src/i18n/locales/zh.ts
T

636 lines
21 KiB
TypeScript
Raw Normal View History

export default {
// 登录
login: {
title: 'Hermes Web UI',
description: '输入访问令牌以继续。令牌在服务端启动日志中查看。',
placeholder: '访问令牌',
submit: '登录',
tokenRequired: '请输入访问令牌',
invalidToken: '令牌无效',
connectionFailed: '无法连接到服务器',
passwordLogin: '密码登录',
tokenLogin: '令牌登录',
usernamePlaceholder: '用户名',
passwordPlaceholder: '密码',
credentialsRequired: '请输入用户名和密码',
invalidCredentials: '用户名或密码错误',
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: '保存失败',
ok: '确定',
copied: '已复制',
copy: '复制',
update: '更新',
create: '创建',
noData: '暂无数据',
fetch: '获取',
add: '添加',
enable: '启用',
disable: '禁用',
configured: '已配置',
notConfigured: '未配置',
confirm: '确定',
expand: '展开',
collapse: '收起',
start: '启动',
stop: '停止',
},
// 侧边栏
sidebar: {
chat: '对话',
2026-04-22 14:00:34 +08:00
search: '搜索',
jobs: '任务',
models: '模型',
profiles: '用户',
skills: '技能',
memory: '记忆',
logs: '日志',
usage: '用量',
channels: '频道',
gateways: '网关',
terminal: '终端',
files: '文件',
groupConversation: '对话',
groupPlatform: '平台',
groupAgent: '代理',
groupSystem: '系统',
groupMonitoring: '监控',
groupTools: '工具',
settings: '设置',
connected: '已连接',
disconnected: '未连接',
collapse: '收起菜单',
expand: '展开菜单',
updateTip: '在终端运行 "hermes-web-ui update" 即可更新',
updateVersion: '升级版本 v{version}',
updating: '正在更新...',
updateSuccess: '更新完成,请重启服务',
updateFailed: '更新失败',
logout: '退出登录',
nodeVersionWarning: '检测到 Node.js v{version},请升级到23以上版本。',
changelog: '更新日志',
noChangelog: '暂无更新日志',
},
// 对话
chat: {
contextRemaining: '剩余',
emptyState: '开始与 Hermes Agent 对话',
inputPlaceholder: '输入消息... (Enter 发送,Shift+Enter 换行)',
attachFiles: '添加附件',
stop: '停止',
start: '启动',
stopGateway: '停止网关',
send: '发送',
contextUsed: '上下文已用:',
sessions: '会话',
noSessions: '暂无会话',
2026-04-22 14:00:34 +08:00
searchTitle: '搜索会话',
searchSubtitle: '按标题或消息内容搜索',
searchHint: 'Cmd/Ctrl+K',
searchPlaceholder: '搜索会话...',
searchEmpty: '最近会话',
searchRecent: '最近会话',
searchNoResults: '没有匹配的会话',
searchNoSnippet: '没有可显示的摘要',
searchEnterHint: 'Enter 打开 · Esc 关闭',
searchFailed: '搜索会话失败',
newChat: '新建对话',
deleteSession: '确定删除此会话?',
sessionDeleted: '会话已删除',
rename: '重命名',
pin: '置顶',
unpin: '取消置顶',
pinned: '已置顶',
chatMode: '聊天',
liveMode: '实时',
liveSessions: '实时会话',
recentBadge: '最近',
linkedSessions: '关联 {count} 个会话',
noVisibleMessages: '没有人类可见消息。',
monitorRoleUser: '用户',
monitorRoleAssistant: '助手',
copySessionId: '复制会话 ID',
renamed: '已重命名',
renameFailed: '重命名失败',
renameSession: '重命名会话',
enterNewTitle: '输入新标题',
other: '其他',
runFailed: '运行失败',
error: '错误',
tool: '工具',
arguments: '参数',
result: '结果',
truncated: '... (已截断)',
},
// 定时任务
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: '重复次数(可选)',
repeatPlaceholder: '留空表示无限重复',
jobCreated: '任务已创建',
jobUpdated: '任务已更新',
nameRequired: '名称为必填项',
scheduleRequired: '调度表达式为必填项',
loadFailed: '加载任务失败',
jobPaused: '任务已暂停',
jobResumed: '任务已恢复',
jobTriggered: '任务已触发',
jobDeleted: '任务已删除',
status: {
running: '运行中',
paused: '已暂停',
disabled: '已禁用',
scheduled: '已调度',
},
info: {
schedule: '调度',
lastRun: '上次运行',
nextRun: '下次运行',
deliver: '投递',
repeat: '重复',
},
action: {
pause: '暂停',
pauseJob: '暂停任务',
resume: '恢复',
resumeJob: '恢复任务',
runNow: '立即运行',
triggerImmediately: '立即触发',
},
},
// 技能
skills: {
title: '技能',
searchPlaceholder: '搜索技能...',
noMatch: '没有匹配的技能',
noSkills: '暂无技能',
backTo: '返回',
attachedFiles: '附件文件',
loadFailed: '加载技能失败',
fileLoadFailed: '加载文件失败',
toggleFailed: '切换技能状态失败',
},
// 记忆
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...',
name: '名称',
autoGeneratedName: '根据 Base URL 自动生成',
baseUrl: 'Base URL',
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: '授权已过期,请重试。',
noProviders: '暂无 Provider,添加一个开始吧。',
builtIn: '内置',
customType: '自定义',
provider: 'Provider',
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: '仅限英文、数字、连字符',
newName: '新名称',
newNamePlaceholder: '输入新名称',
cloneFromCurrent: '从当前配置克隆',
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: '模型',
},
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: '每天在指定小时重置会话',
},
privacy: {
redactPii: '脱敏 PII',
redactPiiHint: '自动检测并隐藏敏感信息(密码、密钥等)',
},
apiServer: {
enable: '启用',
enableHint: '启用 API 服务器',
host: '主机',
hostHint: '监听地址',
port: '端口',
portHint: '监听端口',
key: '密钥',
keyHint: 'API 访问密钥',
cors: 'CORS 来源',
corsHint: '允许的跨域来源',
},
},
// 平台频道设置
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(逗号分隔)',
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: '已扫描,请在手机上确认...',
},
// 网关
gateways: {
title: '网关',
running: '运行中',
stopped: '已停止',
started: '已启动',
startFailed: '启动失败',
stopFailed: '停止失败',
},
// 语言
language: {
label: '语言',
zh: '中文',
en: 'English',
},
// 终端
terminal: {
sessions: '会话',
newTab: '新建终端',
closeSession: '关闭此会话?',
sessionExited: '已退出',
processExited: '进程已退出,代码 {code}',
},
// 用量统计
usage: {
title: '用量统计',
refresh: '刷新',
totalTokens: '总 Token 数',
inputTokens: '输入',
outputTokens: '输出',
totalSessions: '总会话数',
avgPerDay: '日均 ~{n}',
estimatedCost: '预估费用',
cacheHitRate: '缓存命中率',
modelBreakdown: '模型分布',
dailyTrend: '每日用量(近 30 天)',
date: '日期',
tokens: 'Token',
cache: '缓存',
sessions: '会话',
cost: '费用',
noData: '暂无用量数据',
},
// 文件管理
files: {
title: '文件',
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: '下载',
},
// 更新日志
changelog: {
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_3_1: '新增用户名/密码登录,支持与令牌认证并存',
new_0_4_3_2: '新增账户设置:配置密码、修改密码、修改用户名',
new_0_4_3_3: '侧边栏新增退出登录按钮',
new_0_4_3_4: '点击版本号查看更新日志弹窗',
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 检测和模型匹配问题',
new_0_4_1_1: '修复认证绕过、SPA 静态文件服务和 Provider 改进',
},
}