export default {

  // Subscription Progress (Header component)
  subscriptionProgress: {
    title: 'My Subscriptions',
    viewDetails: 'View subscription details',
    activeCount: '{count} active subscription(s)',
    daily: 'Daily',
    weekly: 'Weekly',
    monthly: 'Monthly',
    daysRemaining: '{days} days left',
    expired: 'Expired',
    expiresToday: 'Expires today',
    expiresTomorrow: 'Expires tomorrow',
    viewAll: 'View all subscriptions',
    noSubscriptions: 'No active subscriptions',
    unlimited: 'Unlimited'
  },

  // Version Badge
  version: {
    currentVersion: 'Current Version',
    latestVersion: 'Latest Version',
    upToDate: "You're running the latest version.",
    updateAvailable: 'A new version is available!',
    releaseNotes: 'Release Notes',
    noReleaseNotes: 'No release notes',
    viewUpdate: 'View Update',
    viewRelease: 'View Release',
    viewChangelog: 'View Changelog',
    refresh: 'Refresh',
    sourceMode: 'Source Build',
    sourceModeHint: 'Source build, use git pull to update',
    updateNow: 'Update Now',
    updating: 'Updating...',
    updateComplete: 'Update Complete',
    updateFailed: 'Update Failed',
    restartRequired: 'Please restart the service to apply the update',
    restartNow: 'Restart Now',
    restarting: 'Restarting...',
    retry: 'Retry',
    rollback: 'Version Rollback',
    rollbackSelectVersion: 'Select a version to roll back to (last 3 versions)',
    rollbackConfirm: 'Roll back to {version}',
    rollbackWarning:
      'Rollback downloads the selected version and replaces the current binary. A service restart is required afterwards.',
    rollingBack: 'Rolling back...',
    rollbackComplete: 'Rollback Complete',
    rollbackFailed: 'Rollback Failed',
    manualRollbackCommand: 'Manual rollback',
    copyCommand: 'Copy',
    copied: 'Copied',
    noRollbackVersions: 'No versions available for rollback',
    loadVersionsFailed: 'Failed to load versions',
    rollbackSourceHint: 'Online rollback is not available for source builds',
    deployScript: 'Script',
    deployDocker: 'Docker',
    dockerEditCompose: 'Edit the image tag in docker-compose.yml',
    dockerRecreate: 'Recreate the container'
  },

  // Recharge / Subscription Page
  purchase: {
    title: 'Recharge / Subscription',
    description: 'Recharge balance or purchase subscription via the embedded page',
    openInNewTab: 'Open in new tab',
    notEnabledTitle: 'Feature not enabled',
    notEnabledDesc: 'The administrator has not enabled the recharge/subscription entry. Please contact admin.',
    notConfiguredTitle: 'Recharge / Subscription URL not configured',
    notConfiguredDesc:
      'The administrator enabled the entry but has not configured a recharge/subscription URL. Please contact admin.'
  },

  // Custom Page (iframe embed)
  customPage: {
    title: 'Custom Page',
    openInNewTab: 'Open in new tab',
    notFoundTitle: 'Page not found',
    notFoundDesc: 'This custom page does not exist or has been removed.',
    notConfiguredTitle: 'Page URL not configured',
    notConfiguredDesc: 'The URL for this custom page has not been properly configured.',
    tableOfContents: 'Contents',
    copyCode: 'Copy',
    copiedCode: 'Copied',
    copyCodeFailed: 'Failed'
  },

  // Announcements Page
  announcements: {
    title: 'Announcements',
    description: 'View system announcements',
    unreadOnly: 'Show unread only',
    markRead: 'Mark as read',
    markAllRead: 'Mark all as read',
    viewAll: 'View all announcements',
    markedAsRead: 'Marked as read',
    allMarkedAsRead: 'All announcements marked as read',
    newCount: '{count} new announcement | {count} new announcements',
    readAt: 'Read at',
    read: 'Read',
    unread: 'Unread',
    startsAt: 'Starts at',
    endsAt: 'Ends at',
    empty: 'No announcements',
    emptyUnread: 'No unread announcements',
    total: 'announcements',
    emptyDescription: 'There are no system announcements at this time',
    readStatus: 'You have read this announcement',
    markReadHint: 'Click "Mark as read" to mark this announcement'
  },

  // User Subscriptions Page
  userSubscriptions: {
    title: 'My Subscriptions',
    description: 'View your subscription plans and usage',
    noActiveSubscriptions: 'No Active Subscriptions',
    noActiveSubscriptionsDesc:
      "You don't have any active subscriptions. Contact administrator to get one.",
    failedToLoad: 'Failed to load subscriptions',
    status: {
      active: 'Active',
      expired: 'Expired',
      revoked: 'Revoked'
    },
    usage: 'Usage',
    expires: 'Expires',
    noExpiration: 'No expiration',
    unlimited: 'Unlimited',
    unlimitedDesc: 'No usage limits on this subscription',
    daily: 'Daily',
    weekly: 'Weekly',
    monthly: 'Monthly',
    daysRemaining: '{days} days remaining',
    expiresOn: 'Expires on {date}',
    resetIn: 'Resets in {time}',
    quotaEndsIn: 'Quota ends in {time}',
    windowNotActive: 'Awaiting first use',
    usageOf: '{used} of {limit}'
  },

  // Onboarding Tour
  onboarding: {
    restartTour: 'Restart Onboarding Tour',
    dontShowAgain: "Don't show again",
    dontShowAgainTitle: 'Permanently close onboarding guide',
    confirmDontShow: "Are you sure you don't want to see the onboarding guide again?\n\nYou can restart it anytime from the user menu in the top right corner.",
    confirmExit: 'Are you sure you want to exit the onboarding guide? You can restart it anytime from the top right menu.',
    interactiveHint: 'Press Enter or Click to continue',
    navigation: {
      flipPage: 'Flip Page',
      exit: 'Exit'
    },
    // Admin tour steps
    admin: {
      welcome: {
        title: '👋 Welcome to Sub2API',
        description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">Sub2API is a powerful AI service gateway platform that helps you easily manage and distribute AI services.</p><p style="margin-bottom: 12px;"><b>🎯 Core Features:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>📦 <b>Group Management</b> - Create service tiers (VIP, Free Trial, etc.)</li><li>🔗 <b>Account Pool</b> - Connect multiple upstream AI service accounts</li><li>🔑 <b>Key Distribution</b> - Generate independent API Keys for users</li><li>💰 <b>Billing Control</b> - Flexible rate and quota management</li></ul><p style="color: #10b981; font-weight: 600;">Let\'s complete the initial setup in 3 minutes →</p></div>',
        nextBtn: 'Start Setup 🚀',
        prevBtn: 'Skip'
      },
      groupManage: {
        title: '📦 Step 1: Group Management',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>What is a Group?</b></p><p style="margin-bottom: 12px;">Groups are the core concept of Sub2API, like a "service package":</p><ul style="margin-left: 20px; margin-bottom: 12px; font-size: 13px;"><li>🎯 Each group can contain multiple upstream accounts</li><li>💰 Each group has independent billing multiplier</li><li>👥 Can be set as public or exclusive</li></ul><p style="margin-top: 12px; padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Example:</b> You can create "VIP Premium" (high rate) and "Free Trial" (low rate) groups</p><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 Click "Group Management" on the left sidebar</p></div>'
      },
      createGroup: {
        title: '➕ Create New Group',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Let\'s create your first group.</p><p style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📝 Tip:</b> Recommend creating a test group first to familiarize yourself with the process</p><p style="color: #10b981; font-weight: 600;">👉 Click the "Create Group" button</p></div>'
      },
      groupName: {
        title: '✏️ 1. Group Name',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Give your group an easy-to-identify name.</p><div style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>💡 Naming Suggestions:</b><ul style="margin: 8px 0 0 16px;"><li>"Test Group" - For testing</li><li>"VIP Premium" - High-quality service</li><li>"Free Trial" - Trial version</li></ul></div><p style="font-size: 13px; color: #6b7280;">Click "Next" when done</p></div>',
        nextBtn: 'Next'
      },
      groupPlatform: {
        title: '🤖 2. Select Platform',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Choose the AI platform this group supports.</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📌 Platform Guide:</b><ul style="margin: 8px 0 0 16px;"><li><b>Anthropic</b> - Claude models</li><li><b>OpenAI</b> - GPT models</li><li><b>Google</b> - Gemini models</li></ul></div><p style="font-size: 13px; color: #6b7280;">One group can only have one platform</p></div>',
        nextBtn: 'Next'
      },
      groupMultiplier: {
        title: '💰 3. Rate Multiplier',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Set the billing multiplier to control user charges.</p><div style="padding: 8px 12px; background: #fef3c7; border-left: 3px solid #f59e0b; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚙️ Billing Rules:</b><ul style="margin: 8px 0 0 16px;"><li><b>1.0</b> - Original price (cost price)</li><li><b>1.5</b> - User consumes $1, charged $1.5</li><li><b>2.0</b> - User consumes $1, charged $2</li><li><b>0.8</b> - Subsidy mode (loss-making)</li></ul></div><p style="font-size: 13px; color: #6b7280;">Recommend setting test group to 1.0</p></div>',
        nextBtn: 'Next'
      },
      groupExclusive: {
        title: '🔒 4. Exclusive Group (Optional)',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Control group visibility and access permissions.</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>🔐 Permission Guide:</b><ul style="margin: 8px 0 0 16px;"><li><b>Off</b> - Public group, visible to all users</li><li><b>On</b> - Exclusive group, only for specified users</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Use Cases:</b> VIP exclusive, internal testing, special customers</p></div>',
        nextBtn: 'Next'
      },
      groupSubmit: {
        title: '✅ Save Group',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Confirm the information and click create to save the group.</p><p style="padding: 8px 12px; background: #fef3c7; border-left: 3px solid #f59e0b; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚠️ Note:</b> Platform type cannot be changed after creation, but other settings can be edited anytime</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>📌 Next Step:</b> After creation, we\'ll add upstream accounts to this group</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 Click "Create" button</p></div>'
      },
      accountManage: {
        title: '🔗 Step 2: Add Account',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>Great! Group created successfully 🎉</b></p><p style="margin-bottom: 12px;">Now add upstream AI service accounts to enable actual service delivery.</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>🔑 Account Purpose:</b><ul style="margin: 8px 0 0 16px;"><li>Connect to upstream AI services (Claude, GPT, etc.)</li><li>One group can contain multiple accounts (load balancing)</li><li>Supports OAuth and Session Key methods</li></ul></div><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 Click "Account Management" on the left sidebar</p></div>'
      },
      createAccount: {
        title: '➕ Add New Account',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Click the button to start adding your first upstream account.</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Tip:</b> Recommend using OAuth method - more secure and no manual key extraction needed</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 Click "Add Account" button</p></div>'
      },
      accountName: {
        title: '✏️ 1. Account Name',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Set an easy-to-identify name for the account.</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Naming Suggestions:</b> "Claude Main", "GPT Backup 1", "Test Account", etc.</p></div>',
        nextBtn: 'Next'
      },
      accountPlatform: {
        title: '🤖 2. Select Platform',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Choose the service provider platform for this account.</p><p style="padding: 8px 12px; background: #fef3c7; border-left: 3px solid #f59e0b; border-radius: 4px; font-size: 13px;"><b>⚠️ Important:</b> Platform must match the group you just created</p></div>',
        nextBtn: 'Next'
      },
      accountType: {
        title: '🔐 3. Authorization Method',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Choose the account authorization method.</p><div style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>✅ Recommended: OAuth Method</b><ul style="margin: 8px 0 0 16px;"><li>No manual key extraction needed</li><li>More secure with auto-refresh support</li><li>Works with 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 Method</b><ul style="margin: 8px 0 0 16px;"><li>Requires manual extraction from browser</li><li>May need periodic updates</li><li>For platforms without OAuth support</li></ul></div></div>',
        nextBtn: 'Next'
      },
      accountPriority: {
        title: '⚖️ 4. Priority (Optional)',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Set the account call priority.</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📊 Priority Rules:</b><ul style="margin: 8px 0 0 16px;"><li>Lower number = higher priority</li><li>System uses low-value accounts first</li><li>Same priority = random selection</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Use Case:</b> Set main account to lower value, backup accounts to higher value</p></div>',
        nextBtn: 'Next'
      },
      accountGroups: {
        title: '🎯 5. Assign Groups',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>Key Step!</b> Assign the account to the group you just created.</p><div style="padding: 8px 12px; background: #fee2e2; border-left: 3px solid #ef4444; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚠️ Important Reminder:</b><ul style="margin: 8px 0 0 16px;"><li>Must select at least one group</li><li>Unassigned accounts cannot be used</li><li>One account can be assigned to multiple groups</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Tip:</b> Select the test group you just created</p></div>',
        nextBtn: 'Next'
      },
      accountSubmit: {
        title: '✅ Save Account',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Confirm the information and click save.</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📌 OAuth Flow:</b><ul style="margin: 8px 0 0 16px;"><li>Will redirect to service provider page after clicking save</li><li>Complete login and authorization on provider page</li><li>Auto-return after successful authorization</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>📌 Next Step:</b> After adding account, we\'ll create an API key</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 Click "Save" button</p></div>'
      },
      keyManage: {
        title: '🔑 Step 3: Generate Key',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>Congratulations! Account setup complete 🎉</b></p><p style="margin-bottom: 12px;">Final step: generate an API Key to test if the service works properly.</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 Purpose:</b><ul style="margin: 8px 0 0 16px;"><li>Credential for calling AI services</li><li>Each key is bound to one group</li><li>Can set quota and expiration</li><li>Supports independent usage statistics</li></ul></div><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 Click "API Keys" on the left sidebar</p></div>'
      },
      createKey: {
        title: '➕ Create Key',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Click the button to create your first API Key.</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Tip:</b> Copy and save immediately after creation - key is only shown once</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 Click "Create Key" button</p></div>'
      },
      keyName: {
        title: '✏️ 1. Key Name',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Set an easy-to-manage name for the key.</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Naming Suggestions:</b> "Test Key", "Production", "Mobile", etc.</p></div>',
        nextBtn: 'Next'
      },
      keyGroup: {
        title: '🎯 2. Select Group',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Select the group you just configured.</p><div style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>📌 Group Determines:</b><ul style="margin: 8px 0 0 16px;"><li>Which accounts this key can use</li><li>What billing multiplier applies</li><li>Whether it\'s an exclusive key</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Tip:</b> Select the test group you just created</p></div>',
        nextBtn: 'Next'
      },
      keySubmit: {
        title: '🎉 Generate and Copy',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">System will generate a complete API Key after clicking create.</p><div style="padding: 8px 12px; background: #fee2e2; border-left: 3px solid #ef4444; border-radius: 4px; font-size: 13px; margin-bottom: 12px;"><b>⚠️ Important Reminder:</b><ul style="margin: 8px 0 0 16px;"><li>Key is only shown once, copy immediately</li><li>Need to regenerate if lost</li><li>Keep it safe, don\'t share with others</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>🚀 Next Steps:</b><ul style="margin: 8px 0 0 16px;"><li>Copy the generated sk-xxx key</li><li>Use in any OpenAI-compatible client</li><li>Start experiencing AI services!</li></ul></div><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 Click "Create" button</p></div>'
      }
    },
    // User tour steps
    user: {
      welcome: {
        title: '👋 Welcome to Sub2API',
        description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">Hello! Welcome to the Sub2API AI service platform.</p><p style="margin-bottom: 12px;"><b>🎯 Quick Start:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>🔑 Create API Key</li><li>📋 Copy key to your application</li><li>🚀 Start using AI services</li></ul><p style="color: #10b981; font-weight: 600;">Just 1 minute, let\'s get started →</p></div>',
        nextBtn: 'Start 🚀',
        prevBtn: 'Skip'
      },
      keyManage: {
        title: '🔑 API Key Management',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Manage all your API access keys here.</p><p style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px;"><b>📌 What is an API Key?</b><br/>An API key is your credential for accessing AI services, like a key that allows your application to call AI capabilities.</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 Click to enter key page</p></div>'
      },
      createKey: {
        title: '➕ Create New Key',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Click the button to create your first API key.</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Tip:</b> Key is only shown once after creation, make sure to copy and save</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 Click "Create Key"</p></div>'
      },
      keyName: {
        title: '✏️ Key Name',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Give your key an easy-to-identify name.</p><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Examples:</b> "My First Key", "For Testing", etc.</p></div>',
        nextBtn: 'Next'
      },
      keyGroup: {
        title: '🎯 Select Group',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Select the service group assigned by the administrator.</p><p style="padding: 8px 12px; background: #eff6ff; border-left: 3px solid #3b82f6; border-radius: 4px; font-size: 13px;"><b>📌 Group Info:</b><br/>Different groups may have different service quality and billing rates, choose according to your needs.</p></div>',
        nextBtn: 'Next'
      },
      keySubmit: {
        title: '🎉 Complete Creation',
        description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Click to confirm and create your 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>⚠️ Important:</b><ul style="margin: 8px 0 0 16px;"><li>Copy the key (sk-xxx) immediately after creation</li><li>Key is only shown once, need to regenerate if lost</li></ul></div><p style="padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>🚀 How to Use:</b><br/>Configure the key in any OpenAI-compatible client (like ChatBox, OpenCat, etc.) and start using!</p><p style="margin-top: 12px; color: #10b981; font-weight: 600;">👉 Click "Create" button</p></div>'
      }
    }
  },

  // Payment System
  payment: {
    title: 'Recharge / Subscription',
    amountLabel: 'Amount',
    paymentAmount: 'Payment Amount',
    creditedBalance: 'Credited Balance',
    quickAmounts: 'Quick Amounts',
    customAmount: 'Custom Amount',
    enterAmount: 'Enter amount',
    paymentMethod: 'Payment Method',
    fee: 'Fee',
    actualPay: 'Actual Payment',
    createOrder: 'Confirm Payment',
    methods: {
      easypay: 'EasyPay',
      alipay: 'Alipay',
      wxpay: 'WeChat Pay',
      stripe: 'Stripe',
      airwallex: 'Airwallex',
      card: 'Card',
      link: 'Link',
      alipay_direct: 'Alipay (Direct)',
      wxpay_direct: 'WeChat Pay (Direct)',
    },
    status: {
      pending: 'Pending',
      paid: 'Paid',
      recharging: 'Recharging',
      completed: 'Completed',
      expired: 'Expired',
      cancelled: 'Cancelled',
      failed: 'Failed',
      refund_requested: 'Refund Requested',
      refunding: 'Refunding',
      refund_pending: 'Refund Pending',
      refunded: 'Refunded',
      partially_refunded: 'Partially Refunded',
      refund_failed: 'Refund Failed',
    },
    qr: {
      scanToPay: 'Scan to Pay',
      scanAlipay: 'Alipay QR Payment',
      scanWxpay: 'WeChat QR Payment',
      scanAlipayHint: 'Open Alipay on your phone and scan the QR code to pay',
      scanWxpayHint: 'Open WeChat on your phone and scan the QR code to pay',
      payInNewWindow: 'Complete Payment in New Window',
      payInNewWindowHint: 'The payment page has opened in a new window. Please complete the payment there and return to this page.',
      openPayWindow: 'Reopen Payment Page',
      expiresIn: 'Expires in',
      expired: 'Order Expired',
      expiredDesc: 'This order has expired. Please create a new one.',
      cancelled: 'Order Cancelled',
      cancelledDesc: 'You have cancelled this payment.',
      waitingPayment: 'Waiting for payment...',
      cancelOrder: 'Cancel Order',
      alipayOpening: 'Opening Alipay',
      alipayContinueInApp: 'Complete payment in Alipay',
      alipayWaitingHint: 'The server will confirm the payment and update this page automatically',
      alipayFallbackTitle: 'Alipay did not open',
      alipayFallbackHint: 'Try opening Alipay again, or save the QR code and scan it from your Alipay photo album',
      reopenAlipay: 'Open Alipay Again',
      saveQRCode: 'Save QR Code',
      alipaySaveAndScanHint: 'Save the QR code, open Alipay Scan, then select it from your photo album',
    },
    orders: {
      title: 'My Orders',
      empty: 'No orders yet',
      orderId: 'Order ID',
      orderNo: 'Order No.',
      amount: 'Amount',
      payAmount: 'Paid',
      creditedAmount: 'Credited Amount',
      fee: 'Fee',
      baseAmount: 'Base Amount',
      includedInPayAmount: 'included in paid amount',
      status: 'Status',
      paymentMethod: 'Payment Method',
      createdAt: 'Created',
      cancel: 'Cancel Order',
      userId: 'User ID',
      orderType: 'Order Type',
      actions: 'Actions',
      requestRefund: 'Request Refund',
    },
    result: {
      success: 'Payment Successful',
      subscriptionSuccess: 'Subscription Successful',
      processing: 'Payment Processing',
      processingHint: 'Payment confirmation is still pending. This page will refresh automatically.',
      failed: 'Payment Failed',
      backToRecharge: 'Back to Recharge',
      viewOrders: 'View Orders',
    },
    currentBalance: 'Current Balance',
    groupFallback: 'Group #{id}',
    rechargeAccount: 'Recharge Account',
    activeSubscription: 'Active Subscription',
    noActiveSubscription: 'No active subscription',
    tabTopUp: 'Top Up',
    tabSubscribe: 'Subscribe',
    noPlans: 'No subscription plans available',
    notAvailable: 'Top-up is currently unavailable',
    confirmSubscription: 'Confirm Subscription',
    confirmCancel: 'Are you sure you want to cancel this order?',
    amountTooLow: 'Minimum amount is {min}',
    amountTooHigh: 'Maximum amount is {max}',
    amountNoMethod: 'No payment method available for this amount',
    rechargeRatePreview: 'Current rate: 1 CNY = {usd} USD',
    refundReason: 'Refund Reason',
    refundReasonPlaceholder: 'Please describe your refund reason',
    stripeLoadFailed: 'Failed to load payment component. Please refresh and try again.',
    stripeMissingParams: 'Missing order ID or client secret',
    stripeNotConfigured: 'Stripe is not configured',
    airwallexLoadFailed: 'Failed to load Airwallex payment component. Please refresh and try again.',
    airwallexMissingParams: 'Missing Airwallex payment parameters',
    errors: {
      tooManyPending: 'Too many pending orders (max {max}). Please complete or cancel existing orders first.',
      cancelRateLimited: 'Too many cancellations. Please try again later.',
      wechatH5NotAuthorized: 'This merchant has not enabled WeChat H5 payment. Open this page in WeChat to continue.',
      wechatPaymentMpNotConfigured: 'This site has not completed WeChat MP/JSAPI payment setup, so in-app WeChat payment is unavailable right now.',
      wechatJsapiUnavailable: 'WeChat payment could not be invoked in the current environment. Reopen this page inside WeChat and try again.',
      wechatJsapiFailed: 'WeChat payment did not complete. Try invoking it again or switch to QR payment.',
      wechatUnavailable: 'WeChat payment is temporarily unavailable. Please try again later.',
      wechatOpenInWeChatHint: 'Open the current page inside WeChat, or switch to desktop WeChat QR payment.',
      wechatScanOnDesktopHint: 'On desktop, use WeChat Scan to pay; on mobile, reopen the current page inside WeChat.',
      wechatSwitchBrowserHint: 'Switch to desktop WeChat QR payment, or reopen this page in an external browser and retry.',
      mobilePaymentFallbackToQr: 'This merchant has not enabled mobile payment. The flow has been switched to QR payment automatically.',
      alipayDesktopUnavailable: 'The desktop Alipay flow could not generate a QR code.',
      alipayDesktopQrHint: 'Desktop Alipay should render a QR code. Refresh and retry, or make sure the payment page was not blocked.',
      alipayMobileUnavailable: 'This page could not hand off to Alipay.',
      alipayMobileOpenHint: 'Allow the current page to open the Alipay app, or retry from the system browser.',
      // Structured error codes (reason strings from backend ApplicationError)
      PAYMENT_DISABLED: 'Payment system is disabled.',
      USER_INACTIVE: 'Your account is disabled.',
      BALANCE_PAYMENT_DISABLED: 'Balance recharge has been disabled.',
      INVALID_AMOUNT: 'Invalid amount.',
      INVALID_INPUT: 'Invalid request.',
      PLAN_NOT_AVAILABLE: 'Plan not found or no longer available.',
      GROUP_NOT_FOUND: 'Subscription group is no longer available.',
      GROUP_TYPE_MISMATCH: 'Group is not a subscription type.',
      TOO_MANY_PENDING: 'Too many pending orders (max {max}). Please complete or cancel existing orders first.',
      DAILY_LIMIT_EXCEEDED: 'Daily recharge limit reached. Remaining: {remaining}.',
      PAYMENT_GATEWAY_ERROR: 'Payment method is unavailable.',
      NO_AVAILABLE_INSTANCE: 'No payment channel available right now.',
      PAYMENT_PROVIDER_MISCONFIGURED: 'Payment provider misconfigured. Please contact an administrator.',
      WXPAY_CONFIG_MISSING_KEY: 'WeChat Pay config missing required key: {key}.',
      WXPAY_CONFIG_INVALID_KEY_LENGTH: 'WeChat Pay {key} length is invalid (expected {expected} bytes, got {actual}).',
      WXPAY_CONFIG_INVALID_KEY: 'WeChat Pay {key} is malformed. Make sure you copied the full PEM content.',
      PENDING_ORDERS: 'This provider has pending orders. Please wait for them to complete before making changes.',
      PAYMENT_PROVIDER_CONFLICT: 'Another enabled provider instance is already serving this payment method. Disable it before continuing.',
      CANCEL_RATE_LIMITED: 'Too many cancellations. Please try again later.',
      NOT_FOUND: 'Order not found.',
      FORBIDDEN: 'No permission for this order.',
      CONFLICT: 'Order status has changed. Please refresh.',
      INVALID_ORDER_TYPE: 'Only balance orders can request a refund.',
      INVALID_STATUS: 'The current order status does not allow this operation.',
      BALANCE_NOT_ENOUGH: 'Refund amount exceeds balance.',
      REFUND_AMOUNT_EXCEEDED: 'Refund amount exceeds the recharge amount.',
      REFUND_FAILED: 'Refund failed.',
    },
    airwallexPay: 'Airwallex Payment',
    stripePay: 'Pay Now',
    stripeSuccessProcessing: 'Payment successful, processing your order...',
    stripePopup: {
      redirecting: 'Redirecting to payment page...',
      loadingQr: 'Loading WeChat Pay QR code...',
      timeout: 'Timed out waiting for payment credentials, please retry',
      qrFailed: 'Failed to get WeChat Pay QR code',
    },
    subscribeNow: 'Subscribe Now',
    renewNow: 'Renew',
    selectPlan: 'Select Plan',
    planFeatures: 'Features',
    planCard: {
      rate: 'Rate',
      peakRate: 'Peak Rate',
      dailyLimit: 'Daily',
      weeklyLimit: 'Weekly',
      monthlyLimit: 'Monthly',
      quota: 'Quota',
      unlimited: 'Unlimited',
      models: 'Models',
    },
    days: 'days',
    weeks: 'weeks',
    months: 'months',
    years: 'years',
    oneMonth: '1 Month',
    oneYear: '1 Year',
    perMonth: 'month',
    perYear: 'year',
    admin: {
      tabs: {
        overview: 'Overview',
        orders: 'Orders',
        channels: 'Channels',
        plans: 'Plans',
      },
      todayRevenue: 'Today Revenue',
      totalRevenue: 'Total Revenue',
      todayOrders: 'Today Orders',
      orderCount: 'Order Count',
      avgAmount: 'Average Amount',
      revenue: 'Revenue',
      dailyRevenue: 'Daily Revenue',
      paymentDistribution: 'Payment Distribution',
      colUser: 'User',
      topUsers: 'Top Users',
      noData: 'No data',
      days: 'days',
      weeks: 'weeks',
      months: 'months',
      searchOrders: 'Search orders...',
      allStatuses: 'All Statuses',
      allPaymentTypes: 'All Payment Types',
      allOrderTypes: 'All Order Types',
      orderDetail: 'Order Detail',
      orderType: 'Order Type',
      orders: 'Orders',
      balanceOrder: 'Balance Top-Up',
      subscriptionOrder: 'Subscription',
      paidAt: 'Paid At',
      completedAt: 'Completed At',
      expiresAt: 'Expires At',
      feeRate: 'Fee Rate',
      refund: 'Refund',
      refundOrder: 'Refund Order',
      refundAmount: 'Refund Amount',
      maxRefundable: 'Max Refundable',
      refundReason: 'Refund Reason',
      refundReasonPlaceholder: 'Please enter refund reason',
      confirmRefund: 'Confirm Refund',
      refundSuccess: 'Refund successful',
      refundPending: 'Refund pending gateway confirmation',
      queryRefundStatus: 'Query refund status',
      refundInfo: 'Refund Info',
      refundEnabled: 'Refund Enabled',
      allowUserRefund: 'Allow User Refund',
      alreadyRefunded: 'Already Refunded',
      deductBalance: 'Deduct Balance',
      deductBalanceHint: 'Subtract recharged amount from user balance',
      userBalance: 'User Balance',
      orderAmount: 'Order Amount',
      insufficientBalance: 'Insufficient balance — will deduct to $0',
      noDeduction: 'Will NOT deduct user balance',
      forceRefund: 'Force refund (ignore balance check)',
      orderCancelled: 'Order Cancelled',
      retry: 'Retry',
      retrySuccess: 'Retry successful',
      approveRefund: 'Approve Refund',
      retryRefund: 'Retry Refund',
      refundRequestInfo: 'Refund Request Info',
      refundRequestedAt: 'Requested At',
      refundRequestedBy: 'Requested By',
      refundRequestReason: 'Request Reason',
      auditLogs: 'Audit Logs',
      operator: 'Operator',
      channelName: 'Channel Name',
      channelDescription: 'Channel Description',
      createChannel: 'Create Channel',
      editChannel: 'Edit Channel',
      deleteChannel: 'Delete Channel',
      deleteChannelConfirm: 'Are you sure you want to delete this channel?',
      planName: 'Plan Name',
      planDescription: 'Plan Description',
      createPlan: 'Create Plan',
      editPlan: 'Edit Plan',
      deletePlan: 'Delete Plan',
      deletePlanConfirm: 'Are you sure you want to delete this plan?',
      originalPrice: 'Original Price',
      price: 'Price',
      currency: 'Currency Label',
      currencyPlaceholder: 'e.g. USD / NZD / CNY',
      currencyHint: 'Display-only 3-letter ISO currency code shown next to the price; leave empty to hide, does not affect billing',
      subscriptionCnyPayPreview: 'CNY channel charge preview: {amount}',
      subscriptionCnyPayPreviewWithFee: '({feeRate}% fee included: {total})',
      validity: 'Validity',
      validityUnit: 'Validity Unit',
      sortOrder: 'Sort Order',
      forSale: 'For Sale',
      onSale: 'On Sale',
      offSale: 'Off Sale',
      group: 'Group',
      groupId: 'Group ID',
      features: 'Features',
      featuresHint: 'One feature per line',
      featuresPlaceholder: 'Enter plan features...',
      providerManagement: 'Provider Management',
      providerManagementDesc: 'Manage payment provider instances',
      createProvider: 'Create Provider',
      editProvider: 'Edit Provider',
      deleteProvider: 'Delete Provider',
      deleteProviderConfirm: 'Are you sure you want to delete this provider?',
      providerName: 'Provider Name',
      providerKey: 'Provider Key',
      selectProviderKey: 'Select Provider Key',
      providerConfig: 'Provider Config',
      noProviders: 'No providers configured',
      noProvidersHint: 'Create a provider instance to start accepting payments',
      supportedTypes: 'Supported Payment Types',
      supportedTypesHint: 'Select the payment types this provider supports',
      rateMultiplier: 'Rate Multiplier',
      dashboardTitle: 'Payment Dashboard',
      dashboardDesc: 'Recharge order analytics and insights',
      daySuffix: 'd',
      paymentConfigTitle: 'Payment Config',
      paymentConfigDesc: 'Configure payment providers and settings',
      plansPageTitle: 'Subscription Plans',
      plansPageDesc: 'Manage subscription plan configuration',
      tabPlanConfig: 'Plan Configuration',
      tabUserSubs: 'User Subscriptions',
      selectGroup: 'Select a group',
      groupRequired: 'Please select a subscription group',
      priceRequired: 'Price must be greater than 0',
      validityRequired: 'Validity must be greater than 0',
      groupMissing: 'Missing',
      groupInfo: 'Group Info',
      platform: 'Platform',
      rateMultiplierLabel: 'Rate',
      dailyLimit: 'Daily Limit',
      weeklyLimit: 'Weekly Limit',
      monthlyLimit: 'Monthly Limit',
      unlimited: 'Unlimited',
      searchUserSubs: 'Search user subscriptions...',
      daily: 'D',
      weekly: 'W',
      monthly: 'M',
      subsStatus: {
        active: 'Active',
        expired: 'Expired',
        revoked: 'Revoked',
      },
    },
  },

}
