Files
lotteryAdmin/src/i18n/locales/en/config.json
kang 99e644caa1
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
feat(i18n): 添加多语言支持及翻译文本更新
- 在错误页面和未找到页面组件中集成 i18next,实现多语言动态显示
- 新增英文和尼泊尔语的错误信息、按钮文本及页面提示的翻译键值
- 扩充英文语言包,完善代理、玩家、结算中心和通用配置相关的翻译内容
- 修正和补充尼泊尔语翻译文本,统一界面用词,提升本地化体验
- 在多个配置文件中新增和调整用于界面交互和状态提示的翻译项
- 在代码中替换硬编码文本为相应的翻译函数调用,支持国际化展示
2026-07-07 09:44:12 +08:00

708 lines
32 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.
{
"currencies": {
"actions": {
"backToSettings": "Back to settings",
"create": "Add currency",
"delete": "Delete",
"edit": "Edit",
"openStandalone": "Open dedicated page"
},
"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?"
},
"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": {
"description": "Jump to play rules, odds & rebate, jackpot, and risk cap by domain. The sidebar provides direct links; this page is an overview.",
"integrationDesc": "site_code, JWT secrets, partner wallet URL, iframe allowlist",
"integrationTitle": "Integration sites",
"currenciesDesc": "Manage supported currencies and precision",
"currenciesTitle": "Currencies",
"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",
"settingsDesc": "Payout, rebate, and other system-level parameters",
"settingsTitle": "System settings",
"title": "Operations configuration"
},
"integrationSites": {
"adminAccountCreated": "Created site admin account {{username}}",
"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",
"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}}",
"fields": {
"adminEmail": "Email (optional)",
"adminNickname": "Admin nickname",
"adminPassword": "Initial password",
"adminUsername": "Admin username",
"code": "site_code",
"currency": "Default currency",
"iframeOrigins": "iframe allowlist (one origin per line)",
"lotteryH5BaseUrl": "Lottery H5 base URL (optional)",
"name": "Site name",
"notes": "Notes",
"ssoSecret": "SSO secret",
"status": "Status",
"walletApiKey": "Wallet API key",
"walletApiUrl": "Partner wallet base URL"
},
"form": {
"adminNicknameRequired": "Site admin nickname is required",
"adminPasswordRequired": "Initial site admin password must be at least 6 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": {
"adminEmail": "Enter email",
"adminNickname": "Enter account nickname",
"adminPassword": "at least 6 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"
},
"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}}"
},
"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": {
"activeVersionPrefix": "Active version:",
"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…",
"missingScopeRow": "Missing {{scope}} row. Check seed or version data.",
"multiplier": "Multiplier x{{value}} · {{currency}}",
"noPlayTypes": "No play types in this category.",
"placeholders": {
"multiplier": "Enter odds multiplier",
"rebateRate": "Enter base rebate rate"
},
"playGroups": {
"bigSmall": "Big / small",
"combo4": "4D position",
"number2": "2D position",
"number3": "3D position",
"other": "Other"
},
"playSelectPlaceholder": "Select play type",
"playType": "Play type",
"publishDialog": {
"columns": {
"afterPublish": "After publish",
"currentActive": "Current active",
"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"
}
},
"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"
},
"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",
"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"
},
"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",
"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",
"addNumberCap": "+ Add number cap",
"close": "Close",
"exportCsv": "Export CSV",
"filterPresets": "Filter presets…",
"update": "Update"
},
"createDraftFailed": "Failed to create draft",
"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}}",
"groups": {
"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.",
"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.",
"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": {
"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",
"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",
"title": "Per-draw occupancy (live)"
},
"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": {
"confirm": "Confirm",
"description": "The default cap template will be set to {{value}}. This only changes the draft. Save and publish after confirming.",
"title": "Sync default cap"
},
"table": {
"actions": "Actions",
"draw": "Draw",
"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": {
"pageTitle": "System settings",
"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 manual draw review and cooldown duration 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": {
"deployment": "Deployment (read-only)",
"deploymentDescription": "Default currency and draw schedule are set in server .env; this block shows effective values.",
"currencyFormat": "Currency display format",
"currencyFormatDescription": "Decimals and separators for amounts across the site (separate from currency master data).",
"draw": "Draw review",
"drawDescription": "Manual review after RNG and post-publish cooldown.",
"settlement": "Settlement automation",
"settlementDescription": "In order: auto settlement → auto approve → auto payout. When off, handle manually in the relevant module."
},
"deployment": {
"footer": "Restart PHP or refresh config cache after changes. Contact ops if unsure.",
"fields": {
"default_currency": "Default currency",
"draw_timezone": "Draw timezone",
"draw_interval_minutes": "Draw interval (minutes)",
"draw_betting_window_seconds": "Betting window (seconds)",
"draw_close_before_draw_seconds": "Close before draw (seconds)",
"draw_buffer_draws_ahead": "Pre-generated future draws"
},
"hints": {
"default_currency": "Default for new players when currency is unspecified",
"draw_timezone": "Timezone for draw schedule and display",
"draw_interval_minutes": "Minutes between consecutive draw times",
"draw_betting_window_seconds": "How long betting stays open each draw",
"draw_close_before_draw_seconds": "Seconds before draw time to stop accepting bets",
"draw_buffer_draws_ahead": "How many future draws the scheduler pre-creates"
}
},
"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 v{{version}} will be deleted. This cannot be undone.",
"deleteConfirmTitle": "Delete this version?",
"effectiveAt": "Effective at: {{value}}",
"empty": "No version records yet.",
"loading": "Loading…",
"moreActions": "More actions for v{{version}}",
"noneSelected": "Select version",
"note": "Note: {{value}}",
"rollback": "Rollback",
"selected": "Selected",
"sheetDescription": "Select a version to view on this page. Drafts are editable; active and archived versions are read-only.",
"sheetTitle": "Versions",
"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."
}
}
}