feat: 统一管理端多语言、配置与票据/结算页面重构
This commit is contained in:
@@ -5,15 +5,14 @@
|
||||
"sidebarTitle": "Operations configuration",
|
||||
"groups": {
|
||||
"betting": "Betting and display",
|
||||
"risk_wallet": "Risk and funds"
|
||||
"risk": "Risk control"
|
||||
},
|
||||
"items": {
|
||||
"plays": "Play types and limits",
|
||||
"odds": "Odds",
|
||||
"rebate": "Commission / rebate",
|
||||
"jackpot": "Jackpot pool",
|
||||
"risk-cap": "Payout caps",
|
||||
"wallet": "Wallet thresholds"
|
||||
"risk-cap": "Payout caps"
|
||||
}
|
||||
},
|
||||
"versionStatus": {
|
||||
@@ -70,6 +69,31 @@
|
||||
},
|
||||
"discard": "Discard changes"
|
||||
},
|
||||
"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",
|
||||
"saveFailed": "Failed to save system settings",
|
||||
"fields": {
|
||||
"manualReview": "Require manual review for draw results",
|
||||
"cooldownMinutes": "Cooldown duration (minutes)",
|
||||
"autoSettlement": "Run settlement automatically"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"states": {
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled"
|
||||
},
|
||||
"discard": "Discard changes"
|
||||
},
|
||||
"play": {
|
||||
"batchGroups": {
|
||||
"d2": "2D Global",
|
||||
@@ -79,6 +103,164 @@
|
||||
"position": "Position Plays",
|
||||
"box": "Box Plays",
|
||||
"jackpot": "Jackpot"
|
||||
},
|
||||
"validation": {
|
||||
"minMaxInvalid": "{{playCode}}: min bet cannot exceed max bet"
|
||||
},
|
||||
"publishFailed": "Publish failed",
|
||||
"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",
|
||||
"actions": {
|
||||
"enable": "Enable",
|
||||
"disable": "Disable",
|
||||
"ruleText": "Rule text"
|
||||
},
|
||||
"table": {
|
||||
"playCode": "Play code",
|
||||
"category": "Category",
|
||||
"status": "Status",
|
||||
"displayName": "Display name",
|
||||
"order": "Order",
|
||||
"minBet": "Min bet",
|
||||
"maxBet": "Max bet",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"states": {
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"readOnly": "Read only"
|
||||
},
|
||||
"aria": {
|
||||
"enablePlay": "Enable {{playCode}}"
|
||||
},
|
||||
"ruleDialog": {
|
||||
"title": "Rule text (Chinese)",
|
||||
"description": "Play {{playCode}}. Changes stay in the draft until you save and publish it.",
|
||||
"fieldLabel": "rule_text_zh",
|
||||
"apply": "Apply to draft"
|
||||
}
|
||||
},
|
||||
"odds": {
|
||||
"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.",
|
||||
"loadingDetails": "Loading details…",
|
||||
"multiplier": "Multiplier x{{value}} · {{currency}}",
|
||||
"missingScopeRow": "Missing {{scope}} row. Check seed or version data.",
|
||||
"rebateRate": "Rebate rate (%)",
|
||||
"rebateRateHint": "Writes rebate_rate to all prize scopes under this play type.",
|
||||
"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"
|
||||
},
|
||||
"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",
|
||||
"currentActive": "Current active",
|
||||
"afterPublish": "After publish"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rebate": {
|
||||
"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",
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"createDraftFailed": "Failed to create draft",
|
||||
"deleteFailed": "Delete failed",
|
||||
"editingVersion": "Editing version v{{version}} · {{status}}",
|
||||
"readOnlyHint": "Create a draft before editing rebate.",
|
||||
"fields": {
|
||||
"d2": "2D rebate rate (%)",
|
||||
"d3": "3D rebate rate (%)",
|
||||
"d4": "4D rebate rate (%)"
|
||||
},
|
||||
"winEnjoy": {
|
||||
"label": "Apply rebate on winning tickets",
|
||||
"description": "Placeholder field. It can later be aligned with risk and settlement rules and persisted."
|
||||
},
|
||||
"effectiveTime": "Effective time (current active odds version)"
|
||||
},
|
||||
"riskCap": {
|
||||
"validation": {
|
||||
"requireAtLeastOne": "At least one cap row is required",
|
||||
"defaultGreaterThanZero": "Default cap amount must be greater than 0",
|
||||
"numberMustBe4Digits": "Number must be 4 digits: {{number}}",
|
||||
"enterValidCapAmount": "Enter a valid cap amount"
|
||||
},
|
||||
"publishFailed": "Publish failed",
|
||||
"createDraftSuccess": "Created draft v{{version}}",
|
||||
"createDraftFailed": "Failed to create draft",
|
||||
"savedLocalDraft": "Saved into local draft. Save the draft to persist it.",
|
||||
"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 (minor unit)"
|
||||
},
|
||||
"specialCaps": {
|
||||
"title": "Special caps"
|
||||
},
|
||||
"loadingDetails": "Loading details…",
|
||||
"noDetailRows": "No detail rows.",
|
||||
"table": {
|
||||
"number": "Number",
|
||||
"capAmount": "Cap amount",
|
||||
"used": "Used",
|
||||
"remaining": "Remaining",
|
||||
"soldOut": "Sold out",
|
||||
"ratio": "Ratio",
|
||||
"actions": "Actions"
|
||||
},
|
||||
"occupancy": {
|
||||
"title": "All number occupancy",
|
||||
"description": "Placeholder view: filters and exports still need ticket-summary integration. Data below still comes from the current draft list.",
|
||||
"searchLabel": "Search number",
|
||||
"searchPlaceholder": "e.g. 8888",
|
||||
"filterPending": "Sold-out / high-risk preset filter is pending integration",
|
||||
"exportPending": "CSV export is pending integration"
|
||||
},
|
||||
"actions": {
|
||||
"update": "Update",
|
||||
"addSpecialCap": "+ Add special cap",
|
||||
"filterPresets": "Filter presets…",
|
||||
"exportCsv": "Export CSV",
|
||||
"close": "Close"
|
||||
},
|
||||
"syncDialog": {
|
||||
"title": "Sync default cap",
|
||||
"description": "The default cap template will be set to {{value}}. This only changes the draft. Save and publish after confirming.",
|
||||
"confirm": "Confirm"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user