import { defineFieldCopy } from '@/app/settings/field-copy'
import type { Translations } from './types'
export const zh: Translations = {
common: {
apply: '应用',
back: '返回',
save: '保存',
saving: '保存中…',
cancel: '取消',
change: '更改',
choose: '选择',
clear: '清除',
close: '关闭',
collapse: '收起',
confirm: '确认',
connect: '连接',
connecting: '连接中',
continue: '继续',
copied: '已复制',
copy: '复制',
copyFailed: '复制失败',
delete: '删除',
docs: '文档',
done: '完成',
error: '错误',
failed: '失败',
free: '免费',
loading: '加载中…',
notSet: '未设置',
refresh: '刷新',
remove: '移除',
replace: '替换',
retry: '重试',
run: '运行',
send: '发送',
set: '设置',
skip: '跳过',
update: '更新',
on: '开',
off: '关'
},
fileMenu: {
revealFinder: '在访达中显示',
revealExplorer: '在文件资源管理器中显示',
revealFileManager: '打开所在文件夹',
revealInSidebar: '在文件树中显示',
copyPath: '复制路径',
copyRelativePath: '复制相对路径',
rename: '重命名…',
delete: '删除',
renameTitle: '重命名',
renameLabel: '新名称',
deleteTitle: name => `删除 ${name}?`,
deleteBody: '将移至废纸篓,你可以从那里恢复。',
pathCopied: '已复制路径'
},
boot: {
ready: 'Hermes 桌面版已就绪',
desktopBootFailedWithMessage: message => `桌面启动失败:${message}`,
steps: {
connectingGateway: '正在连接桌面网关',
loadingSettings: '正在加载 Hermes 设置',
loadingSessions: '正在加载最近会话',
startingDesktopConnection: '正在启动桌面连接',
startingHermesDesktop: '正在启动 Hermes 桌面版…'
},
errors: {
backgroundExited: 'Hermes 后台进程已退出。',
backgroundExitedDuringStartup: 'Hermes 后台进程在启动期间退出。',
backendStopped: '后端已停止',
desktopBootFailed: '桌面启动失败',
gatewayConnectionLost: '与网关的连接已断开',
gatewaySignInRequired: '需要登录网关',
ipcBridgeUnavailable: '桌面 IPC 桥不可用。'
},
failure: {
title: 'Hermes 无法启动',
description: '后台网关没有启动。请尝试下面的恢复步骤;这里不会删除你的对话或设置。',
remoteTitle: '需要重新登录远程网关',
remoteDescription: '你的远程网关会话已过期。请重新登录以恢复连接。这些操作不会删除你的对话或设置。',
retry: '重试',
repairInstall: '修复安装',
useLocalGateway: '使用本地网关',
openLogs: '打开日志',
repairHint: '修复会重新运行安装器,在新机器上可能需要几分钟。',
remoteSignInHint: '打开网关登录窗口。也可以使用本地网关切换到随应用提供的后端。',
hideRecentLogs: '隐藏最近日志',
showRecentLogs: '显示最近日志',
signedInTitle: '已登录',
signedInMessage: '正在重新连接远程网关…',
signInIncompleteTitle: '登录未完成',
signInIncompleteMessage: '登录窗口在认证完成前关闭。',
signInFailed: '登录失败',
signInToRemoteGateway: '登录远程网关',
signInWithProvider: provider => `使用 ${provider} 登录`,
identityProvider: '你的身份提供方'
}
},
notifications: {
region: '通知',
hide: '隐藏',
show: '显示',
more: count => `另外 ${count} 条通知`,
clearAll: '全部清除',
dismiss: '关闭通知',
details: '详情',
copyDetail: '复制详情',
copyDetailFailed: '无法复制通知详情',
backendOutOfDateTitle: '后端版本过旧',
backendOutOfDateMessage: '你的 Hermes 后端早于当前桌面构建,可能无法正常工作。请更新以保持一致。',
updateHermes: '更新 Hermes',
updateReadyTitle: '有可用更新',
updateReadyMessage: count => `有 ${count} 项新更改可用。`,
seeWhatsNew: '查看更新内容',
errors: {
elevenLabsNeedsKey: 'ElevenLabs STT 需要 ELEVENLABS_API_KEY。',
elevenLabsRejectedKey: 'ElevenLabs 拒绝了该 API key (401)。',
methodNotAllowed: '桌面后端拒绝了该请求 (405 Method Not Allowed)。请尝试重启 Hermes Desktop。',
microphonePermission: '麦克风权限已被拒绝。',
openaiRejectedApiKey: 'OpenAI 拒绝了该 API key。',
openaiRejectedApiKeyWithStatus: status => `OpenAI 拒绝了该 API key (${status} invalid_api_key)。`,
openaiTtsNeedsKey: 'OpenAI TTS 需要 VOICE_TOOLS_OPENAI_KEY 或 OPENAI_API_KEY。'
},
voice: {
configureSpeechToText: '配置语音转文字后即可使用语音模式。',
couldNotStartSession: '无法启动语音会话',
microphoneAccessDenied: '麦克风访问被拒绝。',
microphoneConstraintsUnsupported: '此设备不支持当前麦克风约束。',
microphoneFailed: '麦克风出错',
microphoneInUse: '麦克风正被其他应用占用。',
microphonePermissionDenied: '麦克风权限被拒绝。',
microphoneStartFailed: '无法开始麦克风录音。',
microphoneUnsupported: '当前运行环境不支持麦克风录音。',
noMicrophone: '未找到麦克风。',
noSpeechDetected: '没有检测到语音',
playbackFailed: '语音播放失败',
recordingFailed: '语音录制失败',
transcriptionFailed: '语音转写失败',
transcriptionUnavailable: '语音转写暂不可用。',
tryRecordingAgain: '请再录一次。',
unavailable: '语音不可用'
},
native: {
approvalTitle: '需要批准',
approveAction: '批准',
rejectAction: '拒绝',
inputTitle: '需要输入',
inputBody: 'Hermes 正在等待你的回应。',
turnDoneTitle: 'Hermes 已完成',
turnDoneBody: '回复已就绪。',
turnErrorTitle: '本轮失败',
backgroundDoneTitle: '后台任务已完成',
backgroundFailedTitle: '后台任务失败'
}
},
remoteDisplayBanner: {
message: reason => `软件渲染已启用 — 检测到远程显示(${reason})。为防止画面闪烁,已禁用 GPU 加速。`,
dismiss: '关闭'
},
titlebar: {
hideSidebar: '隐藏侧边栏',
showSidebar: '显示侧边栏',
search: '搜索',
searchTitle: '搜索会话、视图与操作',
swapSidebarSides: '交换侧边栏位置',
swapSidebarSidesTitle: '交换会话栏和文件浏览器的位置',
hideRightSidebar: '隐藏右侧栏',
showRightSidebar: '显示右侧栏',
muteHaptics: '关闭触感反馈',
unmuteHaptics: '开启触感反馈',
openSettings: '打开设置',
openStarmap: '打开记忆图谱',
openKeybinds: '键盘快捷键'
},
keybinds: {
title: '键盘快捷键',
subtitle: open => `点击快捷键即可重新绑定 · ${open} 可重新打开此面板。`,
rebind: '重新绑定',
reset: '恢复默认',
resetAll: '全部重置',
pressKey: '请按下按键…',
set: '设置',
conflictWith: label => `已绑定到“${label}”`,
categories: {
composer: '输入框',
profiles: '配置',
session: '会话',
navigation: '导航',
view: '视图'
},
actions: {
'keybinds.openPanel': '打开键盘快捷键',
'nav.commandPalette': '打开命令面板',
'nav.commandCenter': '打开命令中心',
'nav.settings': '打开设置',
'nav.profiles': '打开配置',
'nav.skills': '打开技能',
'nav.messaging': '打开消息',
'nav.artifacts': '打开制品',
'nav.cron': '打开定时任务',
'nav.agents': '打开智能体',
'session.new': '新建会话',
'session.newWindow': '在新窗口中新建会话',
'session.next': '下一个会话',
'session.prev': '上一个会话',
'session.slot.1': '切换到最近会话 1',
'session.slot.2': '切换到最近会话 2',
'session.slot.3': '切换到最近会话 3',
'session.slot.4': '切换到最近会话 4',
'session.slot.5': '切换到最近会话 5',
'session.slot.6': '切换到最近会话 6',
'session.slot.7': '切换到最近会话 7',
'session.slot.8': '切换到最近会话 8',
'session.slot.9': '切换到最近会话 9',
'session.focusSearch': '搜索会话',
'session.togglePin': '固定/取消固定当前会话',
'workspace.newWorktree': '新建工作树',
'composer.focus': '聚焦输入框',
'composer.modelPicker': '打开模型选择器',
'composer.voice': '开始 / 停止语音对话',
'view.toggleSidebar': '切换会话侧边栏',
'view.toggleRightSidebar': '切换文件浏览器',
'view.toggleReview': '切换审查面板',
'view.showFiles': '显示文件浏览器',
'view.showTerminal': '显示终端',
'view.terminalSelection': '将终端选区发送到输入框',
'view.closePreviewTab': '关闭预览标签',
'view.flipPanes': '交换侧边栏位置',
'appearance.toggleMode': '切换浅色/深色',
'profile.default': '切换到默认配置',
'profile.switch.1': '切换到配置 1',
'profile.switch.2': '切换到配置 2',
'profile.switch.3': '切换到配置 3',
'profile.switch.4': '切换到配置 4',
'profile.switch.5': '切换到配置 5',
'profile.switch.6': '切换到配置 6',
'profile.switch.7': '切换到配置 7',
'profile.switch.8': '切换到配置 8',
'profile.switch.9': '切换到配置 9',
'profile.switch.10': '切换到配置 10',
'profile.switch.11': '切换到配置 11',
'profile.switch.12': '切换到配置 12',
'profile.switch.13': '切换到配置 13',
'profile.switch.14': '切换到配置 14',
'profile.switch.15': '切换到配置 15',
'profile.switch.16': '切换到配置 16',
'profile.switch.17': '切换到配置 17',
'profile.switch.18': '切换到配置 18',
'profile.next': '下一个配置',
'profile.prev': '上一个配置',
'profile.toggleAll': '切换全部配置视图',
'profile.create': '创建配置',
'composer.send': '发送消息',
'composer.newline': '插入换行',
'composer.steer': '引导正在运行的回合',
'composer.sendQueued': '发送下一条排队消息',
'composer.mention': '引用文件、文件夹、网址',
'composer.slash': '斜杠命令面板',
'composer.help': '快速帮助',
'composer.history': '切换弹窗/历史',
'composer.cancel': '关闭弹窗·取消运行'
}
},
language: {
label: '语言',
description: '选择桌面界面的语言。',
saving: '正在保存语言…',
saveError: '语言更新失败',
switchTo: '切换语言',
searchPlaceholder: '搜索语言…',
noResults: '未找到语言'
},
settings: {
closeSettings: '关闭设置',
exportConfig: '导出配置',
importConfig: '导入配置',
resetToDefaults: '恢复默认',
resetConfirm: '将所有设置恢复为 Hermes 默认值?',
exportFailed: '导出失败',
resetFailed: '重置失败',
nav: {
providers: '提供方',
providerAccounts: '账号',
providerApiKeys: 'API 密钥',
gateway: '网关',
apiKeys: '工具与密钥',
keysTools: '工具',
keysSettings: '设置',
mcp: 'MCP',
archivedChats: '已归档对话',
about: '关于',
notifications: '通知'
},
notifications: {
title: '通知',
intro: '原生桌面通知,区别于应用内提示。设置按设备保存,每台电脑各自独立。',
enableAll: '启用通知',
enableAllDesc: '总开关。关闭后将静音下方所有通知。',
focusedHint: '完成提醒仅在 Hermes 处于后台时触发。',
kinds: {
approval: {
label: '需要批准',
description: '有命令正在等待你批准或拒绝。'
},
input: {
label: '需要输入',
description: 'Hermes 提出了问题,或需要密码或密钥。'
},
turnDone: {
label: '回复就绪',
description: 'Hermes 在后台时完成了一轮对话。'
},
turnError: {
label: '本轮失败',
description: '本轮以错误结束。'
},
backgroundDone: {
label: '后台任务完成',
description: '后台终端命令已完成。'
}
},
test: '发送测试通知',
testTitle: 'Hermes',
testBody: '通知工作正常。',
testSent: '测试已发送。如果没有出现,请检查系统通知权限和专注模式/勿扰模式。',
testUnsupported: '此系统不支持原生通知。',
completionSoundTitle: '完成提示音',
completionSoundDesc: '智能体回合结束时播放。可在此选择预设并预览。',
completionSoundPreview: '预览'
},
sections: {
model: '模型',
chat: '对话',
appearance: '外观',
workspace: '工作区',
safety: '安全',
memory: '记忆与上下文',
voice: '语音',
advanced: '高级'
},
searchPlaceholder: {
about: '关于 Hermes Desktop',
config: '搜索设置…',
gateway: '网关连接…',
keys: '搜索 API 密钥…',
mcp: '搜索 MCP 服务器…',
sessions: '搜索已归档会话…'
},
modeOptions: {
light: { label: '明亮', description: '明亮的桌面界面' },
dark: { label: '暗色', description: '低眩光工作区' },
system: { label: '跟随系统', description: '跟随系统外观' }
},
appearance: {
title: '外观',
intro: '这些是仅桌面端的显示偏好。模式控制明暗;主题控制强调色与对话界面样式。',
colorMode: '颜色模式',
colorModeDesc: '选择固定模式,或让 Hermes 跟随系统设置。',
toolViewTitle: '工具调用显示',
toolViewDesc: '产品模式隐藏原始工具数据;技术模式显示完整输入/输出。',
translucencyTitle: '窗口透明',
translucencyDesc: '让整个窗口透出桌面。仅支持 macOS 和 Windows。',
embedsTitle: '内嵌预览',
embedsDesc:
'富预览会从第三方网站(YouTube、X 等)加载。询问会在你允许前显示占位符;总是会自动加载;关闭则保留纯链接。',
embedsAsk: '询问',
embedsAlways: '总是',
embedsOff: '关闭',
embedsReset: (count: number) => `重置 ${count} 个已允许的服务`,
product: '产品',
productDesc: '易读的工具活动与简洁摘要。',
technical: '技术',
technicalDesc: '包含原始工具参数/结果及底层细节。',
themeTitle: '主题',
themeDesc: '仅桌面端调色板。所选模式叠加其上。',
themeProfileNote: profile => `已为「${profile}」配置文件保存——每个配置文件保留各自的主题。`,
installTitle: '从 VS Code 安装',
installDesc: '粘贴 Marketplace 扩展 ID(例如 dracula-theme.theme-dracula),将其配色主题转换为桌面调色板。',
installPlaceholder: 'publisher.extension',
installButton: '安装',
installing: '安装中…',
installError: '无法安装该主题。',
installed: name => `已安装「${name}」。`,
removeTheme: '移除主题',
importedBadge: '已导入',
pet: {
title: '宠物',
intro:
'领养一只悬浮在应用上的 petdex 动画宠物,它会根据 Hermes 的状态做出反应——工具执行时奔跑、成功时欢呼、出错时沮丧。',
restartHint: '宠物功能需要重启——当前运行的应用在此功能加入前启动。请退出并重新打开 Hermes,然后回到此处。',
scaleTitle: '大小',
scaleDesc: '调整悬浮宠物的大小,所有界面即时生效。',
roamTitle: '漫游',
roamDesc: '空闲时让宠物自己在窗口内四处走动。',
on: '开启',
off: '关闭',
chooseTitle: '选择宠物',
chooseDesc: '选择后会自动安装(如需)并设为当前宠物。',
searchPlaceholder: '搜索宠物…',
unreachable: '无法连接到 petdex 画廊。请检查网络连接并重新打开此页面。',
noMatch: query => `没有匹配「${query}」的宠物。`,
installedTag: '已安装',
generatedTag: '生成',
countCapped: (cap, total) => `显示 ${total} 个中的 ${cap} 个——输入关键词以缩小范围。`,
count: n => `${n} 个宠物。`,
uninstall: name => `卸载 ${name}`,
delete: name => `删除 ${name}`,
deleteTitle: name => `删除 ${name}?`,
deleteBody: '此操作会永久删除宠物,且无法重新安装。',
deleteConfirm: '删除',
rename: name => `重命名 ${name}`,
renameTitle: '重命名宠物',
renamePlaceholder: '给宠物起个名字',
renameSave: '保存',
exportPet: name => `导出 ${name}`,
adoptFailed: slug => `无法领养 ${slug}`,
uninstallFailed: slug => `无法卸载 ${slug}`,
renameFailed: slug => `无法重命名 ${slug}`,
exportFailed: slug => `无法导出 ${slug}`,
noneAvailable: '当前没有可开启的宠物。',
turnOnFailed: '无法开启宠物。',
turnOffFailed: '无法关闭宠物。'
}
},
fieldLabels: defineFieldCopy({
model: '默认模型',
modelContextLength: '上下文窗口',
fallbackProviders: '备用模型',
toolsets: '启用的工具集',
timezone: '时区',
display: {
personality: '人格',
showReasoning: '推理过程块'
},
agent: {
maxTurns: '最大智能体步数',
imageInputMode: '图片附件',
apiMaxRetries: 'API 重试次数',
serviceTier: '服务等级',
toolUseEnforcement: '工具调用强制'
},
terminal: {
cwd: '工作目录',
backend: '执行后端',
timeout: '命令超时',
persistentShell: '持久化 Shell',
envPassthrough: '环境变量透传',
dockerImage: 'Docker 镜像',
singularityImage: 'Singularity 镜像',
modalImage: 'Modal 镜像',
daytonaImage: 'Daytona 镜像'
},
fileReadMaxChars: '文件读取上限',
toolOutput: {
maxBytes: '终端输出上限',
maxLines: '文件分页上限',
maxLineLength: '行长度上限'
},
codeExecution: {
mode: '代码执行模式'
},
approvals: {
mode: '审批模式',
timeout: '审批超时',
mcpReloadConfirm: '确认 MCP 重载'
},
commandAllowlist: '命令白名单',
security: {
redactSecrets: '隐去密钥',
allowPrivateUrls: '允许私有 URL'
},
browser: {
allowPrivateUrls: '浏览器私有 URL',
autoLocalForPrivateUrls: '私有 URL 使用本地浏览器'
},
checkpoints: {
enabled: '文件检查点',
maxSnapshots: '检查点上限'
},
voice: {
recordKey: '语音快捷键',
maxRecordingSeconds: '最长录音时长',
autoTts: '朗读回复'
},
stt: {
enabled: '语音转文字',
provider: '语音转文字提供方',
local: {
model: '本地转写模型',
language: '转写语言'
},
openai: {
model: 'OpenAI STT 模型'
},
groq: {
model: 'Groq STT 模型'
},
mistral: {
model: 'Mistral STT 模型'
},
elevenlabs: {
modelId: 'ElevenLabs STT 模型',
languageCode: 'ElevenLabs 语言',
tagAudioEvents: '标记音频事件',
diarize: '说话人区分'
}
},
tts: {
provider: '文字转语音提供方',
edge: {
voice: 'Edge 语音'
},
openai: {
model: 'OpenAI TTS 模型',
voice: 'OpenAI 语音'
},
elevenlabs: {
voiceId: 'ElevenLabs 语音',
modelId: 'ElevenLabs 模型'
},
xai: {
voiceId: 'xAI (Grok) 语音',
language: 'xAI 语言'
},
minimax: {
model: 'MiniMax TTS 模型',
voiceId: 'MiniMax 语音'
},
mistral: {
model: 'Mistral TTS 模型',
voiceId: 'Mistral 语音'
},
gemini: {
model: 'Gemini TTS 模型',
voice: 'Gemini 语音'
},
neutts: {
model: 'NeuTTS 模型',
device: 'NeuTTS 设备'
},
kittentts: {
model: 'KittenTTS 模型',
voice: 'KittenTTS 语音'
},
piper: {
voice: 'Piper 语音'
}
},
memory: {
memoryEnabled: '持久记忆',
userProfileEnabled: '用户画像',
memoryCharLimit: '记忆预算',
userCharLimit: '画像预算',
provider: '记忆提供方'
},
context: {
engine: '上下文引擎'
},
compression: {
enabled: '自动压缩',
threshold: '压缩阈值',
targetRatio: '压缩目标',
protectLastN: '保护最近消息'
},
delegation: {
model: '子智能体模型',
provider: '子智能体提供方',
maxIterations: '子智能体轮次上限',
maxConcurrentChildren: '并行子智能体',
childTimeoutSeconds: '子智能体超时',
reasoningEffort: '子智能体推理强度'
},
updates: {
nonInteractiveLocalChanges: '应用内更新本地更改'
}
}),
fieldDescriptions: defineFieldCopy({
model: '用于新对话,除非你在输入框中选择其他模型。',
modelContextLength: '保持为 0 则使用所选模型检测到的上下文窗口。',
fallbackProviders: '默认模型失败时尝试的备用 provider:model 条目。',
display: {
personality: '新会话的默认助手风格。',
showReasoning: '当后端提供推理内容时予以显示。'
},
timezone: '当 Hermes 需要本地时间上下文时使用。留空则使用系统时区。',
agent: {
imageInputMode: '控制图片附件如何发送给模型。',
maxTurns: 'Hermes 停止一次运行前工具调用轮次的上限。'
},
terminal: {
cwd: '工具与终端操作的默认项目目录。',
persistentShell: '当后端支持时,在命令之间保留 Shell 状态。',
envPassthrough: '传入工具执行的环境变量。'
},
codeExecution: {
mode: '代码执行被限定到当前项目的严格程度。'
},
fileReadMaxChars: 'Hermes 单次文件读取可读取的最大字符数。',
approvals: {
mode: 'Hermes 如何处理需要显式审批的命令。',
timeout: '审批提示在超时前等待的时长。'
},
security: {
redactSecrets: '尽可能从模型可见内容中隐藏检测到的密钥。'
},
checkpoints: {
enabled: '在文件编辑前创建可回滚的快照。'
},
memory: {
memoryEnabled: '保存有助于未来会话的持久记忆。',
userProfileEnabled: '维护一份精简的用户偏好画像。'
},
context: {
engine: '在接近上下文上限时管理长对话的策略。'
},
compression: {
enabled: '当对话变大时对较早的上下文进行摘要。'
},
voice: {
autoTts: '自动朗读助手回复。'
},
stt: {
enabled: '启用本地或提供方支持的语音转写。',
elevenlabs: {
languageCode: '可选的 ISO-639-3 语言代码。留空让 ElevenLabs 自动检测。'
}
},
updates: {
nonInteractiveLocalChanges:
'Hermes 从应用内更新时(无终端提示),保留本地源码修改(暂存)或丢弃(放弃)。通过终端更新时始终会询问。'
}
}),
about: {
heading: 'Hermes Desktop',
version: value => `版本 ${value}`,
versionUnavailable: '版本不可用',
updates: '更新',
checkNow: '立即检查',
checking: '检查中…',
seeWhatsNew: '查看新增内容',
updateNow: '立即更新',
releaseNotes: '发行说明',
onLatest: '你已是最新版本。',
installing: '正在安装更新。',
cantUpdate: '此版本无法在应用内自我更新。',
cantReach: '无法连接更新服务器。',
tapCheck: '点击"立即检查"以查找更新。',
updateReady: count => `已准备好新更新 (包含 ${count} 项更改)。`,
lastChecked: age => `上次检查:${age}`,
justNowSuffix: ' · 刚刚',
automaticUpdates: '自动更新',
automaticUpdatesDesc: 'Hermes 会在后台自动检查更新,并在有可用更新时通知你。',
branchCommit: (branch, commit) => `分支 ${branch} · 提交 ${commit}`,
never: '从未',
justNow: '刚刚',
minAgo: count => `${count} 分钟前`,
hoursAgo: count => `${count} 小时前`,
daysAgo: count => `${count} 天前`
},
config: {
none: '无',
noneParen: '(无)',
notSet: '未设置',
commaSeparated: '逗号分隔的值',
loading: '正在加载 Hermes 配置...',
emptyTitle: '无可配置项',
emptyDesc: '此分区没有可调整的设置。',
failedLoad: '设置加载失败',
autosaveFailed: '自动保存失败',
imported: '配置已导入',
invalidJson: '配置 JSON 无效'
},
credentials: {
pasteKey: '粘贴密钥',
pasteLabelKey: label => `粘贴 ${label} 密钥`,
optional: '可选',
enterValueFirst: '请先输入一个值。',
couldNotSave: '无法保存凭据。',
remove: '移除',
or: '或',
escToCancel: '按 esc 取消',
getKey: '获取密钥',
saving: '保存中'
},
envActions: {
actionsFor: label => `${label} 的操作`,
credentialActions: '凭据操作',
docs: '文档',
hideValue: '隐藏值',
revealValue: '显示值',
replace: '替换',
set: '设置',
clear: '清除'
},
gateway: {
loading: '正在加载网关设置...',
unavailableTitle: '网关设置不可用',
unavailableDesc: '桌面 IPC 桥未暴露网关设置。',
title: '网关连接',
envOverride: '环境变量覆盖',
intro:
'Hermes Desktop 默认会启动自己的本地网关。当你希望此应用控制另一台机器上或可信代理后的现有 Hermes 后端时,可以使用远程网关。下面可按 profile 指定各自的远程主机。',
appliesTo: '应用于',
allProfiles: '所有 profile',
defaultConnection: '默认连接会用于所有没有自定义覆盖的 profile。',
profileConnection: profile => `仅当“${profile}”是当前 profile 时使用此连接。设为本地即可继承默认连接。`,
envOverrideTitle: '环境变量正在控制此桌面会话。',
envOverrideDesc: '取消设置 HERMES_DESKTOP_REMOTE_URL 和 HERMES_DESKTOP_REMOTE_TOKEN 后才会使用下面保存的设置。',
localTitle: '本地网关',
localDesc: '在 localhost 启动私有 Hermes 后端。这是默认方式,并且可离线工作。',
remoteTitle: '远程网关',
remoteDesc:
'将此桌面外壳连接到远程 Hermes 后端。托管网关使用 OAuth 或用户名密码;自托管网关也可能使用会话 token。',
remoteUrlTitle: '远程 URL',
remoteUrlDesc: '远程 dashboard 后端的基础 URL。支持路径前缀,例如 /hermes。',
probing: '正在检查此网关的认证方式…',
probeError: '暂时无法访问此网关。请检查 URL;网关响应后会显示认证方式。',
signedIn: '已登录',
signIn: '登录',
signOut: '退出登录',
signInWith: provider => `使用 ${provider} 登录`,
authTitle: '认证',
authSignedInPassword: '此网关使用用户名和密码。你已登录,会话会自动刷新。',
authSignedInOauth: '此网关使用 OAuth。你已登录,会话会自动刷新。',
authNeedsPassword: '此网关使用用户名和密码。请登录以授权此桌面应用。',
authNeedsOauth: provider => `此网关使用 OAuth。请使用 ${provider} 登录以授权此桌面应用。`,
tokenTitle: '会话 token',
tokenDesc: '用于 REST 和 WebSocket 访问的 dashboard 会话 token。留空则保留已保存的 token。',
existingToken: value => `现有 token ${value}`,
savedToken: '已保存',
pasteSessionToken: '粘贴会话 token',
testRemote: '测试远程',
saveForRestart: '保存到下次重启',
saveAndReconnect: '保存并重连',
diagnostics: '诊断',
diagnosticsDesc: '在文件管理器中显示 desktop.log,网关启动失败时很有用。',
openLogs: '打开日志',
incompleteTitle: '远程网关配置不完整',
incompleteSignIn: '切换到远程前,请输入远程 URL 并完成登录。',
incompleteToken: '切换到远程前,请输入远程 URL 和会话 token。',
incompleteSignInTest: '测试前,请输入远程 URL 并完成登录。',
incompleteTokenTest: '测试前,请输入远程 URL 和会话 token。',
enterUrlFirst: '请先输入远程 URL。',
restartingTitle: '网关连接正在重启',
savedTitle: '网关设置已保存',
restartingMessage: 'Hermes Desktop 将使用已保存设置重新连接。',
savedMessage: '已保存,下一次重启生效。',
connectedTo: (baseUrl, version) => `已连接到 ${baseUrl}${version ? ` · Hermes ${version}` : ''}`,
reachableTitle: '远程网关可访问',
signedOutTitle: '已退出登录',
signedOutMessage: '已清除远程网关会话。',
failedLoad: '网关设置加载失败',
signInFailed: '登录失败',
signOutFailed: '退出登录失败',
testFailed: '远程网关测试失败',
applyFailed: '无法应用网关设置',
saveFailed: '无法保存网关设置'
},
keys: {
loading: '正在加载 API 密钥和凭据...',
failedLoad: 'API 密钥加载失败',
empty: '此类别暂时没有配置项。'
},
mcp: {
loading: '正在加载 MCP 服务器...',
failedLoad: 'MCP 配置加载失败',
nameRequiredTitle: '需要名称',
nameRequiredMessage: '请为此 MCP 服务器提供配置键。',
objectRequired: '服务器配置必须是 JSON 对象',
invalidJson: 'MCP JSON 无效',
saveFailed: '保存失败',
removeFailed: '移除失败',
gatewayUnavailableTitle: '网关不可用',
gatewayUnavailableMessage: '重新加载 MCP 前请先重连网关。',
reloadedTitle: 'MCP 工具已重新加载',
reloadedMessage: '新的工具 schema 将应用到后续回合。',
reloadFailed: 'MCP 重新加载失败',
savedTitle: 'MCP 服务器已保存',
savedMessage: name => `${name} 会在 MCP 重新加载后生效。`,
newServer: '新服务器',
reload: '重新加载 MCP',
reloading: '重新加载中...',
emptyTitle: '没有 MCP 服务器',
emptyDesc: '添加 stdio 或 HTTP 服务器以暴露 MCP 工具。',
disabled: '已禁用',
editServer: '编辑服务器',
name: '名称',
serverJson: '服务器 JSON',
remove: '移除',
saveServer: '保存服务器'
},
model: {
loading: '正在加载模型配置...',
appliesDesc: '应用于新会话。可在输入框的模型选择器中临时切换当前对话。',
provider: '提供方',
model: '模型',
applying: '应用中...',
defaultsLabel: '默认值',
reasoning: '推理',
reasoningOff: '关闭',
defaultsFailed: '保存模型默认值失败',
auxiliaryTitle: '辅助模型',
resetAllToMain: '全部重置为主模型',
auxiliaryDesc: '辅助任务默认使用主模型。你可以为任意任务指定专用模型。',
setToMain: '设为主模型',
change: '更改',
autoUseMain: '自动 · 使用主模型',
providerDefault: '(提供方默认)',
tasks: {
vision: { label: '视觉', hint: '图片分析' },
web_extract: { label: '网页提取', hint: '页面总结' },
compression: { label: '压缩', hint: '上下文压缩' },
skills_hub: { label: '技能中心', hint: '技能搜索' },
approval: { label: '审批', hint: '智能自动批准' },
mcp: { label: 'MCP', hint: 'MCP 工具路由' },
title_generation: { label: '标题生成', hint: '会话标题' },
curator: { label: '维护器', hint: '技能使用审查' }
}
},
providers: {
connectAccount: '连接账号',
haveApiKey: '改用 API 密钥?',
intro: '使用订阅登录,无需复制 API 密钥。Hermes 会在应用中为你完成浏览器登录。',
connected: '已连接',
collapse: '收起',
connectAnother: '连接其他提供方',
otherProviders: '其他提供方',
disconnect: '断开连接',
disconnectInTerminal: '断开连接(在终端中运行移除命令)',
removeConfirm: provider => `移除 ${provider}?`,
removeExternalGeneric: provider => `${provider} 由其自身的 CLI 管理 — 请在那里移除。`,
removeKeyManaged: provider => `${provider} 由 API 密钥配置。请从 API Keys 中移除。`,
removeTerminalConfirm: (provider, command) => `断开 ${provider}?这将在终端中运行 "${command}" 以清除凭据。`,
removeTerminalRunning: provider => `正在终端中断开 ${provider}…`,
removedTitle: '账号已移除',
removedMessage: provider => `${provider} 已移除。`,
failedRemove: provider => `无法移除 ${provider}`,
noProviderKeys: '没有可用的提供方 API 密钥。',
searchKeys: '搜索提供方…',
noKeysMatch: '没有匹配的提供方。',
loading: '正在加载提供方...'
},
sessions: {
loading: '正在加载已归档会话…',
archivedTitle: '已归档会话',
archivedIntro: '已归档对话会从侧边栏隐藏,但会保留全部消息。在侧边栏 Ctrl/⌘ 点击对话即可归档。',
emptyArchivedTitle: '暂无归档',
emptyArchivedDesc: '归档一个对话后会显示在这里。',
unarchive: '取消归档',
deletePermanently: '永久删除',
messages: count => `${count} 条消息`,
restored: '已恢复',
deleteConfirm: title => `永久删除“${title}”?此操作无法撤销。`,
defaultDirTitle: '默认项目目录',
defaultDirDesc: '新会话默认从此文件夹开始,除非你选择其他目录。留空则使用你的 home 目录。',
defaultDirUpdated: '默认项目目录已更新',
defaultsTo: label => `默认使用 ${label}。`,
change: '更改',
choose: '选择',
clear: '清除',
notSet: '未设置',
failedLoad: '无法加载已归档会话',
unarchiveFailed: '取消归档失败',
deleteFailed: '删除失败',
updateDirFailed: '无法更新默认目录',
clearDirFailed: '无法清除默认目录'
},
toolsets: {
loadingConfig: '正在加载配置',
savedTitle: '凭据已保存',
savedMessage: key => `${key} 已更新。`,
removedTitle: '凭据已移除',
removedMessage: key => `${key} 已移除。`,
failedSave: key => `保存 ${key} 失败`,
failedRemove: key => `移除 ${key} 失败`,
failedReveal: key => `显示 ${key} 失败`,
removeConfirm: key => `从 .env 中移除 ${key}?`,
set: '已设置',
notSet: '未设置',
selectedTitle: '已选择提供方',
selectedMessage: provider => `${provider} 现在处于活动状态。`,
failedSelect: provider => `选择 ${provider} 失败`,
failedLoad: '工具配置加载失败',
noProviderOptions: '此工具集没有提供方选项;启用后即可使用当前配置。',
noProviders: '此工具集当前没有可用提供方。',
ready: '就绪',
nousIncluded: '包含在 Nous 订阅中;登录 Nous Portal 即可激活。',
noApiKeyRequired: '不需要 API 密钥。',
postSetupHint: step => `此后端需要一次性安装 (${step})。将在此机器上执行,可能需要几分钟。`,
postSetupRun: '运行设置',
postSetupRunning: '安装中…',
postSetupStarting: '启动中…',
postSetupCompleteTitle: '设置完成',
postSetupCompleteMessage: step => `已安装 ${step}。`,
postSetupErrorTitle: '设置完成但有错误',
postSetupErrorMessage: step => `请检查 ${step} 日志。`,
postSetupFailed: step => `运行 ${step} 设置失败`
}
},
skills: {
tabSkills: '技能',
tabToolsets: '工具集',
all: '全部',
searchSkills: '搜索技能…',
searchToolsets: '搜索工具集…',
refresh: '刷新技能',
refreshing: '正在刷新技能',
loading: '正在加载能力…',
noSkillsTitle: '未找到技能',
noSkillsDesc: '尝试更宽泛的搜索或其他分类。',
noToolsetsTitle: '未找到工具集',
noToolsetsDesc: '尝试更宽泛的搜索词。',
noDescription: '暂无描述。',
configured: '已配置',
needsKeys: '需要密钥',
toolsetsEnabled: (enabled, total) => `已启用 ${enabled}/${total} 个工具集`,
configureToolset: label => `配置 ${label}`,
toggleToolset: label => `切换 ${label} 工具集`,
skillsLoadFailed: '技能加载失败',
toolsetsRefreshFailed: '工具集刷新失败',
skillEnabled: '技能已启用',
skillDisabled: '技能已禁用',
toolsetEnabled: '工具集已启用',
toolsetDisabled: '工具集已禁用',
appliesToNewSessions: name => `${name} 将应用于新会话。`,
failedToUpdate: name => `更新 ${name} 失败`
},
starmap: {
title: '记忆图谱',
subtitle: (nodes, clusters) => `${clusters} 个类别中的 ${nodes} 个技能`,
close: '关闭记忆图谱',
refresh: '刷新',
memory: '记忆',
filterAll: '全部',
filterUsed: '已使用',
filterLearned: '已学习',
viewGraph: '图谱',
loadFailed: '无法加载记忆图谱',
loading: '加载中…',
emptyTitle: '尚无学习内容',
emptyDesc: '当 Hermes 为你的工作构建技能和记忆时,会显示在这里。',
share: '分享图谱',
shareHint: '复制代码以分享此图谱,或粘贴代码以载入。仅包含布局,不含你的记忆或技能内容。',
shareTitle: '导入 / 导出图谱',
sharePlaceholder: '粘贴图谱代码…',
copy: '复制图谱代码',
copied: '已复制!',
importMap: '导入图谱',
importBtn: '加载',
importEmpty: '粘贴图谱代码以加载。',
importSuccess: nodes => `已加载包含 ${nodes} 个节点的图谱。`,
importedBadge: '导入的图谱',
resetToMine: '返回我的图谱'
},
agents: {
close: '关闭代理',
title: '派生树',
subtitle: '当前回合的子代理实时活动。',
emptyTitle: '暂无活跃子代理',
emptyDesc: '当某个回合派发任务时,子代理会在此实时显示进度。',
running: '运行中',
failed: '失败',
done: '完成',
streaming: '流式传输',
files: '文件',
moreFiles: count => `还有 ${count} 个文件`,
delegation: index => `派发 ${index}`,
workers: count => `${count} 个工作单元`,
workersActive: count => `${count} 个活跃`,
agentsCount: count => `${count} 个代理`,
activeCount: count => `${count} 个活跃`,
failedCount: count => `${count} 个失败`,
toolsCount: count => `${count} 个工具`,
filesCount: count => `${count} 个文件`,
updatedAgo: age => `更新于 ${age}`,
ageNow: '刚刚',
ageSeconds: seconds => `${seconds} 秒前`,
ageMinutes: minutes => `${minutes} 分钟前`,
ageHours: hours => `${hours} 小时前`,
durationSeconds: seconds => `${seconds} 秒`,
durationMinutes: (minutes, seconds) => `${minutes} 分 ${seconds} 秒`,
tokensK: k => `${k}k 词元`,
tokens: value => `${value} 词元`
},
commandCenter: {
close: '关闭命令中心',
paletteTitle: '命令面板',
back: '返回',
searchPlaceholder: '搜索会话、视图与操作',
goTo: '前往',
goToSession: '前往会话',
branches: '分支',
startInBranch: branch => `在 ${branch} 中开始新对话`,
commandCenter: '命令中心',
appearance: '外观',
settings: '设置',
changeTheme: '更改主题',
changeColorMode: '更改颜色模式...',
pets: {
title: '宠物',
placeholder: '搜索宠物…',
loading: '正在加载 petdex 画廊…',
error: '无法连接到 petdex 画廊。',
staleBackend: '请重启 Hermes 以使用宠物功能——当前后端版本过旧。',
empty: '没有匹配的宠物。',
turnOff: '关闭',
turnOn: '开启',
installed: '已安装',
generatedTag: '生成',
adoptFailed: '无法领养该宠物。',
toggleFailed: '无法切换宠物显示。',
noneAvailable: '暂无可用宠物——请在下方选择一个安装。'
},
generatePet: {
title: '生成宠物',
placeholder: '描述要生成的宠物……',
promptHint: '输入描述,然后按 Enter 生成四种造型。',
readyHint: '按 Enter 根据描述生成四种造型。',
generate: '生成',
generating: '生成中……',
retry: '重试',
hatch: '孵化',
spawning: '召唤中……',
hatching: '正在孵化你的宠物……',
hatchingSub: '正在注入生命……',
hatched: '孵化成功!',
hatchRow: (_state, done, total) => `正在绘制画面…… ${done}/${total}`,
hatchComposing: '正在拼合……',
hatchSaving: '马上就好……',
namePlaceholder: '给宠物起个名字',
staleBackend: '请更新 Hermes 以生成宠物。',
backgroundHint: '你可以关闭此窗口——完成后 Hermes 会通知你。',
slowProviderHint: '这可能需要几分钟',
remix: '混合生成',
remixConfirmTitle: '以此造型混合生成?',
remixConfirmBody: '将以此造型为起点生成一组新草图,可能需要几分钟。',
genericError: '生成失败——请重试或选择一个建议。',
referenceImageTooLarge: '参考图过大。请使用小于 16 MB 的图片。',
referenceImageInvalid: '无法读取该参考图。请尝试 PNG、JPG、WebP 或 GIF。',
adopt: '领养',
startOver: '重新开始'
},
installTheme: {
title: '安装主题...',
placeholder: '搜索 VS Code Marketplace...',
loading: '正在搜索 Marketplace...',
error: '无法连接到 Marketplace。',
empty: '没有匹配的主题。',
install: '安装',
installing: '安装中...',
installed: '已安装',
installs: count => `${count} 次安装`
},
settingsFields: '设置字段',
mcpServers: 'MCP 服务器',
archivedChats: '已归档对话',
sections: { sessions: '会话', system: '系统', usage: '用量' },
sectionDescriptions: {
sessions: '搜索与管理会话',
system: '状态、日志与系统操作',
usage: '一段时间内的词元、成本与技能活动'
},
nav: {
newChat: { title: '新建会话', detail: '开始一个新会话' },
settings: { title: '设置', detail: '配置 Hermes 桌面端' },
skills: { title: '技能与工具', detail: '启用技能、工具集与提供方' },
messaging: { title: '消息平台', detail: '配置 Telegram、Slack、Discord 等' },
artifacts: { title: '产物', detail: '浏览生成的输出' }
},
sectionEntries: {
sessions: { title: '会话面板', detail: '搜索、置顶与管理会话' },
system: { title: '系统面板', detail: '网关状态、日志、重启/更新' },
usage: { title: '用量面板', detail: '词元、成本与技能活动' }
},
providerNavigate: '导航',
providerSessions: '会话',
refresh: '刷新',
refreshing: '刷新中…',
noResults: '未找到匹配结果。',
pinSession: '置顶会话',
unpinSession: '取消置顶',
exportSession: '导出会话',
deleteSession: '删除会话',
noSessions: '暂无会话。',
gatewayRunning: '消息网关运行中',
gatewayStopped: '消息网关已停止',
hermesActiveSessions: (version, count) => `Hermes ${version} · 活跃会话 ${count}`,
restartGateway: '重启网关',
gatewayRestartFailed: '网关重启失败。',
updateHermes: '更新 Hermes',
actionRunning: '运行中',
actionDone: '完成',
actionFailed: '失败',
actionStartedWaiting: '操作已启动,等待状态…',
loadingStatus: '正在加载状态…',
recentLogs: '最近日志',
noLogs: '尚未加载日志。',
days: count => `${count} 天`,
statSessions: '会话',
statApiCalls: 'API 调用',
statTokens: '输入/输出词元',
statCost: '预估成本',
actualCost: cost => `实际 ${cost}`,
loadingUsage: '正在加载用量…',
noUsage: period => `最近 ${period} 天暂无用量。`,
retry: '重试',
dailyTokens: '每日词元',
input: '输入',
output: '输出',
noDailyActivity: '暂无每日活动。',
topModels: '常用模型',
noModelUsage: '暂无模型用量。',
topSkills: '常用技能',
noSkillActivity: '暂无技能活动。',
actions: count => `${count} 次操作`
},
messaging: {
search: '搜索消息平台…',
loading: '正在加载消息平台…',
loadFailed: '消息平台加载失败',
states: {
connected: '已连接',
connecting: '连接中',
disabled: '已禁用',
fatal: '错误',
gateway_stopped: '消息网关已停止',
not_configured: '需要设置',
pending_restart: '需要重启',
retrying: '重试中',
startup_failed: '启动失败'
},
unknown: '未知',
hintPendingRestart: '在状态栏重启网关以应用此更改。',
hintGatewayStopped: '在状态栏启动网关以建立连接。',
credentialsSet: '凭据已设置',
needsSetup: '需要设置',
gatewayStopped: '消息网关已停止',
getCredentials: '获取你的凭据',
openSetupGuide: '打开设置指南',
required: '必填',
recommended: '推荐',
advanced: count => `高级 (${count})`,
noTokenNeeded: '此平台无需在此填写令牌。请按上方设置指南操作,然后在下方启用。',
enabled: '已启用',
disabled: '已禁用',
unsavedChanges: '有未保存的更改',
saving: '保存中…',
saveChanges: '保存更改',
saved: '已保存',
replaceValue: '替换当前值',
openDocs: '打开文档',
clearField: key => `清除 ${key}`,
enableAria: name => `启用 ${name}`,
disableAria: name => `禁用 ${name}`,
platformEnabled: name => `${name} 已启用`,
platformDisabled: name => `${name} 已禁用`,
restartToApply: '此更改将在网关重启后生效。',
setupSaved: name => `${name} 设置已保存`,
restartToReconnect: '新凭据将在网关重启后生效。',
keyCleared: key => `${key} 已清除`,
setupUpdated: name => `${name} 设置已更新。`,
failedUpdate: name => `更新 ${name} 失败`,
failedSave: name => `保存 ${name} 失败`,
failedClear: key => `清除 ${key} 失败`,
fieldCopy: {
TELEGRAM_BOT_TOKEN: {
label: 'Bot 令牌',
help: '用 @BotFather 创建一个机器人,然后粘贴它给你的令牌。',
placeholder: '粘贴 Telegram bot 令牌'
},
TELEGRAM_ALLOWED_USERS: {
label: '允许的 Telegram 用户 ID',
help: '推荐。来自 @userinfobot 的逗号分隔数字 ID。不设置则任何人都能私信你的机器人。'
},
TELEGRAM_PROXY: { label: '代理 URL', help: '仅在 Telegram 被屏蔽的网络中需要。' },
DISCORD_BOT_TOKEN: { label: 'Bot 令牌', help: '在 Discord 开发者门户创建应用,添加机器人,然后粘贴其令牌。' },
DISCORD_ALLOWED_USERS: { label: '允许的 Discord 用户 ID', help: '推荐。逗号分隔的 Discord 用户 ID。' },
DISCORD_REPLY_TO_MODE: { label: '回复方式', help: 'first、all 或 off。' },
DISCORD_ALLOW_ALL_USERS: {
label: '允许所有 Discord 用户',
help: '仅用于开发。为 true 时,任何人都可以私信 bot,不需要允许列表。'
},
DISCORD_HOME_CHANNEL: { label: '主页频道 ID', help: 'bot 主动发送消息的频道(cron 输出、提醒等)。' },
DISCORD_HOME_CHANNEL_NAME: { label: '主页频道名称', help: '日志和状态输出中显示的主页频道名称。' },
BLUEBUBBLES_ALLOW_ALL_USERS: { label: '允许所有 iMessage 用户', help: '为 true 时跳过 BlueBubbles 允许列表。' },
MATTERMOST_ALLOW_ALL_USERS: { label: '允许所有 Mattermost 用户' },
MATTERMOST_HOME_CHANNEL: { label: '主页频道' },
QQ_ALLOW_ALL_USERS: { label: '允许所有 QQ 用户' },
QQBOT_HOME_CHANNEL: { label: 'QQ 主页频道', help: 'cron 投递的默认频道或群组。' },
QQBOT_HOME_CHANNEL_NAME: { label: 'QQ 主页频道名称' },
SLACK_BOT_TOKEN: {
label: 'Slack bot 令牌',
help: '安装 Slack 应用后,在 OAuth & Permissions 中找到 bot 令牌。',
placeholder: '粘贴 Slack bot 令牌'
},
SLACK_APP_TOKEN: {
label: 'Slack app 令牌',
help: 'Socket Mode 需要 app 级令牌。',
placeholder: '粘贴 Slack app 令牌'
},
SLACK_ALLOWED_USERS: { label: '允许的 Slack 用户 ID', help: '推荐。逗号分隔的 Slack 用户 ID。' },
MATTERMOST_URL: { label: '服务器 URL', placeholder: 'https://mattermost.example.com' },
MATTERMOST_TOKEN: { label: 'Bot 令牌' },
MATTERMOST_ALLOWED_USERS: { label: '允许的用户 ID', help: '推荐。逗号分隔的 Mattermost 用户 ID。' },
MATRIX_HOMESERVER: { label: 'Homeserver URL', placeholder: 'https://matrix.org' },
MATRIX_ACCESS_TOKEN: { label: '访问令牌' },
MATRIX_USER_ID: { label: 'Bot 用户 ID', placeholder: '@hermes:example.org' },
MATRIX_ALLOWED_USERS: { label: '允许的 Matrix 用户 ID', help: '推荐。@user:server 格式的逗号分隔用户 ID。' },
SIGNAL_HTTP_URL: {
label: 'Signal 桥接 URL',
placeholder: 'http://127.0.0.1:8080',
help: '运行中的 signal-cli REST 桥接的 URL。'
},
SIGNAL_ACCOUNT: { label: '电话号码', help: '在 signal-cli 桥接中注册的号码。' },
SIGNAL_ALLOWED_USERS: { label: '允许的 Signal 用户', help: '推荐。逗号分隔的 Signal 标识符。' },
WHATSAPP_ENABLED: { label: '启用 WhatsApp 桥接', help: '由下方开关自动设置。除非确知需要,否则请勿改动。' },
WHATSAPP_MODE: { label: '桥接模式' },
WHATSAPP_ALLOWED_USERS: { label: '允许的 WhatsApp 用户', help: '推荐。逗号分隔的电话号码或 WhatsApp ID。' }
},
platformIntro: {
telegram:
'在 Telegram 中,与 @BotFather 对话,运行 /newbot,复制它给你的令牌。然后从 @userinfobot 获取你的数字用户 ID。',
discord:
'打开 Discord 开发者门户,创建应用,添加 Bot,然后复制其令牌。用正确的权限范围把机器人邀请到你的服务器。',
slack: '创建 Slack 应用,启用 Socket Mode,安装到你的工作区,然后复制 bot 令牌和 app 级令牌。',
mattermost: '在你的 Mattermost 服务器上,创建机器人账户或个人访问令牌,然后在此粘贴服务器 URL 和令牌。',
matrix: '用机器人账户登录你的 homeserver,然后复制访问令牌、用户 ID 和 homeserver URL。',
signal: '在可访问的位置运行 signal-cli REST 桥接,然后把 Hermes 指向该 URL 和已注册的电话号码。',
whatsapp: '启动 Hermes 自带的 WhatsApp 桥接,首次运行时扫描二维码,然后启用该平台。',
bluebubbles:
'在装有 iMessage 的 Mac 上运行 BlueBubbles Server,暴露其 API,然后用服务器密码把 Hermes 指向该 URL。',
homeassistant: '在 Home Assistant 中打开你的个人资料并创建长期访问令牌。把它连同你的 HA URL 一起粘贴到这里。',
email: '使用专用邮箱。对于 Gmail/Workspace,创建应用专用密码并使用 imap.gmail.com / smtp.gmail.com。',
sms: '从 Twilio 控制台获取你的 Account SID 和 Auth Token,以及一个可发送短信的电话号码。',
dingtalk: '在开发者控制台创建钉钉应用,然后在此复制 Client ID(App key) 和 Client Secret。',
feishu: '创建飞书 / Lark 应用,配置机器人能力,复制 App ID、App secret 和事件加密密钥。',
wecom: '在企业微信中添加群机器人,复制其 webhook key 作为 WECOM_BOT_ID。仅可发送——双向请用企业微信 (应用) 选项。',
wecom_callback: '设置一个企业微信自建应用,暴露其回调 URL,并提供 corp ID、secret、agent ID 和 AES key。',
weixin:
'运行 `hermes gateway setup`,选择 Weixin,然后使用个人微信账号扫描并确认二维码。Hermes 会通过腾讯 iLink Bot API 连接并保存凭据。',
qqbot: '在 QQ 开放平台 (q.qq.com) 注册一个应用,复制 App ID 和 Client Secret。',
api_server:
'把 Hermes 暴露为兼容 OpenAI 的 API。设置一个鉴权密钥,然后把 Open WebUI / LobeChat 等指向 host:port。',
webhook: '运行一个 HTTP 服务器,供其他工具 (GitHub、GitLab、自定义应用)POST。用 secret 验证签名。'
}
},
profiles: {
close: '关闭配置档案',
nameHint: '小写字母、数字、连字符和下划线。必须以字母或数字开头。',
title: '配置档案',
count: count => `${count} 个配置档案`,
search: '搜索配置档案…',
loading: '正在加载配置档案…',
newProfile: '新建配置档案',
allProfiles: '全部配置档案',
showAllProfiles: '显示全部配置档案',
switchToProfile: name => `切换到 ${name}`,
manageProfiles: '管理配置档案...',
actionsFor: name => `${name} 的操作`,
color: '颜色...',
colorFor: name => `${name} 的颜色`,
setColor: color => `设置颜色 ${color}`,
autoColor: '自动',
noProfiles: '暂无配置档案。',
selectPrompt: '选择一个配置档案以查看其详情。',
refresh: '刷新配置档案',
refreshing: '正在刷新配置档案',
default: '默认',
skills: count => `${count} 个技能`,
env: 'env',
defaultBadge: '默认',
rename: '重命名',
copySetup: '复制安装命令',
copying: '复制中…',
modelLabel: '模型',
skillsLabel: '技能',
notSet: '未设置',
soulDesc: '内置于此配置档案的系统提示词与人格指令。',
soulOptional: '可选',
soulPlaceholder: mode => `此配置档案的系统提示词 / 人格说明。\n留空则保留${mode}默认值。`,
soulPlaceholderCloned: '克隆的',
soulPlaceholderEmpty: '空的',
unsavedChanges: '有未保存的更改',
loadingSoul: '正在加载 SOUL.md…',
emptySoul: '空的 SOUL.md —— 开始撰写人格设定…',
saving: '保存中…',
saveSoul: '保存 SOUL.md',
deleteTitle: '删除配置档案?',
deleteDescPrefix: '这将删除 ',
deleteDescMid: ' 并移除其 ',
deleteDescSuffix: ' 目录。此操作无法撤销。',
deleting: '删除中…',
createDesc: '配置档案是相互独立的 Hermes 环境:各自拥有独立的配置、技能和 SOUL.md。',
nameLabel: '名称',
cloneFrom: '克隆来源',
cloneFromNone: '无(空白)',
cloneFromDesc: '从选中的来源配置档案复制配置、技能和 SOUL.md。',
cloneFromDefault: '从默认档案克隆',
cloneFromDefaultDesc: '从你的默认配置档案复制配置、技能和 SOUL.md。',
invalidName: hint => `名称无效。${hint}`,
nameRequired: '名称为必填项。',
creating: '创建中…',
createAction: '创建配置档案',
renameTitle: '重命名配置档案',
renameDescPrefix: '重命名会更新配置档案目录以及 ',
renameDescSuffix: ' 中的所有包装脚本。',
newNameLabel: '新名称',
renaming: '重命名中…',
created: '配置档案已创建',
renamed: '配置档案已重命名',
deleted: '配置档案已删除',
setupCopied: '安装命令已复制',
soulSaved: 'SOUL.md 已保存',
failedLoad: '加载配置档案失败',
failedDelete: '删除配置档案失败',
failedCopy: '复制安装命令失败',
failedLoadSoul: '加载 SOUL.md 失败',
failedSaveSoul: '保存 SOUL.md 失败',
failedCreate: '创建配置档案失败',
failedRename: '重命名配置档案失败'
},
cron: {
close: '关闭定时任务',
title: '定时任务',
count: count => `${count} 个任务`,
search: '搜索定时任务…',
loading: '正在加载定时任务…',
states: {
enabled: '已启用',
scheduled: '已排程',
running: '运行中',
paused: '已暂停',
disabled: '已禁用',
error: '错误',
completed: '已完成'
},
deliveryLabels: {
local: '此桌面',
telegram: 'Telegram',
discord: 'Discord',
slack: 'Slack',
email: '电子邮件'
},
scheduleLabels: {
daily: '每天',
weekdays: '工作日',
weekly: '每周',
monthly: '每月',
hourly: '每小时',
'every-15-minutes': '每 15 分钟',
custom: '自定义'
},
scheduleHints: {
daily: '每天上午 9:00',
weekdays: '周一至周五上午 9:00',
weekly: '每周一上午 9:00',
monthly: '每月第一天上午 9:00',
hourly: '每个整点',
'every-15-minutes': '每 15 分钟',
custom: 'Cron 语法或自然语言'
},
days: {
'0': '周日',
'1': '周一',
'2': '周二',
'3': '周三',
'4': '周四',
'5': '周五',
'6': '周六',
'7': '周日'
},
dayFallback: value => `第 ${value} 天`,
everyDayAt: time => `每天 ${time}`,
weekdaysAt: time => `工作日 ${time}`,
everyDayOfWeekAt: (day, time) => `每${day} ${time}`,
monthlyOnDayAt: (dayOfMonth, time) => `每月 ${dayOfMonth} 日 ${time}`,
topOfHour: '每个整点',
everyHourAt: minute => `每小时的 :${minute}`,
newCron: '新建定时任务',
emptyDescNew: '按 cron 表达式排程一个提示词。Hermes 会运行它,并把结果发送到你选择的目的地。',
emptyDescSearch: '尝试更宽泛的搜索词。',
emptyTitleNew: '暂无排程任务',
emptyTitleSearch: '无匹配项',
last: '上次:',
next: '下次:',
noRuns: '尚无运行',
manage: '管理',
showRuns: '显示运行记录',
hideRuns: '隐藏运行记录',
runHistory: '运行记录',
actionsFor: title => `${title} 的操作`,
actionsTitle: '定时任务操作',
resume: '恢复定时任务',
pause: '暂停定时任务',
resumeTitle: '恢复',
pauseTitle: '暂停',
triggerNow: '立即触发',
edit: '编辑定时任务',
deleteTitle: '删除定时任务?',
deleteDescPrefix: '这将永久移除 ',
deleteDescSuffix: '。它会立即停止触发。',
deleting: '删除中…',
resumed: '定时任务已恢复',
paused: '定时任务已暂停',
triggered: '定时任务已触发',
deleted: '定时任务已删除',
created: '定时任务已创建',
updated: '定时任务已更新',
failedLoad: '加载定时任务失败',
failedUpdate: '更新定时任务失败',
failedTrigger: '触发定时任务失败',
failedDelete: '删除定时任务失败',
failedSave: '保存定时任务失败',
editTitle: '编辑定时任务',
createTitle: '新建定时任务',
editDesc: '更新排程、提示词或投递目标。更改将在下次运行时生效。',
createDesc: '排程一个提示词以自动运行。使用 cron 语法或类似"每 15 分钟"的自然语言。',
nameLabel: '名称',
namePlaceholder: '晨间简报',
promptLabel: '提示词',
promptPlaceholder: '总结我未读的 Slack 话题,并把前 5 条邮件发给我…',
frequencyLabel: '频率',
deliverLabel: '投递至',
customScheduleLabel: '自定义排程',
customPlaceholder: '0 9 * * * 或 weekdays at 9am',
customHint: 'Cron 表达式,或类似"每小时""工作日上午 9 点"的短语。',
optional: '可选',
promptScheduleRequired: '提示词和排程为必填项。',
saveChanges: '保存更改',
createAction: '创建定时任务'
},
artifacts: {
search: '搜索产物…',
refresh: '刷新产物',
refreshing: '正在刷新产物',
indexing: '正在索引最近会话的产物',
tabAll: '全部',
tabImages: '图片',
tabFiles: '文件',
tabLinks: '链接',
noArtifactsTitle: '未找到产物',
noArtifactsDesc: '当会话生成图片和文件输出时,它们会显示在这里。',
failedLoad: '产物加载失败',
openFailed: '打开失败',
itemsImage: '张图片',
itemsLink: '个链接',
itemsFile: '个文件',
itemsGeneric: '项',
zero: '0',
rangeOf: (start, end, total) => `${start}-${end},共 ${total}`,
goToPage: (itemLabel, page) => `前往${itemLabel}第 ${page} 页`,
colTitleLink: '链接标题',
colTitleFile: '名称',
colTitleDefault: '标题 / 名称',
colLocationLink: 'URL',
colLocationFile: '路径',
colLocationDefault: '位置',
colSession: '会话',
kindImage: '图片',
kindFile: '文件',
kindLink: '链接',
chat: '对话',
copyUrl: '复制 URL',
copyPath: '复制路径'
},
sidebar: {
nav: {
'new-session': '新建会话',
skills: '技能与工具',
messaging: '消息平台',
artifacts: '产物'
},
searchAria: '搜索会话',
searchPlaceholder: '搜索会话…',
clearSearch: '清除搜索',
noMatch: query => `没有会话匹配"${query}"。`,
results: '结果',
pinned: '已置顶',
sessions: '会话',
cronJobs: '定时任务',
groupAriaGrouped: '以单一列表显示会话',
groupAriaUngrouped: '按工作区分组会话',
showProjects: '显示项目',
showSessions: '显示会话',
groupTitleGrouped: '取消分组',
groupTitleUngrouped: '按工作区分组',
allPinned: '这里的全部已置顶。取消置顶某个对话即可在最近中显示。',
shiftClickHint: 'Shift+ 单击对话以置顶 · 拖动以重新排序',
noWorkspace: '无工作区',
noProject: '无项目',
projectEmpty: '暂无会话',
noSessions: '暂无会话',
projects: {
sectionLabel: '项目',
newButton: '新建项目',
createTitle: '新建项目',
createDesc: '为工作区命名并添加一个或多个文件夹。',
renameTitle: '重命名项目',
addFolderTitle: '添加文件夹',
namePlaceholder: '例如 Skunkworks',
foldersLabel: '文件夹',
ideaLabel: '想法',
ideaPlaceholder: '这个项目是关于什么的?(保存到 IDEA.md)',
ideaGenerate: '生成想法',
ideaGenerating: '生成中…',
ideaShuffle: '随机模板',
noFolders: '尚未添加文件夹。',
addFolder: '添加文件夹',
primaryBadge: '主',
removeFolder: '移除',
create: '创建',
menu: '项目操作',
menuRename: '重命名',
menuAppearance: '外观',
noColor: '无颜色',
menuAddFolder: '添加文件夹',
menuSetActive: '设为活动',
menuDelete: '删除',
reveal: '在文件夹中显示',
copyPath: '复制路径',
removeFromSidebar: '从侧边栏移除',
createFailed: '无法创建项目',
staleBackend:
'请更新 Hermes 后端以创建项目——当前后端比桌面应用旧(设置 → 更新 → 后端)。',
deleteConfirm: '这会从 Hermes 中移除已保存的项目。文件、git 仓库和工作树保持不变。',
startWork: '新建工作树',
newWorktreeTitle: '新建工作树',
newWorktreeDesc: '为这个工作树命名分支。',
branchPlaceholder: '例如 my-feature',
startWorkFailed: '无法创建工作树',
convertBranch: '转换分支…',
convertBranchTitle: '转换分支',
convertBranchDesc: '打开已检出的分支,或为可用分支创建工作树。',
convertBranchPlaceholder: '搜索分支…',
convertBranchInstead: '转换现有分支',
branchOpenExisting: '打开',
branchSwitchHome: '切回主检出',
branchCreateWorktree: '新工作树',
branchesLoading: '正在加载分支…',
noBranches: '未找到分支',
removeWorktree: '移除工作树',
removeWorktreeFailed: '无法移除工作树(存在未提交更改?)',
removeWorktreeConfirm:
'从 git 中移除(删除工作树目录,但保留分支),或仅从侧边栏隐藏该泳道并将工作树保留在磁盘上。',
removeWorktreeDirty: '此工作树有未提交的更改。强制移除(丢弃这些更改),或仅隐藏泳道并保留在磁盘上。',
forceRemove: '强制移除',
enter: label => `打开 ${label}`,
reorder: label => `重新排序 ${label}`,
toggle: label => `展开/收起 ${label} 会话`,
back: '全部项目'
},
newSessionIn: label => `在 ${label} 中新建会话`,
showMoreIn: (count, label) => `在 ${label} 中再显示 ${count} 个`,
loading: '加载中…',
loadMore: '加载更多',
loadCount: step => `再加载 ${step} 个`,
row: {
pin: '置顶',
unpin: '取消置顶',
copyId: '复制 ID',
export: '导出',
branchFrom: '分支',
rename: '重命名',
archive: '归档',
newWindow: '新窗口',
copyIdFailed: '无法复制会话 ID',
actionsFor: title => `${title} 的操作`,
sessionActions: '会话操作',
sessionRunning: '会话运行中',
needsInput: '需要你输入',
waitingForAnswer: '正在等待你的回答',
handoffOrigin: platform => `从 ${platform} 转接`,
renamed: '已重命名',
renameFailed: '重命名失败',
renameTitle: '重命名会话',
renameDesc: '给这个对话起一个好记的标题。留空则清除。',
untitledPlaceholder: '无标题会话',
ageNow: '刚刚',
ageDay: '天',
ageHour: '时',
ageMin: '分'
}
},
composer: {
message: '消息',
wakingProfile: profile => `正在唤醒 ${profile}…`,
placeholderStarting: '正在启动 Hermes…',
placeholderReconnecting: '正在重新连接 Hermes…',
placeholderFollowUp: '发送后续消息',
newSessionPlaceholders: [
'我们要构建什么?',
'给 Hermes 一个任务',
'你在想什么?',
'描述你需要什么',
'我们该处理什么?',
'随便问点什么',
'从一个目标开始'
],
followUpPlaceholders: [
'发送后续消息',
'补充更多上下文',
'细化这个请求',
'下一步是什么?',
'继续推进',
'再深入一点',
'调整或继续'
],
startVoice: '开始语音对话',
queueMessage: '排队消息',
steer: '引导当前运行',
stop: '停止',
send: '发送',
speaking: '讲话中',
transcribing: '转写中',
thinking: '思考中',
muted: '已静音',
listening: '聆听中',
muteMic: '麦克风静音',
unmuteMic: '取消麦克风静音',
stopListening: '停止聆听并发送',
stopShort: '停止',
endConversation: '结束语音对话',
endShort: '结束',
stopDictation: '停止听写',
transcribingDictation: '正在转写听写',
voiceDictation: '语音听写',
speakReplies: '朗读回复',
stopSpeakingReplies: '停止朗读回复',
lookupLoading: '查找中…',
lookupNoMatches: '没有匹配项。',
lookupTry: '试试',
lookupOr: '或',
commonCommands: '常用命令',
hotkeys: '快捷键',
helpFooter: '打开完整面板 · 退格键关闭',
commandDescs: {
'/help': '命令与快捷键的完整列表',
'/clear': '开始新会话',
'/resume': '恢复之前的会话',
'/details': '控制对话记录的详细程度',
'/copy': '复制所选内容或最后一条助手消息',
'/quit': '退出 hermes'
},
hotkeyDescs: {
'composer.mention': '引用文件、文件夹、URL、git',
'composer.slash': '斜杠命令面板',
'composer.help': '此快速帮助 (删除以关闭)',
'composer.sendNewline': '发送 · Shift+Enter 换行',
'composer.sendQueued': '发送下一条排队的回合',
'keybinds.openPanel': '所有键盘快捷键',
'composer.cancel': '关闭弹窗 · 取消运行',
'composer.history': '循环弹窗 / 历史'
},
attachUrlTitle: '附加 URL',
attachUrlDesc: 'Hermes 将抓取该页面并作为本回合的上下文。',
urlPlaceholder: 'https://example.com/post',
urlHintPre: '请包含完整 URL,例如 ',
attach: '附加',
queued: count => `${count} 条排队`,
attachmentOnly: '仅附件回合',
emptyTurn: '空回合',
attachments: count => `${count} 个附件`,
editingInComposer: '正在输入框中编辑',
editingQueuedInComposer: '正在输入框中编辑排队回合',
queueEdit: '编辑',
queueSendNext: '下一个',
queueSend: '发送',
queueDelete: '删除',
queueStuckTitle: '排队消息未发送',
queueStuckBody: '排队的对话多次发送失败。它仍在队列中,请重试发送。',
previewUnavailable: '预览不可用',
previewLabel: label => `预览 ${label}`,
couldNotPreview: label => `无法预览 ${label}`,
removeAttachment: label => `移除 ${label}`,
dictating: '听写中',
preparingAudio: '正在准备音频',
speakingResponse: '正在朗读回复',
readingAloud: '朗读中',
themeSuggestions: '桌面主题建议',
noMatchingThemes: '没有匹配的主题。',
themeTryPre: '试试 ',
themeTryPost: '。',
attachLabel: '附加',
files: '文件…',
folder: '文件夹…',
images: '图片…',
pasteImage: '粘贴图片',
url: 'URL…',
promptSnippets: '提示词片段…',
tipPre: '提示:输入 ',
tipPost: ' 以内联引用文件。',
snippetsTitle: '提示词片段',
snippetsDesc: '选择一个起始提示词放入输入框。',
dropFiles: '拖放文件以附加',
dropSession: '拖放以链接此对话',
snippets: {
codeReview: {
label: '代码审查',
description: '审查当前更改是否存在回归、遗漏的边界情况和缺失的测试。',
text: '请审查这部分是否存在缺陷、回归和缺失的测试。'
},
implementationPlan: {
label: '实现计划',
description: '在动代码之前先勾勒方案,让 diff 保持聚焦。',
text: '请在修改代码前制定一个简洁的实现计划。'
},
explainThis: {
label: '解释这段',
description: '讲解所选代码的工作方式,并链接到关键文件。',
text: '请解释这是如何工作的,并指给我关键文件。'
}
}
},
statusStack: {
agents: '代理',
background: count => `${count} 个后台任务`,
subagents: count => `${count} 个子代理`,
todos: (done, total) => `任务 ${done}/${total}`,
running: '运行中',
stop: '停止',
dismiss: '关闭',
exit: code => `退出码 ${code}`,
coding: {
title: '工作区',
noBranch: '无分支',
detached: '分离头指针',
clean: '干净',
changed: count => `${count} 处更改`,
ahead: count => `领先 ${count}`,
behind: count => `落后 ${count}`,
review: '审查',
close: '关闭',
openChanges: '打开更改',
openFile: '打开文件',
stage: '暂存',
unstage: '取消暂存',
stageAll: '全部暂存',
viewAsTree: '树状视图',
viewAsList: '列表视图',
revert: '还原',
revertAll: '全部还原',
revertConfirm: '放弃对此文件的更改并将其恢复到已提交状态?此操作无法撤销。',
revertAllConfirm: '放弃所有更改并将文件恢复到已提交状态?此操作无法撤销。',
staged: '已暂存',
noChanges: '没有更改',
notRepo: '不是 Git 仓库',
noDiff: '没有可显示的差异',
scopeUncommitted: '未提交',
scopeBranch: '分支',
scopeLastTurn: '上一轮',
commit: '提交',
commitAndPush: '提交并推送',
commitPlaceholder: '信息(⌘↵ 提交)',
generateCommitMessage: '生成提交信息',
stopGenerating: '停止生成',
createPr: '创建 PR',
openPr: '打开 PR',
ghMissing: '安装 GitHub CLI (gh) 并登录后可打开 PR',
agentShip: '让 Hermes 提交并开 PR',
agentShipPrompt: '检查当前更改,使用清晰的约定式提交信息提交,推送分支,并开启一个拉取请求。',
newBranch: '新建分支',
branchOffFrom: base => `从 ${base} 新建分支`,
switchTo: branch => `切换到 ${branch}`,
switchFailed: branch => `无法切换到 ${branch}`,
worktrees: '工作树'
}
},
updates: {
stages: {
idle: '准备中…',
prepare: '准备中…',
fetch: '下载中…',
pull: '马上完成…',
pydeps: '收尾中…',
update: '正在更新 Hermes…',
rebuild: '正在重新构建桌面应用…',
restart: '正在重启 Hermes…',
done: '更新完成',
manual: '从终端更新',
guiSkew: '请更新桌面应用',
error: '更新已暂停'
},
checking: '正在检查更新…',
checkFailedTitle: '无法检查更新',
tryAgain: '重试',
notAvailableTitle: '更新不可用',
unsupportedMessage: '此版本的 Hermes 无法在应用内自行更新。',
connectionRetry: '请检查网络连接后重试。',
latestBody: '你正在运行最新版本。',
latestBodyBackend: '后端正在运行最新版本。',
allSetTitle: '已是最新',
availableTitle: '有可用更新',
availableBody: '新版 Hermes 已可安装。',
availableTitleBackend: '后端有可用更新',
availableBodyBackend: '已连接的 Hermes 后端有新版本可安装。',
availableBodyNoChangelog: '已有新版本可用。此安装方式无法显示更新日志。',
updateNow: '立即更新',
maybeLater: '稍后再说',
moreChanges: count => `另有 ${count} 项更改。`,
manualTitle: '从终端更新',
manualBody: '你是从命令行安装的 Hermes,因此更新也需要在那里运行。请将此命令粘贴到终端:',
manualPickedUp: '下次启动 Hermes 时会使用新版本。',
guiSkewTitle: '请更新桌面应用',
guiSkewBody:
'后端已更新,但此桌面应用包未更改。请更新或重新安装 Hermes 桌面应用(你的 AppImage / .deb / .rpm)以保持一致。',
copy: '复制',
copied: '已复制',
done: '完成',
applyingBody:
'Hermes 更新器会在自己的窗口中接管,并在完成后自动重新打开 Hermes。更新期间请不要自行重新打开 Hermes。',
applyingBodyBackend: '远程后端正在应用更新并将重启。恢复后 Hermes 会自动重新连接。',
applyingClose: '此窗口会在更新期间关闭,随后 Hermes 会自动重新打开。',
errorTitle: '更新未完成',
errorBody: '没有数据丢失。你可以现在重试。',
notNow: '暂不',
applyStatus: {
preparing: '正在更新后端…',
pulling: '后端更新中…',
restarting: '后端正在重启以加载更新…',
notAvailable: '此后端无法更新。',
failed: '后端更新失败。',
noReturn: '后端未恢复在线。更新可能未完成——请检查后端主机。'
}
},
install: {
stageStates: {
pending: '等待中',
running: '安装中',
succeeded: '完成',
skipped: '已跳过',
failed: '失败'
},
oneTimeTitle: 'Hermes 需要一次性安装',
unsupportedDesc: platform =>
`${platform} 暂不支持自动首次启动安装。请打开终端并运行下面的命令,然后重新启动此应用。之后启动会跳过此步骤。`,
installCommand: '安装命令',
copyCommand: '复制命令',
viewDocs: '查看安装文档',
installTo: '将安装到',
retryAfterRun: '我已运行 -- 重试',
failedTitle: '安装失败',
settingUpTitle: '正在设置 Hermes Agent',
finishingTitle: '正在收尾',
failedDesc:
'某个安装步骤失败。在 Windows 上,如果另一个 Hermes CLI 或桌面实例正在运行,可能会出现这种情况。请停止正在运行的 Hermes 实例后重试。可查看下面的详情或 desktop 日志中的完整记录。',
activeDesc: '这是一次性设置。Hermes 安装器正在下载依赖并配置你的机器。之后启动会跳过此步骤。',
progress: (completed, total) => `${completed}/${total} 个步骤已完成`,
currentStage: stage => ` -- 当前:${stage}`,
fetchingManifest: '正在获取安装器 manifest...',
error: '错误',
hideOutput: '隐藏安装器输出',
showOutput: '显示安装器输出',
lines: count => `${count} 行`,
noOutput: '暂无输出。',
cancelling: '取消中...',
cancelInstall: '取消安装',
transcriptSaved: '完整记录已保存到',
copiedOutput: '已复制!',
copyOutput: '复制输出',
reloadRetry: '重新加载并重试'
},
onboarding: {
headerTitle: '开始设置 Hermes Agent',
headerDesc: '连接模型提供方即可开始对话。大多数选项只需一次点击。',
preparingInstall: 'Hermes 正在完成安装。首次运行通常不到一分钟。',
starting: '正在启动 Hermes…',
lookingUpProviders: '正在查找提供方...',
collapse: '收起',
otherProviders: '其他提供方',
haveApiKey: '我有 API 密钥',
chooseLater: '稍后再选择提供方',
recommended: '推荐',
connected: '已连接',
featuredPitch: '一个订阅,300+ 前沿模型 — 运行 Hermes 的推荐方式',
openRouterPitch: '一个密钥,数百个模型 — 稳妥的默认选择',
apiKeyOptions: {
openrouter: { short: '一个密钥,多个模型', description: '用一个密钥访问数百个模型。适合新安装的默认选择。' },
openai: { short: 'GPT 级模型', description: '直接访问 OpenAI 模型。' },
gemini: { short: 'Gemini 模型', description: '直接访问 Google Gemini 模型。' },
xai: { short: 'Grok 模型', description: '直接访问 xAI Grok 模型。' },
local: {
short: '自托管',
description: '将 Hermes 指向本地或自托管的 OpenAI 兼容端点 (vLLM、llama.cpp、Ollama 等)。'
}
},
backToSignIn: '返回登录',
getKey: '获取密钥',
replaceCurrent: '替换当前值',
pasteApiKey: '粘贴 API 密钥',
localApiKeyPlaceholder: 'API 密钥(可选 — 仅当端点需要时填写)',
couldNotSave: '无法保存凭据。',
connecting: '连接中',
update: '更新',
flowSubtitles: {
pkce: '打开浏览器登录,然后回到这里继续',
device_code: '在浏览器中打开验证页面 — Hermes 会自动连接',
loopback: '打开浏览器登录 — Hermes 会自动连接',
external: '先在终端登录一次,然后回来继续对话'
},
startingSignIn: provider => `正在为 ${provider} 启动登录...`,
verifyingCode: provider => `正在通过 ${provider} 验证你的代码...`,
connectedProvider: provider => `${provider} 已连接`,
connectedPicking: provider => `${provider} 已连接。正在选择默认模型...`,
signInFailed: '登录失败,请重试。',
pickDifferentProvider: '选择其他提供方',
signInWith: provider => `使用 ${provider} 登录`,
openedBrowser: provider => `已在浏览器中打开 ${provider}。`,
authorizeThere: '请在那里授权 Hermes。',
copyAuthCode: '复制授权码并粘贴到下面。',
pasteAuthCode: '粘贴授权码',
reopenAuthPage: '重新打开授权页面',
autoBrowser: provider => `已在浏览器中打开 ${provider}。请在那里授权 Hermes,连接会自动完成,无需复制或粘贴。`,
reopenSignInPage: '重新打开登录页面',
waitingAuthorize: '等待你授权...',
externalPending: provider => `${provider} 通过自己的 CLI 登录。请在终端运行此命令,然后回来选择“我已登录”:`,
signedIn: '我已登录',
deviceCodeOpened: provider => `已在浏览器中打开 ${provider}。请在那里输入此代码:`,
reopenVerification: '重新打开验证页面',
copy: '复制',
defaultModel: '默认模型',
freeTier: '免费层',
pro: 'Pro',
free: '免费',
price: (input, output) => `${input} 输入 / ${output} 输出每 Mtok`,
change: '更改',
startChatting: '开始',
docs: provider => `${provider} 文档`
},
modelPicker: {
title: '切换模型',
current: '当前:',
unknown: '(未知)',
search: '筛选提供方和模型...',
noModels: '未找到模型。',
addProvider: '添加提供方',
loadFailed: '无法加载模型',
noAuthenticatedProviders: '没有已认证的提供方。',
pro: 'Pro',
proNeedsSubscription: 'Pro 模型需要付费 Nous 订阅。',
free: '免费',
freeTier: '免费层',
priceTitle: '每百万 token 的输入/输出价格'
},
modelVisibility: {
title: '模型',
search: '搜索模型',
noAuthenticatedProviders: '没有已认证的提供方。',
addProvider: '添加提供方…'
},
shell: {
windowControls: '窗口控件',
paneControls: '面板控件',
appControls: '应用控件',
modelMenu: {
search: '搜索模型',
noModels: '未找到模型',
editModels: '编辑模型…',
refreshModels: '刷新模型',
fast: '快速',
medium: '中'
},
modelOptions: {
noOptions: '此模型没有可用选项',
options: '选项',
thinking: '思考',
fast: '快速',
effort: '推理强度',
minimal: '最小',
low: '低',
medium: '中',
high: '高',
max: '最高',
updateFailed: '模型选项更新失败',
fastFailed: '快速模式更新失败'
},
gatewayMenu: {
gateway: '网关',
connected: '已连接',
connecting: '连接中',
offline: '离线',
inferenceReady: '推理已就绪',
inferenceNotReady: '推理未就绪',
checkingInference: '正在检查推理',
disconnected: '已断开',
openSystem: '打开系统面板',
connection: label => `连接:${label}`,
recentActivity: '最近活动',
viewAllLogs: '查看全部日志 →',
messagingPlatforms: '消息平台'
},
statusbar: {
unknown: '未知',
restart: '重启',
update: '更新',
updateInProgress: '正在更新',
commitsBehind: (count, branch) => `落后 ${branch} ${count} 个提交`,
desktopVersion: version => `Hermes Desktop v${version}`,
backendVersion: version => `后端 v${version}`,
clientLabel: version => `客户端 v${version}`,
backendLabel: version => `后端 v${version}`,
commit: sha => `提交 ${sha}`,
branch: branch => `分支 ${branch}`,
closeCommandCenter: '关闭命令中心',
openCommandCenter: '打开命令中心',
showTerminal: '显示终端',
hideTerminal: '隐藏终端',
gateway: '网关',
gatewayReady: '就绪',
gatewayNeedsSetup: '需要设置',
gatewayChecking: '检查中',
gatewayConnecting: '连接中',
gatewayOffline: '离线',
gatewayRestarting: '重启中…',
gatewayTitle: 'Hermes 推理网关状态',
agents: '代理',
closeAgents: '关闭代理',
openAgents: '打开代理',
subagents: count => `${count} 个子代理`,
failed: count => `${count} 个失败`,
running: count => `${count} 个运行中`,
cron: '排程',
openCron: '打开排程任务',
starmap: '记忆图谱',
openStarmap: '打开记忆图谱',
turnRunning: '运行中',
currentTurnElapsed: '当前回合已用时间',
contextUsage: '上下文用量',
contextUsagePanel: {
categories: {
conversation: '对话',
mcp: 'MCP',
memory: '记忆',
rules: '规则',
skills: '技能',
subagent_definitions: '子代理定义',
system_prompt: '系统提示词',
tool_definitions: '工具定义'
},
empty: '暂无上下文数据',
loading: '正在加载明细…',
percentFull: percent => `已用 ${percent}%`,
title: '上下文用量',
tokenSummary: (used, max) => `${used} / ${max} Tokens`
},
openContextUsage: '打开上下文用量明细',
session: '会话',
runtimeSessionElapsed: '运行时会话已用时间',
yoloOn: 'YOLO 已开启 - 自动批准危险命令。点击关闭。Shift+点击可全局切换。',
yoloOff: 'YOLO 已关闭 - 点击自动批准危险命令。Shift+点击可全局切换。',
modelNone: '无',
noModel: '无模型',
switchModel: '切换模型',
openModelPicker: '打开模型选择器',
modelTitle: (provider, model) => `模型 · ${provider}: ${model}`,
providerModelTitle: (provider, model) => `${provider} · ${model}`
}
},
rightSidebar: {
aria: '右侧边栏',
panelsAria: '右侧边栏面板',
files: '文件系统',
terminal: '终端',
noFolderSelected: '未选择文件夹',
changeCwdTitle: '更改工作目录',
remotePickerTitle: '选择远程文件夹',
remotePickerDescription: '浏览已连接后端上的文件夹。',
remotePickerSelect: '选择文件夹',
folderTip: cwd => `${cwd} — 点击更改文件夹`,
openFolder: '打开文件夹',
refreshTree: '刷新文件树',
collapseAll: '折叠所有文件夹',
previewUnavailable: '预览不可用',
couldNotPreview: path => `无法预览 ${path}`,
noProjectTitle: '没有项目',
noProjectBody: '打开一个项目以浏览文件并查看更改。',
noProjectOpen: '未打开项目',
noDiffs: '无差异',
unreadableTitle: '无法读取',
unreadableBody: error => `无法读取此文件夹 (${error})。`,
emptyTitle: '空文件夹',
emptyBody: '此文件夹为空。',
treeErrorTitle: '文件树错误',
treeErrorBody: '文件树渲染此文件夹时出错。',
tryAgain: '重试',
loadingTree: '正在加载文件树',
loadingFiles: '正在加载文件',
terminalHide: '隐藏终端',
terminalsAria: '终端',
terminalNew: '新建终端',
terminalCloseOthers: '关闭其他',
terminalCloseAll: '关闭全部',
addToChat: '添加到对话'
},
preview: {
tab: '预览',
closeTab: label => `关闭 ${label}`,
closeOthers: '关闭其他',
closeToRight: '关闭右侧',
closeAll: '全部关闭',
closePane: '关闭预览面板',
loading: '正在加载预览',
unavailable: '预览不可用',
opening: '正在打开...',
hide: '隐藏',
openPreview: '打开预览',
openInBrowser: '在浏览器中打开',
linkHint: '⌘/Ctrl+点击在预览面板打开',
sourceLineTitle: '点击选择 · shift 点击扩展 · 拖到输入框',
source: '源码',
renderedPreview: '预览',
diff: '差异',
unknownSize: '大小未知',
binaryTitle: '这看起来像二进制文件',
binaryBody: label => `预览 ${label} 可能会显示不可读文本。`,
largeTitle: '此文件较大',
largeBody: (label, size) => `${label} 大小为 ${size}。Hermes 只会显示前 512 KB。`,
previewAnyway: '仍然预览',
truncated: '显示前 512 KB。',
noInlineTitle: '没有内联预览',
noInlineBody: mimeType => `${mimeType || '此文件类型'} 仍可作为上下文附件。`,
edit: '编辑',
editing: '编辑中',
unsavedChanges: '未保存的更改',
saveFailed: message => `无法保存:${message}`,
diskChangedTitle: '文件已在磁盘上更改',
diskChangedBody: '此文件自打开以来已更改。用你的版本覆盖,还是放弃你的编辑并重新加载?',
overwrite: '覆盖',
discardReload: '放弃并重新加载',
console: {
deselect: '取消选择条目',
select: '选择条目',
copyFailed: '无法复制控制台输出',
copyEntry: '复制此条目',
sendEntry: '将此条目发送到对话',
messages: count => `${count} 条控制台消息`,
resize: '调整预览控制台大小',
title: '预览控制台',
selected: count => `已选择 ${count} 条`,
sendToChat: '发送到对话',
copySelected: '复制所选到剪贴板',
copyAll: '全部复制到剪贴板',
copy: '复制',
clear: '清除',
empty: '暂无控制台消息。',
promptHeader: '预览控制台:',
sentTitle: '已发送到对话',
sentMessage: count => `已将 ${count} 条日志添加到输入框`
},
web: {
appFailedToBoot: '预览应用启动失败',
serverNotFound: '未找到服务器',
failedToLoad: '预览加载失败',
tryAgain: '重试',
restarting: 'Hermes 正在重启...',
askRestart: '让 Hermes 重启服务器',
lookingRestart: taskId => `Hermes 正在查找要重启的预览服务器 (${taskId})`,
restartingTitle: '正在重启预览服务器',
restartingMessage: 'Hermes 正在后台工作。可在预览控制台查看进度。',
startRestartFailed: message => `无法启动服务器重启:${message}`,
restartFailed: '服务器重启失败',
hideConsole: '隐藏预览控制台',
showConsole: '显示预览控制台',
hideDevTools: '隐藏预览 DevTools',
openDevTools: '打开预览 DevTools',
finishedRestarting: message => `Hermes 已完成预览服务器重启${message ? `: ${message}` : ''}`,
failedRestarting: message => `服务器重启失败:${message}`,
unknownError: '未知错误',
restartedTitle: '预览服务器已重启',
reloadingNow: '正在重新加载预览。',
restartFailedTitle: '预览重启失败',
restartFailedMessage: 'Hermes 无法重启服务器。',
stillWorking: 'Hermes 仍在工作,但还没有收到重启结果。服务器命令可能正在前台运行。',
workspaceReloading: '工作区已变更,正在重新加载预览',
fileChanged: url => `文件已变更,正在重新加载预览:${url}`,
filesChanged: (count, url) => `${count} 个文件变更,正在重新加载预览:${url}`,
watchFailed: message => `无法监听预览文件:${message}`,
moduleMimeDescription:
'模块脚本使用了错误的 MIME 类型。这通常表示静态文件服务器正在服务 Vite/React 应用,而不是项目开发服务器。',
loadFailedConsole: (code, message) => `加载失败${code ? ` (${code})` : ''}: ${message}`,
unreachableDescription: '无法访问预览页面。',
openTarget: url => `打开 ${url}`,
fallbackTitle: '预览'
}
},
assistant: {
thread: {
loadingSession: '正在加载会话',
showEarlier: '显示更早的消息',
loadingResponse: 'Hermes 正在加载回复',
resumeWhenBackgroundDone: count =>
count === 1 ? '后台任务完成后将自动继续' : `${count} 个后台任务完成后将自动继续`,
thinking: '思考中',
today: time => `今天,${time}`,
yesterday: time => `昨天,${time}`,
copy: '复制',
refresh: '刷新',
moreActions: '更多操作',
branchNewChat: '在新对话中分支',
dismissError: '关闭错误',
readAloudFailed: '朗读失败',
preparingAudio: '正在准备音频...',
stopReading: '停止朗读',
readAloud: '朗读',
editMessage: '编辑消息',
expandMessage: '展开消息',
scrollToBottom: '滚动到底部',
stop: '停止',
restorePrevious: '恢复上一个检查点',
restoreCheckpoint: '恢复检查点',
restoreFromHere: '恢复检查点 — 从此提示重新运行',
restoreTitle: '恢复到此检查点?',
restoreBody: '此提示之后的所有消息将从对话中移除,并从此处重新运行该提示。',
restoreConfirm: '恢复并重新运行',
restoreNext: '恢复下一个检查点',
goForward: '前进',
sendEdited: '发送编辑后的消息',
attachingFile: '正在附加…'
},
approval: {
gatewayDisconnected: 'Hermes 网关未连接',
sendFailed: '无法发送审批响应',
run: '运行',
command: '命令',
moreOptions: '更多审批选项',
allowSession: '允许本会话',
alwaysAllowMenu: '始终允许…',
jumpToApproval: '需要审批',
reject: '拒绝',
alwaysTitle: '始终允许此命令?',
alwaysDescription: pattern =>
`这会将“${pattern}”模式加入永久允许列表 (~/.hermes/config.yaml)。Hermes 对类似命令将不再询问,包括当前会话和未来会话。`,
alwaysAllow: '始终允许'
},
clarify: {
notReady: '澄清请求尚未就绪',
gatewayDisconnected: 'Hermes 网关未连接',
sendFailed: '无法发送澄清响应',
loadingQuestion: '正在加载问题…',
other: '其他 (输入你的答案)',
placeholder: '输入你的答案…',
skip: '跳过',
continueLabel: '继续'
},
tool: {
code: '代码',
copyCode: '复制代码',
renderingImage: '正在渲染图片',
copyOutput: '复制输出',
copyCommand: '复制命令',
copyContent: '复制内容',
copyUrl: '复制 URL',
copyResults: '复制结果',
copyQuery: '复制查询',
copyFile: '复制文件',
copyPath: '复制路径',
outputAlt: '工具输出',
rawResponse: '原始响应',
copyActivity: '复制活动',
recoveredOne: '在 1 个失败步骤后已恢复',
recoveredMany: count => `在 ${count} 个失败步骤后已恢复`,
failedOne: '1 个步骤失败',
failedMany: count => `${count} 个步骤失败`,
statusRunning: '运行中',
statusError: '错误',
statusRecovered: '已恢复',
statusDone: '完成',
actions: {
read: '已读取',
reading: '正在读取',
opened: '已打开',
opening: '正在打开',
failedToOpen: '打开失败',
searched: '已搜索',
searching: '正在搜索',
ran: '已运行',
running: '正在运行',
ranCode: '已运行代码',
runningCode: '正在编写脚本'
},
prefixes: {
browser: '浏览器',
web: '网页'
},
titleTemplates: {
actionCommand: (action, command) => `${action} ${command}`,
actionQuoted: (action, value) => `${action}“${value}”`,
actionTarget: (action, target) => `${action} ${target}`,
prefixedDone: (prefix, action) => `${prefix}${action}`,
runningPrefixedTool: (prefix, action) => `正在运行${prefix}${action}`,
runningTool: action => `正在运行 ${action}`
},
titles: {
browser_click: { done: '已点击页面元素', pending: '正在点击页面元素', pendingAction: '正在点击' },
browser_fill: { done: '已填写表单字段', pending: '正在填写表单字段', pendingAction: '正在填写' },
browser_navigate: { done: '已打开页面', pending: '正在打开页面', pendingAction: '正在打开' },
browser_snapshot: { done: '已捕获页面快照', pending: '正在捕获页面快照', pendingAction: '正在捕获' },
browser_take_screenshot: { done: '已捕获截图', pending: '正在捕获截图', pendingAction: '正在捕获' },
browser_type: { done: '已在页面输入', pending: '正在页面输入', pendingAction: '正在输入' },
clarify: { done: '已提问', pending: '正在提问', pendingAction: '正在提问' },
cronjob: { done: 'Cron 任务', pending: '正在安排 Cron 任务', pendingAction: '正在安排' },
edit_file: { done: '已编辑文件', pending: '正在编辑文件', pendingAction: '正在编辑' },
execute_code: { done: '已运行代码', pending: '正在编写脚本', pendingAction: '正在编写脚本' },
image_generate: { done: '已生成图片', pending: '正在生成图片', pendingAction: '正在生成' },
list_files: { done: '已列出文件', pending: '正在列出文件', pendingAction: '正在列出' },
patch: { done: '已修补文件', pending: '正在修补文件', pendingAction: '正在修补' },
read_file: { done: '已读取文件', pending: '正在读取文件', pendingAction: '正在读取' },
search_files: { done: '已搜索文件', pending: '正在搜索文件', pendingAction: '正在搜索' },
session_search_recall: { done: '已搜索会话历史', pending: '正在搜索会话历史', pendingAction: '正在搜索' },
terminal: { done: '已运行命令', pending: '正在运行命令', pendingAction: '正在运行' },
todo: { done: '已更新待办', pending: '正在更新待办', pendingAction: '正在更新' },
vision_analyze: { done: '已分析图片', pending: '正在分析图片', pendingAction: '正在分析' },
web_extract: { done: '已读取网页', pending: '正在读取网页', pendingAction: '正在读取' },
web_search: { done: '已搜索网页', pending: '正在搜索网页', pendingAction: '正在搜索' },
write_file: { done: '已编辑文件', pending: '正在编辑文件', pendingAction: '正在编辑' }
}
}
},
prompts: {
gatewayDisconnected: 'Hermes 网关未连接',
sudoSendFailed: '无法发送 sudo 密码',
secretSendFailed: '无法发送密钥',
sudoTitle: '管理员密码',
sudoDesc: 'Hermes 需要你的 sudo 密码来运行特权命令。它只会发送给你的本地 agent。',
sudoPlaceholder: 'sudo 密码',
secretTitle: '需要密钥',
secretDesc: 'Hermes 需要一个凭据才能继续。',
secretPlaceholder: '密钥值'
},
desktop: {
audioReadFailed: '无法读取录制的音频',
sessionUnavailable: '会话不可用',
createSessionFailed: '无法创建新会话',
promptFailed: '提示词发送失败',
providerCredentialRequired: '发送第一条消息前请先添加提供方凭据。',
emptySlashCommand: '空 slash 命令',
desktopCommands: '桌面端命令',
skillCommandsAvailable: count => `${count} 个技能命令可用。`,
warningLine: message => `警告:${message}`,
yoloArmed: '此对话已启用 YOLO',
yoloOff: 'YOLO 已关闭',
yoloSystem: active => `此会话 YOLO ${active ? '已开启' : '已关闭'}`,
yoloTitle: 'YOLO',
yoloToggleFailed: '无法切换 YOLO',
profileStatus: current => `配置档案:${current}。使用 /profile <name> 或“新建会话”选择器在其他配置档案中开始对话。`,
unknownProfile: '未知配置档案',
noProfileNamed: (target, available) => `没有名为“${target}”的配置档案。可用:${available}`,
newChatsProfile: name => `新对话将使用配置档案 ${name}。`,
setProfileFailed: '设置配置档案失败',
sttDisabled: '设置中已禁用语音转文字。',
stopFailed: '停止失败',
regenerateFailed: '重新生成失败',
editFailed: '编辑失败',
resumeFailed: '恢复失败',
resumeStrandedTitle: '无法加载此会话',
resumeStrandedBody: '与此会话的连接失败,自动重试已停止。请确认网关正在运行,然后重试。',
resumeRetry: '重试',
nothingToBranch: '没有可分支的内容',
branchNeedsChat: '分支前请先开始或恢复一个对话。',
sessionBusy: '会话忙碌中',
branchStopCurrent: '分支此对话前请先停止当前回合。',
branchNoText: '此消息没有可用于分支的文本。',
branchTitle: n => `草稿:分支 #${n}`,
branchFailed: '分支失败',
deleteFailed: '删除失败',
archived: '已归档',
archiveFailed: '归档失败',
cwdChangeFailed: '工作目录更改失败',
cwdStagedTitle: '工作目录已暂存',
cwdStagedMessage: '重启桌面后端后,工作目录更改才会应用到当前活跃会话。',
modelSwitchFailed: '模型切换失败',
sessionExported: '会话已导出',
sessionExportFailed: '无法导出会话',
imageSaved: '图片已保存',
downloadStarted: '下载已开始',
restartToUseSaveImage: '重启 Hermes 桌面版后可使用保存图片。',
restartToSaveImages: '重启 Hermes 桌面版以保存图片',
imageDownloadFailed: '图片下载失败',
openImage: '打开图片',
downloadImage: '下载图片',
savingImage: '正在保存图片',
imagePreviewFailed: '图片预览失败',
imageAttach: '附加图片',
imageWriteFailed: '无法将图片写入磁盘。',
imageAttachFailed: '附加图片失败',
attachImages: '附加图片',
clipboard: '剪贴板',
noClipboardImage: '剪贴板中没有图片',
clipboardPasteFailed: '粘贴剪贴板失败',
dropFiles: '拖放文件',
handoff: {
pickPlatform: '选择目标平台',
success: platform => `已移交到 ${platform}。随时可在此处恢复。`,
systemNote: platform => `↻ 已移交到 ${platform} — 随时可在此处恢复。`,
failed: error => `移交失败:${error}`,
timedOut: '等待网关超时。`hermes gateway` 是否正在运行?'
}
},
errors: {
genericFailure: '发生错误',
boundaryTitle: '界面出错了',
boundaryDesc: '此视图遇到意外错误。你的对话和设置是安全的。',
reloadWindow: '重新加载窗口',
openLogs: '打开日志'
},
ui: {
search: {
clear: '清除搜索'
},
pagination: {
label: '分页',
previous: '上一页',
previousAria: '前往上一页',
next: '下一页',
nextAria: '前往下一页'
},
sidebar: {
title: '侧边栏',
description: '显示移动端侧边栏。',
toggle: '切换侧边栏'
}
}
}
Workflows from the Neura Market marketplace related to this Grok resource