{
  "httpMsg": {
    "unauthorized": "Unauthorized access, please login again",
    "forbidden": "Access to this resource is forbidden",
    "notFound": "The requested resource does not exist",
    "methodNotAllowed": "Request method not allowed",
    "conflict": "Data has been updated by someone else. Refresh and retry.",
    "validationFailed": "Request validation failed",
    "requestTimeout": "Request timeout, please try again later",
    "internalServerError": "Internal server error, please try again later",
    "badGateway": "Bad gateway error, please try again later",
    "serviceUnavailable": "Service temporarily unavailable, please try again later",
    "gatewayTimeout": "Gateway timeout, please try again later",
    "requestCancelled": "Request cancelled",
    "networkError": "Network connection error, please check your connection",
    "requestFailed": "Request failed",
    "requestConfigError": "Request configuration error"
  },
  "topBar": {
    "search": {
      "title": "Search"
    },
    "user": {
      "userCenter": "User center",
      "docs": "Document",
      "github": "Github",
      "lockScreen": "Lock screen",
      "logout": "Log out"
    },
    "guide": {
      "title": "Click here to view",
      "theme": "Theme style",
      "menu": "Open top menu",
      "description": "More configurations"
    },
    "impersonation": {
      "active": "Impersonating (Tenant {tenantId})",
      "exit": "Exit",
      "confirm": "Exit impersonation and return to the platform console?"
    }
  },
  "common": {
    "id": "ID",
    "tips": "Prompt",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "yes": "Yes",
    "no": "No",
    "days": "days",
    "delete": "Delete",
    "edit": "Edit",
    "action": "Action",
    "uploadImage": "Upload Image",
    "fileTooLarge": "File too large, max {size}MB allowed",
    "uploadFailed": "Upload failed",
    "logOutTips": "Do you want to log out?",
    "prevStep": "Previous Step",
    "nextStep": "Next Step",
    "unlimited": "Unlimited",
    "startDate": "Start Date",
    "endDate": "End Date",
    "startTime": "Start Time",
    "endTime": "End Time"
  },
  "search": {
    "placeholder": "Search page",
    "historyTitle": "Search history",
    "switchKeydown": "Navigate",
    "selectKeydown": "Select",
    "exitKeydown": "Close"
  },
  "setting": {
    "menuType": {
      "title": "Menu Layout",
      "list": [
        "Vertical",
        "Horizontal",
        "Mixed",
        "Dual"
      ]
    },
    "theme": {
      "title": "Theme Style",
      "list": [
        "Light",
        "Dark",
        "System"
      ]
    },
    "menu": {
      "title": "Menu Style"
    },
    "color": {
      "title": "Theme Color"
    },
    "box": {
      "title": "Box Style",
      "list": [
        "Border",
        "Shadow"
      ]
    },
    "container": {
      "title": "Container Width",
      "list": [
        "Full",
        "Boxed"
      ]
    },
    "basics": {
      "title": "Basic Config",
      "list": {
        "multiTab": "Show work tab",
        "accordion": "Sidebar opens accordion",
        "collapseSidebar": "Show sidebar button",
        "reloadPage": "Show reload page button",
        "fastEnter": "Show fast enter",
        "breadcrumb": "Show crumb navigation",
        "language": "Show multilingual selection",
        "progressBar": "Show top progress bar",
        "weakMode": "Color Weakness Mode",
        "watermark": "Global watermark",
        "menuWidth": "Menu width",
        "tabStyle": "Tab style",
        "pageTransition": "Page animation",
        "borderRadius": "Custom radius"
      }
    },
    "tabStyle": {
      "default": "Default",
      "card": "Card",
      "google": "Chrome"
    },
    "transition": {
      "list": {
        "none": "None",
        "fade": "Fade",
        "slideLeft": "Slide Left",
        "slideBottom": "Slide Bottom",
        "slideTop": "Slide Top"
      }
    },
    "actions": {
      "resetConfig": "Reset Config",
      "copyConfig": "Copy Config",
      "copySuccess": "Configuration copied to clipboard, paste it into src/config/setting.ts file",
      "copyFailed": "Copy failed, please try again",
      "resetFailed": "Reset failed, please refresh the page and try again"
    }
  },
  "notice": {
    "title": "Notice",
    "btnRead": "Mark as read",
    "bar": [
      "Notice",
      "Message",
      "Todo"
    ],
    "text": [
      "No"
    ],
    "viewAll": "View all"
  },
  "appAnnouncement": {
    "list": {
      "title": "Announcements",
      "unreadCount": "Unread {count}",
      "typePlaceholder": "Select announcement type",
      "refresh": "Refresh",
      "viewDetail": "View Detail",
      "empty": "No announcements",
      "publisher": "Publisher: ",
      "publishedAt": "Published at: ",
      "effective": "Effective: "
    },
    "detail": {
      "title": "Announcement Detail",
      "back": "Back to List",
      "publisher": "Publisher: ",
      "publishedAt": "Published at: ",
      "effective": "Effective: ",
      "content": "Content"
    },
    "type": {
      "all": "All Types",
      "system": "System Announcement",
      "billing": "Billing Reminder",
      "operation": "Operation Notice",
      "platformUpdate": "Platform Update",
      "security": "Security Notice",
      "compliance": "Compliance Notice",
      "tenantInternal": "Tenant Internal",
      "tenantFinance": "Tenant Finance",
      "tenantOperation": "Tenant Operation"
    },
    "publisher": {
      "platform": "Platform",
      "tenant": "Tenant",
      "unknown": "Unknown"
    },
    "common": {
      "notAvailable": "N/A",
      "dateRange": "{start} ~ {end}"
    },
    "message": {
      "loadFailed": "Failed to load announcements, please try again.",
      "missingId": "Missing announcement ID.",
      "detailNotFound": "Announcement not found, please return to the list."
    }
  },
  "worktab": {
    "btn": {
      "refresh": "Refresh",
      "fixed": "Fixed",
      "unfixed": "Unfixed",
      "closeLeft": "Close left",
      "closeRight": "Close right",
      "closeOther": "Close other",
      "closeAll": "Close all"
    }
  },
  "login": {
    "leftView": {
      "title": "A backend system of beauty and efficiency",
      "subTitle": "A sleek and practical interface for a great user experience"
    },
    "title": "Welcome back",
    "subTitle": "Please enter your account and password to login",
    "roles": {
      "super": "Super Admin",
      "admin": "Admin",
      "user": "User"
    },
    "placeholder": {
      "account": "Enter account",
      "phone": "Enter phone number",
      "password": "Please enter your password",
      "slider": "Please slide to verify"
    },
    "sliderText": "Please slide to verify",
    "sliderSuccessText": "Verification successful",
    "rememberPwd": "Remember password",
    "forgetPwd": "Forgot password",
    "btnText": "Login",
    "noAccount": "No account yet?",
    "register": "Register",
    "success": {
      "title": "Login successful",
      "message": "Welcome back"
    }
  },
  "forgetPassword": {
    "title": "Forgot password?",
    "subTitle": "Enter your email to reset your password",
    "placeholder": "Please enter your email",
    "submitBtnText": "Submit",
    "backBtnText": "Back"
  },
  "resetPassword": {
    "title": "Reset Password",
    "subTitle": "Set a new login password",
    "invalidToken": "The reset link is invalid or expired. Please ask the platform admin to generate a new link.",
    "newPassword": "New Password",
    "newPasswordPlaceholder": "Enter new password (6-32 chars)",
    "confirmPassword": "Confirm Password",
    "confirmPasswordPlaceholder": "Re-enter new password",
    "submitBtnText": "Reset",
    "backBtnText": "Back to Login",
    "success": "Password reset succeeded. Please log in with the new password.",
    "rules": {
      "newPasswordRequired": "Please enter a new password",
      "confirmPasswordRequired": "Please confirm the new password",
      "passwordLength": "Password length must be 6-32 characters",
      "passwordNotMatch": "Passwords do not match"
    }
  },
  "register": {
    "title": "Self-service onboarding",
    "subTitle": "Provide admin info to spin up your space quickly",
    "layout": {
      "brand": "CloudSaaS",
      "badge": "Self-Service Onboarding",
      "badgeDesc": "Password is only for login and will not return",
      "title": "Start Your",
      "titleHighlight": "Digital Management Journey",
      "desc": "Open your dedicated workspace in just a few steps. Enjoy secure, stable, and efficient enterprise-grade management.",
      "pillSecurity": "Enterprise Security",
      "pillData": "Data Connectivity",
      "pillDeploy": "Rapid Deployment",
      "footer": "© CloudSaaS Inc. All rights reserved.",
      "formTitle": "Fill in administrator information",
      "formDesc": "Get your tenant ready fast. The password is only for login and will not be returned.",
      "optional": "Optional"
    },
    "alert": {
      "title": "Save your admin account and password",
      "desc": "Password is only used for login and will not be returned. You can fill verification and subscription later on the progress page."
    },
    "field": {
      "code": "Tenant code",
      "name": "Tenant name",
      "shortName": "Short name",
      "industry": "Industry",
      "contactName": "Contact name",
      "contactPhone": "Contact phone",
      "contactEmail": "Contact email",
      "tenantPackageId": "Package ID",
      "durationMonths": "Duration (months)",
      "autoRenew": "Auto renew on expiry",
      "adminAccount": "Admin account",
      "adminDisplayName": "Admin display name",
      "adminEmail": "Admin email",
      "adminPhone": "Admin phone",
      "adminPassword": "Admin password",
      "confirmPassword": "Confirm password"
    },
    "placeholder": {
      "code": "Enter tenant code, e.g. your-tenant",
      "name": "Enter tenant name",
      "shortName": "Optional short name",
      "industry": "Optional industry",
      "contactName": "Enter contact name",
      "contactPhone": "Enter contact phone",
      "contactEmail": "Optional contact email",
      "tenantPackageId": "Enter package ID",
      "durationMonths": "Subscription duration, default 12 months",
      "adminAccount": "Enter admin account",
      "adminDisplayName": "Optional admin nickname",
      "adminEmail": "Optional admin email",
      "adminPhone": "Enter admin phone",
      "adminPassword": "Enter admin password, at least 8 chars",
      "confirmPassword": "Re-enter admin password"
    },
    "rule": {
      "adminPhoneRequired": "Please enter admin phone",
      "adminPhoneFormat": "Please enter a valid phone number",
      "adminAccountRequired": "Please enter admin account",
      "adminAccountFormat": "Admin account can only contain letters and numbers",
      "adminPasswordRequired": "Please enter admin password",
      "adminPasswordLength": "Admin password must be at least 8 chars",
      "adminEmailFormat": "Please enter a valid email",
      "adminEmailRequired": "Please enter admin email",
      "adminDisplayNameRequired": "Please enter admin display name",
      "confirmPasswordRequired": "Please confirm admin password",
      "passwordMismatch": "The two admin passwords do not match",
      "agreementRequired": "Please agree to the privacy policy first"
    },
    "agreeText": "I have read and agree",
    "privacyPolicy": "Privacy policy",
    "submitBtnText": "Submit Registration Now",
    "hasAccount": "Already have an account?",
    "toLogin": "Go to login",
    "success": "Registered successfully, redirecting to progress",
    "failed": "Registration failed, please try again later",
    "rateLimit": "Too many requests, please try again later"
  },
  "onboarding": {
    "breadcrumb": "Self-service onboarding",
    "title": "Onboarding progress",
    "waiting": {
      "title": "Waiting for review",
      "tip": "Your information has been submitted. Please wait for review."
    },
    "error": {
      "title": "Status error",
      "tip": "The tenant status is abnormal. Please contact an administrator.",
      "loading": "Loading status...",
      "suspended": {
        "title": "Service suspended",
        "desc": "Your account has been suspended due to unpaid bills or policy violations. Please contact support.",
        "primaryAction": "Contact support",
        "secondaryAction": "View billing"
      },
      "expired": {
        "title": "Subscription expired",
        "desc": "Your subscription has expired. Please renew to continue using the service.",
        "primaryAction": "Renew now",
        "secondaryAction": "Contact sales"
      },
      "closed": {
        "title": "Account closed",
        "desc": "This account has been closed or archived and cannot be used. Please register again if needed.",
        "primaryAction": "Register again",
        "secondaryAction": "Back to home"
      },
      "rejected": {
        "title": "Verification rejected",
        "desc": "Your onboarding information was rejected. Please update and resubmit.",
        "reasonTitle": "Rejection reason",
        "defaultReason": "No detailed reason provided. Please contact support.",
        "primaryAction": "Update and resubmit",
        "secondaryAction": "Contact support"
      },
      "fallback": {
        "title": "Status",
        "desc": "This status cannot be displayed here. Please refresh and try again.",
        "primaryAction": "Refresh"
      }
    },
    "placeholder": {
      "tenantId": "Enter tenant ID",
      "businessLicenseNumber": "Enter business license number",
      "businessLicenseUrl": "Enter business license URL",
      "legalPersonName": "Enter legal name",
      "legalPersonIdNumber": "Enter legal ID number",
      "legalPersonIdFrontUrl": "Enter ID front URL",
      "legalPersonIdBackUrl": "Enter ID back URL",
      "bankAccountName": "Enter bank account name",
      "bankAccountNumber": "Enter bank account number",
      "bankName": "Enter bank name",
      "additionalDataJson": "Optional extra data JSON",
      "tenantPackageId": "Enter package ID",
      "durationMonths": "Enter duration (months)",
      "notes": "Optional notes"
    },
    "actions": {
      "load": "Query",
      "refresh": "Refresh",
      "submitVerification": "Submit verification",
      "goConsole": "Go to console",
      "goLogin": "Back to login"
    },
    "messages": {
      "missingTenantInfo": "Missing tenant or package info, please go back and try again",
      "submitSuccess": "Submitted for review and package bound successfully"
    },
    "card": {
      "tenantId": "Tenant ID",
      "verificationStatus": "Verification status",
      "tenantStatus": "Tenant status"
    },
    "status": {
      "verification": {
        "draft": "Draft",
        "pending": "Pending",
        "rejected": "Rejected",
        "approved": "Approved"
      },
      "tenant": {
        "active": "Active",
        "pendingReview": "Pending review",
        "suspended": "Suspended",
        "expired": "Expired",
        "closed": "Closed"
      },
      "hintDraft": "Please submit verification",
      "hintPending": "Waiting for review",
      "hintRejected": "Review rejected, please resubmit",
      "hintApproved": "Approved, you can enter console",
      "unknown": "Unknown"
    },
    "form": {
      "title": "Submit verification",
      "tip": "Fill business license and legal info to speed up review",
      "rejected": "Review rejected, please update and resubmit",
      "businessLicenseNumber": "Business license number",
      "businessLicenseUrl": "Business license URL",
      "legalPersonName": "Legal name",
      "legalPersonIdNumber": "Legal ID number",
      "legalPersonIdFrontUrl": "ID front URL",
      "legalPersonIdBackUrl": "ID back URL",
      "bankAccountName": "Bank account name",
      "bankAccountNumber": "Bank account number",
      "bankName": "Bank name",
      "additionalDataJson": "Additional data JSON",
      "tenantPackageId": "Package ID",
      "durationMonths": "Duration (months)",
      "notes": "Notes",
      "autoRenew": "Auto renew",
      "securityTip": "Data is only used for review and will not be leaked."
    },
    "subscription": {
      "title": "Plan subscription",
      "tip": "Sign in to submit subscription and lock quota",
      "loginTip": "Please log in to submit subscription",
      "submit": "Submit subscription",
      "failed": "Create subscription failed, please try again later"
    },
    "pricing": {
      "badge": "Self-service onboarding",
      "freeTag": "Free for commercial use",
      "title": "Trusted by 53,476+ developers",
      "subtitle": "And chosen by many tech giants",
      "defaultDesc": "For cloud products, billed annually by user.",
      "perTime": "one-time payment",
      "selectCta": "Choose this plan",
      "empty": "No plans available, please try again later",
      "features": {
        "code": "Full source code",
        "docs": "Technical docs",
        "saasAuth": "SaaS license",
        "singleProject": "Single project use",
        "unlimitedProjects": "Unlimited projects",
        "support": "1-year support",
        "update": "1-year updates",
        "limitStore": "Store limit: {value}",
        "limitAccount": "Account limit: {value}",
        "limitStorage": "Storage: {value}GB",
        "unlimited": "Unlimited"
      }
    },
    "pending": {
      "title": "Under review",
      "subtitle": "We received your info, we will notify when done",
      "polling": "Auto refresh in {seconds}s",
      "tipsTitle": "Tips",
      "tip1": "Avoid repeated submissions; update after a short wait.",
      "tip2": "If you see 429, wait 1 minute before retry."
    },
    "ready": {
      "title": "Verification approved",
      "subtitle": "You can enter the console now",
      "tipsTitle": "Next steps",
      "tip1": "Check roles and permissions after login.",
      "tip2": "Adjust plan in console or contact support if needed."
    },
    "fallback": {
      "title": "Cannot enter console",
      "tipsTitle": "Possible reasons",
      "tip1": "Tenant is suspended or closed, please contact admin.",
      "tip2": "Renew the plan after login if expired."
    },
    "message": {
      "noTenantId": "Please enter tenant ID first",
      "rateLimit": "Too many requests, please try again later",
      "loadFailed": "Failed to load progress, please retry",
      "verificationSubmitted": "Verification submitted",
      "submitFailed": "Submit failed, please retry later",
      "subscriptionCreated": "Subscription created"
    },
    "rule": {
      "businessLicenseNumber": "Please enter business license number",
      "legalPersonName": "Please enter legal name",
      "legalPersonIdNumber": "Please enter valid ID number",
      "bankAccountNumber": "Please enter valid bank account number",
      "packageRequired": "Please select a package",
      "durationRequired": "Please enter duration",
      "durationRange": "Duration range 1-120 months"
    }
  },
  "lockScreen": {
    "pwdError": "Password error",
    "lock": {
      "inputPlaceholder": "Please input lock screen password",
      "btnText": "Lock"
    },
    "unlock": {
      "inputPlaceholder": "Please input unlock password",
      "btnText": "Unlock",
      "backBtnText": "Back to login"
    }
  },
  "greeting": {
    "dawn": "Good morning!",
    "morning": "Good morning!",
    "afternoon": "Good afternoon!",
    "evening": "Good evening!"
  },
  "exceptionPage": {
    "403": "Sorry, you do not have permission to access this page",
    "404": "Sorry, the page you are trying to access does not exist",
    "500": "Sorry, there was an error on the server",
    "gohome": "Go Home"
  },
  "termsOfService": {
    "title": "Terms of Service"
  },
  "menus": {
    "login": {
      "title": "Login"
    },
    "register": {
      "title": "Register"
    },
    "termsOfService": {
      "title": "Terms of Service"
    },
    "onboarding": {
      "status": "Onboarding progress",
      "pricing": "Plan selection",
      "waiting": "Waiting for review",
      "error": "Status error"
    },
    "forgetPassword": {
      "title": "Forget Password"
    },
    "resetPassword": {
      "title": "Reset Password"
    },
    "outside": {
      "title": "Outside"
    },
    "dashboard": {
      "title": "Dashboard",
      "console": "Console"
    },
    "result": {
      "title": "Result Page",
      "success": "Success",
      "fail": "Fail"
    },
    "exception": {
      "title": "Exception",
      "forbidden": "403",
      "notFound": "404",
      "serverError": "500"
    },
    "system": {
      "title": "System Settings",
      "user": "User Manage",
      "role": "Role Manage",
      "tenantRole": "Tenant Role",
      "userCenter": "User Center",
      "menu": "Menu Manage",
      "tenant": "Tenant Manage",
      "tenantPackage": "Package Management"
    },
    "dictionary": {
      "title": "Dictionary",
      "system": "System Dictionary",
      "tenant": "Tenant Dictionary",
      "override": "Dictionary Overrides",
      "labelOverride": "Label Override Management",
      "metrics": "Cache Metrics"
    },
    "tenant": {
      "title": "Tenant Management",
      "subscription": "Subscription Management",
      "billing": "Billing Management",
      "billingStatistics": "Billing Statistics"
    },
    "announcement": {
      "title": "Announcement Management",
      "platform": {
        "title": "Platform Announcements",
        "list": "Platform Announcement List",
        "create": "Create Platform Announcement",
        "edit": "Edit Platform Announcement",
        "detail": "Announcement Detail"
      },
      "tenant": {
        "title": "Tenant Announcements",
        "list": "Tenant Announcement List",
        "create": "Create Tenant Announcement",
        "edit": "Edit Tenant Announcement",
        "detail": "Announcement Detail"
      },
      "app": {
        "title": "App Announcements",
        "list": "Announcement List",
        "detail": "Announcement Detail"
      },
      "drafts": {
        "title": "Draft Center",
        "list": "Draft List"
      }
    },
    "merchant": {
      "title": "Merchant Management",
      "list": "Merchants",
      "review": "Merchant Review",
      "detail": "Merchant Detail"
    },
    "store": {
      "title": "Store Management",
      "list": "Store List",
      "detail": "Store Detail"
    },
    "platform": {
      "title": "Platform Ops",
      "storeAudits": "Store Audits",
      "qualificationAlerts": "Qualification Alerts"
    }
  },
  "tenant": {
    "search": {
      "keyword": "Keyword",
      "keywordPlaceholder": "Tenant name/code",
      "status": "Status",
      "statusPlaceholder": "All",
      "tenantName": "Tenant Name",
      "tenantNamePlaceholder": "Enter tenant name",
      "contactName": "Contact Name",
      "contactNamePlaceholder": "Enter contact name",
      "contactPhone": "Contact Phone",
      "contactPhonePlaceholder": "Enter contact phone",
      "verificationStatus": "Verification Status"
    },
    "action": {
      "addTenant": "Add Tenant",
      "edit": "Edit",
      "detail": "Details",
      "more": "More",
      "impersonateLogin": "Impersonate Login",
      "quotaOverview": "Quota Overview",
      "toggleFreeze": "Freeze/Unfreeze",
      "freeze": "Freeze",
      "unfreeze": "Unfreeze",
      "extendOrGift": "Extend/Gift Time",
      "resetAdmin": "Reset Admin"
    },
    "more": {
      "impersonate": {
        "title": "Impersonate Login",
        "tip": "This will switch to the tenant console and log in as the tenant primary admin.",
        "confirm": "Confirm",
        "success": "Switched to tenant console",
        "alreadyImpersonating": "You are already impersonating. Please exit first."
      },
      "freeze": {
        "freezeTitle": "Freeze Tenant",
        "unfreezeTitle": "Unfreeze Tenant",
        "freezeTip": "After freezing, the tenant will not be able to use the system. Please proceed with caution.",
        "unfreezeTip": "After unfreezing, the tenant service will be restored (expired subscription will still show as expired).",
        "reason": "Reason",
        "reasonRequired": "Please enter the freeze reason",
        "freezePlaceholder": "Enter freeze reason (required)",
        "unfreezePlaceholder": "Enter unfreeze note (optional)",
        "success": "Success"
      },
      "extend": {
        "title": "Extend/Gift Time",
        "months": "Months",
        "monthUnit": "months",
        "monthsRequired": "Please enter months",
        "notes": "Notes",
        "notesPlaceholder": "Enter notes (optional)",
        "expireUnknown": "Current expiration time is unknown. The extension will start from now.",
        "currentExpireAt": "Current expiration time: {date}",
        "success": "Success"
      },
      "resetAdmin": {
        "title": "Reset Admin",
        "tip": "Generate a password reset link for the primary admin (shown only once).",
        "generate": "Generate Link",
        "resetUrl": "Reset Link",
        "copy": "Copy",
        "copied": "Copied",
        "empty": "Please generate the link first",
        "success": "Generated",
        "failed": "Failed to generate. Please try again."
      },
      "todo": {
        "impersonateLogin": "Impersonate login is not implemented yet",
        "quotaOverview": "Quota overview is not implemented yet",
        "resetAdmin": "Reset admin is not implemented yet"
      }
    },
    "status": {
      "pendingReview": "Pending review",
      "active": "Active",
      "suspended": "Suspended",
      "expired": "Expired",
      "closed": "Closed",
      "unknown": "Unknown"
    },
    "verificationStatus": {
      "draft": "Draft",
      "pending": "Pending",
      "approved": "Approved",
      "rejected": "Rejected",
      "unknown": "Unknown"
    },
    "subscriptionStatus": {
      "active": "Active",
      "expired": "Expired",
      "cancelled": "Cancelled",
      "suspended": "Suspended",
      "unknown": "Unknown"
    },
    "review": {
      "title": "Tenant Review",
      "dialogTitle": "Tenant Review",
      "tenantName": "Tenant Name",
      "result": "Review Result",
      "approve": "Approve",
      "reject": "Reject",
      "rejectReason": "Reject Reason",
      "rejectReasonPlaceholder": "Please enter reject reason",
      "renewMonths": "Renew Months",
      "renewMonthsPlaceholder": "Please enter renew months",
      "monthUnit": "months",
      "rejectReasonCustom": "Custom Reason",
      "rejectReasons": {
        "materialsIncomplete": "Incomplete materials / Missing documents",
        "licenseInvalid": "Invalid or unclear business license",
        "identityMismatch": "Legal person info mismatch",
        "contactUnreachable": "Unreachable contact / Invalid info",
        "duplicateRegistration": "Possible duplicate registration / Risk related",
        "other": "Other (custom)"
      },
      "claim": {
        "label": "Claim",
        "unclaimed": "Unclaimed",
        "claimed": "Claimed",
        "claimedBy": "Claimed by: {name}",
        "needClaimTip": "Please claim before reviewing",
        "claimButton": "Claim",
        "releaseButton": "Release",
        "forceButton": "Force Takeover",
        "readonlyTip": "This review is claimed by {name}. You can view only.",
        "needClaimFirst": "Please claim this review first",
        "claimedByTip": "This review has been claimed by {name}",
        "forceDenied": "No permission to force takeover"
      },
      "selectResult": "Please select review result",
      "success": "Review completed",
      "action": "Review",
      "openMaterial": "Open materials",
      "section": {
        "basic": "Application Info",
        "package": "Package Info",
        "subscription": "Subscription Info",
        "verification": "Verification Info",
        "action": "Review Action",
        "history": "Review History"
      },
      "history": {
        "empty": "No records"
      },
      "field": {
        "name": "Tenant Name",
        "code": "Tenant Code",
        "packageId": "Package ID",
        "packageName": "Selected Package",
        "packageType": "Package Type",
        "packageDescription": "Description",
        "monthlyPrice": "Monthly Price",
        "yearlyPrice": "Yearly Price",
        "packageActive": "Enabled",
        "packageQuota": "Quota",
        "featurePoliciesJson": "Feature Policies (JSON)",
        "subscriptionId": "Subscription ID",
        "subscriptionStatus": "Subscription Status",
        "subscriptionPackageId": "Subscription Package ID",
        "subscriptionEffectiveFrom": "Effective From",
        "subscriptionEffectiveTo": "Effective To",
        "nextBillingDate": "Next Billing Date",
        "autoRenew": "Auto Renew",
        "contactName": "Contact Name",
        "contactPhone": "Contact Phone",
        "contactEmail": "Contact Email",
        "effectiveFrom": "Submitted At",
        "verificationStatus": "Verification Status",
        "verificationSubmittedAt": "Verification Submitted At",
        "businessLicenseNumber": "Business License No.",
        "businessLicenseUrl": "Materials",
        "legalPersonName": "Legal Person Name",
        "legalPersonIdNumber": "Legal Person ID",
        "legalPersonIdFrontUrl": "Legal Person ID (Front)",
        "legalPersonIdBackUrl": "Legal Person ID (Back)",
        "bankName": "Bank Name",
        "bankAccountName": "Account Name",
        "bankAccountNumber": "Bank Account",
        "additionalDataJson": "Additional Info (JSON)",
        "reviewRemarks": "Review Remarks",
        "reviewedBy": "Reviewer ID",
        "reviewedByName": "Reviewed By",
        "reviewedAt": "Reviewed At"
      },
      "operatingMode": "Operating mode",
      "operatingModePlaceholder": "Select operating mode",
      "operatingModeOptions": {
        "same": "Same entity",
        "different": "Different entity"
      }
    },
    "manualCreate": {
      "title": "Create Tenant (Manual, Active)",
      "success": "Created successfully",
      "unit": {
        "month": "month(s)"
      },
      "section": {
        "tenant": "Tenant Info",
        "subscription": "Plan & Subscription",
        "verification": "Verification Info",
        "admin": "Admin Account",
        "system": "System Fields (Read-only)"
      },
      "field": {
        "region": "Province/City/District",
        "code": "Tenant Code",
        "name": "Tenant Name",
        "shortName": "Short Name",
        "legalEntityName": "Legal Entity Name",
        "industry": "Industry",
        "status": "Tenant Status",
        "contactName": "Contact Name",
        "contactPhone": "Contact Phone",
        "contactEmail": "Contact Email",
        "website": "Website",
        "logoUrl": "LogoUrl",
        "coverImageUrl": "CoverImageUrl",
        "country": "Country/Region",
        "province": "Province/State",
        "city": "City",
        "district": "District",
        "address": "Address",
        "tags": "Tags",
        "remarks": "Remarks",
        "suspendedAt": "Suspended At",
        "suspensionReason": "Suspension Reason",
        "tenantPackageId": "Package",
        "durationMonths": "Duration",
        "subscriptionEffectiveFrom": "Effective From",
        "subscriptionEffectiveToPreview": "Effective To",
        "nextBillingDate": "Next Billing Date",
        "autoRenew": "Auto Renew",
        "subscriptionStatus": "Subscription Status",
        "scheduledPackageId": "Scheduled Package ID",
        "subscriptionNotes": "Subscription Notes",
        "verificationStatus": "Verification Status",
        "businessLicenseNumber": "Business License No.",
        "businessLicenseUrl": "Business License URL",
        "legalPersonName": "Legal Person Name",
        "legalPersonIdNumber": "Legal Person ID No.",
        "legalPersonIdFrontUrl": "ID Front URL",
        "legalPersonIdBackUrl": "ID Back URL",
        "bankAccountName": "Bank Account Name",
        "bankAccountNumber": "Bank Account Number",
        "bankName": "Bank Name",
        "additionalDataJson": "Additional Data (JSON)",
        "submittedAt": "Submitted At",
        "reviewedAt": "Reviewed At",
        "reviewedBy": "Reviewer ID",
        "reviewedByName": "Reviewer Name",
        "reviewRemarks": "Review Remarks",
        "adminAccount": "Admin Account",
        "adminDisplayName": "Admin Name",
        "adminPassword": "Initial Password",
        "adminAvatar": "Admin Avatar",
        "adminMerchantId": "Merchant ID",
        "primaryOwnerUserId": "Primary Owner UserId",
        "tenantId": "TenantId",
        "tenantCreatedAt": "Tenant.CreatedAt",
        "tenantUpdatedAt": "Tenant.UpdatedAt",
        "tenantDeletedAt": "Tenant.DeletedAt",
        "subscriptionId": "SubscriptionId",
        "verificationId": "VerificationId",
        "tenantCreatedBy": "Tenant.CreatedBy",
        "tenantUpdatedBy": "Tenant.UpdatedBy",
        "tenantDeletedBy": "Tenant.DeletedBy",
        "subscriptionDeletedAt": "Subscription.DeletedAt"
      },
      "placeholder": {
        "region": "Select province/city/district",
        "code": "Enter tenant code (unique)",
        "name": "Enter tenant name",
        "shortName": "Enter short name",
        "legalEntityName": "Enter legal entity name",
        "industry": "Enter industry",
        "contactName": "Enter contact name",
        "contactPhone": "Enter contact phone (unique)",
        "contactEmail": "Enter contact email",
        "website": "Enter website",
        "logoUrl": "Enter logo URL",
        "coverImageUrl": "Enter cover URL",
        "country": "Enter country/region",
        "province": "Enter province/state",
        "city": "Enter city",
        "address": "Enter address",
        "tags": "Comma-separated",
        "remarks": "Enter remarks",
        "suspensionReason": "Enter suspension reason",
        "scheduledPackageId": "Optional",
        "subscriptionNotes": "Optional",
        "businessLicenseNumber": "Enter business license no.",
        "businessLicenseUrl": "Enter business license URL",
        "legalPersonName": "Enter legal person name",
        "legalPersonIdNumber": "Enter legal person ID no.",
        "legalPersonIdFrontUrl": "Enter ID front URL",
        "legalPersonIdBackUrl": "Enter ID back URL",
        "bankAccountName": "Enter bank account name",
        "bankAccountNumber": "Enter bank account number",
        "bankName": "Enter bank name",
        "additionalDataJson": "Optional",
        "reviewedByName": "Defaults to current user if empty",
        "reviewRemarks": "Optional",
        "adminAccount": "Enter admin account (unique)",
        "adminDisplayName": "Enter admin name",
        "adminPassword": "Enter initial password",
        "adminAvatar": "Optional",
        "adminMerchantId": "Optional",
        "systemGenerated": "Generated by system",
        "systemAutoFill": "Auto-filled by system"
      },
      "action": {
        "upload": "Upload",
        "reupload": "Re-upload",
        "remove": "Remove",
        "noImage": "No image",
        "tip": "jpg/png/webp supported, auto-fill after upload"
      },
      "rule": {
        "code": "Tenant code is required",
        "name": "Tenant name is required",
        "tenantStatus": "Please select tenant status",
        "tenantPackageId": "Please select package",
        "durationMonths": "Please enter duration (months)",
        "subscriptionEffectiveFrom": "Please select effective from",
        "subscriptionStatus": "Please select subscription status",
        "verificationStatus": "Please select verification status",
        "adminAccount": "Admin account is required",
        "adminDisplayName": "Admin name is required",
        "adminPassword": "Initial password is required"
      },
      "subscriptionStatus": {
        "pending": "Pending",
        "active": "Active",
        "gracePeriod": "Grace Period",
        "cancelled": "Cancelled",
        "suspended": "Suspended"
      }
    },
    "table": {
      "index": "No.",
      "name": "Tenant Name",
      "code": "Tenant Code",
      "contactName": "Contact Name",
      "contactPhone": "Contact Phone",
      "status": "Status",
      "verificationStatus": "Verification Status",
      "effectiveFrom": "Effective From",
      "effectiveTo": "Effective To",
      "action": "Actions"
    }
  },
  "tenantPackage": {
    "actions": {
      "create": "New Package",
      "close": "Close",
      "view": "View",
      "edit": "Edit",
      "more": "More",
      "copy": "Copy",
      "saveDraft": "Save Draft",
      "publish": "Publish",
      "rollbackDraft": "Revert to Draft",
      "toggleActive": "Enable/Disable",
      "toggleVisible": "Public Visible",
      "togglePurchasable": "Allow Purchase",
      "quotaEdit": "Quota",
      "viewTenants": "Tenants",
      "delete": "Delete"
    },
    "usage": {
      "activeSubscription": "Active Subscriptions",
      "totalSubscription": "Total Subscriptions",
      "activeTenant": "Active Tenants",
      "mrr": "MRR",
      "arr": "ARR",
      "expiringIn": "Expiring"
    },
    "search": {
      "keyword": "Keyword",
      "keywordPlaceholder": "Enter package name or description",
      "status": "Status",
      "statusAll": "All",
      "statusEnabled": "Enabled",
      "statusDisabled": "Disabled"
    },
    "table": {
      "name": "Name",
      "packageType": "Package Type",
      "publishStatus": "Publish Status",
      "publicVisible": "Visible",
      "allowNewPurchase": "Purchasable",
      "monthlyPrice": "Monthly Price",
      "yearlyPrice": "Yearly Price",
      "quota": "Quota",
      "usage": "Usage",
      "status": "Status",
      "description": "Description",
      "actions": "Actions",
      "quotaEmpty": "Not set"
    },
    "featurePolicy": {
      "open": "Visual Config",
      "clear": "Clear",
      "configured": "Configured",
      "notConfigured": "Not configured",
      "titleEdit": "Feature Policy",
      "titleView": "View Feature Policy",
      "hint": "Configure feature toggles and quotas visually. The result will be saved to featurePoliciesJson for future feature control by package.",
      "saved": "Feature policy saved",
      "invalidJson": "Invalid feature policy JSON",
      "applyPreset": "Apply Preset",
      "applyPresetTitle": "Confirm Apply",
      "applyPresetConfirm": "Applying a preset will overwrite current feature toggles and quotas. Continue?",
      "presetApplied": "Preset applied",
      "validationPassed": "Validation passed",
      "validationFailed": "Validation failed ({count})",
      "tabs": {
        "config": "Config",
        "custom": "Custom",
        "preview": "JSON Preview"
      },
      "presets": {
        "blank": "Blank",
        "standard": "Standard",
        "pro": "Pro"
      },
      "customHint": "Add custom extension items for future expansion (e.g. hardware gifts, special services). Keys should use English/underscore and will be saved to extra.customItems.",
      "custom": {
        "add": "Add Item",
        "key": "Key",
        "label": "Label",
        "type": "Type",
        "value": "Value",
        "typeBoolean": "Boolean",
        "typeNumber": "Number",
        "typeString": "Text"
      },
      "sections": {
        "features": "Features",
        "quotas": "Quotas",
        "preview": "JSON Preview (Read-only)"
      },
      "features": {
        "reportsExport": "Reports / Export",
        "printing": "Printing / Receipt",
        "apiAccess": "API Access",
        "marketing": "Marketing",
        "coupon": "Coupon",
        "fullReduction": "Full Reduction",
        "member": "Membership",
        "points": "Points"
      },
      "quotas": {
        "maxProducts": "Max Products",
        "maxMenus": "Max Menus",
        "maxApiCallsPerDay": "API Calls / Day",
        "unlimitedPlaceholder": "Empty means unlimited"
      }
    },
    "detail": {
      "featureStrategy": {
        "title": "Feature Strategy",
        "invalidJson": "Invalid feature strategy JSON",
        "empty": "No strategies to display",
        "columns": {
          "name": "Strategy",
          "value": "Value",
          "status": "Status",
          "conditions": "Constraints"
        },
        "status": {
          "enabled": "Enabled",
          "disabled": "Disabled"
        },
        "value": {
          "unlimited": "Unlimited"
        },
        "noConditions": "None",
        "conditions": {
          "dependsOnEnabled": "Depends on: {name}=Enabled",
          "min": "Min: {min}",
          "max": "Max: {max}",
          "unknownDependency": "Unknown dependency ({key})"
        }
      }
    },
    "form": {
      "createTitle": "Create Package",
      "editTitle": "Edit Package",
      "viewTitle": "Package Details",
      "copyTitle": "Copy Package",
      "publishStatus": "Publish Status",
      "publicVisible": "Public Visible",
      "allowNewPurchase": "Allow Purchase",
      "isRecommended": "Recommended",
      "tags": "Tags",
      "tagsPlaceholder": "Select tags (multiple)",
      "name": "Package Name",
      "namePlaceholder": "Enter package name",
      "description": "Description",
      "descriptionPlaceholder": "Enter package description",
      "packageType": "Package Type",
      "packageTypePlaceholder": "Select package type",
      "monthlyPrice": "Monthly Price (CNY)",
      "yearlyPrice": "Yearly Price (CNY)",
      "pricePlaceholder": "Enter amount",
      "maxStoreCount": "Store Limit (count)",
      "maxAccountCount": "Employee Limit (count)",
      "maxStorageGb": "Storage (GB)",
      "maxSmsCredits": "SMS (messages)",
      "maxDeliveryOrders": "Delivery Order Limit",
      "quotaPlaceholder": "Enter limit or leave blank for unlimited",
      "featurePoliciesJson": "Feature Policies (JSON)",
      "featurePlaceholder": "Optional custom feature policy JSON",
      "isActive": "Active",
      "sortOrder": "Sort Order",
      "sortOrderPlaceholder": "Smaller values come first",
      "submit": "Submit",
      "submitDraft": "Save Draft",
      "submitPublish": "Publish",
      "validation": {
        "nameRequired": "Please enter package name",
        "packageTypeRequired": "Please select package type"
      }
    },
    "tags": {
      "recommended": "Recommended",
      "bestValue": "Best Value",
      "flagship": "Flagship"
    },
    "drawer": {
      "title": "Using Tenants ({name})",
      "expiringTitle": "Expiring Tenants ({name} · within {days} days)",
      "detailTitle": "Package Details ({name})",
      "searchPlaceholder": "Tenant name/code/contact/phone",
      "tenantName": "Tenant Name",
      "tenantCode": "Tenant Code",
      "tenantStatus": "Status",
      "contact": "Contact",
      "phone": "Phone",
      "effectiveTo": "Expires At"
    },
    "dialog": {
      "quotaTitle": "Quota ({name})"
    },
    "status": {
      "enabled": "Enabled",
      "disabled": "Disabled"
    },
    "publishStatus": {
      "draft": "Draft",
      "published": "Published"
    },
    "message": {
      "createSuccess": "Created successfully",
      "saveDraftSuccess": "Draft saved",
      "updateSuccess": "Updated successfully",
      "publishConfirm": "Publish this package? After publishing (and visible/purchasable/enabled), new tenants can choose/purchase it.",
      "publishTitle": "Publish Confirmation",
      "publishSuccess": "Published",
      "rollbackDraftConfirm": "Revert this package to draft? Draft packages are not publicly visible/sellable.",
      "rollbackDraftTitle": "Revert Confirmation",
      "rollbackDraftSuccess": "Reverted to draft",
      "toggleVisibleConfirmEnable": "Set this package to publicly visible?",
      "toggleVisibleConfirmDisable": "Set this package to not publicly visible?",
      "toggleVisibleTitleEnable": "Visible Confirmation",
      "toggleVisibleTitleDisable": "Hidden Confirmation",
      "toggleVisibleSuccessEnable": "Now publicly visible",
      "toggleVisibleSuccessDisable": "Now hidden",
      "togglePurchasableConfirmEnable": "Allow new tenants to purchase/choose this package?",
      "togglePurchasableConfirmDisable": "Disallow new tenants to purchase/choose this package?",
      "togglePurchasableTitleEnable": "Allow Purchase Confirmation",
      "togglePurchasableTitleDisable": "Disallow Purchase Confirmation",
      "togglePurchasableSuccessEnable": "Purchase allowed",
      "togglePurchasableSuccessDisable": "Purchase disallowed",
      "toggleConfirmEnable": "Enable this package? It will be available for new tenants to choose/purchase.",
      "toggleConfirmDisable": "Disable this package? New tenants will not be able to choose it (existing subscriptions are not affected).",
      "toggleTitleEnable": "Enable Confirmation",
      "toggleTitleDisable": "Disable Confirmation",
      "toggleSuccessEnable": "Enabled",
      "toggleSuccessDisable": "Disabled",
      "deleteSuccess": "Deleted successfully",
      "deleteConfirm": "Are you sure to delete this package? It will be soft deleted.",
      "deleteTitle": "Delete Confirmation"
    },
    "type": {
      "free": "Free",
      "standard": "Standard",
      "professional": "Professional",
      "enterprise": "Enterprise",
      "unknown": "Unknown"
    }
  },
  "subscription": {
    "title": "Subscription Management",
    "search": {
      "status": "Status",
      "statusPlaceholder": "All Status",
      "package": "Package",
      "packagePlaceholder": "All Packages",
      "tenantKeyword": "Tenant Keyword",
      "tenantKeywordPlaceholder": "Tenant name / code",
      "expireDateRange": "Expire Date",
      "expireDateRangePlaceholder": "Select date range"
    },
    "table": {
      "index": "No.",
      "tenantName": "Tenant Name",
      "currentPackage": "Current Package",
      "status": "Status",
      "effectiveDate": "Effective Date",
      "expireDate": "Expire Date",
      "createdAt": "Created At",
      "autoRenew": "Auto Renew",
      "action": "Actions"
    },
    "action": {
      "detail": "View Details",
      "more": "More",
      "extend": "Extend",
      "changePlan": "Change Plan",
      "changeStatus": "Change Status"
    },
    "status": {
      "pending": "Pending",
      "active": "Active",
      "gracePeriod": "Grace Period",
      "cancelled": "Cancelled",
      "suspended": "Suspended"
    },
    "detail": {
      "title": "Subscription Details",
      "basicInfo": "Basic Information",
      "tenantName": "Tenant Name",
      "currentPackage": "Current Package",
      "status": "Status",
      "effectiveDate": "Effective Date",
      "expireDate": "Expire Date",
      "autoRenew": "Auto Renew",
      "notes": "Notes",
      "notesPlaceholder": "Enter notes (optional)",
      "saveNotes": "Save Notes",
      "saveNotesSuccess": "Notes saved",
      "autoRenewUpdateSuccess": "Auto renew updated",
      "autoRenewUpdateFailed": "Failed to update auto renew",
      "quotaUsage": "Quota Usage",
      "noQuota": "No quota data",
      "stores": "Stores",
      "accounts": "Accounts",
      "storage": "Storage",
      "sms": "SMS Credits",
      "deliveryOrders": "Delivery Orders",
      "promotionSlots": "Promotion Slots",
      "unlimited": "Unlimited",
      "changeHistory": "Change History",
      "noHistory": "No history records",
      "changeType": {
        "new": "New",
        "renew": "Renew",
        "upgrade": "Upgrade",
        "downgrade": "Downgrade",
        "unknown": "Change"
      }
    },
    "extend": {
      "title": "Extend Subscription",
      "duration": "Duration",
      "durationPlaceholder": "Enter duration",
      "unit": "Unit",
      "unitDay": "Day(s)",
      "unitMonth": "Month(s)",
      "notes": "Notes",
      "notesPlaceholder": "Enter notes (optional)",
      "preview": "New Expire Date",
      "success": "Extended successfully",
      "validation": {
        "durationRequired": "Please enter duration",
        "durationMin": "Duration must be at least 1"
      }
    },
    "changePlan": {
      "title": "Change Plan",
      "currentPackage": "Current Package",
      "newPackage": "New Package",
      "newPackagePlaceholder": "Select new package",
      "effectiveTime": "Effective Time",
      "effectiveNow": "Immediately",
      "effectiveNextCycle": "Next Cycle",
      "notes": "Notes",
      "notesPlaceholder": "Enter notes (optional)",
      "success": "Plan changed successfully",
      "validation": {
        "packageRequired": "Please select new package"
      }
    },
    "changeStatus": {
      "title": "Change Status",
      "currentStatus": "Current Status",
      "newStatus": "New Status",
      "newStatusPlaceholder": "Select new status",
      "reason": "Reason",
      "reasonPlaceholder": "Enter reason",
      "confirm": "Change subscription status to {status}?",
      "success": "Status changed successfully",
      "validation": {
        "statusRequired": "Please select new status",
        "reasonRequired": "Please enter reason"
      }
    }
  },
  "quotaPackage": {
    "title": "Quota Package Management",
    "tabs": {
      "packages": "Packages",
      "purchases": "Purchase Records",
      "dashboard": "Quota Dashboard",
      "alertConfig": "Alert Settings"
    },
    "search": {
      "quotaType": "Quota Type",
      "quotaTypePlaceholder": "All Types",
      "status": "Status",
      "statusPlaceholder": "All Status"
    },
    "table": {
      "index": "No.",
      "name": "Package Name",
      "quotaType": "Quota Type",
      "quotaValue": "Quota Value",
      "price": "Price",
      "status": "Status",
      "sortOrder": "Sort Order",
      "action": "Actions"
    },
    "action": {
      "create": "Create Package"
    },
    "quotaType": {
      "storeCount": "Store Count",
      "accountCount": "Account Count",
      "storage": "Storage",
      "smsCredits": "SMS Credits",
      "deliveryOrders": "Delivery Orders",
      "promotionSlots": "Promotion Slots"
    },
    "status": {
      "active": "Active",
      "inactive": "Inactive"
    },
    "unit": {
      "sms": "messages",
      "orders": "orders"
    },
    "benefit": {
      "featureStrategy": {
        "title": "Feature policy",
        "invalidJson": "Invalid feature policy JSON",
        "notConfigured": "Feature policy not configured",
        "empty": "No policy items to display",
        "columns": {
          "name": "Policy",
          "value": "Value",
          "status": "Status",
          "conditions": "Conditions"
        },
        "status": {
          "enabled": "Enabled",
          "disabled": "Disabled"
        },
        "value": {
          "unlimited": "Unlimited"
        },
        "noConditions": "None",
        "conditions": {
          "dependsOnEnabled": "Depends on: {name}=enabled",
          "min": "Min: {min}",
          "max": "Max: {max}",
          "unknownDependency": "Unknown dependency ({key})"
        }
      }
    },
    "form": {
      "createTitle": "Create Quota Package",
      "editTitle": "Edit Quota Package",
      "name": "Package Name",
      "namePlaceholder": "Enter package name",
      "quotaType": "Quota Type",
      "quotaTypePlaceholder": "Select quota type",
      "quotaValue": "Quota Value",
      "quotaValuePlaceholder": "Enter quota value",
      "price": "Price",
      "pricePlaceholder": "Enter price",
      "description": "Description",
      "descriptionPlaceholder": "Enter description (optional)",
      "sortOrder": "Sort Order",
      "isActive": "Active Status"
    },
    "purchase": {
      "title": "Purchase Quota Package",
      "tenant": "Tenant",
      "quotaPackage": "Quota Package",
      "quotaPackagePlaceholder": "Select quota package",
      "price": "Price",
      "notes": "Notes",
      "notesPlaceholder": "Enter notes (optional)",
      "confirm": "Confirm Purchase",
      "success": "Purchased successfully"
    },
    "purchases": {
      "search": {
        "tenant": "Tenant",
        "tenantPlaceholder": "Select tenant"
      },
      "table": {
        "index": "No.",
        "tenantName": "Tenant Name",
        "quotaPackageName": "Quota Package",
        "quotaType": "Quota Type",
        "quotaValue": "Quota Value",
        "price": "Price",
        "purchasedAt": "Purchased At",
        "expiredAt": "Expired At"
      },
      "message": {
        "selectTenantFirst": "Please select a tenant first"
      }
    },
    "dashboard": {
      "search": {
        "tenant": "Tenant",
        "tenantPlaceholder": "Select tenant"
      },
      "empty": {
        "selectTenant": "Please select a tenant to view quota usage"
      },
      "meta": {
        "used": "Used",
        "total": "Total"
      },
      "threshold": {
        "reached": "Reached {threshold}%"
      },
      "message": {
        "selectTenantFirst": "Please select a tenant first"
      }
    },
    "alertConfig": {
      "tip": {
        "title": "Alert Threshold",
        "description": "When quota usage reaches or exceeds the threshold, the dashboard will show an alert indicator."
      },
      "action": {
        "reset": "Reset",
        "resetDefault": "Restore Default",
        "save": "Save"
      },
      "message": {
        "saveSuccess": "Saved successfully",
        "resetSuccess": "Reset successfully",
        "resetDefaultSuccess": "Default thresholds restored"
      }
    },
    "validation": {
      "nameRequired": "Please enter package name",
      "nameMaxLength": "Name cannot exceed 50 characters",
      "quotaTypeRequired": "Please select quota type",
      "quotaValueRequired": "Please enter quota value",
      "priceRequired": "Please enter price",
      "packageRequired": "Please select quota package"
    },
    "message": {
      "createSuccess": "Created successfully",
      "updateSuccess": "Updated successfully",
      "deleteConfirm": "Are you sure you want to delete this quota package?",
      "deleteSuccess": "Deleted successfully",
      "statusUpdateSuccess": "Status updated successfully"
    }
  },
  "announcementDrafts": {
    "title": "Draft Center",
    "filter": {
      "type": "Type",
      "typePlaceholder": "All Types",
      "date": "Date",
      "dateStart": "Start date",
      "dateEnd": "End date"
    },
    "table": {
      "title": "Title",
      "type": "Type",
      "lastSaved": "Last Saved",
      "author": "Author",
      "empty": "No drafts"
    },
    "action": {
      "continueEdit": "Continue Editing",
      "publish": "Publish"
    },
    "message": {
      "loadFailed": "Failed to load drafts, please try again later",
      "deleteConfirm": "Delete this draft?",
      "deleteTitle": "Delete Draft",
      "deleteSuccess": "Draft deleted",
      "publishConfirm": "Publish this draft?",
      "publishTitle": "Publish Draft",
      "publishSuccess": "Draft published",
      "missingRowVersion": "Missing version info, cannot publish",
      "localPublishHint": "Local drafts must be published from the editor",
      "draftNotFound": "Draft not found or expired",
      "routeNotFound": "Editor route not found, please check routing"
    },
    "pagination": {
      "total": "Total {count} drafts"
    },
    "source": {
      "local": "Local Draft",
      "server": "Server Draft"
    },
    "type": {
      "all": "All",
      "system": "System Announcement",
      "billing": "Billing/Subscription Reminder",
      "operation": "Operations Notice",
      "systemPlatformUpdate": "Platform System Update",
      "systemSecurityNotice": "System Security Notice",
      "systemCompliance": "System Compliance Notice",
      "tenantInternal": "Tenant Internal Notice",
      "tenantFinance": "Tenant Finance Notice",
      "tenantOperation": "Tenant Operations Notice",
      "unknown": "Unknown Type"
    },
    "field": {
      "untitled": "Untitled Draft",
      "unknownAuthor": "Unknown",
      "unknown": "Unknown"
    }
  },
  "table": {
    "form": {
      "reset": "Reset",
      "submit": "Submit"
    },
    "searchBar": {
      "reset": "Reset",
      "search": "Search",
      "expand": "Expand",
      "collapse": "Collapse",
      "searchInputPlaceholder": "Please enter",
      "searchSelectPlaceholder": "Please select"
    },
    "selection": "Select",
    "sizeOptions": {
      "small": "Compact",
      "default": "Default",
      "large": "Loose"
    },
    "column": {
      "selection": "Select",
      "expand": "Expand",
      "index": "Index"
    },
    "zebra": "Zebra",
    "border": "Border",
    "headerBackground": "Header BG"
  },
  "billing": {
    "title": "Billing Management",
    "quickFilter": {
      "title": "Quick Filter",
      "all": "All"
    },
    "search": {
      "tenant": "Tenant",
      "tenantPlaceholder": "Search tenant name",
      "billingType": "Billing Type",
      "billingTypePlaceholder": "Select billing type",
      "status": "Status",
      "statusPlaceholder": "Select status",
      "dateRange": "Date Range",
      "dateRangePlaceholder": "Select date range",
      "amountRange": "Amount Range",
      "minAmountPlaceholder": "Min amount",
      "maxAmountPlaceholder": "Max amount",
      "keyword": "Keyword",
      "keywordPlaceholder": "Statement No. or Tenant Name"
    },
    "field": {
      "statementNo": "Statement No.",
      "tenantName": "Tenant Name",
      "billingType": "Billing Type",
      "amount": "Amount",
      "amountDue": "Amount Due",
      "amountPaid": "Amount Paid",
      "status": "Status",
      "dueDate": "Due Date",
      "periodStart": "Period Start",
      "periodEnd": "Period End",
      "createdAt": "Created At",
      "notes": "Notes"
    },
    "billingType": {
      "subscription": "Subscription",
      "quotaPurchase": "Quota Purchase",
      "manual": "Manual",
      "renewal": "Renewal"
    },
    "status": {
      "pending": "Pending",
      "paid": "Paid",
      "overdue": "Overdue",
      "cancelled": "Cancelled"
    },
    "action": {
      "export": "Export",
      "create": "Create Bill",
      "detail": "View Detail",
      "markPaid": "Mark Paid",
      "cancel": "Cancel",
      "recordPayment": "Record Payment",
      "exportExcel": "Export Excel",
      "exportPdf": "Export PDF",
      "addLineItem": "Add Line Item",
      "batch": "Batch Actions",
      "batchMarkPaid": "Batch Mark Paid",
      "batchExportExcel": "Batch Export Excel",
      "batchExportPdf": "Batch Export PDF",
      "uploadProof": "Upload Proof"
    },
    "dialog": {
      "createTitle": "Create Bill Manually",
      "recordPaymentTitle": "Confirm Payment",
      "proofPreviewTitle": "Proof Preview"
    },
    "drawer": {
      "title": "Bill Detail",
      "basicInfo": "Basic Information",
      "paymentList": "Payment Records",
      "tabs": {
        "basic": "Basic",
        "lineItems": "Line Items",
        "payments": "Payments",
        "statusFlow": "Status Flow"
      },
      "openProof": "Open Proof",
      "noPayments": "No payment records",
      "noStatusFlow": "No status flow records"
    },
    "view": {
      "timeline": "Timeline",
      "table": "Table"
    },
    "lineItem": {
      "itemType": "Item Type",
      "description": "Description",
      "quantity": "Quantity",
      "unitPrice": "Unit Price",
      "amount": "Amount"
    },
    "statusFlow": {
      "created": "Created",
      "due": "Due",
      "paid": "Paid",
      "overdue": "Overdue",
      "cancelled": "Cancelled"
    },
    "hint": {
      "amountAutoSum": "Amount is summed from line items"
    },
    "placeholder": {
      "selectTenant": "Select tenant",
      "selectBillingType": "Select billing type",
      "enterAmount": "Enter amount",
      "selectDueDate": "Select due date",
      "enterNotes": "Enter notes",
      "enterItemType": "e.g., Subscription/Quota/Manual",
      "enterDescription": "Enter description",
      "enterPaymentAmount": "Enter payment amount",
      "selectPaymentMethod": "Select payment method",
      "enterTransactionNo": "Enter transaction no. (optional)",
      "enterProofUrl": "Enter proof URL (optional)",
      "enterPaymentNotes": "Enter payment notes (optional)"
    },
    "validation": {
      "tenantRequired": "Please select tenant",
      "billingTypeRequired": "Please select billing type",
      "amountRequired": "Please enter amount",
      "amountMin": "Amount must be greater than 0",
      "dueDateRequired": "Please select due date",
      "lineItemsRequired": "Please add at least 1 line item",
      "lineItemDescriptionRequired": "Line item #{index}: description is required",
      "lineItemQuantityInvalid": "Line item #{index}: quantity must be greater than 0",
      "lineItemUnitPriceInvalid": "Line item #{index}: unit price cannot be negative",
      "paymentAmountRequired": "Please enter payment amount",
      "paymentAmountMin": "Payment amount must be greater than 0",
      "paymentAmountExceedRemain": "Payment amount cannot exceed remaining amount",
      "paymentMethodRequired": "Please select payment method"
    },
    "message": {
      "createSuccess": "Bill created successfully",
      "loadDetailFailed": "Failed to load billing detail",
      "sortFieldNotSupported": "This sort field is not supported",
      "cancelConfirm": "Are you sure to cancel this bill?",
      "cancelByAdmin": "Cancelled by admin",
      "cancelSuccess": "Bill cancelled",
      "recordPaymentSuccess": "Payment confirmed",
      "exportNoData": "No data to export",
      "exportExcelSuccess": "Exported {count} records",
      "exportSuccess": "Exported {count} records",
      "exportFailed": "Export failed, please retry later",
      "exportPdfNeedDetail": "Please open bill detail or select exactly 1 bill before exporting PDF",
      "exportPdfNeedSingleSelection": "Please select exactly 1 bill to export PDF",
      "exportPdfPopupBlocked": "Popup blocked by the browser. Please allow popups and retry.",
      "exportPdfOpened": "Print window opened. Choose “Save as PDF” in the print dialog.",
      "noSelection": "Please select bills first",
      "batchNoPending": "No pending bills in selection",
      "batchMarkPaidNotes": "Batch marked as paid",
      "batchMarkPaidSuccess": "Confirmed payment for {count} bills",
      "batchCancelNotes": "Batch cancelled",
      "batchCancelSuccess": "Cancelled {count} bills",
      "proofTypeNotAllowed": "Only JPG/PNG files are allowed",
      "proofTooLarge": "File too large. Max {size}MB",
      "proofUploadSuccess": "Proof uploaded successfully"
    },
    "export": {
      "title": "Export Settings",
      "format": "Format",
      "scope": "Scope",
      "fields": "Fields",
      "currentPage": "Current Page",
      "selected": "Selected",
      "all": "All",
      "confirm": "Export",
      "dateRange": "Date Range",
      "dateRangePlaceholder": "Select date range",
      "formatRequired": "Please select format",
      "scopeRequired": "Please select scope",
      "fieldsRequired": "Please select at least one field",
      "formatExcel": "Excel",
      "formatPdf": "PDF",
      "formatCsv": "CSV",
      "sheetName": "Bills",
      "fileName": "bills_export",
      "selectedSuffix": "selected",
      "noPayments": "No payment records"
    },
    "batch": {
      "confirmPayment": "Batch Confirm Payment",
      "cancel": "Batch Cancel",
      "export": "Batch Export",
      "confirmPaymentTip": "Confirm payment for {count} bills in batch?",
      "cancelTip": "Cancel {count} bills in batch?",
      "selectedCount": "Selected {count} items"
    },
    "payment": {
      "amount": "Amount",
      "method": "Method",
      "status": "Status",
      "transactionNo": "Transaction No.",
      "paidAt": "Paid At",
      "notes": "Notes",
      "remainAmount": "Remain Amount",
      "proofUrl": "Proof URL",
      "proofUrlHint": "URL link to payment proof image",
      "proofUploadHint": "JPG/PNG only, max 10MB. URL will be filled after upload."
    },
    "paymentMethod": {
      "online": "Online",
      "bankTransfer": "Bank Transfer",
      "other": "Other"
    },
    "paymentStatus": {
      "pending": "Pending",
      "success": "Success",
      "failed": "Failed",
      "refunded": "Refunded"
    }
  },
  "dashboard": {
    "title": "Operations Dashboard",
    "overview": {
      "title": "Subscription Overview",
      "totalActive": "Active Subscriptions",
      "expiringIn7Days": "Expiring in 7 Days",
      "expiringIn3Days": "Expiring in 3 Days",
      "expiringIn1Day": "Expiring Tomorrow",
      "expired": "Expired",
      "pending": "Pending",
      "suspended": "Suspended"
    },
    "expiring": {
      "title": "Expiring Subscriptions",
      "viewAll": "View All",
      "noData": "No expiring subscriptions",
      "daysLeft": "Days Left"
    },
    "revenue": {
      "title": "Revenue Statistics",
      "total": "Total Revenue",
      "monthly": "Monthly Revenue",
      "quarterly": "Quarterly Revenue"
    },
    "quotaRanking": {
      "title": "Quota Usage Ranking",
      "tenant": "Tenant",
      "usage": "Usage",
      "limit": "Limit",
      "percentage": "Usage Rate",
      "rank": "Rank",
      "quotaType": "Quota Type",
      "selectType": "Select Quota Type",
      "type": {
        "orders": "Orders",
        "storage": "Storage",
        "users": "Users"
      }
    }
  },
  "batch": {
    "selectedCount": "Selected {count} items",
    "extend": {
      "title": "Batch Extend",
      "selectedCount": "Selected {count} subscriptions",
      "duration": "Duration",
      "notes": "Notes",
      "notesPlaceholder": "Enter notes (optional)",
      "success": "Batch extend successful",
      "partialSuccess": "Batch extend partially successful, {success} succeeded, {failed} failed",
      "result": "{success} succeeded, {failed} failed",
      "noSelection": "Please select subscriptions to extend",
      "failedItems": "Failed Items"
    },
    "remind": {
      "title": "Batch Remind",
      "selectedCount": "Selected {count} subscriptions",
      "content": "Reminder Content",
      "contentPlaceholder": "Enter reminder content",
      "success": "Batch reminders sent successfully",
      "partialSuccess": "Batch reminders partially successful, {success} succeeded, {failed} failed",
      "result": "{success} sent, {failed} failed",
      "noSelection": "Please select subscriptions to remind",
      "failedItems": "Failed Items",
      "validation": {
        "contentRequired": "Please enter reminder content",
        "contentMin": "Reminder content must be at least 10 characters"
      }
    }
  },
  "user": {
    "action": {
      "create": "Create User",
      "view": "View",
      "edit": "Edit",
      "more": "More",
      "enable": "Enable",
      "disable": "Disable",
      "unlock": "Unlock",
      "resetPassword": "Reset Password",
      "restore": "Restore",
      "delete": "Delete",
      "cancel": "Cancel",
      "confirm": "Confirm"
    },
    "avatar": {
      "upload": "Upload",
      "reupload": "Reupload",
      "remove": "Remove",
      "noImage": "No Image",
      "tip": "Supports jpg/png/webp, auto-filled after upload"
    },
    "batch": {
      "title": "Batch Actions",
      "selected": "{count} selected",
      "enable": "Batch Enable",
      "disable": "Batch Disable",
      "delete": "Batch Delete",
      "restore": "Batch Restore",
      "export": "Batch Export"
    },
    "detail": {
      "title": "User Details",
      "rolesTitle": "Roles",
      "permissionsTitle": "Permissions"
    },
    "empty": {
      "roles": "No roles",
      "permissions": "No permissions"
    },
    "field": {
      "userId": "User ID",
      "tenant": "Tenant",
      "account": "Account",
      "displayName": "Display Name",
      "phone": "Phone",
      "email": "Email",
      "status": "Status",
      "createdAt": "Created At",
      "lastLoginAt": "Last Login",
      "password": "Password",
      "roles": "Roles",
      "avatar": "Avatar"
    },
    "status": {
      "active": "Active",
      "disabled": "Disabled",
      "locked": "Locked",
      "deleted": "Deleted",
      "unknown": "Unknown"
    },
    "table": {
      "avatar": "Avatar",
      "account": "Account",
      "displayName": "Display Name",
      "phone": "Phone",
      "email": "Email",
      "roles": "Roles",
      "status": "Status",
      "createdAt": "Created At",
      "lastLoginAt": "Last Login",
      "actions": "Actions",
      "tenant": "Tenant"
    },
    "search": {
      "keyword": "Keyword",
      "keywordPlaceholder": "Account/Name/Phone/Email",
      "status": "Status",
      "statusPlaceholder": "All Statuses",
      "role": "Role",
      "rolePlaceholder": "Select role",
      "createdRange": "Created At",
      "createdRangeStart": "Start",
      "createdRangeEnd": "End",
      "lastLoginRange": "Last Login",
      "lastLoginRangeStart": "Start",
      "lastLoginRangeEnd": "End",
      "includeDeleted": "Include Deleted",
      "includeDeletedOn": "Include",
      "includeDeletedOff": "Exclude",
      "tenant": "Tenant",
      "tenantPlaceholder": "Select tenant"
    },
    "placeholder": {
      "tenant": "Select tenant",
      "account": "Enter account",
      "displayName": "Enter display name",
      "password": "Enter password",
      "phone": "Enter phone",
      "email": "Enter email",
      "avatar": "Enter avatar URL",
      "roles": "Select roles",
      "status": "Select status"
    },
    "dialog": {
      "createTitle": "Create User",
      "editTitle": "Edit User"
    },
    "validation": {
      "tenantRequired": "Please select a tenant",
      "accountRequired": "Please enter an account",
      "displayNameRequired": "Please enter a display name",
      "passwordRequired": "Please enter a password",
      "passwordLength": "Password length must be 6-32 characters",
      "phoneInvalid": "Please enter a valid phone number",
      "emailInvalid": "Please enter a valid email address"
    },
    "message": {
      "createSuccess": "User created successfully",
      "missingUserId": "Missing user ID, cannot submit",
      "rowVersionMissing": "Missing row version, please refresh and retry",
      "updateSuccess": "User updated successfully",
      "concurrencyConflict": "Data has been updated. Please refresh and retry: {message}",
      "statusConfirm": "Confirm change status for {name}?",
      "statusSuccess": "Status updated successfully",
      "deleteConfirm": "Confirm delete {name}?",
      "deleteSuccess": "User deleted",
      "restoreConfirm": "Confirm restore {name}?",
      "restoreSuccess": "User restored",
      "resetConfirm": "Confirm reset password for {name}?",
      "resetToken": "Reset token: {token}\nExpires at: {expiresAt}",
      "batchEmpty": "Please select users first",
      "batchLimit": "Up to 100 users can be processed at once",
      "batchConfirm": "Confirm batch action for {count} users?",
      "batchResult": "Succeeded {success}, failed {failure}.\nFailure details:\n{details}",
      "batchSuccess": "Batch action succeeded for {count} users",
      "exportSuccess": "Exported {count} user records"
    },
    "export": {
      "fileName": "users"
    }
  },
  "announcement": {
    "audience": {
      "title": "Audience Selector",
      "targetType": "Target Type",
      "targetTypeHint": "Choose the audience for this announcement",
      "type": {
        "all": "All Tenants/Users",
        "roles": "Specific Roles",
        "users": "Specific Users",
        "rules": "Rule-Based",
        "manual": "Manual Selection"
      },
      "helper": {
        "all": "Announcement will be sent to all tenants or users",
        "roles": "Filter recipients by role",
        "users": "Add specific users by search",
        "rules": "Filter by department, role, and tags",
        "manual": "Select users via search and transfer list"
      },
      "rules": {
        "departments": "Department",
        "roles": "Role",
        "tags": "Tags",
        "departmentsPlaceholder": "Select departments",
        "tagsPlaceholder": "Select or type tags",
        "emptyDepartments": "No departments available",
        "emptyRoles": "No roles available",
        "estimateLabel": "Estimated Audience",
        "estimateLoading": "Estimating..."
      },
      "users": {
        "placeholder": "Search users by name/phone/email",
        "unknownUser": "User {id}"
      },
      "manual": {
        "searchPlaceholder": "Search by name/phone/email",
        "transferLeft": "Candidates",
        "transferRight": "Selected",
        "filterPlaceholder": "Type to filter",
        "estimateLabel": "Selected Count"
      },
      "errors": {
        "loadRolesFailed": "Failed to load roles",
        "loadUsersFailed": "Failed to load users"
      }
    }
  }
}
