{
  "title": "Configuration Center",
  "nav": {
    "aria": "Operations configuration sub-navigation",
    "sidebarTitle": "Operations configuration",
    "groups": {
      "betting": "Betting and display",
      "risk": "Risk control"
    },
    "items": {
      "plays": "Play types and limits",
      "odds": "Odds",
      "rebate": "Commission / rebate",
      "jackpot": "Jackpot pool",
      "risk-cap": "Payout caps"
    },
    "rulesPlaysTitle": "Play rules",
    "rulesOddsTitle": "Odds & rebate",
    "rulesOddsDescription": "Odds matrix and rebate rates on one page, sharing the same odds version line.",
    "riskCapTitle": "Risk cap rules"
  },
  "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 & rebate",
    "oddsDesc": "Odds matrix and rebate rates in one version stream",
    "jackpotTitle": "Jackpot",
    "jackpotDesc": "Pool parameters and ledger records",
    "riskCapTitle": "Risk cap rules",
    "riskCapDesc": "Per-number payout caps and occupancy"
  },
  "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"
    },
    "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",
    "saveFailed": "Failed to save system settings",
    "frontendConfig": "Front-end configuration",
    "fields": {
      "manualReview": "Require manual review for draw results",
      "cooldownMinutes": "Cooldown duration (minutes)",
      "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."
    },
    "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."
  },
  "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."
    },
    "form": {
      "code": "Currency code",
      "name": "Currency name",
      "decimals": "Decimal places",
      "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",
    "actions": {
      "enable": "Enable",
      "disable": "Disable",
      "ruleText": "Rule text",
      "editDisplayName": "Edit name"
    },
    "locales": {
      "zh": "Chinese",
      "en": "English",
      "ne": "Nepali"
    },
    "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}}",
      "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"
    }
  },
  "prizeScopes": {
    "first": "First prize odds",
    "second": "Second prize odds",
    "third": "Third prize odds",
    "starter": "Starter prize odds",
    "consolation": "Consolation prize odds"
  },
  "odds": {
    "sectionHint": "Pick a version to edit prize-tier odds; publishing applies to new tickets immediately.",
    "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": {
    "sectionHint": "Rebate rates are 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": "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 rebate/odds version?",
      "description": "After publish, rebate calculation applies to new tickets.",
      "confirm": "Confirm publish"
    },
    "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.",
    "dimensionRatesMixedHint": "Rebate rates within the same dimension (2D/3D/4D) are 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.",
    "fields": {
      "d2": "2D rebate rate (%)",
      "d3": "3D rebate rate (%)",
      "d4": "4D rebate rate (%)"
    },
    "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": {
    "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",
    "publishDialog": {
      "title": "Publish cap configuration?",
      "description": "After publish, per-number risk-pool cap limits take effect.",
      "confirm": "Confirm publish"
    },
    "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": {
      "searchLabel": "Search number",
      "searchPlaceholder": "e.g. 8888"
    },
    "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",
      "manageHint": "Use the links above for full risk operations on this draw.",
      "noDraws": "No draws available; cannot load occupancy.",
      "soldYes": "Yes",
      "soldNo": "No"
    },
    "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"
    }
  }
}
