import flat from 'flat';

export default flat({
  common: {
    redirecting: 'Redirecting...',
    title: 'Name',
    estimated: 'Estimated',
    total: 'Total',
    active: 'Active',
    every: 'Every',
    inactive: 'Inactive',
    enabled: 'Enabled',
    disabled: 'Disabled',
    metadata: {
      label: 'Metadata',
      description: 'Add custom key-value pairs to store additional information about this meter.',
      add: 'Add more metadata',
      edit: 'Edit metadata',
      empty: 'No metadata',
      emptyTip: "You haven't added any metadata yet. You can add it now",
      formMode: 'Switch to form mode',
      jsonMode: 'Switch to JSON mode',
      jsonPlaceholder: 'Enter JSON data...',
      invalidJson: 'Invalid JSON format. Please check your input',
      formatJson: 'Format JSON',
    },
    price: 'Price',
    add: 'Add',
    fullscreen: 'Fullscreen',
    exit: 'Exit',
    maxLength: 'Max {len} characters',
    minLength: 'Min {len} characters',
    invalidCharacters: 'Invalid characters',
    latinOnly:
      'Must contain at least one letter and cannot include Chinese characters or special characters such as <, >, ", \' or \\',
    loading: 'Loading...',
    loadMore: 'Load more',
    noMoreData: 'No more data',
    rechargeTime: 'Recharge Time',
    submit: 'Submit',
    custom: 'Custom',
    estimatedDuration: '{duration} est.',
    detail: 'Detail',
    setting: 'Setting',
    slippage: 'Slippage Limit',
    slippageMinRate: 'Min acceptable rate {rate} {currency}',
    slippageTooltip:
      'The minimum acceptable exchange rate for automatic payments. If the rate drops below this, payment will be paused.',
    welcome: 'Welcome to Payment Kit',
    welcomeDesc: 'Start accepting payments in minutes with Payment Kit. Choose a feature to get started.',
    quickStart: 'Quick Start Guides',
    advancedFeatures: 'Advanced Features',
    quickStarts: 'Quick Starts',
    homeTagline: 'A decentralized Stripe-like payment solution for Blocklets',
    adminDashboard: 'Admin Dashboard',
    customerPortal: 'Customer Portal',
    copy: 'Copy',
    copied: 'Copied',
    copySuccess: 'Copied successfully',
    copyFailed: 'Copy failed',
    copyTip: 'Please copy manually',
    save: 'Save',
    saving: 'Saving...',
    saved: 'Saved successfully',
    refresh: 'Refresh',
    cancel: 'Cancel',
    back: 'Back',
    know: 'I Know',
    confirm: 'Confirm',
    increased: 'increased',
    decreased: 'decreased',
    edit: 'Edit',
    view: 'View',
    select: 'Select',
    clear: 'Clear',
    delete: 'Delete',
    deleting: 'Deleting...',
    activate: 'Activate',
    deactivate: 'Deactivate',
    yes: 'Yes',
    no: 'No',
    never: 'Never',
    created: 'Created',
    updated: 'Updated',
    valid: 'Valid',
    events: 'Events',
    details: 'Details',
    discount: 'Discount',
    deleted: 'Deleted',
    maxAmount: 'Max amount is {max}',
    days: {
      sunday: 'Sunday',
      monday: 'Monday',
      tuesday: 'Tuesday',
      wednesday: 'Wednesday',
      thursday: 'Thursday',
      friday: 'Friday',
      saturday: 'Saturday',
    },
    name: 'Name',
    type: 'Type',
    status: 'Status',
    remainingCredit: 'Remaining Credit',
    scope: 'Scope',
    source: 'Source',
    effectiveDate: 'Effective Date',
    expirationDate: 'Expiration Date',
    creditGrant: 'Grant',
    date: 'Date',
    subscription: 'Subscription',
    meter: 'Meter',
    meterEvent: 'Meter Event',
    creditAmount: 'Credit',
    createdAt: 'Created At',
    expiresAt: 'Expires At',
    general: 'All usage-based prices',
    specific: 'Specific usage-based prices',
    paid: 'Paid',
    promotional: 'Promotional',
    viewInvoice: 'View Invoice',
    viewSourceData: 'View Source',
    goToConfigure: 'Go to Configure',
    noData: 'No data',
  },
  notification: {
    preferences: {
      title: 'Email Notification Settings',
      button: 'Email Settings',
      frequency: {
        label: 'Notification Frequency',
        default: 'Instant Notifications (Default)',
        daily: 'Daily',
        weekly: 'Weekly',
        monthly: 'Monthly',
      },
      day: 'Day',
      timeFormatError: 'Please enter a valid time in 24-hour format (HH:MM)',
      monthlyHelp: 'If day is not available in a month, the last day will be used',
      subscriptionRenewalNote: 'This setting applies to subscription renewal notifications.',
    },
  },
  admin: {
    description: 'Manage your products, pricing, billing, and payments.',
    balances: 'Balances',
    trends: 'Trends',
    addresses: 'Addresses',
    metrics: 'Metrics',
    attention: 'Attention',
    overview: 'Overview',
    overviewPage: {
      financialIndicatorsTitle: 'Financial Indicators',
      businessMonitoringTitle: 'Business Monitoring',
      filters: {
        dateRange: 'Select Date Range',
        currencyLabel: 'Currencies',
        productLabel: 'Products',
        regionLabel: 'Regions',
        allCurrencies: 'All Currencies',
        allProducts: 'All Products',
        allRegions: 'All Regions',
      },
      financialIndicators: {
        totalIncome: {
          title: 'Total Income',
          subtitle: "User's actual payment",
        },
        refundAmount: {
          title: 'Refund Amount',
          subtitle: 'Total refunds issued',
        },
        costOfGoods: {
          title: 'Cost of Goods',
          subtitle: 'Supplier share',
        },
        netRevenue: {
          title: 'Net Revenue',
          subtitle: 'Revenue after vendor costs',
        },
        promotionCost: {
          title: 'Promotion Cost',
          subtitle: 'Discount',
        },
        taxedRevenue: {
          title: 'Taxed Revenue',
          subtitle: 'Revenue with tax',
        },
      },
      charts: {
        title: 'Transaction Trends',
        payments: 'Payments',
        payouts: 'Payouts',
        refunds: 'Refunds',
        allCurrencies: 'All currencies',
      },
      metrics: {
        transaction: 'Transaction Metrics',
        essential: 'Essential Metrics',
      },
      overdue: {
        title: 'Pending Consumption',
        subtitle: 'Unpaid credit consumption',
        customers: '{count} customers',
        events: '{count} pending records',
        viewAll: 'View All',
        noOverdue: 'No pending consumption',
      },
    },
    payments: 'Payments',
    connections: 'Connections',
    back: 'Back',
    actions: 'Actions',
    create: 'Create',
    creating: 'Creating...',
    save: 'Save',
    saving: 'Saving...',
    cancel: 'Cancel',
    paymentLinks: 'Payment links',
    paymentMethods: 'Payment methods',
    customers: 'Customers',
    products: 'Products',
    invoiceItems: 'Invoice Items',
    pricing: 'Pricing',
    coupons: 'Coupons',
    tax: 'Tax',
    taxRates: 'Tax Rates',
    taxRate: {
      create: 'Create Tax Rate',
      createTitle: 'Create Tax Rate',
      createAction: 'Add Tax Rate',
      created: 'Tax rate created successfully',
      updated: 'Tax rate updated successfully',
      deleted: 'Tax rate deleted successfully',
      label: 'Tax Rate',
      view: 'View Tax Rate',
      displayName: 'Display Name',
      displayNamePlaceholder: 'Name shown on invoices and reports',
      displayNameAuto: 'Auto-generated if left empty',
      displayNameRequired: 'Display name is required',
      description: 'Description',
      descriptionPlaceholder: 'Optional description',
      country: 'Country',
      countryRequired: 'Country is required',
      state: 'State/Province',
      postalCode: 'Postal Code',
      taxCode: 'Product Tax Code',
      taxCodeDescription:
        'Tax codes are used to calculate automatic taxes based on product type and location. You can ',
      taxCodeDescriptionLink: 'manage tax rates',
      taxCodeDescriptionSuffix: ' to create custom tax rates for specific tax codes and regions.',
      selectTaxCode: 'Select product tax code',
      percentage: 'Tax Rate (%)',
      percentageRequired: 'Tax rate percentage is required',
      percentageMin: 'Tax rate must be 0% or higher',
      percentageMax: 'Tax rate must be less than 100%',
      active: 'Active by default',
      location: 'Region',
      advanced: 'Advanced options',
      search: 'Search tax rates',
      searchCountry: 'Search country',
      back: 'Back to tax rates',
      associatedInvoices: 'Related Invoices',
      deleteTitle: 'Delete Tax Rate',
      deleteMessage: 'Are you sure you want to delete tax rate “{name}”? This action cannot be undone.',
      deactivateTitle: 'Deactivate Tax Rate',
      deactivateMessage: 'Deactivate “{name}”? It will no longer apply automatically to invoices.',
      activateTitle: 'Activate Tax Rate',
      activateMessage: 'Activate “{name}”? It will be available for future invoices.',
      createTitleShort: 'Add tax rate',
      edit: 'Edit',
      editTitle: 'Edit Tax Rate',
      selectTaxCodeHint: "We'll use this tax code to calculate automatic tax on invoices.",
      searchPlaceholder: 'Search by product or tax code',
      previewPlaceholder: 'Select a tax code to see details.',
      usePreset: 'Use preset',
      noPreset: 'No preset selected',
      noSuggestions: 'No tax codes match your search.',
      relatedInvoiceNum: 'Related Invoices',
      notUsed: 'Not used',
      taxCodeLabel: 'Tax code: {code}',
      types: {
        general: 'General',
        digital: 'Digital products',
        services: 'Services',
        physical: 'Physical goods',
      },
    },
    pricingTables: 'Pricing tables',
    vendors: 'Vendors',
    billing: 'Billing',
    invoices: 'Invoices',
    subscriptions: 'Subscriptions',
    meters: 'Meters',
    meterEvents: {
      title: 'Meter Events',
    },
    overdue: {
      title: 'Pending Consumption',
      pendingAmount: 'Pending Amount',
      eventCount: 'Pending Records',
      noOverdue: 'No pending consumption',
      selectCurrency: 'Currency',
    },
    meter: {
      add: 'Add meter',
      edit: 'Edit meter',
      save: 'Save meter',
      saved: 'Meter successfully saved',
      creditMode: {
        onchain: 'OnChain',
        onChainDescription: 'Once enabled, your credit will be published as a Token on the ArcBlock blockchain',
        tokenConfiguration: 'Token Configuration',
        createNewToken: 'Create New Token',
        useExistingToken: 'Use Existing Token',
        createTokenHint: 'Fill in the token name and symbol to create a new Token',
        tokenName: 'Token Name',
        tokenNamePlaceholder: 'Enter token name',
        tokenNameRequired: 'Token name is required',
        tokenSymbol: 'Token Symbol',
        tokenSymbolPlaceholder: 'Enter token symbol',
        tokenSymbolRequired: 'Token symbol is required',
        tokenSymbolFormat: 'Symbol must be 1-6 uppercase letters or numbers',
        createTokenButton: 'Create Token',
        creatingToken: 'Creating...',
        tokenCreated: 'Token created successfully',
        tokenCreatedLabel: 'Token Created',
        tokenAddress: 'Token Address',
        selectToken: 'Select Token',
        selectTokenPlaceholder: 'Select an existing token',
        tokenAddressRequired: 'Token address is required',
        enabled: 'Enabled',
      },
      activate: 'Activate meter',
      activated: 'Meter activated successfully',
      deactivate: 'Deactivate meter',
      deactivated: 'Meter deactivated successfully',
      deleted: 'Meter deleted successfully',
      deleteConfirm: 'Are you sure you want to delete this meter? This action cannot be undone.',
      activateConfirm: 'Are you sure you want to activate this meter? It will start collecting usage data.',
      deactivateConfirm:
        'By deactivating, no further events for this meter can be reported. Attempts to create events for this meter will return an error. Previously reported usage will remain. You can reactivate at any time.',
      view: 'View meter',
      basicInfo: 'Basic information',
      basicInfoDescription: 'Configure the core settings for your meter to track usage events.',
      editDescription:
        'Update the meter name, description, and metadata. Core settings like event name and aggregation method cannot be changed.',
      inactive: 'Meter is inactive',
      inactiveTip: 'This meter is not collecting usage data. Activate it to start tracking events.',
      name: {
        label: 'Meter name',
        required: 'Meter name is required',
        placeholder: 'API requests',
        help: "A descriptive name for this meter that will be displayed in your dashboard and user's personal bill.",
      },
      eventName: {
        label: 'Event name',
        required: 'Event name is required',
        placeholder: 'api_request',
        help: 'The event name that will be sent to this meter',
        editHelp: 'Event name cannot be changed after meter creation to maintain data consistency.',
      },
      aggregationMethod: {
        label: 'Aggregation method',
        required: 'Aggregation method is required',
        sum: 'Sum',
        sumHint: 'Add all event values together',
        sumDescription:
          'The sum aggregation method adds all usage event values together and reports the total for event summaries and billing.',
        count: 'Count',
        countHint: 'Count the number of events',
        countDescription:
          'The count aggregation method counts the number of events received and reports the total count for event summaries and billing.',
        last: 'Last value',
        lastHint: 'Use the most recent event value',
        lastDescription:
          'The last value aggregation method uses the most recent event value received and reports that value for event summaries and billing.',
        editHelp: 'Aggregation method cannot be changed after meter creation to maintain data consistency.',
      },
      unit: {
        label: 'Measurement unit',
        required: 'Measurement unit is required',
        placeholder: 'request',
        help: 'The unit of measurement for this meter',
        editHelp: 'Measurement unit cannot be changed after meter creation to maintain data consistency.',
      },
      description: {
        label: 'Description',
        placeholder: 'Track API usage for billing',
        help: 'Optional description to help you and your team understand what this meter tracks.',
      },
      events: {
        title: 'Events',
        dailyEventCount: 'Daily Event Count',
        dailyTotalValue: 'Daily Total Value',
        eventName: 'Event Name',
        value: 'Value',
        customer: 'Customer',
        subscription: 'Subscription',
        reportTime: 'Report Time',
        count: '{count} events total',
        empty: 'No event data',
        emptyTip: 'Data will appear here when events are reported',
        filterByCustomer: 'Filter by customer',
        eventCount: 'Event Count',
        totalValue: 'Total Value',
      },
      usageGuide: {
        title: 'How to report usage',
        description:
          'Send events to this meter using the event name "{eventName}". The meter will {method} the values and track usage in {unit}.',
        tip: 'Send events to this meter using the event name "{eventName}". The meter will {aggregationMethodHint} and track usage in {unit}.',
        apiEndpoint: 'API Endpoint',
        curlExample: 'cURL Example',
        jsExample: 'JavaScript Example',
        pythonExample: 'Python Example',
        important: 'Important',
        tip1: 'Replace YOUR_API_KEY with your actual API key',
        tip2: 'The event_name must match exactly: {eventName}',
        tip3: 'Include a timestamp for accurate tracking',
        moreInfo: 'For more information, see our',
        apiDocs: 'API documentation',
      },
      products: {
        count: '{count} associated products',
        create: 'Create product',
        created: 'Product created successfully',
        createPrompt: 'Enter product name:',
        manage: 'Manage',
        empty: 'No products',
        title: 'Products',
        emptyTip: 'No products are associated with this meter yet.',
        meterService: 'Meter Service',
        creditCharge: 'Credit Charge',
      },
      creditProducts: {
        emptyTip: 'No credit products are associated with this meter yet.',
      },
      rechargePackage: {
        priceId: 'Top-up Package',
        tooltip:
          'The top-up package is used to recharge {name}, and users can get the corresponding {name} after purchase.',
      },
    },
    creditProduct: {
      create: 'Create Credit Product',
      defaultName: '{name} Top-up Package',
      defaultDescription: '{name} Top-up Package',
      defaultNickname: 'Credit Recharge',
      unitLabel: 'units',
      settings: 'Credit Settings',
      configTitle: 'Credit Configuration',
      expirationTime: {
        label: 'Expiration',
        expireWithNextGrant: 'Expire with Next Grant',
      },
      name: {
        placeholder: 'Enter Credit product name',
      },
      description: {
        placeholder: 'Describe the purpose and value of this Credit product',
      },
      priceNotice:
        'Credit products are used to provide consumable credits to users, supporting both one-time purchase and package pricing models.',
      creditAmount: {
        label: 'Credit Amount',
        placeholder: 'Amount of credits users receive when purchasing this price',
        help: 'Leave empty for pay-per-unit pricing, enter a number for fixed package deals',
        description: 'Purchase quantity determines the amount of Credits received',
      },
      validDuration: {
        label: 'Valid Duration',
        help: 'Credit validity period, calculated from purchase time',
        description: 'Set to 0 for permanent validity',
        hours: 'hours',
        days: 'days',
        weeks: 'weeks',
        months: 'months',
        years: 'years',
      },
      associatedPrices: {
        label: 'Associated Prices',
        placeholder: 'Select service prices this Credit can be used for',
        help: 'When selected, purchased Credits can only be used for specified services',
        description: 'No selection means Credits can be used for all services',
      },
      priority: {
        label: 'Usage Priority',
        help: 'Usage order when user has multiple Credits, lower numbers have higher priority',
        description: 'Range: 0-100, 0 is highest priority, 50 is default value',
      },
      deliveryMode: {
        label: 'Delivery Mode',
        once: 'One-time',
        periodic: 'Periodic',
      },
      schedule: {
        interval: {
          label: 'Grant Frequency',
          hour: 'hours',
          day: 'days',
          week: 'weeks',
          month: 'months',
        },
        amountPerGrant: {
          label: 'Amount per Grant',
          description: 'Fixed Credit amount per grant',
        },
        expireWithNextGrant: {
          label: 'Expire with Next Grant',
          description: 'This Credit expires when the next grant is issued (refresh mode)',
        },
      },
    },
    meterEvent: {
      title: 'Meter Event Details',
      id: 'Event ID',
      totalEvents: 'Total events: {count}',
      noEvents: 'No events found',
      noEventsHint: 'You can manually add test events in test mode.',
      identifier: 'Identifier',
      customer: 'Customer',
      customerId: 'Customer ID',
      value: 'Value',
      subscription: 'Subscription',
      creditConsumed: 'Credit Consumed',
      usageValue: 'Usage Value',
      settlementAmount: 'Settlement Amount',
      reportedAmount: 'Reported Amount',
      overdueAmount: 'Overdue Amount',
      reportedAt: 'Reported At',
      processedAt: 'Processed At',
      eventIdentifier: 'Event Identifier',
      usageDetails: 'Usage Details',
      chart: {
        eventCount: 'Daily Event Count',
        totalValue: 'Daily Total Value',
      },
      filter: {
        customer: 'Filter by Customer',
      },
      add: {
        button: 'Add usage',
        title: 'Add usage',
        customerId: 'Customer',
        customerIdPlaceholder: 'Select customer',
        value: 'Value',
        valuePlaceholder: 'Enter usage value',
        subscriptionId: 'Subscription',
        subscriptionIdPlaceholder: 'Enter subscription ID (optional)',
        subscriptionIdHint: 'Optional - link this usage to a specific subscription',
        timestamp: 'Timestamp',
        timestampHint: 'When this usage occurred',
        validation: 'Customer and value are required',
        success: 'Usage event added successfully',
        submit: 'Submit',
      },
    },
    developers: 'Developers',
    webhooks: 'Webhooks',
    events: {
      title: 'Events',
      dailyEventCount: 'Daily Event Count',
      dailyTotalValue: 'Daily Total Value',
      eventName: 'Event Name',
      value: 'Value',
      customer: 'Customer',
      subscription: 'Subscription',
      reportTime: 'Report Time',
      count: '{count} events total',
      empty: 'No event data',
      emptyTip: 'Data will appear here when events are reported',
      filterByCustomer: 'Filter by customer',
      eventCount: 'Event Count',
      totalValue: 'Total Value',
      hourly: 'Hourly',
      totalEvents: 'Total Events',
      timeRange: 'Time Range',
      hourlyView: 'Hourly View',
      dailyView: 'Daily View',
    },
    refunds: 'Refunds',
    payouts: 'Payouts',
    logs: 'Logs',
    passports: 'Passports',
    details: 'Details',
    settings: 'Settings',
    branding: 'Branding',
    business: 'Business',
    summary: 'Summary',
    product: {
      empty: 'No product',
      info: 'Product information',
      add: 'Add product',
      view: 'View product details',
      save: 'Save product',
      saved: 'Product successfully saved',
      additional: 'Additional options',
      edit: 'Edit product',
      pricing: 'Pricing',
      find: 'Find a product',
      archive: 'Archive product',
      archiveTip: 'Archiving will hide this product from new purchases. Are you sure you want to archive this product?',
      unarchive: 'Unarchive product',
      unarchiveTip:
        'Unarchiving will enable this product for new purchases. Are you sure you want to unarchive this product?',
      remove: 'Remove product',
      removeTip: 'Removing will hide this product from new purchases. Are you sure you want to remove this product?',
      archived: 'This product has been archived',
      archivedTip:
        "This product can't be added to new invoices, subscriptions, payment links, or pricing tables. Any existing subscriptions with this product remain active until canceled and any existing payment links or pricing tables are deactivated.",
      locked: 'This product is locked because at least one of its prices is used by a subscription or a payment.',
      currencyNotAligned: 'All prices must have the same currency settings',
      image: {
        label: 'Image',
        add: 'Add image',
      },
      features: {
        label: 'Features',
        add: 'Add another feature',
      },
      name: {
        label: 'Name',
        required: 'Product name is required',
        placeholder: 'Premium plan',
      },
      description: {
        label: 'Description',
        required: 'Product description is required',
        placeholder: 'Product descriptions that appear on checkout, invoice pages',
      },
      statement_descriptor: {
        label: 'Statement descriptor',
        placeholder: 'ArcBlock',
      },
      unit_label: {
        label: 'Unit label',
        placeholder: 'Unit',
      },
      billingType: {
        label: 'Billing type',
        standard: 'Standard billing',
        standardDesc: 'Charge a fixed amount on a recurring basis',
        metered: 'Metered billing',
        meteredDesc: 'Charge based on usage tracked by a meter',
        help: 'Choose how customers will be charged for this product',
      },
      meter: {
        label: 'Meter',
        placeholder: 'Select a meter to track usage',
        required: 'Please select a meter for metered billing',
        help: 'Select the meter to track usage for this product',
        pricingNote:
          'For metered products, pricing is automatically based on usage tracked by the selected meter. You only need to set the unit price and billing period.',
      },
      cross_sell: {
        title: 'Cross-sells',
        to: 'Cross-sells to',
        tip: '',
      },
      type: {
        label: 'Product Type',
        service: 'Service',
        serviceDesc: 'Digital services or subscriptions',
        credit: 'Credit',
        creditDesc: 'Credit top-up product for credit-based billing scenarios',
        creditDescLink: 'Create meters first',
        good: 'Good',
        goodDesc: 'Physical products or tangible goods',
      },
      vendorConfig: {
        title: 'Vendor Configuration',
        add: 'Add Vendor',
        empty: 'No vendors configured. Click "Add Vendor" to configure vendor services',
        vendor: 'Vendor',
        vendorRequired: 'Vendor is required',
        productCode: 'Product Code',
        productCodeRequired: 'Product code is required',
        commissionType: 'Commission Type',
        commissionRate: 'Commission Rate',
        commissionRateRequired: 'Commission rate is required',
        commissionRateMin: 'Commission rate must be at least 0',
        commissionRateMax: 'Commission rate cannot exceed 100%',
        amount: 'Fixed Amount',
        noVendor: 'No vendor available',
        amountRequired: 'Fixed amount is required',
        totalCommission: 'Total commission rate: {total}%',
        totalCommissionExceeded: 'Total commission rate exceeds 100%: {total}%',
      },
    },
    price: {
      name: 'Price',
      type: 'Usage type',
      plan: 'Price plan',
      info: 'Price information',
      count: '{count} prices',
      empty: 'No price',
      addAnother: 'Add another price',
      order: 'Plan {order}',
      lookupKey: 'Lookup key',
      setAsDefault: 'Set as default price',
      detail: 'Pricing details',
      add: 'Add another price',
      view: 'View price details',
      additional: 'Additional options',
      model: 'Pricing model',
      amount: 'Price',
      amountDescription: 'This is the tax-inclusive price that customers will pay.',
      locked: 'This price is locked because it is used by a subscription or a payment.',
      amountTip: 'Choose recurring for subscriptions and one-time for everything else.',
      duplicate: 'Duplicate price',
      edit: 'Edit price',
      find: 'Find or add a price',
      archive: 'Archive price',
      archiveTip: 'Archiving will hide this price from new purchases. Are you sure you want to archive this price?',
      remove: 'Remove price',
      removeTip: 'Removing will hide this price from new purchases. Are you sure you want to remove this price?',
      unit_amount: {
        required: 'Price is required',
        positive: 'Price must be positive',
        stripeTip: 'Stripe requires the price to be at least 0.5',
      },
      nickname: {
        label: 'Price description',
        placeholder: '',
      },
      lookup_key: {
        label: 'Lookup key',
        placeholder: '',
        description: 'Lookup key is used to identify the price in the API',
      },
      recurring: {
        interval: 'Billing period',
        metered: 'Usage is metered?',
        meteredTip:
          'Metered billing lets you charge customers based on reported usage at the end of each billing period.',
        aggregate: 'Charge for metered usage by',
        intervalCountTip: 'Billing interval must be a positive number',
        stripeTip: 'Stripe requires the billing period to be at least 1 day',
      },
      currency: {
        add: 'Add more currencies',
        list: 'Currencies',
      },
      models: {
        standard: 'Standard pricing',
        standardDesc: 'A single, fixed price',
        package: 'Package pricing',
        packageDesc: 'Price by number of units',
        graduated: 'Graduated Pricing',
        volume: 'Volume pricing',
        custom: 'Customer chooses price',
        usageBased: 'Usage-based',
        creditMetered: 'Credit metered',
      },
      creditMetered: {
        label: 'Credit metered',
        placeholder: 'Select a meter to track usage',
        required: 'Please select a meter for metered billing',
        help: 'Select the meter to track usage for this product',
        selectMeter: 'Select meter',
        pricingNote: 'For metered products, pricing is automatically based on usage tracked by the selected meter.',
        description:
          'Credit metered billing requires corresponding credit consumption. If credits are consumed, the corresponding service will stop.',
      },
      credit: {
        saveAsBasePrice: 'Set as Top-up Package',
        saveSuccess: 'Successfully set as top-up package',
      },
      types: {
        onetime: 'One time',
        onetimeDesc: 'Charge a one-time fee',
        recurring: 'Recurring',
        recurringDesc: 'Charge an ongoing fee',
      },
      paymentType: 'Payment Type',
      billingModel: 'Billing Model',
      pricing: 'Pricing',
      additionalCurrencies: 'Additional Currencies',
      advanced: 'Advanced Settings',
      customInterval: 'Custom Interval',
      perUnit: 'Per Unit',
      choosePricingModel: 'Choose your pricing model',
      usage: 'Usage',
      usageDesc:
        'Price by number of users, units, or seats. Requires a record for Stripe to track customer service usage.',
      meter: 'Meter',
      billingPeriod: 'Billing period',
      aggregate: {
        sum: 'Sum of usage values during period',
        max: 'Maximum usage value during period',
        last_during_period: 'Most recent usage value during period',
        last_ever: 'Most recent usage value',
      },
      upsell: {
        title: 'Upsells',
        to: 'Upsells to',
        tip: '',
      },
      quantity: {
        tip: 'Quantity must be at least 0',
      },
      quantityAvailable: {
        label: 'Available quantity',
        placeholder: '0 means unlimited',
        format: 'Available {num} pieces',
        noLimit: 'No limit on available quantity',
        valid: 'Available quantity must be at least the sold quantity',
        description: 'Enter the number of units that can be sold, 0 means unlimited',
      },
      quantitySold: {
        label: 'Sold quantity',
        format: 'Sold {num} pieces',
      },
      quantityLimitPerCheckout: {
        label: 'Limit per checkout quantity',
        placeholder: '0 means unlimited',
        format: 'Limit {num} pieces per checkout',
        noLimit: 'No limit on quantity per checkout',
        description: 'Enter the number of units that can be purchased in a single checkout, 0 means unlimited',
      },
      inventory: 'Inventory Settings',
      dynamicPricing: {
        label: 'Enable Dynamic Pricing',
        description: 'Price fluctuates based on real-time exchange rates',
        config: {
          title: 'Dynamic Pricing Configuration',
          baseAmount: {
            label: 'Base Price',
            description: 'The base price in fiat currency',
            required: 'Base price is required',
          },
        },
        validation: {
          checking: 'Checking exchange rate availability...',
          // eslint-disable-next-line no-template-curly-in-string
          rateLine: 'Current rate: 1 {currency} ≈ ${rate}',
          // eslint-disable-next-line no-template-curly-in-string
          usdLine: 'USD estimate: ≈ ${amount}',
          error: 'Failed to fetch exchange rate, currency not supported or data source exception',
          // eslint-disable-next-line no-template-curly-in-string
          estimatedLine: 'Estimated amount: ≈ {amount} {currency}',
          useAmount: 'Fill amount',
        },
      },
      referencePricing: {
        label: 'Reference Exchange Rate Pricing',
        description: 'Use current exchange rates to estimate token amounts without enabling dynamic pricing',
      },
    },
    coupon: {
      create: 'Create Coupon',
      view: 'View coupon',
      description: 'Coupons can be used to discount invoices, subscriptions, or entire customer accounts.',
      listTitle: 'Coupon',
      terms: 'Terms',
      tab: 'Coupons',
      redemptions: 'Redemptions',
      expires: 'Expires',
      noDiscount: 'No discount',
      name: 'Name',
      nameHelp: "This will appear on customers' receipts and invoices.",
      desc: 'Description',
      descriptionInternal: 'This description is for internal use only and will not be shown to customers.',
      id: 'ID',
      idOptional: 'ID (Optional)',
      idHelp:
        'This will identify this coupon in the API. We recommend leaving this blank so we can generate an ID for you.',
      type: 'Type',
      percentageOff: 'Percentage off',
      fixedAmountOff: 'Fixed amount off',
      percentageDiscount: 'Percentage discount',
      fixedAmount: 'Discount amount',
      currency: 'Currency',
      applyToProducts: 'Apply to specific products',
      duration: 'Duration',
      once: 'Once',
      forever: 'Forever',
      repeating: 'Repeating',
      durationHelp:
        'For subscriptions and customers, this determines how long this coupon will apply once redeemed. One-time invoices accept both "once" and "forever" coupons.',
      durationInMonths: 'Duration in months',
      redemptionLimits: 'Redemption limits',
      limitDateRange: 'Limit the date range when customers can redeem this coupon',
      limitTotalNumber: 'Limit the total number of times this coupon can be redeemed',
      codes: 'Codes',
      useCustomerFacingCodes: 'Use customer-facing coupon codes',
      promotionCodes: 'Promotion Codes',
      promotionCodesHelp: 'Promotion codes will be created after the coupon is saved.',
      addPromotionCode: 'Add promotion code',
      eligibleFirstTime: 'Eligible for first-time order only (each user can only use one coupon discount)',
      limitNumberRedemptions: 'Limit the number of times this code can be redeemed',
      addExpirationDate: 'Add an expiration date',
      requireMinimumOrder: 'Require minimum order value',
      addAnotherCode: 'Add another code',
      saved: 'Coupon saved successfully',
      // Promotion Code Form
      codeOptional: 'Code (Optional)',
      codeHelp: 'Leave blank to auto-generate upon creation',
      generate: 'Generate',
      verificationType: 'Verification Type',
      codeOnly: 'Code Only',
      nftVerification: 'NFT Verification',
      vcVerification: 'Passport Verification',
      userWhitelist: 'Specific Users',
      nftSettings: 'NFT Verification Settings',
      vcSettings: 'Passport Verification Settings',
      userWhitelistSettings: 'Specific Users Settings',
      nftAddresses: 'NFT Addresses',
      nftAddressesPlaceholder: 'Enter NFT contract addresses',
      nftTags: 'NFT Tags',
      nftTagsPlaceholder: 'Enter NFT tags',
      trustedIssuers: 'Trusted Issuers',
      trustedIssuersPlaceholder: 'Enter trusted issuers',
      trustedParents: 'Trusted Parents',
      trustedParentsPlaceholder: 'Enter trusted parents',
      minBalance: 'NFT Required Quantity',
      requiredRoles: 'Required Roles',
      requiredRolesPlaceholder: 'Enter required roles',
      trustedVcIssuers: 'Trusted VC Issuers',
      trustedVcIssuersPlaceholder: 'Enter trusted VC issuer DIDs',
      customerDids: 'Customer DIDs',
      customerDidsPlaceholder: 'Enter customer DIDs',
      customerDidsHelp: 'You can select existing customers or enter DID manually',
      maxRedemptions: 'Max Redemptions',
      expiresAt: 'Expires At',
      pressEnterToAdd: 'Press Enter to add',
      // Updated section names
      couponConfiguration: 'Coupon Configuration',
      selectProducts: 'Select Products',
      noProductsSelected: 'No products selected',
      newCode: 'New Code',
      createPromotionCode: 'Create Promotion Code',
      promotionCodeDescription: 'Create a promotion code for this coupon to allow customers to redeem the discount.',
      minimumAmount: 'Minimum Amount',
      minimumAmountHelp: 'Set minimum order amounts for different currencies',
      discountAmount: 'Discount Amount',
      currencies: 'Currencies',
      times: 'times',
      months: 'months',
      addProduct: 'Add another product',
      unlimited: 'Unlimited',
      inactive: 'Coupon is inactive',
      inactiveTip: 'This coupon is currently inactive and cannot be used.',
      discount: 'Discount',
      updated: 'Updated',
      timesRedeemed: 'Times Redeemed',
      deletedSuccessfully: 'Coupon deleted successfully',
      deleteConfirmTitle: 'Delete Coupon',
      deleteConfirmMessage: 'Are you sure you want to delete this coupon? This action cannot be undone.',
      cannotDeleteWithPromotionCodes: 'Cannot delete coupon with existing promotion codes',
      couponTermsPercentage: '{percent}% off',
      couponTermsFixedAmount: '{amount} {symbol} off',
      couponTerms: {
        forever: '{couponOff} forever',
        once: '{couponOff} once',
        repeating: '{couponOff} for {months} months',
      },
      couponTermsDuration: {
        forever: 'Forever',
        once: 'Once',
        repeating: 'For {months} months',
      },
      applicableProducts: 'Applicable Products',
      noApplicableProducts: 'This coupon applies to all products',
      activeRedemptions: 'Active redemptions',
      customers: 'Customers',
      subscriptions: 'Subscriptions',
      noCustomersFound: 'No customers found',
      noCustomersRedeem: 'No customers currently redeem this coupon',
      noSubscriptionsFound: 'No subscriptions found',
      noSubscriptionsRedeem: 'No subscriptions currently redeem this coupon',
      rename: 'Rename',
      renameCoupon: 'Rename coupon',
      updateCouponDetails: 'Update coupon details',
      nameWillAppear: "This will appear on customers' receipts and invoices.",
      updateCouponButton: 'Update coupon',
      discountStart: 'Discount Start',
      // Additional fields for active-redemptions
      usageStats: 'Usage Statistics',
      totalDiscounts: 'Total Discounts',
      uniqueSessions: 'Unique Sessions',
      uniqueSubscriptions: 'Unique Subscriptions',
      promotionCodesUsed: 'Promotion Codes Used',
      noExpiration: 'No Expiration',
      usagePeriod: 'Usage Period',
      firstUsed: 'First Used',
      lastUsed: 'Last Used',
      promotionCodeInfo: 'Promotion Code Info',
      directCouponUsage: 'Direct Coupon Usage',
      usageLimit: 'Usage Limit',
      discountInfo: 'Discount Info',
      discountPeriod: 'Discount Period',
      couponExpires: 'Coupon Expires',
      totalSavings: 'Total Discounts',
      viewPromotionCode: 'View Promotion Code',
    },
    discount: {
      totalSaved: 'Total Saved',
      timesUsed: 'Times Used',
      appliedDiscounts: 'Applied Discounts',
    },
    promotionCode: {
      code: 'Code',
      status: 'Status',
      redemptions: 'Redemptions',
      expires: 'Expires',
      created: 'Created',
      actions: 'Actions',
      active: 'Active',
      inactive: 'Inactive',
      expired: 'Expired',
      maxedOut: 'Maxed Out',
      viewDetails: 'View Details',
      edit: 'Edit Promotion Code',
      delete: 'Delete Promotion Code',
      archive: 'Archive Promotion Code',
      archiveTip:
        'Archiving will prevent this promotion code from being used. Are you sure you want to archive this promotion code?',
      deleteTip:
        'Deleting will permanently delete this promotion code. Are you sure you want to delete this promotion code?',
      title: 'Promotion Code',
      id: 'ID',
      type: 'Type',
      couponId: 'Coupon ID',
      maxRedemptions: 'Max Redemptions',
      timesRedeemed: 'Times Redeemed',
      verificationType: 'Verification Type',
      updated: 'Updated',
      activate: 'Activate',
      deactivate: 'Deactivate',
      inactiveTitle: 'Promotion code is inactive',
      inactiveTip: 'This promotion code is currently inactive and cannot be used.',
      deleteSuccess: 'Promotion code deleted successfully',
      activateSuccess: 'Promotion code activated successfully',
      deactivateSuccess: 'Promotion code deactivated successfully',
      verificationConfig: 'Verification Configuration',
      nftAddresses: 'NFT Addresses',
      nftTags: 'NFT Tags',
      minBalance: 'Min Balance',
      requiredRoles: 'Required Roles',
      trustedIssuers: 'Trusted Issuers',
      allowedUsers: 'Allowed Users',
      noNftConfig: 'No NFT configuration',
      noVcConfig: 'No VC configuration',
      noUsersSpecified: 'No users specified',
      codeVerificationOnly: 'Code verification only',
      unlimited: 'Unlimited',
      never: 'Never',
      yes: 'Yes',
      no: 'No',
      verificationTypeMap: {
        code: 'Code Only',
        nft: 'NFT Verification',
        vc: 'Passport Verification',
        user_restricted: 'User Whitelist',
      },
    },
    paymentLink: {
      view: 'View payment link',
      info: 'Payment link information',
      add: 'Create payment link',
      save: 'Create link',
      openLink: 'Open URL',
      copyLink: 'Copy URL',
      saved: 'Payment link successfully saved',
      additional: 'Additional options',
      beforePay: 'Payment page',
      afterPay: 'After payment',
      products: 'Products',
      addProduct: 'Add another product',
      requireBillingAddress: 'Collect customer billing addresses',
      requirePhoneNumber: 'Collect customer phone numbers',
      allowPromotionCodes: 'Allow promotion codes',
      enablePromotionCodes: 'Enable promotion codes',
      disablePromotionCodes: 'Disable promotion codes',
      enablePromotionCodesTip:
        'Enable promotion codes for this payment link. Customers will be able to apply discount codes during checkout.',
      disablePromotionCodesTip:
        'Disable promotion codes for this payment link. Customers will not be able to apply discount codes during checkout.',
      requireCrossSell: 'Require cross-sell products to be selected if eligible',
      includeFreeTrial: 'Include a free trial',
      noStakeRequired: 'No stake required',
      showProductFeatures: 'Show product features',
      allowSkipPaymentMethod: 'Allow skipping payment method for $0 checkout',
      enableSkipPaymentMethod: 'Allow skipping payment method',
      disableSkipPaymentMethod: 'Require payment method',
      enableSkipPaymentMethodTip:
        'Allow customers to skip binding a payment method when the checkout amount is $0. The subscription will auto-cancel at the end of the current period if no payment method is added.',
      disableSkipPaymentMethodTip: 'Require customers to provide a payment method even when the checkout amount is $0.',
      freeTrialDaysPositive: 'Free trial days must be positive',
      includeCustomFields: 'Add custom fields',
      confirmPage: 'Confirmation Page',
      showConfirmPage: 'Show confirmation page',
      customMessage: 'Replace default with custom message',
      customMessageTip: 'Include any details you see fit, such as delivery information.',
      noConfirmPage: 'Do not show confirmation page',
      mintNft: 'Mint NFT to user on payment',
      mintNftFrom: 'Mint from following factory (collection)',
      createInvoice: 'Creates invoices for related payments.',
      adjustable: 'Adjustable quantity',
      adjustableQuantity: 'Let customers adjust quantity',
      noProducts: 'Payment link must have at least one product',
      noRedirectUrl: 'Payment link must have a redirect url',
      noSubscriptionTrialDays: 'You must specify a trial period for subscription',
      recurringNotAligned: 'The prices on all line items must have the same recurring interval',
      currencyNotAligned: 'The prices on all line items must have the same currency settings',
      edit: 'Edit payment link',
      rename: 'Change name',
      archive: 'Archive payment link',
      archiveTip:
        'Archiving will hide this payment link from new purchases. Are you sure you want to archive this payment link?',
      remove: 'Remove payment link',
      removeTip:
        'Removing will hide this payment link from new purchases. Are you sure you want to remove this payment link?',
      name: {
        label: 'Name',
        placeholder: 'Not consumer facing',
      },
      adjustableQuantityError: 'Minimum must be less than maximum',
    },
    pricingTable: {
      view: 'View pricing table',
      add: 'Create pricing table',
      save: 'Create',
      openLink: 'Open URL',
      copyLink: 'Copy URL',
      saved: 'Pricing table successfully saved',
      edit: 'Edit pricing table',
      rename: 'Change name',
      archive: 'Archive pricing table',
      archiveTip:
        'Archiving will hide this pricing table from new purchases. Are you sure you want to archive this pricing table?',
      remove: 'Remove pricing table',
      removeTip:
        'Removing will hide this pricing table from new purchases. Are you sure you want to remove this pricing table?',
      name: {
        label: 'Name',
        placeholder: 'Not consumer facing',
      },
      display: 'Display Settings',
      highlight: 'Highlight product',
      customer: 'Customer portal',
    },
    paymentIntent: {
      list: 'Payments',
      name: 'Payment',
      view: 'View payment detail',
      empty: 'No payment intent',
      refund: 'Refund payment',
      status: {
        active: 'Active',
        paid: 'Paid',
        succeeded: 'Succeeded',
      },
      received: 'Received',
      attention: 'Failed payments',
      refundError: 'Failed to refund payment',
      refundSuccess: 'Refund application has been successfully created',
      cancelRefund: 'Cancel refund',
      refundCanceled: 'Cancel refund successfully',
      refundCanceledError: 'Failed to cancel refund',
      refundCanceledTip:
        'Are you sure you want to cancel the refund application? After cancellation, the refund will no longer be processed.',
      refundForm: {
        reason: 'Refund reason',
        amount: 'Refund amount',
        description: 'Refund description',
        duplicate: 'Duplicate payment',
        requestedByCustomer: 'Requested by customer',
        requestedByAdmin: 'Requested by admin',
        fraudulent: 'Fraudulent',
        expiredUncapturedCharge: 'Expired uncaptured charge',
        amountRange: 'Refund amount must be between {min} and {max} {symbol}',
        amountHelper: 'Refund amount must be less than or equal to {max} {symbol}',
        required: 'Please fill in the refund information',
        empty: 'The current order has been fully refunded',
      },
    },
    payout: {
      list: 'Payouts',
      name: 'Payout',
      view: 'View payout',
      empty: 'No payout',
      attention: 'Failed payouts',
      requestRefund: 'Request Refund',
      confirmRefund: 'Are you sure you want to request a refund from the vendor?',
      refundRequested: 'Refund request sent to vendor',
      refundReason: 'Refund Reason',
      refundReasonPlaceholder: 'Please enter the reason for refund (at least 5 characters)',
      refundReasonRequired: 'Refund reason is required',
      refundReasonMinLength: 'Refund reason must be at least {min} characters',
      refundReasonHelper: 'Please enter at least {min} characters',
      status: {
        active: 'Active',
        paid: 'Paid',
        succeeded: 'Succeeded',
      },
    },
    paymentMethod: {
      _name: 'Payment Method',
      type: 'Type',
      add: 'Add payment method',
      edit: 'Edit payment method',
      save: 'Save payment method',
      saved: 'Payment method successfully saved',
      settings: 'Settings',
      gasTip:
        'Ensure your account on the {chain} network has sufficient balance to cover transaction fees when using {method}.',
      recharge: 'Scan to add balance',
      props: {
        type: 'Type',
        confirmation: 'Confirmation',
        recurring: 'Recurring support',
        refund: 'Refund support',
        dispute: 'Dispute support',
        currencies: 'Currency support',
        explorer_host: 'Explorer Host',
        balance: 'Balance',
      },
      name: {
        label: 'Name',
        tip: 'Customer-facing',
      },
      description: {
        label: 'Description',
        tip: 'Not customer-facing',
      },
      stripe: {
        dashboard: {
          label: 'Dashboard URL',
          tip: 'Used to generate links to Stripe dashboard',
        },
        publishable_key: {
          label: 'Publishable Key',
          tip: 'Publishable Key, See Dashboard > Developers > API Keys',
        },
        secret_key: {
          label: 'Secret Key',
          tip: 'Secret Key, See Dashboard > Developers > API Keys',
        },
        webhook_signing_secret: {
          label: 'Webhook Signing Secret',
          tip: 'Webhook Signing Secret, See Dashboard > Developers > Webhooks > Signing Secret',
        },
        webhookHint:
          'If webhook events are not received, manually configure STRIPE_WEBHOOK_SECRET in environment variables',
        configureEnv: 'Go to Settings',
      },
      arcblock: {
        chain_id: {
          label: 'Chain ID',
          tip: 'Just a name',
        },
        api_host: {
          label: 'API Host',
          tip: 'The GraphQL endpoint to send transactions to',
        },
        explorer_host: {
          label: 'Explorer Host',
          tip: 'The web app endpoint to view transaction details',
        },
      },
      ethereum: {
        chain_id: {
          label: 'Chain ID',
          tip: 'Must be a valid EVM chain id, usually an integer, https://chainlist.org',
        },
        api_host: {
          label: 'RPC Endpoint',
          tip: 'The RPC endpoint to send transactions to',
        },
        explorer_host: {
          label: 'Explorer Host',
          tip: 'The web app endpoint to view transaction details',
        },
        native_symbol: {
          label: 'Native Symbol',
          tip: 'The symbol for native token on this chain',
        },
        confirmation: {
          label: 'Confirmation Count',
          tip: 'Number of blocks required since transaction execution',
        },
      },
      evm: {
        checking: 'Checking connection...',
        connected: 'Connected',
        connectionError: 'Connection failed',
        blockHeight: 'Block Height',
        rpcStatus: 'RPC Status',
      },
      base: {
        chain_id: {
          label: 'Chain ID',
          tip: 'Must be a valid EVM chain id, usually an integer, https://chainlist.org',
        },
        api_host: {
          label: 'RPC Endpoint',
          tip: 'The RPC endpoint to send transactions to',
        },
        explorer_host: {
          label: 'Explorer Host',
          tip: 'The web app endpoint to view transaction details',
        },
        native_symbol: {
          label: 'Native Symbol',
          tip: 'The symbol for native token on this chain',
        },
        confirmation: {
          label: 'Confirmation Count',
          tip: 'Number of blocks required since transaction execution',
        },
      },
    },
    paymentCurrency: {
      name: 'Payment Currency',
      add: 'Add Currency',
      edit: 'Edit Currency',
      save: 'Save payment currency',
      saved: 'Payment currency successfully saved',
      delete: 'Delete payment currency',
      deleteConfirm: 'Are you sure you want to delete this payment currency? Once deleted, it cannot be recovered',
      deleted: 'Payment currency successfully deleted',
      quickAdd: 'Quick add supported currency',
      searchToken: 'Search currency',
      orManualInput: 'Or manually fill in currency information below',
      logo: {
        label: 'Logo',
        tip: 'Displayed on payment page',
      },
      contract: {
        label: 'Contract',
        tip: 'Used to fetch token symbol, decimals and other info',
      },
    },
    event: {
      empty: 'No events',
      view: 'View event',
      data: 'Event Data',
      webhooks: 'Webhook Attempts',
      type: 'Type',
      pendingWebhooks: 'Pending Webhooks',
      noAttempts: 'No Attempt',
      retry: 'Retry',
      retrying: 'Retrying...',
      retryOptions: {
        title: 'Retry Webhook',
        confirmMessage:
          'Are you sure you want to retry this webhook? This will send another request to the webhook endpoint.',
        success: 'Webhook scheduled for retry',
        error: 'Failed to retry webhook',
      },
      response: 'Response',
      request: 'Request',
      eventData: 'Event Data',
    },
    invoice: {
      view: 'View invoice',
      attention: 'Uncollectible invoices',
      metric: 'Paid invoices',
      name: 'Invoice',
      status: {
        active: 'Active',
        paid: 'Paid',
        succeeded: 'Succeeded',
      },
      from: 'Billed from',
      empty: 'No invoices',
      number: 'Invoice Number',
      description: 'Billing Description',
      dueDate: 'Due',
      finalizedAt: 'Finalized At',
      paidAt: 'Payment Date',
      summary: 'Summary',
      billingContextNote: 'Invoice amounts are calculated based on real-time prices at the time of billing.',
      dynamicPricingNote: 'This invoice uses dynamic pricing with locked exchange rates.',
      billTo: 'Billed to',
      billing: 'Billing Method',
      download: 'Download PDF',
      edit: 'Edit Invoice',
      duplicate: 'Duplicate Invoice',
      retryUncollectible: {
        title: 'Retry collection',
        tip: 'Are you sure you want to retry collecting this invoice? This will attempt to charge the customer again.',
        success: 'Retry request submitted',
      },
      returnStake: {
        title: 'Return Stake',
        tip: 'Are you sure you want to return the stake? This action will return the stake to the customer immediately.',
        success: 'Stake return application has been successfully created',
      },
      void: {
        title: 'Void Invoice',
        tip: 'Are you sure you want to void this invoice? This action will immediately void the invoice.',
        success: 'Invoice voided',
      },
    },
    vendor: {
      create: 'Create Vendor',
      edit: 'Edit Vendor',
      delete: 'Delete Vendor',
      save: 'Save Vendor',
      saved: 'Vendor saved successfully',
      test: 'Test',
      testConnection: 'Test Connection',
      testConnectionTip: 'Are you sure you want to test the connection for vendor "{name}"?',
      testConnectionSuccess: 'Connection test successful',
      testConnectionFailed: 'Connection test failed',
      testSuccess: 'Connection test successful',
      testAfterSave: 'Vendor saved successfully. You can test the connection to verify the configuration.',
      testToEnable: 'Vendor saved successfully. Test the connection to enable the vendor.',
      enabled: 'Enabled',
      disabled: 'Disabled',
      addressCheckFailed: 'Address check failed, cannot save when enabled',
      updateSuccess: 'Vendor updated successfully',
      testFailed: 'Connection test failed (Status: {status})',
      testError: 'Connection test failed - network error',
      vendorKeyInvalid: 'Vendor type must contain only lowercase letters, numbers, and underscores',
      deleteTitle: 'Delete Vendor',
      deleteContent: 'Are you sure you want to delete vendor "{name}"? This action cannot be undone.',
      deleteTip: 'Are you sure you want to delete vendor "{name}"? This action cannot be undone.',
      activate: 'Activate Vendor',
      activateTip: 'Are you sure you want to activate vendor "{name}"?',
      deactivate: 'Deactivate Vendor',
      deactivateTip: 'Are you sure you want to deactivate vendor "{name}"?',
      name: 'Vendor Name',
      nameRequired: 'Vendor name is required',
      vendorType: 'Vendor Type',
      vendorTypeRequired: 'Vendor type is required',
      didnames: 'DID Names',
      launcher: 'Launcher',
      vendorKey: 'Vendor Key',
      vendorKeyRequired: 'Vendor key is required',
      vendorKeyHelp: 'Unique identifier for the vendor',
      description: 'Description',
      displayNameRequired: 'Display name is required',
      displayNameHelp: 'This name will be displayed on the installation interface after successful payment',
      appUrl: 'App URL',
      appUrlRequired: 'App URL is required',
      appUrlInvalid: 'Please enter a valid URL starting with http:// or https://',
      appUrlHelp: 'The base URL of the vendor application',
      vendorDid: 'Vendor DID',
      vendorDidInvalid: 'Please enter a valid DID',
      vendorDidHelp: 'Optional DID address for the vendor',
      webhookPath: 'Webhook Path',
      webhookPathInvalid: 'Please enter a valid path starting with /',
      webhookPathHelp: 'Optional webhook callback path (e.g., /webhooks/status)',
      blockletMetaUrl: 'Blocklet Meta URL',
      blockletMetaUrlRequired: 'Blocklet Meta URL is required',
      blockletMetaUrlInvalid: 'Please enter a valid URL starting with http:// or https://',
      blockletMetaUrlHelp: 'Required blocklet metadata URL for application information',
      commission: 'Commission',
      commissionRate: 'Commission Rate',
      commissionRateRequired: 'Commission rate is required',
      commissionRateMin: 'Commission rate must be at least 0',
      commissionRateMax: 'Commission rate is too high',
      commissionType: 'Commission Type',
      commissionRateHelp: 'Commission rate as percentage',
      commissionAmountHelp: 'Fixed commission amount',
      percentage: 'Percentage',
      fixedAmount: 'Fixed Amount',
      active: 'Active',
      inactive: 'Inactive',
      basicInfo: 'Basic Information',
      apiConfig: 'API Configuration',
      commissionConfig: 'Commission Configuration',
      status: 'Status',
      brokerDID: 'Broker DID',
      brokerPublicKey: 'Broker Public Key',
    },
    subscription: {
      view: 'View subscription',
      name: 'Subscription',
      empty: 'No subscriptions',
      status: {
        active: 'Active',
        paid: 'Paid',
        succeeded: 'Succeeded',
      },
      viewAll: 'View all subscriptions',
      noActiveEmpty: 'You currently have no active subscriptions. You can choose to view your subscription history.',
      includedServices: 'Included Services',
      serviceHome: 'Visit Service Homepage',
      serviceDashboard: 'Access Service Dashboard',
      attention: 'Past due subscriptions',
      product: 'Product',
      collectionMethod: 'Billing',
      currentPeriod: 'Current Period',
      trialingPeriod: 'Trial Period',
      trialEnd: 'Trial ends {prefix} {date}',
      willEnd: 'Will end {prefix} {date}',
      ended: 'Ended {prefix} {date}',
      renew: 'Renew {prefix} {date}',
      discount: 'Discount',
      activeDiscount: 'Active Discount',
      startedAt: 'Started',
      nextInvoice: 'Next Invoice',
      nextInvoiceAmount: 'Next Invoice Amount',
      nextInvoiceAmountTip:
        'The next invoice amount is estimated, the actual amount will be calculated based on actual usage.',
      itemId: 'Subscription Item ID',
      update: 'Update subscription',
      resume: 'Resume payment collection',
      resumeTip:
        'Are you sure you want to resume collecting payments? Any future invoices for this subscription will resume payment collection.',
      paymentAddress: 'Payment Address',
      currentBalance: 'Current Balance',
      insufficientBalance: 'Insufficient Balance, please add funds',
      cancel: {
        schedule: 'Scheduled to cancel',
        title: 'Cancel subscription',
        required: 'Custom cancel time is required',
        will: 'End {prefix} {date}',
        done: 'Canceled',
        at: {
          title: 'Cancel',
          now: 'Immediately ({date})',
          current_period_end: 'End of current period ({date})',
          custom: 'On a custom date',
          timeError: 'Cancel time must be within the current period',
        },
        refund: {
          title: 'Refund',
          none: 'No refund',
          last: 'Last payment {total}{symbol}',
          proration: 'Proration amount {unused}/{total}{symbol}',
        },
        staking: {
          title: 'Stake',
          none: 'No return or slash',
          proration: 'Return Remaining Stake {unused}{symbol}',
          slash: 'Slash Remaining Stake {unused}{symbol}',
          slashReason: 'Slash Reason',
          slashTip:
            'The remaining stake of this subscription {unused}{symbol} will be slashed, please confirm to continue?',
          slashTitle: 'Slash stake',
        },
        comment: {
          title: 'Reason',
          placeholder: 'Please provide the reason for cancellation',
        },
      },
      pause: {
        title: 'Pause payment collection',
        required: 'Custom resume time is required',
        type: {
          title: 'Pause duration',
          never: 'Indefinite',
          custom: 'Until a custom date',
        },
        behavior: {
          title: 'Invoice behavior',
          keep_as_draft: 'Keep invoices as drafts',
          keep_as_draft_tip: 'For businesses currently offering services but waiting to collect payments.',
          mark_uncollectible: 'Mark invoices as uncollectible',
          mark_uncollectible_tip: 'For businesses currently offering services for free.',
          void: 'Void invoices',
          voidTip: 'For businesses not currently offering services.',
        },
        until: {
          never: 'Collection paused',
          custom: 'Collection paused until {date}',
        },
      },
      usage: {
        title: 'Usage records',
        current: 'Usage records for current period',
        range: 'Usage records for {start} - {end}',
        view: 'View usage',
        vary: 'Varies with usage',
        used: 'Unit used',
        cycle: 'Usage cycle',
      },
      batchPay: {
        button: 'Pay due invoices',
      },
      payerAddress: 'Payment Address',
      noPaymentMethod: 'Not bound',
      bindPaymentMethod: 'Bind now',
      bindPaymentMethodFirst: 'Please bind a payment method first before resuming the subscription',
      noPaymentMethodWarning:
        'No payment method is bound to this subscription. Please bind one to avoid cancellation at the end of the current period.',
      changePayer: {
        btn: 'Change',
        stripe: {
          linkType: 'Stripe Link',
          bankAccount: 'Bank Account',
        },
        connect: {
          title: 'Change Payment Address',
          success: 'Payment Address changed successfully',
          error: 'Failed to change payment Address',
        },
      },
    },
    customer: {
      view: 'View customer',
      edit: 'Edit information',
      spent: 'Spent Amount',
      refund: 'Refund Amount',
      dispute: 'Dispute Amount',
      due: 'Due Amount',
      stake: 'Stake Amount',
      token: 'Token Balance',
      name: 'Name',
      email: 'Email',
      phone: 'Phone',
      invoicePrefix: 'Invoice Prefix',
      balance: 'Balance ({currency})',
      summary: {
        refund: 'Refunds',
        spent: 'Spent',
        due: 'Due',
        stake: 'Stake',
        stats: 'Stats',
        balance: 'Balance',
      },
      address: {
        label: 'Address',
        country: 'Country',
        state: 'State or province',
        city: 'City or town',
        line1: 'Address',
        line2: 'Line2',
        postal_code: 'Postal Code',
      },
      creditGrants: {
        title: 'Credit Grants',
        description: 'View your available credit grants and usage history',
        grants: 'Credit Grants',
        transactions: 'Credit Usage',
        summary: 'Credit Summary',
        noGrants: 'No credit grants available',
        grantDetail: 'Credit Grant Details',
        creditBalance: 'Credit Balance',
        totalAmount: 'Total Amount',
        status: {
          granted: 'Active',
          pending: 'Pending',
          expired: 'Expired',
          depleted: 'Depleted',
          voided: 'Voided',
        },
        originalAmount: 'Original Amount',
        usage: 'Usage',
        viewInvoice: 'View Invoice',
        grantId: 'Grant ID',
        currency: 'Currency',
        created: 'Created',
        effectiveDate: 'Effective Date',
        expirationDate: 'Expiration Date',
        transactionHistory: 'Transaction History',
        backToGrants: 'Back to Credit Grants',
        viewDetails: 'View Details',
        overview: 'Overview',
        relatedGrants: 'Credit Grants',
        category: 'Category',
        overviewDescription: 'Monitor all currency credit balances, usage, and outstanding debt.',
        availableBalance: 'Available Balance',
        viewGrants: 'View Grants',
        viewUsage: 'View Usage',
        recentActivity: 'Recent Activity',
        quickStats: 'Quick Stats',
        activeGrants: 'Active Grants',
        outstandingDebt: 'Outstanding Debt',
        buyCredits: 'Buy Credits',
        viewAllActivity: 'View All Activity',
        pendingAmount: 'Outstanding Charges',
        grantCount: 'Grant Count',
        noGrantsDescription: "You don't have any credit grants yet.",
        addCredit: 'Add Credit',
      },
    },
    passport: {
      intro:
        'Manage payment settings for blocklet passports, you should assign both product and payment entry to a passport to make it available for purchase.',
      payLink: 'Payment entry',
      payPreview: 'Payment preview',
      preview: 'Preview payment page',
      assign: 'Assign to passport',
      assignTip: 'Assign this payment link to selected passport to make it available for purchase',
      unassign: 'Reset purchase config',
      unassignTip: 'Confirm to clear the payment entry and product config for this passport?',
      assignError: 'Must select a passport to assign',
    },
    webhookEndpoint: {
      hosted: 'Hosted endpoints',
      add: 'Add endpoint',
      addTip: 'Set up your webhook endpoint to receive live events from',
      listen: 'Listen for',
      version: 'API Version',
      attempts: 'Webhook attempts',
      url: {
        label: 'URL',
        description: 'Endpoint URL',
      },
      description: {
        label: 'Description',
        description: 'An optional description of what this endpoint is used for.',
      },
      events: {
        label: 'Select events to listen to',
        description: '',
      },
    },
    refund: {
      name: 'Refunds',
      view: 'View refund detail',
      attention: 'Failed refunds',
      status: {
        active: 'Active',
        paid: 'Paid',
        succeeded: 'Succeeded',
      },
    },
    usageRecord: {
      empty: 'No usage records',
      add: {
        label: 'Add usage record',
        success: 'Successfully added usage record',
        quantity: 'Quantity',
      },
    },
    donate: {
      title: 'Donation Settings',
      mountLocation: 'Mount Location',
      component: 'Component',
      description: 'Description',
      status: {
        title: 'Status',
        active: 'Enable',
        inactive: 'Disable',
        inactiveTip:
          'After disabling donations, the donation button will no longer be displayed and users cannot use the donation feature. Are you sure you want to disable it?',
        inactiveTitle: 'Disable Donation',
        activeSuccess: 'Donation feature has been enabled',
        inactiveSuccess: 'Donation feature has been disabled',
      },
      editTitle: 'Edit Donation Settings',
      updateSuccess: 'Donation settings have been updated',
      amountSettings: 'Amount Settings',
      presets: 'Preset Amounts',
      presetsHelper: 'Enter preset amounts, separated by commas (e.g., 1,5,10)',
      preset: 'Default Amount',
      presetHelper: 'Default selected amount (must be one of the presets)',
      custom: 'Allow Custom Amount',
      minimum: 'Minimum Amount',
      maximum: 'Maximum Amount',
      amountRange: 'Amount Range: {min} - {max}',
      customAmount: 'Custom Amount',
      buttonSettings: 'Donation Button Settings',
      btn: {
        text: 'Button Text',
        helper: 'Set the text displayed on the donation button',
        preview: 'Button Preview',
      },
      dialog: {
        preview: 'Donation Dialog Preview',
        confirmButton: 'Confirm Donation {amount}',
      },
      previewTitle: 'Live Preview',
      validation: {
        invalidPreset: 'Default amount must be one of the presets',
        invalidRange: 'Minimum amount must be less than maximum amount',
        invalidAmount: 'Amount must be within allowed range',
      },
      historyType: {
        title: 'Donation History Display',
        avatar: 'Avatar Wall',
        list: 'List',
      },
      intro:
        'Configure the display effect of the donation button and donation dialog, and the donation feature will take effect after completion.',
      usage: {
        viewExample: 'View Usage Example',
        title: 'Donation Component Usage Example',
        description:
          'To use the donation feature, you need to correctly configure PaymentProvider and DonateProvider in the component. Here is a basic example:',
        note: 'Note: mountLocation must be unique, used to identify the donation instance. After configuration, the instance will appear in the list, and you can make further settings.',
      },
    },
    vaultConfig: {
      title: 'Vault',
      learnMore: 'Learn more about vault configuration',
      goToConfig: 'Go to system configuration',
      description:
        'By enabling the vault wallet, you create a secure offline storage solution that automatically transfers excess funds when your hot wallet balance exceeds the threshold. This separation significantly enhances security by keeping the majority of your assets safely offline, protected from potential online threats.',
      notConfigured: 'Vault wallet not configured',
      configureFirst:
        'Please #go to the dashboard# to configure the vault wallet address before setting up individual currencies.',
      ownerOnly: 'Only administrators with owner permissions can modify vault wallet settings.',
      permissionRequired: 'Owner permissions required',
      enabled: 'Status',
      enabledYes: 'Enabled',
      enabledNo: 'Disabled',
      depositThreshold: 'Deposit Threshold',
      withdrawThreshold: 'Withdrawal Threshold',
      bufferThreshold: 'Buffer Threshold',
      bufferThresholdHelp:
        'Only when the amount exceeding the deposit threshold reaches the buffer threshold will the collection operation be triggered.',
      bufferThresholdInvalid: 'Buffer threshold must be at least 0',
      edit: 'Configure',
      enable: 'Enable',
      editTitle: 'Configure {currency} Vault Settings',
      enableTitle: 'Enable Vault Wallet for {currency}',
      enableVault: 'Enable Vault Wallet',
      enableVaultHelp:
        'When enabled, excess funds automatically transfer to the vault wallet, and withdrawals exceeding the threshold require admin approval for security and risk control.',
      depositThresholdHelp:
        'When the hot wallet balance exceeds this amount, the excess funds will be automatically transferred to the vault wallet.',
      withdrawThresholdHelp:
        'For withdrawals exceeding this amount, approval from the vault wallet administrator is required.',
      notConfig: 'Not configured',
      noLimit: 'No limit',
      withdrawThresholdNoLimit: '0 means no withdrawal limit',
      depositThresholdRequired: 'Deposit threshold must be greater than 0',
      withdrawThresholdInvalid: 'Withdrawal threshold must be at least 0',
      enableSuccess: 'Successfully enabled vault wallet for {currency}',
      disableSuccess: 'Successfully disabled vault wallet for {currency}',
      updateSuccess: 'Successfully updated vault wallet settings for {currency}',
      depositConfirmTitle: 'Deposit to Vault',
      depositConfirmMessage:
        '{currency} balance has exceeded the threshold, do you want to deposit to vault immediately?',
      depositQueued: 'Deposit to vault request queued, please check the result later',
      depositFailed: 'Deposit to vault request failed',
      appBalance: 'App Balance',
    },
    creditGrants: {
      tab: 'Grants',
      title: 'Credits',
      summary: 'Credit Summary',
      noGrants: 'No credit grants found',
      grantDetail: 'Credit Grant Details',
      overview: 'Overview',
      overviewDescription: 'Monitor credit balances, usage, and outstanding debt across all currencies.',
      availableBalance: 'Available Balance',
      usage: 'Usage',
      viewGrants: 'View Grants',
      viewUsage: 'View Usage',
      recentActivity: 'Recent Activity',
      quickStats: 'Quick Stats',
      activeGrants: 'Active Grants',
      totalCreditValue: 'Total Credit Value',
      outstandingDebt: 'Outstanding Debt',
      buyCredits: 'Buy Credits',
      viewAllActivity: 'View All Activity',
      creditBalance: 'Credit Balance',
      totalAmount: 'Total Amount',
      pendingAmount: 'Pending Amount',
      grantCount: 'Grant Count',
      noGrantsDescription: "You don't have any credit grants yet.",
      status: {
        granted: 'Active',
        pending: 'Pending',
        expired: 'Expired',
        depleted: 'Depleted',
        voided: 'Voided',
      },
      originalAmount: 'Original Amount',
      grantId: 'Grant ID',
      grants: 'Grants',
      addCredit: 'Add Credit',
      viewDetails: 'View Details',
    },
    creditTransactions: {
      tab: 'Transactions',
      title: 'Transactions',
      summary: 'Transaction Summary',
      noTransactions: 'No credit transactions found',
      totalTransactions: 'Total Transactions',
      totalCreditUsed: 'Total Credit Used',
      transactionDate: 'Transaction Date',
    },
    exchangeRateProvider: {
      title: 'Exchange Rate Providers',
      subtitle: 'Manage exchange rate data sources for dynamic pricing',
      medianStrategyNote:
        'Exchange rates are calculated automatically using multiple data sources. You only need to manage this list when a provider is consistently failing or needs to be temporarily disabled.',
      disableConfirmTitle: 'Disable Provider?',
      disableConfirmMessage: 'Disabling this provider may affect dynamic pricing payments. Are you sure?',
      table: {
        name: 'Name',
        participation: 'Participation',
        health: 'Health',
        recentActivity: 'Recent Activity',
        trustLevel: 'Trust Level',
        trustLevelTip:
          'Indicates confidence and eligibility for rate calculation. Higher values do not mean preferred or primary source.',
        enabled: 'Enabled',
        lastUpdate: 'Last update: {time}',
        failures24h: 'Failures (24h): {count}',
      },
      participation: {
        included: 'Included',
        excluded: 'Excluded',
      },
      health: {
        active: 'Healthy',
        degraded: 'Unstable',
        paused: 'Outlier',
        inactive: 'Outlier',
      },
      status: {
        active: 'Active',
        degraded: 'Degraded',
        paused: 'Paused',
        inactive: 'Inactive',
      },
      create: {
        title: 'Add Provider',
        primaryAction: 'Add Exchange Rate Provider',
      },
      edit: {
        title: 'Edit {name}',
        name: 'Name',
        nameHelp: 'Unique identifier for this data source',
        nameRequired: 'Name is required',
        type: 'Provider Type',
        typeHelp: 'Data source type. Cannot be changed after creation.',
        baseUrl: 'Base URL (Optional)',
        baseUrlHelp: 'Custom base URL for proxy or self-hosted instance. Default: {defaultUrl}',
        apiKey: 'API Key',
        apiKeyHelp: 'API key for accessing the data source.',
        apiKeyLinkText: 'Get your API key at',
        apiKeyLinkAction: 'CoinMarketCap account',
        testConnection: 'Test Connection',
        testing: 'Testing...',
        testSuccess: 'Connection successful ({symbol}/USD: {rate}, {time}ms)',
        testFailed: 'Connection failed: {error}',
        enabled: 'Enabled',
        priority: 'Priority',
        priorityHelp: 'Lower number = higher priority. Providers are used in priority order.',
        status: 'Status',
        statusHelp: 'Set to "paused" to temporarily disable this provider.',
        pausedReason: 'Paused Reason',
        pausedReasonHelp: 'Explain why this provider is paused (optional).',
      },
    },
  },
  empty: {
    image: 'No Image',
    refunds: 'No Refunds',
    invoices: 'No Invoices',
    subscriptions: 'No Subscriptions',
    customers: 'No Customers',
    products: 'No Products',
    invoiceItems: 'No Invoice Items',
    payouts: 'No Payouts',
    paymentLinks: 'No Payment Links',
    paymentMethods: 'No Payment Methods',
    pricingTables: 'No Pricing Tables',
    paymentCurrencies: 'No Payment Currencies',
    webhooks: 'No Webhooks',
    events: 'No Events',
    records: 'No matching records found',
    payments: 'No Payments',
    prices: 'No Prices',
    pricing: "You haven't added any prices you can add it",
    summary: 'No Summary',
  },
  customer: {
    subscription: {
      cancel: 'Cancel Subscription',
      manage: 'Manage Subscription',
      title: 'Subscriptions',
    },
    invoiceHistory: 'Invoice History',
    product: {
      empty: 'No Products',
    },
    credit: {
      recharge: 'Buy Credits',
      autoRecharge: 'Auto Top-up',
      unsupported: 'Not supported yet',
    },
    recharge: {
      title: 'Add Funds',
      amount: 'Amount',
      submit: 'Submit',
      unsupported: 'Unsupported currency, please select another one',
      receiveAddress: 'Receive Address',
      view: 'View Subscription',
      success: 'Add funds successfully',
      custom: 'Custom',
      estimatedDuration: '{duration} {unit} est.',
      intervals: 'intervals',
      history: 'Fund History',
      relatedSubscriptions: 'Related Subscriptions',
      rechargeTooltip: 'Click to add funds',
    },
    delegation: {
      title:
        'Seems your delegation to this blocklet is revoked or insufficient, which will cause automatic payment failures for your subscription.',
      btn: 'Delegate Now',
      success: 'Delegate successful',
      error: 'Delegate failed',
    },
    overdraftProtection: {
      title: 'SubGuard™',
      setting: 'Set SubGuard™',
      learnMore: 'Click to learn more about SubGuard™',
      tip: 'To avoid service interruption due to unpaid invoices, you can enable SubGuard™ by staking. Timely payment will not incur additional fees. Please settle your invoices promptly. If your available stake is insufficient or payment is overdue, we will deduct the amount from your stake and charge a service fee.',
      enabled: 'Enabled',
      disabled: 'Disabled',
      returnRemaining: 'Return Remaining Stake',
      returnRemainingTip:
        'Once the remaining stake is returned, the SubGuard™ will be automatically disabled. Please confirm the action.',
      applyRemainingSuccess: 'Stake return application successful',
      remaining:
        'Your current remaining stake: {amount} {symbol}, estimated required stake per cycle: {estimateAmount} {symbol}.',
      noRemaining:
        'No remaining stake available. Please stake at least {estimateAmount} {symbol} as soon as possible to ensure SubGuard™ is enabled.',
      remainingNotEnough:
        'You have unpaid invoices totaling {due} {symbol}. If not paid, your remaining stake will be insufficient to cover the next invoice. Available stake: {unused} {symbol}. Please stake at least {min} {symbol}.',
      due: 'Please pay the outstanding amount first',
      insufficient: 'Insufficient Stake to cover the next invoice, please add stake',
      insufficientTip: 'Insufficient Stake, please stake to ensure SubGuard™ is enabled.',
      intervals: 'cycles',
      estimatedDuration: '{duration} {unit} est.',
      rule: 'Rule: N * ( P + Fee )',
      ruleTip:
        'N is the number of cycles, P is the subscription bill amount, Fee is the SubGuard™ service fee, the single fee is {gas} {symbol}',
      min: 'The amount must be greater or equal to {min} {symbol}',
      settingSuccess: 'Settings Updated',
      settingError: 'Failed to update SubGuard™ settings',
      openSuccess: 'SubGuard™ Enabled',
      closeSuccess: 'SubGuard™ Disabled',
      keepStake: 'Keep Remaining Stake For SubGuard™',
      returnStake: 'Return Remaining Stake',
      stake: 'Stake',
      address: 'Staking Address',
      total: 'Total Stake: {total} {symbol}, ',
      disableConfirm: 'You currently have unpaid invoices, please settle your invoices first.',
      open: 'Enable SubGuard™',
      payerAddress: 'Payer',
      stakingAddress: 'Staking Address',
    },
    unpaidInvoicesWarning: 'You currently have unpaid invoices, please settle your invoices first.',
    unpaidInvoicesWarningTip: 'You currently have unpaid invoices, please settle your invoices promptly.',
    pendingAmountWarningTip:
      'You have {amount} {symbol} in unpaid usage charges due to insufficient credit balance. Please top up your account.',
    invoice: {
      relatedInvoice: 'Related Invoice',
      donation: 'Donation',
      creditsInfo: 'Total {amount} included',
      appliedDiscounts: 'Applied Discounts',
      priceChanged:
        'The exchange rate has changed by {percent}%. The payment amount will be updated. Do you want to continue?',
      paymentCancelled: 'Payment cancelled',
      paymentMethodChanged: 'Payment method changed',
      priceChangeTitle: 'Price Changed',
      priceChangeDescription: 'The exchange rate has {direction} by {percent}%. Your payment amount will be updated.',
      currentPaymentMethod: 'Current Payment Method',
      otherPaymentMethods: 'Or pay with another method',
      confirmAndPay: 'Confirm & Pay',
      switchAndPay: 'Switch & Pay',
      current: 'current',
    },
    payout: {
      empty: 'No Revenues',
      payer: 'Payer',
      receiver: 'Receiver',
      payTxHash: 'Payment TxHash',
      viewReference: 'View Reference',
      title: 'Revenues',
    },
    pastDue: {
      warning: 'You have due invoices, please pay them to keep your services active',
      invoices: 'Due Invoices',
      payNow: 'Pay Now',
      alert: 'You have due invoices. Please pay them promptly to avoid service interruption.',
      title: 'Settle Due Invoices',
    },
    quote: {
      title: 'Price Quotes',
      noQuotes: 'No price quotes for this invoice',
      id: 'Quote ID',
      pricingDetails: 'Pricing Details',
      baseAmount: 'Base Amount',
      exchangeRate: 'Exchange Rate',
      consensusMethod: 'Consensus',
      // eslint-disable-next-line no-template-curly-in-string
      referenceRate: 'Reference Rate: 1 {symbol} ≈ ${rate}',
      quotedAmount: 'Quoted Amount',
      providerInfo: 'Rate Provider',
      provider: 'Provider',
      rateTimestamp: 'Rate Timestamp',
      slippage: 'Slippage',
      lifecycle: 'Lifecycle',
      expiresAt: 'Expires At',
      riskInfo: 'Risk Information',
      deviation: 'Price Deviation',
      anomalyDetected: 'Anomaly Detected',
      degraded: 'Degraded',
      status: {
        active: 'Active',
        used: 'Used',
        paid: 'Paid',
        expired: 'Expired',
        cancelled: 'Cancelled',
        failed: 'Failed',
      },
    },
  },
  integrations: {
    description: 'Configure and manage how Payment Kit integrates with your application.',
    basicFeatures: 'Basic Features',
    advancedFeatures: 'Advanced Features',
    features: {
      products: {
        title: 'Create Products',
        intro: 'Create and manage your products or services',
      },
      paymentLinks: {
        title: 'Payment Links',
        intro: 'Create shareable payment links for quick checkout',
      },
      pricingTables: {
        title: 'Pricing Tables',
        intro: 'Create beautiful pricing tables for your products',
      },
      metering: {
        title: 'Usage Metering',
        intro: 'Track usage with meters and sell credits as top-up packages',
        dialog: {
          title: 'How to set up credit-based metering',
          description:
            'Credit-based metering allows you to track usage and charge customers based on consumption. Follow these steps to get started:',
          steps: {
            step1: {
              title: 'Create a meter to track your usage events',
              description:
                'Set up meters to monitor API calls, data usage, or any measurable activity in your application.',
            },
            step2: {
              title: 'Create Credit top-up products and pricing',
              description:
                'Define credit packages that customers can purchase, with flexible pricing models and validity periods.',
            },
            step3: {
              title: 'Create a payment link and share it so users can buy Credits',
              description: 'Generate shareable payment links that allow customers to easily purchase credit packages.',
            },
            step4: {
              title: 'Integrate and report Credit usage',
              description:
                'Use our SDK to report usage events and automatically deduct credits from customer balances.',
            },
          },
          docText: 'Read the credit billing guide',
        },
      },
      promotions: {
        title: 'Promotions',
        intro: 'Create coupons and promotion codes to drive conversions',
      },
      donate: {
        title: 'Donation',
        intro: 'Add donation button to your application with <CheckoutDonate />',
      },
      paymentMethods: {
        title: 'Payment Methods',
        intro: 'Configure multiple payment methods and currencies',
      },
      api: {
        title: 'API Integration',
        intro: 'Integrate with our JavaScript SDK for custom solutions',
        link: 'https://www.npmjs.com/package/@blocklet/payment-js',
      },
    },
    viewDocs: 'View docs',
  },
});
