export default {
  common: {
    loading: 'Loading...',
    submitting: 'Submitting...',
    justNow: 'just now',
    peakRateTooltip: 'Peak rate: {window}',
    peakRateImageNote: '; image tokens billed as tokens are also affected, per-image billing is unaffected',
    save: 'Save',
    saved: 'Saved successfully',
    deleted: 'Deleted successfully',
    cancel: 'Cancel',
    delete: 'Delete',
    edit: 'Edit',
    create: 'Create',
    update: 'Update',
    confirm: 'Confirm',
    reset: 'Reset',
    search: 'Search',
    filter: 'Filter',
    export: 'Export',
    import: 'Import',
    actions: 'Actions',
    status: 'Status',
    name: 'Name',
    email: 'Email',
    password: 'Password',
    submit: 'Submit',
    back: 'Back',
    next: 'Next',
    yes: 'Yes',
    no: 'No',
    all: 'All',
    none: 'None',
    selectAll: 'Select all',
    noData: 'No data',
    expand: 'Expand',
    collapse: 'Collapse',
    success: 'Success',
    error: 'Error',
    critical: 'Critical',
    warning: 'Warning',
    info: 'Info',
    active: 'Active',
    inactive: 'Inactive',
    more: 'More',
    close: 'Close',
    toggleMenu: 'Toggle menu',
    userMenu: 'User menu',
    pageNotFound: 'Page not found',
    enabled: 'Enabled',
    disabled: 'Disabled',
	    total: 'Total',
	    balance: 'Balance',
	    availableBalance: 'Available balance',
	    frozenBalance: 'Frozen balance',
	    totalBalance: 'Total balance',
	    available: 'Available',
    copiedToClipboard: 'Copied to clipboard',
    copied: 'Copied',
    copyFailed: 'Failed to copy',
    verifying: 'Verifying...',
    processing: 'Processing...',
    contactSupport: 'Contact Support',
    add: 'Add',
    invalidEmail: 'Please enter a valid email address',
    optional: 'optional',
    selectOption: 'Select an option',
    searchPlaceholder: 'Search...',
    noOptionsFound: 'No options found',
    noGroupsAvailable: 'No groups available',
    unknownError: 'Unknown error occurred',
    saving: 'Saving...',
    selectedCount: '({count} selected)',
    refresh: 'Refresh',
    autoRefresh: {
      title: 'Auto Refresh',
      enable: 'Enable auto refresh',
      countdown: 'Auto refresh: {seconds}s',
      seconds: '{n} seconds',
    },
    view: 'View',
    settings: 'Settings',
    chooseFile: 'Choose File',
    upload: 'Upload',
    remove: 'Remove',
    noFileSelected: 'No file selected',
    selectedFile: 'Selected: {name}',
    fileReadFailed: 'Failed to read file',
    selectImageFile: 'Please select an image file',
    fileTooLargeKb: 'File too large ({size} KB), max {max} KB',
    copy: 'Copy',
    notAvailable: 'N/A',
    now: 'Now',
    today: 'Today',
    tomorrow: 'Tomorrow',
    unknown: 'Unknown',
    minutes: 'min',
    time: {
      never: 'Never',
      justNow: 'Just now',
      minutesAgo: '{n}m ago',
      hoursAgo: '{n}h ago',
      daysAgo: '{n}d ago',
      countdown: {
        daysHours: '{d}d {h}h',
        hoursMinutes: '{h}h {m}m',
        minutes: '{m}m',
        withSuffix: '{time} to lift'
      }
    }
  },

  adminCompliance: {
    title: 'Deployment and Operation Compliance Acknowledgment',
    blockingNotice: 'Deployment and operation compliance acknowledgment is required before continuing to use the console.',
    riskNotice: 'This acknowledgment provides clear, conspicuous, and reproducible notice of compliance obligations and operation risks for self-hosted instances.',
    version: 'Document Version',
    openDocument: 'Open the GitHub document',
    documentSource: 'The agreement text comes from Markdown files in this project repository. When the agreement content changes, the document version must be incremented; acknowledgments of older versions become invalid and console users must acknowledge again.',
    inputLabel: 'Type the following confirmation phrase exactly',
    inputPlaceholder: 'Type the confirmation phrase to continue',
    inputMismatch: 'The confirmation phrase does not match. Type the displayed text exactly.',
    legalNote: 'This acknowledgment defines the no-affiliation relationship and responsibility boundary between self-hosted instances and the open-source project, copyright holders, contributors, and maintainers. The party that deploys, operates, or controls the relevant instance remains independently responsible for its applicable obligations.',
    logout: 'Log out',
    accept: 'Acknowledge and Continue',
    accepted: 'Compliance acknowledgment recorded',
    acceptFailed: 'Failed to submit acknowledgment'
  },

  legal: {
    loadFailed: 'Failed to load document',
    retryLater: 'Refresh the page and try again later.',
    notFound: 'Document not found',
    notFoundDescription: 'This legal document does not exist or has been removed by an administrator.',
    updatedAt: 'Updated: {date}',
    empty: 'No content',
    loginAgreement: 'Login Agreement',
    adminCompliance: 'Deployment and Operation Compliance Commitment',
    loginAgreementPrompt: {
      checkboxPrefix: 'I have read and agree to ',
      documentSeparator: ', ',
      noticeTitle: 'Accept the latest terms before continuing.',
      noticeDescription: 'Account/password login and quick sign-in stay disabled until you accept.',
      viewTerms: 'View terms',
      dialogTitle: 'Terms Update Notice',
      dialogDescription: 'Our service terms were updated on {date}. Please read and accept the following terms before continuing.',
      recently: 'recently',
      relatedDocuments: 'Related documents',
      reject: 'Reject',
      accept: 'Accept and continue',
      loginRejectedWarning: 'Account/password login and quick sign-in are disabled until you accept the latest terms.',
      loginRequiredWarning: 'Please read and accept the latest terms before logging in.',
      registerRejectedWarning: 'Registration and quick sign-in are disabled until you accept the latest terms.',
      registerRequiredWarning: 'Please read and accept the latest terms before registering.'
    }
  },

  // Navigation
  nav: {
    dashboard: 'Dashboard',
    announcements: 'Announcements',
    apiKeys: 'API Keys',
    batchImage: 'Batch Images',
    usage: 'Usage',
    redeem: 'Redeem',
    affiliate: 'Affiliate Rebates',
    affiliateManagement: 'Affiliate Rebates',
    affiliateInviteRecords: 'Invite Records',
    affiliateRebateRecords: 'Rebate Records',
    affiliateTransferRecords: 'Transfer Records',
    profile: 'Profile',
    users: 'Users',
    groups: 'Groups',
    channels: 'Channels',
    availableChannels: 'Available Channels',
    modelPlaza: 'Model Plaza',
    subscriptions: 'Subscriptions',
    accounts: 'Accounts',
    proxies: 'Proxies',
    redeemCodes: 'Redeem Codes',
    ops: 'Ops',
    promoCodes: 'Promo Codes',
    settings: 'Settings',
    myAccount: 'My Account',
    lightMode: 'Light Mode',
    darkMode: 'Dark Mode',
    collapse: 'Collapse',
    expand: 'Expand',
    logout: 'Logout',
    github: 'GitHub',
    mySubscriptions: 'My Subscriptions',
    buySubscription: 'Recharge / Subscription',
    docs: 'Docs',
    myOrders: 'My Orders',
    orderManagement: 'Orders',
    paymentDashboard: 'Payment Dashboard',
    paymentConfig: 'Payment Config',
    paymentPlans: 'Plans',
    channelManagement: 'Channels',
    channelPricing: 'Channel Pricing',
    channelMonitor: 'Channel Monitor',
    channelStatus: 'Channel Status',
    riskControl: 'Risk Control',
    securityAudit: 'Security Audit',
    contentModeration: 'Content Moderation',
    promptAudit: 'Prompt Audit',
    auditLogs: 'Audit Logs',
  },

  // Auth
  auth: {
    welcomeBack: 'Welcome Back',
    signInToAccount: 'Sign in to your account to continue',
    signIn: 'Sign In',
    signingIn: 'Signing in...',
    passkeySignIn: 'Sign in with a passkey',
    passkeySigningIn: 'Waiting for passkey...',
    passkeyCancelled: 'Passkey sign-in was cancelled.',
    passkeyFailed: 'Passkey sign-in failed. Please try again.',
    createAccount: 'Create Account',
    signUpToStart: 'Sign up to start using {siteName}',
    signUp: 'Sign up',
    processing: 'Processing...',
    continue: 'Continue',
    rememberMe: 'Remember me',
    dontHaveAccount: "Don't have an account?",
    alreadyHaveAccount: 'Already have an account?',
    registrationDisabled: 'Registration is currently disabled. Please contact the administrator.',
    emailLabel: 'Email',
    emailPlaceholder: 'Enter your email',
    passwordLabel: 'Password',
    passwordPlaceholder: 'Enter your password',
    createPasswordPlaceholder: 'Create a strong password',
    passwordHint: 'At least 6 characters',
    emailRequired: 'Email is required',
    invalidEmail: 'Please enter a valid email address',
    passwordRequired: 'Password is required',
    passwordMinLength: 'Password must be at least 6 characters',
    loginFailed: 'Login failed. Please check your credentials and try again.',
    errors: {
      USER_NOT_ACTIVE: 'Account has been disabled.',
    },
    registrationFailed: 'Registration failed. Please try again.',
    emailDomainRegistrationLimit:
      'This email domain cannot register another account. Please use a mainstream email, or contact support to add your enterprise domain to the allowlist.',
    emailSuffixNotAllowed: 'This email domain is not allowed for registration.',
    emailSuffixNotAllowedWithAllowed:
      'This email domain is not allowed. Allowed domains: {suffixes}',
    emailSuffixAllowedMore: 'and {count} more',
    loginSuccess: 'Login successful! Welcome back.',
    accountCreatedSuccess: 'Account created successfully! Welcome to {siteName}.',
    reloginRequired: 'Session expired. Please log in again.',
    turnstileExpired: 'Verification expired, please try again',
    turnstileFailed: 'Verification failed, please try again',
    captchaVerified: 'Verification completed',
    captchaLoading: 'Loading verification…',
    captchaClickToVerify: 'Click to complete verification',
    captchaVerifying: 'Verifying…',
    completeVerification: 'Please complete the verification',
    verifyYourEmail: 'Verify Your Email',
    sessionExpired: 'Session expired',
    sessionExpiredDesc: 'Please go back to the registration page and start again.',
    verificationCode: 'Verification Code',
    verificationCodeHint: 'Enter the 6-digit code sent to your email',
    sendingCode: 'Sending...',
    sendCode: 'Send code',
    clickToResend: 'Click to resend code',
    resendCode: 'Resend verification code',
    sendCodeDesc: "We'll send a verification code to",
    codeSentSuccess: 'Verification code sent! Please check your inbox.',
    verifying: 'Verifying...',
    verifyAndCreate: 'Verify & Create Account',
    resendCountdown: 'Resend code in {countdown}s',
    backToRegistration: 'Back to registration',
    sendCodeFailed: 'Failed to send verification code. Please try again.',
    verifyFailed: 'Verification failed. Please try again.',
    codeRequired: 'Verification code is required',
    invalidCode: 'Please enter a valid 6-digit code',
    promoCodeLabel: 'Promo Code',
    promoCodePlaceholder: 'Enter promo code (optional)',
    promoCodeValid: 'Valid! You will receive ${amount} bonus balance',
    promoCodeInvalid: 'Invalid promo code',
    promoCodeNotFound: 'Promo code not found',
    promoCodeExpired: 'This promo code has expired',
    promoCodeDisabled: 'This promo code is disabled',
    promoCodeMaxUsed: 'This promo code has reached its usage limit',
    promoCodeAlreadyUsed: 'You have already used this promo code',
    promoCodeValidating: 'Promo code is being validated, please wait',
    promoCodeInvalidCannotRegister: 'Invalid promo code. Please check and try again or clear the promo code field',
    invitationCodeLabel: 'Invitation Code',
    invitationCodePlaceholder: 'Enter invitation code',
    invitationCodeRequired: 'Invitation code is required',
    invitationCodeValid: 'Invitation code is valid',
    invitationCodeInvalid: 'Invalid or used invitation code',
    invitationCodeValidating: 'Validating invitation code...',
    invitationCodeInvalidCannotRegister: 'Invalid invitation code. Please check and try again',
    oauthOrContinue: 'or continue with others',
    linuxdo: {
      signIn: 'Continue with Linux.do',
      orContinue: 'or continue with email',
      callbackTitle: 'Signing you in',
      callbackProcessing: 'Completing login, please wait...',
      callbackHint: 'If you are not redirected automatically, go back to the login page and try again.',
      callbackMissingToken: 'Missing login token, please try again.',
      backToLogin: 'Back to Login',
      invitationRequired: 'This Linux.do account is not yet registered. The site requires an invitation code — please enter one to complete registration.',
      invalidPendingToken: 'The registration token has expired. Please sign in with Linux.do again.',
      completeRegistration: 'Complete Registration',
      completing: 'Completing registration…',
      completeRegistrationFailed: 'Registration failed. Please check your invitation code and try again.'
    },
    dingtalk: {
      signIn: 'Continue with DingTalk',
      callbackTitle: 'Signing you in with DingTalk',
      callbackProcessing: 'Completing DingTalk login, please wait...',
      callbackHint: 'If you are not redirected automatically, go back to the login page and try again.',
      callbackMissingToken: 'Missing login token, please try again.',
      backToLogin: 'Back to Login',
      invitationRequired: 'This DingTalk account is not yet registered. The site requires an invitation code — please enter one to complete registration.',
      invalidPendingToken: 'The registration token has expired. Please sign in with DingTalk again.',
      completeRegistration: 'Complete Registration',
      completing: 'Completing registration…',
      completeRegistrationFailed: 'Registration failed. Please check your invitation code and try again.',
      createAccountTitle: 'Create DingTalk Account',
      registrationDisabledRedirectToBind: 'New account registration is currently disabled. Please bind to your existing account with its email and password.',
      error: {
        title: 'DingTalk Sign-in Failed',
        csrf: 'Login session expired, please scan again',
        corp_rejected: 'Your DingTalk account is not part of this organization. Please contact administrator',
        dingtalk_not_enabled: 'DingTalk login is not enabled',
        upstream_error: 'DingTalk service is temporarily unavailable. Please try again later',
        missing_browser_session: 'Browser session lost. Please login again',
        missing_params: 'Request parameters are incomplete',
        invalid_state: 'Invalid login state',
        provider_error: 'DingTalk authorization failed',
        session_error: 'Failed to create session. Please retry',
        retry: 'Retry Login'
      }
    },
    emailOAuth: {
      signIn: 'Continue with {providerName}'
    },
    oidc: {
      signIn: 'Continue with {providerName}',
      callbackTitle: 'Signing you in with {providerName}',
      callbackProcessing: 'Completing login with {providerName}, please wait...',
      callbackHint: 'If you are not redirected automatically, go back to the login page and try again.',
      callbackMissingToken: 'Missing login token, please try again.',
      backToLogin: 'Back to Login',
      invitationRequired:
        'This {providerName} account is not yet registered. The site requires an invitation code — please enter one to complete registration.',
      invalidPendingToken: 'The registration token has expired. Please sign in again.',
      completeRegistration: 'Complete Registration',
      completing: 'Completing registration…',
      completeRegistrationFailed: 'Registration failed. Please check your invitation code and try again.'
    },
    oauthFlow: {
      profileDetailsTitle: 'Use {providerName} profile details',
      profileDetailsDescription: 'Choose whether to apply the nickname or avatar from {providerName} to this account.',
      useDisplayName: 'Use display name',
      useAvatar: 'Use avatar',
      avatarAlt: '{providerName} avatar',
      reviewProfileBeforeContinue: 'Review the {providerName} profile details before continuing.',
      chooseHowToContinue: 'Choose how to continue',
      chooseAccountActionHint: 'Choose whether to bind an existing account or create a new one.',
      suggestedEmail: 'Suggested email: {email}',
      bindExistingAccount: 'Bind existing account',
      createNewAccount: 'Create new account',
      createAccountHint: 'Enter an email address to create your account and continue.',
      bindLoginHint: 'Log in to an existing account to bind this {providerName} sign-in.',
      signInThenBindDescription: 'Sign in to an existing account, then bind this {providerName} sign-in to it.',
      bindSignInToExistingAccount: 'Bind this {providerName} sign-in to an existing account.',
      bindCurrentAccountTitle: 'Bind the current account',
      bindCurrentAccountDescription: 'Bind this {providerName} sign-in to the account currently signed in on this browser.',
      bindCurrentAccount: 'Bind current account',
      logInAndBind: 'Log in and bind',
      useDifferentEmail: 'Use a different email',
      backToOptions: 'Back to options',
      yourAccount: 'your account',
      totpHint: 'Enter the 6-digit verification code for {account} to finish binding this {providerName} sign-in.',
      verifyAndContinue: 'Verify and continue',
      wechatAvailabilityUnknown: 'WeChat sign-in availability could not be confirmed. Refresh and retry.',
      wechatSystemBrowserOnly: 'This WeChat sign-in flow is only available in your system browser.',
      wechatBrowserOnly: 'This WeChat sign-in flow is only available inside the WeChat browser.',
      wechatNotConfigured: 'WeChat sign-in is not configured yet.'
    },
    linuxdoCallbackPageTitle: 'LinuxDo Sign-In Callback',
    dingtalkCallbackPageTitle: 'DingTalk Sign-In Callback',
    dingtalkProviderName: 'DingTalk',
    oidcCallbackPageTitle: 'OIDC Sign-In Callback',
    oauthCallbackPageTitle: 'OAuth Callback',
    wechatProviderName: 'WeChat',
    wechatCallbackPageTitle: 'WeChat Sign-In Callback',
    wechatPaymentCallbackPageTitle: 'WeChat Payment Callback',
    wechatPayment: {
      callbackTitle: 'Resuming WeChat payment',
      callbackProcessing: 'Resuming WeChat payment...',
      backToPayment: 'Back to payment',
      callbackMissingResumeToken: 'The WeChat payment callback is missing the resume token.'
    },
    oauth: {
      callbackTitle: 'OAuth Callback',
      callbackHint: 'Copy the code and state back to the admin authorization flow when needed.',
      invalidCallbackTitle: 'Invalid sign-in callback',
      invalidCallbackHint: 'This page does not contain a valid authorization result. Return to the login page and start quick sign-in again.',
      code: 'Code',
      state: 'State',
      fullUrl: 'Full URL'
    },
    // Forgot password
    forgotPassword: 'Forgot password?',
    forgotPasswordTitle: 'Reset Your Password',
    forgotPasswordHint: 'Enter your email address and we will send you a link to reset your password.',
    sendResetLink: 'Send Reset Link',
    sendingResetLink: 'Sending...',
    sendResetLinkFailed: 'Failed to send reset link. Please try again.',
    resetEmailSent: 'Reset Link Sent',
    resetEmailSentHint: 'If an account exists with this email, you will receive a password reset link shortly. Please check your inbox and spam folder.',
    backToLogin: 'Back to Login',
    rememberedPassword: 'Remembered your password?',
    // Reset password
    resetPasswordTitle: 'Set New Password',
    resetPasswordHint: 'Enter your new password below.',
    newPassword: 'New Password',
    newPasswordPlaceholder: 'Enter your new password',
    confirmPassword: 'Confirm Password',
    confirmPasswordPlaceholder: 'Confirm your new password',
    confirmPasswordRequired: 'Please confirm your password',
    passwordsDoNotMatch: 'Passwords do not match',
    resetPassword: 'Reset Password',
    resettingPassword: 'Resetting...',
    resetPasswordFailed: 'Failed to reset password. Please try again.',
    passwordResetSuccess: 'Password Reset Successful',
    passwordResetSuccessHint: 'Your password has been reset. You can now sign in with your new password.',
    invalidResetLink: 'Invalid Reset Link',
    invalidResetLinkHint: 'This password reset link is invalid or has expired. Please request a new one.',
    requestNewResetLink: 'Request New Reset Link',
    invalidOrExpiredToken: 'The password reset link is invalid or has expired. Please request a new one.'
  },

  // Step-up (sudo) 2FA prompt
  stepUp: {
    title: 'Two-Factor Verification Required',
    hint: 'Enter the 6-digit code from your authenticator app to continue this sensitive operation.',
    verifyFailed: 'Verification failed, please try again',
    notEnabled: 'This operation requires two-factor authentication. Please enable TOTP in your profile first.',
    adminApiKeyForbidden: 'Admin API keys cannot perform this operation. Use a two-factor verified admin session.'
  },

  // Dashboard
}
