feat(i18n, agents, players): enhance localization and improve agent and player management interfaces
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
Updated localization files for English and Nepali, adding new entries and refining existing translations for better clarity. Enhanced the agent management interface with improved delegation features and child agent creation prompts. Improved player management functionalities, including confirmation dialogs for player actions and better handling of player creation and editing processes.
This commit is contained in:
@@ -1,674 +1,683 @@
|
||||
{
|
||||
"title": "Configuration Center",
|
||||
"nav": {
|
||||
"aria": "Operations configuration sub-navigation",
|
||||
"sidebarTitle": "Operations configuration",
|
||||
"groups": {
|
||||
"betting": "Betting and display",
|
||||
"risk": "Risk control"
|
||||
"currencies": {
|
||||
"actions": {
|
||||
"backToSettings": "Back to settings",
|
||||
"create": "Add currency",
|
||||
"delete": "Delete",
|
||||
"edit": "Edit",
|
||||
"openStandalone": "Open dedicated page"
|
||||
},
|
||||
"items": {
|
||||
"plays": "Play types and limits",
|
||||
"odds": "Odds",
|
||||
"rebate": "Commission / rebate",
|
||||
"jackpot": "Jackpot pool",
|
||||
"risk-cap": "Payout caps"
|
||||
"createFailed": "Failed to create currency",
|
||||
"createSuccess": "Currency created",
|
||||
"deleteDialog": {
|
||||
"description": "Delete currency {{code}}? The system blocks deletion when it is still referenced by defaults, wallets, tickets, odds, or jackpot data.",
|
||||
"title": "Delete currency?"
|
||||
},
|
||||
"rulesPlaysTitle": "Play rules",
|
||||
"rulesOddsTitle": "Odds & base rebate",
|
||||
"rulesOddsDescription": "Odds matrix and base rebate are maintained on one page, sharing the same odds version line.",
|
||||
"rulesOddsDescriptionShort": "Pick a play on the left, edit odds and base rebate on the right. Agent/player rebate is added on top of this base, then save and publish.",
|
||||
"riskCapTitle": "Risk cap rules"
|
||||
"deleteFailed": "Failed to delete currency",
|
||||
"deleteSuccess": "Currency {{code}} deleted",
|
||||
"description": "Maintain currency master data for admin operations and control whether a currency is enabled or allowed for betting.",
|
||||
"dialog": {
|
||||
"createTitle": "Add currency",
|
||||
"description": "Currency code is immutable after creation. Disabling a currency also turns off bettable status.",
|
||||
"editTitle": "Edit currency"
|
||||
},
|
||||
"empty": "No currencies yet.",
|
||||
"form": {
|
||||
"bettable": "Allow betting",
|
||||
"bettableHint": "Only enabled currencies can be marked as bettable.",
|
||||
"code": "Currency code",
|
||||
"codePlaceholder": "Enter currency code, for example NPR",
|
||||
"decimalInvalid": "Enter a valid decimal place value",
|
||||
"decimals": "Decimal places",
|
||||
"decimalsPlaceholder": "Enter decimal places, for example 2",
|
||||
"enabled": "Enabled status",
|
||||
"enabledHint": "Disabled currencies should not be used for new business.",
|
||||
"name": "Currency name",
|
||||
"namePlaceholder": "Enter currency name",
|
||||
"required": "Please fill in the required fields"
|
||||
},
|
||||
"loadFailed": "Failed to load currencies",
|
||||
"loading": "Loading currencies…",
|
||||
"table": {
|
||||
"actions": "Actions",
|
||||
"bettable": "Bettable",
|
||||
"code": "Code",
|
||||
"decimals": "Decimals",
|
||||
"enabled": "Enabled",
|
||||
"name": "Name"
|
||||
},
|
||||
"title": "Currency management",
|
||||
"updateFailed": "Failed to update currency",
|
||||
"updateSuccess": "Currency updated"
|
||||
},
|
||||
"hub": {
|
||||
"title": "Operations configuration",
|
||||
"description": "Jump to play rules, odds & rebate, jackpot, and risk cap by domain. The sidebar provides direct links; this page is an overview.",
|
||||
"playsTitle": "Play rules",
|
||||
"playsDesc": "Play switches, limits, and rule copy",
|
||||
"oddsTitle": "Odds & base rebate",
|
||||
"oddsDesc": "Odds matrix and base rebate in one version stream",
|
||||
"jackpotTitle": "Jackpot",
|
||||
"jackpotDesc": "Pool parameters and ledger records",
|
||||
"riskCapTitle": "Risk cap rules",
|
||||
"riskCapDesc": "Per-number payout caps and occupancy",
|
||||
"integrationTitle": "Integration sites",
|
||||
"integrationDesc": "site_code, JWT secrets, partner wallet URL, iframe allowlist",
|
||||
"integrationGuideDesc": "SSO and wallet integration document for client engineering teams, with index, examples, and test flow",
|
||||
"integrationGuideTitle": "Client integration guide",
|
||||
"integrationGuideDesc": "SSO and wallet integration document for client engineering teams, with index, examples, and test flow"
|
||||
"integrationTitle": "Integration sites",
|
||||
"jackpotDesc": "Pool parameters and ledger records",
|
||||
"jackpotTitle": "Jackpot",
|
||||
"oddsDesc": "Odds matrix and base rebate in one version stream",
|
||||
"oddsTitle": "Odds & base rebate",
|
||||
"playsDesc": "Play switches, limits, and rule copy",
|
||||
"playsTitle": "Play rules",
|
||||
"riskCapDesc": "Per-number payout caps and occupancy",
|
||||
"riskCapTitle": "Risk cap rules",
|
||||
"title": "Operations configuration"
|
||||
},
|
||||
"integrationGuide": {
|
||||
"title": "Lottery client integration guide"
|
||||
},
|
||||
"integrationSites": {
|
||||
"title": "Integration sites",
|
||||
"description": "Maintain partner integration settings in admin. site_code cannot be changed after creation.",
|
||||
"pageGuide": "Wallet-mode partners need an integration site and SSO/wallet secrets; see API docs for technical setup.",
|
||||
"create": "New site",
|
||||
"edit": "Edit",
|
||||
"save": "Save",
|
||||
"saving": "Saving…",
|
||||
"cancel": "Cancel",
|
||||
"copy": "Copy",
|
||||
"loading": "Loading…",
|
||||
"empty": "No integration sites",
|
||||
"loadFailed": "Failed to load integration sites",
|
||||
"saveFailed": "Save failed",
|
||||
"createSuccess": "Created site {{code}}",
|
||||
"adminAccountCreated": "Created site admin account {{username}}",
|
||||
"updateSuccess": "Updated site {{code}}",
|
||||
"connectivityTest": "Test connectivity",
|
||||
"connectivityTitle": "Partner wallet connectivity",
|
||||
"adminAccountSectionDescription": "Creating a site will also create one admin account bound to that site.",
|
||||
"adminAccountSectionTitle": "Site admin account",
|
||||
"cancel": "Cancel",
|
||||
"codeImmutable": "site_code cannot be changed after creation",
|
||||
"columns": {
|
||||
"actions": "Actions",
|
||||
"code": "site_code",
|
||||
"currency": "Currency",
|
||||
"h5Url": "Lottery H5",
|
||||
"lineRoot": "Level-1 agent",
|
||||
"name": "Name",
|
||||
"ssoSecret": "SSO secret",
|
||||
"status": "Status",
|
||||
"walletApiKey": "Wallet API key",
|
||||
"walletUrl": "Wallet API"
|
||||
},
|
||||
"connectivityDescription": "Call the balance API for site {{code}} using a test player.",
|
||||
"connectivityFailed": "Connectivity failed",
|
||||
"connectivityPlayerId": "Test site_player_id",
|
||||
"connectivityRun": "Run test",
|
||||
"connectivityRunning": "Testing…",
|
||||
"connectivitySuccess": "Connectivity OK",
|
||||
"connectivityFailed": "Connectivity failed",
|
||||
"connectivityTest": "Test connectivity",
|
||||
"connectivityTitle": "Partner wallet connectivity",
|
||||
"copied": "Copied {{field}}",
|
||||
"copy": "Copy",
|
||||
"copyFailed": "Copy failed",
|
||||
"create": "New site",
|
||||
"createSuccess": "Created site {{code}}",
|
||||
"delete": "Delete site",
|
||||
"deleteConfirm": "Delete",
|
||||
"deleteConfirmDescription": "This permanently removes site {{code}} ({{name}}), its agent line, settlement periods, players, and site admin accounts. This cannot be undone.",
|
||||
"deleteConfirmTitle": "Delete this site?",
|
||||
"deleteFailed": "Failed to delete site",
|
||||
"deleteSuccess": "Deleted site {{code}}",
|
||||
"deleting": "Deleting…",
|
||||
"description": "Maintain partner integration settings in admin. site_code cannot be changed after creation.",
|
||||
"dialogCreateTitle": "New integration site",
|
||||
"dialogDescription": "Default wallet paths are fine unless the partner uses custom URLs.",
|
||||
"dialogEditTitle": "Edit integration site",
|
||||
"edit": "Edit",
|
||||
"empty": "No integration sites",
|
||||
"exportFailed": "Export failed",
|
||||
"exportParams": "Export params",
|
||||
"exportSuccess": "Exported parameter sheet for {{code}}",
|
||||
"exportFailed": "Export failed",
|
||||
"rotateSecrets": "Rotate secrets",
|
||||
"rotateSuccess": "Rotated secrets for {{code}}",
|
||||
"rotateFailed": "Failed to rotate secrets",
|
||||
"rotateConfirmTitle": "Rotate secrets?",
|
||||
"rotateConfirmDescription": "New SSO and wallet keys will be generated for {{code}}. Old keys stop working immediately.",
|
||||
"rotateConfirm": "Rotate",
|
||||
"delete": "Delete site",
|
||||
"deleteSuccess": "Deleted site {{code}}",
|
||||
"deleteFailed": "Failed to delete site",
|
||||
"deleteConfirmTitle": "Delete this site?",
|
||||
"deleteConfirmDescription": "This permanently removes site {{code}} ({{name}}), its agent line, settlement periods, players, and site admin accounts. This cannot be undone.",
|
||||
"deleteConfirm": "Delete",
|
||||
"deleting": "Deleting…",
|
||||
"secretsTitle": "Save these secrets now",
|
||||
"secretsDescription": "Secrets for {{code}} are shown only once.",
|
||||
"secretsDismiss": "I have saved them",
|
||||
"copied": "Copied {{field}}",
|
||||
"copyFailed": "Copy failed",
|
||||
"noPermission": "No permission to view integration sites",
|
||||
"codeImmutable": "site_code cannot be changed after creation",
|
||||
"statusEnabled": "Enabled",
|
||||
"statusDisabled": "Disabled",
|
||||
"dialogCreateTitle": "New integration site",
|
||||
"dialogEditTitle": "Edit integration site",
|
||||
"dialogDescription": "Default wallet paths are fine unless the partner uses custom URLs.",
|
||||
"form": {
|
||||
"required": "Site name is required",
|
||||
"codeRequired": "site_code is required",
|
||||
"adminUsernameRequired": "Site admin username is required",
|
||||
"adminNicknameRequired": "Site admin nickname is required",
|
||||
"adminPasswordRequired": "Initial site admin password must be at least 8 characters"
|
||||
},
|
||||
"columns": {
|
||||
"code": "site_code",
|
||||
"name": "Name",
|
||||
"status": "Status",
|
||||
"walletUrl": "Wallet API",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"fields": {
|
||||
"code": "site_code",
|
||||
"name": "Site name",
|
||||
"adminUsername": "Admin username",
|
||||
"adminEmail": "Email (optional)",
|
||||
"adminNickname": "Admin nickname",
|
||||
"adminPassword": "Initial password",
|
||||
"adminEmail": "Email (optional)",
|
||||
"adminUsername": "Admin username",
|
||||
"code": "site_code",
|
||||
"currency": "Default currency",
|
||||
"status": "Status",
|
||||
"walletApiUrl": "Partner wallet base URL",
|
||||
"lotteryH5BaseUrl": "Lottery H5 base URL (optional)",
|
||||
"iframeOrigins": "iframe allowlist (one origin per line)",
|
||||
"lotteryH5BaseUrl": "Lottery H5 base URL (optional)",
|
||||
"name": "Site name",
|
||||
"notes": "Notes",
|
||||
"ssoSecret": "SSO secret",
|
||||
"walletApiKey": "Wallet API key"
|
||||
},
|
||||
"placeholders": {
|
||||
"code": "Enter site identifier, for example partner-a",
|
||||
"name": "Enter site name",
|
||||
"adminUsername": "Enter admin username",
|
||||
"adminNickname": "Enter account nickname",
|
||||
"adminPassword": "At least 8 characters",
|
||||
"adminEmail": "Enter email",
|
||||
"currency": "Enter currency code, for example NPR",
|
||||
"walletApiUrl": "Enter wallet API URL",
|
||||
"lotteryH5BaseUrl": "Enter H5 URL",
|
||||
"iframeOrigins": "Enter allowed origins, for example https://www.example.com",
|
||||
"notes": "Enter notes",
|
||||
"connectivityPlayerId": "Enter player ID, for example 10001"
|
||||
},
|
||||
"adminAccountSectionTitle": "Site admin account",
|
||||
"adminAccountSectionDescription": "Creating a site will also create one admin account bound to that site."
|
||||
},
|
||||
"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",
|
||||
"moreActions": "More actions for v{{version}}",
|
||||
"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."
|
||||
},
|
||||
"versionToolbar": {
|
||||
"draftEditing": "Editing a draft — save and publish to go live"
|
||||
},
|
||||
"versionActions": {
|
||||
"publishCurrent": "Publish",
|
||||
"refreshing": "Refreshing",
|
||||
"refresh": "Refresh versions",
|
||||
"newDraft": "New draft",
|
||||
"saveDraft": "Save draft",
|
||||
"saveFailed": "Failed to save configuration",
|
||||
"rollbackSuccess": "Cloned v{{fromVersion}} into new draft v{{version}}",
|
||||
"rollbackFailed": "Rollback failed",
|
||||
"rollbackDialog": {
|
||||
"title": "Confirm rollback",
|
||||
"description": "A new draft will be cloned from version v{{version}}. The active version will not be overwritten directly.",
|
||||
"confirm": "Confirm rollback"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"validation": {
|
||||
"amountAtLeastMinorUnit": "{{field}} must be a valid amount and at least 0.01.",
|
||||
"inRangeInvalid": "Maximum transfer-in amount cannot be less than the minimum transfer-in amount.",
|
||||
"outRangeInvalid": "Maximum transfer-out amount cannot be less than the minimum transfer-out amount."
|
||||
},
|
||||
"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",
|
||||
"runtimeTitle": "Global runtime parameters",
|
||||
"runtimeIntro1": "This area stores global system parameters that do not belong to play, odds, or risk-control versions. They directly affect wallet transfers, job switches, and runtime policy.",
|
||||
"runtimeIntro2": "Play, odds, rebate, and cap management stay under operations configuration. System settings only carry cross-module runtime parameters to avoid overlapping responsibilities in admin.",
|
||||
"description": "Controls review flow after RNG draw generation, cooldown duration, and automatic settlement behavior. These are global runtime policies and do not belong to versioned operations config.",
|
||||
"loadFailed": "Failed to load system settings",
|
||||
"saveSuccess": "System settings saved",
|
||||
"saveRuntimeSuccess": "Draw and settlement parameters saved",
|
||||
"saveDrawSuccess": "Draw parameters saved",
|
||||
"saveCurrencyFormatSuccess": "Currency display format saved",
|
||||
"saveSettlementSuccess": "Settlement automation saved",
|
||||
"saveFrontendSuccess": "Front-end display settings saved",
|
||||
"sections": {
|
||||
"draw": "Draw schedule and review",
|
||||
"drawDescription": "Controls draw timing, close window, manual review, and cooldown. Only changed fields in this block are submitted.",
|
||||
"currencyFormat": "Currency display format",
|
||||
"currencyFormatDescription": "Decimals and separators for amounts across the site (separate from currency master data).",
|
||||
"settlement": "Settlement automation",
|
||||
"settlementDescription": "Controls whether tick auto-runs settlement, approval, and payout. Only changed fields in this block are submitted."
|
||||
},
|
||||
"saveFailed": "Failed to save system settings",
|
||||
"unsavedChanges": "Unsaved changes",
|
||||
"frontendConfig": "Front-end configuration",
|
||||
"fields": {
|
||||
"manualReview": "Require manual review for draw results",
|
||||
"cooldownMinutes": "Cooldown duration (minutes)",
|
||||
"defaultCurrency": "Default currency code",
|
||||
"drawIntervalMinutes": "Draw interval (minutes)",
|
||||
"drawBettingWindowSeconds": "Betting window (seconds)",
|
||||
"drawCloseBeforeDrawSeconds": "Close before draw (seconds)",
|
||||
"drawBufferDrawsAhead": "Pre-generated future draws",
|
||||
"currencyDisplayDecimals": "Display decimals",
|
||||
"currencyDecimalSeparator": "Decimal separator",
|
||||
"currencyThousandsSeparator": "Thousands separator",
|
||||
"autoSettlement": "Run settlement automatically",
|
||||
"autoApprove": "Auto-approve settlement batches",
|
||||
"autoPayout": "Auto-credit winnings to wallets",
|
||||
"applyRebateToPayout": "Deduct rebate again on winning payouts",
|
||||
"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."
|
||||
},
|
||||
"placeholders": {
|
||||
"defaultCurrency": "Enter default currency code, for example NPR",
|
||||
"drawIntervalMinutes": "Enter draw interval in minutes",
|
||||
"drawBettingWindowSeconds": "Enter betting window in seconds",
|
||||
"drawCloseBeforeDrawSeconds": "Enter seconds to close before draw",
|
||||
"drawBufferDrawsAhead": "Enter pre-generated draw count",
|
||||
"cooldownMinutes": "Enter cooldown minutes",
|
||||
"currencyDisplayDecimals": "Enter display decimal places, for example 2",
|
||||
"currencyDecimalSeparator": "Enter decimal separator, for example .",
|
||||
"currencyThousandsSeparator": "Enter thousands separator, for example ,"
|
||||
},
|
||||
"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.",
|
||||
"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.",
|
||||
"applyRebateToPayout": "When enabled, payout = gross win × (1 - rebate_rate_snapshot). Default off (rebate already reflected in actual deduct)."
|
||||
},
|
||||
"states": {
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled"
|
||||
},
|
||||
"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.",
|
||||
"confirmSaveRuntimeTitle": "Save draw and settlement parameters?",
|
||||
"confirmSaveRuntimeDescription": "This updates draw review, schedule timing, cooldown, and auto settlement/approval/payout. Play-rules HTML is not changed.",
|
||||
"confirmSaveDrawTitle": "Save draw parameters?",
|
||||
"confirmSaveDrawDescription": "This updates draw review, schedule timing, and cooldown in this block only.",
|
||||
"confirmSaveCurrencyFormatTitle": "Save currency display format?",
|
||||
"confirmSaveCurrencyFormatDescription": "This updates decimal places and separators.",
|
||||
"confirmSaveSettlementTitle": "Save settlement automation?",
|
||||
"confirmSaveSettlementDescription": "This updates auto settlement, approval, and payout switches.",
|
||||
"confirmSaveFrontendTitle": "Save front-end display settings?",
|
||||
"confirmSaveFrontendDescription": "This updates play-rules HTML on the player site. Draw and settlement logic are not changed."
|
||||
},
|
||||
"currencies": {
|
||||
"title": "Currency management",
|
||||
"description": "Maintain currency master data for admin operations and control whether a currency is enabled or allowed for betting.",
|
||||
"loading": "Loading currencies…",
|
||||
"empty": "No currencies yet.",
|
||||
"loadFailed": "Failed to load currencies",
|
||||
"createSuccess": "Currency created",
|
||||
"createFailed": "Failed to create currency",
|
||||
"updateSuccess": "Currency updated",
|
||||
"updateFailed": "Failed to update currency",
|
||||
"deleteSuccess": "Currency {{code}} deleted",
|
||||
"deleteFailed": "Failed to delete currency",
|
||||
"actions": {
|
||||
"create": "Add currency",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"openStandalone": "Open dedicated page",
|
||||
"backToSettings": "Back to settings"
|
||||
},
|
||||
"table": {
|
||||
"code": "Code",
|
||||
"name": "Name",
|
||||
"decimals": "Decimals",
|
||||
"enabled": "Enabled",
|
||||
"bettable": "Bettable",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"dialog": {
|
||||
"createTitle": "Add currency",
|
||||
"editTitle": "Edit currency",
|
||||
"description": "Currency code is immutable after creation. Disabling a currency also turns off bettable status."
|
||||
},
|
||||
"deleteDialog": {
|
||||
"title": "Delete currency?",
|
||||
"description": "Delete currency {{code}}? The system blocks deletion when it is still referenced by defaults, wallets, tickets, odds, or jackpot data."
|
||||
"status": "Status",
|
||||
"walletApiKey": "Wallet API key",
|
||||
"walletApiUrl": "Partner wallet base URL"
|
||||
},
|
||||
"form": {
|
||||
"code": "Currency code",
|
||||
"name": "Currency name",
|
||||
"decimals": "Decimal places",
|
||||
"codePlaceholder": "Enter currency code, for example NPR",
|
||||
"namePlaceholder": "Enter currency name",
|
||||
"decimalsPlaceholder": "Enter decimal places, for example 2",
|
||||
"enabled": "Enabled status",
|
||||
"enabledHint": "Disabled currencies should not be used for new business.",
|
||||
"bettable": "Allow betting",
|
||||
"bettableHint": "Only enabled currencies can be marked as bettable.",
|
||||
"required": "Please fill in the required fields",
|
||||
"decimalInvalid": "Enter a valid decimal place value"
|
||||
}
|
||||
},
|
||||
"play": {
|
||||
"batchGroups": {
|
||||
"d2": "2D Global",
|
||||
"d3": "3D Global",
|
||||
"d4": "4D Global",
|
||||
"big-small": "Big / Small",
|
||||
"position": "Position Plays",
|
||||
"box": "Box Plays",
|
||||
"jackpot": "Jackpot"
|
||||
},
|
||||
"validation": {
|
||||
"minMaxInvalid": "{{playCode}}: min bet cannot exceed max bet",
|
||||
"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 updates the current draft only. Players see changes after save and publish.",
|
||||
"batchPartialEnabled": "{{enabledCount}}/{{total}} enabled (not all on — turn on to enable all)",
|
||||
"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.",
|
||||
"deleteFailed": "Delete failed",
|
||||
"activeVersion": "Active version v{{version}}",
|
||||
"readOnlyHint": "Limits and rules are read-only. Create a draft first.",
|
||||
"batchSwitchesTitle": "Batch switches",
|
||||
"batchSwitchesDesc": "Only updates the current draft. The player betting table refreshes after save and publish.",
|
||||
"readOnlyDraftHint": "Current version is read-only. Create a draft first.",
|
||||
"batchEnabledCount": "{{enabledCount}}/{{total}} enabled",
|
||||
"noPlayTypes": "No play types",
|
||||
"filters": {
|
||||
"sectionTitle": "Filter plays",
|
||||
"sectionDescription": "Narrow the list first, then use batch switches or row-level edits.",
|
||||
"keyword": "Search plays",
|
||||
"keywordPlaceholder": "Filter by play code, display name, or category",
|
||||
"category": "Category",
|
||||
"status": "Status",
|
||||
"allCategories": "All categories",
|
||||
"allStatuses": "All statuses",
|
||||
"uncategorized": "Uncategorized",
|
||||
"reset": "Clear filters",
|
||||
"empty": "No matching play types",
|
||||
"groupCount": "{{count}} plays"
|
||||
},
|
||||
"actions": {
|
||||
"enable": "Enable",
|
||||
"disable": "Disable",
|
||||
"ruleText": "Rule text",
|
||||
"editDisplayName": "Edit name"
|
||||
},
|
||||
"locales": {
|
||||
"zh": "Chinese",
|
||||
"en": "English",
|
||||
"ne": "Nepali"
|
||||
},
|
||||
"categories": {
|
||||
"standard": "Standard",
|
||||
"attribute": "Attribute",
|
||||
"position": "Position",
|
||||
"box": "Box",
|
||||
"jackpot": "Jackpot"
|
||||
},
|
||||
"table": {
|
||||
"playCode": "Play code",
|
||||
"category": "Category",
|
||||
"status": "Status",
|
||||
"displayName": "Display name",
|
||||
"order": "Order",
|
||||
"minBet": "Min bet",
|
||||
"maxBet": "Max bet",
|
||||
"actions": "Actions"
|
||||
"adminNicknameRequired": "Site admin nickname is required",
|
||||
"adminPasswordRequired": "Initial site admin password must be at least 8 characters",
|
||||
"adminUsernameRequired": "Site admin username is required",
|
||||
"codeRequired": "site_code is required",
|
||||
"required": "Site name is required"
|
||||
},
|
||||
"lineRootBound": "Bound",
|
||||
"lineRootUnbound": "Unbound",
|
||||
"loadFailed": "Failed to load integration sites",
|
||||
"loading": "Loading…",
|
||||
"noPermission": "No permission to view integration sites",
|
||||
"pageGuide": "Wallet-mode partners need an integration site and SSO/wallet secrets; see API docs for technical setup.",
|
||||
"placeholders": {
|
||||
"displayOrder": "Order",
|
||||
"minBetAmount": "Minimum amount",
|
||||
"maxBetAmount": "Maximum amount"
|
||||
"adminEmail": "Enter email",
|
||||
"adminNickname": "Enter account nickname",
|
||||
"adminPassword": "At least 8 characters",
|
||||
"adminUsername": "Enter admin username",
|
||||
"code": "Enter site identifier, for example partner-a",
|
||||
"connectivityPlayerId": "Enter player ID, for example 10001",
|
||||
"currency": "Enter currency code, for example NPR",
|
||||
"iframeOrigins": "Enter allowed origins, for example https://www.example.com",
|
||||
"lotteryH5BaseUrl": "Enter H5 URL",
|
||||
"name": "Enter site name",
|
||||
"notes": "Enter notes",
|
||||
"walletApiUrl": "Enter wallet API URL"
|
||||
},
|
||||
"states": {
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"readOnly": "Read only"
|
||||
},
|
||||
"aria": {
|
||||
"enablePlay": "Enable {{playCode}}",
|
||||
"batchGroupSwitch": "Toggle batch switch for {{group}}"
|
||||
},
|
||||
"nameDialog": {
|
||||
"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."
|
||||
},
|
||||
"ruleDialog": {
|
||||
"title": "Rule text (i18n)",
|
||||
"description": "Play {{playCode}}. Changes stay in the draft until you save and publish it.",
|
||||
"apply": "Apply to draft"
|
||||
}
|
||||
"rotateConfirm": "Rotate",
|
||||
"rotateConfirmDescription": "New SSO and wallet keys will be generated for {{code}}. Old keys stop working immediately.",
|
||||
"rotateConfirmTitle": "Rotate secrets?",
|
||||
"rotateFailed": "Failed to rotate secrets",
|
||||
"rotateSecrets": "Rotate secrets",
|
||||
"rotateSuccess": "Rotated secrets for {{code}}",
|
||||
"save": "Save",
|
||||
"saveFailed": "Save failed",
|
||||
"saving": "Saving…",
|
||||
"secretCopyRequiresManage": "Integration site manage permission is required to copy secrets",
|
||||
"secretNotConfigured": "Secret not configured",
|
||||
"secretsDescription": "Secrets for {{code}} are shown only once.",
|
||||
"secretsDismiss": "I have saved them",
|
||||
"secretsTitle": "Save these secrets now",
|
||||
"statusDisabled": "Disabled",
|
||||
"statusEnabled": "Enabled",
|
||||
"title": "Integration sites",
|
||||
"updateSuccess": "Updated site {{code}}"
|
||||
},
|
||||
"prizeScopes": {
|
||||
"first": "First prize odds",
|
||||
"second": "Second prize odds",
|
||||
"third": "Third prize odds",
|
||||
"starter": "Starter prize odds",
|
||||
"consolation": "Consolation prize odds"
|
||||
"nav": {
|
||||
"aria": "Operations configuration sub-navigation",
|
||||
"groups": {
|
||||
"betting": "Betting and display",
|
||||
"risk": "Risk control"
|
||||
},
|
||||
"items": {
|
||||
"jackpot": "Jackpot pool",
|
||||
"odds": "Odds",
|
||||
"plays": "Play types and limits",
|
||||
"rebate": "Commission / rebate",
|
||||
"risk-cap": "Payout caps"
|
||||
},
|
||||
"riskCapTitle": "Risk cap rules",
|
||||
"rulesOddsDescription": "Odds matrix and base rebate are maintained on one page, sharing the same odds version line.",
|
||||
"rulesOddsDescriptionShort": "Pick a play on the left, edit odds and base rebate on the right. Agent/player rebate is added on top of this base, then save and publish.",
|
||||
"rulesOddsTitle": "Odds & base rebate",
|
||||
"rulesPlaysTitle": "Play rules",
|
||||
"sidebarTitle": "Operations configuration"
|
||||
},
|
||||
"odds": {
|
||||
"sectionHint": "Pick a version to edit prize-tier odds; publishing applies to new tickets immediately.",
|
||||
"sections": {
|
||||
"playScope": "Play scope",
|
||||
"oddsConfig": "Odds"
|
||||
},
|
||||
"currentSelection": "Selection: {{category}} / {{play}}",
|
||||
"playSelectPlaceholder": "Select play type",
|
||||
"readOnlyBanner": "This version is read-only. Create a draft to edit odds and base rebate.",
|
||||
"table": {
|
||||
"prizeScope": "Prize scope",
|
||||
"multiplier": "Odds multiplier"
|
||||
},
|
||||
"draftBar": {
|
||||
"unsaved": "Unsaved changes",
|
||||
"saved": "Changes kept in local draft"
|
||||
},
|
||||
"playGroups": {
|
||||
"bigSmall": "Big / small",
|
||||
"combo4": "4D position",
|
||||
"number3": "3D position",
|
||||
"number2": "2D position",
|
||||
"other": "Other"
|
||||
},
|
||||
"summary": {
|
||||
"title": "Summary",
|
||||
"contextTitle": "Version & tips",
|
||||
"version": "Editing version",
|
||||
"activeVersion": "Active version",
|
||||
"statusLabel": "Status",
|
||||
"readOnlyTag": "Read-only",
|
||||
"readOnlyHint": "This version is read-only. Create a draft to make changes.",
|
||||
"draftHint": "Save draft changes before publishing; publish affects new tickets only.",
|
||||
"activeHint": "This version is active; new tickets use these settings."
|
||||
},
|
||||
"tabs": {
|
||||
"all": "All"
|
||||
},
|
||||
"category": "Category",
|
||||
"playType": "Play type",
|
||||
"noPlayTypes": "No play types in this category.",
|
||||
"sheetDescription": "Choose a version to view here. Non-draft versions can be rolled back into a new draft.",
|
||||
"activeVersionPrefix": "Active version:",
|
||||
"readOnlyHint": "This version is read-only. Create a draft before editing odds.",
|
||||
"category": "Category",
|
||||
"createDraftFailed": "Failed to create draft",
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"currentSelection": "Selection: {{category}} / {{play}}",
|
||||
"deleteFailed": "Delete failed",
|
||||
"draftBar": {
|
||||
"saved": "Changes kept in local draft",
|
||||
"unsaved": "Unsaved changes"
|
||||
},
|
||||
"loadingDetails": "Loading details…",
|
||||
"multiplier": "Multiplier x{{value}} · {{currency}}",
|
||||
"missingScopeRow": "Missing {{scope}} row. Check seed or version data.",
|
||||
"rebateRate": "Base rebate rate (%)",
|
||||
"rebateRateHint": "This is the platform base rebate. It writes rebate_rate to all prize scopes under this play type; agent/player rebate is added on top of it.",
|
||||
"multiplier": "Multiplier x{{value}} · {{currency}}",
|
||||
"noPlayTypes": "No play types in this category.",
|
||||
"placeholders": {
|
||||
"multiplier": "Enter odds multiplier",
|
||||
"rebateRate": "Enter base rebate rate"
|
||||
},
|
||||
"publishFailed": "Publish failed",
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"createDraftFailed": "Failed to create draft",
|
||||
"rollbackSuccess": "Cloned v{{fromVersion}} into new draft v{{version}}",
|
||||
"rollbackFailed": "Rollback failed",
|
||||
"deleteFailed": "Delete failed",
|
||||
"rollbackDialog": {
|
||||
"title": "Confirm rollback",
|
||||
"description": "A new draft will be cloned from version v{{version}}. The active version will not be overwritten directly.",
|
||||
"confirm": "Confirm rollback"
|
||||
"playGroups": {
|
||||
"bigSmall": "Big / small",
|
||||
"combo4": "4D position",
|
||||
"number2": "2D position",
|
||||
"number3": "3D position",
|
||||
"other": "Other"
|
||||
},
|
||||
"playSelectPlaceholder": "Select play type",
|
||||
"playType": "Play type",
|
||||
"publishDialog": {
|
||||
"title": "Publish odds version?",
|
||||
"description": "New odds affect new tickets immediately. Existing successful tickets still settle by their saved odds snapshot.",
|
||||
"confirm": "Confirm publish",
|
||||
"columns": {
|
||||
"prizeScope": "Prize scope",
|
||||
"afterPublish": "After publish",
|
||||
"currentActive": "Current active",
|
||||
"afterPublish": "After publish"
|
||||
}
|
||||
"prizeScope": "Prize scope"
|
||||
},
|
||||
"confirm": "Confirm publish",
|
||||
"description": "New odds affect new tickets immediately. Existing successful tickets still settle by their saved odds snapshot.",
|
||||
"title": "Publish odds version?"
|
||||
},
|
||||
"publishFailed": "Publish failed",
|
||||
"readOnlyBanner": "This version is read-only. Create a draft to edit odds and base rebate.",
|
||||
"readOnlyHint": "This version is read-only. Create a draft before editing odds.",
|
||||
"rebateRate": "Base rebate rate (%)",
|
||||
"rebateRateHint": "This is the platform base rebate. It writes rebate_rate to all prize scopes under this play type; agent/player rebate is added on top of it.",
|
||||
"rollbackDialog": {
|
||||
"confirm": "Confirm rollback",
|
||||
"description": "A new draft will be cloned from version v{{version}}. The active version will not be overwritten directly.",
|
||||
"title": "Confirm rollback"
|
||||
},
|
||||
"rollbackFailed": "Rollback failed",
|
||||
"rollbackSuccess": "Cloned v{{fromVersion}} into new draft v{{version}}",
|
||||
"sectionHint": "Pick a version to edit prize-tier odds; publishing applies to new tickets immediately.",
|
||||
"sections": {
|
||||
"oddsConfig": "Odds",
|
||||
"playScope": "Play scope"
|
||||
},
|
||||
"sheetDescription": "Choose a version to view here. Non-draft versions can be rolled back into a new draft.",
|
||||
"summary": {
|
||||
"activeHint": "This version is active; new tickets use these settings.",
|
||||
"activeVersion": "Active version",
|
||||
"contextTitle": "Version & tips",
|
||||
"draftHint": "Save draft changes before publishing; publish affects new tickets only.",
|
||||
"readOnlyHint": "This version is read-only. Create a draft to make changes.",
|
||||
"readOnlyTag": "Read-only",
|
||||
"statusLabel": "Status",
|
||||
"title": "Summary",
|
||||
"version": "Editing version"
|
||||
},
|
||||
"table": {
|
||||
"multiplier": "Odds multiplier",
|
||||
"prizeScope": "Prize scope"
|
||||
},
|
||||
"tabs": {
|
||||
"all": "All"
|
||||
}
|
||||
},
|
||||
"rebate": {
|
||||
"sectionHint": "This section configures the base rebate, which is stored in the odds version; select or create an odds draft in the section above first.",
|
||||
"lazyLoadHint": "Scroll down to the rebate section to load",
|
||||
"embeddedVersionHint": "Base rebate shares the odds version line—switch versions in the Odds section above.",
|
||||
"sheetDescription": "Rebate is stored in the odds draft version and shares the same version set as odds.",
|
||||
"publishLabel": "Publish",
|
||||
"publishSuccess": "Published odds version with rebate",
|
||||
"publishFailed": "Publish failed",
|
||||
"publishDialog": {
|
||||
"title": "Publish base rebate/odds version?",
|
||||
"description": "After publish, the base rebate applies to new tickets. Agent/player extra rebate is still added on top.",
|
||||
"confirm": "Confirm publish"
|
||||
"play": {
|
||||
"actions": {
|
||||
"disable": "Disable",
|
||||
"editDisplayName": "Edit name",
|
||||
"enable": "Enable",
|
||||
"ruleText": "Rule text"
|
||||
},
|
||||
"activeVersion": "Active version v{{version}}",
|
||||
"aria": {
|
||||
"batchGroupSwitch": "Toggle batch switch for {{group}}",
|
||||
"enablePlay": "Enable {{playCode}}"
|
||||
},
|
||||
"batchEnabledCount": "{{enabledCount}}/{{total}} enabled",
|
||||
"batchGroups": {
|
||||
"big-small": "Big / Small",
|
||||
"box": "Box Plays",
|
||||
"d2": "2D Global",
|
||||
"d3": "3D Global",
|
||||
"d4": "4D Global",
|
||||
"jackpot": "Jackpot",
|
||||
"position": "Position Plays"
|
||||
},
|
||||
"batchPartialEnabled": "{{enabledCount}}/{{total}} enabled (not all on — turn on to enable all)",
|
||||
"batchSwitchConfirmDescription": "{{action}} {{count}} play types under «{{group}}» and write to the current draft.",
|
||||
"batchSwitchConfirmTitle": "Batch {{action}}?",
|
||||
"batchSwitchDisable": "Disable",
|
||||
"batchSwitchEnable": "Enable",
|
||||
"batchSwitchesDesc": "Only updates the current draft. The player betting table refreshes after save and publish.",
|
||||
"batchSwitchesTitle": "Batch switches",
|
||||
"categories": {
|
||||
"attribute": "Attribute",
|
||||
"box": "Box",
|
||||
"jackpot": "Jackpot",
|
||||
"position": "Position",
|
||||
"standard": "Standard"
|
||||
},
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"createDraftFailed": "Failed to create draft",
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"deleteFailed": "Delete failed",
|
||||
"filters": {
|
||||
"allCategories": "All categories",
|
||||
"allStatuses": "All statuses",
|
||||
"category": "Category",
|
||||
"empty": "No matching play types",
|
||||
"groupCount": "{{count}} plays",
|
||||
"keyword": "Search plays",
|
||||
"keywordPlaceholder": "Filter by play code, display name, or category",
|
||||
"reset": "Clear filters",
|
||||
"sectionDescription": "Narrow the list first, then use batch switches or row-level edits.",
|
||||
"sectionTitle": "Filter plays",
|
||||
"status": "Status",
|
||||
"uncategorized": "Uncategorized"
|
||||
},
|
||||
"locales": {
|
||||
"en": "English",
|
||||
"ne": "Nepali",
|
||||
"zh": "Chinese"
|
||||
},
|
||||
"nameDialog": {
|
||||
"apply": "Apply to draft",
|
||||
"description": "Play {{playCode}}. The player site shows this label after you save and publish the draft.",
|
||||
"savedLocal": "Display names were saved into the local draft. Save the draft to persist them.",
|
||||
"title": "Edit display name"
|
||||
},
|
||||
"noPlayTypes": "No play types",
|
||||
"placeholders": {
|
||||
"displayOrder": "Order",
|
||||
"maxBetAmount": "Maximum amount",
|
||||
"minBetAmount": "Minimum amount"
|
||||
},
|
||||
"publishDialog": {
|
||||
"confirm": "Confirm publish",
|
||||
"description": "New settings affect future bets. Existing tickets still settle by their saved snapshot.",
|
||||
"title": "Publish play configuration?"
|
||||
},
|
||||
"publishFailed": "Publish failed",
|
||||
"readOnlyDraftHint": "Current version is read-only. Create a draft first.",
|
||||
"readOnlyHint": "Limits and rules are read-only. Create a draft first.",
|
||||
"ruleDialog": {
|
||||
"apply": "Apply to draft",
|
||||
"description": "Play {{playCode}}. Changes stay in the draft until you save and publish it.",
|
||||
"title": "Rule text (i18n)"
|
||||
},
|
||||
"ruleSavedLocal": "Rule text was saved into the local draft. Save the draft to persist it.",
|
||||
"states": {
|
||||
"disabled": "Disabled",
|
||||
"enabled": "Enabled",
|
||||
"readOnly": "Read only"
|
||||
},
|
||||
"table": {
|
||||
"actions": "Actions",
|
||||
"category": "Category",
|
||||
"displayName": "Display name",
|
||||
"maxBet": "Max bet",
|
||||
"minBet": "Min bet",
|
||||
"order": "Order",
|
||||
"playCode": "Play code",
|
||||
"status": "Status"
|
||||
},
|
||||
"toggleConfirmDescription": "This updates the current draft only. Players see changes after save and publish.",
|
||||
"toggleConfirmTitle": "{{action}} play {{playCode}}?",
|
||||
"toggleDisable": "Disable",
|
||||
"toggleEnable": "Enable",
|
||||
"toggleInstantFailed": "Failed to apply play switch. Try again later.",
|
||||
"validation": {
|
||||
"displayNameRequired": "Display name is required",
|
||||
"minMaxInvalid": "{{playCode}}: min bet cannot exceed max bet"
|
||||
}
|
||||
},
|
||||
"prizeScopes": {
|
||||
"consolation": "Consolation prize odds",
|
||||
"first": "First prize odds",
|
||||
"second": "Second prize odds",
|
||||
"starter": "Starter prize odds",
|
||||
"third": "Third prize odds"
|
||||
},
|
||||
"rebate": {
|
||||
"createDraftFailed": "Failed to create draft",
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"deleteFailed": "Delete failed",
|
||||
"editingVersion": "Editing version v{{version}} · {{status}}",
|
||||
"readOnlyHint": "Create a draft before editing base rebate.",
|
||||
"dimensionRatesMixedHint": "Base rebate within the same dimension (2D/3D/4D) is not identical: the three percentage inputs show the first play (alphabetically) that has the primary prize scope; use the table as the source of truth. Bulk inputs will overwrite all plays in that dimension to one rate.",
|
||||
"editingVersion": "Editing version v{{version}} · {{status}}",
|
||||
"effectiveTime": "Effective time (current active odds version)",
|
||||
"embeddedVersionHint": "Base rebate shares the odds version line—switch versions in the Odds section above.",
|
||||
"fields": {
|
||||
"d2": "2D base rebate rate (%)",
|
||||
"d3": "3D base rebate rate (%)",
|
||||
"d4": "4D base rebate rate (%)"
|
||||
},
|
||||
"lazyLoadHint": "Scroll down to the rebate section to load",
|
||||
"placeholders": {
|
||||
"d2": "Enter 2D base rebate",
|
||||
"d3": "Enter 3D base rebate",
|
||||
"d4": "Enter 4D base rebate"
|
||||
},
|
||||
"winEnjoy": {
|
||||
"label": "Deduct rebate on winning payouts",
|
||||
"description": "Maps to settlement.apply_rebate_to_payout: when enabled, winning payout uses gross win × (1 - rebate_rate_snapshot).",
|
||||
"hint": "Global switch; affects future settlement payouts immediately (not tied to odds version publish).",
|
||||
"saveSuccess": "Winning-ticket rebate setting updated",
|
||||
"saveFailed": "Update failed"
|
||||
},
|
||||
"effectiveTime": "Effective time (current active odds version)"
|
||||
},
|
||||
"riskCap": {
|
||||
"placeholders": {
|
||||
"defaultCap": "Enter default cap amount",
|
||||
"number": "4-digit number",
|
||||
"capAmount": "Enter cap amount"
|
||||
},
|
||||
"validation": {
|
||||
"requireAtLeastOne": "At least one cap row is required",
|
||||
"defaultGreaterThanZero": "Default cap amount must be greater than 0",
|
||||
"defaultCannotBindDraw": "Default cap cannot be bound to a specific draw",
|
||||
"specialGreaterThanZero": "Special cap amount must be greater than 0: {{number}}",
|
||||
"numberMustBe4Digits": "Number must be 4 digits: {{number}}",
|
||||
"enterValidCapAmount": "Enter a valid cap amount"
|
||||
"publishDialog": {
|
||||
"confirm": "Confirm publish",
|
||||
"description": "After publish, the base rebate applies to new tickets. Agent/player extra rebate is still added on top.",
|
||||
"title": "Publish base rebate/odds version?"
|
||||
},
|
||||
"publishFailed": "Publish failed",
|
||||
"publishDialog": {
|
||||
"title": "Publish cap configuration?",
|
||||
"description": "After publish, per-number risk-pool cap limits take effect.",
|
||||
"confirm": "Confirm publish"
|
||||
"publishLabel": "Publish",
|
||||
"publishSuccess": "Published odds version with rebate",
|
||||
"readOnlyHint": "Create a draft before editing base rebate.",
|
||||
"sectionHint": "This section configures the base rebate, which is stored in the odds version; select or create an odds draft in the section above first.",
|
||||
"sheetDescription": "Rebate is stored in the odds draft version and shares the same version set as odds.",
|
||||
"winEnjoy": {
|
||||
"description": "Maps to settlement.apply_rebate_to_payout: when enabled, winning payout uses gross win × (1 - rebate_rate_snapshot).",
|
||||
"hint": "Global switch; affects future settlement payouts immediately (not tied to odds version publish).",
|
||||
"label": "Deduct rebate on winning payouts",
|
||||
"saveFailed": "Update failed",
|
||||
"saveSuccess": "Winning-ticket rebate setting updated"
|
||||
}
|
||||
},
|
||||
"riskCap": {
|
||||
"actions": {
|
||||
"addSpecialCap": "+ Add special cap",
|
||||
"close": "Close",
|
||||
"exportCsv": "Export CSV",
|
||||
"filterPresets": "Filter presets…",
|
||||
"update": "Update"
|
||||
},
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"createDraftFailed": "Failed to create draft",
|
||||
"savedLocalDraft": "Saved into local draft. Save the draft to persist it.",
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"defaultCap": {
|
||||
"description": "Numbers without a special cap use this default cap template.",
|
||||
"fieldLabel": "Cap amount (major unit)",
|
||||
"title": "Default cap"
|
||||
},
|
||||
"deleteFailed": "Delete failed",
|
||||
"effectiveAt": "Effective at: {{value}}",
|
||||
"note": "Note: {{value}}",
|
||||
"readOnlyHint": "Read only. Create a draft first.",
|
||||
"readOnly": "Read only",
|
||||
"defaultCap": {
|
||||
"title": "Default cap",
|
||||
"description": "Numbers without a special cap use this default cap template.",
|
||||
"fieldLabel": "Cap amount (major unit)"
|
||||
},
|
||||
"specialCaps": {
|
||||
"title": "Special caps",
|
||||
"description": "No draw selected means a global number cap. Selecting a draw makes it a draw-specific cap."
|
||||
},
|
||||
"scope": {
|
||||
"global": "Global number",
|
||||
"drawId": "Draw ID: {{id}}"
|
||||
},
|
||||
"groups": {
|
||||
"globalTitle": "Global number caps",
|
||||
"globalDescription": "Long-running caps that are not tied to a specific draw. Use these for normal number-level selling limits.",
|
||||
"globalEmpty": "No global number caps yet.",
|
||||
"drawTitle": "Draw-specific caps",
|
||||
"count": "{{count}} rows",
|
||||
"drawDescription": "Only applies to the selected draw. Use these for temporary tightening or relaxing of a number cap.",
|
||||
"drawEmpty": "No draw-specific caps yet.",
|
||||
"count": "{{count}} rows"
|
||||
},
|
||||
"summary": {
|
||||
"defaultCap": "Default cap",
|
||||
"defaultHint": "Any number without a special rule falls back to this value.",
|
||||
"globalCaps": "Global number caps",
|
||||
"globalHint": "Long-running rules that do not change with a single draw.",
|
||||
"drawCaps": "Draw-specific caps",
|
||||
"drawHint": "Temporary rules that only apply to selected draws."
|
||||
"drawTitle": "Draw-specific caps",
|
||||
"globalDescription": "Long-running caps that are not tied to a specific draw. Use these for normal number-level selling limits.",
|
||||
"globalEmpty": "No global number caps yet.",
|
||||
"globalTitle": "Global number caps"
|
||||
},
|
||||
"loadingDetails": "Loading details…",
|
||||
"noDetailRows": "No detail rows.",
|
||||
"table": {
|
||||
"scope": "Scope",
|
||||
"number": "Number",
|
||||
"capAmount": "Cap amount",
|
||||
"used": "Used",
|
||||
"remaining": "Remaining",
|
||||
"soldOut": "Sold out",
|
||||
"ratio": "Ratio",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"note": "Note: {{value}}",
|
||||
"occupancy": {
|
||||
"searchLabel": "Search number",
|
||||
"searchPlaceholder": "e.g. 8888"
|
||||
},
|
||||
"placeholders": {
|
||||
"capAmount": "Enter cap amount",
|
||||
"defaultCap": "Enter default cap amount",
|
||||
"number": "4-digit number"
|
||||
},
|
||||
"publishDialog": {
|
||||
"confirm": "Confirm publish",
|
||||
"description": "After publish, per-number risk-pool cap limits take effect.",
|
||||
"title": "Publish cap configuration?"
|
||||
},
|
||||
"publishFailed": "Publish failed",
|
||||
"readOnly": "Read only",
|
||||
"readOnlyHint": "Read only. Create a draft first.",
|
||||
"runtime": {
|
||||
"title": "Per-draw occupancy (live)",
|
||||
"description": "Loaded from the draw risk-pool API, not from the version draft above. Select a draw to see used, remaining, and sold-out state.",
|
||||
"drawLabel": "Draw",
|
||||
"drawPlaceholder": "Select draw",
|
||||
"filterAll": "All",
|
||||
"filterSoldOut": "Sold out only",
|
||||
"filterHighRisk": "High usage",
|
||||
"filterSoldOut": "Sold out only",
|
||||
"manageHint": "Use the links above for full risk operations on this draw.",
|
||||
"noDraws": "No draws available; cannot load occupancy.",
|
||||
"soldNo": "No",
|
||||
"soldYes": "Yes",
|
||||
"soldNo": "No"
|
||||
"title": "Per-draw occupancy (live)"
|
||||
},
|
||||
"actions": {
|
||||
"update": "Update",
|
||||
"addSpecialCap": "+ Add special cap",
|
||||
"filterPresets": "Filter presets…",
|
||||
"exportCsv": "Export CSV",
|
||||
"close": "Close"
|
||||
"savedLocalDraft": "Saved into local draft. Save the draft to persist it.",
|
||||
"scope": {
|
||||
"drawId": "Draw ID: {{id}}",
|
||||
"global": "Global number"
|
||||
},
|
||||
"specialCaps": {
|
||||
"description": "No draw selected means a global number cap. Selecting a draw makes it a draw-specific cap.",
|
||||
"title": "Special caps"
|
||||
},
|
||||
"summary": {
|
||||
"defaultCap": "Default cap",
|
||||
"defaultHint": "Any number without a special rule falls back to this value.",
|
||||
"drawCaps": "Draw-specific caps",
|
||||
"drawHint": "Temporary rules that only apply to selected draws.",
|
||||
"globalCaps": "Global number caps",
|
||||
"globalHint": "Long-running rules that do not change with a single draw."
|
||||
},
|
||||
"syncDialog": {
|
||||
"title": "Sync default cap",
|
||||
"confirm": "Confirm",
|
||||
"description": "The default cap template will be set to {{value}}. This only changes the draft. Save and publish after confirming.",
|
||||
"confirm": "Confirm"
|
||||
"title": "Sync default cap"
|
||||
},
|
||||
"table": {
|
||||
"actions": "Actions",
|
||||
"capAmount": "Cap amount",
|
||||
"number": "Number",
|
||||
"ratio": "Ratio",
|
||||
"remaining": "Remaining",
|
||||
"scope": "Scope",
|
||||
"soldOut": "Sold out",
|
||||
"used": "Used"
|
||||
},
|
||||
"validation": {
|
||||
"defaultCannotBindDraw": "Default cap cannot be bound to a specific draw",
|
||||
"defaultGreaterThanZero": "Default cap amount must be greater than 0",
|
||||
"enterValidCapAmount": "Enter a valid cap amount",
|
||||
"numberMustBe4Digits": "Number must be 4 digits: {{number}}",
|
||||
"requireAtLeastOne": "At least one cap row is required",
|
||||
"specialGreaterThanZero": "Special cap amount must be greater than 0: {{number}}"
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"confirmSaveCurrencyFormatDescription": "This updates decimal places and separators.",
|
||||
"confirmSaveCurrencyFormatTitle": "Save currency display format?",
|
||||
"confirmSaveDescription": "This updates draw review, cooldown, auto settlement/approval/payout, and play-rules display. It may affect site-wide operation.",
|
||||
"confirmSaveDrawDescription": "This updates draw review, schedule timing, and cooldown in this block only.",
|
||||
"confirmSaveDrawTitle": "Save draw parameters?",
|
||||
"confirmSaveFrontendDescription": "This updates play-rules HTML on the player site. Draw and settlement logic are not changed.",
|
||||
"confirmSaveFrontendTitle": "Save front-end display settings?",
|
||||
"confirmSaveRuntimeDescription": "This updates draw review, schedule timing, cooldown, and auto settlement/approval/payout. Play-rules HTML is not changed.",
|
||||
"confirmSaveRuntimeTitle": "Save draw and settlement parameters?",
|
||||
"confirmSaveSettlementDescription": "This updates auto settlement, approval, and payout switches.",
|
||||
"confirmSaveSettlementTitle": "Save settlement automation?",
|
||||
"confirmSaveTitle": "Save system runtime parameters?",
|
||||
"description": "Controls review flow after RNG draw generation, cooldown duration, and automatic settlement behavior. These are global runtime policies and do not belong to versioned operations config.",
|
||||
"discard": "Discard changes",
|
||||
"fields": {
|
||||
"applyRebateToPayout": "Deduct rebate again on winning payouts",
|
||||
"autoApprove": "Auto-approve settlement batches",
|
||||
"autoPayout": "Auto-credit winnings to wallets",
|
||||
"autoSettlement": "Run settlement automatically",
|
||||
"cooldownMinutes": "Cooldown duration (minutes)",
|
||||
"currencyDecimalSeparator": "Decimal separator",
|
||||
"currencyDisplayDecimals": "Display decimals",
|
||||
"currencyThousandsSeparator": "Thousands separator",
|
||||
"defaultCurrency": "Default currency code",
|
||||
"drawBettingWindowSeconds": "Betting window (seconds)",
|
||||
"drawBufferDrawsAhead": "Pre-generated future draws",
|
||||
"drawCloseBeforeDrawSeconds": "Close before draw (seconds)",
|
||||
"drawIntervalMinutes": "Draw interval (minutes)",
|
||||
"manualReview": "Require manual review for draw results",
|
||||
"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."
|
||||
},
|
||||
"frontendConfig": "Front-end configuration",
|
||||
"hints": {
|
||||
"applyRebateToPayout": "When enabled, payout = gross win × (1 - rebate_rate_snapshot). Default off (rebate already reflected in actual deduct).",
|
||||
"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.",
|
||||
"autoSettlement": "When disabled, tick will not run settlement automatically and admins must trigger it manually.",
|
||||
"cooldownMinutes": "How long to wait after publishing before entering settling. Use 0 to settle immediately.",
|
||||
"manualReview": "When enabled, RNG draw results enter pending review and must be published manually in admin."
|
||||
},
|
||||
"loadFailed": "Failed to load system settings",
|
||||
"placeholders": {
|
||||
"cooldownMinutes": "Enter cooldown minutes",
|
||||
"currencyDecimalSeparator": "Enter decimal separator, for example .",
|
||||
"currencyDisplayDecimals": "Enter display decimal places, for example 2",
|
||||
"currencyThousandsSeparator": "Enter thousands separator, for example ,",
|
||||
"defaultCurrency": "Enter default currency code, for example NPR",
|
||||
"drawBettingWindowSeconds": "Enter betting window in seconds",
|
||||
"drawBufferDrawsAhead": "Enter pre-generated draw count",
|
||||
"drawCloseBeforeDrawSeconds": "Enter seconds to close before draw",
|
||||
"drawIntervalMinutes": "Enter draw interval in minutes"
|
||||
},
|
||||
"runtimeIntro1": "This area stores global system parameters that do not belong to play, odds, or risk-control versions. They directly affect wallet transfers, job switches, and runtime policy.",
|
||||
"runtimeIntro2": "Play, odds, rebate, and cap management stay under operations configuration. System settings only carry cross-module runtime parameters to avoid overlapping responsibilities in admin.",
|
||||
"runtimeTitle": "Global runtime parameters",
|
||||
"saveCurrencyFormatSuccess": "Currency display format saved",
|
||||
"saveDrawSuccess": "Draw parameters saved",
|
||||
"saveFailed": "Failed to save system settings",
|
||||
"saveFrontendSuccess": "Front-end display settings saved",
|
||||
"saveRuntimeSuccess": "Draw and settlement parameters saved",
|
||||
"saveSettlementSuccess": "Settlement automation saved",
|
||||
"saveSuccess": "System settings saved",
|
||||
"sections": {
|
||||
"currencyFormat": "Currency display format",
|
||||
"currencyFormatDescription": "Decimals and separators for amounts across the site (separate from currency master data).",
|
||||
"draw": "Draw schedule and review",
|
||||
"drawDescription": "Controls draw timing, close window, manual review, and cooldown. Only changed fields in this block are submitted.",
|
||||
"settlement": "Settlement automation",
|
||||
"settlementDescription": "Controls whether tick auto-runs settlement, approval, and payout. Only changed fields in this block are submitted."
|
||||
},
|
||||
"states": {
|
||||
"disabled": "Disabled",
|
||||
"enabled": "Enabled"
|
||||
},
|
||||
"title": "Draw and settlement runtime settings",
|
||||
"unsavedChanges": "Unsaved changes"
|
||||
},
|
||||
"title": "Configuration Center",
|
||||
"versionActions": {
|
||||
"newDraft": "New draft",
|
||||
"publishCurrent": "Publish",
|
||||
"refresh": "Refresh versions",
|
||||
"refreshing": "Refreshing",
|
||||
"rollbackDialog": {
|
||||
"confirm": "Confirm rollback",
|
||||
"description": "A new draft will be cloned from version v{{version}}. The active version will not be overwritten directly.",
|
||||
"title": "Confirm rollback"
|
||||
},
|
||||
"rollbackFailed": "Rollback failed",
|
||||
"rollbackSuccess": "Cloned v{{fromVersion}} into new draft v{{version}}",
|
||||
"saveDraft": "Save draft",
|
||||
"saveFailed": "Failed to save configuration"
|
||||
},
|
||||
"versionStatus": {
|
||||
"active": "Active",
|
||||
"archived": "Archived",
|
||||
"draft": "Draft"
|
||||
},
|
||||
"versionSwitcher": {
|
||||
"count": "{{count}} items",
|
||||
"current": "Current",
|
||||
"delete": "Delete",
|
||||
"deleteConfirmDescription": "Version ID {{id}} (version_no {{version}}) will be permanently deleted. Active versions cannot be deleted.",
|
||||
"deleteConfirmTitle": "Delete this version?",
|
||||
"effectiveAt": "Effective at: {{value}}",
|
||||
"empty": "No version records yet.",
|
||||
"loading": "Loading…",
|
||||
"moreActions": "More actions for v{{version}}",
|
||||
"noneSelected": "No version selected",
|
||||
"note": "Note: {{value}}",
|
||||
"rollback": "Rollback",
|
||||
"selected": "Selected",
|
||||
"sheetDescription": "Choose a version to view on this page. Drafts are editable, while active and archived versions are read-only.",
|
||||
"sheetTitle": "Switch configuration version",
|
||||
"switch": "Switch version",
|
||||
"view": "View"
|
||||
},
|
||||
"versionToolbar": {
|
||||
"draftEditing": "Editing a draft — save and publish to go live"
|
||||
},
|
||||
"wallet": {
|
||||
"confirmSaveDescription": "This updates per-order transfer-in/out limits and immediately affects player wallet transfers.",
|
||||
"confirmSaveTitle": "Save wallet limits?",
|
||||
"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.",
|
||||
"discard": "Discard changes",
|
||||
"fields": {
|
||||
"inMax": "Maximum transfer-in amount",
|
||||
"inMin": "Minimum transfer-in amount",
|
||||
"outMax": "Maximum transfer-out amount",
|
||||
"outMin": "Minimum transfer-out amount"
|
||||
},
|
||||
"hints": {
|
||||
"inMax": "Per-order maximum from main wallet to lottery wallet",
|
||||
"inMin": "Per-order minimum from main wallet to lottery wallet",
|
||||
"outMax": "Per-order maximum from lottery wallet to main wallet",
|
||||
"outMin": "Per-order minimum from lottery wallet to main wallet"
|
||||
},
|
||||
"loadFailed": "Failed to load",
|
||||
"placeholders": {
|
||||
"max": "For example: 10000.00",
|
||||
"min": "For example: 1.00"
|
||||
},
|
||||
"saveFailed": "Save failed",
|
||||
"saveSuccess": "Saved successfully",
|
||||
"title": "Wallet transfer limit settings",
|
||||
"validation": {
|
||||
"amountAtLeastMinorUnit": "{{field}} must be a valid amount and at least 0.01.",
|
||||
"inRangeInvalid": "Maximum transfer-in amount cannot be less than the minimum transfer-in amount.",
|
||||
"outRangeInvalid": "Maximum transfer-out amount cannot be less than the minimum transfer-out amount."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user