{ "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": "Crypto", "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" } }