refactor: 合并多语言支持的显示名称字段,优化奖池手动爆发功能的返回数据结构,增强管理端权限控制

This commit is contained in:
2026-05-25 14:31:24 +08:00
parent 7d01e5c47e
commit ddedef824e
101 changed files with 3033 additions and 641 deletions

View File

@@ -159,6 +159,7 @@
"prd.rebate.view": "Commission/Rebate · View",
"prd.jackpot.manage": "Jackpot Configuration · Manage",
"prd.jackpot.view": "Jackpot Configuration · View",
"prd.jackpot.manual_burst": "Jackpot Manual Burst · Super Admin Only",
"prd.payout.manage": "Payout Confirmation · Manage",
"prd.payout.review": "Payout Confirmation · Review",
"prd.payout.view": "Payout Confirmation · View",

View File

@@ -26,7 +26,31 @@
"createTask": "Create task",
"clear": "Clear",
"done": "Done",
"exportExcel": "Export Excel"
"exportExcel": "Export Excel",
"save": "Save changes",
"updateSuccess": "Updated successfully",
"updateFailed": "Update failed",
"updatePassword": "Update password"
},
"accountSettings": "Account settings",
"accountSettingsDesc": "Manage your profile and security settings.",
"profileSettings": "Profile",
"profileSettingsDesc": "Update your display name.",
"securitySettings": "Security",
"securitySettingsDesc": "Change your login password. Leave blank if you are not changing it.",
"fields": {
"nickname": "Nickname",
"newPassword": "New password",
"confirmPassword": "Confirm password"
},
"placeholders": {
"nickname": "Enter nickname",
"password": "Enter new password",
"confirmPassword": "Re-enter new password"
},
"validation": {
"required": "{{field}} is required",
"passwordMismatch": "Passwords do not match"
},
"aria": {
"expand": "Expand",
@@ -59,7 +83,16 @@
"date": {
"placeholder": "Select date",
"rangePlaceholder": "Select date range",
"rangeHint": "Select a start date, then an end date. For a single day, click the same date twice. Click Done to close."
"rangeHint": "Select a start date, then an end date. For a single day, click the same date twice. Click Done to close.",
"weekdays": {
"sunday": "Sunday",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday"
}
},
"pagination": {
"perPage": "Per page",
@@ -76,6 +109,10 @@
"errors": {
"loadFailed": "Failed to load"
},
"permission": {
"deniedTitle": "Access denied",
"deniedDescription": "Your account does not have permission to open this page. Ask an administrator to assign the required role permissions."
},
"table": {
"id": "ID"
},
@@ -98,6 +135,7 @@
"draws": "Draws",
"rules_plays": "Play rules",
"rules_odds": "Odds & rebate",
"rules": "Betting rules",
"risk_cap": "Risk cap rules",
"risk": "Risk center",
"settlement": "Settlement",
@@ -105,12 +143,18 @@
"reconcile": "Reconcile",
"tickets": "Ticket list",
"audit": "Audit Logs",
"settings": "Settings"
"settings": "Settings",
"account": "Account settings"
},
"sidebar": {
"workspace": "Workspace"
},
"auth": {
"checking": "Checking sign-in status…"
},
"confirm": {
"cancel": "Cancel",
"confirm": "Confirm",
"confirmSave": "Save"
}
}

View File

@@ -83,7 +83,9 @@
"outMin": "Per-order minimum from lottery wallet to main wallet",
"outMax": "Per-order maximum from lottery wallet to main wallet"
},
"discard": "Discard changes"
"discard": "Discard changes",
"confirmSaveTitle": "Save wallet limits?",
"confirmSaveDescription": "This updates per-order transfer-in/out limits and immediately affects player wallet transfers."
},
"system": {
"title": "Draw and settlement runtime settings",
@@ -99,19 +101,25 @@
"manualReview": "Require manual review for draw results",
"cooldownMinutes": "Cooldown duration (minutes)",
"autoSettlement": "Run settlement automatically",
"autoApprove": "Auto-approve settlement batches",
"autoPayout": "Auto-credit winnings to wallets",
"playRulesHtml": "Play rules HTML (i18n)",
"playRulesHtmlDesc": "Rendered on the player play-rules page per locale. Leave empty to fall back to another language or the default empty state."
},
"hints": {
"manualReview": "When enabled, RNG draw results enter pending review and must be published manually in admin.",
"cooldownMinutes": "How long to wait after publishing before entering settling. Use 0 to settle immediately.",
"autoSettlement": "When disabled, tick will not run settlement automatically and admins must trigger it manually."
"autoSettlement": "When disabled, tick will not run settlement automatically and admins must trigger it manually.",
"autoApprove": "After cooldown ends and settlement completes, whether batches are automatically marked as approved.",
"autoPayout": "After a batch is approved, whether tick automatically credits winnings to player wallets."
},
"states": {
"enabled": "Enabled",
"disabled": "Disabled"
},
"discard": "Discard changes"
"discard": "Discard changes",
"confirmSaveTitle": "Save system runtime parameters?",
"confirmSaveDescription": "This updates draw review, cooldown, auto settlement/approval/payout, and play-rules display. It may affect site-wide operation."
},
"currencies": {
"title": "Currency management",
@@ -173,9 +181,23 @@
},
"validation": {
"minMaxInvalid": "{{playCode}}: min bet cannot exceed max bet",
"nameZhRequired": "Chinese display name is required"
"displayNameRequired": "Display name is required"
},
"publishFailed": "Publish failed",
"publishDialog": {
"title": "Publish play configuration?",
"description": "New settings affect future bets. Existing tickets still settle by their saved snapshot.",
"confirm": "Confirm publish"
},
"batchSwitchConfirmTitle": "Batch {{action}}?",
"batchSwitchConfirmDescription": "{{action}} {{count}} play types under «{{group}}» and write to the current draft.",
"batchSwitchEnable": "Enable",
"batchSwitchDisable": "Disable",
"toggleConfirmTitle": "{{action}} play {{playCode}}?",
"toggleConfirmDescription": "This calls the API immediately (not draft-only).",
"toggleEnable": "Enable",
"toggleDisable": "Disable",
"toggleInstantFailed": "Failed to apply play switch. Try again later.",
"createDraftSuccess": "Created draft v{{version}}",
"createDraftFailed": "Failed to create draft",
"ruleSavedLocal": "Rule text was saved into the local draft. Save the draft to persist it.",
@@ -191,7 +213,7 @@
"enable": "Enable",
"disable": "Disable",
"ruleText": "Rule text",
"displayNames": "Display names"
"editDisplayName": "Edit name"
},
"locales": {
"zh": "Chinese",
@@ -217,8 +239,8 @@
"enablePlay": "Enable {{playCode}}"
},
"nameDialog": {
"title": "Display names (i18n)",
"description": "Play {{playCode}}. Chinese is required; English and Nepali are optional. The player site picks the label by locale after publish.",
"title": "Edit display name",
"description": "Play {{playCode}}. The player site shows this label after you save and publish the draft.",
"apply": "Apply to draft",
"savedLocal": "Display names were saved into the local draft. Save the draft to persist them."
},
@@ -228,6 +250,13 @@
"apply": "Apply to draft"
}
},
"prizeScopes": {
"first": "First prize odds",
"second": "Second prize odds",
"third": "Third prize odds",
"starter": "Starter prize odds",
"consolation": "Consolation prize odds"
},
"odds": {
"sectionHint": "Pick a version to edit prize-tier odds; publishing applies to new tickets immediately.",
"tabs": {
@@ -273,6 +302,11 @@
"publishLabel": "Publish",
"publishSuccess": "Published odds version with rebate",
"publishFailed": "Publish failed",
"publishDialog": {
"title": "Publish rebate/odds version?",
"description": "After publish, rebate calculation applies to new tickets.",
"confirm": "Confirm publish"
},
"createDraftSuccess": "Created draft v{{version}}",
"createDraftFailed": "Failed to create draft",
"deleteFailed": "Delete failed",
@@ -297,6 +331,11 @@
"enterValidCapAmount": "Enter a valid cap amount"
},
"publishFailed": "Publish failed",
"publishDialog": {
"title": "Publish cap configuration?",
"description": "After publish, per-number risk-pool cap limits take effect.",
"confirm": "Confirm publish"
},
"createDraftSuccess": "Created draft v{{version}}",
"createDraftFailed": "Failed to create draft",
"savedLocalDraft": "Saved into local draft. Save the draft to persist it.",

View File

@@ -2,7 +2,65 @@
"title": "Dashboard",
"refresh": "Refresh",
"notice": "Notice",
"todayBetTotal": "Current draw total bet",
"sections": {
"today": "Today",
"lifetime": "All-time totals",
"currentDraw": "Current draw",
"currentDrawDetail": "Current draw · {{drawNo}}",
"operations": "Operations (current draw)"
},
"analytics": {
"title": "Financial analytics",
"periodLabel": "Period",
"metricLabel": "Metric",
"playLabel": "Play filter",
"allPlays": "All plays",
"customRange": "Custom dates",
"rangeHint": "Range {{range}}",
"selectPeriod": "Select a period",
"chartTruncated": "Trend shows {{from}} — {{to}} only ({{days}} days in full range)",
"summaryBet": "Period bet",
"summaryPayout": "Period payout",
"summaryProfit": "Period profit",
"dailyTrend": "Daily trend",
"playBreakdown": "Play breakdown",
"periodDistribution": "Period structure",
"noPlayData": "No play data in this period",
"periods": {
"today": "Today",
"last_7_days": "Last 7 days",
"last_30_days": "Last 30 days",
"this_month": "This month",
"lifetime": "All time",
"custom": "Custom"
},
"metrics": {
"overview": "Overview",
"bet": "Bet",
"payout": "Payout",
"profit": "Profit"
}
},
"chartLegend": {
"bet": "Bet",
"payout": "Payout",
"profit": "Profit"
},
"playBreakdownHint": "Payout {{payout}} · Profit {{profit}}",
"viewReports": "Reports",
"lifetimeBetTotal": "Lifetime total bet",
"lifetimePayout": "Lifetime total payout",
"lifetimeProfit": "Lifetime platform profit",
"lifetimeActivityHint": "{{draws}} draws with bets · {{days}} business days",
"lifetimeDateRangeHint": "Range {{range}}",
"currentDrawBetTotal": "Draw total bet",
"currentDrawPayout": "Draw payout",
"currentDrawProfit": "Draw profit",
"drawFinanceDetails": "Draw finance details",
"todayBetTotal": "Today's total bet",
"todayPayout": "Today's payout",
"todayProfit": "Today's profit",
"todayBusinessDateHint": "Business date {{date}}",
"drawNoHint": "Draw {{drawNo}}",
"orderAndTicket": "{{orders}} orders · {{tickets}} items",
"marginRate": "Gross margin ~{{rate}}%",
@@ -21,8 +79,9 @@
"settlementOverview": "Settlement batches",
"noSettlementBatches": "No settlement batches",
"quickLinksTitle": "Quick links",
"currentPayout": "Current payout",
"currentProfit": "Current platform profit",
"currentPayout": "Current draw payout",
"currentProfit": "Current draw profit",
"currentDrawFinanceHint": "Charts below are for draw {{drawNo}}",
"currentDraw": "Current draw",
"drawSequence": "Round {{sequence}}",
"drawDetails": "Draw details",
@@ -64,8 +123,9 @@
"auditLogs": "Audit logs"
},
"warnings": {
"drawPermission": "This account has no draw view/manage permission. Finance and risk data were not returned.",
"drawPermission": "This account has no draw/dashboard view permission. Finance and risk data were not returned.",
"walletPermission": "This account has no wallet reconciliation permission. Abnormal transfer count was not returned.",
"loadFailed": "Failed to load. Check the API and login state."
"loadFailed": "Failed to load. Check the API and login state.",
"apiResourceMissing": "Dashboard analytics API is not registered. Run: php artisan lottery:admin-auth-sync (or apply the latest migration), then refresh."
}
}

View File

@@ -144,5 +144,23 @@
"third": "3rd prize",
"starter": "Starter {{index}}",
"consolation": "Consolation {{index}}"
},
"confirm": {
"manualCloseTitle": "Confirm manual close?",
"manualCloseDescription": "Players will no longer be able to bet on this draw.",
"cancelDrawTitle": "Confirm cancel draw?",
"cancelDrawDescription": "This draw will not be drawn. Ensure there is no outstanding bet risk.",
"rngDrawTitle": "Confirm RNG draw?",
"rngDrawDescription": "The system will generate draw numbers and continue the pipeline.",
"reopenTitle": "Confirm cooldown reopen?",
"reopenDescription": "Results may need re-review; displayed numbers may change.",
"runSettlementTitle": "Confirm run settlement?",
"runSettlementDescription": "A settlement batch will be created from the published result.",
"saveManualDraftTitle": "Confirm save manual draft?",
"saveManualDraftDescription": "23 numbers will be saved for review.",
"publishTitle": "Confirm publish results?",
"publishDescription": "Results become visible to players and may trigger settlement.",
"generatePlanTitle": "Confirm generate draw plan?",
"generatePlanDescription": "Future bettable draws will be created per system rules."
}
}

View File

@@ -25,10 +25,14 @@
"enabled": "Enabled",
"saving": "Saving…",
"save": "Save",
"manualBurstDrawId": "Manual burst draw number",
"manualBurstAmount": "Burst amount (empty for all)",
"manualBurstDrawId": "Draw ID for manual burst",
"manualBurstHint": "Super admin only. Requires a settled draw with first-prize winners. Pool release follows the configured payout rate.",
"manualBurstConfirmTitle": "Confirm manual jackpot burst?",
"manualBurstConfirmDescription": "Jackpot will be split among first-prize winners for draw {{drawId}} using the payout rate. Pool balance will be reduced. This cannot be undone automatically.",
"processing": "Processing…",
"manualBurst": "Manual burst",
"manualBurst": "Manual burst (super admin only)",
"manualBurstConfirm": "Confirm burst",
"cancel": "Cancel",
"filter": "Filter",
"drawNo": "Draw no.",
"optional": "Optional",

View File

@@ -29,6 +29,12 @@
"lastLogin": "Last login",
"actions": "Actions",
"edit": "Edit",
"freeze": "Freeze",
"unfreeze": "Unfreeze",
"freezeSuccess": "Player {{name}} frozen",
"unfreezeSuccess": "Player {{name}} unfrozen",
"freezeFailed": "Failed to freeze player",
"unfreezeFailed": "Failed to unfreeze player",
"delete": "Delete",
"createDialogTitle": "Create player",
"editDialogTitle": "Edit player",
@@ -44,6 +50,10 @@
"cancel": "Cancel",
"save": "Save",
"saving": "Saving…",
"confirmFreezeTitle": "Confirm freeze player?",
"confirmFreezeDescription": "Player {{name}} will not be able to place bets.",
"confirmUnfreezeTitle": "Confirm unfreeze player?",
"confirmUnfreezeDescription": "Player {{name}} will return to normal status.",
"confirmDelete": "Confirm delete",
"confirmDeleteDesc": "Delete player {{name}}? This action cannot be undone."
}

View File

@@ -13,6 +13,10 @@
"periodRequired": "Enter both reconcile start and end dates",
"periodInvalid": "Invalid date range",
"periodOrderInvalid": "End time must be later than or equal to start time",
"confirmCreateTitle": "Create reconcile job?",
"confirmCreateDescription": "Start a manual reconcile for the selected date range{{playerHint}}.",
"confirmCreatePlayer": " for the selected player",
"confirmCreateAllPlayers": " (all players)",
"createSuccess": "Reconcile job created",
"createFailed": "Failed to create job",
"noCreatePermission": "Current account cannot create reconcile jobs.",

View File

@@ -46,6 +46,12 @@
"manualCloseSuccess": "Number betting closed manually",
"recoverSuccess": "Number betting recovered",
"actionFailed": "Action failed",
"confirm": {
"closeTitle": "Confirm close number?",
"closeDescription": "Number {{number}} will be blocked for this draw.",
"recoverTitle": "Confirm recover number?",
"recoverDescription": "Number {{number}} will be open for betting again."
},
"detailTitle": "Risk pool details",
"loadDetailFailed": "Failed to load risk pool details",
"backToList": "Back to list",

View File

@@ -34,6 +34,7 @@
"pending_confirm": "Pending confirmation",
"partial_pending_confirm": "Partially pending confirmation",
"success": "Bet placed",
"pending_draw": "Awaiting draw",
"failed": "Bet failed",
"pending_payout": "Pending payout",
"settled_win": "Settled win",

View File

@@ -47,6 +47,12 @@
"reverseSuccess": "Reversed successfully",
"manualProcessSuccess": "Manually processed successfully",
"actionFailed": "Action failed",
"confirm": {
"reverseTitle": "Confirm reverse transfer?",
"reverseDescription": "Reverse order {{transferNo}}. This may affect player wallet balance.",
"manualProcessTitle": "Confirm manual process?",
"manualProcessDescription": "Mark order {{transferNo}} as manually processed without automatic wallet adjustment."
},
"txnNo": "Txn no.",
"bizType": "Business type",
"type": "Type",