{
  "levels": {
    "low": {
      "label": "OK",
      "verb": "System steady",
      "hint": "Keep daily protection"
    },
    "elevated": {
      "label": "Elevated",
      "verb": "Anomalies seen",
      "hint": "Switch to hardened and watch suspect IPs"
    },
    "under_attack": {
      "label": "Under attack",
      "verb": "Likely under attack",
      "hint": "Apply under-attack preset + bulk ban"
    },
    "critical": {
      "label": "Critical",
      "verb": "Severe threat",
      "hint": "Consider emergency; ensure you are whitelisted"
    }
  },
  "presetsWhen": {
    "daily": "Day-to-day",
    "hardened": "Scan / brute",
    "under_attack": "L7 flood",
    "emergency": "Last resort"
  },
  "note": {
    "notApplied": "Not applied on host (needs root + YSK_EXECUTE=1) — saved to panel settings",
    "nginxWritten": "Wrote Nginx rate-limit panel file",
    "f2bWritten": "Wrote fail2ban panel settings",
    "hintDropped": "Internal protection hint omitted",
    "nginxLimits": "Will write Nginx rate-limit snippet"
  },
  "rel": {
    "justNow": "Just now",
    "minutesAgo": "{{n}} min ago",
    "hoursAgo": "{{n}} h ago"
  },
  "apiUnreachable": "Cannot reach API (web proxy/backend may be down)",
  "geoipLoadFailed": "Failed to load GeoIP",
  "loadFailed": "Load failed",
  "previewDone": "Preview done (not written)",
  "presetApplied": "Protection preset applied",
  "manualBan": "Manual ban",
  "banSent": "Ban sent for {{ip}}",
  "quickSelectBan": "Quick-select ban",
  "bulkBan": "Bulk ban {{count}}",
  "autoBanStatus": "Auto-ban: {{onOff}} · {{mode}} · {{method}}",
  "autoBanUpdated": "Auto-ban updated",
  "automationMaster": "Automation master: {{onOff}}",
  "autoPresetStatus": "Auto preset: {{onOff}}",
  "autoBanAutomation": "Auto-ban: {{onOff}} ({{mode}})",
  "automationSaved": "Automation settings saved",
  "statFirewall": "Firewall",
  "statSuspects": "Suspect IPs",
  "statSuspectsSplit": "{{actionable}} actionable / {{total}} listed",
  "suspectActionableCount": "Actionable IPs {{count}}",
  "scoreBasisHint": "Listed suspects vs IPs you can still ban (excludes already banned / whitelist).",
  "statAutoBan": "Auto-ban",
  "statApply": "System apply",
  "statActiveBans": "Active bans",
  "statPreset": "Preset",
  "threatPill": "Threat {{label}} · score {{score}}",
  "reprobed": "Re-probed",
  "loadingStatus": "Loading protection status…",
  "tabs": {
    "command": "Response",
    "automation": "Automation",
    "bans": "Bans",
    "geo": "IP access",
    "stack": "Stack",
    "intel": "Intel",
    "about": "About"
  },
  "reapply": "Re-apply",
  "nginxLimits": "Nginx rate limits",
  "notWritten": "Not written",
  "modeValue": {
    "normal": "Normal",
    "degraded": "Degraded",
    "ddos-protection": "DDoS protection",
    "offline": "Offline"
  },
  "mode": "Mode",
  "controlPlane": "Control plane",
  "canApply": "Can apply",
  "needRoot": "Needs root",
  "writeOnly": "Write file only",
  "autoRunning": "Running · every {{sec}}s · bans this hour {{n}}",
  "autoOffManual": "Off — manual only",
  "lastTick": "· last {{t}}",
  "nextTick": "· next {{t}}",
  "on": "On",
  "off": "Off",
  "open": "Open",
  "ranAutomationTick": "Ran one automation tick",
  "escalateHardened": "Hardened ≥ score",
  "escalateAttack": "Under attack ≥ score",
  "deescalateDaily": "Back to daily < score",
  "zeroOff": "0 off",
  "holdAfterEscalate": "Min hold after escalate",
  "min5": "5 min",
  "min15": "15 min",
  "min30": "30 min",
  "hour1": "1 h",
  "hour2": "2 h",
  "hour6": "6 h",
  "presetOrCustom": "Preset / custom",
  "autoBanMode": "Auto-ban mode",
  "soft": "Soft",
  "normal": "Normal",
  "aggressive": "Aggressive",
  "custom": "Custom",
  "method": "Method",
  "banMethod": "Ban method",
  "both": "Both",
  "scoreGte": "Score ≥",
  "hitsGte": "Request hits ≥",
  "hits429Gte": "429-related hits ≥",
  "scanHitsGte": "Scan-path hits ≥",
  "cooldown": "Cooldown",
  "maxPerHour": "Max per hour",
  "scanInterval": "Scan interval",
  "schedulerDefault": "scheduler default 120s",
  "collapse": "Collapse",
  "expand": "Expand",
  "step": "Step",
  "mechanism": "Mechanism",
  "youCanTune": "You can tune",
  "probe": "Probe",
  "probeSignals": "WAN / req rate / TCP / f2b / UFW",
  "escalateThreshold": "Escalate threshold",
  "emergency": "Emergency",
  "neverAuto": "Never auto",
  "manualEmergency": "Manual EMERGENCY",
  "signalNetworkDown": "WAN down",
  "signalHighReq": "High request rate",
  "signalDdos": "DDoS heuristic",
  "signalTcp": "TCP connections",
  "signalUfwOff": "UFW off",
  "signalF2bBans": "fail2ban ban count",
  "weightHint": "{{label}} weight 0–3",
  "detected": "(detected)",
  "notSet": "(not set)",
  "zonesComma": "Zones (comma-separated)",
  "underAttackRequested": "Under Attack requested",
  "underAttackCleared": "Clear UA requested",
  "autoBanOpen": "On · {{mode}} · this hour {{n}}/{{max}}",
  "autoBanClosed": "Off — manual/list only",
  "pausedNoExecute": "· paused (no EXECUTE)",
  "circuitOpen": "· circuit open",
  "autoBanModeLabel": "Auto-ban mode",
  "scanned": "Scanned",
  "bulkOps": "Bulk actions",
  "fromAccessLog": "From access log · one-click or bulk ban",
  "noSuspectIps": "No suspect IPs for now",
  "noSuspectDesc": "Appears when scan/429 traffic is seen. Expand for manual ban.",
  "whitelistPlus": "Whitelist + {{ip}}",
  "whitelistAdded": "Added to whitelist",
  "activeBansTitle": "Active bans ({{count}})",
  "activeBansDesc": "Protection aggregate · unban via defense API (same as fail2ban-client)",
  "source": "Source",
  "unbanned": "Unbanned",
  "noBans": "No bans",
  "noBansDesc": "Bans show here",
  "collapseQuickAdd": "Collapse quick-add",
  "quickAddOne": "Quick-add one",
  "removeItem": "Remove {{w}}",
  "updated": "Updated",
  "ipOrCidr": "IPv4/IPv6 or CIDR",
  "autoBanWhitelistAdded": "Added to auto-ban whitelist",
  "added": "Added",
  "banIpPlaceholder": "IPv4 or IPv6 to ban",
  "reason": "Reason",
  "scanBrute": "Scan / brute",
  "noSignals": "No signals yet",
  "pressReprobe": "Press re-probe",
  "points": "pts",
  "noTopIps": "No top IPs yet",
  "topIpsAfterLog": "Shows after logs exist",
  "noManagedVhost": "No managed vhost",
  "afterPresetMarker": "Preset apply injects marker",
  "injected": "YSK_DEFENSE injected",
  "notInjected": "Not injected",
  "noEvents": "No events yet",
  "eventsAfterOps": "Appear after apply/ban",
  "geoipUpdated": "GeoIP DB updated",
  "dbReady": "DB ready",
  "stale": "Stale",
  "older7d": ">7 days",
  "freshnessNa": "n/a",
  "freshnessMissing": "No database",
  "freshnessStale": "Stale",
  "freshnessFresh": "Current",
  "lastSuccess": "Last success",
  "downloaded": "Downloaded",
  "missing": "Missing",
  "geoMode": "Geo access mode",
  "denyList": "Deny list",
  "allowListHighRisk": "Allow list · high risk",
  "autoUpdateDb": "Auto-update DB",
  "countriesSelected": "Countries ({{n}} selected)",
  "searchCountry": "Search Chinese name or ISO",
  "countryPlaceholder": "China / CN",
  "regionsSelected": "Regions ({{n}} selected)",
  "regionsHint": "From selected countries; custom CN-GD OK",
  "pickCountryFirst": "Pick countries first to narrow list",
  "customRegion": "Custom, e.g. CN-GD",
  "regionPlaceholder": "Guangdong / CA / Tokyo",
  "continentsSelected": "Continents ({{n}} selected)",
  "continentsHint": "Optional continents",
  "continentPlaceholder": "Asia / EU",
  "asnsSelected": "Provider ASN ({{n}} selected)",
  "asnsHint": "Cloud/ISP; custom ASN OK",
  "customAsn": "Custom ASN, e.g. 13335",
  "asnPlaceholder": "Cloudflare / ISP",
  "cityExample": "e.g. CN|Shenzhen or US|Ashburn",
  "policySaved": "Policy saved · countries {{c}} · regions {{r}} · ASN {{a}}",
  "ipPolicySaved": "IP access policy saved",
  "nginxGeoWritten": "Wrote nginx geo snippet",
  "ipAddress": "IP address",
  "lookupPlaceholder": "IPv4 or IPv6 to look up",
  "wouldBlock": "Would block · {{reason}} · {{matched}}",
  "wouldAllow": "Allow · {{reason}}",
  "lookupDone": "Lookup done",
  "item": "Field",
  "value": "Value",
  "country": "Country",
  "region": "Region",
  "city": "City",
  "continent": "Continent",
  "coords": "Coords",
  "provider": "Provider",
  "policy": "Policy",
  "block": "Block",
  "allow": "Allow",
  "matched": "Matched",
  "applyStricterTitle": "Apply {{name}}?",
  "applyStricterDesc": "May enable auto-ban. Confirm your IP is whitelisted. Review the profile changes below.",
  "confirmEmergencyTitle": "Confirm emergency preset",
  "confirmEmergencyDesc": "Emergency extremely rate-limits. Confirm whitelist and type EMERGENCY.",
  "confirmString": "Confirm string",
  "applyEmergency": "Apply emergency",
  "sectionPreset": "Presets",
  "sectionAutoPreset": "① Auto preset",
  "sectionAutoBan": "② Auto-ban",
  "unban": "Unban",
  "ban": "Ban",
  "banConfirmTitle": "Ban {{ip}}?",
  "banConfirmMethod": "Method: {{method}}",
  "banConfirmUntilUnban": "Stays banned until you unban it (or fail2ban expiry).",
  "banConfirmDesc": "This IP will be blocked on the host. Confirm it is not a current panel or session address.",
  "wlRemovedUndo": "Removed {{ip}} from the allow list. Undo within 5 seconds.",
  "undo": "Undo",
  "banSelectedConfirmTitle": "Ban {{count}} selected IPs?",
  "banSelectedConfirmDesc": "These addresses will be blocked on the host: {{ips}}",
  "save": "Save",
  "yes": "Yes",
  "no": "No",
  "oneClickSuggested": "Apply suggested preset",
  "stackApply": "Apply protection stack (UFW, fail2ban, preset)",
  "stackApplyDone": "Protection stack apply requested",
  "stackApplyHint": "This enables UFW and applies fail2ban plus the suggested preset. Confirm you will not lock yourself out of a remote panel.",
  "viewPresets": "View presets",
  "suspectIpsCount": "Suspect IPs {{count}}",
  "goBans": "Go to bans",
  "singleEntryPrefix": "Single entry:",
  "singleEntryBody": " ",
  "emergencyNeverAuto": "emergency never auto",
  "writeOnlyBanner": "Write-only: system apply needs EXECUTE=1 and root.",
  "readiness": "Readiness",
  "goTo": "Open",
  "presetGuide": "",
  "active": "Active",
  "recommended": "Suggested",
  "useCarefully": "Caution",
  "preview": "Preview",
  "stackToolsSee": "Stack tools on Stack tab ·",
  "readinessCheck": "Readiness check",
  "automationMasterLabel": "Automation master switch",
  "runOneTick": "Run one tick now",
  "suggestEmergencyBanner": "Score very high — system suggests emergency but will not auto-apply. Confirm on Response tab.",
  "autoPresetDesc": "Auto-switch daily/hardened/under-attack by score. Emergency never auto.",
  "allowDeescalate": "Allow auto de-escalate",
  "autoBanThresholdHint": "soft/normal/aggressive fill thresholds;",
  "sectionMechanism": "③ How it works",
  "lastNotes": "Last: {{notes}}",
  "sectionWeights": "④ Signal weights (0–3)",
  "weightsDesc": "Default 1;",
  "needCfToken": "Needs env CF_API_TOKEN",
  "cfOnEscalate": ". Can call API when escalating to under-attack or manual apply.",
  "ufwOnlyCf": "Under attack: UFW allow only CF ranges (+SSH)",
  "ufwOnlyCfHint": "Resets UFW to Cloudflare IPs only; needs system-change rights.",
  "saveZones": "Save zones",
  "uaNow": "Under Attack now",
  "uaClear": "Clear (→ high)",
  "stackRoleNote": "UFW and fail2ban are tool pages under Protection (not top-level nav). Sidebar keeps this page only.",
  "fwUfwTitle": "Firewall UFW",
  "fwStats": "Port policy · permanent DENY · allow {{allow}} · deny {{deny}}",
  "fwRulesProfiles": "UFW rules & profiles",
  "f2bStats": "Log temp bans · {{jails}} jails · banned {{banned}}",
  "jailsWhitelistPolicy": "Jails · whitelist · policy",
  "divisionTitle": "Division of labour",
  "divisionUfw": "UFW = which ports open, permanent IP deny",
  "divisionF2b": "fail2ban = temp ban after log scan",
  "divisionDefense": "This page = attack orchestration (rate presets + auto-ban + suspects)",
  "autoBanLabel": "Auto-ban",
  "scanOnce": "Scan once",
  "selectedIps": "{{count}} IP(s) selected",
  "banSelected": "Ban selected",
  "suspectIps": "Suspect IPs",
  "selectAll": "Select all",
  "alreadyBanned": "Banned",
  "whitelist": "Whitelist",
  "bansWorkflow": "Response: suspect list → ban/unban. Jail policy, ignoreip, service lifecycle:",
  "f2bTool": "fail2ban tool",
  "noSecondJail": "(no second jail editor here).",
  "autoBanWhitelistTitle": "Auto-ban whitelist",
  "autoBanWhitelistDesc": "Protection auto-ban exemptions (syncs fail2ban ignoreip).",
  "ufwOff": "UFW (off)",
  "ufwOffHint": "UFW is not active — fail2ban is the usable target.",
  "whitelistSyncHint": "{{n}} panel entries · fail2ban ignoreip sync: {{sync}}",
  "whitelistSyncOn": "on",
  "whitelistSyncOff": "off (lists may differ)",
  "ignoreipWhitelist": "ignoreip whitelist",
  "notSetSuggestAdmin": "Not set (add your admin IP)",
  "moreItems": "… {{n}} more · see fail2ban whitelist",
  "add": "Add",
  "manualBanTitle": "Manual ban",
  "methodFollows": "Method follows selection above (fail2ban / UFW)",
  "preferSuspectList": "Usually the suspect list is enough.",
  "threatSignals": "Threat signals",
  "scoreSource": "Score sources · weights tunable",
  "accessAuthSample": "access + auth samples",
  "fullLogsAt": "Full nginx/auth logs:",
  "logCenter": "Log center",
  "colScore": "Score",
  "colHits": "Hits",
  "col429": "429",
  "topIpsTitle": "Top IPs",
  "hitsCount": "{{n}} hits",
  "sampleWindowHint": "Counts are from the current access + auth sample window, not the full log file.",
  "banShort": "Ban",
  "vhostLimits": "Vhost rate limits",
  "eventStream": "Event stream",
  "eventKind": {
    "preset": "Preset",
    "auto_preset": "Auto preset",
    "cloudflare_ua": "Cloudflare",
    "ban": "Ban",
    "unban": "Unban"
  },
  "hours48": "48 hours",
  "geoipDb": "GeoIP database",
  "refreshStatus": "Refresh status",
  "updateDbNow": "Update DB now",
  "geoipSourceHint": "Uses local GeoIP DB by default; optional IPinfo token.",
  "retry": "Retry",
  "loadingGeoip": "Loading GeoIP status…",
  "nextScheduledUpdate": "Next scheduled update: {{at}}",
  "statusNotLoaded": "Status not loaded",
  "load": "Load",
  "accessPolicy": "Access policy",
  "enable": "Enable",
  "freeGranularity": "Free max: country + region + ASN; city optional (default off, lower accuracy). Provider = ASN. Whitelist always exempt. Click chip to remove.",
  "allowListDanger": "Allow-list mode is high risk: public IPs not listed (incl. unknown geo) are blocked. Ensure admin IP is on ban-page whitelist.",
  "dailySchedule": "Daily schedule",
  "cityPolicy": "City policy (low confidence · optional)",
  "useCityAccess": "Use city for access",
  "cityPolicyHint": "Free DB city accuracy is limited",
  "noCitiesYet": "No cities yet",
  "savePolicy": "Save policy",
  "applyNginxSnippet": "Apply Nginx snippet",
  "nginxSnippetHint": "HTTP blocking needs the nginx geoip2 module.",
  "testIp": "Test IP",
  "lookup": "Lookup",
  "plusCountry": "+ country {{v}}",
  "plusRegion": "+ region {{v}}",
  "plusCity": "+ city {{v}}",
  "lastTickPrefix": "· last {{t}}",
  "nextTickPrefix": "· next {{t}}",
  "cannotBanSelf": "Cannot ban {{ip}} — this is the host, your login, or ignoreip",
  "selfIp": "This host",
  "selfHostIp": "Host IP",
  "selfLoginIp": "Your login IP",
  "showZeroScore": "Show 0-score",
  "hideZeroScore": "Hide 0-score",
  "geoDraftOnly": "Policy is off — Save stores a draft only. Nginx will not enforce until you enable it.",
  "geoNeedDb": "GeoIP databases are missing — update the MMDB files first",
  "uaNeedZones": "Set a Cloudflare zone first",
  "provider": "Provider",
  "selectAllCountriesWarn": "Select all countries in block-list mode? That can lock out this host and your login country.",
  "badgeRecommendPreset": "A stronger preset is recommended for the current threat",
  "badgeAutomationOn": "Automation is on",
  "badgeBanCount": "Active bans",
  "badgeGeoOn": "Geo access policy is on",
  "badgeGeoNotReady": "GeoIP database is not ready",
  "badgeIntelSignals": "Signals that currently add score",
  "signalActive": "Active",
  "signalInactive": "Inactive",
  "signalJails": "{{n}} jail(s)",
  "dbReadyHint": "MMDB files are present",
  "dbNotReadyHint": "Download a GeoIP database first",
  "staleHint": "Whether the last successful update is older than 7 days",
  "draftBadge": "Draft",
  "banIsSelf": "This IP matches the current panel source or this host.",
  "banNotSelf": "This IP is not the current panel source.",
  "geoSourceLocal": "Local GeoIP library (sapics + DB-IP)",
  "nginxPreviewHint": "Nginx snippet this preset would write (preview only):"
}
