export default {
  // Home Page
  home: {
    viewOnGithub: '在 GitHub 上查看',
    viewDocs: '查看文档',
    docs: '文档',
    switchToLight: '切换到浅色模式',
    switchToDark: '切换到深色模式',
    dashboard: '控制台',
    login: '登录',
    getStarted: '开始使用',
    goToDashboard: '进入控制台',
    tags: {
      subscriptionToApi: '订阅转 API',
      stickySession: '粘性会话',
      realtimeBilling: '实时计费'
    },
    features: {
      unifiedGateway: '统一 API 网关',
      unifiedGatewayDesc: '将 Claude 订阅转换为 API 接口，通过标准 /v1/messages 接口访问 AI 能力。',
      multiAccount: '多账号池',
      multiAccountDesc: '智能负载均衡管理多个上游账号，支持 OAuth 和 API Key 认证。',
      balanceQuota: '余额与配额',
      balanceQuotaDesc: '基于 Token 的精确计费和用量追踪，支持配额管理和兑换码充值。'
    },
    providers: {
      title: '支持的服务商',
      description: 'AI 服务的统一 API 接口',
      supported: '已支持',
      soon: '即将推出',
      claude: 'Claude',
      gemini: 'Gemini',
      antigravity: 'Antigravity',
      more: '更多'
    },
    footer: {
      allRightsReserved: '保留所有权利。'
    }
  },

  // Setup Wizard
  setup: {
    title: 'Sub2API 安装向导',
    description: '配置您的 Sub2API 实例',
    database: {
      title: '数据库配置',
      host: '主机',
      port: '端口',
      username: '用户名',
      password: '密码',
      databaseName: '数据库名称',
      sslMode: 'SSL 模式',
      passwordPlaceholder: '密码',
      ssl: {
        disable: '禁用',
        require: '要求',
        verifyCa: '验证 CA',
        verifyFull: '完全验证'
      }
    },
    redis: {
      title: 'Redis 配置',
      host: '主机',
      port: '端口',
      password: '密码（可选）',
      database: '数据库',
      passwordPlaceholder: '密码'
    },
    admin: {
      title: '管理员账户',
      email: '邮箱',
      password: '密码',
      confirmPassword: '确认密码',
      passwordPlaceholder: '至少 6 个字符',
      confirmPasswordPlaceholder: '确认密码',
      passwordMismatch: '密码不匹配'
    },
    ready: {
      title: '准备安装',
      database: '数据库',
      redis: 'Redis',
      adminEmail: '管理员邮箱'
    }
  },

  // Common
  common: {
    loading: '加载中...',
    save: '保存',
    cancel: '取消',
    delete: '删除',
    edit: '编辑',
    create: '创建',
    update: '更新',
    confirm: '确认',
    reset: '重置',
    search: '搜索',
    filter: '筛选',
    export: '导出',
    import: '导入',
    actions: '操作',
    status: '状态',
    name: '名称',
    email: '邮箱',
    password: '密码',
    submit: '提交',
    back: '返回',
    next: '下一步',
    yes: '是',
    no: '否',
    all: '全部',
    none: '无',
    noData: '暂无数据',
    success: '成功',
    error: '错误',
    warning: '警告',
    info: '提示',
    active: '启用',
    inactive: '禁用',
    more: '更多',
    close: '关闭',
    enabled: '已启用',
    disabled: '已禁用',
    total: '总计',
    balance: '余额',
    available: '可用',
    copiedToClipboard: '已复制到剪贴板',
    copyFailed: '复制失败',
    contactSupport: '联系客服',
    selectOption: '请选择',
    searchPlaceholder: '搜索...',
    noOptionsFound: '无匹配选项',
    saving: '保存中...',
    refresh: '刷新',
    time: {
      never: '从未',
      justNow: '刚刚',
      minutesAgo: '{n}分钟前',
      hoursAgo: '{n}小时前',
      daysAgo: '{n}天前'
    }
  },

  // Navigation
  nav: {
    dashboard: '仪表盘',
    apiKeys: 'API 密钥',
    usage: '使用记录',
    redeem: '兑换',
    profile: '个人资料',
    users: '用户管理',
    groups: '分组管理',
    subscriptions: '订阅管理',
    accounts: '账号管理',
    proxies: 'IP管理',
    redeemCodes: '兑换码',
    settings: '系统设置',
    myAccount: '我的账户',
    lightMode: '浅色模式',
    darkMode: '深色模式',
    collapse: '收起',
    expand: '展开',
    logout: '退出登录',
    github: 'GitHub',
    mySubscriptions: '我的订阅'
  },

  // Auth
  auth: {
    welcomeBack: '欢迎回来',
    signInToAccount: '登录您的账户以继续',
    signIn: '登录',
    signingIn: '登录中...',
    createAccount: '创建账户',
    signUpToStart: '注册以开始使用 {siteName}',
    signUp: '注册',
    processing: '处理中...',
    continue: '继续',
    rememberMe: '记住我',
    dontHaveAccount: '还没有账户？',
    alreadyHaveAccount: '已有账户？',
    registrationDisabled: '注册功能暂时关闭，请联系管理员。',
    emailLabel: '邮箱',
    emailPlaceholder: '请输入邮箱',
    passwordLabel: '密码',
    passwordPlaceholder: '请输入密码',
    createPasswordPlaceholder: '创建一个安全的密码',
    passwordHint: '至少 6 个字符',
    emailRequired: '请输入邮箱',
    invalidEmail: '请输入有效的邮箱地址',
    passwordRequired: '请输入密码',
    passwordMinLength: '密码至少需要 6 个字符',
    loginFailed: '登录失败，请检查您的凭据后重试。',
    registrationFailed: '注册失败，请重试。',
    loginSuccess: '登录成功！欢迎回来。',
    accountCreatedSuccess: '账户创建成功！欢迎使用 {siteName}。',
    turnstileExpired: '验证已过期，请重试',
    turnstileFailed: '验证失败，请重试',
    completeVerification: '请完成验证',
    verifyYourEmail: '验证您的邮箱',
    sessionExpired: '会话已过期',
    sessionExpiredDesc: '请返回注册页面重新开始。',
    verificationCode: '验证码',
    verificationCodeHint: '请输入发送到您邮箱的6位验证码',
    sendingCode: '发送中...',
    clickToResend: '点击重新发送验证码',
    resendCode: '重新发送验证码',
    oauth: {
      code: '授权码',
      state: '状态',
      fullUrl: '完整URL'
    }
  },

  // Dashboard
  dashboard: {
    title: '仪表盘',
    welcomeMessage: '欢迎回来！这是您账户的概览。',
    balance: '余额',
    apiKeys: 'API 密钥',
    todayRequests: '今日请求',
    todayCost: '今日消费',
    todayTokens: '今日 Token',
    totalTokens: '累计 Token',
    cacheToday: '今日缓存',
    performance: '性能指标',
    avgResponse: '平均响应',
    averageTime: '平均时间',
    timeRange: '时间范围',
    granularity: '粒度',
    day: '按天',
    hour: '按小时',
    modelDistribution: '模型分布',
    tokenUsageTrend: 'Token 使用趋势',
    noDataAvailable: '暂无数据',
    model: '模型',
    requests: '请求',
    tokens: 'Token',
    actual: '实际',
    standard: '标准',
    input: '输入',
    output: '输出',
    cache: '缓存',
    recentUsage: '最近使用',
    last7Days: '近 7 天',
    noUsageRecords: '暂无使用记录',
    startUsingApi: '开始使用 API 后，您的使用历史将显示在这里。',
    viewAllUsage: '查看全部',
    quickActions: '快捷操作',
    createApiKey: '创建 API 密钥',
    generateNewKey: '生成新的 API 密钥',
    viewUsage: '查看使用记录',
    checkDetailedLogs: '查看详细的使用日志',
    redeemCode: '兑换码',
    addBalanceWithCode: '使用兑换码充值'
  },

  // Groups (shared)
  groups: {
    subscription: '订阅'
  },

  // API Keys
  keys: {
    title: 'API 密钥',
    description: '管理您的 API 密钥和访问令牌',
    createKey: '创建密钥',
    editKey: '编辑密钥',
    deleteKey: '删除密钥',
    deleteConfirmMessage: "确定要删除 '{name}' 吗？此操作无法撤销。",
    apiKey: 'API 密钥',
    group: '分组',
    noGroup: '无分组',
    created: '创建时间',
    copyToClipboard: '复制到剪贴板',
    copied: '已复制！',
    importToCcSwitch: '导入到 CCS',
    enable: '启用',
    disable: '禁用',
    nameLabel: '名称',
    namePlaceholder: '我的 API 密钥',
    groupLabel: '分组',
    selectGroup: '选择分组',
    statusLabel: '状态',
    selectStatus: '选择状态',
    saving: '保存中...',
    noKeysYet: '暂无 API 密钥',
    createFirstKey: '创建您的第一个 API 密钥以开始使用 API。',
    keyCreatedSuccess: 'API 密钥创建成功',
    keyUpdatedSuccess: 'API 密钥更新成功',
    keyDeletedSuccess: 'API 密钥删除成功',
    keyEnabledSuccess: 'API 密钥已启用',
    keyDisabledSuccess: 'API 密钥已禁用',
    failedToLoad: '加载 API 密钥失败',
    failedToSave: '保存 API 密钥失败',
    failedToDelete: '删除 API 密钥失败',
    failedToUpdateStatus: '更新 API 密钥状态失败',
    clickToChangeGroup: '点击更换分组',
    groupChangedSuccess: '分组更换成功',
    failedToChangeGroup: '更换分组失败',
    groupRequired: '请选择分组',
    usage: '用量',
    today: '今日',
    total: '累计',
    useKey: '使用密钥',
    useKeyModal: {
      title: '使用 API 密钥',
      description: '将以下环境变量添加到您的终端配置文件或直接在终端中运行。',
      copy: '复制',
      copied: '已复制',
      note: '这些环境变量将在当前终端会话中生效。如需永久配置，请将其添加到 ~/.bashrc、~/.zshrc 或相应的配置文件中。',
      noGroupTitle: '请先分配分组',
      noGroupDescription: '此 API 密钥尚未分配分组，请先在密钥列表中点击分组列进行分配，然后才能查看使用配置。',
      openai: {
        description: '将以下配置文件添加到 Codex CLI 配置目录中。',
        configTomlHint: '请确保以下内容位于 config.toml 文件的开头部分',
        note: '请确保配置目录存在。macOS/Linux 用户可运行 mkdir -p ~/.codex 创建目录。',
        noteWindows: '按 Win+R，输入 %userprofile%\\.codex 打开配置目录。如目录不存在，请先手动创建。',
      },
    },
    customKeyLabel: '自定义密钥',
    customKeyPlaceholder: '输入自定义密钥（至少16个字符）',
    customKeyHint: '仅允许字母、数字、下划线和连字符，最少16个字符。',
    customKeyTooShort: '自定义密钥至少需要16个字符',
    customKeyInvalidChars: '自定义密钥只能包含字母、数字、下划线和连字符',
    customKeyRequired: '请输入自定义密钥',
    ccSwitchNotInstalled: 'CC-Switch 未安装或协议处理程序未注册。请先安装 CC-Switch 或手动复制 API 密钥。'
  },

  // Usage
  usage: {
    title: '使用记录',
    description: '查看和分析您的 API 使用历史',
    totalRequests: '总请求数',
    totalTokens: '总 Token',
    totalCost: '总消费',
    standardCost: '标准',
    actualCost: '实际',
    avgDuration: '平均耗时',
    inSelectedRange: '所选范围内',
    perRequest: '每次请求',
    apiKeyFilter: 'API 密钥',
    allApiKeys: '全部密钥',
    timeRange: '时间范围',
    exportCsv: '导出 CSV',
    exportExcel: '导出 Excel',
    exportingProgress: '正在导出数据...',
    exportedCount: '已导出 {current}/{total} 条',
    estimatedTime: '预计剩余时间：{time}',
    cancelExport: '取消导出',
    exportCancelled: '导出已取消',
    exporting: '导出中...',
    preparingExport: '正在准备导出...',
    model: '模型',
    type: '类型',
    tokens: 'Token',
    cost: '费用',
    firstToken: '首 Token',
    duration: '耗时',
    time: '时间',
    stream: '流式',
    sync: '同步',
    in: '输入',
    out: '输出',
    cacheRead: '读取',
    cacheWrite: '写入',
    rate: '倍率',
    original: '原始',
    billed: '计费',
    noRecords: '未找到使用记录，请尝试调整筛选条件。',
    failedToLoad: '加载使用记录失败',
    noDataToExport: '没有可导出的数据',
    exportSuccess: '使用数据导出成功',
    exportFailed: '使用数据导出失败',
    exportExcelSuccess: '使用数据导出成功（Excel格式）',
    exportExcelFailed: '使用数据导出失败',
    billingType: '消费类型',
    balance: '余额',
    subscription: '订阅'
  },

  // Redeem
  redeem: {
    title: '兑换码',
    description: '输入兑换码以充值余额或增加并发数',
    currentBalance: '当前余额',
    concurrency: '并发数',
    requests: '请求',
    redeemCodeLabel: '兑换码',
    redeemCodePlaceholder: '请输入兑换码',
    redeemCodeHint: '兑换码区分大小写',
    redeeming: '兑换中...',
    redeemButton: '兑换',
    redeemSuccess: '兑换成功！',
    redeemFailed: '兑换失败',
    added: '已添加',
    concurrentRequests: '并发请求',
    newBalance: '新余额',
    newConcurrency: '新并发数',
    aboutCodes: '关于兑换码',
    codeRule1: '每个兑换码只能使用一次',
    codeRule2: '兑换码可以增加余额、并发数或试用权限',
    codeRule3: '如有兑换问题，请联系客服',
    codeRule4: '余额和并发数即时更新',
    recentActivity: '最近活动',
    historyWillAppear: '您的兑换历史将显示在这里',
    balanceAddedRedeem: '余额充值（兑换）',
    balanceAddedAdmin: '余额充值（管理员）',
    balanceDeductedAdmin: '余额扣除（管理员）',
    concurrencyAddedRedeem: '并发增加（兑换）',
    concurrencyAddedAdmin: '并发增加（管理员）',
    concurrencyReducedAdmin: '并发减少（管理员）',
    adminAdjustment: '管理员调整',
    subscriptionAssigned: '订阅已分配',
    subscriptionAssignedDesc: '您已获得 {groupName} 的访问权限',
    subscriptionDays: '{days} 天',
    days: '天',
    codeRedeemSuccess: '兑换成功！',
    failedToRedeem: '兑换失败，请检查兑换码后重试。',
    subscriptionRefreshFailed: '兑换成功，但订阅状态刷新失败。'
  },

  // Profile
  profile: {
    title: '个人设置',
    description: '管理您的账户信息和设置',
    accountBalance: '账户余额',
    concurrencyLimit: '并发限制',
    memberSince: '注册时间',
    administrator: '管理员',
    user: '用户',
    username: '用户名',
    wechat: '微信号',
    enterUsername: '输入用户名',
    enterWechat: '输入微信号',
    editProfile: '编辑个人资料',
    updateProfile: '更新资料',
    updating: '更新中...',
    updateSuccess: '资料更新成功',
    updateFailed: '资料更新失败',
    usernameRequired: '用户名不能为空',
    changePassword: '修改密码',
    currentPassword: '当前密码',
    newPassword: '新密码',
    confirmNewPassword: '确认新密码',
    passwordHint: '密码至少需要 8 个字符',
    changingPassword: '修改中...',
    changePasswordButton: '修改密码',
    passwordsNotMatch: '两次输入的密码不一致',
    passwordTooShort: '密码至少需要 8 个字符',
    passwordChangeSuccess: '密码修改成功',
    passwordChangeFailed: '密码修改失败'
  },

  // Empty States
  empty: {
    noData: '暂无数据'
  },

  // Table
  table: {
    expandActions: '展开更多操作',
    collapseActions: '收起操作'
  },

  // Pagination
  pagination: {
    showing: '显示',
    to: '至',
    of: '共',
    results: '条结果',
    page: '页',
    pageOf: '第 {page} / {total} 页',
    previous: '上一页',
    next: '下一页',
    perPage: '每页',
    goToPage: '跳转到第 {page} 页'
  },

  // Errors
  errors: {
    somethingWentWrong: '出错了',
    pageNotFound: '页面未找到',
    unauthorized: '未授权',
    forbidden: '禁止访问',
    serverError: '服务器错误',
    networkError: '网络错误',
    timeout: '请求超时',
    tryAgain: '请重试'
  },

  // Dates
  dates: {
    today: '今天',
    yesterday: '昨天',
    thisWeek: '本周',
    lastWeek: '上周',
    thisMonth: '本月',
    lastMonth: '上月',
    last7Days: '近 7 天',
    last14Days: '近 14 天',
    last30Days: '近 30 天',
    custom: '自定义',
    startDate: '开始日期',
    endDate: '结束日期',
    apply: '应用',
    selectDateRange: '选择日期范围'
  },

  // Admin
  admin: {
    // Dashboard
    dashboard: {
      title: '管理控制台',
      description: '系统概览与统计数据',
      apiKeys: 'API 密钥',
      totalApiKeys: 'API 密钥总数',
      activeApiKeys: '活跃密钥',
      users: '用户',
      totalUsers: '用户总数',
      activeUsers: '活跃用户',
      accounts: '账号',
      totalAccounts: '账号总数',
      activeAccounts: '活跃账号',
      todayRequests: '今日请求',
      totalRequests: '总请求数',
      todayCost: '今日消费',
      totalCost: '总消费',
      actual: '实际',
      standard: '标准',
      todayTokens: '今日 Token',
      totalTokens: '总 Token',
      input: '输入',
      output: '输出',
      cacheToday: '今日缓存',
      performance: '性能指标',
      avgResponse: '平均响应',
      averageTime: '平均时间',
      timeRange: '时间范围',
      granularity: '粒度',
      day: '按天',
      hour: '按小时',
      modelDistribution: '模型分布',
      tokenUsageTrend: 'Token 使用趋势',
      noDataAvailable: '暂无数据',
      model: '模型',
      requests: '请求',
      tokens: 'Token',
      cache: '缓存',
      recentUsage: '最近使用',
      last7Days: '近 7 天',
      noUsageRecords: '暂无使用记录',
      startUsingApi: '开始使用 API 后，使用历史将显示在这里。',
      viewAllUsage: '查看全部',
      quickActions: '快捷操作',
      manageUsers: '管理用户',
      viewUserAccounts: '查看和管理用户账户',
      manageAccounts: '管理账号',
      configureAiAccounts: '配置 AI 平台账号',
      systemSettings: '系统设置',
      configureSystem: '配置系统设置',
      failedToLoad: '加载仪表盘数据失败'
    },

    // Users Management
    users: {
      title: '用户管理',
      description: '管理用户账户和权限',
      createUser: '创建用户',
      editUser: '编辑用户',
      deleteUser: '删除用户',
      deleteConfirmMessage: "确定要删除用户 '{email}' 吗？此操作无法撤销。",
      searchPlaceholder: '搜索用户...',
      searchUsers: '搜索用户...',
      roleFilter: '角色筛选',
      allRoles: '全部角色',
      allStatus: '全部状态',
      statusFilter: '状态筛选',
      allStatuses: '全部状态',
      admin: '管理员',
      user: '用户',
      disabled: '禁用',
      email: '邮箱',
      password: '密码',
      username: '用户名',
      wechat: '微信号',
      notes: '备注',
      enterEmail: '请输入邮箱',
      enterPassword: '请输入密码',
      enterUsername: '请输入用户名（选填）',
      enterWechat: '请输入微信号（选填）',
      enterNotes: '请输入备注（仅管理员可见）',
      notesHint: '此备注仅对管理员可见',
      enterNewPassword: '请输入新密码（选填）',
      leaveEmptyToKeep: '留空则保持原密码不变',
      generatePassword: '生成随机密码',
      copyPassword: '复制密码',
      creating: '创建中...',
      updating: '更新中...',
      columns: {
        user: '用户',
        email: '邮箱',
        username: '用户名',
        wechat: '微信号',
        notes: '备注',
        role: '角色',
        subscriptions: '订阅分组',
        balance: '余额',
        usage: '用量',
        concurrency: '并发数',
        status: '状态',
        created: '创建时间',
        actions: '操作'
      },
      today: '今日',
      total: '累计',
      noSubscription: '暂无订阅',
      daysRemaining: '{days}天',
      expired: '已过期',
      disable: '禁用',
      enable: '启用',
      disableUser: '禁用用户',
      enableUser: '启用用户',
      viewApiKeys: '查看 API 密钥',
      groups: '分组',
      apiKeys: 'API密钥',
      userApiKeys: '用户 API 密钥',
      noApiKeys: '此用户暂无 API 密钥',
      group: '分组',
      none: '无',
      noUsersYet: '暂无用户',
      createFirstUser: '创建您的第一个用户以开始使用系统',
      userCreated: '用户创建成功',
      userUpdated: '用户更新成功',
      userDeleted: '用户删除成功',
      userEnabled: '用户已启用',
      userDisabled: '用户已禁用',
      failedToLoad: '加载用户列表失败',
      failedToCreate: '创建用户失败',
      failedToUpdate: '更新用户失败',
      failedToDelete: '删除用户失败',
      failedToToggle: '更新用户状态失败',
      failedToLoadApiKeys: '加载用户 API 密钥失败',
      deleteConfirm: "确定要删除用户 '{email}' 吗？此操作无法撤销。",
      roles: {
        admin: '管理员',
        user: '用户'
      },
      statuses: {
        active: '正常',
        banned: '禁用'
      },
      form: {
        emailLabel: '邮箱',
        emailPlaceholder: '请输入邮箱',
        usernameLabel: '用户名',
        usernamePlaceholder: '请输入用户名（选填）',
        wechatLabel: '微信号',
        wechatPlaceholder: '请输入微信号（选填）',
        notesLabel: '备注',
        notesPlaceholder: '请输入备注（仅管理员可见）',
        notesHint: '此备注仅对管理员可见',
        passwordLabel: '密码',
        passwordPlaceholder: '请输入密码（留空则不修改）',
        roleLabel: '角色',
        selectRole: '选择角色',
        balanceLabel: '余额',
        concurrencyLabel: '并发数',
        statusLabel: '状态',
        selectStatus: '选择状态'
      },
      adjustBalance: '调整余额',
      adjustConcurrency: '调整并发数',
      adjustmentAmount: '调整金额',
      adjustmentAmountHint: '正数增加，负数减少',
      currentBalance: '当前余额',
      currentConcurrency: '当前并发数',
      saving: '保存中...',
      noUsers: '暂无用户',
      noUsersDescription: '创建您的第一个用户以开始使用系统。',
      userCreatedSuccess: '用户创建成功',
      userUpdatedSuccess: '用户更新成功',
      userDeletedSuccess: '用户删除成功',
      balanceAdjustedSuccess: '余额调整成功',
      concurrencyAdjustedSuccess: '并发数调整成功',
      failedToSave: '保存用户失败',
      failedToAdjust: '调整失败',
      setAllowedGroups: '设置允许分组',
      allowedGroupsHint: '选择此用户可以使用的标准分组。订阅类型分组请在订阅管理中配置。',
      noStandardGroups: '暂无标准分组',
      allowAllGroups: '允许全部分组',
      allowAllGroupsHint: '用户可以使用任何非专属分组',
      allowedGroupsUpdated: '允许分组更新成功',
      failedToLoadGroups: '加载分组列表失败',
      failedToUpdateAllowedGroups: '更新允许分组失败',
      deposit: '充值',
      withdraw: '退款',
      depositAmount: '充值金额',
      withdrawAmount: '退款金额',
      depositNotesPlaceholder: '例如：新用户注册奖励、活动充值、补偿充值等',
      withdrawNotesPlaceholder: '例如：服务问题退款、错误充值退回、账户注销退款等',
      notesOptional: '备注为可选项，有助于未来查账',
      amountHint: '请输入正数金额',
      newBalance: '操作后余额',
      depositing: '充值中...',
      withdrawing: '退款中...',
      confirmDeposit: '确认充值',
      confirmWithdraw: '确认退款',
      depositSuccess: '充值成功',
      withdrawSuccess: '退款成功',
      failedToDeposit: '充值失败',
      failedToWithdraw: '退款失败',
      useDepositWithdrawButtons: '请使用充值/退款按钮调整余额',
      insufficientBalance: '余额不足，退款后余额不能为负数'
    },

    // Groups Management
    groups: {
      title: '分组管理',
      description: '管理 API 密钥分组和费率配置',
      createGroup: '创建分组',
      editGroup: '编辑分组',
      deleteGroup: '删除分组',
      deleteConfirm: "确定要删除分组 '{name}' 吗？所有关联的 API 密钥将不再属于任何分组。",
      deleteConfirmSubscription:
        "确定要删除订阅分组 '{name}' 吗？此操作会让所有绑定此订阅的用户的 API Key 失效，并删除所有相关的订阅记录。此操作无法撤销。",
      columns: {
        name: '名称',
        platform: '平台',
        rateMultiplier: '费率倍数',
        exclusive: '独占',
        type: '类型',
        priority: '优先级',
        apiKeys: 'API 密钥数',
        accounts: '账号数',
        status: '状态',
        actions: '操作',
        billingType: '计费类型'
      },
      form: {
        name: '名称',
        description: '描述',
        platform: '平台',
        rateMultiplier: '费率倍数',
        status: '状态',
        exclusive: '专属分组',
        nameLabel: '分组名称',
        namePlaceholder: '请输入分组名称',
        descriptionLabel: '描述',
        descriptionPlaceholder: '请输入描述（可选）',
        rateMultiplierLabel: '费率倍数',
        rateMultiplierHint: '1.0 = 标准费率，0.5 = 半价，2.0 = 双倍',
        exclusiveLabel: '专属分组',
        exclusiveHint: '专属分组，可以手动指定给用户',
        platformLabel: '平台限制',
        platformPlaceholder: '选择平台（留空则不限制）',
        accountsLabel: '指定账号',
        accountsPlaceholder: '选择账号（留空则不限制）',
        priorityLabel: '优先级',
        priorityHint: '数值越高优先级越高，用于账号调度',
        statusLabel: '状态'
      },
      exclusiveObj: {
        yes: '是',
        no: '否'
      },
      exclusive: '专属',
      exclusiveHint: '专属分组，可以手动指定给特定用户',
      exclusiveTooltip: {
        title: '什么是专属分组？',
        description: '开启后，用户在创建 API Key 时将无法看到此分组。只有管理员手动将用户分配到此分组后，用户才能使用。',
        example: '使用场景：',
        exampleContent: '公开分组费率 0.8，您可以创建一个费率 0.7 的专属分组，手动分配给 VIP 用户，让他们享受更优惠的价格。'
      },
      rateMultiplierHint: '1.0 = 标准费率，0.5 = 半价，2.0 = 双倍',
      platforms: {
        all: '全部平台',
        claude: 'Claude',
        openai: 'OpenAI'
      },
      saving: '保存中...',
      noGroups: '暂无分组',
      noGroupsDescription: '创建分组以更好地管理 API 密钥和费率。',
      groupCreatedSuccess: '分组创建成功',
      groupUpdatedSuccess: '分组更新成功',
      groupDeletedSuccess: '分组删除成功',
      failedToLoad: '加载分组列表失败',
      failedToSave: '保存分组失败',
      failedToDelete: '删除分组失败',
      allPlatforms: '全部平台',
      allStatus: '全部状态',
      allGroups: '全部分组',
      exclusiveFilter: '专属',
      nonExclusive: '公开',
      public: '公开',
      rateAndAccounts: '{rate}x 费率 · {count} 个账号',
      accountsCount: '{count} 个账号',
      enterGroupName: '请输入分组名称',
      optionalDescription: '可选描述',
      platformHint: '选择此分组关联的平台',
      platformNotEditable: '创建后不可更改平台',
      noGroupsYet: '暂无分组',
      createFirstGroup: '创建您的第一个分组来组织 API 密钥。',
      creating: '创建中...',
      updating: '更新中...',
      limitDay: '日',
      limitWeek: '周',
      limitMonth: '月',
      groupCreated: '分组创建成功',
      groupUpdated: '分组更新成功',
      groupDeleted: '分组删除成功',
      failedToCreate: '创建分组失败',
      failedToUpdate: '更新分组失败',
      subscription: {
        title: '订阅设置',
        type: '计费类型',
        typeHint: '标准计费从用户余额扣除。订阅模式使用配额限制。',
        typeNotEditable: '分组创建后无法修改计费类型。',
        standard: '标准（余额）',
        subscription: '订阅（配额）',
        dailyLimit: '每日限额（USD）',
        weeklyLimit: '每周限额（USD）',
        monthlyLimit: '每月限额（USD）',
        defaultValidityDays: '默认有效期（天）',
        validityHint: '分配给用户时订阅的有效天数',
        noLimit: '无限制'
      }
    },

    // Subscriptions Management
    subscriptions: {
      title: '订阅管理',
      description: '管理用户订阅和配额限制',
      assignSubscription: '分配订阅',
      extendSubscription: '延长订阅',
      revokeSubscription: '撤销订阅',
      allStatus: '全部状态',
      allGroups: '全部分组',
      daily: '每日',
      weekly: '每周',
      monthly: '每月',
      noLimits: '未配置限额',
      unlimited: '无限制',
      resetNow: '即将重置',
      windowNotActive: '窗口未激活',
      resetInMinutes: '{minutes} 分钟后重置',
      resetInHoursMinutes: '{hours} 小时 {minutes} 分钟后重置',
      resetInDaysHours: '{days} 天 {hours} 小时后重置',
      daysRemaining: '天剩余',
      noExpiration: '无过期时间',
      status: {
        active: '生效中',
        expired: '已过期',
        revoked: '已撤销'
      },
      columns: {
        user: '用户',
        group: '分组',
        usage: '用量',
        expires: '到期时间',
        status: '状态',
        actions: '操作'
      },
      form: {
        user: '用户',
        group: '订阅分组',
        validityDays: '有效期（天）',
        extendDays: '延长天数'
      },
      selectUser: '选择用户',
      selectGroup: '选择订阅分组',
      groupHint: '仅显示订阅计费类型的分组',
      validityHint: '订阅的有效天数',
      extendingFor: '为以下用户延长订阅',
      currentExpiration: '当前到期时间',
      assign: '分配',
      assigning: '分配中...',
      extend: '延长',
      extending: '延长中...',
      revoke: '撤销',
      noSubscriptionsYet: '暂无订阅',
      assignFirstSubscription: '分配一个订阅以开始使用。',
      subscriptionAssigned: '订阅分配成功',
      subscriptionExtended: '订阅延长成功',
      subscriptionRevoked: '订阅撤销成功',
      failedToLoad: '加载订阅列表失败',
      failedToAssign: '分配订阅失败',
      failedToExtend: '延长订阅失败',
      failedToRevoke: '撤销订阅失败',
      revokeConfirm: "确定要撤销 '{user}' 的订阅吗？此操作无法撤销。"
    },

    // Accounts Management
    accounts: {
      title: '账号管理',
      description: '管理 AI 平台账号和 Cookie',
      createAccount: '添加账号',
      syncFromCrs: '从 CRS 同步',
      syncFromCrsTitle: '从 CRS 同步账号',
      syncFromCrsDesc:
        '将 claude-relay-service（CRS）中的账号同步到当前系统（不会在浏览器侧直接请求 CRS）。',
      crsVersionRequirement: '⚠️ 注意：CRS 版本必须 ≥ v1.1.240 才支持此功能',
      crsBaseUrl: 'CRS 服务地址',
      crsBaseUrlPlaceholder: '例如：http://127.0.0.1:3000',
      crsUsername: '用户名',
      crsPassword: '密码',
      syncProxies: '同时同步代理（按 host/port/账号匹配或自动创建）',
      syncNow: '开始同步',
      syncing: '同步中...',
      syncMissingFields: '请填写服务地址、用户名和密码',
      syncResult: '同步结果',
      syncResultSummary: '创建 {created}，更新 {updated}，跳过 {skipped}，失败 {failed}',
      syncErrors: '错误/跳过详情',
      syncCompleted: '同步完成：创建 {created}，更新 {updated}',
      syncCompletedWithErrors: '同步完成但有错误：失败 {failed}（创建 {created}，更新 {updated}）',
      syncFailed: '同步失败',
      editAccount: '编辑账号',
      deleteAccount: '删除账号',
      deleteConfirmMessage: "确定要删除账号 '{name}' 吗？",
      refreshCookie: '刷新 Cookie',
      testAccount: '测试账号',
      searchAccounts: '搜索账号...',
      // Filter options
      allPlatforms: '全部平台',
      allTypes: '全部类型',
      allStatus: '全部状态',
      oauthType: 'OAuth',
      // Schedulable toggle
      schedulable: '参与调度',
      schedulableHint: '开启后账号参与API请求调度',
      schedulableEnabled: '调度已开启',
      schedulableDisabled: '调度已关闭',
      failedToToggleSchedulable: '切换调度状态失败',
      columns: {
        name: '名称',
        platformType: '平台/类型',
        platform: '平台',
        type: '类型',
        concurrencyStatus: '并发',
        priority: '优先级',
        weight: '权重',
        status: '状态',
        schedulable: '调度',
        todayStats: '今日统计',
        groups: '分组',
        usageWindows: '用量窗口',
        lastUsed: '最近使用',
        actions: '操作'
      },
      clearRateLimit: '清除速率限制',
      testConnection: '测试连接',
      reAuthorize: '重新授权',
      refreshToken: '刷新令牌',
      noAccountsYet: '暂无账号',
      createFirstAccount: '添加 AI 平台账号以开始使用 API 网关。',
      tokenRefreshed: 'Token 刷新成功',
      accountDeleted: '账号删除成功',
      rateLimitCleared: '速率限制已清除',
      setupToken: 'Setup Token',
      apiKey: 'API Key',
      deleteConfirm: "确定要删除账号 '{name}' 吗？此操作无法撤销。",
      failedToClearRateLimit: '清除速率限制失败',
      platforms: {
        claude: 'Claude',
        openai: 'OpenAI',
        anthropic: 'Anthropic',
        gemini: 'Gemini',
        antigravity: 'Antigravity'
      },
      types: {
        oauth: 'OAuth',
        chatgptOauth: 'ChatGPT OAuth',
        responsesApi: 'Responses API',
        googleOauth: 'Google OAuth',
        codeAssist: 'Code Assist',
        antigravityOauth: 'Antigravity OAuth',
        api_key: 'API Key',
        cookie: 'Cookie'
      },
      statuses: {
        active: '正常',
        inactive: '停用',
        error: '错误',
        cooldown: '冷却中'
      },
      usageWindow: {
        statsTitle: '5小时窗口用量统计',
        statsTitleDaily: '每日用量统计',
        geminiProDaily: 'Pro',
        geminiFlashDaily: 'Flash',
        gemini3Pro: 'G3P',
        gemini3Flash: 'G3F',
        gemini3Image: 'G3I',
        claude45: 'C4.5'
      },
      tier: {
        free: 'Free',
        pro: 'Pro',
        ultra: 'Ultra'
      },
      ineligibleWarning:
        '该账号无 Antigravity 使用权限，但仍能进行 API 转发。继续使用请自行承担风险。',
      form: {
        nameLabel: '账号名称',
        namePlaceholder: '请输入账号名称',
        platformLabel: '平台',
        selectPlatform: '选择平台',
        typeLabel: '类型',
        selectType: '选择类型',
        credentialsLabel: '凭证',
        credentialsPlaceholder: '请输入 Cookie 或 API Key',
        priorityLabel: '优先级',
        priorityHint: '数值越高优先级越高',
        weightLabel: '权重',
        weightHint: '用于负载均衡的权重值',
        statusLabel: '状态'
      },
      filters: {
        platform: '平台',
        allPlatforms: '全部平台',
        type: '类型',
        allTypes: '全部类型',
        status: '状态',
        allStatuses: '全部状态'
      },
      saving: '保存中...',
      refreshing: '刷新中...',
      testing: '测试中...',
      noAccounts: '暂无账号',
      noAccountsDescription: '添加 AI 平台账号以开始使用 API 网关。',
      accountCreatedSuccess: '账号添加成功',
      accountUpdatedSuccess: '账号更新成功',
      accountDeletedSuccess: '账号删除成功',
      bulkActions: {
        selected: '已选择 {count} 个账号',
        selectCurrentPage: '本页全选',
        clear: '清除选择',
        edit: '批量编辑账号',
        delete: '批量删除'
      },
      bulkEdit: {
        title: '批量编辑账号',
        selectionInfo: '已选择 {count} 个账号。只更新您勾选或填写的字段，未勾选的字段保持不变。',
        baseUrlPlaceholder: 'https://api.anthropic.com 或 https://api.openai.com',
        baseUrlNotice: '仅适用于 API Key 账号，留空则不修改',
        submit: '批量更新',
        updating: '更新中...',
        success: '成功更新 {count} 个账号',
        partialSuccess: '部分更新成功：成功 {success} 个，失败 {failed} 个',
        failed: '批量更新失败',
        noSelection: '请选择要编辑的账号',
        noFieldsSelected: '请至少选择一个要更新的字段'
      },
      bulkDeleteTitle: '批量删除账号',
      bulkDeleteConfirm: '确定要删除选中的 {count} 个账号吗？此操作无法撤销。',
      bulkDeleteSuccess: '成功删除 {count} 个账号',
      bulkDeletePartial: '部分删除成功：成功 {success} 个，失败 {failed} 个',
      bulkDeleteFailed: '批量删除失败',
      resetStatus: '重置状态',
      statusReset: '账号状态已重置',
      failedToResetStatus: '重置账号状态失败',
      cookieRefreshedSuccess: 'Cookie 刷新成功',
      testSuccess: '账号测试通过',
      testFailed: '账号测试失败',
      failedToLoad: '加载账号列表失败',
      failedToSave: '保存账号失败',
      failedToDelete: '删除账号失败',
      failedToRefresh: '刷新 Cookie 失败',
      // Create/Edit Account Modal
      platform: '平台',
      accountName: '账号名称',
      enterAccountName: '请输入账号名称',
      accountType: '账号类型',
      claudeCode: 'Claude Code',
      claudeConsole: 'Claude Console',
      oauthSetupToken: 'OAuth / Setup Token',
      addMethod: '添加方式',
      setupTokenLongLived: 'Setup Token（长期有效）',
      baseUrl: 'Base URL',
      baseUrlHint: '留空使用官方 Anthropic API',
      apiKeyRequired: 'API Key *',
      apiKeyPlaceholder: 'sk-ant-api03-...',
      apiKeyHint: '您的 Claude Console API Key',
      // OpenAI specific hints
      openai: {
        baseUrlHint: '留空使用官方 OpenAI API',
        apiKeyHint: '您的 OpenAI API Key'
      },
      modelRestriction: '模型限制（可选）',
      modelWhitelist: '模型白名单',
      modelMapping: '模型映射',
      selectAllowedModels: '选择允许的模型。留空则支持所有模型。',
      mapRequestModels: '将请求模型映射到实际模型。左边是请求的模型，右边是发送到 API 的实际模型。',
      selectedModels: '已选择 {count} 个模型',
      supportsAllModels: '（支持所有模型）',
      requestModel: '请求模型',
      actualModel: '实际模型',
      addMapping: '添加映射',
      mappingExists: '模型 {model} 的映射已存在',
      searchModels: '搜索模型...',
      noMatchingModels: '没有匹配的模型',
      fillRelatedModels: '填入相关模型',
      clearAllModels: '清除所有模型',
      customModelName: '自定义模型名称',
      enterCustomModelName: '输入自定义模型名称',
      addModel: '填入',
      modelExists: '该模型已存在',
      modelCount: '{count} 个模型',
      customErrorCodes: '自定义错误码',
      customErrorCodesHint: '仅对选中的错误码停止调度',
      customErrorCodesWarning: '仅选中的错误码会停止调度，其他错误将返回 500。',
      selectedErrorCodes: '已选择',
      noneSelectedUsesDefault: '未选择（使用默认策略）',
      enterErrorCode: '输入错误码 (100-599)',
      invalidErrorCode: '请输入有效的 HTTP 错误码 (100-599)',
      errorCodeExists: '该错误码已被选中',
      interceptWarmupRequests: '拦截预热请求',
      interceptWarmupRequestsDesc: '启用后，标题生成等预热请求将返回 mock 响应，不消耗上游 token',
      proxy: '代理',
      noProxy: '无代理',
      concurrency: '并发数',
      priority: '优先级',
      priorityHint: '优先级越高的账号优先使用',
      higherPriorityFirst: '数值越高优先级越高',
      mixedScheduling: '混合调度',
      mixedSchedulingHint: '启用后可参与 Anthropic/Gemini 分组的调度',
      mixedSchedulingTooltip:
        '开启后，该账户可被 /v1/messages 及 /v1beta 端点调度，否则只被 /antigravity 调度。注意：Anthropic Claude 和 Antigravity Claude 无法在同个上下文中混合使用，开启后请自行做好分组管理。',
      creating: '创建中...',
      updating: '更新中...',
      accountCreated: '账号创建成功',
      accountUpdated: '账号更新成功',
      failedToCreate: '创建账号失败',
      failedToUpdate: '更新账号失败',
      pleaseEnterAccountName: '请输入账号名称',
      pleaseEnterApiKey: '请输入 API Key',
      apiKeyIsRequired: 'API Key 是必需的',
      leaveEmptyToKeep: '留空以保持当前密钥',
      // OAuth flow
      oauth: {
        title: 'Claude 账号授权',
        authMethod: '授权方式',
        manualAuth: '手动授权',
        cookieAutoAuth: 'Cookie 自动授权',
        cookieAutoAuthDesc: '使用 claude.ai sessionKey 自动完成 OAuth 授权，无需手动打开浏览器。',
        sessionKey: 'sessionKey',
        keysCount: '{count} 个密钥',
        batchCreateAccounts: '将批量创建 {count} 个账号',
        sessionKeyPlaceholder:
          '每行一个 sessionKey，例如：\nsk-ant-sid01-xxxxx...\nsk-ant-sid01-yyyyy...',
        sessionKeyPlaceholderSingle: 'sk-ant-sid01-xxxxx...',
        howToGetSessionKey: '如何获取 sessionKey',
        step1: '在浏览器中登录 <strong>claude.ai</strong>',
        step2: '按 <kbd>F12</kbd> 打开开发者工具',
        step3: '切换到 <strong>Application</strong> 标签',
        step4: '找到 <strong>Cookies</strong> → <strong>https://claude.ai</strong>',
        step5: '找到 <strong>sessionKey</strong> 所在行',
        step6: '复制 <strong>Value</strong> 列的值',
        sessionKeyFormat: 'sessionKey 通常以 <code>sk-ant-sid01-</code> 开头',
        startAutoAuth: '开始自动授权',
        authorizing: '授权中...',
        followSteps: '按照以下步骤授权您的 Claude 账号：',
        step1GenerateUrl: '点击下方按钮生成授权 URL',
        generateAuthUrl: '生成授权 URL',
        generating: '生成中...',
        regenerate: '重新生成',
        step2OpenUrl: '在浏览器中打开 URL 并完成授权',
        openUrlDesc: '在新标签页中打开授权 URL，登录您的 Claude 账号并授权。',
        proxyWarning:
          '<strong>注意：</strong>如果您配置了代理，请确保浏览器使用相同的代理访问授权页面。',
        step3EnterCode: '输入授权码',
        authCodeDesc: '授权完成后，页面会显示一个 <strong>授权码</strong>。复制并粘贴到下方：',
        authCode: '授权码',
        authCodePlaceholder: '粘贴 Claude 页面的授权码...',
        authCodeHint: '粘贴从 Claude 页面复制的授权码',
        completeAuth: '完成授权',
        verifying: '验证中...',
        pleaseEnterSessionKey: '请输入至少一个有效的 sessionKey',
        authFailed: '授权失败',
        cookieAuthFailed: 'Cookie 授权失败',
        keyAuthFailed: '密钥 {index}: {error}',
        successCreated: '成功创建 {count} 个账号',
        // OpenAI specific
        openai: {
          title: 'OpenAI 账户授权',
          followSteps: '请按照以下步骤完成 OpenAI 账户的授权：',
          step1GenerateUrl: '点击下方按钮生成授权链接',
          generateAuthUrl: '生成授权链接',
          step2OpenUrl: '在浏览器中打开链接并完成授权',
          openUrlDesc: '请在新标签页中打开授权链接，登录您的 OpenAI 账户并授权。',
          importantNotice:
            '<strong>重要提示：</strong>授权后页面可能会加载较长时间，请耐心等待。当浏览器地址栏变为 <code>http://localhost...</code> 开头时，表示授权已完成。',
          step3EnterCode: '输入授权链接或 Code',
          authCodeDesc:
            '授权完成后，当页面地址变为 <code>http://localhost:xxx/auth/callback?code=...</code> 时：',
          authCode: '授权链接或 Code',
          authCodePlaceholder:
            '方式1：复制完整的链接\n(http://localhost:xxx/auth/callback?code=...)\n方式2：仅复制 code 参数的值',
          authCodeHint: '您可以直接复制整个链接或仅复制 code 参数值，系统会自动识别'
        },
        // Gemini specific
	        gemini: {
	          title: 'Gemini 账户授权',
	          followSteps: '请按照以下步骤完成 Gemini 账户的授权：',
	          step1GenerateUrl: '生成授权链接',
	          generateAuthUrl: '生成授权链接',
	          projectIdLabel: 'Project ID（可选）',
	          projectIdPlaceholder: '例如：my-gcp-project 或 cloud-ai-companion-xxxxx',
	          projectIdHint: '留空则在兑换授权码后自动探测；若自动探测失败，可填写后重新生成授权链接再授权。',
	          howToGetProjectId: '如何获取',
	          step2OpenUrl: '在浏览器中打开链接并完成授权',
	          openUrlDesc: '请在新标签页中打开授权链接，登录您的 Google 账户并授权。',
	          step3EnterCode: '输入回调链接或 Code',
	          authCodeDesc: '授权完成后，复制浏览器跳转后的回调链接（推荐）或仅复制 <code>code</code>，粘贴到下方即可。',
	          authCode: '回调链接或 Code',
	          authCodePlaceholder: '方式1（推荐）：粘贴回调链接\n方式2：仅粘贴 code 参数的值',
	          authCodeHint: '系统会自动从链接中解析 code/state。',
          redirectUri: 'Redirect URI',
          redirectUriHint: '需要在 Google OAuth Client 中配置，且必须与此处完全一致。',
          confirmRedirectUri: '我已在 Google OAuth Client 中配置了该 Redirect URI（必须完全一致）',
          invalidRedirectUri: 'Redirect URI 必须是合法的 http(s) URL',
	          redirectUriNotConfirmed: '请确认 Redirect URI 已在 Google OAuth Client 中正确配置',
	          missingRedirectUri: '缺少 Redirect URI',
	          failedToGenerateUrl: '生成 Gemini 授权链接失败',
	          missingExchangeParams: '缺少 code / session_id / state',
	          failedToExchangeCode: 'Gemini 授权码兑换失败',
	          modelPassthrough: 'Gemini 直接转发模型',
	          modelPassthroughDesc: '所有模型请求将直接转发至 Gemini API，不进行模型限制或映射。',
	          stateWarningTitle: '提示',
	          stateWarningDesc: '建议粘贴完整回调链接（包含 code 和 state）。',
	          oauthTypeLabel: 'OAuth 类型',
          needsProjectId: '内置授权（Code Assist）',
          needsProjectIdDesc: '需要 GCP 项目与 Project ID',
          noProjectIdNeeded: '自定义授权（AI Studio）',
          noProjectIdNeededDesc: '需管理员配置 OAuth Client',
	          aiStudioNotConfiguredShort: '未配置',
	          aiStudioNotConfiguredTip: 'AI Studio OAuth 未配置：请先设置 GEMINI_OAUTH_CLIENT_ID / GEMINI_OAUTH_CLIENT_SECRET，并在 Google OAuth Client 添加 Redirect URI：http://localhost:1455/auth/callback（Consent Screen scopes 需包含 https://www.googleapis.com/auth/generative-language.retriever）',
	          aiStudioNotConfigured: 'AI Studio OAuth 未配置：请先设置 GEMINI_OAUTH_CLIENT_ID / GEMINI_OAUTH_CLIENT_SECRET，并在 Google OAuth Client 添加 Redirect URI：http://localhost:1455/auth/callback'
	        },
        // Antigravity specific
        antigravity: {
          title: 'Antigravity 账户授权',
          followSteps: '请按照以下步骤完成 Antigravity 账户的授权：',
          step1GenerateUrl: '生成授权链接',
          generateAuthUrl: '生成授权链接',
          step2OpenUrl: '在浏览器中打开链接并完成授权',
          openUrlDesc: '请在新标签页中打开授权链接，登录您的 Google 账户并授权。',
          importantNotice:
            '<strong>重要提示：</strong>授权后页面可能会加载较长时间，请耐心等待。当浏览器地址栏变为 <code>http://localhost...</code> 开头时，表示授权已完成。',
          step3EnterCode: '输入授权链接或 Code',
          authCodeDesc:
            '授权完成后，当页面地址变为 <code>http://localhost:xxx/auth/callback?code=...</code> 时：',
          authCode: '授权链接或 Code',
          authCodePlaceholder:
            '方式1：复制完整的链接\n(http://localhost:xxx/auth/callback?code=...)\n方式2：仅复制 code 参数的值',
          authCodeHint: '您可以直接复制整个链接或仅复制 code 参数值，系统会自动识别',
          failedToGenerateUrl: '生成 Antigravity 授权链接失败',
          missingExchangeParams: '缺少 code / session_id / state',
          failedToExchangeCode: 'Antigravity 授权码兑换失败'
        }
	      },
      // Gemini specific (platform-wide)
      gemini: {
        modelPassthrough: 'Gemini 直接转发模型',
        modelPassthroughDesc: '所有模型请求将直接转发至 Gemini API，不进行模型限制或映射。',
        baseUrlHint: '留空使用官方 Gemini API',
        apiKeyHint: '您的 Gemini API Key（以 AIza 开头）',
        accountType: {
          oauthTitle: 'OAuth 授权（Gemini）',
          oauthDesc: '使用 Google 账号授权，并选择 OAuth 子类型。',
          apiKeyTitle: 'API 密钥（AI Studio）',
          apiKeyDesc: '最快接入方式，使用 AIza API Key。',
          apiKeyNote: '适合轻量测试。免费层限流严格，数据可能用于训练。',
          apiKeyLink: '获取 API Key',
          quotaLink: '配额说明'
        },
        oauthType: {
          builtInTitle: '内置授权（Gemini CLI / Code Assist）',
          builtInDesc: '使用 Google 内置客户端 ID，无需管理员配置。',
          builtInRequirement: '需要 GCP 项目并填写 Project ID。',
          gcpProjectLink: '创建项目',
          customTitle: '自定义授权（AI Studio OAuth）',
          customDesc: '使用管理员预设的 OAuth 客户端，适合组织管理。',
          customRequirement: '需管理员配置 Client ID 并加入测试用户白名单。',
          badges: {
            recommended: '推荐',
            highConcurrency: '高并发',
            noAdmin: '无需管理员配置',
            orgManaged: '组织管理',
            adminRequired: '需要管理员'
          }
        },
        setupGuide: {
          title: 'Gemini 使用准备',
          checklistTitle: '准备工作',
          checklistItems: {
            usIp: '使用美国 IP，并确保账号归属地为美国。',
            age: '账号需满 18 岁。'
          },
          activationTitle: '服务激活',
          activationItems: {
            geminiWeb: '激活 Gemini Web，避免 User not initialized。',
            gcpProject: '激活 GCP 项目，获取 Code Assist 所需 Project ID。'
          },
          links: {
            countryCheck: '检查归属地',
            geminiWebActivation: '激活 Gemini Web',
            gcpProject: '打开 GCP 控制台'
          }
        },
        quotaPolicy: {
          title: 'Gemini 配额与限流政策（参考）',
          note: '注意：Gemini 官方未提供用量查询接口。此处显示的“每日配额”是由系统根据账号等级模拟计算的估算值，仅供调度参考，请以 Google 官方实际报错为准。',
          columns: {
            channel: '授权通道',
            account: '账号状态',
            limits: '限流政策',
            docs: '官方文档'
          },
          docs: {
            codeAssist: 'Code Assist 配额',
            aiStudio: 'AI Studio 定价',
            vertex: 'Vertex AI 配额'
          },
          simulatedNote: '本地模拟配额，仅供参考',
          rows: {
            cli: {
              channel: 'Gemini CLI（官方 Google 登录 / Code Assist）',
              free: '免费 Google 账号',
              premium: 'Google One AI Premium',
              limitsFree: 'RPD ~1000；RPM ~60（软限制）',
              limitsPremium: 'RPD ~1500+；RPM ~60+（优先队列）'
            },
            gcloud: {
              channel: 'GCP Code Assist（gcloud 登录）',
              account: '未购买 Code Assist 订阅',
              limits: 'RPD ~1000；RPM ~60（预览期）'
            },
            aiStudio: {
              channel: 'AI Studio API Key / OAuth',
              free: '未绑卡（免费层）',
              paid: '已绑卡（按量付费）',
              limitsFree: 'RPD 50；RPM 2（Pro）/ 15（Flash）',
              limitsPaid: 'RPD 不限；RPM 1000+（按模型配额）'
            },
            customOAuth: {
              channel: 'Custom OAuth Client（GCP）',
              free: '项目未绑卡',
              paid: '项目已绑卡',
              limitsFree: 'RPD 50；RPM 2（项目配额）',
              limitsPaid: 'RPD 不限；RPM 1000+（项目配额）'
            }
          }
        },
        rateLimit: {
          ok: '未限流',
          limited: '限流 {time}',
          now: '现在'
        }
      },
      // Re-Auth Modal
      reAuthorizeAccount: '重新授权账号',
      claudeCodeAccount: 'Claude Code 账号',
      openaiAccount: 'OpenAI 账号',
      geminiAccount: 'Gemini 账号',
      antigravityAccount: 'Antigravity 账号',
      inputMethod: '输入方式',
      reAuthorizedSuccess: '账号重新授权成功',
      // Test Modal
      testAccountConnection: '测试账号连接',
      account: '账号',
      readyToTest: '准备测试。点击"开始测试"按钮开始...',
      connectingToApi: '连接 API 中...',
      testCompleted: '测试完成！',
      connectedToApi: '已连接到 API',
      usingModel: '使用模型：{model}',
      sendingTestMessage: '发送测试消息："hi"',
      response: '响应：',
      startTest: '开始测试',
      retry: '重试',
      copyOutput: '复制输出',
      startingTestForAccount: '开始测试账号：{name}',
      testAccountTypeLabel: '账号类型：{type}',
	      selectTestModel: '选择测试模型',
	      testModel: '测试模型',
	      testPrompt: '提示词："hi"',
      // Stats Modal
      viewStats: '查看统计',
      usageStatistics: '使用统计',
      last30DaysUsage: '近30天使用统计（日均基于实际使用天数）',
      stats: {
        totalCost: '30天总费用',
        accumulatedCost: '累计成本',
        standardCost: '标准计费',
        totalRequests: '30天总请求',
        totalCalls: '累计调用次数',
        avgDailyCost: '日均费用',
        basedOnActualDays: '基于 {days} 天实际使用',
        avgDailyRequests: '日均请求',
        avgDailyUsage: '平均每日调用',
        todayOverview: '今日概览',
        cost: '费用',
        requests: '请求',
        tokens: 'Token',
        highestCostDay: '最高费用日',
        highestRequestDay: '最高请求日',
        date: '日期',
        accumulatedTokens: '累计 Token',
        totalTokens: '30天总计',
        dailyAvgTokens: '日均 Token',
        performance: '性能',
        avgResponseTime: '平均响应',
        daysActive: '活跃天数',
        recentActivity: '最近统计',
        todayRequests: '今日请求',
        todayTokens: '今日 Token',
        todayCost: '今日费用',
        usageTrend: '30天费用与请求趋势',
        noData: '该账号暂无使用数据'
      }
    },

    // Proxies Management
    proxies: {
      title: 'IP管理',
      description: '管理代理服务器配置',
      createProxy: '添加代理',
      editProxy: '编辑代理',
      deleteProxy: '删除代理',
      deleteConfirmMessage: "确定要删除代理 '{name}' 吗？",
      testProxy: '测试代理',
      columns: {
        name: '名称',
        protocol: '协议',
        address: '地址',
        priority: '优先级',
        status: '状态',
        lastCheck: '最近检测',
        actions: '操作'
      },
      protocols: {
        http: 'HTTP',
        https: 'HTTPS',
        socks5: 'SOCKS5'
      },
      statuses: {
        active: '正常',
        inactive: '停用',
        error: '错误'
      },
      form: {
        nameLabel: '名称',
        namePlaceholder: '请输入代理名称',
        protocolLabel: '协议',
        selectProtocol: '选择协议',
        hostLabel: '主机',
        hostPlaceholder: '请输入主机地址',
        portLabel: '端口',
        portPlaceholder: '请输入端口',
        usernameLabel: '用户名（可选）',
        usernamePlaceholder: '请输入用户名',
        passwordLabel: '密码（可选）',
        passwordPlaceholder: '请输入密码',
        priorityLabel: '优先级',
        statusLabel: '状态'
      },
      filters: {
        protocol: '协议',
        allProtocols: '全部协议',
        status: '状态',
        allStatuses: '全部状态'
      },
      // Additional keys used in ProxiesView
      allProtocols: '全部协议',
      allStatus: '全部状态',
      searchProxies: '搜索代理...',
      name: '名称',
      protocol: '协议',
      host: '主机',
      port: '端口',
      username: '用户名（可选）',
      password: '密码（可选）',
      status: '状态',
      enterProxyName: '请输入代理名称',
      optionalAuth: '可选认证信息',
      leaveEmptyToKeep: '留空保持不变',
      noProxiesYet: '暂无代理',
      createFirstProxy: '添加您的第一个代理以开始使用。',
      testConnection: '测试连接',
      batchTest: '批量测试',
      testFailed: '失败',
      // Batch import
      standardAdd: '标准添加',
      batchAdd: '快捷添加',
      batchInput: '代理列表',
      batchInputPlaceholder:
        "每行输入一个代理，支持以下格式：\nsocks5://user:pass{'@'}192.168.1.1:1080\nhttp://192.168.1.1:8080\nhttps://user:pass{'@'}proxy.example.com:443",
      batchInputHint: "支持 http、https、socks5 协议，格式：协议://[用户名:密码{'@'}]主机:端口",
      parsedCount: '有效 {count} 个',
      invalidCount: '无效 {count} 个',
      duplicateCount: '重复 {count} 个',
      importing: '导入中...',
      importProxies: '导入 {count} 个代理',
      batchImportSuccess: '成功导入 {created} 个代理，跳过 {skipped} 个重复',
      batchImportAllSkipped: '全部 {skipped} 个代理已存在，跳过导入',
      failedToImport: '批量导入失败',
      // Other messages
      saving: '保存中...',
      testing: '测试中...',
      creating: '创建中...',
      updating: '更新中...',
      noProxies: '暂无代理',
      noProxiesDescription: '添加代理服务器以增强 API 访问稳定性。',
      proxyCreated: '代理添加成功',
      proxyUpdated: '代理更新成功',
      proxyDeleted: '代理删除成功',
      proxyWorking: '代理连接正常',
      proxyWorkingWithLatency: '代理连接正常，延迟 {latency}ms',
      proxyTestFailed: '代理测试失败',
      proxyCreatedSuccess: '代理添加成功',
      proxyUpdatedSuccess: '代理更新成功',
      proxyDeletedSuccess: '代理删除成功',
      testSuccess: '代理测试通过',
      failedToLoad: '加载代理列表失败',
      failedToSave: '保存代理失败',
      failedToDelete: '删除代理失败',
      failedToCreate: '创建代理失败',
      failedToUpdate: '更新代理失败',
      failedToTest: '测试代理失败',
      deleteConfirm: "确定要删除代理 '{name}' 吗？使用此代理的账号将被移除代理设置。"
    },

    // Redeem Codes Management
    redeem: {
      title: '兑换码管理',
      description: '生成和管理兑换码',
      generateCodes: '生成兑换码',
      columns: {
        code: '兑换码',
        type: '类型',
        value: '面值',
        status: '状态',
        usedBy: '使用者',
        usedAt: '使用时间',
        createdAt: '创建时间',
        actions: '操作'
      },
      types: {
        balance: '余额',
        concurrency: '并发数',
        subscription: '订阅'
      },
      // 用于选择器和筛选器的直接键
      balance: '余额',
      concurrency: '并发数',
      subscription: '订阅',
      allTypes: '全部类型',
      allStatus: '全部状态',
      unused: '未使用',
      used: '已使用',
      searchCodes: '搜索兑换码...',
      exportCsv: '导出 CSV',
      deleteAllUnused: '删除全部未使用',
      deleteCodeConfirm: '确定要删除此兑换码吗？此操作无法撤销。',
      deleteAllUnusedConfirm: '确定要删除全部未使用的兑换码吗？此操作无法撤销。',
      deleteAll: '全部删除',
      generateCodesTitle: '生成兑换码',
      generatedSuccessfully: '生成成功',
      codesCreated: '已创建 {count} 个兑换码',
      codeType: '类型',
      amount: '金额 ($)',
      value: '面值',
      count: '数量',
      generate: '生成',
      copyAll: '全部复制',
      download: '下载',
      codesExported: '兑换码导出成功',
      codeDeleted: '兑换码删除成功',
      codesDeleted: '成功删除 {count} 个未使用的兑换码',
      noUnusedCodes: '没有未使用的兑换码可删除',
      userPrefix: '用户 #{id}',
      failedToExport: '导出兑换码失败',
      failedToDeleteUnused: '删除未使用的兑换码失败',
      failedToCopy: '复制失败',
      selectGroup: '选择分组',
      selectGroupPlaceholder: '选择订阅分组',
      validityDays: '有效天数',
      groupRequired: '请选择订阅分组',
      days: '天',
      statuses: {
        unused: '未使用',
        used: '已使用',
        expired: '已过期',
        disabled: '已禁用'
      },
      form: {
        typeLabel: '类型',
        selectType: '选择类型',
        valueLabel: '面值',
        valuePlaceholder: '请输入面值',
        balanceHint: '余额金额（美元）',
        concurrencyHint: '并发数增量',
        countLabel: '数量',
        countPlaceholder: '请输入数量',
        countHint: '要生成的兑换码数量',
        prefixLabel: '前缀（可选）',
        prefixPlaceholder: '例如：GIFT',
        expiresLabel: '过期时间（可选）'
      },
      filters: {
        type: '类型',
        allTypes: '全部类型',
        status: '状态',
        allStatuses: '全部状态',
        search: '搜索兑换码'
      },
      generating: '生成中...',
      copyCode: '复制',
      copied: '已复制！',
      disableCode: '禁用',
      enableCode: '启用',
      deleteCode: '删除',
      deleteConfirmMessage: '确定要删除此兑换码吗？',
      noCodes: '暂无兑换码',
      noCodesDescription: '生成兑换码以向用户分发余额或并发数。',
      codesGeneratedSuccess: '兑换码生成成功，共 {count} 个',
      codeDisabledSuccess: '兑换码已禁用',
      codeEnabledSuccess: '兑换码已启用',
      codeDeletedSuccess: '兑换码删除成功',
      failedToLoad: '加载兑换码列表失败',
      failedToGenerate: '生成兑换码失败',
      failedToUpdate: '更新兑换码失败',
      failedToDelete: '删除兑换码失败'
    },

    // Usage Records
    usage: {
      title: '使用记录',
      description: '查看和管理所有用户的使用记录',
      userFilter: '用户',
      searchUserPlaceholder: '按邮箱搜索用户...',
      selectedUser: '已选择',
      user: '用户',
      account: '账户',
      group: '分组',
      requestId: '请求ID',
      requestIdCopied: '请求ID已复制',
      allModels: '全部模型',
      allAccounts: '全部账户',
      allGroups: '全部分组',
      allTypes: '全部类型',
      allBillingTypes: '全部计费',
      inputCost: '输入成本',
      outputCost: '输出成本',
      cacheCreationCost: '缓存创建成本',
      cacheReadCost: '缓存读取成本',
      inputTokens: '输入 Token',
      outputTokens: '输出 Token',
      cacheCreationTokens: '缓存创建 Token',
      cacheReadTokens: '缓存读取 Token',
      failedToLoad: '加载使用记录失败'
    },

    // Settings
    settings: {
      title: '系统设置',
      description: '管理注册、邮箱验证、默认值和 SMTP 设置',
      registration: {
        title: '注册设置',
        description: '控制用户注册和验证',
        enableRegistration: '开放注册',
        enableRegistrationHint: '允许新用户注册',
        emailVerification: '邮箱验证',
        emailVerificationHint: '新用户注册时需要验证邮箱'
      },
      turnstile: {
        title: 'Cloudflare Turnstile',
        description: '登录和注册的机器人防护',
        enableTurnstile: '启用 Turnstile',
        enableTurnstileHint: '需要 Cloudflare Turnstile 验证',
        siteKey: '站点密钥',
        secretKey: '私密密钥',
        siteKeyHint: '从 Cloudflare Dashboard 获取',
        secretKeyHint: '服务端验证密钥（请保密）'
      },
      defaults: {
        title: '用户默认设置',
        description: '新用户的默认值',
        defaultBalance: '默认余额',
        defaultBalanceHint: '新用户的初始余额',
        defaultConcurrency: '默认并发数',
        defaultConcurrencyHint: '新用户的最大并发请求数'
      },
      site: {
        title: '站点设置',
        description: '自定义站点品牌',
        siteName: '站点名称',
        siteNameHint: '显示在邮件和页面标题中',
        siteNamePlaceholder: 'Sub2API',
        siteSubtitle: '站点副标题',
        siteSubtitleHint: '显示在登录和注册页面',
        siteSubtitlePlaceholder: '订阅转 API 转换平台',
        apiBaseUrl: 'API 端点地址',
        apiBaseUrlHint: '用于"使用密钥"和"导入到 CC Switch"功能，留空则使用当前站点地址',
        apiBaseUrlPlaceholder: 'https://api.example.com',
        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: '读取图片文件失败'
      },
      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: '留空以保留现有密码',
        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: '请输入收件人邮箱地址'
      },
      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>'
      },
      saveSettings: '保存设置',
      saving: '保存中...',
      settingsSaved: '设置保存成功',
      smtpConnectionSuccess: 'SMTP 连接成功',
      testEmailSent: '测试邮件发送成功',
      failedToLoad: '加载设置失败',
      failedToSave: '保存设置失败',
      failedToTestSmtp: 'SMTP 连接测试失败',
      failedToSendTestEmail: '发送测试邮件失败'
    }
  },

  // Subscription Progress (Header component)
  subscriptionProgress: {
    title: '我的订阅',
    viewDetails: '查看订阅详情',
    activeCount: '{count} 个有效订阅',
    daily: '每日',
    weekly: '每周',
    monthly: '每月',
    daysRemaining: '剩余 {days} 天',
    expired: '已过期',
    expiresToday: '今天到期',
    expiresTomorrow: '明天到期',
    viewAll: '查看全部订阅',
    noSubscriptions: '暂无有效订阅',
    unlimited: '无限制'
  },

  // Version Badge
  version: {
    currentVersion: '当前版本',
    latestVersion: '最新版本',
    upToDate: '已是最新版本',
    updateAvailable: '有新版本可用！',
    releaseNotes: '更新日志',
    noReleaseNotes: '暂无更新日志',
    viewUpdate: '查看更新',
    viewRelease: '查看发布',
    viewChangelog: '查看更新日志',
    refresh: '刷新',
    sourceMode: '源码构建',
    sourceModeHint: '源码构建请使用 git pull 更新',
    updateNow: '立即更新',
    updating: '正在更新...',
    updateComplete: '更新完成',
    updateFailed: '更新失败',
    restartRequired: '请重启服务以应用更新',
    restartNow: '立即重启',
    restarting: '正在重启...',
    retry: '重试'
  },

  // User Subscriptions Page
  userSubscriptions: {
    title: '我的订阅',
    description: '查看您的订阅计划和用量',
    noActiveSubscriptions: '暂无有效订阅',
    noActiveSubscriptionsDesc: '您没有任何有效订阅。请联系管理员获取订阅。',
    status: {
      active: '有效',
      expired: '已过期',
      revoked: '已撤销'
    },
    usage: '用量',
    expires: '到期时间',
    noExpiration: '无到期时间',
    unlimited: '无限制',
    unlimitedDesc: '该订阅无用量限制',
    daily: '每日',
    weekly: '每周',
    monthly: '每月',
    daysRemaining: '剩余 {days} 天',
    expiresOn: '{date} 到期',
    resetIn: '{time} 后重置',
    windowNotActive: '等待首次使用',
    usageOf: '已用 {used} / {limit}'
  },

  // Onboarding Tour
  onboarding: {
    restartTour: '重新查看新手引导',
    dontShowAgain: '不再提示',
    dontShowAgainTitle: '永久关闭新手引导',
    confirmDontShow: '确定不再显示新手引导吗？\n\n您可以随时在右上角头像菜单中重新开启。',
    confirmExit: '确定要退出新手引导吗？您可以随时在右上角菜单重新开始。',
    interactiveHint: '按 Enter 或点击继续',
    navigation: {
      flipPage: '翻页',
      exit: '退出'
    },
    // Admin tour steps
    admin: {
      welcome: {
        title: '👋 欢迎使用 Sub2API',
        description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">Sub2API 是一个强大的 AI 服务中转平台，让您轻松管理和分发 AI 服务。</p><p style="margin-bottom: 12px;"><b>🎯 核心功能：</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>📦 <b>分组管理</b> - 创建不同的服务套餐（VIP、免费试用等）</li><li>🔗 <b>账号池</b> - 连接多个上游 AI 服务商账号</li><li>🔑 <b>密钥分发</b> - 为用户生成独立的 API Key</li><li>💰 <b>计费管理</b> - 灵活的费率和配额控制</li></ul><p style="color: #10b981; font-weight: 600;">接下来，我们将用 3 分钟带您完成首次配置 →</p></div>',
        nextBtn: '开始配置 🚀',
        prevBtn: '跳过'
      },
      groupManage: {
        title: '📦 第一步：分组管理',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>什么是分组？</b></p><p style="margin-bottom: 12px;">分组是 Sub2API 的核心概念，它就像一个"服务套餐"：</p><ul style="margin-left: 20px; margin-bottom: 12px; font-size: 13px;"><li>🎯 每个分组可以包含多个上游账号</li><li>💰 每个分组有独立的计费倍率</li><li>👥 可以设置为公开或专属分组</li></ul><p style="margin-top: 12px; padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 示例：</b>您可以创建"VIP专线"（高倍率）和"免费试用"（低倍率）两个分组</p><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 点击左侧的"分组管理"开始</p></div>'
      },
      createGroup: {
        title: '➕ 创建新分组',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">现在让我们创建第一个分组。</p><p style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📝 提示：</b>建议先创建一个测试分组，熟悉流程后再创建正式分组</p><p style="color: #10b981; font-weight: 600;">👉 点击"创建分组"按钮</p></div>'
      },
      groupName: {
        title: '✏️ 1. 分组名称',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">为您的分组起一个易于识别的名称。</p><div style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>💡 命名建议：</b><ul style="margin: 8px 0 0 16px;"><li>"测试分组" - 用于测试</li><li>"VIP专线" - 高质量服务</li><li>"免费试用" - 体验版</li></ul></div><p style="font-size: 13px; color: #6b7280;">填写完成后点击"下一步"继续</p></div>',
        nextBtn: '下一步'
      },
      groupPlatform: {
        title: '🤖 2. 选择平台',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">选择该分组支持的 AI 平台。</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📌 平台说明：</b><ul style="margin: 8px 0 0 16px;"><li><b>Anthropic</b> - Claude 系列模型</li><li><b>OpenAI</b> - GPT 系列模型</li><li><b>Google</b> - Gemini 系列模型</li></ul></div><p style="font-size: 13px; color: #6b7280;">一个分组只能选择一个平台</p></div>',
        nextBtn: '下一步'
      },
      groupMultiplier: {
        title: '💰 3. 费率倍数',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">设置该分组的计费倍率，控制用户的实际扣费。</p><div style="padding: 8px 12px; background: #fef3c7; border-left: 3px solid #f59e0b; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚙️ 计费规则：</b><ul style="margin: 8px 0 0 16px;"><li><b>1.0</b> - 原价计费（成本价）</li><li><b>1.5</b> - 用户消耗 $1，扣除 $1.5</li><li><b>2.0</b> - 用户消耗 $1，扣除 $2</li><li><b>0.8</b> - 补贴模式（亏本运营）</li></ul></div><p style="font-size: 13px; color: #6b7280;">建议测试分组设置为 1.0</p></div>',
        nextBtn: '下一步'
      },
      groupExclusive: {
        title: '🔒 4. 专属分组（可选）',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">控制分组的可见性和访问权限。</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>🔐 权限说明：</b><ul style="margin: 8px 0 0 16px;"><li><b>关闭</b> - 公开分组，所有用户可见</li><li><b>开启</b> - 专属分组，仅指定用户可见</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 使用场景：</b>VIP 用户专属、内部测试、特殊客户等</p></div>',
        nextBtn: '下一步'
      },
      groupSubmit: {
        title: '✅ 保存分组',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">确认信息无误后，点击创建按钮保存分组。</p><p style="padding: 8px 12px; background: #fef3c7; border-left: 3px solid #f59e0b; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚠️ 注意：</b>分组创建后，平台类型不可修改，其他信息可以随时编辑</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>📌 下一步：</b>创建成功后，我们将添加上游账号到这个分组</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 点击"创建"按钮</p></div>'
      },
      accountManage: {
        title: '🔗 第二步：添加账号',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>太棒了！分组已创建成功 🎉</b></p><p style="margin-bottom: 12px;">现在需要添加上游 AI 服务商的账号，让分组能够实际提供服务。</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>🔑 账号的作用：</b><ul style="margin: 8px 0 0 16px;"><li>连接到上游 AI 服务（Claude、GPT 等）</li><li>一个分组可以包含多个账号（负载均衡）</li><li>支持 OAuth 和 Session Key 两种方式</li></ul></div><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 点击左侧的"账号管理"</p></div>'
      },
      createAccount: {
        title: '➕ 添加新账号',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">点击按钮开始添加您的第一个上游账号。</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 提示：</b>建议使用 OAuth 方式，更安全且无需手动提取密钥</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 点击"添加账号"按钮</p></div>'
      },
      accountName: {
        title: '✏️ 1. 账号名称',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">为账号设置一个便于识别的名称。</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 命名建议：</b>"Claude主账号"、"GPT备用1"、"测试账号" 等</p></div>',
        nextBtn: '下一步'
      },
      accountPlatform: {
        title: '🤖 2. 选择平台',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">选择该账号对应的服务商平台。</p><p style="padding: 8px 12px; background: #fef3c7; border-left: 3px solid #f59e0b; border-radius: 4px; font-size: 13px;"><b>⚠️ 重要：</b>平台必须与刚才创建的分组平台一致</p></div>',
        nextBtn: '下一步'
      },
      accountType: {
        title: '🔐 3. 授权方式',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">选择账号的授权方式。</p><div style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>✅ 推荐：OAuth 方式</b><ul style="margin: 8px 0 0 16px;"><li>无需手动提取密钥</li><li>更安全，支持自动刷新</li><li>适用于 Claude Code、ChatGPT OAuth</li></ul></div><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px;"><b>📌 Session Key 方式</b><ul style="margin: 8px 0 0 16px;"><li>需要手动从浏览器提取</li><li>可能需要定期更新</li><li>适用于不支持 OAuth 的平台</li></ul></div></div>',
        nextBtn: '下一步'
      },
      accountPriority: {
        title: '⚖️ 4. 优先级（可选）',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">设置账号的调用优先级。</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📊 优先级规则：</b><ul style="margin: 8px 0 0 16px;"><li>数字越大，优先级越高</li><li>系统优先使用高优先级账号</li><li>相同优先级则随机选择</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 使用场景：</b>主账号设置高优先级，备用账号设置低优先级</p></div>',
        nextBtn: '下一步'
      },
      accountGroups: {
        title: '🎯 5. 分配分组',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>关键步骤！</b>将账号分配到刚才创建的分组。</p><div style="padding: 8px 12px; background: #fee2e2; border-left: 3px solid #ef4444; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚠️ 重要提醒：</b><ul style="margin: 8px 0 0 16px;"><li>必须勾选至少一个分组</li><li>未分配分组的账号无法使用</li><li>一个账号可以分配给多个分组</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 提示：</b>请勾选刚才创建的测试分组</p></div>',
        nextBtn: '下一步'
      },
      accountSubmit: {
        title: '✅ 保存账号',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">确认信息无误后，点击保存按钮。</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📌 OAuth 授权流程：</b><ul style="margin: 8px 0 0 16px;"><li>点击保存后会跳转到服务商页面</li><li>在服务商页面完成登录授权</li><li>授权成功后自动返回</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>📌 下一步：</b>账号添加成功后，我们将创建 API 密钥</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 点击"保存"按钮</p></div>'
      },
      keyManage: {
        title: '🔑 第三步：生成密钥',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>恭喜！账号配置完成 🎉</b></p><p style="margin-bottom: 12px;">最后一步，生成 API Key 来测试服务是否正常工作。</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>🔑 API Key 的作用：</b><ul style="margin: 8px 0 0 16px;"><li>用于调用 AI 服务的凭证</li><li>每个 Key 绑定一个分组</li><li>可以设置配额和有效期</li><li>支持独立的使用统计</li></ul></div><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 点击左侧的"API 密钥"</p></div>'
      },
      createKey: {
        title: '➕ 创建密钥',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">点击按钮创建您的第一个 API Key。</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 提示：</b>创建后请立即复制保存，密钥只显示一次</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 点击"创建密钥"按钮</p></div>'
      },
      keyName: {
        title: '✏️ 1. 密钥名称',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">为密钥设置一个便于管理的名称。</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 命名建议：</b>"测试密钥"、"生产环境"、"移动端" 等</p></div>',
        nextBtn: '下一步'
      },
      keyGroup: {
        title: '🎯 2. 选择分组',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">选择刚才配置好的分组。</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📌 分组决定：</b><ul style="margin: 8px 0 0 16px;"><li>该密钥可以使用哪些账号</li><li>计费倍率是多少</li><li>是否为专属密钥</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 提示：</b>选择刚才创建的测试分组</p></div>',
        nextBtn: '下一步'
      },
      keySubmit: {
        title: '🎉 生成并复制',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">点击创建后，系统会生成完整的 API Key。</p><div style="padding: 8px 12px; background: #fee2e2; border-left: 3px solid #ef4444; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚠️ 重要提醒：</b><ul style="margin: 8px 0 0 16px;"><li>密钥只显示一次，请立即复制</li><li>丢失后需要重新生成</li><li>妥善保管，不要泄露给他人</li></ul></div><div style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>🚀 下一步：</b><ul style="margin: 8px 0 0 16px;"><li>复制生成的 sk-xxx 密钥</li><li>在支持 OpenAI 接口的客户端中使用</li><li>开始体验 AI 服务！</li></ul></div><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 点击"创建"按钮</p></div>'
      }
    },
    // User tour steps
    user: {
      welcome: {
        title: '👋 欢迎使用 Sub2API',
        description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">您好！欢迎来到 Sub2API AI 服务平台。</p><p style="margin-bottom: 12px;"><b>🎯 快速开始：</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>🔑 创建 API 密钥</li><li>📋 复制密钥到您的应用</li><li>🚀 开始使用 AI 服务</li></ul><p style="color: #10b981; font-weight: 600;">只需 1 分钟，让我们开始吧 →</p></div>',
        nextBtn: '开始 🚀',
        prevBtn: '跳过'
      },
      keyManage: {
        title: '🔑 API 密钥管理',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">在这里管理您的所有 API 访问密钥。</p><p style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px;"><b>📌 什么是 API 密钥？</b><br/>API 密钥是您访问 AI 服务的凭证，就像一把钥匙，让您的应用能够调用 AI 能力。</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 点击进入密钥页面</p></div>'
      },
      createKey: {
        title: '➕ 创建新密钥',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">点击按钮创建您的第一个 API 密钥。</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 提示：</b>创建后密钥只显示一次，请务必复制保存</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 点击"创建密钥"</p></div>'
      },
      keyName: {
        title: '✏️ 密钥名称',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">为密钥起一个便于识别的名称。</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 示例：</b>"我的第一个密钥"、"测试用" 等</p></div>',
        nextBtn: '下一步'
      },
      keyGroup: {
        title: '🎯 选择分组',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">选择管理员为您分配的服务分组。</p><p style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px;"><b>📌 分组说明：</b><br/>不同分组可能有不同的服务质量和计费标准，请根据需要选择。</p></div>',
        nextBtn: '下一步'
      },
      keySubmit: {
        title: '🎉 完成创建',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">点击确认创建您的 API 密钥。</p><div style="padding: 8px 12px; background: #fee2e2; border-left: 3px solid #ef4444; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚠️ 重要：</b><ul style="margin: 8px 0 0 16px;"><li>创建后请立即复制密钥（sk-xxx）</li><li>密钥只显示一次，丢失需重新生成</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>🚀 如何使用：</b><br/>将密钥配置到支持 OpenAI 接口的任何客户端（如 ChatBox、OpenCat 等），即可开始使用！</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 点击"创建"按钮</p></div>'
      }
    }
  }
}
