{
  "activityTime": "Activity Time",
  "cancel": "Cancel",
  "confirm": "Confirm",
  "confirmPause": "Are you sure you want to pause this activity?",
  "confirmPublish": "Are you sure you want to publish this activity?",
  "create": "Create",
  "createActivity": "Create Activity",
  "createSuccess": "Create Success",
  "detail": {
    "prizesTab": "Prizes",
    "rulesTab": "Rules",
    "claimsTab": "Claims",
    "drawsTab": "Draw records"
  },
  "edit": "Edit",
  "editActivity": "Edit Activity",
  "form": {
    "cancel": "Cancel",
    "confirm": "Confirm",
    "description": "Description",
    "descriptionPlaceholder": "Activity description (Markdown supported)",
    "endAt": "End Time",
    "endAtAfterStartAt": "End time must be later than start time",
    "endAtRequired": "End time is required",
    "gridSize": "Grid Size",
    "selectEndAt": "Select time",
    "selectGridSize": "Select grid size",
    "selectStartAt": "Select time",
    "startAt": "Start Time",
    "startAtRequired": "Start time is required",
    "title": "Title",
    "titlePlaceholder": "Activity title",
    "titleRequired": "Title is required"
  },
  "grant": {
    "amount": "Amount",
    "description": "Manually grant draw chances to a user for activity: {{title}}",
    "sourceRef": "Source Reference",
    "sourceRefHint": "Idempotency key: the same reference only grants once. Repeated submissions will not grant again.",
    "sourceRefPlaceholder": "grant-20260709-abc123",
    "success": "Chances granted",
    "title": "Grant Chances",
    "userId": "User ID",
    "userIdHint": "Enter the numeric user ID. You can find it in the user management list.",
    "userIdPlaceholder": "e.g. 87433"
  },
  "grantChances": "Grant Chances",
  "gridSize": "Grid Size",
  "id": "ID",
  "manage": "Manage",
  "pause": "Pause",
  "pauseSuccess": "Pause Success",
  "pauseWarning": "Users will not be able to draw while the activity is paused.",
  "prize": {
    "addPrize": "Add Prize",
    "amountPrecision": "Amount supports at most 2 decimal places",
    "amountRequired": "Amount must be greater than 0",
    "amountUnitHint": "Entered in CNY (yuan), stored as cents; up to 2 decimal places",
    "amountYuan": "Commission Amount (CNY)",
    "cancel": "Cancel",
    "centerSlotHint": "Usually the draw button",
    "claimTtlHint": "How long the user has to submit claim info. Default 168h (7 days).",
    "claimTtlHours": "Claim window (hours)",
    "claimTtlInvalid": "Claim window (hours) must be a positive integer",
    "confirm": "Confirm",
    "confirmDelete": "Delete",
    "createSuccess": "Prize created",
    "createTitle": "Add Prize",
    "cryptoAmount": "Amount",
    "cryptoAmountPlaceholder": "e.g. 0.01",
    "cryptoAmountRequired": "Amount is required",
    "cryptoCurrency": "Currency",
    "cryptoCurrencyRequired": "Currency is required",
    "cryptoNetworks": "Networks",
    "cryptoNetworksHint": "Comma-separated. The user picks one of these when claiming.",
    "cryptoNetworksRequired": "At least one network is required (comma-separated)",
    "daysSuffix": "days",
    "delete": "Delete",
    "deleteDescription": "This prize will be removed from the grid. This action cannot be undone.",
    "deleteSuccess": "Prize deleted",
    "deleteTitle": "Delete this prize?",
    "durationDays": "Duration (days)",
    "durationDaysPlaceholder": "e.g. 1",
    "durationDaysRequired": "Duration days must be a positive integer",
    "durationSummary": "{{days}} days",
    "editTitle": "Edit Prize",
    "fallbackBadge": "Fallback",
    "fallbackIgnoresWeight": "Fallback prize ignores probability (never randomly drawn)",
    "hoursSuffix": "hours",
    "iconUrl": "Icon URL",
    "iconUrlInvalid": "Must be a valid URL",
    "isFallback": "Fallback Prize",
    "isFallbackHint": "Awarded when limited prizes are sold out",
    "manualPrizeHint": "Manual prize: the winner submits claim info, then an operator approves and marks it paid/shipped under the Claims tab.",
    "name": "Prize Name",
    "namePlaceholder": "e.g. 1-Day Pass",
    "nameRequired": "Name is required",
    "noFallbackHint": "Consider configuring a fallback prize so draws never fail when limited prizes run out.",
    "noFallbackTitle": "No fallback prize",
    "noRandomPrizes": "No prizes participate in the random draw yet",
    "noneHint": "No config needed. Consider enabling fallback so users always land on this prize when limited prizes run out.",
    "probabilityPreview": "Probability Preview",
    "probabilityTotal": "Total",
    "selectType": "Select type",
    "skuName": "Item name (optional)",
    "skuNamePlaceholder": "e.g. Limited T-shirt",
    "slotLabel": "Slot",
    "soldOutBadge": "Sold Out",
    "stockShort": "Stock",
    "subscribePlan": "New-subscription plan",
    "subscribePlanHint": "When the user has no active subscription, create one on this plan and grant the duration. Leave empty to skip granting.",
    "subscribePlanPlaceholder": "None — skip if user has no active subscription",
    "totalNot100Hint": "The drawable prizes currently total {{total}}%. Adjust each prize's win probability so they sum to exactly 100%.",
    "totalNot100Title": "Probabilities must total 100%",
    "totalStock": "Total Stock",
    "totalStockPlaceholder": "e.g. 100",
    "totalStockRequired": "Total stock must be a positive integer",
    "type": "Prize Type",
    "typeCommission": "Commission",
    "typeCoupon": "Coupon",
    "typeCrypto": "Manual Grant",
    "typeManualOther": "Manual (Other)",
    "typeNone": "No Prize (Thanks)",
    "typePhysical": "Physical",
    "typePoints": "Points",
    "typeVpnDuration": "VPN Duration",
    "unlimitedStock": "Unlimited Stock",
    "updateSuccess": "Prize updated",
    "weight": "Win probability (%)",
    "weightHint": "Percent chance in the grid. All drawable prizes must total 100%. 0 = shown but never drawn.",
    "weightInteger": "Probability must be an integer",
    "weightMax": "Probability cannot exceed 100",
    "weightMin": "Probability must be at least 0",
    "weightShort": "Prob",
    "yuanSuffix": "CNY"
  },
  "publish": "Publish",
  "publishSuccess": "Publish Success",
  "publishWarning": "Once published, the activity becomes visible to users.",
  "rules": {
    "addCondition": "Add Condition",
    "addSource": "Add Source",
    "amount": "Amount",
    "cannotSimplify": "This rule tree is too complex for simple mode. Please edit it in Advanced mode.",
    "capsBytesExceeded": "Size {{value}} bytes exceeds limit {{limit}} bytes",
    "capsDepthExceeded": "Depth {{value}} exceeds limit {{limit}}",
    "capsExceeded": "Rule tree exceeds limits",
    "capsNodesExceeded": "Node count {{value}} exceeds limit {{limit}}",
    "chanceSources": "Chance Sources",
    "chanceSourcesDescription": "Configure how users earn draw chances. Each source can only appear once.",
    "conditionType": {
      "has_subscription": "Has Subscription",
      "invite_count": "Invite Count",
      "register_days": "Register Days",
      "subscription_type": "Subscription Type",
      "total_recharge": "Total Recharge",
      "user_tag": "User Tag"
    },
    "dailyLimit": "Daily limit (optional)",
    "duplicateSource": "Duplicate source",
    "eligibility": "Eligibility",
    "jsonInvalid": "Invalid JSON: {{error}}",
    "jsonMustBeObject": "Rule tree must be a JSON object",
    "jsonPlaceholder": "Rule tree JSON, e.g. {\"op\":\"AND\",\"children\":[...]}. Leave empty for no requirement.",
    "noConditions": "No conditions. Everyone is eligible to join.",
    "op": "Combine Conditions With",
    "opAnd": "AND",
    "opOr": "OR",
    "param": {
      "min": "Min Count",
      "minDaysRemaining": "Min Days Remaining",
      "minUsdt": "Min USDT",
      "planIds": "Plan IDs",
      "planIdsPlaceholder": "Comma separated, e.g. 1,2,3",
      "tags": "Tags",
      "tagsPlaceholder": "Comma separated, e.g. vip,beta",
      "windowDays": "Window Days (optional)"
    },
    "save": "Save Rules",
    "saveFailed": "Failed to save rules",
    "saveSuccess": "Rules saved",
    "selectSource": "Select source",
    "simpleMode": "Simple",
    "advancedMode": "Advanced (JSON)",
    "source": {
      "dailySignin": "Daily Sign-in",
      "inviteSuccess": "Invite Success",
      "manualGrant": "Manual Grant",
      "newSubscription": "New Subscription"
    },
    "stage1Warning": "Stage 1 notice",
    "stage1WarningDescription": "The rule context is not wired up in the current version (Stage 1). Configuring eligibility will prevent users from joining the lottery. It is recommended to keep it empty."
  },
  "status": {
    "draft": "Draft",
    "ended": "Ended",
    "paused": "Paused",
    "running": "Running"
  },
  "statusAll": "All",
  "statusLabel": "Status",
  "title": "Title",
  "updateSuccess": "Update Success",
  "claim": {
    "approve": "Approve",
    "approveDescription": "Approving moves this claim to the paying/shipping stage.",
    "approveSuccess": "Claim approved",
    "approveTitle": "Approve this claim?",
    "cancel": "Cancel",
    "claimData": "Claim info",
    "confirm": "Confirm",
    "confirmMarkPaid": "Confirm",
    "confirmReject": "Confirm reject",
    "createdAt": "Won at",
    "deliveryRef": "Delivery ref",
    "deliveryRefPlaceholder": "Tracking number",
    "deliveryRefRequired": "Delivery ref is required for physical",
    "expiresAt": "Expires",
    "filterStatus": "Status",
    "filterType": "Type",
    "filterUserId": "User ID",
    "fulfillment": "Tx / Delivery",
    "markPaid": "Mark fulfilled",
    "markPaidDescription": "Crypto requires a tx hash; physical requires a delivery ref; manual requires at least one.",
    "markPaidSuccess": "Marked as fulfilled",
    "markPaidTitle": "Mark as fulfilled",
    "oneRefRequired": "Fill at least one field",
    "prize": "Prize",
    "reason": "Reason",
    "reasonPlaceholder": "Reason shown to the user",
    "reasonRequired": "Please enter a reason",
    "reasonTooLong": "Reason cannot exceed 512 chars",
    "reject": "Reject",
    "rejectDescription": "The reason is shown to the user, who may then resubmit.",
    "rejectSuccess": "Claim rejected",
    "rejectTitle": "Reject claim",
    "status": "Status",
    "statusExpired": "Expired",
    "statusPaid": "Fulfilled",
    "statusPaying": "Paying / Shipping",
    "statusPending": "Awaiting user",
    "statusRejected": "Rejected",
    "statusReviewing": "Reviewing",
    "tableTitle": "Claims",
    "txHash": "Tx hash",
    "txHashRequired": "Tx hash is required for crypto",
    "user": "User"
  },
  "draw": {
    "dispatchAutoClaimed": "Auto-granted",
    "dispatchExpired": "Expired",
    "dispatchFailed": "Failed",
    "dispatchNone": "Pending",
    "dispatchPaid": "Fulfilled",
    "dispatchPendingClaim": "Awaiting claim",
    "dispatchState": "Dispatch",
    "drawnAt": "Drawn at",
    "filterDispatch": "Dispatch",
    "filterUserId": "User ID",
    "filterWin": "Won?",
    "grant": "Grant result",
    "loseOnly": "Not won",
    "prize": "Prize",
    "tableTitle": "Draw records",
    "user": "User",
    "winOnly": "Won"
  },
  "delete": "Delete",
  "deleteSuccess": "Deleted",
  "confirmDeleteActivity": "Delete this activity?",
  "confirmDeleteActivityDesc": "This permanently deletes the activity and its prizes. A running activity must be paused first. This cannot be undone."
}
