Files
lotteryFront/src/i18n/locales/en/player.json
kang 3b83c6627c feat: enhance draw processing and ticket validation logic
- Added a new function to check if the hall is awaiting draw processing, improving the draw status handling.
- Implemented validation for roll numbers in ticket orders, ensuring compliance with specified formats.
- Enhanced the draft line issue reasoning to provide detailed feedback on invalid ticket entries.
- Updated HallDrawPanel and related components to utilize the new draw processing checks and improve user notifications.
- Added new translations for draw processing and ticket validation messages in multiple languages.
2026-05-25 16:44:00 +08:00

617 lines
26 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"brand": {
"name": "N lotto"
},
"actions": {
"retry": "Retry",
"refresh": "Refresh",
"apply": "Apply",
"clear": "Clear",
"cancel": "Cancel",
"confirm": "Confirm",
"close": "Close",
"loading": "Loading...",
"loadMore": "Load More",
"previous": "Previous",
"next": "Next",
"done": "Done",
"processing": "Processing...",
"deleteRow": "Delete row {{row}}"
},
"nav": {
"aria": "Main navigation",
"home": "Home",
"results": "Results",
"orders": "My Bets",
"rules": "Rules",
"wallet": "Wallet"
},
"panel": {
"home": "Home"
},
"network": {
"offline": "Network disconnected. Please check your connection.",
"degraded": "Network is unstable. Switched to fallback mode (polling...).",
"retryReconnect": "Try reconnecting",
"retry": "Retry",
"recoverWebsocket": "Try restoring WebSocket connection",
"recover": "Recover",
"reconnect": "Reconnect"
},
"token": {
"critical": "Login will expire soon",
"warning": "Login expiring soon",
"remaining": "Remaining {{time}}",
"autoRenewing": "Auto-renewing...",
"renewNow": "Renew now"
},
"serverError": {
"title": "Server error",
"appTitle": "Application error",
"unavailable": "Server temporarily unavailable",
"serverMessage": "Server temporarily unavailable. Please try again later.",
"appMessage": "Sorry, the application encountered a problem. Try refreshing the page.",
"details": "Error details:",
"errorId": "Error ID: {{id}}",
"refreshPage": "Refresh page",
"hall": "Betting hall",
"wallet": "My wallet",
"code": "Error code: 500 Internal Server Error",
"home": "Back home"
},
"notFound": {
"title": "Page not found",
"description": "Sorry, the page you visited may have been deleted, moved, or never existed.",
"home": "Back home",
"hall": "Betting hall",
"results": "Results",
"wallet": "My wallet"
},
"player": {
"fallback": "Player #{{id}}"
},
"draw": {
"currentIssue": "Current issue",
"currentTime": "Current Time",
"closesIn": "Closes In",
"drawsIn": "Draws In",
"drawProcessing": "Drawing…",
"coolDown": "Cool Down",
"loadFailedRefresh": "Failed to load. Pull down to refresh.",
"issueNo": "Issue No.",
"hall": "Betting Hall",
"noIssue": "No available issue. Please try again later.",
"sealedNotice": "Closed. Please wait for the next issue.",
"reviewNotice": "Draw results are pending admin review. The next issue opens after publish.",
"notBettableNotice": "Betting is not available right now. Please try again later.",
"status": {
"pending": "Not started",
"open": "Open",
"closing": "Closed",
"closed": "Awaiting draw",
"drawing": "Drawing",
"review": "Under review",
"cooldown": "Cool down",
"settling": "Settling",
"settled": "Settled",
"cancelled": "Cancelled"
}
},
"hall": {
"aria": "Betting table",
"loadingError": "Failed to load play rules. Please try again later.",
"noDraw": "No current issue. Cannot submit.",
"notBettable": "This issue is closed or cannot accept bets.",
"catalogNotReady": "Play configuration is still loading.",
"emptyLines": "Please enter at least one valid number and stake amount.",
"lineIssue": {
"invalid_number_length": "Row {{row}} «{{play}}»: invalid number length. Check the number field.",
"roll_requires_r": "Row {{row}} «{{play}}»: use 4 characters with at least one R (e.g. 12R4, RR34). R marks rolling digits.",
"missing_digit_slot": "Row {{row}} «{{play}}»: missing digit slot. Refresh and try again."
},
"previewFailed": "Preview failed",
"closedSubmit": "Closed. Cannot submit.",
"changedBeforeSubmit": "Your draft changed before submission. Close the preview and try again.",
"placeFailed": "Submission failed",
"placeSuccess": "Bet submitted. Order {{orderNo}}, deducted {{amount}}.",
"placePartialFailed": "{{success}} succeeded, {{failed}} failed",
"playConfig": {
"playClosedDraftCleared": "{{playCode}} is closed. Related draft amounts have been cleared.",
"playClosed": "{{playCode}} is closed.",
"updated": "Play configuration updated. The betting table has been refreshed.",
"oddsUpdated": "Odds updated. Please preview the ticket again."
},
"jackpotBurst": {
"title": "Jackpot Burst",
"subtitle": "Issue {{drawNo}} triggered a pool payout",
"number": "First prize number",
"numberPending": "First prize numbers are not published for this issue yet",
"amount": "Burst amount",
"winners": "Winners",
"triggerLabel": "Trigger",
"close": "Close",
"notificationTitle": "Jackpot Burst",
"notificationBody": "Issue {{drawNo}} paid {{amount}}",
"trigger": {
"threshold": "Threshold reached",
"forced_gap": "Forced gap reached",
"play_combo": "Play combo matched",
"manual": "Manual burst"
}
},
"closed": {
"title": "Closed",
"subtitle": "This issue is now closed.",
"description": "The betting window has closed. Please wait for the next issue to place your bets."
},
"jackpotPanel": {
"disabledTitle": "Unavailable",
"disabledSubtitle": "Jackpot is currently disabled.",
"disabledDescription": "The admin has turned off Jackpot for now. This tab remains visible for information only.",
"infoTitle": "Pool Information",
"infoSubtitle": "Jackpot is currently enabled.",
"infoDescription": "Jackpot is not a standalone play. Eligible tickets placed in the active plays will join the pool automatically based on admin rules.",
"closedInfoTitle": "Pool Information",
"closedInfoSubtitle": "Jackpot is currently enabled.",
"closedInfoDescription": "Jackpot uses automatic participation for eligible tickets. This issue is closed, so please wait for the next issue."
},
"jackpotParticipation": {
"title": "Automatic Jackpot Participation",
"previewDescription": "If this ticket is submitted successfully and meets the configured rules, it will join the Jackpot pool automatically. No separate Jackpot bet is needed.",
"resultDescription": "The successful ticket lines in this order will join the Jackpot pool automatically under the configured rules. If a first-prize hit later triggers the pool, it will settle together with the normal payout."
},
"boxMode": {
"iboxTitle": "iBox",
"iboxDesc": "Divide all by amount",
"boxTitle": "Box",
"boxDesc": "Multiply all by amount"
},
"table": {
"no": "No.",
"number": "Number",
"stake": "Stake Amount",
"rebate": "Commission / Rebate",
"actual": "Actual Deduction",
"delete": "Delete",
"addRow": "Add Row",
"draftTotal": "Bet Amount",
"totalBet": "Total",
"totalRebate": "Rebate",
"actualTotal": "Estimated Deduction",
"sealedHint": "Closed: this table is locked. Please wait for the next issue.",
"previewing": "Previewing...",
"submitBet": "Submit Bet",
"insufficientBalance": "Insufficient balance",
"amountPlaceholder": "Amount",
"digitShort": {
"big": "B",
"small": "S"
},
"filledPlayCount": "{{count}} plays filled",
"tapToFill": "Tap to enter amounts",
"rowActual": "Actual",
"editRow": "Edit row {{row}}",
"scrollHint": "This table is wide: swipe or scroll horizontally, then enter your stake in each play column on the right (e.g. Big/Small, position plays).",
"noPlaysInCategory": "No open play types in this tab, so there are no amount fields. Try 2D / 3D / 4D, or ask an admin to enable plays for this category.",
"soldOut": "Sold out",
"warning": "Almost sold out"
},
"quickFill": {
"title": "Quick fill",
"description": "Fill the current row with favorite or recent numbers in one tap.",
"clearAll": "Clear all",
"favorite": "Favorite number",
"unfavorite": "Remove favorite",
"favorites": "Favorites",
"tapHold": "Hold to remove",
"emptyFavorites": "No favorites yet",
"history": "Recent 20 numbers",
"emptyHistory": "No recent numbers"
},
"preview": {
"title": "Confirm bet",
"description": "Check the number, play type, and actual deduction. After confirmation, the lottery wallet will be debited and the ticket cannot be cancelled.",
"sealedTitle": "Closed",
"sealedDescription": "This issue has stopped accepting tickets. Please choose the next issue.",
"empty": "No preview data",
"draw": "Issue",
"status": "Status",
"amount": "Amount",
"rebate": "Rebate",
"total": "Total",
"totalBet": "Total stake",
"rebateDeduct": "Rebate deduction",
"actualDeduct": "Actual deduction",
"estimatedPayout": "Estimated max payout",
"lines": "Ticket lines",
"normalizedNumber": "Normalized number",
"combinationCount": "Combinations",
"actual": "Actual",
"estimatedMax": "Estimated max",
"backEdit": "Back to edit",
"submitting": "Submitting...",
"confirmSubmit": "Confirm submit",
"processingTitle": "Submitting your bets",
"processingDescription": "Please do not close the page or go back.",
"processingProgress": "Processing tickets...",
"noWarnings": "No obvious risk was found in this preview.",
"warningsTitle": "Payout pool warning",
"warningsDescription": "The following numbers have high payout pool usage for this issue. Betting is still allowed, but the order may be rejected as sold out if capacity is insufficient."
},
"result": {
"title": "Bet result",
"draw": "Issue",
"empty": "No result yet.",
"successCount": "Successful lines",
"failureCount": "Failed lines",
"actual": "Actual deduction",
"orderNo": "Order No.",
"balanceAfter": "Remaining balance",
"items": "Successful line details",
"number": "Number",
"actualDeduct": "Deducted",
"noFailures": "No ticket lines failed in this submission.",
"failedItems": "Failed line details",
"failed": "Failed",
"viewBets": "View tickets",
"continueBetting": "Continue betting"
},
"amountInput": {
"limit": "Limit {{min}} - {{max}}",
"placeholder": "e.g. 100.00"
},
"numberInput": {
"rollPlaceholder": "e.g. 12R4",
"digitPlaceholder": "0-9"
},
"playSwitcher": {
"empty": "No open play types are available for this currency.",
"label": "Play"
},
"playCatalog": {
"notReady": "Play configuration has not been initialized. Run the seed that includes OperationalConfigV1Seeder in Laravel.",
"loadFailed": "Failed to load play configuration. Please try again later.",
"loading": "Loading plays and odds...",
"meta": "Currency {{currency}} · Config versions play#{{playVersion}} / odds#{{oddsVersion}} · Limits use the smallest currency unit, same as wallet.",
"play": "Play",
"status": "Status",
"limit": "Bet limit",
"odds": "Odds x",
"description": "Description",
"open": "Open",
"closed": "Closed",
"riskTitle": "Risk cap (sample numbers)",
"number": "Number",
"capAmount": "Cap amount",
"type": "Type",
"title": "Plays and Odds",
"descriptionText": "Data comes from GET /api/v1/play/effective. After admin changes are published, it refreshes automatically within about {{seconds}}s, or manually.",
"refresh": "Refresh config"
},
"ticketError": {
"4001": "This number has insufficient payout pool capacity for this issue and is sold out. Change the number, amount, or play type and try again.",
"1001": "Insufficient balance. Transfer in before betting.",
"2001": "This issue is closed. Betting is no longer available.",
"2002": "This play type is closed. Choose another play type.",
"2004": "The number format or length does not match this play type.",
"2005": "Play parameters are incomplete, such as digit slot or dimension.",
"2006": "This issue cannot accept bets.",
"2007": "This play type is unsupported or missing odds configuration.",
"2008": "Odds or play configuration has changed. Close the preview and try again.",
"1003": "Stake amount is outside the allowed range for this play type.",
"fallback": "Bet failed. Please try again later."
},
"amountHint": {
"iboxRoll": "This play uses a per-bet amount. The system calculates total stake and deduction after expanding combinations.",
"mbox": "This play uses a total input amount. It is split across permutations, rounded down to the smallest currency unit.",
"default": "Amount is the stake for this ticket line, using the smallest currency unit just like wallet."
}
},
"wallet": {
"title": "Wallet",
"subtitle": "Balance and transfer records",
"balance": "Wallet Balance",
"available": "Available {{amount}}",
"transferIn": "Transfer In",
"transferOut": "Transfer Out",
"inPage": "In Page",
"outPage": "Out Page",
"logs": "Logs",
"logsTitle": "Wallet Logs",
"logsSubtitle": "Transfer and betting records",
"typeFilter": "Type Filter",
"transferInTitle": "Transfer In",
"transferOutTitle": "Transfer Out",
"transferInSubtitle": "Add funds to lottery wallet ({{currency}})",
"transferOutSubtitle": "Move available balance back ({{currency}})",
"transferInDescription": "Move funds from the main-site wallet into the lottery wallet. Per-transaction limits are validated by the server.",
"transferOutDescription": "Move funds back to the main-site wallet. Per-transaction limits are validated by the server.",
"dialogInDescription": "Move funds from the main-site wallet into the lottery wallet. The minimum amount is validated by the server, usually about 1.00 {{currency}}.",
"dialogOutDescription": "Move funds back to the main-site wallet. Per-transaction limits are validated by the server.",
"mainBalance": "Main-site wallet balance:",
"mainPending": "— (main site integration pending)",
"lotteryBalance": "Lottery wallet balance:",
"lotteryAvailable": "Lottery wallet available:",
"inAmount": "Transfer-in amount",
"outAmount": "Transfer-out amount",
"exampleIn": "e.g. 1000.00",
"exampleOut": "e.g. 500.00",
"afterInPreview": "Lottery balance after transfer-in (preview): {{amount}}",
"afterOutPreview": "Lottery balance after transfer-out (preview): {{amount}}",
"allOut": "Transfer all {{amount}}",
"confirmIn": "Confirm transfer in",
"confirmOut": "Confirm transfer out",
"successIn": "Transfer in succeeded. Lottery wallet balance updated.",
"successOut": "Transfer out succeeded. Funds will return to the main-site wallet.",
"pendingShort": "Transfer is processing. Refresh later.",
"pendingToast": "Processing...",
"invalidAmount": "Enter a valid amount.",
"outExceeds": "Transfer-out amount cannot exceed available balance.",
"pendingTitle": "Pending reconciliation",
"pendingDescription": "The following transfers have not been finally confirmed by the main site. Contact support if they do not arrive after a long time.",
"pendingStatus": "Processing",
"flowsTitle": "Wallet logs",
"totalRecords": "{{total}} records",
"emptyLogs": "No wallet logs",
"balanceAfter": "Balance after",
"flow": {
"all": "All",
"transfer_in": "Transfer in",
"transfer_out": "Transfer out",
"bet": "Bet deduction",
"prize": "Payout",
"refund": "Refund",
"reversal": "Reversal"
},
"txnStatus": {
"posted": "Success",
"pending_reconcile": "Pending reconciliation",
"reversed": "Reversed",
"manually_processed": "Manually processed"
},
"error": {
"401": "Login expired. Please return and enter again.",
"409": "Transfer is processing. Refresh later. Contact support if it does not arrive after a long time.",
"network": "Network error. Check your connection and try again.",
"timeout": "Request timed out. Please try again later.",
"fallback": "Request failed. Please try again later.",
"1001": "Lottery wallet balance is insufficient. Transfer in or reduce the transfer-out amount.",
"1002": "Transfer is processing. Refresh the balance here later. Contact support if it does not arrive after a long time.",
"1003": "Amount exceeds the per-transaction or daily limit. Adjust the amount.",
"1004": "Transfer in is temporarily paused. Try again later or contact support.",
"1005": "Currency is invalid or unavailable.",
"1006": "Transfer out is temporarily paused. Try again later or contact support.",
"1007": "Lottery wallet is frozen and cannot transfer funds.",
"1008": "Amount format is invalid.",
"1009": "The main site could not complete this transfer. Please try again later.",
"1010": "Do not use the same idempotency key for transfers with different amounts."
}
},
"orders": {
"title": "My Bets",
"subtitle": "Recent ticket records",
"betDetail": "Bet Detail",
"filteredIssue": "Filtered Issue",
"totalRecords": "Total Records",
"betNow": "Bet Now",
"empty": "No bet records yet.",
"dateRange": "Date range",
"status": "Status",
"statusFilter": "Status filter",
"noMore": "No more tickets",
"submitBet": "Submit Bet",
"stake": "Stake",
"deduction": "Deduction",
"win": "Win {{amount}}",
"detailTitle": "Ticket detail",
"ticketNo": "Ticket {{ticketNo}}",
"orderNo": "Order {{orderNo}}",
"orderNoLabel": "Order No.",
"orderNoAt": "Order No. {{orderNo}} · {{time}}",
"noOrderNo": "—",
"groupDetail": "Order detail",
"groupNotFound": "Could not load this order. Please open it again from My Bets.",
"betItems": "Bet lines",
"itemCount": "{{count}} bet line(s)",
"viewBetLine": "View bet line detail",
"drawNo": "Issue",
"placedAt": "Placed at",
"number": "Number",
"play": "Play",
"amount": "Stake amount",
"rebateRate": "Rebate rate",
"actualDeduct": "Actual deduction",
"oddsSnapshot": "Odds snapshot",
"drawNumbers": "Draw numbers (this issue)",
"firstPrize": "First prize",
"hit": "Hit",
"notPublished": "Draw numbers are not published or cannot be displayed yet.",
"matchWin": "Match result: hit {{tier}}",
"winAmount": "Win amount {{amount}}",
"jackpotAmount": "Jackpot {{amount}}",
"payoutTotal": "Payout total {{amount}}",
"matchLose": "Match result: not won",
"matchResult": "Match result",
"drawPendingMatch": "Draw numbers are not published yet. Winning status cannot be determined.",
"matchPendingDraw": "Waiting for draw results. Winning status cannot be determined yet.",
"matchPendingSettlement": "Draw results are published. Winning status will show after settlement.",
"timeline": "Timeline",
"settledAt": "Settled at {{time}}",
"viewDraw": "View this draw",
"backToOrders": "Back to My Bets",
"backToGroup": "Back to order detail",
"notFound": "Ticket does not exist or cannot be viewed.",
"noData": "No data",
"loadFailed": "Failed to load"
},
"results": {
"title": "Results",
"subtitle": "Latest draw history",
"detailTitle": "Result Detail",
"businessDate": "Business Date",
"selectBusinessDate": "Select date",
"empty": "No results yet.",
"detail": "Detail",
"openDetail": "Open detail",
"loadFailed": "Failed to load",
"unavailable": "This result is unavailable or does not exist.",
"noData": "No data",
"previous": " Previous",
"next": "Next ",
"drawTime": "Draw time: {{time}}",
"myPayout": "My payout for this issue",
"regular": "Regular: {{amount}}",
"jackpot": "Jackpot: {{amount}}",
"hitPending": "Your ticket has hit a result cell in this issue. The amount summary will show after payout is completed.",
"hitHint": "If you win, numbers matched by your tickets are highlighted in gold.",
"viewMyWinning": "View my winning status",
"jackpotLabel": "Jackpot",
"jackpotGap": "{{count}} draws since last burst",
"noMore": "No more results",
"check": {
"title": "Check My Winnings",
"loadFailed": "Query failed. Please try again later.",
"enterTicket": "Enter your ticket number or number",
"description": "The system checks your tickets and winnings against the latest published draw.",
"ticketNumber": "Ticket No. / Number",
"placeholder": "Enter ticket number or number",
"latestDraw": "Latest issue {{drawNo}}",
"loading": "Checking...",
"submit": "Check now",
"recent": "Recent checks",
"noRecent": "No recent checks.",
"winTitle": "Congratulations, you won",
"noWinTitle": "No winning result found",
"match": "Match",
"amount": "Winning amount",
"drawInfo": "Draw info",
"issueNo": "Issue No.",
"viewBetDetails": "View bet details",
"checkAnother": "Check another ticket"
},
"tier": {
"first": "First prize",
"second": "Second prize",
"third": "Third prize",
"starter": "Starter",
"consolation": "Consolation"
},
"grid": {
"first": "First prize",
"second": "Second prize",
"third": "Third prize",
"starter": "Starter",
"consolation": "Consolation"
}
},
"rules": {
"title": "Play Rules",
"subtitle": "2D / 3D / 4D, box plays, rebate, closing and sold-out rules",
"quick": {
"title": "Prize Structure",
"description": "Each draw publishes 23 four-digit numbers. Settlement uses the odds snapshot locked when the bet was placed.",
"totalPrizes": "Prize groups",
"cooldown": "Cooldown mins",
"snapshot": "Odds snapshot"
},
"prizes": {
"first": "First prize",
"second": "Second prize",
"third": "Third prize",
"starter": "Starter",
"consolation": "Consolation"
},
"sections": {
"dimensions": {
"title": "What are 2D, 3D and 4D",
"d4": "4D: match the full four-digit number, for example 1234.",
"d3": "3D: match your last three digits against the result's last three digits, for example 234 can hit 1234.",
"d2": "2D: match your last two digits against the result's last two digits, for example 34 can hit 1234."
},
"bigSmall": {
"title": "Big vs Small",
"big": "Big: covers all 23 prizes. Any hit in first, second, third, starter or consolation wins.",
"small": "Small: only covers first, second and third prizes. Starter or consolation hits do not win."
},
"positions": {
"title": "Position Plays",
"d4": "4A / 4B / 4C map to first, second and third prize. 4D hits any starter row. 4E hits any consolation row.",
"d3": "3A / 3B / 3C match the last three digits of first, second and third prize. 3ABC hits any of those three.",
"d2": "2A / 2B / 2C match the last two digits of first, second and third prize. 2ABC hits any of those three."
},
"box": {
"title": "Box Plays",
"straight": "Straight: only the exact same order wins.",
"box": "Box: expands unique permutations and settles the winning expanded number.",
"ibox": "iBox: every permutation is staked by the unit amount. Total deduction = unit amount × combinations × (1 - rebate rate).",
"mbox": "mBox: input amount is shared across combinations. Any indivisible remainder is not deducted and is treated as returned to wallet.",
"roll": "Roll: R marks a rolling digit covering 0-9. Combination count = 10 to the power of R count.",
"half": "Half Box: reserved for phase one data structure only and not open on the player side."
},
"attributes": {
"title": "Head / Tail, Odd / Even and Digit Size",
"headTail": "Head / Tail only checks the first digit of the first prize. 5-9 is Head, 0-4 is Tail.",
"oddEven": "Odd / Even checks the last digit. 1/3/5/7/9 is odd and 0/2/4/6/8 is even. It can be combined with 2D / 3D / 4D dimensions.",
"digitSize": "Big Digit / Small Digit checks a selected digit. 5-9 is big and 0-4 is small. Multiple selected digits settle independently."
},
"wallet": {
"title": "Jackpot, Rebate, Closing and Sold Out",
"rebate": "Rebate / commission is locked into the ticket odds snapshot and is not changed by later configuration updates.",
"jackpot": "Jackpot depends on backend pool configuration. Burst, contribution and payout follow system records.",
"close": "Closing: after close time, the hall cannot edit or submit bets.",
"soldOut": "Sold out: when payout pool capacity is insufficient, preview may warn and final submission can reject the whole order."
}
},
"footer": {
"config": "Hall play columns, enabled state, limits and odds come from the active backend play configuration.",
"phaseTwo": "5D / 6D are phase-two extensions and have no available entry in phase one.",
"backBet": "Back to betting hall"
}
},
"ticketStatus": {
"success": "Awaiting draw",
"pending_draw": "Awaiting draw",
"pending_payout": "Won, pending payout",
"settled_win": "Paid",
"settled_lose": "Not won",
"failed": "Failed",
"unknown": "{{status}}"
},
"prizeTier": {
"first": "First prize",
"second": "Second prize",
"third": "Third prize",
"starter": "Starter",
"consolation": "Consolation"
},
"playLabels": {
"big": "Big",
"small": "Small",
"pos_4a": "4A",
"pos_4b": "4B",
"pos_4c": "4C",
"pos_4d": "4D",
"pos_4e": "4E",
"pos_3a": "3A",
"pos_3b": "3B",
"pos_3c": "3C",
"pos_3abc": "3ABC",
"pos_2a": "2A",
"pos_2b": "2B",
"pos_2c": "2C",
"pos_2abc": "2ABC",
"straight": "Straight",
"box": "Box",
"ibox": "iBox",
"mbox": "mBox",
"roll": "Roll",
"half_box": "Half Box",
"head": "Head",
"tail": "Tail",
"odd": "Odd",
"even": "Even",
"digit_big": "Big Digit",
"digit_small": "Small Digit"
}
}