import type { Translations } from './types'

export const zh: Translations = {
  common: {
    save: '保存',
    saving: '保存中…',
    cancel: '取消',
    close: '关闭',
    confirm: '确认',
    delete: '删除',
    refresh: '刷新',
    retry: '重试',
    on: '开',
    off: '关'
  },

  boot: {
    ready: 'Hermes Desktop 已就绪',
    desktopBootFailedWithMessage: message => `桌面启动失败:${message}`,
    steps: {
      connectingGateway: '正在连接实时桌面网关',
      loadingSettings: '正在加载 Hermes 设置',
      loadingSessions: '正在加载最近会话',
      startingDesktopConnection: '正在启动桌面连接',
      startingHermesDesktop: '正在启动 Hermes Desktop…'
    },
    errors: {
      backgroundExited: 'Hermes 后台进程已退出。',
      backgroundExitedDuringStartup: 'Hermes 后台进程在启动期间退出。',
      backendStopped: '后端已停止',
      desktopBootFailed: '桌面启动失败',
      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。'
    }
  },

  titlebar: {
    hideSidebar: '隐藏侧边栏',
    showSidebar: '显示侧边栏',
    search: '搜索',
    searchTitle: '搜索会话、视图与操作',
    swapSidebarSides: '交换侧边栏位置',
    swapSidebarSidesTitle: '交换会话栏和文件浏览器的位置',
    hideRightSidebar: '隐藏右侧栏',
    showRightSidebar: '显示右侧栏',
    muteHaptics: '关闭触感反馈',
    unmuteHaptics: '开启触感反馈',
    openSettings: '打开设置'
  },

  language: {
    label: '语言',
    description: '选择桌面界面的语言。',
    saving: '正在保存语言…',
    saveError: '语言更新失败'
  },

  settings: {
    closeSettings: '关闭设置',
    exportConfig: '导出配置',
    importConfig: '导入配置',
    resetToDefaults: '恢复默认',
    resetConfirm: '将所有设置恢复为 Hermes 默认值？',
    exportFailed: '导出失败',
    resetFailed: '重置失败',
    nav: {
      gateway: '网关',
      apiKeys: '工具与密钥',
      mcp: 'MCP',
      archivedChats: '已归档对话',
      about: '关于'
    },
    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: '产品模式隐藏原始工具数据；技术模式显示完整输入/输出。',
      product: '产品',
      productDesc: '易读的工具活动与简洁摘要。',
      technical: '技术',
      technicalDesc: '包含原始工具参数/结果及底层细节。',
      themeTitle: '主题',
      themeDesc: '仅桌面端调色板。所选模式叠加其上。'
    },
    fieldLabels: {
      model: '默认模型',
      model_context_length: '上下文窗口',
      fallback_providers: '备用模型',
      toolsets: '启用的工具集',
      timezone: '时区',
      'display.personality': '人格',
      'display.show_reasoning': '推理过程块',
      'agent.max_turns': '最大智能体步数',
      'agent.image_input_mode': '图片附件',
      'terminal.cwd': '工作目录',
      'terminal.backend': '执行后端',
      'terminal.timeout': '命令超时',
      'terminal.persistent_shell': '持久化 Shell',
      'terminal.env_passthrough': '环境变量透传',
      file_read_max_chars: '文件读取上限',
      'tool_output.max_bytes': '终端输出上限',
      'tool_output.max_lines': '文件分页上限',
      'tool_output.max_line_length': '行长度上限',
      'code_execution.mode': '代码执行模式',
      'approvals.mode': '审批模式',
      'approvals.timeout': '审批超时',
      'approvals.mcp_reload_confirm': '确认 MCP 重载',
      command_allowlist: '命令白名单',
      'security.redact_secrets': '隐去密钥',
      'security.allow_private_urls': '允许私有 URL',
      'browser.allow_private_urls': '浏览器私有 URL',
      'browser.auto_local_for_private_urls': '私有 URL 使用本地浏览器',
      'checkpoints.enabled': '文件检查点',
      'checkpoints.max_snapshots': '检查点上限',
      'voice.record_key': '语音快捷键',
      'voice.max_recording_seconds': '最长录音时长',
      'voice.auto_tts': '朗读回复',
      'stt.enabled': '语音转文字',
      'stt.provider': '语音转文字提供方',
      'stt.local.model': '本地转写模型',
      'stt.local.language': '转写语言',
      'stt.elevenlabs.model_id': 'ElevenLabs STT 模型',
      'stt.elevenlabs.language_code': 'ElevenLabs 语言',
      'stt.elevenlabs.tag_audio_events': '标记音频事件',
      'stt.elevenlabs.diarize': '说话人区分',
      'tts.provider': '文字转语音提供方',
      'tts.edge.voice': 'Edge 语音',
      'tts.openai.model': 'OpenAI TTS 模型',
      'tts.openai.voice': 'OpenAI 语音',
      'tts.elevenlabs.voice_id': 'ElevenLabs 语音',
      'tts.elevenlabs.model_id': 'ElevenLabs 模型',
      'memory.memory_enabled': '持久记忆',
      'memory.user_profile_enabled': '用户画像',
      'memory.memory_char_limit': '记忆预算',
      'memory.user_char_limit': '画像预算',
      'memory.provider': '记忆提供方',
      'context.engine': '上下文引擎',
      'compression.enabled': '自动压缩',
      'compression.threshold': '压缩阈值',
      'compression.target_ratio': '压缩目标',
      'compression.protect_last_n': '保护最近消息',
      'agent.api_max_retries': 'API 重试次数',
      'agent.service_tier': '服务等级',
      'agent.tool_use_enforcement': '工具调用强制',
      'delegation.model': '子智能体模型',
      'delegation.provider': '子智能体提供方',
      'delegation.max_iterations': '子智能体轮次上限',
      'delegation.max_concurrent_children': '并行子智能体',
      'delegation.child_timeout_seconds': '子智能体超时',
      'delegation.reasoning_effort': '子智能体推理强度'
    },
    fieldDescriptions: {
      model: '用于新对话，除非你在输入框中选择其他模型。',
      model_context_length: '保持为 0 则使用所选模型检测到的上下文窗口。',
      fallback_providers: '默认模型失败时尝试的备用 provider:model 条目。',
      'display.personality': '新会话的默认助手风格。',
      timezone: '当 Hermes 需要本地时间上下文时使用。留空则使用系统时区。',
      'display.show_reasoning': '当后端提供推理内容时予以显示。',
      'agent.image_input_mode': '控制图片附件如何发送给模型。',
      'terminal.cwd': '工具与终端操作的默认项目目录。',
      'code_execution.mode': '代码执行被限定到当前项目的严格程度。',
      'terminal.persistent_shell': '当后端支持时，在命令之间保留 Shell 状态。',
      'terminal.env_passthrough': '传入工具执行的环境变量。',
      file_read_max_chars: 'Hermes 单次文件读取可读取的最大字符数。',
      'approvals.mode': 'Hermes 如何处理需要显式审批的命令。',
      'approvals.timeout': '审批提示在超时前等待的时长。',
      'security.redact_secrets': '尽可能从模型可见内容中隐藏检测到的密钥。',
      'checkpoints.enabled': '在文件编辑前创建可回滚的快照。',
      'memory.memory_enabled': '保存有助于未来会话的持久记忆。',
      'memory.user_profile_enabled': '维护一份精简的用户偏好画像。',
      'context.engine': '在接近上下文上限时管理长对话的策略。',
      'compression.enabled': '当对话变大时对较早的上下文进行摘要。',
      'voice.auto_tts': '自动朗读助手回复。',
      'stt.enabled': '启用本地或提供方支持的语音转写。',
      'stt.elevenlabs.language_code': '可选的 ISO-639-3 语言代码。留空让 ElevenLabs 自动检测。',
      'agent.max_turns': 'Hermes 停止一次运行前工具调用轮次的上限。'
    },
    about: {
      heading: 'Hermes Desktop',
      version: value => `版本 ${value}`,
      versionUnavailable: '版本不可用',
      updates: '更新',
      checkNow: '立即检查',
      checking: '检查中…',
      seeWhatsNew: '查看新增内容',
      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} 天前`
    }
  },

  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} 失败`
  },

  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: '关闭命令中心',
    searchPlaceholder: '搜索会话、视图与操作',
    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}`,
    restartMessaging: '重启消息服务',
    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 创建一个机器人,然后粘贴它给你的令牌。' },
      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。' },
      SLACK_BOT_TOKEN: { label: 'Slack bot 令牌', help: '安装 Slack 应用后,在 OAuth & Permissions 中找到 bot 令牌。' },
      SLACK_APP_TOKEN: { label: 'Slack app 令牌', help: 'Socket Mode 需要 app 级令牌。' },
      SLACK_ALLOWED_USERS: { label: '允许的 Slack 用户 ID', help: '推荐。逗号分隔的 Slack 用户 ID。' },
      MATTERMOST_URL: { label: '服务器 URL' },
      MATTERMOST_TOKEN: { label: 'Bot 令牌' },
      MATTERMOST_ALLOWED_USERS: { label: '允许的用户 ID', help: '推荐。逗号分隔的 Mattermost 用户 ID。' },
      MATRIX_HOMESERVER: { label: 'Homeserver URL' },
      MATRIX_ACCESS_TOKEN: { label: '访问令牌' },
      MATRIX_USER_ID: { label: 'Bot 用户 ID' },
      MATRIX_ALLOWED_USERS: { label: '允许的 Matrix 用户 ID', help: '推荐。@user:server 格式的逗号分隔用户 ID。' },
      SIGNAL_HTTP_URL: { label: 'Signal 桥接 URL', 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: '登录微信公众平台,复制 AppID 和 Token,并把消息回调 URL 指向 Hermes。',
      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} 个配置档案`,
    loading: '正在加载配置档案…',
    newProfile: '新建配置档案',
    noProfiles: '暂无配置档案。',
    selectPrompt: '选择一个配置档案以查看其详情。',
    refresh: '刷新配置档案',
    refreshing: '正在刷新配置档案',
    default: '默认',
    skills: count => `${count} 个技能`,
    env: 'env',
    defaultBadge: '默认',
    rename: '重命名',
    copySetup: '复制安装命令',
    copying: '复制中…',
    modelLabel: '模型',
    skillsLabel: '技能',
    notSet: '未设置',
    soulDesc: '内置于此配置档案的系统提示词与人格指令。',
    unsavedChanges: '有未保存的更改',
    loadingSoul: '正在加载 SOUL.md…',
    emptySoul: '空的 SOUL.md —— 开始撰写人格设定…',
    saving: '保存中…',
    saveSoul: '保存 SOUL.md',
    deleteTitle: '删除配置档案？',
    deleteDescPrefix: '这将删除 ',
    deleteDescMid: ' 并移除其 ',
    deleteDescSuffix: ' 目录。此操作无法撤销。',
    deleting: '删除中…',
    createDesc: '配置档案是相互独立的 Hermes 环境:各自拥有独立的配置、技能和 SOUL.md。',
    nameLabel: '名称',
    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: '关闭定时任务',
    search: '搜索定时任务…',
    refresh: '刷新定时任务',
    refreshing: '正在刷新定时任务',
    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}`,
    active: (enabled, total) => `${enabled}/${total} 个启用`,
    newCron: '新建定时任务',
    createFirst: '创建第一个定时任务',
    emptyDescNew: '按 cron 表达式排程一个提示词。Hermes 会运行它,并把结果发送到你选择的目的地。',
    emptyDescSearch: '尝试更宽泛的搜索词。',
    emptyTitleNew: '暂无排程任务',
    emptyTitleSearch: '无匹配项',
    last: '上次:',
    next: '下次:',
    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: '会话',
    groupAriaGrouped: '以单一列表显示会话',
    groupAriaUngrouped: '按工作区分组会话',
    groupTitleGrouped: '取消分组',
    groupTitleUngrouped: '按工作区分组',
    allPinned: '这里的全部已置顶。取消置顶某个对话即可在最近中显示。',
    shiftClickHint: 'Shift+单击对话以置顶 · 拖动以重新排序',
    noWorkspace: '无工作区',
    newSessionIn: label => `在 ${label} 中新建会话`,
    reorderWorkspace: label => `重新排序工作区 ${label}`,
    showMoreIn: (count, label) => `在 ${label} 中再显示 ${count} 个`,
    loading: '加载中…',
    loadMore: '加载更多',
    loadCount: step => `再加载 ${step} 个`,
    row: {
      pin: '置顶',
      unpin: '取消置顶',
      copyId: '复制 ID',
      export: '导出',
      rename: '重命名',
      archive: '归档',
      copyIdFailed: '无法复制会话 ID',
      actionsFor: title => `${title} 的操作`,
      sessionActions: '会话操作',
      sessionRunning: '会话运行中',
      needsInput: '需要你输入',
      waitingForAnswer: '正在等待你的回答',
      renamed: '已重命名',
      renameFailed: '重命名失败',
      renameTitle: '重命名会话',
      renameDesc: '给这个对话起一个好记的标题。留空则清除。',
      untitledPlaceholder: '无标题会话',
      ageNow: '刚刚',
      ageDay: '天',
      ageHour: '时',
      ageMin: '分'
    }
  },

  composer: {
    message: '消息',
    placeholderStarting: '正在启动 Hermes…',
    placeholderReconnecting: '正在重新连接 Hermes…',
    placeholderFollowUp: '发送后续消息',
    newSessionPlaceholders: [
      '我们要构建什么？',
      '给 Hermes 一个任务',
      '你在想什么？',
      '描述你需要什么',
      '我们该处理什么？',
      '随便问点什么',
      '从一个目标开始'
    ],
    followUpPlaceholders: [
      '发送后续消息',
      '补充更多上下文',
      '细化这个请求',
      '下一步是什么？',
      '继续推进',
      '再深入一点',
      '调整或继续'
    ],
    startVoice: '开始语音对话',
    queueMessage: '排队消息',
    stop: '停止',
    send: '发送',
    speaking: '讲话中',
    transcribing: '转写中',
    thinking: '思考中',
    muted: '已静音',
    listening: '聆听中',
    muteMic: '麦克风静音',
    unmuteMic: '取消麦克风静音',
    stopListening: '停止聆听并发送',
    stopShort: '停止',
    endConversation: '结束语音对话',
    endShort: '结束',
    stopDictation: '停止听写',
    transcribingDictation: '正在转写听写',
    voiceDictation: '语音听写',
    commonCommands: '常用命令',
    hotkeys: '快捷键',
    helpFooter: '打开完整面板 · 退格键关闭',
    commandDescs: {
      '/help': '命令与快捷键的完整列表',
      '/clear': '开始新会话',
      '/resume': '恢复之前的会话',
      '/details': '控制对话记录的详细程度',
      '/copy': '复制所选内容或最后一条助手消息',
      '/quit': '退出 hermes'
    },
    hotkeyDescs: {
      '@': '引用文件、文件夹、URL、git',
      '/': '斜杠命令面板',
      '?': '此快速帮助(删除以关闭)',
      Enter: '发送 · Shift+Enter 换行',
      'Cmd/Ctrl+K': '发送下一条排队的回合',
      'Cmd/Ctrl+L': '重绘',
      Esc: '关闭弹窗 · 取消运行',
      '↑ / ↓': '循环弹窗 / 历史'
    },
    attachUrlTitle: '附加 URL',
    attachUrlDesc: 'Hermes 将抓取该页面并作为本回合的上下文。',
    urlPlaceholder: 'https://example.com/post',
    urlHintPre: '请包含完整 URL,例如 ',
    attach: '附加',
    queued: count => `${count} 条排队`,
    attachmentOnly: '仅附件回合',
    emptyTurn: '空回合',
    attachments: count => `${count} 个附件`,
    editingInComposer: '正在输入框中编辑',
    editQueued: '编辑排队回合',
    sendQueuedNow: '立即发送排队回合',
    deleteQueued: '删除排队回合',
    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: '选择一个起始提示词放入输入框。',
    snippets: {
      codeReview: {
        label: '代码审查',
        description: '审查当前更改是否存在回归、遗漏的边界情况和缺失的测试。',
        text: '请审查这部分是否存在缺陷、回归和缺失的测试。'
      },
      implementationPlan: {
        label: '实现计划',
        description: '在动代码之前先勾勒方案,让 diff 保持聚焦。',
        text: '请在修改代码前制定一个简洁的实现计划。'
      },
      explainThis: {
        label: '解释这段',
        description: '讲解所选代码的工作方式,并链接到关键文件。',
        text: '请解释这是如何工作的,并指给我关键文件。'
      }
    }
  }
}
