export default {
    settings: {
      title: '系统设置',
      description: '管理注册、邮箱验证、默认值和 SMTP 设置',
      tabs: {
        general: '通用设置',
        agreement: '登录条款',
        features: '功能开关',
        security: '安全与认证',
        users: '用户默认值',
        gateway: '网关服务',
        email: '邮件设置',
        backup: '数据备份',
        payment: '支付设置',
      },
      features: {
        channelMonitor: {
          title: '渠道监控',
          description: '启用后在 V1 主动探测与 V2 被动用量监控中二选一。关闭后两种模式的后台任务均停止，用户端入口隐藏。',
          configureLink: '前往 渠道管理 > 渠道监控 配置监控项',
          enabled: '启用渠道监控',
          enabledHint: '关闭后 V1 调度器与 V2 聚合均停止；已有配置与历史保留。',
          mode: '监控模式',
          modeHint: '默认 V1（主动探测）。仅在需要被动聚合时切换到 V2；同一时间只能启用一种实现。',
          modeV2: 'V2 被动监控',
          modeV1: 'V1 主动探测',
          modeV2Hint: '需主动选择：基于真实网关流量聚合健康指标，不向上游发送探活请求；启用期间 V1 探测停止。',
          modeV1Hint: '默认模式：按配置的渠道监控项定时发起上游健康检查（产生探测流量）。',
          defaultInterval: '默认检测间隔（秒）',
          defaultIntervalHint: '仅 V1 模式使用：新建渠道监控时表单的默认值，可被单个渠道覆盖。范围 15 – 3600 秒。',
          hideThroughput: '对用户隐藏吞吐速率（RPM / TPM）',
          hideThroughputHint:
            '开启后，用户端渠道监控页面与用户 API 不返回 RPM/TPM，避免用「速率 × 时间窗」反推集群规模。管理员仍可见完整指标；错误率、延迟、缓存率照常展示。',
          showQuota: '向用户展示渠道用量/余额',
          showQuotaHint:
            '开启后，配额模式的渠道监控会在用户端渠道状态页展示关联账号的用量滚动窗口/余额。默认关闭；管理员始终可见。',
        },
        availableChannels: {
          title: '可用渠道',
          description: '向已登录用户展示他们能访问的渠道、模型和定价聚合视图。默认关闭。',
          configureLink: '前往 渠道管理 > 渠道定价 配置模型价格',
          enabled: '启用可用渠道',
          enabledHint: '关闭后用户端侧边栏入口隐藏，接口返回空数组。',
        },
        modelPlaza: {
          title: '模型广场',
          description: '以分组为单位向访客展示可用模型与价格的公开页面。默认关闭。',
          enabled: '启用模型广场',
          enabledHint: '开启后顶栏显示入口，页面可通过 /model-plaza 独立访问。',
          requireAuth: '需要登录才可访问',
          requireAuthHint: '开启后未登录访问将跳转登录页；关闭则公开可见，匿名访客仅展示非专属分组。',
          priceDescription: '价格说明（Markdown）',
          priceDescriptionHint: '展示在模型广场页面顶部，可用于说明计费规则、汇率、优惠活动等。',
        },
        riskControl: {
          title: '风控中心',
          description: '启用内容审计菜单和全端点请求审核入口。默认关闭。',
          configureLink: '前往 风控中心 配置内容审计',
          enabled: '启用风控中心',
          enabledHint: '关闭后管理员侧边栏入口隐藏，网关内容审计不会执行。',
          cyberSessionBlock: 'cyber 会话自动屏蔽',
          cyberSessionBlockHint: '开启后,被上游网络安全策略(cyber_policy)拦截的会话将在 TTL 内被本地屏蔽,不再发往上游。仅屏蔽该会话,不影响同 Key 其他会话。',
          cyberSessionBlockTTL: '屏蔽时长(秒)',
        },
        affiliate: {
          title: '邀请返利',
          description: '老用户邀请新用户注册，新用户充值后老用户按比例获得返利额度。默认关闭。',
          enabled: '启用邀请返利',
          enabledHint: '关闭后用户菜单中的邀请页面入口隐藏、注册时忽略邀请码、新充值不再产生返利。已有返利额度仍可转入余额。',
          adminRechargeRebate: '管理员充值参与返利',
          adminRechargeRebateHint: '开启后，通过“用户管理 > 充值”增加的余额会产生邀请返利；设置余额和扣款不参与返利。',
          rebateRate: '全局返利比例',
          rebateRateHint: '充值后返给邀请人的默认比例（0-100%，例如填写 10 表示返利 10%）。',
          freezeHours: '返利冻结期（小时）',
          freezeHoursDesc: '新产生的返利将在冻结期内无法提现。0 = 不冻结。',
          durationDays: '返利有效期（天）',
          durationDaysDesc: '被邀请用户注册后多少天内的充值产生返利。0 = 永久有效。',
          perInviteeCap: '单人返利上限',
          perInviteeCapDesc: '每个被邀请用户最多产生的返利总额。0 = 无上限。',
          customUsers: {
            title: '专属用户配置',
            description: '为指定用户设置专属邀请码或专属返利比例。仅展示已设置过专属配置的用户。',
            addButton: '添加专属用户',
            searchPlaceholder: '搜索邮箱或用户名',
            batchButton: '批量设置比例（已选 {count}）',
            empty: '暂无专属配置用户',
            customBadge: '自定义',
            useGlobal: '沿用全局',
            resetTitle: '重置该用户的专属配置',
            resetMessage: '确认将 {email} 的专属配置全部重置为默认？\n• 专属返利比例将清除（沿用全局）\n• 邀请码将重新生成为系统随机码（已分发的旧邀请链接将失效）',
            totalLabel: '共 {total} 条',
            col: {
              email: '邮箱',
              username: '用户名',
              code: '邀请码',
              rate: '专属比例',
              actions: '操作',
            },
          },
          modal: {
            addTitle: '添加专属用户',
            editTitle: '编辑专属配置',
            userLabel: '用户',
            userPlaceholder: '搜索邮箱或用户名',
            changeUser: '更换用户',
            codeLabel: '专属邀请码（可选）',
            codePlaceholder: '例如 VIP2026',
            codeHint: '4-32 位，仅支持大写字母、数字、下划线、连字符；留空表示不修改；输入将自动转大写。',
            rateLabel: '专属返利比例（可选）',
            ratePlaceholder: '例如 30',
            rateHint: '0-100%；留空（编辑模式下）表示清除专属比例并沿用全局。',
            errorBadRate: '请输入 0-100 之间的比例',
            errorEmpty: '至少填写一项：专属邀请码或专属返利比例',
          },
          batchModal: {
            title: '批量设置专属比例（已选 {count} 个用户）',
            hint: '为所选用户统一设置专属返利比例。',
            placeholder: '例如 30',
            clearHint: '留空提交将清除所选用户的专属比例。',
          },
        },
      },
      emailTabDisabledTitle: '邮箱验证未启用',
      emailTabDisabledHint: '请在「安全与认证」选项卡中启用邮箱验证后，再配置 SMTP 设置。',
      registration: {
        title: '注册设置',
        description: '控制用户注册和验证',
        enableRegistration: '开放注册',
        enableRegistrationHint: '允许新用户注册',
        emailVerification: '邮箱验证',
        emailVerificationHint: '新用户注册时需要验证邮箱',
        emailSuffixWhitelist: '邮箱域名白名单',
        emailSuffixWhitelistHint:
          "仅允许使用指定域名的邮箱注册账号；留空则不限制（例如 {'@'}qq.com, {'@'}gmail.com, *.edu.cn）",
        emailSuffixWhitelistPlaceholder: "{'@'}example.com, *.edu.cn",
        emailSuffixWhitelistInputHint: '留空则不限制。使用 *.edu.cn 可匹配 edu.cn 及其子域名。',
        emailDomainQuota: '非白名单域名限量注册',
        emailDomainQuotaHint:
          '开启后，白名单非空时，其他可注册主域名各限注册一个账户；关闭时非白名单域名直接拒绝注册。白名单为空时本开关无效果',
        promoCode: '优惠码',
        promoCodeHint: '允许用户在注册时使用优惠码',
        invitationCode: '邀请码注册',
        invitationCodeHint: '开启后，用户注册时需要填写有效的邀请码',
        passwordReset: '忘记密码',
        passwordResetHint: '允许用户通过邮箱重置密码',
        frontendUrl: '前端地址',
        frontendUrlPlaceholder: 'https://example.com',
        frontendUrlHint: '用于生成邮件中的密码重置链接，例如 https://example.com',
        totp: '双因素认证 (2FA)',
        totpHint: '允许用户使用 Google Authenticator 等应用进行二次验证',
        totpKeyNotConfigured:
          '请先在环境变量中配置 TOTP_ENCRYPTION_KEY。使用命令 openssl rand -hex 32 生成密钥。'
      },
      security: {
        passkey: 'Passkey 登录',
        passkeyHint: '当依赖方配置有效时，允许无密码登录及用户自行管理 Passkey。',
        passkeyConfigured: 'WebAuthn 依赖方配置有效。',
        passkeyNotConfigured: '请先配置有效的 RP ID 与允许的 HTTPS 来源，再启用 Passkey 登录。',
        passkeyRPID: 'RP ID',
        passkeyOrigins: '允许的 HTTPS 来源',
        passkeyValueNotConfigured: '未配置',
        passkeyDeploymentHint: '请由服务器运维在部署配置中将 webauthn.enabled 设为 true，填写 webauthn.rp_id（仅域名）与 webauthn.rp_origins（完整 HTTPS 来源），然后重启服务。',
        stepUp: '敏感操作二次验证 (step-up 2FA)',
        stepUpHint: '开启后，账号/代理导出、备份创建与下载、S3 配置修改、提升管理员等敏感操作需要先完成 TOTP 二次验证（15 分钟内有效）。开启前需本人已启用 2FA；关闭该开关本身也需要二次验证。',
        stepUpEnableRequiresTotp: '开启敏感操作二次验证前，请先在个人资料中为当前账号启用 2FA (TOTP)。',
        sessionBinding: '会话 IP/UA 绑定',
        sessionBindingHint: '将登录会话与客户端 IP 和 User-Agent 绑定，任一变化即强制该会话失效并需重新登录（提升被盗凭证的利用门槛）。',
        auditRetention: '操作日志保留天数',
        auditRetentionHint: '超过该天数的操作日志将被自动清理；填 0 表示永久保留（仅支持手动清空）。'
      },
      panelRateLimit: {
        title: '面板接口限流',
        description: '限制面板 API 的请求频率，防止高频刷接口（如用量统计、仪表盘查询）打爆数据库',
        proxySafeNote: '登录后的接口按「用户账号」维度计数，与来源 IP 无关——反向代理、NAT 共享出口等场景不会被误拦截；公开接口按真实客户端 IP 计数，回环与内网地址（反代内部转发地址）会自动跳过。',
        enabled: '启用面板接口限流',
        enabledHint: '对登录后的面板接口按账号限流；超出阈值返回 429，窗口重置后自动恢复。',
        userRpm: '每账号请求上限',
        userRpmHint: '单个账号每分钟允许的面板 API 请求总数，正常页面操作远达不到该阈值；0 表示不限制。',
        heavyRpm: '重查询请求上限',
        heavyRpmHint: '单个账号每分钟允许的用量/仪表盘等聚合统计查询次数（这类请求对数据库压力最大）；0 表示不限制。',
        publicIpRpm: '公开接口每 IP 上限',
        publicIpRpmHint: '无需登录的公开接口（如站点公开设置）每个真实客户端 IP 每分钟的请求上限；0 表示不限制。',
        perMinute: '次/分钟',
        exemptAdmin: '管理员豁免',
        exemptAdminHint: '开启后管理员账号不受面板限流约束，避免批量运维操作被误拦。',
        saved: '面板接口限流配置已保存',
        saveFailed: '保存面板接口限流配置失败'
      },
      turnstile: {
        title: 'Cloudflare Turnstile',
        description: '登录和注册的机器人防护',
        enableTurnstile: '启用 Turnstile',
        enableTurnstileHint: '需要 Cloudflare Turnstile 验证',
        siteKey: '站点密钥',
        secretKey: '私密密钥',
        siteKeyHint: '从 Cloudflare Dashboard 获取',
        cloudflareDashboard: 'Cloudflare Dashboard',
        secretKeyHint: '服务端验证密钥（请保密）',
        secretKeyConfiguredHint: '密钥已配置，留空以保留当前值。'
      },
      captcha: {
        title: '人机验证',
        description: '登录和注册的机器人防护',
        enable: '启用人机验证',
        enableHint: '开启后登录、注册等入口需要通过人机验证',
        provider: '验证服务商',
        providerTurnstile: 'Cloudflare Turnstile',
        providerTencent: '腾讯天御验证码',
        providerAliyun: '阿里云验证码 2.0'
      },
      tencentCaptcha: {
        title: '腾讯天御验证码',
        description: '为登录、注册及第三方登录创建账号流程提供滑动验证码保护',
        enable: '启用腾讯天御验证码',
        enableHint: '启用后将在所有原 Turnstile 场景使用腾讯滑动验证码',
        keepExisting: '留空以保留当前值',
        configured: '已配置，留空不会覆盖。',
        required: '启用前必须填写此项。',
        mutualExclusion: '腾讯天御验证码与 Cloudflare Turnstile、阿里云验证码互斥，开启其中一个会自动关闭其它。',
        region: '服务站点',
        regionCn: '中国站',
        regionIntl: '国际站',
        regionHint: '决定前端加载的 SDK 脚本与服务端校验接入点，需与 CaptchaAppId 所属站点一致；国际站请在 tencentcloud.com 控制台创建验证',
        appCredentialsTitle: '验证码应用密钥',
        appCredentialsHint: 'CaptchaAppId 与 AppSecretKey 来自验证码控制台的验证管理页面。',
        cloudCredentialsTitle: '云 API 调用密钥',
        cloudCredentialsHint: 'SecretId 与 SecretKey 用于服务端调用 DescribeCaptchaResult 接口。',
        appId: 'CaptchaAppId',
        appSecretKey: 'AppSecretKey',
        cloudSecretId: '腾讯云 SecretId',
        cloudSecretKey: '腾讯云 SecretKey',
        camPermissionHint: '推荐创建 CAM 子用户并授予 QcloudCaptchaFullAccess，避免使用主账号永久密钥。',
        aidEncryptedHint: '当前版本暂不支持 aidEncrypted，请先不要在验证码控制台开启 CaptchaAppId 强制校验。',
        openCaptchaConsole: '打开验证码控制台',
        createCloudKeys: '创建 SecretId / SecretKey',
        openWebDocs: '查看 Web 接入文档'
      },
      aliyunCaptcha: {
        accessKeyId: 'AccessKey ID',
        accessKeyIdHint: '用于服务端验证的阿里云 AccessKey ID，建议使用仅含验证码权限的 RAM 子账号',
        accessKeySecret: 'AccessKey Secret',
        accessKeySecretHint: '服务端验证密钥（请保密）',
        accessKeySecretConfiguredHint: '密钥已配置，留空以保留当前值。',
        sceneId: '场景 ID',
        sceneIdHint: '在阿里云验证码控制台创建验证场景后获取；验证方式（无痕/滑块/拼图）在控制台按场景配置',
        prefix: '身份标（prefix）',
        prefixHint: '在控制台概览页实例基本信息中获取',
        region: '服务地域',
        regionCn: '中国内地',
        regionSgp: '新加坡',
        regionHint: '决定前端脚本接入区域与服务端接入点，需与阿里云验证码实例所属地域一致'
      },
      apiKeyAcl: {
        title: 'API Key IP 访问控制',
        description: '控制 API Key 白/黑名单、操作审计日志与会话 IP/UA 绑定使用哪个客户端 IP 判断',
        trustForwardedIp: '信任反代传递的客户端 IP',
        trustForwardedIpHint:
          '为保证升级兼容默认开启。开启后 CF-Connecting-IP、X-Real-IP 或 X-Forwarded-For 会直接接管客户端 IP 解析并覆盖 server.trusted_proxies；关闭后严格使用 server.trusted_proxies 配置的 Gin 可信代理链。仅在源站无法被直接访问时开启接管模式。切换会改变现有会话的 IP 指纹。',
        forwardedClientIpHeaders: '自定义客户端 IP 请求头',
        forwardedClientIpHeadersHint: '添加 CDN 或反代请求头名称，解析时优先于内置请求头。',
        forwardedClientIpHeadersPlaceholder: 'X-Client-IP',
        forwardedClientIpHeadersRiskHint: '源站可被直接访问时，这些原始请求头可被伪造；请先限制源站访问再信任它们。',
        forwardedClientIpHeaderInvalid: '请输入有效的 HTTP 请求头名称。',
        forwardedClientIpHeadersLimit: '自定义客户端 IP 请求头最多允许 {max} 个。',
        removeForwardedClientIpHeader: '移除 {header}'
      },
      linuxdo: {
        title: 'LinuxDo Connect 登录',
        description: '配置 LinuxDo Connect OAuth，用于 Sub2API 用户登录',
        enable: '启用 LinuxDo 登录',
        enableHint: '在登录/注册页面显示 LinuxDo 登录入口',
        clientId: 'Client ID',
        clientIdPlaceholder: '例如：hprJ5pC3...',
        clientIdHint: '从 Connect.Linux.Do 后台获取',
        clientSecret: 'Client Secret',
        clientSecretPlaceholder: '********',
        clientSecretHint: '用于后端交换 token（请保密）',
        clientSecretConfiguredPlaceholder: '********',
        clientSecretConfiguredHint: '密钥已配置，留空以保留当前值。',
        redirectUrl: '回调地址（Redirect URL）',
        redirectUrlPlaceholder: 'https://your-domain.com/api/v1/auth/oauth/linuxdo/callback',
        redirectUrlHint: '需与 Connect.Linux.Do 中配置的回调地址一致（必须是 http(s) 完整 URL）',
        quickSetCopy: '使用当前站点生成并复制',
        redirectUrlSetAndCopied: '已使用当前站点生成回调地址并复制到剪贴板'
      },
      dingtalk: {
        title: '钉钉登录',
        description: '配置钉钉 OAuth，用于 Sub2API 用户登录',
        enable: '启用钉钉登录-企业内部应用',
        enableHint: '在登录/注册页面显示钉钉登录入口',
        clientId: 'Client ID（AppKey）',
        clientIdPlaceholder: '例如：dingxxxxxxxxxxxxxxxx',
        clientIdHint: '从钉钉开放平台应用详情页获取',
        clientSecret: 'Client Secret（AppSecret）',
        clientSecretPlaceholder: '********',
        clientSecretHint: '用于后端交换 token（请保密）',
        clientSecretConfiguredPlaceholder: '********',
        clientSecretConfiguredHint: '密钥已配置，留空以保留当前值。',
        redirectUrl: '回调地址（Redirect URL）',
        redirectUrlPlaceholder: 'https://your-domain.com/api/v1/auth/oauth/dingtalk/callback',
        redirectUrlHint: '需与钉钉开放平台中配置的回调地址一致（必须是 http(s) 完整 URL）',
        corpPolicy: {
          label: '企业限制策略',
          hint: '控制哪些钉钉账号（企业）可以登录',
          none: '不限制（所有钉钉账号均可登录）',
          internalOnly: '仅本企业（Internal Only）'
        },
        bypassRegistration: '开放钉钉注册',
        bypassRegistrationHint: '即使「开放注册」关闭时也可以通过钉钉登录来注册',
        syncDisplayName: '同步钉钉姓名',
        syncDisplayNameHint: '登录时将钉钉姓名写入 username 字段（同时记录到 dingtalk_name 属性）',
        syncCorpEmail: '同步企业邮箱',
        syncCorpEmailHint: '登录时将钉钉企业邮箱写入 dingtalk_email 属性（不影响登录邮箱）',
        syncCorpEmailPermissionHint: '需在钉钉开放平台 → 应用 → 权限管理中为本应用申请「邮箱等个人信息（fieldEmail）」权限，否则 OAPI 不会返回企业邮箱字段',
        syncDept: '同步部门',
        syncDeptHint: '登录时将钉钉首个部门完整路径写入 dingtalk_department 属性（每次登录实时拉取）',
        syncDeptPermissionHint: '需在钉钉开放平台 → 应用 → 权限管理中为本应用申请「通讯录部门信息读权限（qyapi_get_department_list）」，否则无法递归出部门路径',
        syncDisplayNameTarget: '属性键',
        syncDisplayNameTargetHint: '默认 dingtalk_name / 钉钉姓名；保存设置时按上述属性键和显示名称自动创建用户属性（已存在则仅同步显示名称）',
        syncCorpEmailTarget: '属性键',
        syncCorpEmailTargetHint: '默认 dingtalk_email / 钉钉企业邮箱；保存设置时按上述属性键和显示名称自动创建用户属性（已存在则仅同步显示名称）',
        syncDeptTarget: '属性键',
        syncDeptTargetHint: '默认 dingtalk_department / 钉钉部门；保存设置时按上述属性键和显示名称自动创建用户属性（已存在则仅同步显示名称）',
        syncAttrDisplayName: '显示名称'
      },
      oidc: {
        title: 'OIDC 登录',
        description: '配置标准 OIDC Provider（例如 Keycloak）',
        enable: '启用 OIDC 登录',
        enableHint: '在登录/注册页面显示 OIDC 登录入口',
        providerName: 'Provider 名称',
        providerNamePlaceholder: '例如 Keycloak',
        clientId: 'Client ID',
        clientIdPlaceholder: 'OIDC client id',
        clientSecret: 'Client Secret',
        clientSecretPlaceholder: '********',
        clientSecretHint: '用于后端交换 token（请保密）',
        clientSecretConfiguredPlaceholder: '********',
        clientSecretConfiguredHint: '密钥已配置，留空以保留当前值。',
        issuerUrl: 'Issuer URL',
        issuerUrlPlaceholder: 'https://id.example.com/realms/main',
        discoveryUrl: 'Discovery URL',
        discoveryUrlPlaceholder: '可选，留空将基于 issuer 自动推导',
        authorizeUrl: 'Authorize URL',
        authorizeUrlPlaceholder: '可选，可通过 discovery 自动获取',
        tokenUrl: 'Token URL',
        tokenUrlPlaceholder: '可选，可通过 discovery 自动获取',
        userinfoUrl: 'UserInfo URL',
        userinfoUrlPlaceholder: '可选，可通过 discovery 自动获取',
        jwksUrl: 'JWKS URL',
        jwksUrlPlaceholder: '可选；启用严格 ID Token 校验时必填',
        scopes: 'Scopes',
        scopesPlaceholder: 'openid email profile',
        scopesHint: '必须包含 openid',
        redirectUrl: '后端回调地址（Redirect URL）',
        redirectUrlPlaceholder: 'https://your-domain.com/api/v1/auth/oauth/oidc/callback',
        redirectUrlHint: '必须与 OIDC Provider 中配置的回调地址一致',
        quickSetCopy: '使用当前站点生成并复制',
        redirectUrlSetAndCopied: '已使用当前站点生成回调地址并复制到剪贴板',
        frontendRedirectUrl: '前端回调路径',
        frontendRedirectUrlPlaceholder: '/auth/oidc/callback',
        frontendRedirectUrlHint: '后端回调完成后重定向到此前端路径',
        tokenAuthMethod: 'Token 鉴权方式',
        clockSkewSeconds: '时钟偏移（秒）',
        allowedSigningAlgs: '允许的签名算法',
        allowedSigningAlgsPlaceholder: 'RS256,ES256,PS256',
        usePkce: '启用 PKCE',
        validateIdToken: '校验 ID Token',
        requireEmailVerified: '要求邮箱已验证',
        userinfoEmailPath: 'UserInfo 邮箱字段路径',
        userinfoEmailPathPlaceholder: '例如 data.email',
        userinfoIdPath: 'UserInfo ID 字段路径',
        userinfoIdPathPlaceholder: '例如 data.id',
        userinfoUsernamePath: 'UserInfo 用户名字段路径',
        userinfoUsernamePathPlaceholder: '例如 data.username'
      },
      defaults: {
        title: '用户默认设置',
        description: '新用户的默认值',
        defaultBalance: '默认余额',
        defaultBalanceHint: '新用户的初始余额',
        affiliateRebateRate: '邀请返利比例',
        affiliateRebateRateHint: '充值后返给邀请人的比例（0-100%，例如填写 10 表示返利 10%）',
        defaultConcurrency: '默认并发数',
        defaultConcurrencyHint: '新用户的最大并发请求数',
        defaultUserRpmLimit: '默认用户 RPM 限制',
        defaultUserRpmLimitHint: '新用户默认每分钟最大请求数，0 = 不限制；仅作用于新用户创建时初始化',
        defaultSubscriptions: '默认订阅列表',
        defaultSubscriptionsHint: '新用户创建或注册时自动分配这些订阅',
        addDefaultSubscription: '添加默认订阅',
        defaultSubscriptionsEmpty: '未配置默认订阅。新用户不会自动获得订阅套餐。',
        defaultSubscriptionsDuplicate: '默认订阅存在重复分组：{groupId}。每个分组只能出现一次。',
        subscriptionGroup: '订阅分组',
        subscriptionValidityDays: '有效期（天）',
        defaultPlatformQuotas: '默认平台限额（注册时分配）',
        defaultPlatformQuotasHint: '新用户注册时自动写入平台限额记录；已有用户不受影响。留空 = 该平台该窗口不限制。',
        platformQuotaNotice: '月限额为 30 天滚动窗口，非自然月',
      },
      platformQuota: {
        platform:    '平台',
        daily:       '日限额 (USD)',
        weekly:      '周限额 (USD)',
        monthly:     '月限额 (USD, 30天滚动)',
        placeholder: '不限',
      },
      claudeCode: {
        title: 'Claude Code 设置',
        description: '控制 Claude Code 客户端访问要求',
        minVersion: '最低版本号',
        minVersionPlaceholder: '例如 2.1.63',
        minVersionHint: '拒绝低于此版本的 Claude Code 客户端请求（semver 格式）。留空则不检查版本。',
        maxVersion: '最高版本号',
        maxVersionPlaceholder: '例如 2.5.0',
        maxVersionHint: '拒绝高于此版本的 Claude Code 客户端请求（semver 格式）。留空则不限制最高版本。'
      },
      scheduling: {
        title: '网关调度设置',
        description: '控制 API Key 的调度行为',
        allowUngroupedKey: '允许未分组 Key 调度',
        allowUngroupedKeyHint: '关闭后，未分配到任何分组的 API Key 将无法发起请求（返回 403）。建议保持关闭以确保所有 Key 都归属明确的分组。',
        accountSchedulingThresholdsTitle: '平台账号自动停调阈值',
        accountSchedulingThresholdsDescription: '当账号当前原生用量窗口（OpenAI Codex/Anthropic 会话，或 Grok 请求/Token 利用率）达到该百分比时，Sub2API 会临时将其移出调度，直到窗口重置。填 100 表示禁用。',
        accountSchedulingThresholdsGlobalHint: '系统级默认值，作用于该平台全部账号。可在账号编辑页对单个账号覆盖。',
        accountSchedulingThresholdsDisabledHint: '100 表示禁用该平台自动停调；1–99 表示达到该利用率后暂停调度。',
        accountSchedulingThresholdsRangeHint: '整数 1–100（百分比）。仅 OpenAI / Anthropic / Grok。'
      },
      upstreamBillingProbe: {
        title: '上游倍率自动探测',
        description: '定期获取 API Key 账号所连接上游 Sub2API 站点声明的计费倍率；只有另行开启“同步上游声明倍率”的账号才会更新账号倍率。',
        enabled: '启用全局自动探测',
        enabledHint: '开启后，仅对账号自身已启用自动检测的账号执行定时探测；关闭后停止所有定时探测，手动探测不受影响。',
        intervalMinutes: '探测周期（分钟）',
        intervalHint: '范围 5–1440 分钟。成功探测结果的有效期为两个探测周期。',
        saved: '上游倍率自动探测设置已保存',
        saveFailed: '保存上游倍率自动探测设置失败'
      },
      ollamaCloudUsage: {
        title: 'Ollama Cloud 用量刷新',
        description: '在模型请求驱动下刷新账号在 Ollama 官方设置页展示的用量；默认关闭。无新请求时不会自动抓取。',
        enabled: '启用全局自动刷新',
        enabledHint: '仅刷新已保存浏览器会话且账号自身也开启自动刷新的账号；需有后续模型请求才会触发。手动刷新不受影响。',
        intervalMinutes: '持续请求最长等待（分钟）',
        intervalHint: '范围 15–1440 分钟。请求持续不断导致 debounce 一直后移时，最晚在此时间强制刷新。',
        debounceMinutes: '请求安静等待（分钟）',
        debounceHint: '范围 1–60 分钟。最后一次模型请求安静满此时长后再抓取用量。',
        saved: 'Ollama Cloud 用量刷新设置已保存',
        saveFailed: '保存 Ollama Cloud 用量刷新设置失败'
      },
      gatewayForwarding: {
        title: '请求转发行为',
        description: '控制请求转发到上游 OAuth 账号时的行为',
        grokDefaultTextModel: '默认 Grok 文本模型',
        grokDefaultTextModelHint: '用于空模型值；仅在右侧开关开启时也用于其他客户端模型命名空间。允许填写自定义 Grok 模型 ID。',
        grokCrossClientMap: '映射其他客户端模型到 Grok',
        grokCrossClientMapHint: '默认关闭。开启后，GPT、Codex、o 系列和 Claude 模型 ID 会路由到左侧默认 Grok 文本模型。',
        grokDefaultBaseURLMode: '默认 Grok 上游',
        grokDefaultBaseURLModeHint: '仅用于 Grok 账号未配置显式 base URL 的文本请求；媒体和语音仍使用官方 API 主机。',
        grokBaseURLModeCLI: 'CLI 聊天代理',
        grokBaseURLModeAPI: '公共 API',
        grokBaseURLModeUSEast1: '区域 API（us-east-1）',
        grokBaseURLModeUSWest2: '区域 API（us-west-2）',
        grokBaseURLModeEUWest1: '区域 API（eu-west-1）',
        fingerprintUnification: '指纹统一化',
        fingerprintUnificationHint: '统一共享同一 OAuth 账号的用户的 X-Stainless-* 请求头。关闭后透传客户端原始请求头。',
        metadataPassthrough: 'Metadata 透传',
        metadataPassthroughHint: '透传客户端原始 metadata.user_id，不进行重写。可能提高上游缓存命中率。',
        cchSigning: 'CCH 签名',
        cchSigningHint: '对转发请求的 billing header 进行 CCH 哈希签名。关闭时保留原始占位符。',
        claudeOAuthSystemPromptInjection: 'Claude OAuth System 注入',
        claudeOAuthSystemPromptInjectionHint: '为非 Claude Code 客户端的 Claude OAuth 请求注入 Claude Code 形态的 system blocks。默认开启。',
        claudeOAuthSystemPrompt: 'Claude OAuth 扩展提示词',
        claudeOAuthSystemPromptPlaceholder: '留空时使用内置 Claude Code 扩展提示词。',
        claudeOAuthSystemPromptHint: '兼容旧配置：仅控制第三个注入的 system block。',
        claudeOAuthSystemPromptBlocks: 'Claude OAuth System Blocks',
        claudeOAuthSystemPromptBlocksHint: "每个 block 会保存为带 enabled、type、text、可选 cache_control 的 JSON。{'{'}billing_header{'}'} 会按请求动态生成；Claude Code 身份提示词和扩展提示词可直接编辑，也可用预设恢复默认值。",
        systemBlockTitle: 'System Block {index}',
        systemBlockPreset: '预设',
        systemBlockPresetBilling: 'Billing Header',
        systemBlockPresetIdentity: 'Claude Code 身份提示词',
        systemBlockPresetExpansion: 'Claude Code 扩展提示词',
        systemBlockPresetCustom: '自定义',
        systemBlockType: '类型',
        systemBlockTypeText: '文本',
        systemBlockText: '内容',
        systemBlockCacheControl: 'Cache Control',
        systemBlockHide: '隐藏 block 详情',
        systemBlockShow: '展示 block 详情',
        addSystemBlock: '添加 block',
        resetSystemBlocks: '恢复默认',
        cacheTTL5m: '5 分钟',
        cacheTTL1h: '1 小时',
        anthropicCacheTTL1hInjection: 'Anthropic 缓存 TTL 注入',
        anthropicCacheTTL1hInjectionHint: '开启后，对 Anthropic OAuth/Setup Token 请求体中已有的 ephemeral 缓存块强制写入 1h；响应 usage 默认按 5m 回写计费，账号级 TTL 计费设置优先。',
        rewriteMessageCacheControl: '改写消息缓存断点',
        rewriteMessageCacheControlHint: '默认关闭，保留客户端在 messages 内容块中的 cache_control。开启后会清除客户端断点并注入代理断点，适合不自行管理缓存策略的客户端。',
        clientDatelineNormalization: '客户端 dateline 归一化',
        clientDatelineNormalizationHint: '默认开启。将 Anthropic OAuth/Setup Token 请求体中 "Today\'s date is …" 语句里的撇号与日期分隔符还原为 ASCII 撇号 + 短横线 (2026-07-01) 的规范形态，抹除某些客户端在检测到非官方 base URL 时注入的隐写指纹位。仅作用于 system prompt 与 <system-reminder> 块内，API Key 账号不受影响。',
        antigravityUserAgentVersion: 'Antigravity UA 版本',
        antigravityUserAgentVersionPlaceholder: '1.23.2',
        antigravityUserAgentVersionHint: '留空时使用 ANTIGRAVITY_USER_AGENT_VERSION 或内置默认值 1.23.2；填写后后台设置优先。',
        openaiCodexUserAgent: 'OpenAI Codex UA',
        openaiCodexUserAgentPlaceholder: 'codex-tui/0.146.1 (Ubuntu 22.4.0; x86_64) WindowsTerminal (codex-tui; 0.146.1)',
        openaiCodexUserAgentHint: '出站统一使用的完整 Codex User-Agent，用于自定义 OS / 架构 / 终端指纹。留空则按下方版本号拼出标准 codex-tui 形态（推荐）。填写后首段和尾部的版本号仍会被下方版本号同步覆盖，避免这条 UA 停在填写时的旧版本——上游在容量紧张时按客户端身份分优先级降载，陈旧或非官方形态的身份会被优先丢弃并回 server_is_overloaded。',
        openaiCodexClientVersion: 'Codex 客户端版本号',
        openaiCodexClientVersionPlaceholder: '留空则跟随自动同步',
        openaiCodexClientVersionHint: '网关对上游声明的 Codex 客户端版本号，User-Agent 与 version 头同源使用。留空表示使用自动同步到的官方最新稳定版；填写后固定为该版本，不再跟随同步。',
        openaiCodexVersionAutoSync: '自动同步 Codex 版本号',
        openaiCodexVersionAutoSyncHint: '每 6 小时从官方仓库获取最新稳定版客户端版本号，无需为了跟版本而升级本服务。关闭后仅使用上方手填版本或内置版本。',
        openaiCodexVersionSyncedValue: '当前同步到：{version}',
        codexHardeningTitle: 'Codex 设置',
        codexClientRestrictionTitle: 'Codex 客户端限制',
        codexHardeningDesc:
          '仅对已开启「仅允许 Codex 官方客户端」的 OpenAI OAuth 账号生效（全局）。在 User-Agent/Originator 之外，用版本区间、引擎指纹门与黑/白名单巩固判定。',
        minCodexVersion: '最低 Codex 版本',
        minCodexVersionPlaceholder: '例如 0.142.0',
        maxCodexVersion: '最高 Codex 版本',
        maxCodexVersionPlaceholder: '例如 0.200.0',
        codexVersionHint:
          '仅对官方客户端生效，校验其版本是否落在 [最低, 最高] 区间。留空表示该侧不限制。',
        codexFingerprintSignals: 'Codex 引擎指纹信号',
        codexFingerprintSignalsDesc:
          '定义引擎指纹信号：勾「必须」的信号需全部命中（AND），每条 / 分隔的变体取或（OR）；一条都不勾即不校验。默认只勾 x-codex- 前缀。类型：头精确 / 头前缀 / body 路径。',
        codexFpTypeHeaderExact: '头精确',
        codexFpTypeHeaderPrefix: '头前缀',
        codexFpTypeBodyPath: 'body 路径',
        codexFpMatchPlaceholder: '匹配，变体用 / 分隔（如 session-id / session_id 或 x-codex-）',
        codexFpRequired: '必须',
        codexFingerprintNoRequiredWarn: '未勾选任何「必须」信号——引擎指纹门当前不生效，等于放行所有通过身份/版本的候选。如需启用校验，请至少勾选一条信号。',
        codexAllowAppServer: 'Codex app-server',
        codexAllowAppServerDesc:
          '放行内嵌 Codex 引擎、经 app-server 协议接入的第三方客户端（如 Claude Code 的 codex 插件）。默认关闭；开启后此类客户端通过引擎指纹门（下方信号列表）即放行，关闭则仅放行官方客户端与白名单。',
        codexBlacklist: 'User-Agent/Originator 黑名单',
        codexBlacklistDesc:
          '命中任一字段即拒，优先于一切放行。originator 精确匹配，User-Agent 为包含匹配（多个用逗号分隔）。',
        codexWhitelist: 'User-Agent/Originator 白名单',
        codexWhitelistDesc:
          '放行官方集之外的客户端：需 originator 精确，且每个 User-Agent 标记都命中。默认仍需过引擎指纹门，勾「跳过引擎指纹」可免。',
        codexWhitelistSkipFingerprint: '跳过引擎指纹',
        codexWhitelistSkipFingerprintTooltip:
          '风险：勾选后该条仅凭 originator + User-Agent（均可伪造）放行，不再要求引擎指纹兜底。仅用于确属可信、但本身不发 codex 引擎指纹的第三方客户端。',
        codexOriginatorPlaceholder: 'originator（精确，如 opencode）',
        codexUaContainsPlaceholder: 'User-Agent 包含标记，逗号分隔（如 opencode/）',
        codexAddRow: '添加一条',
        codexRemoveRow: '删除',
      },
      webSearchEmulation: {
        title: 'Web Search 模拟',
        description: '为不原生支持搜索的 Anthropic API Key 账号注入 web search 能力',
        enabled: '启用 Web Search 模拟',
        enabledHint: '全局开关。关闭后所有渠道和账号的 web search 模拟均不生效。',
        providers: '搜索服务商',
        addProvider: '添加服务商',
        providerType: '服务商类型',
        apiKey: 'API Key',
        apiKeyPlaceholder: '输入 API Key',
        apiKeyConfigured: '已配置',
        showApiKey: '显示',
        hideApiKey: '隐藏',
        copyApiKey: '复制',
        copied: '已复制',
        quotaLimit: '配额上限',
        quotaLimitHint: '留空表示无限制；填写时必须大于 0',
        quotaLimitMustBePositive: '配额上限必须大于 0',
        subscribedAt: '订阅时间',
        subscribedAtHint: '配额从此日期起每月自动重置；留空则不自动重置',
        quotaUsage: '用量',
        resetUsage: '重置',
        resetUsageConfirm: '确定要重置此服务商的用量计数吗？',
        resetUsageSuccess: '用量已重置',
        proxy: '代理',
        removeProvider: '删除',
        noProviders: '未配置搜索服务商',
        test: '测试',
        testDefaultQuery: '搜索今年世界大事件',
        testing: '搜索中...',
        testResultTitle: '搜索结果',
        testResultProvider: '服务商',
        testNoResults: '无搜索结果',
      },
      site: {
        title: '站点设置',
        description: '自定义站点品牌',
        backendMode: 'Backend 模式',
        backendModeDescription:
          '禁用用户注册、公开页面和自助服务功能。仅管理员可以登录和管理平台。',
        siteName: '站点名称',
        siteNameHint: '显示在邮件和页面标题中',
        siteNamePlaceholder: 'Sub2API',
        siteSubtitle: '站点副标题',
        siteSubtitleHint: '显示在登录和注册页面',
        siteSubtitlePlaceholder: '订阅转 API 转换平台',
        apiBaseUrl: 'API 端点地址',
        apiBaseUrlHint: '用于"使用密钥"、"导入到 CC Switch"和回调地址建议，留空则使用当前站点地址',
        apiBaseUrlPlaceholder: 'https://api.example.com',
        tablePreferencesTitle: '通用表格设置',
        tablePreferencesDescription: '设置后台与用户侧表格组件的默认分页行为',
        tableDefaultPageSize: '默认每页条数',
        tableDefaultPageSizeHint: '必须为 5-1000 之间的整数',
        tablePageSizeOptions: '可选每页条数列表',
        tablePageSizeOptionsPlaceholder: '10, 20, 50, 100',
        tablePageSizeOptionsHint: '使用英文逗号分隔，取值范围 5-1000，保存时会自动去重并排序',
        tableDefaultPageSizeRangeError: '默认每页条数必须在 {min}-{max} 之间',
        tablePageSizeOptionsFormatError: '可选每页条数格式无效，请输入 {min}-{max} 之间的整数并用英文逗号分隔',
        customEndpoints: {
          title: '自定义端点',
          description: '添加额外的 API 端点地址，用户可在「API Keys」页面快速复制',
          itemLabel: '端点 #{n}',
          name: '名称',
          namePlaceholder: '如：OpenAI Compatible',
          endpointUrl: '端点地址',
          endpointUrlPlaceholder: 'https://api2.example.com',
          descriptionLabel: '介绍',
          descriptionPlaceholder: '如：支持 OpenAI 格式请求',
          add: '添加端点',
        },
        contactInfo: '客服联系方式',
        contactInfoPlaceholder: '例如：QQ: 123456789',
        contactInfoHint: '填写客服联系方式，将展示在兑换页面、个人资料等位置',
        docUrl: '文档链接',
        docUrlHint: '文档网站的链接。留空则隐藏文档链接。',
        docUrlPlaceholder: 'https://docs.example.com',
        siteLogo: '站点Logo',
        uploadImage: '上传图片',
        remove: '移除',
        logoHint: 'PNG、JPG 或 SVG 格式，最大 300KB。建议：80x80px 正方形图片。',
        logoSizeError: '图片大小超过 300KB 限制（{size}KB）',
        logoTypeError: '请选择图片文件',
        logoReadError: '读取图片文件失败',
        homeContent: '首页内容',
        homeContentPlaceholder:
          '在此输入首页内容，支持 Markdown & HTML 代码。如果输入的是一个链接，则会使用该链接作为 iframe 的 src 属性。',
        homeContentHint:
          '自定义首页内容，支持 Markdown/HTML。如果输入的是链接（以 http:// 或 https:// 开头），则会使用该链接作为 iframe 的 src 属性，这允许你设置任意网页作为首页。设置后首页的状态信息将不再显示。',
        homeContentIframeWarning:
          '⚠️ iframe 模式提示：部分网站设置了 X-Frame-Options 或 CSP 安全策略，禁止被嵌入到 iframe 中。如果页面显示空白或报错，请确认目标网站允许被嵌入，或考虑使用 HTML 模式自行构建页面内容。',
        compactHome: '简洁首页',
        compactHomeHint: '未设置自定义首页内容时，展示简洁的站点信息页面。',
        hideCcsImportButton: '隐藏 CCS 导入按钮',
        hideCcsImportButtonHint: '启用后将在 API Keys 页面隐藏"导入 CCS"按钮'
      },
      purchase: {
        title: '充值/订阅页面',
        description: '在侧边栏展示“充值/订阅”入口，并在页面内通过 iframe 打开指定链接',
        enabled: '显示充值/订阅入口',
        enabledHint: '仅在标准模式（非简单模式）下展示',
        url: '充值/订阅页面 URL',
        urlPlaceholder: 'https://example.com/purchase',
        urlHint: '必须是完整的 http(s) 链接',
        iframeWarning:
          '⚠️ iframe 提示：部分网站会通过 X-Frame-Options 或 CSP（frame-ancestors）禁止被 iframe 嵌入，出现空白时可引导用户使用”新窗口打开”。',
        integrationDoc: '支付集成文档',
        integrationDocHint: '包含接口说明、幂等语义及示例代码'
      },
      customMenu: {
        title: '自定义菜单页面',
        description: '添加自定义 iframe 页面到侧边栏导航。每个页面可以设置为普通用户或管理员可见。',
        itemLabel: '菜单项 #{n}',
        name: '菜单名称',
        namePlaceholder: '如：帮助中心',
        url: '页面 URL',
        urlPlaceholder: 'https://example.com/page',
        iconSvg: 'SVG 图标',
        iconSvgPlaceholder: '<svg>...</svg>',
        iconPreview: '图标预览',
        uploadSvg: '上传 SVG',
        removeSvg: '清除',
        visibility: '可见角色',
        visibilityUser: '普通用户',
        visibilityAdmin: '管理员',
        add: '添加菜单项',
        remove: '删除',
        moveUp: '上移',
        moveDown: '下移',
      },
      payment: {
        title: '支付设置',
        description: '配置支付系统选项',
        configGuide: '支付配置指南',
        enabled: '启用支付',
        enabledHint: '启用或禁用支付系统',
        enabledPaymentTypes: '启用的服务商',
        enabledPaymentTypesHint: '禁用服务商将同时禁用对应的实例。',
        findProvider: '正在寻找合适的易支付服务商？',
        minAmount: '最低金额',
        maxAmount: '最高金额',
        dailyLimit: '每日限额',
        balanceRechargeMultiplier: '余额充值倍率',
        balanceRechargeMultiplierHint: '用户每支付 1 CNY 可获得多少 USD 余额',
        balanceRechargePreview: '预览：1 CNY = {usd} USD',
        subscriptionUsdToCnyRate: '订阅 CNY 换算汇率',
        subscriptionUsdToCnyRateHint:
          'CNY 支付通道下，套餐每 1 USD 价格收取多少 CNY（如 7.15）。0 或留空 = 不换算，订阅按 price 数值直接收款。启用后所有套餐 price 必须按 USD 定价',
        subscriptionUsdToCnyRateDisabled: '未启用（按 price 直付）',
        rechargeFeeRate: '充值手续费率',
        rechargeFeeRateHint: '用户充值时额外收取的手续费百分比，0 表示不收取手续费',
        rechargeFeePreview: '预览：充值 100 元，手续费 {fee} 元',
        orderTimeout: '订单超时时间',
        orderTimeoutHint: '单位：分钟，至少 1 分钟',
        maxPendingOrders: '最大待支付订单数',
        cancelRateLimit: '限制取消频率',
        cancelRateLimitHint: '启用后，用户在时间窗口内取消订单次数超限将无法创建新订单',
        cancelRateLimitEvery: '每',
        cancelRateLimitAllowMax: '最多',
        cancelRateLimitTimes: '次',
        cancelRateLimitWindow: '时间窗口',
        cancelRateLimitUnit: '周期',
        cancelRateLimitMax: '最大取消次数',
        cancelRateLimitUnitMinute: '分钟',
        cancelRateLimitUnitHour: '小时',
        cancelRateLimitUnitDay: '天',
        cancelRateLimitWindowMode: '窗口模式',
        cancelRateLimitWindowModeRolling: '滚动',
        cancelRateLimitWindowModeFixed: '固定',
        alipayForceQRCode: '支付宝强制二维码支付',
        alipayForceQRCodeHint: '启用后，移动端支付宝用户将统一使用二维码扫码支付，不再跳转至手机网站支付',
        alipayMobilePrecreateDeepLink: '支付宝移动端当面付唤起',
        alipayMobilePrecreateDeepLinkHint: '启用后，移动端官方支付宝订单调用当面付并尝试打开支付宝；失败时显示动态二维码。该设置优先于强制二维码支付',
        helpText: '帮助文本',
        helpImageUrl: '帮助图片链接',
        manageProviders: '管理服务商',
        balancePaymentDisabled: '禁用余额充值',
        noLimit: '留空表示不限制',
        helpImage: '帮助图片',
        helpImagePlaceholder: '上传或输入图片链接',
        helpTextPlaceholder: '输入帮助说明文本...',
        providerEasypay: '易支付',
        providerAlipay: '支付宝官方',
        providerWxpay: '微信官方',
        providerStripe: 'Stripe',
        providerAirwallex: 'Airwallex',
        typeDisabled: '类型已禁用',
        enableTypesFirst: '请先在上方启用至少一种服务商',
        easypayRedirect: '跳转',
        paymentMode: '支付模式',
        modeRedirect: '跳转',
        modeQRCode: '二维码',
        modePopup: '弹窗',
        validationNameRequired: '服务商名称不能为空',
        validationTypesRequired: '请至少选择一种支持的支付方式',
        validationFieldRequired: '{field} 不能为空',
        validationEasyPayCustomMethodRequired: '每个易支付自定义方式都必须填写支付方式和上游 type',
        validationEasyPayCustomMethodTypeInvalid: '易支付自定义支付方式只能包含小写字母、数字、下划线和短横线',
        validationEasyPayCustomMethodUpstreamTypeInvalid: '易支付上游 type 只能包含小写字母、数字、下划线和短横线',
        validationEasyPayCustomMethodReserved: '易支付自定义支付方式不能使用内置的 alipay 或 wxpay',
        validationEasyPayCustomMethodPrefixReserved: '易支付自定义支付方式不能以 alipay 或 wxpay 开头',
        validationEasyPayCustomMethodDuplicate: '易支付自定义支付方式不能重复',
        field_apiBase: 'API 基础地址',
        field_notifyUrl: '异步通知地址',
        field_returnUrl: '同步跳转地址',
        callbackBaseUrl: '回调基础地址',
        field_privateKey: '私钥',
        field_publicKey: '公钥',
        field_mpAppId: '公众号 App ID',
        field_mchId: '商户号',
        field_apiV3Key: 'API v3 密钥',
        field_publicKeyId: '公钥 ID',
        field_certSerial: '证书序列号',
        field_h5AppName: 'H5 应用名称',
        field_h5AppUrl: 'H5 应用地址',
        wxpayConfigHint: '微信支付通常只需要填写 App ID。公众号 App ID、H5 应用名称、H5 应用地址仅在公众号支付或 H5 场景有特殊要求时再填写。',
        wxpayAdvancedOptions: '微信支付高级可选项',
        field_secretKey: '密钥',
        field_clientId: 'Client ID',
        field_apiKey: 'API Key',
        field_publishableKey: '公开密钥',
        field_webhookSecret: 'Webhook 密钥',
        field_countryCode: '国家/地区代码',
        field_currency: '支付币种',
        field_accountId: 'Airwallex 账户 ID',
        field_airwallexApiBaseHint: '必须和 API Key 所属环境一致：沙箱/测试密钥使用 https://api-demo.airwallex.com/api/v1，生产密钥使用 https://api.airwallex.com/api/v1。环境混用会返回 credentials_invalid / Access Denied。',
        field_paymentCurrencyHint: '默认 CNY。Stripe 和 Airwallex 可按账户支持从下拉项选择 HKD、USD 等币种；微信、支付宝、易支付仍按 CNY。',
        field_accountIdHint: '不涉及多账户、组织级密钥或连接账户收款时可以不填；单账户 Scoped API Key 会默认使用所选账户。',
        field_cid: '支付渠道 ID',
        field_cidAlipay: '支付宝渠道 ID',
        field_cidWxpay: '微信渠道 ID',
        easypayCustomMethods: '易支付自定义支付方式',
        easypayCustomMethodsHint: '添加当前易支付服务商额外支持的支付方式。支付方式会记录到 Sub2API 订单中，上游 type 会作为易支付 type 参数提交。',
        addCustomMethod: '添加方式',
        customMethodType: '支付方式',
        customMethodUpstreamType: '上游 type',
        customMethodDisplayName: '显示名称',
        customMethodDisplayNamePlaceholder: '如：信用卡',
        stripeWebhookHint: '请在 Stripe Dashboard 中将以下地址配置为 Webhook 端点：',
        stripeWebhookApiVersionHint: 'Webhook 端点的 API 版本请与当前集成的 Stripe SDK 对齐，建议选择 {version}；版本不一致可能导致回调事件解析失败。',
        airwallexWebhookHint: '请在 Airwallex 后台将以下地址配置为 Webhook 端点；事件至少选择 Payment Intent -> Succeeded（payment_intent.succeeded），建议同时选择 Payment Intent -> Cancelled（payment_intent.cancelled）；API version 选择账户默认或最新稳定版本。',
        airwallexGuideSummary: '创建 Airwallex Scoped API 密钥时，建议只在账户级权限中为 Payment Acceptance 勾选读取和写入。',
        airwallexGuideNote: '不需要勾选 Spend、Payouts、Transfers、Funds Splits、POS 终端等与在线收款无关的权限。Webhook 事件至少选择 payment_intent.succeeded，建议同时选择 payment_intent.cancelled；API version 选择账户默认或最新稳定版本。',
        limitsTitle: '限额配置',
        limitSingleMin: '单笔最低',
        limitSingleMax: '单笔最高',
        limitDaily: '每日限额',
        limitsHint: '全部留空使用全局配置，部分填写时留空项表示不限制',
        limitsUseGlobal: '使用全局配置',
        limitsNoLimit: '不限制',
        productNamePrefix: '商品名前缀',
        productNameSuffix: '商品名后缀',
        preview: '预览',
        loadBalanceStrategy: '负载均衡策略',
        strategyRoundRobin: '轮询',
        strategyLeastAmount: '最少金额',
        providerManagement: '服务商管理',
        providerManagementDesc: '管理支付服务商实例',
        createProvider: '添加服务商',
        editProvider: '编辑服务商',
        deleteProvider: '删除服务商',
        deleteProviderConfirm: '确定要删除此服务商吗？',
        providerName: '服务商名称',
        providerKey: '服务商类型',
        selectProviderKey: '选择服务商类型',
        providerConfig: '凭证配置',
        paymentGuideTrigger: '查看支付方式说明',
        guideOpenLabel: '开通：',
        guideCallLabel: '调用：',
        guideFallbackLabel: '降级：',
        alipayGuideSummary: '桌面优先扫码单，失败再走收银台；移动默认手机网站支付，也可启用当面付唤起。',
        alipayGuideFaceToFaceTitle: '当面付 / 扫码支付',
        alipayGuideFaceToFaceOpen: '需开通当面付或扫码支付能力。',
        alipayGuideFaceToFaceCall: '桌面端下单时优先调用 alipay.trade.precreate，前台直接渲染二维码。',
        alipayGuideFaceToFaceFallback: '接口不可用或返回失败时，自动降级到电脑网站支付。',
        alipayGuidePagePayTitle: '电脑网站支付',
        alipayGuidePagePayOpen: '需开通电脑网站支付。',
        alipayGuidePagePayCall: '桌面端当面付不可用时调用 alipay.trade.page.pay，并继续把返回链接渲染成二维码。',
        alipayGuidePagePayFallback: '同时保留打开收银台入口，用户可手动重新拉起支付页。',
        alipayGuideWapTitle: '手机网站支付',
        alipayGuideWapOpen: '需开通手机网站支付。',
        alipayGuideWapCall: '默认调用 alipay.trade.wap.pay；开启移动端当面付唤起后改用 alipay.trade.precreate。',
        alipayGuideWapFallback: '未开通或返回异常时，前端自动改走扫码支付并提示未开通移动支付。',
        wxpayGuideSummary: '桌面优先 Native 扫码，移动端按浏览器环境走 JSAPI 或 H5。',
        wxpayGuideNote: '当前表单默认共用一个 App ID，适合同主体下统一配置网页、移动和公众号场景。',
        wxpayGuideNativeTitle: 'Native / 扫码支付',
        wxpayGuideNativeOpen: '需开通 Native 或扫码支付能力。',
        wxpayGuideNativeCall: '桌面端默认调用 Native，下发二维码内容给前台渲染。',
        wxpayGuideNativeFallback: '移动端无法走 JSAPI 或 H5 时，也会自动回退到这里。',
        wxpayGuideJsapiTitle: 'JSAPI / 公众号支付',
        wxpayGuideJsapiOpen: '需开通公众号支付，并保证当前浏览器在微信内且能拿到 OpenID。',
        wxpayGuideJsapiCall: '微信内浏览器完成授权后调用 JSAPI，直接拉起微信支付。',
        wxpayGuideJsapiFallback: '未配置、Bridge 不可用或拉起失败时，自动改走扫码支付。',
        wxpayGuideH5Title: 'H5 支付',
        wxpayGuideH5Open: '需开通 H5 支付。',
        wxpayGuideH5Call: '移动端非微信浏览器且有客户端 IP 时调用 H5 支付，跳转微信收银台。',
        wxpayGuideH5Fallback: '未开通 H5 或下单失败时，自动改走扫码支付。',
        noProviders: '暂无服务商实例',
        supportedTypes: '支持的支付方式',
        supportedTypesHint: '逗号分隔，如 alipay,wxpay',
        refundEnabled: '允许退款',
        allowUserRefund: '允许用户退款',
        enableConflict: '{method} 已有启用中的服务商实例：{provider}。请先停用现有实例后再启用或切换。',
      },
      balanceNotify: {
        title: '余额不足提醒',
        description: '当用户余额低于阈值时发送邮件提醒',
        enabled: '启用余额不足提醒',
        threshold: '默认提醒阈值',
        thresholdHint: '用户未自定义时使用此值',
        thresholdPlaceholder: '输入金额',
        rechargeUrl: '充值页面 URL',
        rechargeUrlPlaceholder: 'https://example.com/payment',
        rechargeUrlHint: '设置后邮件中将包含充值链接按钮',
      },
      quotaNotify: {
        title: '账号限额通知',
        description: '当账号配额用量达到告警阈值时通知管理员',
        enabled: '启用账号限额通知',
        emails: '通知邮箱',
        emailsHint: '留空则不发送通知',
        addEmail: '添加邮箱',
        emailPlaceholder: '输入邮箱地址',
      },
      subscriptionExpiryNotify: {
        title: '订阅到期提醒',
        description: '控制是否向用户发送订阅即将到期的邮件提醒。',
        enabled: '启用订阅到期提醒',
        enabledHint: '开启后，系统会在订阅到期前 7 天、3 天、1 天各发送一次提醒。'
      },
      smtp: {
        title: 'SMTP 设置',
        description: '配置用于发送验证码的邮件服务',
        testConnection: '测试连接',
        testing: '测试中...',
        host: 'SMTP 主机',
        hostPlaceholder: 'smtp.gmail.com',
        port: 'SMTP 端口',
        portPlaceholder: '587',
        username: 'SMTP 用户名',
        usernamePlaceholder: "your-email{'@'}gmail.com",
        password: 'SMTP 密码',
        passwordPlaceholder: '********',
        passwordHint: '留空以保留现有密码',
        passwordConfiguredPlaceholder: '********',
        passwordConfiguredHint: '密码已配置，留空以保留当前值。',
        fromEmail: '发件人邮箱',
        fromEmailPlaceholder: "noreply{'@'}example.com",
        fromName: '发件人名称',
        fromNamePlaceholder: 'Sub2API',
        useTls: '使用 TLS',
        useTlsHint: '为 SMTP 连接启用 TLS 加密'
      },
      testEmail: {
        title: '发送测试邮件',
        description: '发送测试邮件以验证 SMTP 配置',
        recipientEmail: '收件人邮箱',
        recipientEmailPlaceholder: "test{'@'}example.com",
        sendTestEmail: '发送测试邮件',
        sending: '发送中...',
        enterRecipientHint: '请输入收件人邮箱地址'
      },
      emailTemplates: {
        title: '邮件模板',
        description: '按事件和语言自定义通知邮件主题与 HTML 内容。',
        event: '事件',
        locale: '语言',
        localeEn: '英文',
        localeZh: '中文',
        subject: '主题',
        subjectPlaceholder: '输入邮件主题',
        html: 'HTML 模板',
        htmlPlaceholder: '编辑邮件 HTML 模板',
        placeholders: '可用占位符',
        placeholdersHelp: '点击占位符可复制。后端发送邮件时会替换这些值。',
        livePreview: '实时预览',
        previewSecurityHint: '预览 HTML 由后端预览接口生成，并在禁用脚本的沙盒 iframe 中展示。',
        preview: '预览 / 刷新',
        previewing: '预览中...',
        save: '保存模板',
        saving: '保存中...',
        restoreOfficial: '恢复官方模板',
        restoring: '恢复中...',
        restoreConfirm: '确定恢复此事件和语言的官方模板吗？当前自定义版本将被替换。',
        restoreSuccess: '已恢复官方模板',
        saveSuccess: '邮件模板已保存',
        placeholderCopied: '占位符已复制',
        validationRequired: '主题和 HTML 模板不能为空',
        empty: '暂无可用的邮件模板事件或语言。',
        noPreview: '刷新预览后查看渲染后的邮件主题。',
        customized: '已自定义'
      },
      opsMonitoring: {
        title: '运维监控',
        description: '启用运维监控模块，用于排障与健康可视化',
        disabled: '运维监控已关闭',
        enabled: '启用运维监控',
        enabledHint: '启用运维监控模块（仅管理员可见）',
        realtimeEnabled: '启用实时监控',
        realtimeEnabledHint: '启用实时请求速率和指标推送（WebSocket）',
        queryMode: '默认查询模式',
        queryModeHint: '运维监控默认查询模式（自动/原始/预聚合）',
        queryModeAuto: '自动（推荐）',
        queryModeRaw: '原始（最准确，但较慢）',
        queryModePreagg: '预聚合（最快，需预聚合）',
        metricsInterval: '采集频率（秒）',
        metricsIntervalHint: '系统/请求指标采集频率（60-3600 秒）'
      },
      adminApiKey: {
        title: '管理员 API Key',
        description: '用于外部系统集成的全局 API Key，拥有完整的管理员权限',
        notConfigured: '尚未配置管理员 API Key',
        configured: '管理员 API Key 已启用',
        currentKey: '当前密钥',
        regenerate: '重新生成',
        regenerating: '生成中...',
        delete: '删除',
        deleting: '删除中...',
        create: '创建密钥',
        creating: '创建中...',
        regenerateConfirm: '确定要重新生成吗？当前密钥将立即失效。',
        deleteConfirm: '确定要删除管理员 API Key 吗？外部集成将停止工作。',
        keyGenerated: '新的管理员 API Key 已生成',
        keyDeleted: '管理员 API Key 已删除',
        copyKey: '复制密钥',
        keyCopied: '密钥已复制到剪贴板',
        keyWarning: '此密钥仅显示一次，请立即复制保存。',
        securityWarning: '警告：此密钥拥有完整的管理员权限，请妥善保管。',
        usage: '使用方法：在请求头中添加 x-api-key: <your-admin-api-key>'
      },
      overloadCooldown: {
        title: '529 过载冷却',
        description: '配置上游返回 529（过载）时的账号调度暂停策略',
        enabled: '启用过载冷却',
        enabledHint: '收到 529 错误时暂停该账号的调度，冷却后自动恢复',
        cooldownMinutes: '冷却时长（分钟）',
        cooldownMinutesHint: '账号暂停调度的持续时间（1-120 分钟）',
        saved: '过载冷却设置保存成功',
        saveFailed: '保存过载冷却设置失败'
      },
      rateLimit429Cooldown: {
        title: '429 默认回避',
        description: '配置上游返回 429 且没有明确重置时间时的默认账号回避策略',
        enabled: '启用 429 默认回避',
        enabledHint: '收到无重置时间的 429 时暂停该账号调度，冷却后自动恢复',
        cooldownSeconds: '回避时长（秒）',
        cooldownSecondsHint: '默认回避持续时间（1-7200 秒）；上游返回明确 reset 时仍优先使用上游时间',
        saved: '429 默认回避设置保存成功',
        saveFailed: '保存 429 默认回避设置失败'
      },
      streamTimeout: {
        title: '流超时处理',
        description: '配置上游响应超时时的账户处理策略，避免问题账户持续被选中',
        enabled: '启用流超时处理',
        enabledHint: '当上游响应超时时，自动处理问题账户',
        timeoutSeconds: '超时阈值（秒）',
        timeoutSecondsHint: '流数据间隔超过此时间视为超时（30-300秒）',
        action: '处理方式',
        actionTempUnsched: '临时不可调度',
        actionError: '标记为错误状态',
        actionNone: '不处理',
        actionHint: '超时后对账户执行的操作',
        tempUnschedMinutes: '暂停时长（分钟）',
        tempUnschedMinutesHint: '临时不可调度的持续时间（1-60分钟）',
        thresholdCount: '触发阈值（次数）',
        thresholdCountHint: '累计超时多少次后触发处理（1-10次）',
        thresholdWindowMinutes: '阈值窗口（分钟）',
        thresholdWindowMinutesHint: '超时计数的时间窗口（1-60分钟）',
        saved: '流超时设置保存成功',
        saveFailed: '保存流超时设置失败'
      },
      rectifier: {
        title: '请求整流器',
        description: '当上游返回特定错误时，自动修正请求参数并重试，提高请求成功率',
        enabled: '启用请求整流器',
        enabledHint: '总开关，关闭后所有整流功能均不生效',
        thinkingSignature: 'Thinking 签名整流',
        thinkingSignatureHint: '当上游返回 thinking block 签名校验错误时，自动去除签名并重试',
        thinkingBudget: 'Thinking Budget 整流',
        thinkingBudgetHint: '当上游返回 budget_tokens 约束错误（≥1024）时，自动将 budget 设为 32000 并重试',
        apikeySignature: 'API Key 签名整流',
        apikeySignatureHint:
          '当 API Key 账号的上游返回签名相关错误时，自动去除签名并重试（内置规则始终生效）',
        apikeyPatterns: '自定义匹配关键词',
        apikeyPatternsHint:
          '额外的关键词，匹配响应体中的内容（不区分大小写）。内置规则始终生效，此处用于补充额外匹配。',
        apikeyPatternPlaceholder: '例如：thinking_error 或 签名无效',
        addPattern: '添加关键词',
        saved: '整流器设置保存成功',
        saveFailed: '保存整流器设置失败'
      },
      betaPolicy: {
        title: 'Beta 策略',
        description: '配置转发 Anthropic API 请求时如何处理 Beta 特性。仅适用于 /v1/messages 接口。',
        action: '处理方式',
        actionPass: '透传（不处理）',
        actionFilter: '过滤（移除）',
        actionBlock: '拦截（拒绝请求）',
        scope: '生效范围',
        scopeAll: '全部账号',
        scopeOAuth: '仅 OAuth 账号',
        scopeAPIKey: '仅 API Key 账号',
        scopeBedrock: '仅 Bedrock 账号',
        errorMessage: '错误消息',
        errorMessagePlaceholder: '拦截时返回的自定义错误消息',
        errorMessageHint: '留空则使用默认错误消息',
        saved: 'Beta 策略设置保存成功',
        saveFailed: '保存 Beta 策略设置失败',
        modelWhitelist: '模型白名单',
        modelWhitelistHint: '留空则对所有模型生效。支持精确匹配和通配符前缀（如 claude-opus-*）',
        modelPatternPlaceholder: '例如: claude-opus-* 或 claude-opus-4-6',
        addModelPattern: '添加模型规则',
        removePattern: '移除',
        fallbackAction: '未匹配模型处理方式',
        fallbackActionHint: '当请求模型不在白名单中时的处理方式',
        fallbackErrorMessagePlaceholder: '未匹配模型被拦截时返回的自定义错误消息',
        quickPresets: '快捷预设',
        presetOpusOnly: '仅 Opus 允许 1M',
        presetOpusOnlyDesc: 'Opus 透传，其他模型过滤',
        commonPatterns: '常用模式'
      },
      openaiFastPolicy: {
        title: 'OpenAI Fast/Flex 策略',
        description: '基于请求体 service_tier 字段拦截/过滤/透传 OpenAI fast(priority) 与 flex 请求；仅作用于 OpenAI 网关。',
        empty: '尚未配置任何规则。点击下方按钮新增。',
        ruleHeader: '规则 #{index}',
        removeRule: '删除规则',
        addRule: '新增规则',
        saveHint: '保存时随系统设置一起提交（点击页面底部「保存」按钮）。',
        serviceTier: 'service_tier 匹配',
        tierAll: '全部 tier 值',
        tierPriority: 'priority（fast）',
        tierFlex: 'flex',
        action: '处理方式',
        actionPass: '透传（保留 service_tier）',
        actionFilter: '过滤（移除 service_tier）',
        actionForcePriority: '强制设置 priority（fast）',
        actionBlock: '拦截（拒绝请求）',
        scope: '生效范围',
        scopeAll: '全部账号',
        scopeOAuth: '仅 OAuth 账号',
        scopeAPIKey: '仅 API Key 账号',
        scopeBedrock: '仅 Bedrock 账号',
        userIds: '指定用户',
        userIdsHint: '输入任意邮箱关键词进行模糊搜索。留空表示对全部 Sub2API 用户生效；选中用户的 API Key 请求优先匹配用户规则。',
        userSearchPlaceholder: '输入用户邮箱搜索',
        userSearchEmpty: '未找到匹配用户',
        userDeleted: '（已删除）',
        userIdFallback: '用户 #{id}',
        removeUser: '移除用户',
        errorMessage: '错误消息',
        errorMessagePlaceholder: '拦截时返回的自定义错误消息',
        errorMessageHint: '留空则使用默认错误消息。',
        modelWhitelist: '目标模型',
        modelWhitelistHint: '列表内模型使用“处理方式”，列表外模型使用“其他模型处理方式”。留空时“处理方式”应用于全部模型。支持精确匹配与前缀通配符（如 gpt-5.6*）。',
        modelPatternPlaceholder: '例如: gpt-5.6-sol 或 gpt-5.6*',
        addModelPattern: '添加目标模型',
        fallbackAction: '其他模型处理方式',
        fallbackActionHint: '仅应用于目标列表之外的模型。',
        fallbackErrorMessagePlaceholder: '其他模型被拦截时返回的自定义错误消息',
        summaryTargetModels: '目标模型',
        summaryAllModels: '全部模型',
        summaryOtherModels: '其他模型',
        summaryAction: {
          pass: '透传',
          filter: '过滤',
          block: '拦截',
          force_priority: '强制 priority'
        }
      },
      wechatConnect: {
        title: '微信登录',
        description: '用于微信开放平台或公众号/小程序的第三方登录配置。',
        enabledLabel: '启用微信登录',
        enabledHint: '开启后可使用微信第三方登录回调与授权配置。',
        appIdLabel: 'AppID',
        appIdPlaceholder: '微信开放平台 AppID',
        appSecretLabel: 'AppSecret',
        appSecretConfiguredPlaceholder: '密钥已配置，留空以保留当前值。',
        appSecretPlaceholder: '微信开放平台 AppSecret',
        appSecretConfiguredHint: '密钥已配置，留空以保留当前值。',
        appSecretHint: '填写后会覆盖当前微信密钥。',
        modeLabel: '模式',
        openModeLabel: '非微信环境使用开放平台',
        openModeHint: '浏览器不在微信内时，自动走开放平台扫码授权。',
        mpModeLabel: '微信环境使用公众号',
        mpModeHint: '浏览器在微信内时，自动走公众号授权。',
        redirectUrlLabel: '回调地址',
        redirectUrlPlaceholder: 'https://your-site.com/api/v1/auth/oauth/wechat/callback',
        generateAndCopy: '使用当前站点生成并复制',
        redirectUrlSetAndCopied: '已使用当前站点生成回调地址并复制到剪贴板',
        frontendRedirectUrlLabel: '前端回调地址',
        frontendRedirectUrlPlaceholder: '/auth/wechat/callback',
        frontendRedirectUrlHint: '通常用于前端路由回调地址，需与后端配置保持一致。'
      },
      authSourceDefaults: {
        title: '认证来源默认值',
        description: '按注册来源配置新用户默认余额、并发、订阅与授权策略。',
        requireEmailLabel: '第三方注册强制补充邮箱',
        requireEmailHint: '启用后，Linux DO、OIDC、微信注册缺少邮箱时必须先补充邮箱地址。',
        enabledHint: '以下默认值会在该来源注册新用户时发放；首次绑定时授权仅作用于已有账号绑定该来源。',
        sources: {
          email: {
            title: '邮箱注册',
            description: '适用于邮箱密码注册的新用户默认配额。'
          },
          linuxdo: {
            title: 'Linux DO 登录',
            description: '适用于 Linux DO 第三方注册的新用户默认配额。'
          },
          oidc: {
            title: 'OIDC 登录',
            description: '适用于 OIDC 第三方注册的新用户默认配额。'
          },
          wechat: {
            title: '微信登录',
            description: '适用于微信第三方注册的新用户默认配额。'
          }
        },
        grantOnFirstBindLabel: '首次绑定时授权',
        grantOnFirstBindHint: '已有账号首次绑定该来源时发放默认权益。',
        defaultSubscriptionsLabel: '默认订阅',
        defaultSubscriptionsHint: '仅对当前认证来源生效，未配置时不追加来源专属订阅。',
        noSourceSubscriptions: '当前来源未配置专属默认订阅。',
        platformQuotasOverride: '平台限额覆盖',
        platformQuotasOverrideHint: '留空的字段继承「系统默认平台限额」；填 0 表示禁止该窗口使用。',
      },
      paymentVisibleMethods: {
        methodLabel: '{title} 可见方式',
        methodHint: '控制前台结算页是否展示该方式，以及展示时使用的来源键。',
        sourceLabel: '支付来源',
        sourceHint: '启用后必须明确选择一个来源；未配置状态不会对外展示该支付方式。',
        sourceRequiredError: '{title} 已启用，请先选择支付来源。'
      },
      openaiExperimentalScheduler: {
        title: 'OpenAI 实验调度策略',
        description: '默认关闭。开启后仅影响本网关在 OpenAI 账号间的实验性调度选择逻辑，不代表上游 OpenAI 官方能力。',
        lowRatePriorityTitle: '低倍率优先',
        lowRatePriorityDescription: '开启后优先选择计费倍率较低的账号；倍率相同时，再比较账号优先级和当前负载等。启用实验调度策略后，此开关不生效。',
        oauthRateTitle: 'OAuth 调度参考倍率',
        oauthRatePriorityDescription: '同一分组同时包含 API Key 和 OAuth 账号时，OAuth 账号按此倍率与已探测的 API Key 计费倍率一起排序。',
        oauthRateWeightedDescription: '同一分组同时包含 API Key 和 OAuth 账号时，计算“计费倍率”得分时，OAuth 账号按此倍率参与计算。',
        stickyWeightedTitle: '粘性加权',
        stickyWeightedDescription: '开启后 previous_response_id 和 session_hash 粘性进入高级调度打分；关闭时仍按旧逻辑硬命中粘性账号。',
        subscriptionPriorityTitle: '订阅优先',
        subscriptionPriorityDescription: '开启后先在 ChatGPT 订阅账号池中按权值选取；订阅池拿不到席位时再回退到非订阅账号池。',
        weightsTitle: '调度权值覆盖',
        weightsDescription: '留空时使用配置/环境变量值；配置未设置时使用内置默认值。页面非空设置优先。',
        defaultPlaceholder: '配置/默认：{value}',
        topKLabel: 'TopK',
        priorityWeight: '优先级',
        loadWeight: '负载',
        queueWeight: '排队',
        errorRateWeight: '错误率',
        ttftWeight: '首包延迟',
        resetWeight: '重置窗口',
        quotaHeadroomWeight: '额度余量',
        upstreamCostWeight: '计费倍率',
        previousResponseWeight: 'previous_response 粘性',
        sessionStickyWeight: 'session_hash 粘性'
      },
      usageRecords: {
        title: '使用记录',
        description: '与终端用户可见的用量及失败请求记录相关的设置。',
      },
      user_error_view: {
        label: '允许用户查看自己的错误请求',
        description: '开启后，用户可在用量页查看自己失败请求的精简信息（不含内部/上游错误细节）。需运维监控开启才有数据。',
      },
      saveSettings: '保存设置',
      saving: '保存中...',
      settingsSaved: '设置保存成功',
      smtpConnectionSuccess: 'SMTP 连接成功',
      testEmailSent: '测试邮件发送成功',
      failedToLoad: '加载设置失败',
      failedToSave: '保存设置失败',
      failedToTestSmtp: 'SMTP 连接测试失败',
      failedToSendTestEmail: '发送测试邮件失败'
    },

    // Error Passthrough Rules
    errorPassthrough: {
      title: '错误透传规则',
      description: '配置上游错误如何返回给客户端',
      createRule: '创建规则',
      editRule: '编辑规则',
      deleteRule: '删除规则',
      noRules: '暂无规则',
      createFirstRule: '创建第一条错误透传规则',
      allPlatforms: '所有平台',
      passthrough: '透传',
      custom: '自定义',
      code: '状态码',
      body: '消息体',
      skipMonitoring: '跳过监控',

      // Columns
      columns: {
        priority: '优先级',
        name: '名称',
        conditions: '匹配条件',
        platforms: '平台',
        behavior: '响应行为',
        status: '状态',
        actions: '操作'
      },

      // Match Mode
      matchMode: {
        any: '错误码 或 关键词',
        all: '错误码 且 关键词',
        anyHint: '状态码匹配任一错误码，或消息包含任一关键词',
        allHint: '状态码匹配任一错误码，且消息包含任一关键词'
      },

      // Form
      form: {
        name: '规则名称',
        namePlaceholder: '例如：上下文超限透传',
        priority: '优先级',
        priorityHint: '数值越小优先级越高，优先匹配',
        description: '规则描述',
        descriptionPlaceholder: '描述此规则的用途...',
        matchConditions: '匹配条件',
        errorCodes: '错误码',
        errorCodesPlaceholder: '422, 400, 429',
        errorCodesHint: '多个错误码用逗号分隔',
        keywords: '关键词',
        keywordsPlaceholder: '每行一个关键词\ncontext limit\nmodel not supported',
        keywordsHint: '每行一个关键词，不区分大小写',
        matchMode: '匹配模式',
        platforms: '适用平台',
        platformsHint: '不选择表示适用于所有平台',
        responseBehavior: '响应行为',
        passthroughCode: '透传上游状态码',
        responseCode: '自定义状态码',
        passthroughBody: '透传上游错误信息',
        customMessage: '自定义错误信息',
        customMessagePlaceholder: '返回给客户端的错误信息...',
        skipMonitoring: '跳过运维监控记录',
        skipMonitoringHint: '开启后，匹配此规则的错误不会被记录到运维监控中',
        enabled: '启用此规则'
      },

      // Messages
      nameRequired: '请输入规则名称',
      conditionsRequired: '请至少配置一个错误码或关键词',
      ruleCreated: '规则创建成功',
      ruleUpdated: '规则更新成功',
      ruleDeleted: '规则删除成功',
      deleteConfirm: '确定要删除规则 "{name}" 吗？',
      failedToLoad: '加载规则失败',
      failedToSave: '保存规则失败',
      failedToDelete: '删除规则失败',
      failedToToggle: '切换状态失败'
    },

    // TLS 指纹模板
    tlsFingerprintProfiles: {
      title: 'TLS 指纹模板',
      description: '管理 TLS 指纹模板，用于模拟特定客户端的 TLS 握手特征',
      createProfile: '创建模板',
      editProfile: '编辑模板',
      deleteProfile: '删除模板',
      noProfiles: '暂无模板',
      createFirstProfile: '创建你的第一个 TLS 指纹模板',

      columns: {
        name: '名称',
        description: '描述',
        grease: 'GREASE',
        alpn: 'ALPN',
        actions: '操作'
      },

      form: {
        pasteYaml: '粘贴 YAML 配置',
        pasteYamlPlaceholder: '将 TLS 指纹采集器复制的 YAML 粘贴到这里...',
        pasteYamlHint: '粘贴从 TLS 指纹采集器复制的 YAML 配置，自动填充所有字段。',
        openCollector: '打开采集器',
        parseYaml: '解析 YAML',
        yamlParsed: 'YAML 解析成功，字段已自动填充',
        yamlParseFailed: 'YAML 解析失败：未找到 name 字段',
        name: '模板名称',
        namePlaceholder: '例如 macOS Node.js v24',
        description: '描述',
        descriptionPlaceholder: '可选的模板描述',
        enableGrease: '启用 GREASE',
        enableGreaseHint: '在 TLS ClientHello 扩展中插入 GREASE 值',
        cipherSuites: '密码套件',
        cipherSuitesHint: '逗号分隔的十六进制值，例如 0x1301, 0x1302, 0xc02c',
        curves: '椭圆曲线',
        curvesHint: '逗号分隔的曲线 ID',
        pointFormats: '点格式',
        signatureAlgorithms: '签名算法',
        alpnProtocols: 'ALPN 协议',
        alpnProtocolsHint: '逗号分隔，例如 h2, http/1.1',
        supportedVersions: '支持的 TLS 版本',
        keyShareGroups: '密钥共享组',
        pskModes: 'PSK 模式',
        extensions: '扩展'
      },

      deleteConfirm: '删除模板',
      deleteConfirmMessage: '确定要删除模板 "{name}" 吗？使用此模板的账号将回退到内置默认值。',
      createSuccess: '模板创建成功',
      updateSuccess: '模板更新成功',
      deleteSuccess: '模板删除成功',
      loadFailed: '加载模板失败',
      saveFailed: '保存模板失败',
      deleteFailed: '删除模板失败'
    }
}
