feat: 增加管理端多语言与多模块界面国际化支持

This commit is contained in:
2026-05-19 09:11:55 +08:00
parent 49a4caf01e
commit 1b1dfc92ab
110 changed files with 4053 additions and 1308 deletions

View File

@@ -0,0 +1,83 @@
{
"title": "Admins",
"listTitle": "Admin user list",
"createAdmin": "Create admin",
"searchPlaceholder": "Search by username / nickname / email",
"loadFailed": "Failed to load admin list",
"nicknameRequired": "Enter a nickname",
"newPasswordMin": "New password must be at least 8 characters",
"roleRequired": "Select at least one role",
"usernameRequired": "Enter a login username",
"passwordMin": "Password must be at least 8 characters",
"createSuccess": "Created admin {{name}}",
"updateSuccess": "Updated {{name}}",
"saveAccountFailed": "Failed to save account",
"deleteSuccess": "Deleted {{name}}",
"deleteFailed": "Delete failed",
"allPermissions": "All permissions",
"saveRoleSuccess": "Updated roles for {{name}}",
"saveRoleFailed": "Failed to save roles",
"savePermissionSuccess": "Updated permissions for {{name}}",
"savePermissionFailed": "Failed to save permissions",
"saving": "Saving…",
"deleting": "Deleting…",
"common": {
"none": "None"
},
"table": {
"account": "Account",
"nickname": "Nickname",
"status": "Status",
"roles": "Roles",
"direct": "Direct",
"effective": "Effective",
"actions": "Actions"
},
"status": {
"enabled": "Enabled",
"disabled": "Disabled"
},
"actions": {
"permissions": "Permissions",
"edit": "Edit",
"delete": "Delete",
"cancel": "Cancel",
"save": "Save"
},
"permissionDialog": {
"title": "Admin permissions",
"rolesTitle": "Roles",
"rolesDescription": "Saved as default-site roles and merged with direct permissions as effective permissions.",
"rolePermissionCount": "Contains {{count}} functional permissions",
"directTitle": "Direct permissions",
"directDescription": "Expand by menu or domain and check specific prd.* items; in most cases role changes are enough.",
"selectedRoles": "Selected roles:",
"saveRoles": "Save roles",
"saveDirect": "Save direct permissions"
},
"accountDialog": {
"createTitle": "Create admin",
"editTitle": "Edit account",
"createDescription": "Assign at least one default-site role. Login usernames may contain letters, numbers, dots, underscores, and hyphens only, and are stored in lowercase.",
"editDescription": "Login username cannot be changed. Leave password empty to keep it unchanged.",
"username": "Login username",
"usernamePlaceholder": "For example: ops_admin",
"nickname": "Nickname",
"nicknamePlaceholder": "Display name",
"emailOptional": "Email (optional)",
"emailPlaceholder": "Leave empty if not needed",
"password": "Password",
"passwordOptional": "Password (optional)",
"passwordPlaceholderCreate": "At least 8 characters",
"passwordPlaceholderEdit": "Leave empty to keep unchanged",
"rolesRequired": "Roles (default site, at least one)",
"rolesDescription": "After creation, you can continue adjusting roles or grant direct permissions in Permissions.",
"noRoles": "No roles available yet. Wait for the list to finish loading and try again."
},
"delete": {
"currentUserBlocked": "You cannot delete the currently signed-in account",
"rowActionTitle": "Delete this admin",
"confirmTitle": "Confirm deletion",
"confirmDescription": "Delete admin {{name}}? This action cannot be undone."
}
}

View File

@@ -1,3 +1,14 @@
{
"title": "Audit Logs"
"title": "Audit Logs",
"moduleCode": "Module code",
"actionCode": "Action code",
"operatorType": "Operator type",
"exactMatch": "Exact match",
"operatorTypePlaceholder": "For example admin / system",
"operator": "Operator",
"module": "Module",
"action": "Action",
"target": "Target",
"time": "Time",
"empty": "No data"
}

View File

@@ -1,3 +1,24 @@
{
"title": "Login"
"title": "Login",
"loginTitle": "Admin Login",
"account": "Account",
"accountPlaceholder": "Login account",
"password": "Password",
"passwordPlaceholder": "Password",
"captcha": "Captcha",
"captchaPlaceholder": "Enter captcha",
"captchaLoading": "Loading captcha",
"captchaRefresh": "Click to refresh captcha",
"captchaFetch": "Click to get captcha",
"apiMissingTitle": "API base URL not configured",
"apiMissingDescriptionPrefix": "Set",
"apiMissingDescriptionSuffix": "in the environment (Laravel base URL, for example http://127.0.0.1:8000).",
"submit": "Log in",
"submitting": "Signing in…",
"captchaLoadFailed": "Failed to load captcha. Check the API or network.",
"apiBaseMissingToast": "NEXT_PUBLIC_LOTTERY_API_BASE_URL is not configured",
"captchaRequired": "Refresh the captcha first",
"welcome": "Welcome, {{name}}",
"networkFailed": "Network request failed",
"loginFailed": "Login failed"
}

View File

@@ -4,7 +4,7 @@
"ne": "नेपाली",
"zh": "中文",
"title": "Interface language",
"changed": "Language"
"changed": "Language switched to {{language}}"
},
"app": {
"title": "Lottery Admin"
@@ -15,6 +15,65 @@
"search": "Search",
"apply": "Apply",
"loading": "Loading...",
"submitting": "Submitting..."
"submitting": "Submitting...",
"logout": "Log out",
"close": "Close",
"viewAll": "View all",
"viewDetails": "View details",
"reviewNow": "Review now",
"create": "Create",
"createTask": "Create task",
"clear": "Clear",
"done": "Done"
},
"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."
},
"pagination": {
"perPage": "Per page",
"selectPlaceholder": "Select",
"summary": "{{total}} total, page {{page}} / {{lastPage}}",
"previous": "Previous",
"next": "Next"
},
"states": {
"noData": "No data",
"loading": "Loading…",
"comingSoon": "Feature under development"
},
"errors": {
"loadFailed": "Failed to load"
},
"toolbar": {
"defaultAdmin": "Administrator",
"notifications": "Notifications",
"notificationsComingSoon": "Notifications are under development",
"accountSettings": "Account settings",
"loggedOut": "Signed out"
},
"nav": {
"home": "Home",
"dashboard": "Dashboard",
"admin_users": "Admin Users",
"players": "Players",
"wallet": "Wallet",
"draws": "Draws",
"config": "Configuration",
"risk": "Risk",
"settlement": "Settlement",
"jackpot": "Jackpot",
"reconcile": "Reconcile",
"tickets": "Tickets",
"reports": "Reports",
"audit": "Audit Logs",
"settings": "Settings"
},
"sidebar": {
"workspace": "Workspace"
},
"auth": {
"checking": "Checking sign-in status…"
}
}

View File

@@ -0,0 +1,83 @@
{
"title": "Configuration Center",
"nav": {
"aria": "Operations configuration sub-navigation",
"sidebarTitle": "Operations configuration",
"groups": {
"betting": "Betting and display",
"risk_wallet": "Risk and funds"
},
"items": {
"plays": "Play types and limits",
"odds": "Odds",
"rebate": "Commission / rebate",
"risk-cap": "Payout caps",
"wallet": "Wallet thresholds"
}
},
"versionStatus": {
"active": "Active",
"draft": "Draft",
"archived": "Archived"
},
"versionSwitcher": {
"sheetTitle": "Switch configuration version",
"sheetDescription": "Choose a version to view on this page. Drafts are editable, while active and archived versions are read-only.",
"loading": "Loading…",
"noneSelected": "No version selected",
"switch": "Switch version",
"empty": "No version records yet.",
"count": "{{count}} items",
"effectiveAt": "Effective at: {{value}}",
"note": "Note: {{value}}",
"current": "Current",
"selected": "Selected",
"view": "View",
"rollback": "Rollback",
"delete": "Delete",
"deleteConfirmTitle": "Delete this version?",
"deleteConfirmDescription": "Version ID {{id}} (version_no {{version}}) will be permanently deleted. Active versions cannot be deleted."
},
"versionActions": {
"publishCurrent": "Set as current version",
"refreshing": "Refreshing",
"refresh": "Refresh versions",
"newDraft": "New draft",
"saveDraft": "Save draft"
},
"wallet": {
"title": "Wallet transfer limit settings",
"description": "Amounts use the game's minor currency unit (for example, under NPR, 100 = 1.00 NPR). The minimum amount must be at least 1 minor unit.",
"loadFailed": "Failed to load",
"saveSuccess": "Saved successfully",
"saveFailed": "Save failed",
"fields": {
"inMin": "Minimum transfer-in amount",
"inMax": "Maximum transfer-in amount",
"outMin": "Minimum transfer-out amount",
"outMax": "Maximum transfer-out amount"
},
"placeholders": {
"min": "For example: 1.00",
"max": "For example: 10000.00"
},
"hints": {
"inMin": "Per-order minimum from main wallet to lottery wallet",
"inMax": "Per-order maximum from main wallet to lottery wallet",
"outMin": "Per-order minimum from lottery wallet to main wallet",
"outMax": "Per-order maximum from lottery wallet to main wallet"
},
"discard": "Discard changes"
},
"play": {
"batchGroups": {
"d2": "2D Global",
"d3": "3D Global",
"d4": "4D Global",
"big-small": "Big / Small",
"position": "Position Plays",
"box": "Box Plays",
"jackpot": "Jackpot"
}
}
}

View File

@@ -1,3 +1,57 @@
{
"title": "Dashboard"
"title": "Dashboard",
"refresh": "Refresh",
"notice": "Notice",
"todayBetTotal": "Current draw total bet",
"currentDrawFinanceSummary": "Finance summary for the current hall draw",
"currentPayout": "Current payout",
"payoutSummary": "Winning payout + Jackpot",
"currentProfit": "Current platform profit",
"profitFormula": "Bet - payout (approx.)",
"currentDraw": "Current draw",
"drawSequence": "Round {{sequence}}",
"drawDetails": "Draw details",
"ticketCount": "Ticket item count",
"relatedBetAmount": "Related bet amount",
"riskCapUsage": "Risk cap usage",
"lockedAndCap": "Locked {{locked}} / Cap {{cap}}",
"occupancyDetails": "Occupancy details",
"hotNumbersTop10": "Top 10 hot numbers",
"playDimension": "Play dimension",
"soldOutDistribution": "Sold-out distribution",
"soldOutTotal": "Total sold out",
"pendingReviewResults": "Pending result review",
"abnormalTransferOrders": "Abnormal transfer orders",
"viewTransferOrders": "View transfer orders",
"noSoldOutNumbers": "No sold-out numbers",
"noPoolData": "No pool data for this dimension",
"numbersByUsage": "Numbers by usage",
"capUsage": "Cap usage",
"tabs": {
"4d": "4D",
"3d": "3D",
"2d": "2D",
"special": "Special"
},
"soldOutBuckets": {
"d4": "4D",
"d3": "3D",
"d2": "2D",
"special": "Special",
"other": "Other"
},
"quickLinks": {
"createDrawPlan": "Create draw plan",
"drawSchedule": "Open sale / draws",
"results": "Results",
"tickets": "Ticket management",
"walletTransactions": "Wallet transactions",
"reports": "Reports",
"auditLogs": "Audit logs"
},
"warnings": {
"drawPermission": "This account has no draw view/manage 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."
}
}

View File

@@ -0,0 +1,132 @@
{
"title": "Draws",
"statusListTitle": "Draw list",
"generatePlan": "Generate draw plan",
"generating": "Generating…",
"generateSuccess": "Generated {{created}} draws, buffer {{upcoming}}/{{target}}",
"generateFailed": "Generation failed",
"drawNo": "Draw no.",
"status": "Status",
"startTime": "Start time",
"closeTime": "Close time",
"drawTime": "Draw time",
"betTotal": "Total bet",
"payoutTotal": "Total payout",
"profitLoss": "Profit/Loss",
"actions": "Actions",
"queryDraw": "Search draw",
"reset": "Reset",
"fuzzyDrawNo": "Fuzzy draw no.",
"viewDetails": "View details",
"invalidDrawId": "Invalid draw ID",
"loadFailed": "Failed to load. Check login and API configuration.",
"drawDetail": "Draw details",
"businessDate": "Business date",
"sequenceNo": "Sequence no.",
"plannedDraw": "Planned draw",
"coolingEndTime": "Cooling ends at",
"resultSource": "Result source",
"currentResultVersion": "Current result version",
"settleVersion": "Settlement version",
"isReopened": "Reopened",
"yes": "Yes",
"no": "No",
"batchStats": "Batch stats",
"batchTotal": "Total batches",
"pendingReview": "Pending review",
"published": "Published",
"viewFinance": "View draw finance",
"drawActions": "Draw actions",
"drawActionsDesc": "Manual close / cancel / RNG / reopen / settlement all call backend APIs directly.",
"manualClose": "Manual close",
"cancelDraw": "Cancel draw",
"cancelBeforeDraw": "Cancel before draw",
"rngDraw": "RNG draw",
"rngAutoGenerate": "RNG auto generate",
"reopen": "Reopen",
"cooldownReopen": "Reopen in cooldown",
"runSettlement": "Run settlement",
"processing": "Processing…",
"actionSuccess": "{{name}} succeeded",
"actionFailed": "{{name}} failed",
"hallPreviewStatus": "Hall preview {{status}}",
"financeOverview": "Draw finance overview",
"orderAndItemCount": "Orders / Ticket items",
"actualBet": "Actual bet deducted",
"currentPayout": "Current payout total",
"grossProfit": "Approx. gross profit",
"settlementBatchList": "Settlement batch list (filter by draw)",
"relatedSettlementBatches": "Related settlement batches",
"noSettlementBatches": "No settlement batch records.",
"ticketCount": "Tickets",
"winCount": "Wins",
"finishedAt": "Finished at",
"resultsTitle": "Results",
"reviewAndPublish": "Review / publish",
"viewReviewQueue": "View review queue",
"noPublishedBatch": "No published batches.",
"version": "Version v{{version}}",
"sourceType": "Source {{source}}",
"manualEntry": "Manual",
"rng": "RNG",
"rngSummary": "RNG hash {{hash}}",
"confirmedAt": "Confirmed at {{time}}",
"prize": "Prize",
"tail3": "Last 3",
"tail2": "Last 2",
"headTail": "Head/Tail",
"manualResultEntry": "Manual result entry",
"currentStatusAndDraft": "Current status {{status}}. Saving creates a pending batch and does not publish it.",
"enter23Numbers": "Please enter all 23 groups of 4 digits",
"draftSaved": "Draft v{{version}} saved, waiting to be published",
"saveFailed": "Failed to save",
"clear": "Clear",
"saveDraft": "Save draft",
"saving": "Saving…",
"pendingBatches": "Pending batches",
"noPendingBatches": "There are no pending_review batches.",
"batchId": "Batch ID",
"numberCount": "Number count",
"reviewAndPublishAction": "Review and publish",
"noPublishPermission": "No publish permission",
"batchNotFound": "Batch not found",
"batchNotFoundDesc": "Return to the review list and confirm the batch ID.",
"backToReviewQueue": "Back to review queue",
"publishTitle": "Publish",
"cannotPublish": "Cannot publish",
"cannotPublishDesc": "Current batch status is '{{status}}'.",
"checkBeforePublish": "Check the numbers before publishing",
"checkBeforePublishDesc": "Publish only after confirming the numbers.",
"publishedView": "View published result",
"confirmPublish": "Confirm publish",
"submitting": "Submitting…",
"publishSuccess": "Published · {{drawNo}} · status {{status}}",
"publishFailed": "Publish failed",
"sourceTypeFull": "Source: {{source}} · Items: {{count}}/23 · RNG hash: {{hash}}",
"subnav": {
"status": "Draw status",
"results": "Results",
"finance": "Draw finance",
"review": "Review & publish"
},
"statusOptions": {
"all": "All",
"pending": "Pending",
"open": "Open",
"closing": "Closing",
"closed": "Closed",
"drawing": "Drawing",
"review": "Review",
"cooldown": "Cooldown",
"settling": "Settling",
"settled": "Settled",
"cancelled": "Cancelled"
},
"resultSlots": {
"first": "1st prize",
"second": "2nd prize",
"third": "3rd prize",
"starter": "Starter {{index}}",
"consolation": "Consolation {{index}}"
}
}

View File

@@ -0,0 +1,46 @@
{
"title": "Jackpot",
"configTitle": "Jackpot pool configuration",
"loadFailed": "Failed to load",
"saveSuccess": "Saved",
"saveFailed": "Save failed",
"invalidDrawId": "Enter a valid draw ID",
"manualBurstSuccess": "Jackpot burst triggered manually",
"manualBurstFailed": "Manual burst failed",
"noPoolData": "No pool data",
"displayBalance": "Display balance {{amount}}",
"currentAmount": "Current pool balance (minor unit)",
"contributionRate": "Contribution rate 0-1",
"triggerThreshold": "Burst threshold (minor unit)",
"payoutRate": "Burst payout rate 0-1",
"forceTriggerGap": "Force burst gap (settled draws)",
"minBetAmount": "Minimum bet amount (minor unit)",
"comboTriggerPlays": "Combo trigger plays (comma separated)",
"status": "Status",
"disabled": "Disabled",
"enabled": "Enabled",
"saving": "Saving…",
"save": "Save",
"manualBurstDrawId": "Manual burst draw ID",
"manualBurstAmount": "Burst amount (empty for all)",
"processing": "Processing…",
"manualBurst": "Manual burst",
"filter": "Filter",
"drawNo": "Draw no.",
"optional": "Optional",
"apply": "Apply",
"payoutRecords": "Jackpot payout records",
"contributionRecords": "Jackpot contribution records",
"subnavLabel": "Jackpot sub navigation",
"subnavPools": "Pool configuration",
"subnavRecords": "Records",
"payoutLoadFailed": "Failed to load payout records",
"contributionLoadFailed": "Failed to load contribution records",
"trigger": "Trigger",
"payoutAmount": "Payout amount",
"winnerCount": "Winner count",
"time": "Time",
"ticketNo": "Ticket",
"player": "Player",
"contributionAmount": "Contribution amount"
}

View File

@@ -0,0 +1,49 @@
{
"title": "Players",
"listTitle": "Player list",
"createPlayer": "Create player",
"searchPlaceholder": "Search by player ID / username / nickname",
"search": "Search",
"refresh": "Refresh",
"loadFailed": "Failed to load player list",
"siteCodeRequired": "Enter the site code",
"sitePlayerIdRequired": "Enter the site player ID",
"createFailed": "Failed to create player",
"createSuccess": "Created player {{name}}",
"noChanges": "No changes",
"updateFailed": "Failed to update player",
"updateSuccess": "Updated {{name}}",
"deleteFailed": "Delete failed",
"deleteSuccess": "Deleted player {{name}}",
"statusNormal": "Normal",
"statusFrozen": "Frozen",
"statusBanned": "Banned",
"site": "Site",
"sitePlayerId": "Site player ID",
"username": "Username",
"nickname": "Nickname",
"currency": "Currency",
"balance": "Balance",
"available": "Available",
"status": "Status",
"lastLogin": "Last login",
"actions": "Actions",
"edit": "Edit",
"delete": "Delete",
"createDialogTitle": "Create player",
"editDialogTitle": "Edit player",
"createDialogDesc": "Manually register a main-site player to the lottery platform. Usually this is created automatically through SSO login.",
"editDialogDesc": "Edit player information.",
"siteCode": "Site code",
"siteCodePlaceholder": "For example main_site",
"sitePlayerIdLabel": "Site player ID",
"sitePlayerIdPlaceholder": "Unique identifier returned by the main site",
"usernamePlaceholderOptional": "Optional",
"nicknamePlaceholderOptional": "Optional",
"defaultCurrency": "Default currency",
"cancel": "Cancel",
"save": "Save",
"saving": "Saving…",
"confirmDelete": "Confirm delete",
"confirmDeleteDesc": "Delete player {{name}}? This action cannot be undone."
}

View File

@@ -0,0 +1,45 @@
{
"title": "Reconcile",
"createTitle": "Create reconcile job",
"createDesc": "Abnormal flows are checked automatically by scheduled jobs. This section allows finance to trigger jobs manually: choose reconcile type and time range, and optionally fill in target references (player IDs, transfer numbers, or idempotency keys, one per line). Jobs and items are persisted for audit and future automation.",
"reconcileType": "Reconcile type",
"walletTransfer": "Wallet transfer (main site ⇄ lottery)",
"startTime": "Start time",
"endTime": "End time",
"scope": "Scope (optional)",
"scopePlaceholder": "One reference per line, for example player ID, wallet transfer number, or idempotency key.\nLeave empty to create a scoped job record without explicit refs.",
"scopeHint": "When reconciling with wallet transactions in pending_reconcile status, paste the transfer number or idempotency key above.",
"advancedToggleOpen": "Show advanced options (custom items JSON)",
"advancedToggleClose": "Hide advanced options (custom items JSON)",
"advancedJson": "Items JSON (overrides generated rows from the scope above)",
"createTask": "Create reconcile job",
"submitting": "Submitting…",
"loadFailed": "Failed to load",
"loadItemsFailed": "Failed to load details",
"periodRequired": "Enter both reconcile start and end time",
"periodInvalid": "Invalid time range",
"periodOrderInvalid": "End time must be later than or equal to start time",
"advancedJsonInvalid": "The advanced JSON cannot be parsed",
"createSuccess": "Reconcile job created",
"createFailed": "Failed to create job",
"noCreatePermission": "Current account cannot create reconcile jobs.",
"jobsTitle": "Reconcile jobs",
"jobsDesc": "Click a row to view paginated item details.",
"refresh": "Refresh",
"jobNo": "Job no.",
"type": "Type",
"status": "Status",
"period": "Period",
"createdAt": "Created at",
"detailsTitle": "Job details",
"sideARef": "Lottery ref",
"sideBRef": "Main site ref",
"differenceAmount": "Difference (cent)",
"noDetails": "No details",
"statusCompleted": "Completed",
"statusRunning": "Running",
"statusFailed": "Failed",
"itemMismatch": "Mismatch",
"itemMatched": "Matched",
"itemPendingCheck": "Pending check"
}

View File

@@ -1,3 +1,34 @@
{
"title": "Reports"
"title": "Reports",
"createExport": "Create export",
"reportType": "Report type",
"exportFormat": "Export format",
"filterJson": "filter_json (optional)",
"parseFilterFailed": "Failed to parse filter JSON",
"createSuccess": "Export job created",
"createFailed": "Failed to create job",
"downloadFailed": "Download failed",
"taskList": "Job list",
"jobId": "Job no.",
"type": "Type",
"format": "Format",
"status": "Status",
"output": "Output",
"download": "Download",
"createdAt": "Created at",
"id": "ID",
"empty": "No data",
"reportTypes": {
"draw_profit_summary": "Draw profit summary",
"daily_profit_summary": "Daily profit summary",
"player_win_loss": "Player win/loss report",
"wallet_transfer_report": "Wallet transfer report",
"hot_number_risk_report": "Hot number risk report",
"play_dimension_report": "Play dimension report",
"sold_out_number_report": "Sold-out number report",
"rebate_commission_report": "Rebate and commission report",
"audit_operation_report": "Audit operation report",
"wallet_txns_daily": "Wallet transactions daily",
"transfer_orders_daily": "Transfer orders daily"
}
}

View File

@@ -0,0 +1,91 @@
{
"title": "Risk",
"center": "Risk center",
"drawNo": "Draw no.",
"status": "Status",
"closeTime": "Close time",
"actions": "Actions",
"all": "All",
"search": "Search",
"refresh": "Refresh",
"fuzzyDrawNo": "Fuzzy draw no.",
"loadDrawListFailed": "Failed to load draw list",
"enterRisk": "Enter risk",
"poolsTitle": "Risk pools",
"searchNumber": "Search number",
"searchNumberPlaceholder": "For example 8888",
"riskFilter": "Risk filter",
"sort": "Sort",
"filterAll": "All",
"filterSoldOut": "Sold out",
"filterHighRisk": ">80%",
"sortUsageDesc": "Usage ratio ↓",
"sortLockedDesc": "Locked amount ↓",
"sortRemainingAsc": "Remaining ↑",
"sortNumberAsc": "Number ↑",
"loadPoolsFailed": "Failed to load risk pools",
"capAmount": "Cap",
"lockedAmount": "Locked",
"remainingAmount": "Remaining",
"usageRatio": "Usage",
"poolStatus": "Status",
"soldOut": "Sold out",
"warning": "Warning",
"normal": "Normal",
"recover": "Recover",
"close": "Close",
"view": "View",
"manualCloseSuccess": "Number betting closed manually",
"recoverSuccess": "Number betting recovered",
"actionFailed": "Action failed",
"detailTitle": "Risk pool details",
"loadDetailFailed": "Failed to load risk pool details",
"backToList": "Back to list",
"backToAllPools": "Back to all risk pools",
"numberTitle": "Number {{number}}",
"drawMeta": "Draw {{drawNo}}",
"totalCap": "Cap amount",
"lockedWorstCase": "Locked (worst-case payout reserved)",
"remainingSellable": "Remaining sellable",
"isSoldOut": "Sold out",
"yes": "Yes",
"no": "No",
"occupationLogs": "Occupancy / release logs",
"time": "Time",
"action": "Action",
"amount": "Amount",
"source": "Source",
"ticketNo": "Ticket no.",
"playCode": "Play",
"loadLogsFailed": "Failed to load lock logs",
"lockLogsTitle": "Risk lock logs",
"drawInfoLoadFailed": "Failed to load draw info",
"loadingDraw": "Loading draw…",
"headerTitle": "Risk · Draw {{drawNo}}",
"databaseStatus": "Database status",
"hallPreviewStatus": "(Hall preview: {{status}})",
"subnavOccupancy": "Occupancy",
"subnavHot": "Hot numbers",
"subnavSoldOut": "Sold-out list",
"subnavPools": "All risk pools",
"changeDraw": "Change draw",
"number4d": "Number (4 digits)",
"optional": "Optional",
"actionFilter": "Action",
"noLimit": "No limit",
"lock": "Lock",
"release": "Release",
"applyFilter": "Apply filter",
"statusOptions": {
"pending": "Pending",
"open": "Open",
"closing": "Closing",
"closed": "Closed",
"drawing": "Drawing",
"review": "Review",
"cooldown": "Cooldown",
"settling": "Settling",
"settled": "Settled",
"cancelled": "Cancelled"
}
}

View File

@@ -0,0 +1,54 @@
{
"title": "Settlement",
"filter": "Filter",
"drawNo": "Draw no.",
"status": "Status",
"apply": "Apply",
"batchList": "Settlement batches",
"loadFailed": "Failed to load",
"exportFailed": "Export failed",
"actionSuccess": "{{name}} succeeded",
"actionFailed": "{{name}} failed",
"placeholderDrawNo": "For example 20260511-001",
"reviewStatus": "Review status",
"ticketCount": "Ticket count",
"winCount": "Win count",
"payoutTotal": "Total payout",
"jackpot": "Jackpot",
"finishedAt": "Finished at",
"details": "Details",
"approve": "Approve",
"pass": "Pass",
"reject": "Reject",
"payout": "Payout",
"export": "Export",
"backToList": "Back to batch list",
"errorTitle": "Error",
"retry": "Retry",
"batchSummary": "Batch #{{id}}",
"summaryMeta": "Draw {{drawNo}} · draw status {{drawStatus}} · result batch v{{version}}",
"settlementStatus": "Settlement status",
"reviewState": "Review status",
"ticketTotal": "Ticket count",
"winTotal": "Win count",
"payoutAmount": "Payout total",
"jackpotPayout": "Jackpot payout",
"startedAt": "Started",
"endedAt": "Ended",
"runPayout": "Run payout",
"exportSettlementReport": "Export settlement report",
"loadingSummary": "Loading summary…",
"detailTitle": "Settlement details",
"ticketNo": "Ticket no.",
"playCode": "Play",
"player": "Player",
"matchedTier": "Matched tier",
"regularPayout": "Regular payout",
"loadingDetails": "Loading details…",
"statusOptions": {
"all": "All",
"running": "Running",
"completed": "Completed",
"failed": "Failed"
}
}

View File

@@ -0,0 +1,19 @@
{
"title": "Tickets",
"playerTicketQuery": "Player ticket query",
"playerId": "Player ID",
"invalidPlayerId": "Enter a valid player ID",
"drawNoOptional": "Draw no. (optional)",
"drawNoPlaceholder": "For example 20260520-001",
"query": "Query",
"loadFailed": "Failed to load",
"ticketNo": "Ticket no.",
"orderNo": "Order no.",
"drawNo": "Draw no.",
"playCode": "Play",
"number": "Number",
"actualDeduct": "Actual deduct",
"status": "Status",
"failReason": "Fail reason",
"winAmount": "Win amount"
}

View File

@@ -0,0 +1,69 @@
{
"title": "Wallet",
"subnavLabel": "Wallet sub pages",
"subnavTransactions": "Wallet transactions",
"subnavTransferOrders": "Transfer orders",
"noPermission": "Current account has no access to this page",
"copySuccess": "{{label}} copied to clipboard",
"copyFailed": "Copy failed. Check browser permissions or copy manually.",
"statusProcessing": "Processing",
"statusSuccess": "Success",
"statusFailed": "Failed",
"statusPendingReconcile": "Pending reconcile",
"statusReversed": "Reversed",
"statusManuallyProcessed": "Manually processed",
"statusPosted": "Posted",
"filterAll": "All",
"transferIn": "Main site transfer in",
"transferOut": "Main site transfer out",
"transferOutRefund": "Transfer-out refund",
"transferOrders": "Transfer orders",
"walletTransactions": "Wallet transactions",
"playerWalletQuery": "Player wallet query",
"localTransferNo": "Local transfer no.",
"externalRefNo": "Main site ref no.",
"playerAccount": "Player account",
"playerAccountPlaceholder": "Main site player ID or username (fuzzy)",
"playerId": "Player ID",
"playerIdOptional": "Optional, higher priority than account",
"requestDateRange": "Request date range",
"status": "Status",
"options": "Options",
"abnormalOnly": "Abnormal only",
"abnormalOnlyPending": "Abnormal only (pending reconcile)",
"search": "Search",
"resetFilters": "Reset filters",
"refreshCurrentPage": "Refresh current page",
"loadFailed": "Failed to load",
"direction": "Direction",
"amount": "Amount",
"failReason": "Fail reason",
"requestTime": "Requested at",
"finishedTime": "Finished at",
"actions": "Actions",
"reverse": "Reverse",
"manualProcess": "Manual process",
"processing": "Processing…",
"reverseSuccess": "Reversed successfully",
"manualProcessSuccess": "Manually processed successfully",
"actionFailed": "Action failed",
"txnNo": "Txn no.",
"bizType": "Business type",
"type": "Type",
"queryFailed": "Query failed",
"invalidPlayerId": "Enter a valid player ID",
"querying": "Querying…",
"query": "Query",
"sitePlayer": "Site player",
"walletType": "Type",
"currency": "Currency",
"balanceMinor": "Balance (minor unit)",
"availableBalance": "Available (estimated)",
"noWalletRows": "No wallet rows. Players with no bets or transfers may have no records.",
"copyTransferNo": "Local transfer no.",
"copyExternalRefNo": "Main site ref no.",
"copyTxnNo": "Txn no.",
"copyExternalTxnRefNo": "Main site ref no.",
"in": "In",
"out": "Out"
}