e64f808633
人工奖只留 名称+图标+概率+库存;中奖凭截图联系客服线下发放,无需 in-app 领奖表单。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
274 lines
11 KiB
JSON
274 lines
11 KiB
JSON
{
|
|
"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: no extra config. When won, the user contacts customer service with a screenshot to redeem — no in-app claim form.",
|
|
"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."
|
|
}
|