const zhHans = {
  sidebar: {
    home: '首页',
    extensions: '扩展',
    installedPlugins: '已安装',
    pluginMarket: '扩展市场',
    mcpServers: 'MCP 服务器',
    addExtension: '添加扩展',
    pluginPages: '插件页面',
    pluginPagesTooltip: '由已安装的插件提供的可视化页面',
    quickStart: '快速开始向导',
    scrollToBottom: '滚动到底部',
    editionCommunity: '社区版',
    editionCloud: 'Cloud',
  },
  common: {
    login: '登录',
    logout: '退出登录',
    accountOptions: '系统设置',
    account: '账户',
    integration: '连接',
    email: '邮箱',
    password: '密码',
    welcome: '欢迎回到 LangBot 👋',
    continueToLogin: '登录以继续',
    loginSuccess: '登录成功',
    loginFailed: '登录失败，请检查邮箱和密码是否正确',
    loginLoadError: '无法连接到服务器',
    loginLoadErrorDesc: '无法连接到 LangBot 后端服务，请确认服务已启动后重试。',
    retry: '重试',
    enterEmail: '输入邮箱地址',
    enterPassword: '输入密码',
    invalidEmail: '请输入有效的邮箱地址',
    emptyPassword: '请输入密码',
    language: '语言',
    helpDocs: '帮助文档',
    featureRequest: '建议反馈',
    starOnGitHub: '在 GitHub 上 Star',
    joinDiscord: '加入 Discord 社区',
    create: '创建',
    edit: '编辑',
    delete: '删除',
    add: '添加',
    select: '请选择',
    skill: '技能',
    cancel: '取消',
    submit: '提交',
    error: '错误',
    success: '成功',
    save: '保存',
    saving: '保存中...',
    recommend: '推荐',
    start: '开始',
    confirm: '确认',
    confirmDelete: '确认删除',
    deleteConfirmation: '你确定要删除这个吗？',
    selectOption: '选择一个选项',
    selectPreset: '选择预设',
    required: '必填',
    enable: '是否启用',
    name: '名称',
    description: '描述',
    icon: '图标',
    close: '关闭',
    deleteSuccess: '删除成功',
    deleteError: '删除失败：',
    addRound: '添加回合',
    copy: '复制',
    copySuccess: '复制成功',
    copyFailed: '复制失败',
    test: '测试',
    forgotPassword: '忘记密码？',
    agreementNotice: '继续即表示您同意我们的',
    termsOfService: '服务条款',
    privacyPolicy: '隐私政策',
    and: '和',
    dataCollectionPolicy: '数据收集政策',
    dataCollectionPolicyUrl: 'https://link.langbot.app/zh/docs/data-policy',
    loading: '加载中...',
    fieldRequired: '此字段为必填项',
    or: '或',
    loginWithSpace: '使用 LangBot 账号登录',
    spaceLoginRecommended: '推荐：使用官方提供的稳定模型 API 和云服务',
    loginLocal: '使用本地账号登录',
    loginWithPassword: '通过密码登录',
    spaceLoginTitle: '通过 LangBot 账号登录',
    spaceLoginDescription: '扫描二维码或访问下方链接进行授权',
    spaceLoginUserCode: '您的验证码',
    spaceLoginExpires: '验证码将在 {{seconds}} 秒后过期',
    spaceLoginWaiting: '等待授权中...',
    spaceLoginSuccess: '授权成功',
    spaceLoginFailed: 'LangBot 账号登录失败',
    spaceLoginExpired: '验证码已过期，请重试',
    spaceLoginCancel: '取消',
    spaceLoginVisitLink: '访问链接',
    spaceLoginProcessing: '正在通过 LangBot 账号登录',
    spaceLoginProcessingDescription: '请稍候，正在完成登录...',
    spaceLoginSuccessDescription: '正在跳转到 LangBot...',
    spaceLoginError: '登录失败',
    spaceLoginNoCode: '缺少授权码',
    backToLogin: '返回登录',
    backToHome: '返回首页',
    spaceAccountCannotChangePassword: 'LangBot 账号无法在此修改密码',
    theme: '主题',
    changePassword: '修改密码',
    currentPassword: '当前密码',
    newPassword: '新密码',
    confirmNewPassword: '确认新密码',
    enterCurrentPassword: '输入当前密码',
    enterNewPassword: '输入新密码',
    enterConfirmPassword: '确认新密码',
    currentPasswordRequired: '当前密码不能为空',
    newPasswordRequired: '新密码不能为空',
    confirmPasswordRequired: '确认密码不能为空',
    passwordsDoNotMatch: '两次输入的密码不一致',
    changePasswordSuccess: '密码修改成功',
    changePasswordFailed: '密码修改失败，请检查当前密码是否正确',
    apiIntegration: 'API 集成',
    apiIntegrationDescription: '管理用于外部访问的 API 密钥和 Webhook',
    apiKeys: 'API 密钥',
    manageApiIntegration: '管理 API 集成',
    manageApiKeys: '管理 API 密钥',
    createApiKey: '创建 API 密钥',
    apiKeyName: 'API 密钥名称',
    apiKeyDescription: 'API 密钥描述',
    apiKeyValue: 'API 密钥值',
    apiKeyCreated: 'API 密钥创建成功',
    apiKeyDeleted: 'API 密钥删除成功',
    apiKeyDeleteConfirm: '确定要删除此 API 密钥吗？',
    apiKeyNameRequired: 'API 密钥名称不能为空',
    copyApiKey: '复制 API 密钥',
    apiKeyCopied: 'API 密钥已复制到剪贴板',
    noApiKeys: '暂无 API 密钥',
    apiKeyHint: 'API 密钥允许外部系统访问 LangBot 的 Service API',
    mcpTab: 'MCP',
    mcpHint:
      'LangBot 提供 MCP（Model Context Protocol）服务，让 AI Agent 管理本实例，复用与 Service API 相同的 API 密钥。',
    mcpEndpoint: 'MCP 接入地址',
    mcpAuthTitle: '鉴权方式',
    mcpAuthDesc: '使用「API 密钥」标签页中的任意密钥，通过请求头传入：',
    mcpGlobalKeyNote:
      '也可在 config.yaml 中设置全局 API 密钥（api.global_api_key），无需登录即可使用。',
    mcpClientConfigTitle: 'MCP 客户端配置示例',
    webhooks: 'Webhooks',
    createWebhook: '创建 Webhook',
    webhookName: 'Webhook 名称',
    webhookUrl: 'Webhook URL',
    webhookDescription: 'Webhook 描述',
    webhookEnabled: '是否启用',
    webhookCreated: 'Webhook 创建成功',
    webhookDeleted: 'Webhook 删除成功',
    webhookDeleteConfirm: '确定要删除此 Webhook 吗？',
    webhookNameRequired: 'Webhook 名称不能为空',
    webhookUrlRequired: 'Webhook URL 不能为空',
    noWebhooks: '暂无 Webhook',
    webhookHint: 'Webhook 允许 LangBot 将个人消息和群消息事件推送到外部系统',
    actions: '操作',
    apiKeyCreatedMessage: '请复制此 API 密钥，若按钮无效，请手动复制。',
    apiKeyStoredSecurely: '密钥仅在创建时显示',
    none: '无',
    more: '更多 ({{count}})',
    less: '收起',
    noItems: '暂无内容',
  },
  notFound: {
    title: '页面不存在',
    description:
      '您要查找的页面似乎不存在。请检查您输入的 URL 是否正确，或者返回首页。',
    back: '上一级',
    home: '返回主页',
    help: '查看帮助文档',
  },
  models: {
    title: '模型配置',
    description: '配置和管理可在流水线中使用的模型',
    createModel: '创建对话模型',
    editModel: '编辑模型',
    getModelListError: '获取模型列表失败：',
    modelName: '模型名称',
    modelProvider: '模型提供商',
    modelBaseURL: '基础 URL',
    modelAbilities: '模型能力',
    saveSuccess: '保存成功',
    saveError: '保存失败：',
    createSuccess: '创建成功',
    createError: '创建失败：',
    deleteSuccess: '删除成功',
    deleteError: '删除失败：',
    deleteConfirmation: '你确定要删除这个模型吗？',
    modelNameRequired: '模型名称不能为空',
    modelProviderRequired: '模型供应商不能为空',
    requestURLRequired: '请求URL不能为空',
    apiKeyRequired: 'API Key不能为空',
    keyNameRequired: '键名不能为空',
    mustBeValidNumber: '必须是有效的数字',
    mustBeTrueOrFalse: '必须是 true 或 false',
    requestURL: '请求URL',
    scanURL: '扫描模型地址',
    scanURLPlaceholder: '留空则默认使用请求URL + /models',
    scanURLDescription:
      '当模型扫描接口与模型调用接口不是同一个地址时，在这里填写实际的模型列表接口。',
    apiKey: 'API Key',
    abilities: '能力',
    selectModelAbilities: '选择模型能力',
    visionAbility: '视觉能力',
    functionCallAbility: '函数调用',
    reasoningAbility: '思考能力',
    reasoningLevel: '思考档位',
    reasoningLevels: {
      providerDefault: 'Provider 默认',
      disabled: '关闭',
      enabled: '开启',
      minimal: '最低',
      low: '低',
      medium: '中',
      high: '高',
      xhigh: '极高',
      max: '最大',
    },
    contextLength: '上下文窗口',
    contextLengthPlaceholder: '未知',
    contextLengthInvalid: '上下文窗口必须是正整数',
    extraParameters: '额外参数',
    addParameter: '添加参数',
    keyName: '键名',
    type: '类型',
    value: '值',
    string: '字符串',
    number: '数字',
    boolean: '布尔值',
    object: '对象',
    objectJsonPlaceholder: '{ "type": "disabled" }',
    invalidJsonObject: '值必须是有效的 JSON 对象',
    selectModelProvider: '选择模型供应商',
    modelProviderDescription: '请填写供应商向您提供的模型名称',
    modelManufacturer: '模型厂商',
    aggregationPlatform: '中转平台',
    selfDeployed: '自部署',
    builtin: '内置',
    selectModel: '请选择模型',
    testSuccess: '测试成功',
    testError: '测试失败，请检查模型配置',
    llmModels: '对话模型',
    localProvider: '本地',
    localProviderDescription: '在本地配置和管理的模型',
    spaceProviderDescription: '从您的 LangBot 账号同步的模型',
    spaceDisabledForLocalAccount: '使用 LangBot 账号登录以使用云端模型',
    syncModels: '同步',
    syncSuccess: '同步完成：创建 {{created}} 个，更新 {{updated}} 个',
    syncError: '同步失败：',
    spaceModelReadOnly: 'Space 模型为只读',
    noSpaceModels: '暂无 Space 模型。点击同步按钮从 Space 获取模型。',
    noLocalModels: '暂无本地模型。点击创建按钮添加模型。',
    providerCount: '共 {{count}} 个自定义供应商',
    // 供应商结构新增键
    addModel: '添加模型',
    manualAdd: '手动添加',
    scanAdd: '扫描添加',
    scanModels: '扫描模型',
    scanModelsHint: '从当前供应商接口读取可用模型，然后勾选要添加的模型。',
    scannedModels: '扫描结果',
    scanDebug: '调试信息',
    searchScannedModels: '搜索扫描结果',
    noScannedModels: '还没有扫描结果，点击上方按钮开始扫描。',
    noScannedModelsMatch: '没有匹配的模型',
    addSelectedModels: '添加所选模型',
    addSelectedModelsSuccess: '已添加 {{count}} 个模型',
    selectAll: '全选模型',
    alreadyAdded: '已添加',
    addLLMModel: '添加对话模型',
    addEmbeddingModel: '添加嵌入模型',
    provider: '供应商',
    existingProvider: '已有供应商',
    newProvider: '新建供应商',
    selectProvider: '选择供应商',
    requester: '供应商类型',
    selectRequester: '选择供应商类型',
    searchProviders: '搜索供应商...',
    langbotModelsDescription: 'LangBot Space 提供的云端模型',
    credits: '积分',
    loginWithSpace: '使用 LangBot 账号登录',
    loginToUseModels: '通过 LangBot 账号登录以使用云端模型',
    ownerMustBindSpace:
      '工作区所有者需要绑定 LangBot 账号才能使用 LangBot 模型。',
    usesOwnerSpaceBilling: '使用工作区所有者的 LangBot 账号计费与积分。',
    noModels: '暂无模型',
    langbotModels: 'LangBot 模型',
    spaceTrialTooltip:
      '免费试用积分已就绪！通过 LangBot 账号登录即可零配置使用云端模型。',
    unlockModels: '登录以使用',
    editProvider: '编辑供应商',
    addProvider: '添加供应商',
    addProviderHint: '添加自定义供应商以使用其他来源的模型',
    addProviderHintSimple: '添加自定义供应商以使用模型',
    noProviders: '暂无自定义供应商',
    providerName: '供应商名称',
    providerNameRequired: '供应商名称不能为空',
    requesterRequired: '供应商类型不能为空',
    providerSaved: '供应商已保存',
    providerCreated: '供应商已创建',
    providerSaveError: '保存供应商失败：',
    providerDeleted: '供应商已删除',
    providerDeleteError: '删除供应商失败：',
    deleteProviderConfirmation: '你确定要删除这个供应商吗？',
    loadError: '加载数据失败',
    chat: '对话',
    embedding: '嵌入',
    rerank: '重排序',
    rerankUrlTooltip:
      '重排序接口的完整 URL 覆盖（如 https://dashscope.aliyuncs.com/compatible-api/v1/reranks）',
    rerankPathTooltip: '添加到基础 URL 后的重排序路径（默认：rerank）',
    modelsCount: '{{count}} 个模型',
    expandModels: '展开',
    collapseModels: '收起',
    fallback: {
      primary: '主模型',
      fallbackList: '备用模型',
      addFallback: '添加备用模型',
    },
  },
  bots: {
    title: '机器人',
    description: '创建和管理机器人，这是 LangBot 与各个平台连接的入口',
    createBot: '创建机器人',
    selectFromSidebar: '从侧边栏选择一个机器人',
    editBot: '编辑机器人',
    getBotListError: '获取机器人列表失败：',
    botName: '机器人名称',
    botDescription: '机器人描述',
    botNameRequired: '机器人名称不能为空',
    botDescriptionRequired: '机器人描述不能为空',
    adapterRequired: '适配器不能为空',
    defaultDescription: '一个机器人',
    getBotConfigError: '获取机器人配置失败：',
    saveSuccess: '保存成功',
    saveError: '保存失败：',
    createSuccess: '创建成功 请启用或修改绑定流水线',
    createError: '创建失败：',
    deleteSuccess: '删除成功',
    deleteError: '删除失败：',
    deleteConfirmation: '你确定要删除这个机器人吗？',
    platformAdapter: '平台/适配器选择',
    selectAdapter: '选择适配器',
    adapterConfig: '适配器配置',
    viewAdapterDocs: '查看文档',
    bindPipeline: '绑定流水线',
    selectPipeline: '选择流水线',
    selectBot: '请选择机器人',
    botLogTitle: '机器人日志',
    enableAutoRefresh: '开启自动刷新',
    session: '会话',
    yesterday: '昨天',
    earlier: '更久之前',
    dateFormat: '{{month}}月{{day}}日',
    setBotEnableError: '设置机器人启用状态失败',
    log: '日志',
    configuration: '配置',
    logs: '日志',
    basicInfo: '基础信息',
    basicInfoDescription: '设置机器人名称和描述',
    routingConnection: '路由与连接',
    routingConnectionDescription: '绑定处理此机器人消息的流水线',
    routingRules: '条件路由规则',
    routingRulesDescription:
      '按顺序匹配，命中第一条规则后路由到对应流水线；都不匹配时使用上方默认流水线',
    addRoutingRule: '添加规则',
    ruleTypeLauncherType: '会话类型',
    ruleTypeLauncherId: '会话 ID',
    ruleTypeMessageContent: '消息内容',
    operatorEq: '等于',
    operatorNeq: '不等于',
    operatorContains: '包含',
    operatorNotContains: '不包含',
    operatorStartsWith: '前缀匹配',
    operatorRegex: '正则匹配',
    operatorHas: '包含',
    operatorNotHas: '不包含',
    ruleTypeMessageHasElement: '消息元素类型',
    ruleValueElementPlaceholder: '选择元素类型',
    elementImage: '图片',
    elementVoice: '语音',
    elementFile: '文件',
    elementForward: '转发',
    elementFace: '表情',
    elementAt: '@某人',
    elementAtAll: '@全体',
    elementQuote: '引用',
    ruleValuePlaceholder: '匹配值',
    ruleValueLauncherIdPlaceholder: '群号或用户 ID',
    ruleValueMessagePlaceholder: '消息内容',
    ruleValuePrefixPlaceholder: '如: !draw',
    ruleValueRegexpPlaceholder: '如: ^/help',
    pipelineDiscard: '丢弃消息',
    sessionTypePerson: '私聊',
    sessionTypeGroup: '群聊',
    adapterConfigDescription: '配置所选平台适配器',
    dangerZone: '危险区域',
    dangerZoneDescription: '不可逆的操作',
    deleteBotAction: '删除此机器人',
    deleteBotHint: '删除后，所有关联配置将被永久移除，且无法恢复。',
    webhookUrl: 'Webhook 回调地址',
    webhookUrlCopied: 'Webhook 地址已复制',
    webhookUrlHint:
      '点击输入框自动全选，然后按 Ctrl+C (Mac: Cmd+C) 复制，或点击右侧按钮',
    webhookUrlHintEither: '以上两个地址任选其一填入平台配置即可',
    webhookSaasHint:
      'Webhook 需要公网可访问的域名。LangBot Cloud 为你的机器人提供开箱即用的公网地址。',
    webhookSaasLink: '了解 LangBot Cloud',
    adapterCategory: {
      popular: '热门',
      china: '中国',
      global: '全球',
      protocol: '协议',
    },
    logLevel: '日志级别',
    allLevels: '全部级别',
    selectLevel: '选择级别',
    levelsSelected: '个级别已选',
    viewDetailedLogs: '查看详细日志',
    viewDetails: '详情',
    collapse: '收起',
    imagesAttached: '张图片',
    noLogs: '暂无日志',
    sessionMonitor: {
      title: '会话监控',
      sessions: '会话列表',
      noSessions: '暂无会话',
      selectSession: '选择一个会话查看消息',
      noMessages: '该会话暂无消息',
      messages: '条消息',
      messageCount: '{{count}} 条消息',
      loading: '加载中...',
      loadingSessions: '加载会话中...',
      loadingMessages: '加载消息中...',
      user: '用户',
      variables: '变量',
      platform: '平台',
      lastActive: '最近活跃',
      refresh: '刷新',
      active: '活跃',
      inactive: '不活跃',
      discarded: '已丢弃',
      userMessage: '用户',
      botMessage: '助手',
    },
    admins: {
      title: '管理员',
      description: '拥有此机器人命令管理员权限的会话（用户/群组 ID）',
      addAdmin: '添加管理员',
      launcherType: '类型',
      launcherId: 'ID',
      typePerson: '私聊',
      typeGroup: '群聊',
      placeholderId: '用户或群组 ID',
      addSuccess: '添加成功',
      addError: '添加失败：',
      deleteSuccess: '已移除',
      deleteError: '移除失败：',
      noAdmins: '暂无管理员',
      setAdminTitle: '设为管理员',
      adminBadge: '管理员',
      configureAdmins: '配置管理员',
      removeAdminTitle: '移除管理员权限',
    },
  },
  plugins: {
    title: '插件扩展',
    description: '安装和配置用于扩展功能的插件，请在流水线配置中选用',
    createPlugin: '创建插件',
    editPlugin: '编辑插件',
    installed: '已安装',
    marketplace: '扩展市场',
    arrange: '编排',
    install: '安装',
    installPlugin: '安装插件',
    newPlugin: '新建插件',
    onlySupportGithub: '目前仅支持从 GitHub 安装',
    enterGithubLink: '请输入插件的Github链接',
    installing: '正在安装插件...',
    installSuccess: '插件安装成功',
    installFailed: '插件安装失败：',
    searchPlugin: '搜索插件',
    sortBy: '排序方式',
    mostStars: '最多星标',
    recentlyAdded: '最近新增',
    recentlyUpdated: '最近更新',
    noMatchingPlugins: '没有找到匹配的插件',
    loading: '加载中...',
    getPluginListError: '获取插件列表失败:',
    pluginConfig: '插件配置',
    noPluginInstalled: '暂未安装任何插件',
    noExtensionInstalled: '暂未安装任何扩展',
    loadingExtensions: '正在加载扩展...',
    groupByType: '按格式分组',
    pluginSort: '插件排序',
    pluginSortDescription:
      '插件顺序会影响同一事件内的处理顺序，请拖动插件卡片排序',
    pluginSortSuccess: '插件排序成功',
    pluginSortError: '插件排序失败：',
    pluginNoConfig: '插件没有配置项。',
    systemDisabled: '插件系统未启用',
    systemDisabledDesc: '尚未启用插件系统，请根据文档修改配置',
    connectionError: '插件系统连接异常',
    connectionErrorDesc: '请检查插件系统配置或联系管理员',
    errorDetails: '错误详情',
    loadingStatus: '正在检查插件系统状态...',
    failedToGetStatus: '获取插件系统状态失败',
    pluginSystemNotReady: '插件系统未就绪，无法执行此操作',
    debugInfo: '调试信息',
    debugInfoTitle: '插件调试信息',
    debugUrl: '调试地址',
    debugKey: '调试密钥',
    debugKeyExpires: '将于 {{time}} 轮换；每个工作区的密钥不同',
    noDebugKey: '(未设置)',
    debugKeyDisabled: '调试凭据暂不可用',
    boxStatusTitle: 'Box 运行时',
    boxStatus: '状态',
    boxConnected: '已连接',
    boxUnavailable: '不可用',
    boxBackend: '后端',
    boxProfile: '配置',
    boxSandboxes: '沙箱数',
    boxErrors: '错误数',
    boxSessionImage: '镜像',
    boxSessionBackend: '后端',
    boxSessionResources: '资源',
    boxSessionNetwork: '网络',
    boxStatusLoadFailed: '加载 Box 状态失败',
    failedToGetDebugInfo: '获取调试信息失败',
    copiedToClipboard: '已复制到剪贴板',
    deleting: '删除中...',
    deletePlugin: '删除插件',
    cancel: '取消',
    saveConfig: '保存配置',
    saving: '保存中...',
    confirmDeletePlugin: '你确定要删除插件（{{author}}/{{name}}）吗？',
    deleteDataCheckbox: '同时删除插件配置和持久化存储',
    confirmDelete: '确认删除',
    deleteError: '删除失败：',
    close: '关闭',
    deleteConfirm: '删除确认',
    deleteSuccess: '删除成功',
    dangerZone: '危险区域',
    dangerZoneDescription: '不可逆的操作',
    modifyFailed: '修改失败：',
    componentName: {
      Tool: '工具',
      EventListener: '事件监听器',
      Command: '命令',
      KnowledgeEngine: '知识引擎',
      Parser: '解析器',
      Page: '页面',
    },
    uploadLocal: '本地上传',
    debugging: '调试中',
    uploadLocalPlugin: '上传本地插件',
    localPreview: {
      title: '预览本地插件包',
      unpacking: '正在解包预览...',
      unpackComplete: '解包预览完成',
      failed: '解包预览失败',
      pluginInfo: '插件信息',
      packageInfo: '包信息',
      name: '名称',
      author: '作者',
      version: '版本',
      fileCount: '文件数',
      dependencies: '依赖',
      components: '组件',
      ready: '插件包已解包，确认后开始安装。',
    },
    uploadPluginOnly: '仅支持 .lbpkg 文件',
    dragToUpload: '拖拽文件到此处上传',
    unsupportedFileType: '不支持的文件类型，仅支持 .lbpkg 文件',
    uploadingPlugin: '正在上传插件...',
    uploadSuccess: '上传成功',
    uploadFailed: '上传失败',
    selectFileToUpload: '选择要上传的插件文件',
    askConfirm: '确定要安装插件 "{{name}}" ({{version}}) 吗？',
    askConfirmNoVersion: '确定要安装插件 "{{name}}" 吗？',
    fromGithub: '来自 GitHub',
    fromLocal: '本地安装',
    fromMarketplace: '来自市场',
    componentsList: '组件: ',
    noComponents: '无组件',
    delete: '删除插件',
    update: '更新插件',
    new: '新',
    updateConfirm: '更新确认',
    confirmUpdatePlugin: '你确定要更新插件（{{author}}/{{name}}）吗？',
    confirmUpdate: '确认更新',
    updating: '更新中...',
    updateSuccess: '插件更新成功',
    updateError: '更新失败：',
    saveConfigSuccessNormal: '保存配置成功',
    saveConfigError: '保存配置失败：',
    config: '配置',
    readme: '文档',
    viewSource: '查看来源',
    loadingReadme: '正在加载文档...',
    noReadme: '该插件没有提供 README 文档',
    tabDocs: '文档',
    tabLogs: '日志',
    logsLevelAll: '全部级别',
    logsRefresh: '刷新',
    logsAutoRefresh: '自动刷新',
    logsEmpty: '暂无日志。插件通过 logger 打印的日志会显示在这里。',
    fileUpload: {
      tooLarge: '文件大小超过 10MB 限制',
      success: '文件上传成功',
      failed: '文件上传失败',
      uploading: '上传中...',
      chooseFile: '选择文件',
      addFile: '添加文件',
    },
    installFromGithub: '来自 GitHub',
    enterRepoUrl: '请输入 GitHub 仓库地址',
    repoUrlPlaceholder: '例如: https://github.com/owner/repo',
    fetchingReleases: '正在获取 Release 列表...',
    selectRelease: '选择 Release',
    noReleasesFound: '未找到 Release',
    fetchReleasesError: '获取 Release 列表失败：',
    selectAsset: '选择要安装的文件',
    noAssetsFound: '该 Release 没有可用的 .lbpkg 文件',
    fetchAssetsError: '获取文件列表失败：',
    backToReleases: '返回 Release 列表',
    backToRepoUrl: '返回仓库地址',
    backToAssets: '返回文件选择',
    releaseTag: 'Tag: {{tag}}',
    releaseName: '名称: {{name}}',
    publishedAt: '发布于: {{date}}',
    prerelease: '预发布',
    assetSize: '大小: {{size}}',
    confirmInstall: '确认安装',
    installFromGithubDesc: '从 GitHub Release 安装插件',
    goToMarketplace: '前往扩展市场',
    installProgress: {
      title: '正在安装 {{name}}',
      titleGeneric: '扩展安装',
      titlePlugin: '正在安装插件 {{name}}',
      titleMCP: '正在安装 MCP 服务器 {{name}}',
      titleSkill: '正在安装技能 {{name}}',
      overallProgress: '总体进度',
      downloading: '下载中',
      installingDeps: '安装依赖',
      initializing: '初始化配置',
      launching: '启动中',
      completed: '已完成',
      failed: '安装失败',
      downloadSize: '包大小: {{size}}',
      depsInfo: '共 {{count}} 个依赖需要安装',
      depsProgress: '已安装 {{installed}}/{{total}} · 剩余 {{remaining}} 个',
      installComplete: '安装成功',
      installCompletePlugin: '插件安装成功',
      installCompleteMCP: 'MCP 服务器安装成功',
      installCompleteSkill: '技能安装成功',
      dismiss: '关闭',
      background: '后台运行',
      taskQueue: '安装任务',
      clearCompleted: '清除已完成',
      noTasks: '暂无安装任务',
    },
  },
  market: {
    searchPlaceholder: '搜索插件...',
    searchPlaceholderCount: '搜索 {{count}} 个扩展、能力或场景...',
    searchResults: '搜索到 {{count}} 个扩展',
    totalPlugins: '共 {{count}} 个扩展',
    noPlugins: '暂无插件',
    noResults: '未找到相关插件',
    loadingMore: '加载更多...',
    loading: '加载中...',
    allLoaded: '已显示全部插件',
    allLoadedCount: '已显示全部 {{count}} 个扩展',
    install: '安装',
    installCard: '安装 {{name}}',
    installConfirm: '确定要安装插件 "{{name}}" ({{version}}) 吗？',
    downloadComplete: '插件 "{{name}}" 下载完成',
    installFailed: '安装失败，请稍后重试',
    loadFailed: '获取插件列表失败，请稍后重试',
    noDescription: '暂无描述',
    recommendation: {
      pause: '暂停自动轮播',
      resume: '继续自动轮播',
    },
    notFound: '插件信息未找到',
    sortBy: '排序方式',
    sort: {
      hottest: '热度最高',
      recentlyAdded: '最近新增',
      recentlyUpdated: '最近更新',
      mostDownloads: '最多下载',
      leastDownloads: '最少下载',
    },
    downloads: '次下载',
    download: '下载',
    like: '点赞',
    unlike: '取消点赞',
    likeFailed: '点赞失败，请稍后重试',
    repository: '代码仓库',
    downloadFailed: '下载失败',
    noReadme: '该插件没有提供 README 文档',
    description: '描述',
    tagLabel: '标签',
    submissionTitle: '您有插件提交正在审核中： {{name}}',
    submissionPending: '您的插件提交正在审核中： {{name}}',
    submissionApproved: '您的插件提交已通过审核： {{name}}',
    submissionRejected: '您的插件提交已被拒绝： {{name}}',
    clickToRevoke: '撤回',
    revokeSuccess: '撤回成功',
    revokeFailed: '撤回失败',
    submissionDetails: '插件提交详情',
    markAsRead: '已读',
    markAsReadSuccess: '已标记为已读',
    markAsReadFailed: '标记为已读失败',
    filterByComponent: '插件组件',
    filterByComponentHint:
      '插件提供的能力类型，如工具（Tool）、命令（Command）、事件监听器（EventListener）等，用于扩展 LangBot 的各项能力。按组件筛选可只看提供对应能力的插件。',
    allComponents: '全部组件',
    componentName: {
      Tool: '工具',
      EventListener: '事件监听器',
      Command: '命令',
      KnowledgeEngine: '知识引擎',
      Parser: '解析器',
      Page: '页面',
    },
    filterByType: '类型',
    allTypes: '全部类型',
    typePlugin: '插件',
    typeMCP: 'MCP',
    typeSkill: '技能',
    requestPlugin: '请求插件',
    tags: {
      filterByTags: '按标签筛选',
      selected: '已选',
      selectTags: '选择标签',
      clearAll: '清空',
      noTags: '暂无标签',
    },
    filters: {
      allFormats: '全部格式',
      more: '筛选',
      advancedTitle: '高级筛选',
      advancedDescription:
        '普通用户通常不需要选择这些类型；仅在你明确知道扩展格式时使用。',
      technicalType: '扩展格式',
    },
    allExtensions: '全部扩展',
    viewDetails: '查看详情',
    deprecated: '已弃用',
    deprecatedTooltip: '请安装对应「知识引擎」插件',
  },
  mcp: {
    title: 'MCP',
    createServer: '添加 MCP 服务器',
    addMCPServer: '添加 MCP 服务器',
    editServer: '修改 MCP 服务器',
    deleteServer: '删除 MCP 服务器',
    confirmDeleteServer: '你确定要删除此 MCP 服务器吗？',
    confirmDeleteTitle: '删除 MCP 服务器',
    getServerListError: '获取 MCP 服务器列表失败：',
    serverName: '服务器名称',
    serverMode: '连接模式',
    selectMode: '选择模式',
    stdio: 'Stdio模式',
    sse: 'SSE模式',
    http: 'HTTP模式',
    local: '本地（Stdio）',
    remote: '远程',
    localModeDescription: '在 Box 沙箱中以子进程方式本地运行 MCP 服务器。',
    remoteModeDescription:
      '通过 URL 连接远程 MCP 服务器，传输方式（Streamable HTTP 或 SSE）将自动检测。',
    remoteUrlPlaceholder: 'https://example.com/mcp',
    remoteUrlDescription:
      '粘贴 MCP 服务器链接即可，同时支持 Streamable HTTP 和旧版 SSE 端点。',
    noServerInstalled: '暂未配置任何 MCP 服务器',
    serverNameRequired: '服务器名称不能为空',
    commandRequired: '命令不能为空',
    urlRequired: 'URL 不能为空',
    timeoutMustBePositive: '超时时间必须是正数',
    command: '命令',
    args: '参数',
    env: '环境变量',
    url: 'URL地址',
    headers: '请求头',
    timeout: '超时时间',
    toolCallTimeout: '工具调用超时（秒）',
    toolCallTimeoutDescription:
      '单次工具调用的最长等待时间。设为 0 表示不限制，默认 300 秒。',
    addArgument: '添加参数',
    addEnvVar: '添加环境变量',
    addHeader: '添加请求头',
    keyName: '键名',
    value: '值',
    testing: '测试中...',
    connecting: '连接中...',
    testSuccess: '测试成功',
    testFailed: '测试失败：',
    testError: '刷新出错',
    refreshSuccess: '刷新成功',
    refreshFailed: '刷新失败：',
    connectionSuccess: '连接成功',
    connectionFailed: '连接失败，请检查URL',
    connectionFailedStatus: '连接失败',
    boxDisabledStdioRefused:
      'Stdio 模式的 MCP 服务器依赖 Box 沙箱，目前已在配置中禁用（box.enabled = false）。',
    boxUnavailableStdioRefused:
      'Stdio 模式的 MCP 服务器依赖 Box 沙箱，目前无法连接。',
    boxStdioRefusedSuggestion:
      '请启用 Box（box.enabled = true）并确认运行时连接正常，或将此服务器切换到 http/sse 模式。',
    boxRequired: '需要 Box',
    disabledByPolicy: '已被策略禁用',
    stdioDisabledByPolicy: '此部署已禁用 Stdio MCP，请改用远程 MCP 服务器。',
    stdioBlockedByBoxToast:
      'Box 沙箱已禁用或不可用，无法保存 stdio 模式的 MCP。请启用 Box 或改为 http/sse 模式。',
    toolsFound: '个工具',
    unknownError: '未知错误',
    noToolsFound: '未找到任何工具',
    noResourcesFound: '未找到任何资源',
    tabTools: '工具',
    tabResources: '资源',
    tabDocs: '文档',
    tabLogs: '日志',
    logsLevelAll: '全部级别',
    logsRefresh: '刷新',
    logsAutoRefresh: '自动刷新',
    logsEmpty: '暂无日志。MCP 服务器的运行日志会显示在这里。',
    noReadme: '暂无文档',
    parseResultFailed: '解析测试结果失败',
    noResultReturned: '测试未返回结果',
    getTaskFailed: '获取任务状态失败',
    noTaskId: '未获取到任务ID',
    deleteSuccess: '删除成功',
    deleteFailed: '删除失败：',
    deleteError: '删除失败：',
    saveSuccess: '保存成功',
    saveError: '保存失败：',
    createSuccess: '创建成功',
    createFailed: '创建失败：',
    createError: '创建失败：',
    loadFailed: '加载失败',
    modifyFailed: '修改失败：',
    toolCount: '工具：{{count}}',
    parameterCount: '参数：{{count}}',
    noParameters: '无参数',
    resourceCount: '资源：{{count}}',
    resourceBinaryContent: '二进制内容（无法显示）',
    resourceBinaryOmitted: '二进制内容已按资源安全策略省略',
    resourceTruncated: '内容已按字节或 token 限制截断',
    resourceReadFailed: '读取资源内容失败',
    statusConnected: '已连接',
    statusDisconnected: '未连接',
    statusError: '连接错误',
    statusDisabled: '已禁用',
    loading: '加载中...',
    starCount: '星标：{{count}}',
    install: '安装',
    installFromGithub: '从Github安装MCP服务器',
    add: '添加',
    name: '名称',
    nameRequired: '名称不能为空',
    sseTimeout: 'SSE超时时间',
    sseTimeoutDescription: '用于建立SSE连接的超时时间',
    extraParametersDescription: '额外参数，用于配置MCP服务器的特定行为',
    timeoutMustBeNumber: '超时时间必须是数字',
    timeoutNonNegative: '超时时间不能为负数',
    sseTimeoutMustBeNumber: 'SSE超时时间必须是数字',
    sseTimeoutNonNegative: 'SSE超时时间不能为负数',
    updateSuccess: '更新成功',
    updateFailed: '更新失败：',
    selectFromSidebar: '从侧边栏选择一个 MCP 服务器',
    dangerZone: '危险区域',
    dangerZoneDescription: '此 MCP 服务器的不可逆操作。',
    deleteMCPAction: '删除此 MCP 服务器',
    deleteMCPHint: '删除后，此 MCP 服务器配置将无法恢复。',
  },
  pipelines: {
    title: '流水线',
    description: '流水线定义了对消息事件的处理流程，用于绑定到机器人',
    createPipeline: '创建流水线',
    selectFromSidebar: '从侧边栏选择一个流水线',
    editPipeline: '编辑流水线',
    chat: '对话',
    configuration: '配置',
    debugChat: '对话调试',
    getPipelineListError: '获取流水线列表失败：',
    daysAgo: '天前',
    today: '今天',
    updateTime: '更新于',
    defaultBadge: '默认',
    sortBy: '排序方式',
    newestCreated: '最新创建',
    earliestCreated: '最早创建',
    recentlyEdited: '最近编辑',
    earliestEdited: '最早编辑',
    basicInfo: '基础信息',
    basicInfoDescription: '设置流水线名称、图标和描述',
    aiCapabilities: 'AI 能力',
    triggerConditions: '触发条件',
    safetyControls: '安全控制',
    outputProcessing: '输出处理',
    nameRequired: '名称不能为空',
    descriptionRequired: '描述不能为空',
    createSuccess: '创建成功 请编辑流水线详细参数',
    createError: '创建失败：',
    saveSuccess: '保存成功',
    saveError: '保存失败：',
    copySuffix: ' Copy',
    deleteConfirmation:
      '你确定要删除这个流水线吗？已绑定此流水线的机器人将无法使用。',
    defaultPipelineCannotDelete: '默认流水线不可删除',
    deleteSuccess: '删除成功',
    deleteError: '删除失败：',
    copyConfirmTitle: '确认复制',
    copyConfirmation:
      '确定要复制这个流水线吗？复制将创建一个包含完整配置的新流水线。',
    unsavedChanges: '有未保存的更改',
    dangerZone: '危险区域',
    dangerZoneDescription: '不可逆的操作',
    deletePipelineAction: '删除此流水线',
    deletePipelineHint: '删除后，绑定此流水线的机器人将无法正常工作。',
    copyPipelineAction: '复制此流水线',
    copyPipelineHint: '创建一条新的流水线，并复制所有配置。',
    extensions: {
      title: '扩展集成',
      loadError: '加载插件列表失败',
      saveSuccess: '保存成功',
      saveError: '保存失败',
      noPluginsAvailable: '暂无可用插件',
      disabled: '已禁用',
      noPluginsSelected: '未选择任何插件',
      addPlugin: '添加插件',
      selectPlugins: '选择插件',
      pluginsTitle: '插件',
      mcpServersTitle: 'MCP 服务器',
      mcpResourcesTitle: 'MCP 资源',
      noMCPServersSelected: '未选择任何 MCP 服务器',
      noMCPResourcesAvailable: '暂无可用 MCP 资源',
      addMCPServer: '添加 MCP 服务器',
      selectMCPServers: '选择 MCP 服务器',
      enableMCPResourceAgentRead: '允许模型读取',
      toolCount: '{{count}} 个工具',
      noPluginsInstalled: '无已安装的插件',
      noMCPServersConfigured: '无已配置的 MCP 服务器',
      selectAll: '全选',
      enableAllPlugins: '启用所有插件',
      enableAllMCPServers: '启用所有 MCP 服务器',
      enableAllSkills: '启用所有技能',
      allPluginsEnabled: '已启用所有插件',
      allMCPServersEnabled: '已启用所有 MCP 服务器',
      allSkillsEnabled: '已启用所有技能',
      skillsTitle: '技能',
      noSkillsSelected: '未选择任何技能',
      addSkill: '添加技能',
      selectSkills: '选择技能',
      noSkillsAvailable: '暂无可用技能',
      mcpServersScopeTooltip:
        '这里仅控制此流水线绑定哪些 MCP 服务器；具体 MCP 工具和资源在 AI 能力的内置 Agent 表单中选择。',
      enableAllMCPServersTooltip:
        '开启后，所有已配置且启用的 MCP 服务器都会进入 AI 能力里的 MCP 工具和资源候选范围。',
    },
    localAgent: {
      toolsTitle: '工具',
      toolsDescription:
        '选择此内置 Agent 可以调用的插件、MCP、技能和内置工具。',
      toolsScopeTooltip:
        'MCP 工具只会从扩展集成中已绑定的 MCP 服务器里出现；如需增加 MCP 工具来源，请先到扩展集成绑定对应服务器。',
      enableAllTools: '启用所有工具',
      allToolsEnabled: '已启用所有可用工具',
      noToolsSelected: '未选择任何工具',
      editTools: '编辑工具',
      builtinTools: '内置工具',
      pluginTools: '插件工具',
      skillTools: '技能工具',
      mcpTools: 'MCP 工具',
      mcpToolsScopeTooltip:
        '这里仅展示扩展集成当前允许的 MCP 服务器提供的工具。',
      skillToolsScopeTooltip:
        '技能工具会在 LangBot 技能服务和 Box 沙箱后端可用时出现，用于让 Agent 激活或注册技能。',
      selectTools: '选择工具',
      resourcesTitle: '资源',
      resourcesDescription: '选择此内置 Agent 可以读取的 MCP 资源和知识库。',
      knowledgeBases: '知识库',
      mcpResources: 'MCP 资源',
      mcpResourcesScopeTooltip:
        '这里仅展示扩展集成当前允许的 MCP 服务器暴露的资源。',
      enableMCPResourceRead: '允许模型读取 MCP 资源',
      mcpResourceReadTooltip:
        '关闭后，即使已选择资源，也不会把 MCP 资源内容注入给模型。',
      noMCPResourcesAvailable: '暂无可用 MCP 资源',
      selectKnowledgeBases: '选择知识库',
    },
    debugDialog: {
      title: '流水线对话',
      selectPipeline: '选择流水线',
      sessionType: '会话类型',
      privateChat: '私聊',
      groupChat: '群聊',
      send: '发送',
      reset: '重置对话',
      inputPlaceholder: '发送 {{type}} 消息...',
      noMessages: '暂无消息',
      userMessage: '用户',
      botMessage: '机器人',
      sendFailed: '发送失败',
      resetSuccess: '对话已重置',
      resetFailed: '重置失败',
      loadMessagesFailed: '加载消息失败',
      loadPipelinesFailed: '加载流水线失败',
      atTips: '提及机器人',
      streaming: '流式传输',
      streamOutput: '流式',
      connected: 'WebSocket已连接',
      disconnected: 'WebSocket未连接',
      connectionError: 'WebSocket连接错误',
      connectionFailed: 'WebSocket连接失败',
      notConnected: 'WebSocket未连接，请稍后重试',
      imageUploadFailed: '图片上传失败',
      reply: '回复',
      replyTo: '回复给',
      showMarkdown: '渲染',
      showRaw: '原文',
      allMembers: '全体成员',
      file: '文件',
      voice: '语音',
      uploadImage: '上传图片',
      uploading: '上传中...',
    },
    monitoring: {
      title: '监控日志',
      description: '查看此流水线的运行记录和错误信息（最近24小时）',
      detailedLogs: '详细日志',
    },
  },
  knowledge: {
    title: '知识库',
    createKnowledgeBase: '创建知识库',
    selectFromSidebar: '从侧边栏选择一个知识库',
    editKnowledgeBase: '编辑知识库',
    selectKnowledgeBase: '选择知识库',
    selectKnowledgeBases: '选择知识库',
    addKnowledgeBase: '添加知识库',
    noKnowledgeBaseSelected: '未选择知识库',
    empty: '无',
    editDocument: '文档',
    description: '配置可用于提升模型回复质量的知识库',
    metadata: '元数据',
    documents: '文档',
    kbNameRequired: '知识库名称不能为空',
    kbDescriptionRequired: '知识库描述不能为空',
    embeddingModelUUIDRequired: '嵌入模型不能为空',
    daysAgo: '天前',
    today: '今天',
    kbName: '知识库名称',
    kbDescription: '知识库描述',
    topK: '召回数量',
    topKRequired: '召回数量不能为空',
    topKMax: '召回数量最大值为 30',
    topKdescription: '召回相关文档块的数量，取值范围为 1-30',
    defaultDescription: '一个知识库',
    embeddingModelUUID: '嵌入模型',
    selectEmbeddingModel: '选择嵌入模型',
    embeddingModelDescription: '用于向量化文本，可在模型配置页面配置',
    updateTime: '更新于',
    cannotChangeEmbeddingModel: '知识库创建后不可修改嵌入模型',
    updateKnowledgeBaseSuccess: '知识库更新成功',
    updateKnowledgeBaseFailed: '知识库更新失败：',
    documentsTab: {
      name: '名称',
      status: '状态',
      noResults: '暂无文档',
      dragAndDrop: '拖拽文件到此处或点击上传',
      uploading: '上传中...',
      supportedFormats: '支持 PDF、Word、TXT、Markdown、HTML、ZIP 等文档格式',
      uploadSuccess: '文件上传成功！',
      uploadError: '文件上传失败：',
      uploadingFile: '上传文件中...',
      fileSizeExceeded: '文件大小超过 10MB 限制，请分割成较小的文件后上传',
      actions: '操作',
      delete: '删除文件',
      fileDeleteSuccess: '文件删除成功',
      fileDeleteFailed: '文件删除失败：',
      processing: '处理中',
      completed: '完成',
      failed: '失败',
      selectParser: '选择解析器',
      builtInParser: '由知识引擎提供',
      noParserAvailable:
        '没有解析器支持此文件类型，请安装支持该格式的解析器插件。',
      installParserHint: '前往扩展市场安装解析器 →',
      confirmUpload: '上传',
      cancelUpload: '取消',
    },
    deleteKnowledgeBaseConfirmation:
      '你确定要删除这个知识库吗？此知识库下的所有文档将被删除。',
    retrieve: '检索测试',
    retrieveTest: '检索测试',
    query: '查询',
    queryPlaceholder: '输入查询内容...',
    distance: '距离',
    content: '内容',
    fileName: '文件名',
    noResults: '暂无结果',
    retrieveError: '检索失败：',
    unknownEngine: '未知引擎',
    knowledgeEngine: '知识引擎',
    knowledgeEngineRequired: '知识引擎不能为空',
    selectKnowledgeEngine: '选择知识引擎',
    builtInEngine: '内置引擎',
    cannotChangeKnowledgeEngine: '知识库创建后不可修改知识引擎',
    basicInfo: '基础信息',
    basicInfoDescription: '设置知识库名称、图标和描述',
    engineSettings: '引擎设置',
    engineSettingsDescription: '所选知识引擎的配置',
    engineSettingsReadonly: '编辑模式下不可修改',
    engineSettingsInvalid: '引擎设置中存在无效项，请检查必填字段',
    retrievalSettingsInvalid: '检索设置中存在无效项，请检查必填字段',
    retrievalSettings: '检索设置',
    retrievalSettingsDescription: '配置从此知识库检索文档的方式',
    dangerZone: '危险区域',
    dangerZoneDescription: '不可逆的操作',
    deleteKbAction: '删除此知识库',
    deleteKbHint: '删除后，此知识库中的所有文档和数据将被永久移除。',
    noEnginesAvailable: '没有可用的知识库引擎',
    installEngineHint: '请先安装「知识引擎」插件',
    createKnowledgeBaseFailed: '知识库创建失败：',
    loadKnowledgeBaseFailed: '知识库加载失败：',
    deleteKnowledgeBaseFailed: '知识库删除失败：',
    getKnowledgeBaseListError: '获取知识库列表失败：',
    embeddingModel: '嵌入模型',
    embeddingModelRequired: '此引擎需要选择嵌入模型',
    addExternal: '添加外部知识库',
    createExternalSuccess: '外部知识库创建成功',
    updateExternalSuccess: '外部知识库更新成功',
    deleteExternalSuccess: '外部知识库删除成功',
    retriever: '检索器',
    selectRetriever: '选择一个检索器...',
    retrieverConfiguration: '检索器配置',
    retrieverInstallInfo: '您可以从',
    retrieverMarketLink: '此处安装知识检索器插件',
    migration: {
      title: '知识库迁移',
      description:
        '新版本已将知识库重构为插件化架构，并统一内置知识库和外部知识库为「知识引擎」插件，需要对旧知识库数据进行迁移。您的旧数据已自动备份在数据库中。',
      detected:
        '共检测到 {{total}} 个知识库需要迁移（{{internal}} 个内置知识库，{{external}} 个外部知识库）。',
      startWithInstall: '自动安装插件并迁移',
      startDataOnly: '仅迁移数据',
      dataOnlyHint:
        '「仅迁移数据」适合内网环境使用，请在迁移完成后自行安装对应插件',
      dismiss: '丢弃原数据',
      running: '正在迁移知识库，请稍候...',
      success: '知识库迁移完成',
      error: '知识库迁移失败：',
      dismissError: '操作失败',
      retry: '重试',
    },
  },
  register: {
    title: '初始化 LangBot 👋',
    description: '这是您首次启动 LangBot',
    adminAccountNote: '您在此处初始化使用的账号将作为管理员账号',
    register: '注册',
    initWithSpace: '通过 LangBot 账号初始化',
    spaceRecommended: '推荐：使用官方提供的稳定模型 API 和云服务',
    spaceInfoTip1: 'Space 提供统一的账户鉴权服务，不会上传您的任何敏感信息。',
    spaceInfoTip2:
      '使用 LangBot 账号登录可使用 LangBot Models 等云服务，您将会获得一定的免费模型调用额度帮助您快速起步。',
    spaceInfoTip3:
      '登录方式不会影响其他功能，您在任何情况下都可以配置使用其他来源的模型。',
    registerLocal: '注册本地账号',
    registerWithPassword: '通过邮箱密码组合注册',
    initSuccess: '初始化成功 请登录',
    initFailed: '初始化失败：',
  },
  resetPassword: {
    title: '重置密码 🔐',
    description: '输入恢复密钥和新的密码来重置您的账户密码',
    recoveryKey: '恢复密钥',
    recoveryKeyDescription:
      '存储在配置文件`data/config.yaml`的`system.recovery_key`中',
    newPassword: '新密码',
    enterRecoveryKey: '输入恢复密钥',
    enterNewPassword: '输入新密码',
    recoveryKeyRequired: '恢复密钥不能为空',
    newPasswordRequired: '新密码不能为空',
    resetPassword: '重置密码',
    resetting: '重置中...',
    resetSuccess: '密码重置成功，请登录',
    resetFailed: '密码重置失败，请检查邮箱和恢复密钥是否正确',
    backToLogin: '返回登录',
  },
  embedding: {
    description: '管理嵌入模型，用于向量化文本',
    createModel: '创建嵌入模型',
    editModel: '编辑嵌入模型',
    getModelListError: '获取嵌入模型列表失败：',
    embeddingModels: '嵌入模型',
    extraParametersDescription:
      '将在请求时附加到请求体中，如 encoding_format, dimensions 等',
  },
  llm: {
    llmModels: '对话模型',
    description: '管理 LLM 模型,用于对话消息生成',
    extraParametersDescription:
      '将在请求时附加到请求体中，如 max_tokens, temperature, top_p 等',
  },
  version: {
    newVersionAvailable: '有新版本可用',
    viewUpdateGuide: '查看更新方式',
    noReleaseNotes: '暂无更新日志',
  },
  account: {
    settings: '账户设置',
    settingsDescription: '管理你的密码和关联账户',
    setPassword: '设置密码',
    passwordSetSuccess: '密码设置成功',
    passwordStatus: '本地密码',
    passwordSet: '已设置',
    passwordNotSet: '未设置',
    passwordSetDescription: '您已设置本地密码，可使用邮箱密码登录',
    spaceStatus: 'LangBot 账号',
    spaceBound: '已绑定',
    spaceNotBound: '未绑定',
    spaceBoundDescription: '已绑定 LangBot 账号，可使用官方模型 API 和云服务',
    bindSpace: '绑定 LangBot 账号',
    bindSpaceDescription: '绑定后可使用官方模型 API 和云服务',
    bindSpaceButton: '绑定',
    bindSpaceConfirmTitle: '确认绑定',
    bindSpaceConfirmDescription: '您即将把本地实例绑定到 LangBot 账号',
    bindSpaceWarning:
      '绑定后，您的登录邮箱将从 {{localEmail}} 更改为 LangBot 账号的邮箱。',
    bindSpaceSuccess: 'LangBot 账号绑定成功',
    bindSpaceFailed: '绑定 LangBot 账号失败',
    bindSpaceInvalidState: '无效的绑定请求，请从账户设置重新发起',
    setPasswordHint: '设置密码后可使用邮箱密码登录',
    spaceEmailMismatch: 'LangBot 账号邮箱与本实例账号邮箱不匹配',
    space_account_not_registeredTitle: '账户尚未注册',
    space_account_not_registered:
      '此 LangBot 账号邮箱尚无本地账户，请联系工作区所有者获取邀请。',
    space_account_binding_requiredTitle: '需要绑定 LangBot 账号',
    space_account_binding_required:
      '此本地账户必须先在账户设置中绑定 LangBot 账号，才能使用 LangBot 账号登录。',
  },
  workspace: {
    title: '工作区',
    description: '管理成员、角色与邀请链接',
    selectTitle: '选择工作区',
    selectDescription: '选择你要进入的 LangBot 工作区。',
    selectionLoadFailed: '无法加载你的工作区，请重试。',
    switchWorkspace: '切换工作区',
    settings: '工作区设置',
    currentPlan: '当前计划',
    planUnavailable: '暂不可用',
    upgradePlan: '切换或升级计划',
    ossSingletonDescription:
      '当前自托管实例只有一个工作区，但可以包含多个用户。',
    cloudManagedDescription:
      '此工作区托管于 LangBot Cloud。成员在此管理，计费在 Cloud 中打开。',
    loadFailed: '加载工作区信息失败',
    members: '成员',
    you: '你',
    inviteMember: '邀请成员',
    inviteDescription: '创建一次性链接，将其他用户加入当前工作区。',
    emailPlaceholder: 'member@example.com',
    createInvitation: '创建邀请',
    invitationCreated: '邀请已创建',
    delivery: {
      sent: '邀请邮件已发送',
      link_only: '邀请链接已创建',
      failed: '邀请链接已创建，但邮件发送失败',
    },
    invitationCreateFailed: '创建邀请失败',
    oneTimeLinkWarning: '请立即复制此链接。它只显示一次。',
    copyInvitation: '复制邀请链接',
    invitationCopied: '邀请链接已复制',
    pendingInvitations: '待接受邀请',
    expiresAt: '{{date}} 过期',
    revokeInvitation: '撤销邀请',
    invitationRevoked: '邀请已撤销',
    invitationRevokeFailed: '撤销邀请失败',
    acceptInvitation: '接受邀请',
    invitedToWorkspace: '你已受邀加入 {{workspace}}',
    checkingInvitation: '正在验证邀请…',
    invitationMissing: '此邀请链接缺少必要信息。',
    invitationExpired: '此邀请已过期。',
    invitationAlreadyRevoked: '此邀请已被撤销。',
    invitationAlreadyUsed: '此邀请已被使用。',
    invitationInvalid: '此邀请无效或已不可用。',
    invitationAccepted: '已接受邀请',
    invitationAcceptFailed: '接受邀请失败',
    invitationEmailMismatch: '此邀请属于另一个邮箱地址。',
    existingAccountLoginRequired: '此邮箱已有账户，请登录后继续。',
    acceptAsCurrentAccount: '使用当前账户接受',
    authenticatedInvitationNotice:
      '请先退出，再使用受邀账户登录。邀请令牌会被保留。',
    logoutAndReturn: '退出并返回此邀请',
    switchAccount: '切换账号',
    registerAndAccept: '创建账户并接受',
    alreadyHaveAccount: '我已有账户',
    confirmPassword: '确认密码',
    passwordMinimum: '密码至少需要 8 个字符。',
    passwordMismatch: '两次输入的密码不一致。',
    backToLogin: '返回登录',
    memberUpdated: '成员角色已更新',
    memberUpdateFailed: '更新成员角色失败',
    removeMember: '移除成员',
    removeMemberConfirm: '确定将此成员移出工作区吗？',
    memberRemoved: '成员已移除',
    memberRemoveFailed: '移除成员失败',
    transferOwnership: '转让所有权',
    types: {
      personal: '个人',
      team: '团队',
    },
    roles: {
      owner: '所有者',
      admin: '管理员',
      developer: '开发者',
      operator: '运维人员',
      viewer: '查看者',
    },
  },
  monitoring: {
    title: '仪表盘',
    description: '查看机器人活动、LLM调用和系统性能',
    overview: '概览',
    totalMessages: '总消息数',
    llmCallsCount: 'LLM调用',
    modelCallsCount: '模型调用',
    successRate: '成功率',
    activeSessions: '活跃会话',
    last24Hours: '最近24小时',
    filters: {
      title: '筛选',
      bot: '机器人',
      pipeline: '流水线',
      allBots: '全部机器人',
      selectBot: '选择机器人',
      allPipelines: '全部流水线',
      selectPipeline: '选择流水线',
      loading: '加载中...',
      timeRange: '时间范围',
      customRange: '自定义范围',
      from: '从',
      to: '到',
      apply: '应用',
      reset: '重置筛选',
      lastHour: '最近1小时',
      last6Hours: '最近6小时',
      last24Hours: '最近24小时',
      last7Days: '最近7天',
      last30Days: '最近30天',
    },
    tabs: {
      messages: '消息记录',
      llmCalls: 'LLM调用',
      embeddingCalls: 'Embedding调用',
      modelCalls: '模型调用',
      tokens: 'Token 监控',
      feedback: '用户反馈',
      sessions: '会话分析',
      errors: '错误日志',
    },
    messageList: {
      timestamp: '时间戳',
      bot: '机器人',
      pipeline: '流水线',
      message: '消息',
      sessionId: '会话ID',
      status: '状态',
      actions: '操作',
      viewDetails: '查看详情',
      copyId: '复制ID',
      noMessages: '未找到消息',
      noMessagesDescription: '尝试调整筛选条件或稍后查看',
      loading: '加载消息中...',
      loadMore: '加载更多',
      autoRefresh: '自动刷新',
      platform: '角色',
      user: '用户',
      level: '级别',
      runner: '执行器',
      viewConversation: '显示对话详情',
      turns: '{{count}} 轮对话',
      userMessage: '用户',
      noUserMessage: '未记录用户输入',
      assistantMessage: '助手',
      assistantMessageCount: '助手 +{{count}}',
      noAssistantMessage: '未记录助手回复',
      messageCount: '消息数',
      conversationTrace: '消息链路',
      noLlmCalls: '未记录模型调用',
      roles: {
        user: '用户',
        assistant: '助手',
        message: '消息',
      },
    },
    llmCalls: {
      title: 'LLM调用',
      model: '模型',
      tokens: 'Token数',
      duration: '持续时间',
      cost: '成本',
      noData: '未找到LLM调用记录',
      inputTokens: '输入Token',
      outputTokens: '输出Token',
      totalTokens: '总Token数',
      avgDuration: '平均耗时',
      calls: '调用次数',
    },
    toolCalls: {
      title: '工具调用',
      totalCalls: '调用次数',
      duration: '工具耗时',
      errorCalls: '失败次数',
      arguments: '参数',
      result: '结果',
      noToolCalls: '未记录工具调用',
    },
    tokens: {
      totalTokens: '总 Token 数',
      inputTokens: '输入 Token',
      outputTokens: '输出 Token',
      avgPerCall: '平均每次调用',
      throughput: '吞吐量',
      tokensPerSec: 'Token/秒',
      errorCalls: '失败调用',
      acrossCalls: '共 {{count}} 次调用',
      ofTotal: '共 {{count}} 次',
      usageOverTime: 'Token 用量趋势',
      byModel: '按模型统计',
      model: '模型',
      calls: '调用次数',
      avgLatency: '平均延迟',
      noData: '所选时间范围内暂无 Token 用量数据',
      loadError: '加载 Token 统计失败：{{error}}',
      zeroTokenWarning:
        '检测到 {{count}} 次成功调用未上报 Token 用量（记为 0）。这通常表示上游未返回 usage 信息，请检查模型供应商配置。',
      bucket: {
        hour: '按小时',
        day: '按天',
      },
    },
    embeddingCalls: {
      title: 'Embedding调用',
      model: '模型',
      tokens: 'Token数',
      duration: '持续时间',
      noData: '未找到Embedding调用记录',
      promptTokens: '输入Token',
      totalTokens: '总Token数',
      inputCount: '输入数量',
      knowledgeBase: '知识库',
      queryText: '查询文本',
    },
    modelCalls: {
      title: '模型调用',
      llmModel: '对话模型',
      embeddingModel: '嵌入模型',
      embeddingCall: '嵌入调用',
      retrieveCall: '检索调用',
      noData: '未找到模型调用记录',
    },
    sessions: {
      sessionId: '会话ID',
      messageCount: '消息数',
      duration: '持续时间',
      lastActivity: '最后活动',
      noSessions: '未找到会话',
      startTime: '开始时间',
      messageStats: '消息统计',
      totalMessages: '总消息数',
      successMessages: '成功',
      errorMessages: '失败',
      llmStats: 'LLM统计',
      noData: '会话未找到',
    },
    errors: {
      title: '错误',
      errorType: '错误类型',
      errorMessage: '错误消息',
      occurredAt: '发生时间',
      noErrors: '未找到错误',
      stackTrace: '堆栈追踪',
    },
    feedback: {
      title: '用户反馈',
      totalFeedback: '总反馈数',
      totalLikes: '点赞数',
      totalDislikes: '点踩数',
      satisfactionRate: '满意度',
      like: '点赞',
      dislike: '点踩',
      noFeedback: '暂无反馈',
      noFeedbackDescription: '用户反馈将在此显示',
      feedbackList: '反馈列表',
      feedbackContent: '反馈内容',
      contextInfo: '上下文信息',
      userId: '用户ID',
      messageId: '消息ID',
      streamId: '关联提问ID',
      inaccurateReasons: '不准确原因',
      platform: '平台',
      exportFeedback: '导出反馈',
      description:
        '告诉我们遇到的问题或想要的改进。提交时会附带实例 UUID 和登录账号，方便定位。',
      placeholder: '请描述你的建议、问题或复现步骤...',
      attachImage: '添加图片',
      screenshot: '截图',
      submit: '提交反馈',
      privacyHint: '请勿提交敏感密钥、密码或私人聊天内容。',
      contentRequired: '请先填写反馈内容',
      imageOnly: '仅支持图片附件',
      imageTooLarge: '单张图片不能超过 1MB',
      tooManyImages: '最多添加 3 张图片',
      screenshotFailed: '截图失败，请尝试粘贴或上传图片',
      submitSuccess: '反馈已提交，感谢！',
      submitFailed: '反馈提交失败，请稍后重试',
      removeImage: '移除图片',
    },
    queries: {
      title: '查询记录',
    },
    messageDetails: {
      noData: '此查询没有LLM调用或错误记录',
    },
    queryVariables: {
      title: '查询变量',
    },
    trafficChart: {
      title: '流量概览',
      messages: '消息数',
      llmCalls: 'LLM调用',
      noData: '暂无流量数据',
    },
    viewMonitoring: '查看日志监控',
    refreshData: '刷新数据',
    exportData: '导出数据',
    export: {
      title: '导出数据',
      exporting: '导出中...',
      messages: '消息记录',
      llmCalls: 'LLM 调用',
      embeddingCalls: 'Embedding 调用',
      errors: '错误日志',
      sessions: '会话记录',
      feedback: '用户反馈',
    },
    systemStatus: '系统状态',
    pluginRuntime: '插件运行时',
    boxRuntime: 'Box 运行时',
    connected: '已连接',
    disconnected: '未连接',
    disabled: '已禁用',
    statusDetail: '状态',
    pluginDisabled: '插件系统已禁用',
    boxDisabled:
      'Box 沙箱已在配置中禁用——沙箱工具、技能添加/编辑与 stdio MCP 均不可用',
    boxUnavailable:
      'Box 沙箱不可用——沙箱工具、技能添加/编辑与 stdio MCP 均不可用',
    boxRequiredHint:
      '此功能依赖 Box 运行时。请在配置中启用（box.enabled = true）并确认运行时连接正常。',
    boxBackend: '后端',
    boxProfile: '配置',
    boxSandboxes: '沙箱数',
    boxSessionCreated: '创建时间',
    boxSessionLastUsed: '最后使用',
  },
  settingsDialog: {
    title: '设置',
    nav: {
      workspace: '工作区',
      models: '模型',
      api: 'API',
      storage: '存储',
      account: '账户',
    },
  },
  storageAnalysis: {
    title: '存储分析',
    description: '查看存储占用和可清理文件',
    openDialog: '查看分析',
    dialogTitle: '存储分析',
    generatedAt: '生成时间 {{time}}',
    loading: '加载中...',
    refresh: '刷新',
    totalSize: '总占用',
    binaryStorage: '插件二进制存储',
    uploadCleanup: '过期上传文件',
    logCleanup: '过期日志',
    sections: '存储分区',
    monitoringTables: '监控表',
    runtimeTasks: '运行任务',
    cleanupPolicy: '清理策略',
    uploadRetention: '上传文件保留',
    logRetention: '日志保留',
    databaseType: '数据库类型',
    days: '天',
    missing: '不存在',
    expiredUploads: '过期上传文件',
    expiredLogs: '过期日志',
    noExpiredUploads: '暂无过期上传文件',
    noExpiredLogs: '暂无过期日志',
    sectionNames: {
      database: '数据库',
      logs: '日志',
      storage: '上传文件',
      vector_store: '向量库',
      plugins: '插件',
      mcp: 'MCP',
      temp: '临时文件',
    },
  },
  limitation: {
    maxBotsReached:
      '已达到机器人数量上限（{{max}}个）。请先删除已有机器人后再创建新的。',
    maxPipelinesReached:
      '已达到流水线数量上限（{{max}}个）。请先删除已有流水线后再创建新的。',
    maxExtensionsReached:
      '已达到扩展数量上限（{{max}}个）。请先删除已有扩展后再添加新的。',
    quotaLoadingTooltip: '正在加载工作空间用量，请稍后再创建资源。',
    quotaCheckFailed: '无法确认当前工作空间额度，请重试。',
    createDisabledTooltip:
      '当前工作区的{{resource}}数量已达到上限（{{max}}个）。请先删除一个已有{{resource}}后再创建。',
  },
  skills: {
    title: '技能',
    description: '创建和管理可在对话中激活的技能',
    createSkill: '创建技能',
    createSkillDescription: '导入本地目录或手动填写信息创建',
    editSkill: '编辑技能',
    getSkillListError: '获取技能列表失败：',
    skillName: '技能名称',
    displayName: '技能名称',
    displayNamePlaceholder: '显示名称（支持中文）',
    skillSlug: '目录名称',
    skillSlugPlaceholder: 'english-name-only',
    skillSlugHelp: '用作技能目录名，仅支持英文字母、数字、连字符和下划线。',
    skillDescription: '技能描述',
    skillInstructions: '指令内容',
    saveSuccess: '保存成功',
    saveError: '保存失败：',
    createSuccess: '创建成功',
    createError: '创建失败：',
    deleteSuccess: '删除成功',
    deleteError: '删除失败：',
    deleteConfirmation: '你确定要删除这个技能吗？',
    delete: '删除技能',
    skillNameRequired: '技能名称不能为空',
    skillDescriptionRequired: '技能描述不能为空',
    packageRootRequired: '技能目录不能为空',
    scan: '扫描',
    scanSuccess: '目录扫描成功',
    scanError: '扫描目录失败：',
    noSkills: '暂未配置任何技能',
    preview: '预览',
    previewInstructions: 'SKILL.md 内容预览',
    instructionsPlaceholder: '使用 Markdown 格式输入技能指令...',
    descriptionPlaceholder: '简短描述此技能的功能（会展示给 LLM）',
    packageRoot: '技能目录',
    packageRootHelp:
      '非必填。仅在导入已有技能目录时需要填写，新建技能可留空。扫描会检查当前目录及两级子目录。',
    importLocalDirectory: '导入本地技能目录',
    chooseSkillDirectory: '选择 SKILL.md 所在目录',
    chooseAnotherDirectory: '重新选择目录',
    importingDirectory: '正在预览...',
    clearDirectoryPreview: '清除已选目录',
    noSkillMdInDirectory: '选择的目录中没有找到 SKILL.md',
    multipleSkillMdInDirectory:
      '选择的目录中包含多个 SKILL.md，请直接选择单个技能目录。',
    importDirectoryError: '导入目录失败：',
    advancedSettings: '高级设置',
    searchSkills: '搜索技能...',
    selectSkills: '选择技能',
    builtin: '内置',
    addSkill: '添加技能',
    importFromGithub: '从 GitHub 安装技能',
    createManually: '手动创建',
    uploadZip: '上传 ZIP 包',
    uploadZipOnly: '仅支持 .zip 技能包',
    installSuccess: '技能安装成功',
    installError: '安装技能失败：',
    enterRepoUrl: '输入 GitHub 仓库地址',
    repoUrlPlaceholder: '例如 https://github.com/owner/repo',
    fetchingReleases: '正在获取发布版本...',
    selectRelease: '选择发布版本',
    noReleasesFound: '未找到发布版本',
    fetchReleasesError: '获取发布版本失败：',
    selectAsset: '选择要安装的文件',
    sourceArchive: '源码包 (zip)',
    noAssetsFound: '此版本暂无可安装的文件',
    fetchAssetsError: '获取文件列表失败：',
    backToReleases: '返回版本列表',
    backToRepoUrl: '返回仓库地址',
    backToAssets: '返回文件列表',
    releaseTag: '标签：{{tag}}',
    publishedAt: '发布于：{{date}}',
    prerelease: '预发布',
    assetSize: '大小：{{size}}',
    confirmInstall: '确认安装',
    installing: '正在安装技能...',
    loading: '加载中...',
    previewLoadError: '加载预览失败',
    selectFromSidebar: '从侧边栏选择一个技能',
    dangerZone: '危险区域',
    dangerZoneDescription: '不可逆的操作',
    files: '文件',
    noFiles: '暂无文件',
    loadFilesError: '加载文件失败：',
    readFileError: '读取文件失败：',
    saveFile: '保存文件',
    saveFileSuccess: '文件保存成功',
    saveFileError: '保存文件失败：',
  },
  wizard: {
    sidebarDescription: '通过引导步骤创建机器人',
    loading: '正在加载向导...',
    loadError: '加载向导数据失败',
    skip: '跳过',
    skipConfirmMessage:
      '您之后可以在账户菜单重新进入快速开始向导，或手动创建机器人。',
    skipConfirmOk: '确定',
    prev: '上一步',
    next: '下一步',
    finish: '创建并部署',
    confirmCreateBot: '确定，创建机器人',
    createSuccess: '流水线已创建并关联到机器人！',
    botCreateSuccess: '机器人创建成功！',
    botSaveSuccess: '机器人配置已保存并启用！',
    createError: '创建资源失败',
    skipSaveError: '保存跳过状态失败，请重试。',
    completeSaveError: '保存完成状态失败，请重试。',
    step: {
      platform: '平台接入',
      botConfig: '机器人配置',
      aiEngine: 'AI 引擎',
      done: '完成',
    },
    platform: {
      title: '选择平台',
      description: '选择机器人要接入的消息平台。',
    },
    botConfig: {
      title: '配置机器人',
      description: '配置好机器人并确认其正常运行后再继续。',
      saveBot: '保存并启用',
      resaveBot: '重新保存配置',
      botSaved: '机器人配置已保存并启用，请查看日志确认连接正常。',
      waitingForMessage: '机器人已启用。请在 IM 中向机器人发送一条消息以继续。',
      messageReceived: '机器人已成功收到 IM 消息，可以进入下一步。',
      messageReceivedLocalAccountWarning:
        '机器人侧已配置正常并成功收到 IM 消息。当前未通过 LangBot Account 登录，模型调用可能报错；可以进入下一步添加自己的模型。',
      pageBotTestPrompt:
        '页面机器人已启用。点击右下角聊天气泡并发送一条消息，验证完整对话链路。',
      pageBotTestNotice: '仅供测试使用，请嵌入代码到真实外部网页。',
      webhookTestPrompt:
        '回调地址已就绪。将它配置到外部平台，然后向机器人发送一条真实消息。',
      httpTestPrompt: 'HTTP Bot 已启用。可直接发送一条真实入站消息验证连接。',
      httpTestDefaultMessage: '你好，这是一条连接测试消息。',
      sendHttpTest: '发送测试消息',
      httpTestAccepted: '测试消息已被机器人接收，请稍候查看日志。',
      httpTestMissingSecret: '请先填写入站签名密钥并重新保存。',
      httpTestFailed: '测试消息发送失败：{{error}}',
      logsTitle: '机器人日志',
      logsDescription: '监控机器人活动，确认平台连接是否正常工作。',
    },
    aiEngine: {
      title: '配置 AI 引擎',
      description: '选择驱动机器人智能的 AI 引擎。',
      optionalDescription: '这一步可选。选择接下来要如何完善当前 Agent。',
      externalTitle: '接入外部平台 Agent',
      externalDescription:
        '接入 Dify、n8n、Coze 等平台，并替换当前机器人的流水线。',
      ownModelTitle: '改成使用自己的模型',
      ownModelDescription:
        '添加模型供应商，自动扫描或手动填写模型以快速完成引导。',
      ownModelSetupTitle: '添加你自己的模型',
      ownModelSetupDescription:
        '先添加模型供应商，保存后会自动扫描，也可以手动填写模型 ID。',
      addProviderTitle: '添加供应商',
      addProviderDescription: '填写供应商和 API Key，用于连接并扫描模型。',
      selectModelTitle: '选择模型',
      selectScannedModelTitle: '选择一个模型',
      selectScannedModelDescription:
        '选中的模型将作为新流水线的主模型，机器人会切换到这条流水线。',
      scanModelMode: '扫描模型',
      manualModelMode: '手动添加',
      scanningModels: '正在扫描可用模型…',
      noScannedModels: '没有扫描到可用的对话模型，请检查供应商配置。',
      scanModelsFailed: '模型扫描失败，请检查地址和 API Key 后重试。',
      manualFallbackFailed: '自动扫描失败，你可以直接填写中转站支持的模型 ID。',
      manualFallbackEmpty:
        '没有扫描到可用模型，你可以直接填写中转站支持的模型 ID。',
      manualModelId: '模型 ID',
      manualModelIdPlaceholder: '例如：gpt-4o',
      manualModelIdDescription: '填写模型请求中实际使用的 model 参数。',
      manualModelOptions: '可选模型能力',
      editProvider: '修改供应商',
      rescanModels: '重新扫描模型',
      moreFeaturesTitle: '给现在的 Agent 配置更多功能',
      moreFeaturesDescription:
        '进入工作台，为刚刚自动生成的 Agent 添加工具、知识库等能力',
      runnerDescription: '选择外部 Agent 的 Runner 并完成连接配置。',
      backToChoices: '返回选项',
      createExternal: '创建并绑定',
      finishWithModel: '使用所选模型并完成',
      openWorkbench: '进入工作台',
    },
    config: {
      botInfo: '机器人信息',
      botNamePlaceholder: '请输入机器人名称',
      botDescPlaceholder: '请输入机器人描述（可选）',
      platformConfig: '{{platform}} 配置',
      aiConfig: '{{engine}} 配置',
    },
    done: {
      title: '一切就绪！',
      description:
        '机器人已创建并连接到 AI 流水线。你现在可以在工作台中管理它。',
      backToWorkbench: '返回工作台',
    },
  },
  addExtension: {
    installTitle: '安装{{type}}',
    installConfirm: '确定要安装{{type}} "{{name}}" 吗？',
    installInfoType: '类型',
    installInfoId: '标识',
    installInfoVersion: '版本',
    installSuccess: '安装成功',
    installStage: {
      mcpInstalling: '正在添加并连接 MCP 服务器…',
      skillInstalling: '正在安装技能…',
      installed: '已完成',
    },
    manualAdd: '手动添加',
    uploadExtension: '拖拽或点击上传扩展包',
    uploadHint: '支持 .zip（技能）和 .lbpkg（插件）文件',
    orContinueWith: '或选择以下操作',
    addMCPServerHint: '连接一个 MCP 工具服务器扩展',
    installFromGithub: '从 GitHub 安装',
    installFromGithubHint: '插件包或技能（SKILL.md）',
    githubUrlHelp: '粘贴 GitHub 地址',
    githubUrlTooltip:
      '插件：粘贴仓库、Release 或 Tag 地址。技能：粘贴技能目录里的 SKILL.md 页面地址。',
    githubUrlPlaceholder: 'GitHub 仓库、Release 或 SKILL.md 链接',
    githubUrlRequired: '请输入 GitHub 地址',
    previewSkill: '预览技能',
    noSkillPreviewFound: '未找到可导入的技能',
    createSkill: '创建新的技能',
    createSkillHint: '从本地目录导入或手动创建',
    unsupportedFileType: '不支持的文件类型，仅支持 .zip 和 .lbpkg 文件',
  },
  errorPage: {
    unexpectedError: '出错了',
    unexpectedErrorDescription: '发生了意外错误，请稍后重试。',
    notFound: '页面未找到',
    notFoundDescription: '你访问的页面不存在或已被移动。',
    backendUnavailableStatus: '后端服务不可用',
    goBack: '返回上页',
    backToHome: '返回首页',
    backToLogin: '返回登录',
    retrying: '正在重试',
    retryFailed: '仍然无法连接后端，请确认服务已启动后再重试。',
  },
  feishu: {
    createApp: '一键创建飞书应用',
    scanQRCode: '请使用飞书扫描以下二维码，授权后将自动创建应用并填写凭据',
    waitingForScan: '等待扫码中',
    createSuccess: '应用创建成功！凭据已自动填入',
    createFailed: '创建失败',
    connecting: '正在连接飞书服务...',
    expired: '二维码已过期，请重试',
    denied: '用户已拒绝授权',
    connectionLost: '连接已断开，请重试',
    reconnecting: '正在重新连接...',
    retry: '重试',
  },
  weixin: {
    scanLogin: '扫码登录微信',
    scanQRCode: '请使用微信扫描以下二维码，授权后将自动登录并填写令牌',
    loginSuccess: '登录成功！令牌已自动填入',
    loginFailed: '登录失败',
    connecting: '正在连接微信服务...',
    waitingForScan: '等待扫码中',
    retry: '重试',
  },
  dingtalk: {
    createApp: '一键创建钉钉应用',
    scanQRCode: '请使用钉钉扫描以下二维码，授权后将自动创建应用并填写凭据',
    waitingForScan: '等待扫码中',
    createSuccess: '应用创建成功！凭据已自动填入',
    createFailed: '创建失败',
    connecting: '正在连接钉钉服务...',
    retry: '重试',
    robotCodeNote:
      '机器人代码无法自动获取，请前往钉钉开发者后台 > 机器人配置中手动复制。识图、上传文件等功能需要填写此字段。',
  },
  wecombot: {
    createBot: '一键创建企业微信机器人',
    scanQRCode:
      '请使用企业微信扫描以下二维码，授权后将自动创建机器人并填写凭据',
    waitingForScan: '等待扫码中',
    createSuccess: '机器人创建成功！凭据已自动填入',
    createFailed: '创建失败',
    connecting: '正在连接企业微信服务...',
    retry: '重试',
    robotNameNote: '机器人名称无法自动获取，请手动填写。',
  },
  qqofficial: {
    createBinding: '一键扫码绑定 QQ 机器人',
    scanQRCode: '请使用手机 QQ 扫描以下二维码，在「QQ 机器人助手」中授权绑定',
    waitingForScan: '等待扫码中',
    bindSuccess: '绑定成功！AppID 与密钥已自动填入',
    bindFailed: '绑定失败',
    connecting: '正在连接 QQ 服务...',
    retry: '重试',
    tokenNote: 'Token 字段当前适配器未使用，留空即可。',
    boundBy: '由 QQ 用户 {{openid}} 扫码绑定',
  },
  pluginPages: {
    selectFromSidebar: '从侧边栏选择一个插件页面',
    invalidPage: '无效的插件页面',
  },
};

export default zhHans;
