export default { // 登录 login: { title: 'Hermes Web UI', description: '输入访问令牌以继续。令牌在服务端启动日志中查看。', placeholder: '访问令牌', submit: '登录', tokenRequired: '请输入访问令牌', invalidToken: '令牌无效', connectionFailed: '无法连接到服务器', }, // 通用 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: '对话', jobs: '任务', models: '模型', profiles: '用户', skills: '技能', memory: '记忆', logs: '日志', usage: '用量', channels: '频道', gateways: '网关', terminal: '终端', groupConversation: '对话', groupPlatform: '平台', groupAgent: '代理', groupSystem: '系统', groupMonitoring: '监控', groupTools: '工具', settings: '设置', connected: '已连接', disconnected: '未连接', collapse: '收起菜单', expand: '展开菜单', updateTip: '在终端运行 "hermes-web-ui update" 即可更新', updateVersion: '升级版本 v{version}', updating: '正在更新...', updateSuccess: '更新完成,请重启服务', updateFailed: '更新失败', }, // 对话 chat: { emptyState: '开始与 Hermes Agent 对话', inputPlaceholder: '输入消息... (Enter 发送,Shift+Enter 换行)', attachFiles: '添加附件', stop: '停止', start: '启动', stopGateway: '停止网关', send: '发送', contextUsed: '上下文已用:', sessions: '会话', noSessions: '暂无会话', newChat: '新建对话', deleteSession: '确定删除此会话?', sessionDeleted: '会话已删除', rename: '重命名', 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: '授权已过期,请重试。', 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: '显示', 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: '定时重置时间', 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: '暂无用量数据', }, }