{
  "username": "Username",
  "password": "Password",
  "login": "Log In",
  "confirm": "Confirm",
  "cancel": "Cancel",
  "close": "Close",
  "save": "Save",
  "logout": "Log Out",
  "create": "Create",
  "add": "Add",
  "remove": "Remove",
  "update": "Update",
  "copy": "Copy",
  "copied": "Copied",
  "more": "more",
  "download": "Download",
  "regenerate": "Regenerate",
  "jsonEditor": "JSON editor",
  "downloadImage": "Download Image",
  "sort": "Sort",
  "remark": "Remark",
  "enable": "Enabled",
  "protocol": "Protocol",
  "search": "Search",
  "filter": "Filter",
  "all": "All",
  "from": "From",
  "to": "To",
  "done": "Done",
  "loading": "Loading...",
  "refresh": "Refresh",
  "clear": "Clear",
  "second": "Second",
  "minute": "Minute",
  "hour": "Hour",
  "day": "Day",
  "check": "Check",
  "indefinite": "Indefinite",
  "unlimited": "Unlimited",
  "none": "None",
  "qrCode": "QR Code",
  "info": "More Information",
  "edit": "Edit",
  "delete": "Delete",
  "reset": "Reset",
  "noData": "Nothing here yet",
  "copySuccess": "Copied successfully",
  "sure": "Sure",
  "encryption": "Encryption",
  "transmission": "Transmission",
  "host": "Host",
  "path": "Path",
  "camouflage": "Obfuscation",
  "status": "Status",
  "enabled": "Enabled",
  "disabled": "Disabled",
  "depleted": "Ended",
  "depletingSoon": "Depleting",
  "offline": "Offline",
  "online": "Online",
  "domainName": "Domain Name",
  "monitor": "Listen IP",
  "certificate": "Digital Certificate",
  "fail": "Failed",
  "comment": "Comment",
  "success": "Success",
  "lastOnline": "Last Online",
  "lastSubFetch": "Last Subscription Fetch",
  "getVersion": "Get Version",
  "install": "Install",
  "clients": "Clients",
  "usage": "Usage",
  "twoFactorCode": "Code",
  "remained": "Remaining",
  "security": "Security",
  "emptyDnsDesc": "No added DNS servers.",
  "emptyFakeDnsDesc": "No added Fake DNS servers.",
  "emptyBalancersDesc": "No added balancers.",
  "somethingWentWrong": "Something went wrong",
  "subscription": {
    "title": "Subscription info",
    "subId": "Subscription ID",
    "email": "Email",
    "status": "Status",
    "downloaded": "Downloaded",
    "uploaded": "Uploaded",
    "expiry": "Expiry",
    "totalQuota": "Total quota",
    "individualLinks": "Individual links",
    "active": "Active",
    "inactive": "Inactive",
    "unlimited": "Unlimited",
    "noExpiry": "No expiry",
    "copyAllConfigs": "Copy All Configs",
    "copyAllConfigsCopied": "All configs copied"
  },
  "menu": {
    "theme": "Theme",
    "dashboard": "Overview",
    "inbounds": "Inbounds",
    "clients": "Clients",
    "groups": "Groups",
    "nodes": "Nodes",
    "hosts": "Hosts",
    "settings": "Panel Settings",
    "xray": "Xray Configs",
    "routing": "Routing",
    "outbounds": "Outbounds",
    "apiDocs": "API Docs",
    "donate": "Donate",
    "docs": "Documentation",
    "openMenu": "Open menu",
    "pinSidebar": "Pin sidebar",
    "unpinSidebar": "Unpin sidebar",
    "subFormats": "Sub Formats"
  },
  "pages": {
    "login": {
      "hello": "Hello",
      "title": "Welcome",
      "loginAgain": "Your session has expired, please log in again",
      "toasts": {
        "invalidFormData": "The input data format is invalid.",
        "emptyUsername": "Username is required",
        "emptyPassword": "Password is required",
        "wrongUsernameOrPassword": "Invalid username or password or two-factor code.",
        "successLogin": "You have successfully logged into your account."
      }
    },
    "index": {
      "cpu": "CPU",
      "swap": "Swap",
      "storage": "Storage",
      "memory": "RAM",
      "xrayStatus": "Xray",
      "stopXray": "Stop",
      "restartXray": "Restart",
      "xraySwitch": "Version",
      "xrayUpdates": "Xray Updates",
      "xraySwitchClickDesk": "Choose carefully, as older versions may not be compatible with current configurations.",
      "updatePanel": "Update Panel",
      "panelUpdateDesc": "This will update 3X-UI itself to the latest release and restart the panel service.",
      "currentPanelVersion": "Current panel version",
      "latestPanelVersion": "Latest panel version",
      "panelUpToDate": "Panel is up to date",
      "devChannel": "Dev channel",
      "devChannelWarning": "Dev builds track every commit on main and aren't stable releases — there is no automatic downgrade.",
      "currentCommit": "Current commit",
      "latestCommit": "Latest commit",
      "updateChannelChanged": "Update channel changed",
      "xrayStatusUnknown": "Unknown",
      "xrayStatusRunning": "Running",
      "xrayStatusStop": "Stopped",
      "xrayStatusError": "Error",
      "systemHistoryTitle": "System History",
      "historyTitleCpu": "CPU Usage",
      "historyTitleMem": "Memory Usage",
      "historyTitleNetwork": "Network Bandwidth",
      "historyTitlePackets": "Network Packets",
      "historyTitleDisk": "Disk I/O",
      "historyTitleOnline": "Online Clients",
      "historyTitleLoad": "System Load Average (1m / 5m / 15m)",
      "historyTitleConnections": "Active Connections (TCP / UDP)",
      "historyTitleDiskUsage": "Disk Space Usage",
      "historyTabBandwidth": "Bandwidth",
      "historyTabPackets": "Packets",
      "historyTabDisk": "Disk I/O",
      "historyTabOnline": "Online",
      "historyTabLoad": "Load",
      "historyTabConnections": "Connections",
      "historyTabDiskUsage": "Disk Usage",
      "xrayMetricsTitle": "Xray Metrics",
      "xrayTitleHeap": "Allocated Heap Memory",
      "xrayTitleSys": "Memory Reserved from OS",
      "xrayTitleObjects": "Live Heap Objects",
      "xrayTitleGcCount": "Completed GC Cycles",
      "xrayTitleGcPause": "GC Pause Duration",
      "xrayTitleObservatory": "Outbound Connection Health",
      "xrayTabHeap": "Heap",
      "xrayTabSys": "Sys",
      "xrayTabObjects": "Objects",
      "xrayTabGcCount": "GC Count",
      "xrayTabGcPause": "GC Pause",
      "xrayTabObservatory": "Observatory",
      "xrayMetricsDisabled": "Xray metrics endpoint not configured",
      "xrayMetricsHint": "Add a top-level metrics block to the xray config with tag metrics_out and listen 127.0.0.1:11111, then restart xray.",
      "xrayObservatoryEmpty": "No observatory data yet",
      "xrayObservatoryHint": "Add an observatory block to the xray config listing the outbound tags to probe, then restart xray.",
      "xrayObservatoryTagPlaceholder": "Select outbound",
      "xrayObservatoryAlive": "Alive",
      "xrayObservatoryDead": "Down",
      "xrayObservatoryLastSeen": "Last seen",
      "xrayObservatoryLastTry": "Last try",
      "connectionCount": "Connection Stats",
      "ipAddresses": "IP Addresses",
      "toggleIpVisibility": "Toggle visibility of the IP",
      "overallSpeed": "Overall Speed",
      "upload": "Upload",
      "download": "Download",
      "sent": "Sent",
      "received": "Received",
      "xraySwitchVersionDialog": "Do you really want to change the Xray version?",
      "xraySwitchVersionDialogDesc": "This will change the Xray version to #version#.",
      "xraySwitchVersionPopover": "Xray updated successfully",
      "panelUpdateDialog": "Do you really want to update the panel?",
      "panelUpdateDialogDesc": "This will update 3X-UI to #version# and restart the panel service.",
      "panelUpdateStartedPopover": "Panel update started",
      "panelUpdateFailedTitle": "Panel update failed",
      "panelUpdateFailedDesc": "The update did not finish successfully. Check the server logs, or run 'x-ui update' from the command line.",
      "panelUpdateUnknownTitle": "Couldn't confirm the update finished",
      "panelUpdateUnknownDesc": "The panel didn't report a result in time. Reload to check the current version, or check the server logs.",
      "geofileUpdateDialog": "Do you really want to update the geofile?",
      "geofileUpdateDialogDesc": "This will update the #filename# file.",
      "geofilesUpdateDialogDesc": "This will update all geofiles.",
      "geofilesUpdateAll": "Update all",
      "geofileUpdatePopover": "Geofile updated successfully",
      "geodataTitle": "Geodata Auto-Update",
      "geodataHint": "Xray downloads these files on schedule and hot-reloads them without a restart. URLs must be HTTPS. Each file must already exist in the bin folder once before Xray can update it.",
      "geodataCron": "Schedule (cron)",
      "geodataOutbound": "Download through outbound (optional)",
      "geodataFile": "File name",
      "geodataAddFile": "Add file",
      "geodataSaveRestart": "Save & Restart Xray",
      "geodataConfirmTitle": "Save geodata settings?",
      "geodataConfirmContent": "This updates the Xray config template and restarts Xray.",
      "geodataInvalidUrl": "Each file needs an HTTPS URL.",
      "geodataInvalidFile": "File names must be plain names like geosite_custom.dat (no paths).",
      "geodataInvalidCron": "Cron must have 5 fields, e.g. 0 4 * * *",
      "geodataEmpty": "No files configured. Reference files in routing rules as ext:geosite_custom.dat:category.",
      "dontRefresh": "Installation is in progress, please do not refresh this page",
      "logs": "Logs",
      "accessLogs": "Access Logs",
      "autoUpdate": "Auto Update",
      "amneziawgLogs": "AmneziaWG Logs",
      "amneziawgHandshake": "Last Handshake",
      "amneziawgInterface": "Interface",
      "amneziawgInbound": "Inbound",
      "amneziawgEndpoint": "Endpoint",
      "amneziawgIdle": "Idle",
      "amneziawgEvents": "Events",
      "amneziawgNoPeers": "No AmneziaWG peers are currently up",
      "amneziawgNoEvents": "No AmneziaWG events recorded yet",
      "config": "Config",
      "backupTitle": "Backup & Restore",
      "exportDatabase": "Back Up",
      "exportDatabaseDesc": "Click to download a .db file containing a backup of your current database to your device. The same file can also be restored into a panel running on PostgreSQL.",
      "importDatabase": "Restore",
      "importDatabaseDesc": "Click to select and upload a .db backup or a migration dump (.dump) from your device to restore your database.",
      "importDatabaseSuccess": "The database has been successfully imported.",
      "importDatabaseError": "An error occurred while importing the database.",
      "readDatabaseError": "An error occurred while reading the database.",
      "getDatabaseError": "An error occurred while retrieving the database.",
      "getConfigError": "An error occurred while retrieving the config file.",
      "backupPostgresNote": "This panel runs on PostgreSQL. Back Up downloads a pg_dump archive (.dump) and Restore loads it back with pg_restore. Restore also accepts a SQLite database (.db) or a SQLite migration dump and imports its data into PostgreSQL. The server needs the PostgreSQL client tools (pg_dump and pg_restore) installed.",
      "exportDatabasePgDesc": "Click to download a PostgreSQL dump (.dump) of your current database to your device.",
      "importDatabasePgDesc": "Click to select and upload a PostgreSQL backup (.dump), a SQLite database (.db), or a SQLite migration dump to restore your database. This replaces all current data.",
      "migrationDownload": "Download Migration",
      "migrationDownloadPgDesc": "Click to download a .db SQLite database built from your PostgreSQL data, ready to run this panel on SQLite.",
      "avg": "avg",
      "peak": "peak",
      "free": "free",
      "openSockets": "open sockets",
      "throughputSub": "Interface total",
      "avgWindow": "Avg over window",
      "healthWarm": "{list} — running warm",
      "healthCritical": "{list} — critical",
      "panel": "Panel",
      "threads": "Threads",
      "uptime": "Uptime",
      "logLevelDebug": "Debug",
      "logLevelInfo": "Info",
      "logLevelNotice": "Notice",
      "logLevelWarning": "Warning",
      "logLevelError": "Error",
      "accessDirect": "DIRECT",
      "accessBlocked": "BLOCKED",
      "accessProxy": "PROXY",
      "importKeepHostSettings": "Keep this machine's settings",
      "importKeepHostSettingsDesc": "Keeps this panel's listen addresses, ports, base path, certificates and node identity instead of taking them from the uploaded file."
    },
    "inbounds": {
      "totalDownUp": "Total Sent/Received",
      "totalUsage": "Total Usage",
      "inboundCount": "Total Inbounds",
      "operate": "Menu",
      "enable": "Enabled",
      "remark": "Remark",
      "node": "Node",
      "deployTo": "Deploy to",
      "localPanel": "Local panel",
      "fallbacks": {
        "title": "Fallbacks",
        "empty": "No fallbacks yet",
        "add": "Add fallback",
        "pickInbound": "Pick an inbound",
        "matchAny": "any",
        "destPlaceholder": "auto (child listen:port)",
        "needsTls": "Fallbacks become available once Security is set to TLS or Reality on the Security tab (VLESS/Trojan over RAW only)."
      },
      "protocol": "Protocol",
      "port": "Port",
      "portMap": "Port Mapping",
      "traffic": "Traffic",
      "speed": "Speed",
      "expireDate": "Duration",
      "createdAt": "Created",
      "updatedAt": "Updated",
      "resetTraffic": "Reset Traffic",
      "addInbound": "Add Inbound",
      "generalActions": "General Actions",
      "modifyInbound": "Modify Inbound",
      "deleteConfirmTitle": "Delete inbound \"{remark}\"?",
      "deleteConfirmContent": "This removes the inbound and all its clients. This cannot be undone.",
      "resetConfirmTitle": "Reset traffic for \"{remark}\"?",
      "resetConfirmContent": "Resets up/down counters to 0 for this inbound.",
      "selectedCount": "{count} selected",
      "selectAll": "Select all",
      "bulkDeleteConfirmTitle": "Delete {count} inbounds?",
      "bulkDeleteConfirmContent": "This removes the selected inbounds and all their clients. This cannot be undone.",
      "cloneConfirmTitle": "Clone inbound \"{remark}\"?",
      "cloneConfirmContent": "Creates a copy with a new port and an empty client list.",
      "delAllClients": "Delete All Clients",
      "delAllClientsConfirmTitle": "Delete all {count} clients from \"{remark}\"?",
      "delAllClientsConfirmContent": "This removes every client from this inbound and drops their traffic records. The inbound itself is kept. This cannot be undone.",
      "attachClients": "Attach Clients To…",
      "addClientsToGroup": "Add Clients To Group…",
      "attachClientsTitle": "Attach clients from \"{remark}\"",
      "attachClientsDesc": "Attaches the same {count} clients (same UUID/password and shared traffic) to the selected inbound(s). They stay on this inbound too.",
      "attachClientsTargets": "Target inbounds",
      "attachClientsNoTargets": "No other compatible inbounds available to attach to.",
      "attachClientsResult": "Attached {attached}, skipped {skipped}.",
      "attachClientsResultMixed": "Attached {attached}, skipped {skipped}, errors {errors}.",
      "attachClientsSelectLabel": "Clients to attach",
      "attachClientsSearchPlaceholder": "Search email or comment",
      "attachClientsStatusDisabled": "Disabled",
      "attachClientsSelectedCount": "{selected} of {total} selected",
      "attachExistingClients": "Attach Existing Clients…",
      "attachExistingTitle": "Attach existing clients to \"{remark}\"",
      "attachExistingDesc": "Attaches existing clients ({count} available) to this inbound — same UUID/password and shared traffic. Clients already on it are skipped.",
      "attachExistingNoClients": "No clients exist yet. Create clients first, then attach them here.",
      "attachExistingStatusAttached": "Already attached",
      "detachClients": "Detach Clients",
      "detachClientsTitle": "Detach clients of \"{remark}\"",
      "detachClientsDesc": "Removes the selected client(s) from this inbound only. Client records themselves are kept (use Delete to remove fully). Source has {count} clients in total.",
      "detachClientsResult": "Detached {detached}, skipped {skipped}.",
      "detachClientsResultMixed": "Detached {detached}, skipped {skipped}, errors {errors}.",
      "detachClientsSelectLabel": "Clients to detach",
      "exportLinksTitle": "Export inbound links",
      "exportSubsTitle": "Export subscription links",
      "exportAllLinksTitle": "Export all inbound links",
      "exportAllSubsTitle": "Export all subscription links",
      "exportAllLinksFileName": "All-Inbounds",
      "exportAllSubsFileName": "All-Inbounds-Subs",
      "inboundJsonTitle": "Inbound JSON",
      "resetTrafficContent": "Are you sure you want to reset traffic?",
      "copyLink": "Copy URL",
      "address": "Address",
      "network": "Network",
      "destinationPort": "Destination Port",
      "targetAddress": "Target Address",
      "monitorDesc": "Leave blank to listen on all IPs",
      "meansNoLimit": "= Unlimited. (unit: GB)",
      "totalFlow": "Total Flow",
      "leaveBlankToNeverExpire": "Leave blank to never expire",
      "certificatePath": "File Path",
      "certificateContent": "File Content",
      "publicKey": "Public Key",
      "privatekey": "Private Key",
      "client": "Client",
      "export": "Export All URLs",
      "clone": "Clone",
      "resetAllTraffic": "Reset Traffic for All Inbounds",
      "resetAllTrafficTitle": "Reset Traffic for All Inbounds",
      "resetAllTrafficContent": "Are you sure you want to reset the traffic of all inbounds?",
      "email": "Email",
      "IPLimit": "IP Limit",
      "IPLimitlog": "IP Log",
      "IPLimitlogclear": "Clear the Log",
      "setDefaultCert": "Set Cert from Panel",
      "setDefaultCertEmpty": "No certificate is configured for the panel. Set one under Settings first.",
      "streamTab": "Stream",
      "securityTab": "Security",
      "sniffingTab": "Sniffing",
      "sniffingMetadataOnly": "Metadata only",
      "sniffingRouteOnly": "Route only",
      "sniffingIpsExcluded": "IPs excluded",
      "sniffingDomainsExcluded": "Domains excluded",
      "decryption": "Decryption",
      "encryption": "Encryption",
      "vlessAuthX25519": "X25519 (native)",
      "vlessAuthMlkem768": "ML-KEM-768 (native)",
      "vlessAuthX25519Xorpub": "X25519 (xorpub)",
      "vlessAuthX25519Random": "X25519 (random)",
      "vlessAuthMlkem768Xorpub": "ML-KEM-768 (xorpub)",
      "vlessAuthMlkem768Random": "ML-KEM-768 (random)",
      "vlessAuthCustom": "Custom",
      "vlessAuthSelected": "Selected: {auth}",
      "vlessAuthGenerate": "Generate keys",
      "vlessAuthGenerateButton": "Generate",
      "advanced": {
        "title": "Inbound JSON sections",
        "subtitle": "Full inbound JSON and focused editors for settings, sniffing, and streamSettings.",
        "all": "All",
        "allHelp": "Full inbound object with all fields in one editor.",
        "settings": "Settings",
        "settingsHelp": "Xray settings block wrapper:",
        "sniffing": "Sniffing",
        "sniffingHelp": "Xray sniffing block wrapper:",
        "stream": "Stream",
        "streamHelp": "Xray stream block wrapper:"
      },
      "subSortIndex": "Sub order",
      "inboundInfo": "Inbound Information",
      "exportInbound": "Export Inbound",
      "import": "Import",
      "importInbound": "Import an Inbound",
      "periodicTrafficResetTitle": "Traffic Reset",
      "periodicTrafficResetDay": "Monthly reset day",
      "periodicTrafficReset": {
        "never": "Never",
        "daily": "Daily",
        "weekly": "Weekly",
        "monthly": "Monthly",
        "hourly": "Hourly"
      },
      "toasts": {
        "obtain": "Obtain",
        "updateSuccess": "The update was successful.",
        "logCleanSuccess": "The log has been cleared.",
        "inboundUpdateSuccess": "Inbound has been successfully updated.",
        "inboundCreateSuccess": "Inbound has been successfully created.",
        "bulkDeleted": "{count} inbounds deleted",
        "bulkDeletedMixed": "{ok} deleted, {failed} failed",
        "clonedMany": "{count} inbounds cloned",
        "clonedMixed": "{ok} cloned, {failed} failed",
        "inboundDeleteSuccess": "Inbound has been successfully deleted.",
        "inboundClientAddSuccess": "Inbound client(s) have been added.",
        "inboundClientDeleteSuccess": "Inbound client has been deleted.",
        "inboundClientUpdateSuccess": "Inbound client has been updated.",
        "savedNodeOfflineWillSync": "Saved locally. A backing node is offline or disabled — the change will sync once it reconnects.",
        "resetAllClientTrafficSuccess": "Traffic for all clients has been reset.",
        "resetAllTrafficSuccess": "All traffic has been reset.",
        "resetInboundClientTrafficSuccess": "Traffic has been reset.",
        "resetInboundTrafficSuccess": "Inbound traffic has been reset.",
        "trafficGetError": "Error getting traffic.",
        "getNewX25519CertError": "Error while obtaining the X25519 certificate.",
        "getNewmldsa65Error": "Error while obtaining mldsa65.",
        "getNewVlessEncError": "Error while obtaining VlessEnc.",
        "scanRealityTargetError": "Failed to scan REALITY target.",
        "scanRealityTargetFeasible": "Target is feasible — filled target and SNI.",
        "scanRealityTargetNotFeasible": "Target is reachable but not feasible for REALITY.",
        "scanRealityTargetPrivate": "Target is reachable but sits on a private/local network.",
        "invalidClientField": "Client {client}: {field} — {reason}",
        "invalidField": "{field} — {reason}",
        "moreIssues": "{message}  (+{count} more)"
      },
      "form": {
        "moveUp": "Move up",
        "moveDown": "Move down",
        "addAll": "Add all",
        "addAllFallbackTooltip": "Add a fallback row for every eligible inbound not yet wired up",
        "peers": "Peers",
        "addPeer": "Add peer",
        "keepAlive": "Keep-alive",
        "autoSystemRoutesTooltip": "Windows-only. CIDRs added to the system routing table automatically so matching traffic goes through TUN.",
        "autoOutboundsInterface": "Auto outbounds interface",
        "autoOutboundsInterfaceTooltip": "Physical interface for outbound traffic. Use 'auto' to detect; auto-enabled when Auto system routes is set.",
        "rewriteAddress": "Rewrite address",
        "rewritePort": "Rewrite port",
        "allowedNetwork": "Allowed network",
        "followRedirect": "Follow redirect",
        "accounts": "Accounts",
        "allowTransparent": "Allow transparent",
        "encryptionMethod": "Encryption method",
        "fakeTlsDomain": "FakeTLS domain (SNI)",
        "mtprotoSecret": "Secret",
        "mtgDomainFrontingIp": "Domain fronting IP",
        "mtgDomainFrontingPort": "Domain fronting port",
        "mtgDomainFrontingProxyProtocol": "Domain fronting PROXY protocol",
        "mtgDomainFrontingHint": "Where mtg sends non-Telegram traffic — e.g. your NGINX fake site. Leave the IP empty to use the FakeTLS domain via DNS; default port is 443.",
        "mtgProxyProtocolListener": "Accept PROXY protocol (listener)",
        "mtgPreferIp": "IP preference",
        "mtgDebug": "Debug logging",
        "mtgRouteThroughXray": "Route through Xray",
        "mtgRouteThroughXrayHint": "Send this proxy's Telegram traffic through Xray so it follows your routing rules. The mtg sidecar dials out via a loopback SOCKS bridge tagged with this inbound's tag; reference that tag in the Routing tab for advanced rules.",
        "mtgRouteOutbound": "Outbound",
        "mtgRouteOutboundHint": "Optional. Force Telegram traffic out through this outbound (or balancer). Leave empty to let your routing rules decide.",
        "mtgRouteOutboundPlaceholder": "Use routing rules",
        "mtprotoFakeTlsDomainHint": "Default FakeTLS domain used to generate a new client's secret. Each client can front its own domain.",
        "mtgThrottleMaxConnections": "Max connections",
        "mtgThrottleMaxConnectionsHint": "Cap concurrent connections across all users with a fair-share limit. 0 disables throttling.",
        "mtgAdTagInvalid": "Ad-tag must be exactly 32 hexadecimal characters.",
        "mtgPublicIpv4": "Public IPv4",
        "mtgPublicIpv6": "Public IPv6",
        "mtgPublicIpHint": "This server's reachable public address, used by the ad-tag middle proxy. Leave blank to let mtg auto-detect it.",
        "visionTestseed": "Vision testseed",
        "version": "Version",
        "udpIdleTimeout": "UDP idle timeout (s)",
        "masquerade": "Masquerade",
        "type": "Type",
        "upstreamUrl": "Upstream URL",
        "rewriteHost": "Rewrite Host",
        "skipTlsVerify": "Skip TLS verify",
        "directory": "Directory",
        "statusCode": "Status code",
        "body": "Body",
        "headers": "Headers",
        "proxyProtocol": "Proxy Protocol",
        "requestVersion": "Request version",
        "requestMethod": "Request method",
        "requestPath": "Request path",
        "requestHeaders": "Request headers",
        "responseVersion": "Response version",
        "responseStatus": "Response status",
        "responseReason": "Response reason",
        "responseHeaders": "Response headers",
        "heartbeatPeriod": "Heartbeat Period",
        "serviceName": "Service Name",
        "authority": "Authority",
        "multiMode": "Multi Mode",
        "maxBufferedUpload": "Max Buffered Upload",
        "maxUploadSize": "Max Upload Size (Byte)",
        "streamUpServer": "Stream-Up Server",
        "serverMaxHeaderBytes": "Server Max Header Bytes",
        "paddingBytes": "Padding Bytes",
        "uplinkHttpMethod": "Uplink HTTP Method",
        "paddingObfsMode": "Padding Obfs Mode",
        "paddingKey": "Padding Key",
        "paddingHeader": "Padding Header",
        "paddingPlacement": "Padding Placement",
        "paddingMethod": "Padding Method",
        "sessionPlacement": "Session Placement",
        "sessionKey": "Session Key",
        "sessionIDTable": "Session ID Table",
        "sessionIDTableHint": "Charset for generated session IDs: a predefined name (ALPHABET, Base62, hex, number, …) or a literal ASCII string. Leave empty for xray-core's default.",
        "sessionIDLength": "Session ID Length",
        "sessionIDLengthHint": "Length or range (e.g. 8-16) of generated session IDs. Only used when a Session ID Table is set; minimum must be greater than 0.",
        "sequencePlacement": "Sequence Placement",
        "sequenceKey": "Sequence Key",
        "uplinkDataPlacement": "Uplink Data Placement",
        "uplinkDataKey": "Uplink Data Key",
        "noSseHeader": "No SSE Header",
        "ttiMs": "TTI (ms)",
        "uplinkMbps": "Uplink (MB/s)",
        "downlinkMbps": "Downlink (MB/s)",
        "cwndMultiplier": "CWND Multiplier",
        "maxSendingWindow": "Max Sending Window",
        "externalProxy": "External Proxy",
        "forceTls": "Force TLS",
        "fingerprint": "Fingerprint",
        "defaultOption": "Default",
        "routeMark": "Route Mark",
        "tcpKeepAliveInterval": "TCP Keep Alive Interval",
        "tcpKeepAliveIdle": "TCP Keep Alive Idle",
        "tcpMaxSeg": "TCP Max Seg",
        "tcpUserTimeout": "TCP User Timeout",
        "tcpWindowClamp": "TCP Window Clamp",
        "tcpWindowClampHint": "Leave 0 to use the OS default. Non-zero values cap the advertised TCP receive window; values like 600 (from the Xray docs example) can collapse throughput on high-latency links.",
        "tcpFastOpen": "TCP Fast Open",
        "multipathTcp": "Multipath TCP",
        "penetrate": "Penetrate",
        "v6Only": "V6 Only",
        "tcpCongestion": "TCP Congestion",
        "dialerProxy": "Dialer Proxy",
        "trustedXForwardedFor": "Trusted X-Forwarded-For",
        "trustedXForwardedForHint": "Trust this request header for the real client IP (e.g. CF-Connecting-IP behind Cloudflare's CDN). Only honored on WebSocket, HTTPUpgrade, XHTTP and gRPC transports. Leave empty to ignore forwarded headers.",
        "proxyProtocolHint": "Accept the PROXY-protocol header to learn the real client IP from an upstream L4 tunnel or relay (HAProxy, gost, nginx-stream, Xray dokodemo-door) or Cloudflare Spectrum. The upstream MUST emit PROXY protocol. Works on TCP, WebSocket, HTTPUpgrade and gRPC; not on mKCP.",
        "realClientIp": "Real client IP",
        "realClientIpHint": "Capture the visitor's real IP when traffic reaches this inbound through a CDN or relay, instead of recording the intermediary's address. Pick a preset to fill the matching sockopt fields below. These fields are never sent to clients in subscriptions.",
        "realClientIpPresetOff": "Off / direct",
        "realClientIpPresetCloudflare": "Cloudflare CDN",
        "realClientIpPresetProxyProtocol": "L4 relay / Spectrum (PROXY)",
        "realClientIpTrustedHeaderTransportWarn": "Trusted X-Forwarded-For is only honored on WebSocket, HTTPUpgrade and XHTTP. On the current transport this header is ignored.",
        "realClientIpProxyProtocolTransportWarn": "PROXY protocol is not supported on this transport (mKCP). Use TCP/RAW, WebSocket, HTTPUpgrade, gRPC or XHTTP.",
        "addressPortStrategy": "Address+port strategy",
        "tryDelayMs": "Try delay (ms)",
        "prioritizeIPv6": "Prioritize IPv6",
        "interleave": "Interleave",
        "maxConcurrentTry": "Max concurrent try",
        "customSockopt": "Custom sockopt",
        "addCustomOption": "Add custom option",
        "serverNameIndication": "Server Name Indication",
        "cipherSuites": "Cipher Suites",
        "autoOption": "Auto",
        "minMaxVersion": "Min/Max Version",
        "rejectUnknownSni": "Reject Unknown SNI",
        "disableSystemRoot": "Disable System Root",
        "sessionResumption": "Session Resumption",
        "oneTimeLoading": "One Time Loading",
        "usageOption": "Usage Option",
        "buildChain": "Build Chain",
        "echKey": "ECH key",
        "echConfig": "ECH config",
        "echSockopt": "ECH Sockopt",
        "echSockoptTip": "Socket options for the connection Xray uses to fetch the ECH config list (e.g. route the lookup through a dialerProxy outbound). Leave disabled to use defaults.",
        "curvePreferences": "Curve Preferences",
        "curvePreferencesTip": "Restrict the TLS key-exchange curves the server offers, in preference order (e.g. X25519MLKEM768, X25519). Leave empty to use Xray-core defaults.",
        "masterKeyLog": "Master Key Log",
        "masterKeyLogTip": "Path to write TLS master keys (SSLKEYLOGFILE format) for debugging with Wireshark. Leave empty in production — it lets anyone with the file decrypt traffic.",
        "verifyPeerCertByName": "Verify Peer Cert By Name",
        "verifyPeerCertByNameTip": "Tell clients to verify the server certificate against this name instead of the SNI. Comma-separated names. Panel-only — included in share links (vcn). The modern replacement for allowInsecure, which Xray removed after 2026-06-01.",
        "pinnedPeerCertSha256": "Pinned Peer Cert SHA-256",
        "pinnedPeerCertSha256Tip": "SHA-256 hash(es) of the peer certificate as a hex string (e.g. e8e2d3…), comma-separated. Panel-only — not written to the server's xray config, but included in share links so clients can pin the certificate.",
        "pinnedPeerCertSha256Placeholder": "hex hash(es), comma-separated",
        "pinFromCert": "Fill from this inbound's certificate",
        "pinFromRemote": "Fetch the hash by pinging the SNI (xray tls ping)",
        "pinFromRemoteNoSni": "Set the SNI (serverName) first to ping the remote certificate.",
        "pinFromRemoteFailed": "Could not fetch the remote certificate hash.",
        "getNewEchCert": "Get New ECH Cert",
        "show": "Show",
        "xver": "Xver",
        "target": "Target",
        "maxTimeDiff": "Max Time Diff (ms)",
        "minClientVer": "Min Client Ver",
        "maxClientVer": "Max Client Ver",
        "minClientVerHint": "Empty does not mean unrestricted: Xray-core then enforces the built-in minimum of the core build you run (26.3.27 in current releases) and rejects clients that report an older version — including third-party cores such as Mihomo and sing-box. Set 1.0.0 to accept them, at the cost of admitting outdated TLS fingerprints.",
        "maxClientVerHint": "Empty means no upper limit. If set, it must not be lower than the effective minimum — Min Client Ver, or Xray-core's built-in minimum when that field is empty — otherwise every client is rejected.",
        "clientVerInvalid": "Client version must be up to three dot-separated numbers, each 0-255 (e.g. 26.3.27)",
        "maxClientVerBelowMin": "Max Client Ver must not be lower than Min Client Ver",
        "shortIds": "Short IDs",
        "realityTargetHint": "Required. Must include a port (e.g. example.com:443). Without a port Xray-core refuses to start.",
        "realityTargetRequired": "REALITY target is required",
        "realityTargetNeedsPort": "REALITY target must include a port (e.g. example.com:443)",
        "realityTargetInvalidPort": "REALITY target has an invalid port",
        "scan": "Scan",
        "findTargets": "Find Targets",
        "scanModalTitle": "REALITY Target Scanner",
        "scanModalDesc": "Validate a domain, or scan an IP / CIDR range to discover new REALITY targets from their certificates. Leave the box empty to probe common candidates.",
        "scanDiscoverPlaceholder": "IP, CIDR, or domain — leave empty for common candidates",
        "scanStatus": "Status",
        "scanFeasible": "Feasible",
        "scanNotFeasible": "Not feasible",
        "scanCurve": "Key Exchange",
        "scanCert": "Certificate",
        "scanCertInvalid": "Not trusted",
        "scanCertExpiry": "Certificate expires",
        "scanSniUsed": "SNI used",
        "scanPrivateNote": "Checked over a private/local network — this address is not reachable from the internet.",
        "scanPrivateConfirmTitle": "Target on a local network",
        "scanPrivateConfirmContent": "\"{target}\" resolves to a private or loopback address. The check will bypass the panel SSRF guard for this probe only. Continue?",
        "scanLatency": "Latency",
        "scanUse": "Use",
        "scanRescan": "Rescan",
        "spiderX": "SpiderX",
        "spiderXHint": "Per-client seed — the panel derives a unique spx path for each client from it; regenerate to rotate everyone's paths",
        "getNewCert": "Get New Cert",
        "mldsa65Seed": "mldsa65 Seed",
        "mldsa65Verify": "mldsa65 Verify",
        "getNewSeed": "Get New Seed",
        "limitFallback": "Limit Fallback",
        "limitFallbackUpload": "Limit Fallback Upload",
        "limitFallbackDownload": "Limit Fallback Download",
        "afterBytes": "After Bytes",
        "afterBytesTip": "Let the fallback run at full speed for this many bytes, then start throttling. 0 = throttle from the first byte.",
        "bytesPerSec": "Bytes Per Sec",
        "bytesPerSecTip": "Speed cap (bytes/sec) applied to fallback traffic after the threshold, so probes can't use your server as free bandwidth to the target. 0 = no limit (disables this direction).",
        "burstBytesPerSec": "Burst Bytes Per Sec",
        "burstBytesPerSecTip": "Allowance for short bursts above the steady rate (token-bucket size). If lower than Bytes Per Sec it is raised to match.",
        "listenHelp": "You can also enter a Unix socket path (e.g. /run/xray/in.sock), or an abstract socket name prefixed with @ (e.g. @xray/in.sock), to listen on a socket instead of a TCP port — set Port to 0 in that case.",
        "shareAddrStrategy": "Share address strategy",
        "shareAddrStrategyHelp": "Controls which address is written into exported share links, QR codes, and subscription output.",
        "shareAddr": "Custom share address",
        "shareAddrHelp": "Used only when the share address strategy is Custom. Enter a host or IP without a scheme or port.",
        "subSortIndex": "Subscription sort order",
        "subSortIndexHelp": "Position of this inbound's links in subscription output (sub page and client apps). Lower values come first; equal values keep creation order. Does not affect the panel inbound list.",
        "disableFlow": "Disable XTLS flow",
        "disableFlowHelp": "Opt this inbound out of automatic xtls-rprx-vision injection, even when its transport is flow-capable (e.g. a tunneled XHTTP inbound with VLESS encryption). Clients keep Vision on your other capable inbounds in the same subscription. VLESS only.",
        "shareAddrStrategyOptions": {
          "node": "Node address",
          "listen": "Inbound listen",
          "custom": "Custom"
        }
      },
      "info": {
        "mode": "Mode",
        "grpcServiceName": "grpc serviceName",
        "grpcMultiMode": "grpc multiMode",
        "interfaceName": "Interface name",
        "mtu": "MTU",
        "gateway": "Gateway",
        "dns": "DNS",
        "outboundsInterface": "Outbounds interface",
        "autoSystemRoutes": "Auto system routes",
        "followRedirect": "FollowRedirect",
        "auth": "Auth",
        "noKernelTun": "No-kernel TUN",
        "keepAlive": "Keep alive",
        "peerNumber": "Peer {n}",
        "peerNumberConfig": "Peer {n} config"
      },
      "sniffingDestOverride": "Destination override"
    },
    "clients": {
      "tabBasics": "Basics",
      "tabCredentials": "Credentials",
      "tabLinks": "Links",
      "wireguardConfig": "WireGuard config",
      "config": "Config",
      "linksHint": "Add third-party share links and remote subscription URLs to include in this client's subscription.",
      "addExternalLink": "Add External Link",
      "addExternalSubscription": "Add External Subscription",
      "noExternalLinks": "No external links yet.",
      "noExternalSubscriptions": "No external subscriptions yet.",
      "namePrefix": "Name prefix",
      "lastFetchAt": "Last fetch",
      "lastFetchError": "Fetch error",
      "neverFetched": "Not fetched yet",
      "submitEdit": "Save Changes",
      "clientCount": "Number of Clients",
      "bulk": "Add Bulk",
      "selectAll": "Select all",
      "clearAll": "Clear all",
      "method": "Method",
      "first": "First",
      "last": "Last",
      "ipLog": "IP Log",
      "prefix": "Prefix",
      "postfix": "Postfix",
      "delayedStart": "Start After First Use",
      "expireDays": "Duration (days)",
      "renew": "Auto Renew",
      "renewDesc": "Auto-renewal after expiration. (0 = disable)(unit: day)",
      "renewDays": "Auto Renew (days)",
      "searchPlaceholder": "Search email, comment, sub ID, UUID, password, auth, Telegram ID…",
      "filterTitle": "Filter clients",
      "clearAllFilters": "Clear all",
      "filters": {
        "nodes": "Nodes",
        "localPanel": "Local (this panel)"
      },
      "showingCount": "Showing {shown} of {total}",
      "sortOldest": "Oldest first",
      "sortNewest": "Newest first",
      "sortRecentlyUpdated": "Recently updated",
      "sortRecentlyOnline": "Recently online",
      "sortEmailAZ": "Email A→Z",
      "sortEmailZA": "Email Z→A",
      "sortMostTraffic": "Most traffic",
      "sortHighestRemaining": "Highest remaining",
      "sortExpiringSoonest": "Expiring soonest",
      "has": "Has",
      "hasNot": "Doesn't have",
      "actions": "Actions",
      "totalGB": "Traffic Limit (GB)",
      "totalGBDesc": "Data quota for this client. 0 = unlimited.",
      "expiryTime": "Expiry",
      "addClients": "Add Clients",
      "limitIp": "IP Limit",
      "limitIpDesc": "Maximum simultaneous IPs. 0 = unlimited.",
      "limitHwid": "HWID Limit",
      "limitHwidDesc": "Maximum registered devices for subscription requests. 0 = unlimited.",
      "hwidLog": "HWID Devices",
      "hwidDevice": "Registered device",
      "noHwids": "No HWID devices yet",
      "firstSeen": "First seen",
      "lastSeen": "Last seen",
      "deleteHwid": "Remove device",
      "deleteHwidConfirm": "Remove this device? It will need to re-register on its next subscription fetch.",
      "hwidDeleted": "Device removed.",
      "clearHwidsConfirm": "Remove all registered devices? Every device will need to re-register on its next subscription fetch.",
      "limitIpFail2banMissing": "Fail2ban is not installed, so the IP limit cannot be enforced. Install Fail2ban from the x-ui bash menu to enable this option.",
      "limitIpFail2banWindows": "Fail2ban is not available on Windows, so the IP limit cannot be enforced.",
      "limitIpDisabled": "The IP limit feature is disabled on this server.",
      "password": "Password",
      "passwordDesc": "Only used by Trojan and Shadowsocks clients; ignored for VLESS, VMess, Hysteria, and WireGuard.",
      "subId": "Subscription ID",
      "online": "Online",
      "email": "Email",
      "emailInvalidChars": "Email cannot contain spaces, '/', '\\', or control characters",
      "subIdInvalidChars": "Subscription ID cannot contain spaces, '/', '\\', or control characters",
      "group": "Group",
      "groupDesc": "Logical label used to bucket related clients (e.g. team, customer, region). Filterable from the toolbar.",
      "groupPlaceholder": "e.g. customer-a",
      "comment": "Comment",
      "traffic": "Traffic",
      "speed": "Speed",
      "offline": "Offline",
      "addClient": "Add Client",
      "qrCode": "QR Code",
      "clientInfo": "Client Information",
      "editClient": "Edit Client",
      "client": "Client",
      "enabled": "Enabled",
      "remaining": "Remaining",
      "duration": "Duration",
      "attachedInbounds": "Attached inbounds",
      "selectInbound": "Select one or more inbounds",
      "selectAllInbounds": "Select all",
      "clearAllInbounds": "Clear all",
      "noSubId": "This client has no subId, no shareable link.",
      "noLinks": "No shareable links — attach this client to a protocol-capable inbound first.",
      "link": "Link",
      "resetNotPossible": "Attach this client to an inbound first.",
      "resetAllTraffics": "Reset all client traffic",
      "resetAllTrafficsTitle": "Reset all client traffic?",
      "resetAllTrafficsContent": "Every client's up/down counter drops to zero. Quotas and expiry are not affected. This cannot be undone.",
      "deleteConfirmTitle": "Delete client {email}?",
      "deleteConfirmContent": "This removes the client from every attached inbound and drops its traffic record. This cannot be undone.",
      "adjustSelected": "Adjust ({count})",
      "subLinksSelected": "Sub links ({count})",
      "addToGroupTitle": "Add {count} client(s) to a group",
      "addToGroupTooltip": "Pick an existing group or type a new name. Use the Ungroup action to remove clients from their current group.",
      "groupName": "Group name",
      "addToGroupSuccessToast": "Added {count} client(s) to {group}",
      "ungroupSuccessToast": "Cleared group from {count} client(s)",
      "ungroup": "Ungroup",
      "ungroupConfirmTitle": "Remove {count} client(s) from their group?",
      "ungroupConfirmContent": "Clears the group label on each selected client. Clients themselves are kept (use Delete to remove them entirely).",
      "addToGroup": "Add to group",
      "attach": "Attach",
      "adjust": "Adjust",
      "subLinks": "Sub links",
      "enable": "Enable",
      "disable": "Disable",
      "bulkEnableConfirmTitle": "Enable {count} clients?",
      "bulkEnableConfirmContent": "Enables each selected client on every attached inbound. Clients whose quota is exhausted or whose expiry has passed will be disabled again automatically.",
      "bulkDisableConfirmTitle": "Disable {count} clients?",
      "bulkDisableConfirmContent": "Disables each selected client on every attached inbound. They lose access immediately but their records and traffic are kept.",
      "selectedCount": "{count} selected",
      "attachToInboundsTitle": "Attach {count} client(s) to inbound(s)",
      "attachToInboundsDesc": "Attaches the selected {count} client(s) (same UUID/password and shared traffic) to the chosen inbound(s). They keep their existing attachments too.",
      "attachToInboundsTargets": "Target inbounds",
      "attachToInboundsNoTargets": "No multi-user inbounds available to attach to.",
      "detach": "Detach",
      "detachFromInboundsTitle": "Detach {count} client(s) from inbound(s)",
      "detachFromInboundsDesc": "Removes the selected {count} client(s) from the chosen inbound(s). Pairs where the client wasn't attached are silently skipped. Client records are kept (use Delete to remove fully).",
      "detachFromInboundsTargets": "Inbounds to detach from",
      "detachFromInboundsNoTargets": "No multi-user inbounds available.",
      "detachFromInboundsResult": "Detached {detached}, skipped {skipped}.",
      "detachFromInboundsResultMixed": "Detached {detached}, skipped {skipped}, errors {errors}.",
      "subLinksTitle": "Sub links ({count})",
      "subLinkColumn": "Subscription URL",
      "subJsonLinkColumn": "Subscription JSON URL",
      "subLinksCopyAll": "Copy all",
      "subLinksCopiedAll": "Copied {count} link(s)",
      "subLinksEmpty": "None of the selected clients have a subscription ID.",
      "subLinksDisabled": "Subscription service is disabled.",
      "subLinksDisabledHint": "Enable subscription in Panel Settings → Subscription to generate links.",
      "bulkDeleteConfirmTitle": "Delete {count} clients?",
      "bulkDeleteConfirmContent": "Each selected client is removed from every attached inbound and its traffic record is dropped. This cannot be undone.",
      "bulkAdjustTitle": "Adjust {count} clients",
      "bulkAdjustHint": "Positive values extend, negative values reduce. Clients with unlimited expiry or traffic are skipped for that field.",
      "bulkAdjustNothing": "Set days, traffic, or flow before applying.",
      "addDays": "Add days",
      "addTrafficGB": "Add traffic (GB)",
      "bulkFlow": "Set flow",
      "bulkFlowNoChange": "No change",
      "bulkFlowDisable": "Disable (clear flow)",
      "delDepleted": "Delete depleted",
      "delDepletedConfirmTitle": "Delete depleted clients?",
      "delDepletedConfirmContent": "Removes every client whose traffic quota is exhausted or whose expiry has passed. This cannot be undone.",
      "exportClients": "Export clients",
      "importClients": "Import clients",
      "import": "Import",
      "delOrphans": "Delete unattached clients",
      "delOrphansConfirmTitle": "Delete clients without an inbound?",
      "delOrphansConfirmContent": "Removes every client that is not attached to any inbound, along with its traffic record. This cannot be undone.",
      "auth": "Auth",
      "hysteriaAuth": "Hysteria Auth",
      "hysteriaAuthDesc": "Credential used only by Hysteria clients. Trojan and Shadowsocks use the Password field instead.",
      "uuid": "UUID",
      "flow": "Flow",
      "vmessSecurity": "VMess Security",
      "wireguardPrivateKey": "WireGuard Private Key",
      "wireguardPublicKey": "WireGuard Public Key",
      "wireguardPreSharedKey": "WireGuard Pre-Shared Key",
      "wireguardAllowedIPs": "WireGuard Allowed IPs",
      "wireguardAllowedIPsHint": "Leave empty to auto-assign; separate entries with commas",
      "amneziaWgPrivateKey": "AmneziaWG Private Key",
      "amneziaWgPublicKey": "AmneziaWG Public Key",
      "amneziaWgPreSharedKey": "AmneziaWG Pre-Shared Key",
      "amneziaWgAllowedIPs": "AmneziaWG Allowed IPs",
      "amneziaWgAllowedIPsHint": "Leave empty to auto-assign; separate entries with commas",
      "amneziaWgForwardedPorts": "Forwarded Ports",
      "amneziaWgForwardedPortsHint": "Ports/ranges DNAT'd to this client, e.g. 80, 443, 8000-8100. Leave empty for none.",
      "amneziaWgConfig": "AmneziaWG config",
      "mtprotoSecret": "MTProto secret",
      "mtprotoSecretHint": "The client's FakeTLS secret. Regenerate to rotate it.",
      "mtprotoAdTag": "Ad-tag (sponsored channel)",
      "mtprotoAdTagHint": "Optional 32-character hex tag from Telegram's proxy registration. When set, this client is routed through Telegram middle proxies and a sponsored channel appears at the top of their chat list.",
      "reverseTag": "Reverse tag",
      "reverseTagPlaceholder": "Optional reverse tag",
      "telegramId": "Telegram user ID",
      "telegramIdPlaceholder": "Numeric Telegram user ID (0 = none)",
      "ipLimit": "IP limit",
      "toasts": {
        "deleted": "Client deleted",
        "trafficReset": "Traffic reset",
        "allTrafficsReset": "All client traffic reset",
        "bulkDeleted": "{count} clients deleted",
        "bulkDeletedMixed": "{ok} deleted, {failed} failed",
        "bulkEnabled": "{count} clients enabled",
        "bulkEnabledMixed": "{ok} enabled, {failed} failed",
        "bulkDisabled": "{count} clients disabled",
        "bulkDisabledMixed": "{ok} disabled, {failed} failed",
        "bulkCreated": "{count} clients created",
        "bulkCreatedMixed": "{ok} created, {failed} failed",
        "bulkAdjusted": "{count} clients adjusted",
        "bulkAdjustedMixed": "{ok} adjusted, {skipped} skipped",
        "delDepleted": "{count} depleted clients deleted",
        "delOrphans": "{count} unattached clients deleted",
        "imported": "{count} clients imported",
        "importedMixed": "{ok} imported, {failed} skipped"
      },
      "renewMax": "Max renewals",
      "renewMaxDesc": "How many times auto-renew may fire before the client is left to expire. 0 means no limit. Catching up several missed periods spends one renewal per period.",
      "renewOnDay": "Renew on day",
      "renewOnDayDesc": "Renew on this day of every calendar month, at midnight in the panel's time zone, instead of every N days. A month too short for the chosen day renews on its last day. 0 keeps the day-interval mode.",
      "renewsUsed": "Renewals used"
    },
    "groups": {
      "name": "Name",
      "clientCount": "Clients",
      "totalGroups": "Total groups",
      "totalGroupedClients": "Clients with a group",
      "trafficUsed": "Traffic used",
      "upload": "Upload",
      "download": "Download",
      "totalTraffic": "Total traffic",
      "totalUpDown": "Total upload / download",
      "addGroup": "Add Group",
      "createSuccess": "Group \"{name}\" created.",
      "rename": "Rename",
      "renameTitle": "Rename {name}",
      "renameCollision": "A group named \"{name}\" already exists.",
      "renameSuccess": "Renamed group on {count} client(s).",
      "deleteConfirmTitle": "Delete group {name}?",
      "deleteConfirmContent": "This removes the group and clears its label from {count} client(s). The clients themselves are not deleted.",
      "deleteSuccess": "Cleared group from {count} client(s).",
      "resetTraffic": "Reset traffic",
      "resetConfirmTitle": "Reset traffic for group {name}?",
      "resetConfirmContent": "This resets only the group's traffic counter. Individual client counters are not affected.",
      "resetSuccess": "Group {name} traffic reset.",
      "adjustSuccess": "Adjusted {count} client(s) in {name}.",
      "emptyForAction": "This group has no clients yet.",
      "deleteGroupOnly": "Delete group (keep clients)",
      "deleteClients": "Delete clients in group",
      "deleteClientsConfirmTitle": "Delete all clients in {name}?",
      "deleteClientsConfirmContent": "This permanently removes {count} client(s) along with their traffic records. The group label is cleared too. This cannot be undone.",
      "deleteClientsSuccess": "Deleted {count} client(s).",
      "deleteClientsMixed": "{ok} deleted, {failed} skipped",
      "addToGroup": "Add clients…",
      "addToGroupTitle": "Add clients to group \"{name}\"",
      "addToGroupDesc": "Select clients to add to this group. They keep their existing inbound attachments; only the group label changes. Clients already in this group are not listed.",
      "addToGroupEmpty": "No other clients available to add.",
      "addToGroupResult": "Added {count} client(s) to {name}.",
      "removeFromGroup": "Remove clients…",
      "removeFromGroupTitle": "Remove clients from group \"{name}\"",
      "removeFromGroupDesc": "Select members to remove from this group. Clients themselves are kept (use \"Delete clients in group\" to remove them entirely).",
      "removeFromGroupResult": "Removed {count} client(s) from {name}."
    },
    "hosts": {
      "addHost": "Add Host",
      "editHost": "Edit Host",
      "selectInbound": "Select an inbound",
      "selectedCount": "{count} selected",
      "summary": {
        "total": "Total",
        "enabled": "Enabled",
        "disabled": "Disabled"
      },
      "moveUp": "Move up",
      "moveDown": "Move down",
      "bulkEnable": "Enable",
      "bulkDisable": "Disable",
      "bulkDelete": "Delete",
      "bulkDeleteConfirm": "Delete {count} selected host(s)?",
      "deleteConfirmTitle": "Delete host \"{name}\"?",
      "sections": {
        "basic": "Basic",
        "security": "Security",
        "advanced": "Advanced",
        "general": "General",
        "clash": "Clash (mihomo)"
      },
      "fields": {
        "remark": "Remark",
        "serverDescription": "Description",
        "inbound": "Inbounds",
        "address": "Address",
        "port": "Port",
        "endpoint": "Endpoint",
        "enable": "Enable",
        "actions": "Actions",
        "security": "Security",
        "sni": "SNI",
        "overrideSniFromAddress": "Use address as SNI",
        "keepSniBlank": "Keep SNI blank",
        "hostHeader": "Host header",
        "path": "Path",
        "alpn": "ALPN",
        "fingerprint": "Fingerprint",
        "pins": "Pinned cert SHA-256",
        "verifyPeerCertByName": "Verify peer cert by name",
        "allowInsecure": "Allow insecure",
        "echConfigList": "ECH config list",
        "muxParams": "Mux",
        "sockoptParams": "Sockopt",
        "finalMask": "Final Mask",
        "vlessRoute": "VLESS route",
        "mihomoIpVersion": "IP version",
        "mihomoX25519": "Mihomo X25519",
        "shuffleHost": "Shuffle host",
        "tags": "Tags",
        "nodeGuids": "Nodes",
        "excludeFromSubTypes": "Exclude from formats",
        "inheritAddress": "Inherits"
      },
      "hints": {
        "address": "Leave blank to inherit the inbound's own address.",
        "port": "0 inherits the inbound's port.",
        "tags": "Not visible to end users; sent with RAW subscription only. Uppercase letters, digits, _ and : only.",
        "nodeGuids": "Pick nodes which resolved from this host. Only visual assignment.",
        "serverDescription": "Optional note shown under the remark.",
        "allowInsecure": "Skip TLS certificate verification (allowInsecure / skip-cert-verify).",
        "vlessRoute": "Single VLESS route value (0-65535) baked into the UUID, e.g. 443. Leave blank for none.",
        "remark": "A plain label for this host. Shown as the config name only when the inbound has no remark of its own."
      },
      "remarkVars": {
        "title": "Template Variables",
        "intro": "Click a variable to add it. It is replaced per client when the subscription is generated.",
        "preview": "Preview",
        "groups": {
          "client": "Client",
          "traffic": "Traffic",
          "time": "Time & status",
          "connection": "Connection"
        },
        "descEMAIL": "Client email",
        "descINBOUND": "Inbound's own remark (the config name)",
        "descHOST": "Host remark",
        "descID": "Client UUID",
        "descSHORT_ID": "First 8 characters of the UUID",
        "descTELEGRAM_ID": "Client's Telegram ID (empty if unset)",
        "descSUB_ID": "Subscription ID",
        "descCOMMENT": "Client comment",
        "descTRAFFIC_USED": "Used traffic (human readable)",
        "descTRAFFIC_LEFT": "Remaining traffic (hidden if unlimited)",
        "descTRAFFIC_TOTAL": "Total traffic (hidden if unlimited)",
        "descTRAFFIC_USED_BYTES": "Used traffic in bytes",
        "descTRAFFIC_LEFT_BYTES": "Remaining traffic in bytes",
        "descTRAFFIC_TOTAL_BYTES": "Total traffic in bytes",
        "descUP": "Upload traffic",
        "descDOWN": "Download traffic",
        "descSTATUS": "active / expired / disabled / depleted",
        "descSTATUS_EMOJI": "Status as an emoji (✅ ⏳ 🚫)",
        "descDAYS_LEFT": "Days until expiry (hidden if unlimited)",
        "descTIME_LEFT": "Remaining time (e.g. 12d 4h 30m)",
        "descUSAGE_PERCENTAGE": "Used traffic as a percentage (hidden if unlimited)",
        "descEXPIRE_DATE": "Expiry date (YYYY-MM-DD)",
        "descJALALI_EXPIRE_DATE": "Expiry date in the Jalali calendar (YYYY/MM/DD)",
        "descEXPIRE_UNIX": "Expiry as a Unix timestamp (seconds)",
        "descCREATED_UNIX": "Creation time as a Unix timestamp (seconds)",
        "descRESET_DAYS": "Traffic reset period in days",
        "descRESET_DAY": "Calendar renewal day of the month",
        "descPROTOCOL": "Inbound protocol (VLESS, VMess, Trojan, …)",
        "descTRANSPORT": "Transport network (tcp, ws, grpc, …)",
        "descSECURITY": "Transport security (TLS, REALITY, NONE)"
      },
      "toasts": {
        "list": "Failed to load hosts",
        "obtain": "Failed to load host",
        "add": "Host added successfully",
        "update": "Host updated successfully",
        "delete": "Host deleted successfully",
        "badTag": "Invalid tag",
        "badVlessRoute": "Enter a single number between 0 and 65535"
      }
    },
    "nodes": {
      "addNode": "Add Node",
      "editNode": "Edit Node",
      "totalNodes": "Total Nodes",
      "onlineNodes": "Online",
      "offlineNodes": "Offline",
      "avgLatency": "Avg Latency",
      "name": "Name",
      "namePlaceholder": "e.g. de-frankfurt-1",
      "addressPlaceholder": "panel.example.com or 1.2.3.4",
      "remark": "Remark",
      "scheme": "Scheme",
      "address": "Address",
      "port": "Port",
      "basePath": "Base Path",
      "apiToken": "API Token",
      "apiTokenPlaceholder": "Token from the remote panel's Settings page",
      "apiTokenHint": "The remote panel exposes its API token under Authentication → API Token.",
      "apiTokenKeepHint": "Leave blank to keep the current token",
      "allowPrivateAddress": "Allow private address",
      "allowPrivateAddressHint": "Enable only for nodes on a private network or VPN.",
      "outboundTag": "Connection outbound",
      "outboundTagHint": "Route this node's panel API traffic through the selected Xray outbound. A loopback bridge inbound is added to the running config automatically and applied live. Leave empty for a direct connection.",
      "outboundTagPlaceholder": "Direct connection",
      "inboundSyncMode": "Inbound import",
      "inboundSyncModeHint": "Choose which inbounds are imported from this node. Existing nodes default to all inbounds.",
      "allInbounds": "All inbounds",
      "selectedInbounds": "Selected inbounds",
      "inboundTags": "Inbounds",
      "inboundTagsHint": "Selection is matched by the inbound tag. An empty selection imports none.",
      "inboundTagsPlaceholder": "Load and select inbounds",
      "loadInbounds": "Load inbounds from node",
      "inboundsLoaded": "Loaded {{count}} inbounds",
      "inboundsLoadFailed": "Failed to load inbounds",
      "enable": "Enabled",
      "status": "Status",
      "cpu": "CPU",
      "mem": "Memory",
      "netUp": "Net Up (KB/s)",
      "netDown": "Net Down (KB/s)",
      "uptime": "Uptime",
      "latency": "Latency",
      "lastHeartbeat": "Last Heartbeat",
      "xrayVersion": "Xray Version",
      "panelVersion": "Panel Version",
      "actions": "Actions",
      "probe": "Probe Now",
      "updatePanel": "Update Panel",
      "updateSelected": "Update Selected ({count})",
      "updateAvailable": "Update available",
      "updateConfirmTitle": "Update {count} node(s) to the latest version?",
      "updateConfirmContent": "Each selected node downloads the latest release and restarts onto it. Only enabled, online nodes are updated.",
      "updateDevChannel": "Update to Dev channel (latest commit)",
      "testConnection": "Test Connection",
      "connectionOk": "Connection OK ({ms} ms)",
      "connectionFailed": "Connection failed",
      "never": "never",
      "justNow": "just now",
      "subNode": "Sub-node",
      "subNodeTip": "Read-only: a downstream node reached through {parent}. Manage it from {parent}'s own panel.",
      "deleteConfirmTitle": "Delete node \"{name}\"?",
      "deleteConfirmContent": "This stops monitoring the node. The remote panel itself is unaffected.",
      "statusValues": {
        "online": "Online",
        "offline": "Offline",
        "unknown": "Unknown",
        "xrayError": "Xray Error",
        "xrayStopped": "Stopped"
      },
      "toasts": {
        "list": "Failed to load nodes",
        "obtain": "Failed to load node",
        "add": "Add node",
        "update": "Update node",
        "delete": "Delete node",
        "deleted": "Node deleted",
        "test": "Test connection",
        "fillRequired": "Name, address, port and API token are required",
        "probeFailed": "Probe failed",
        "updateStarted": "Panel update started",
        "updateResult": "Update triggered on {ok} node(s), {failed} failed",
        "updateNoneEligible": "Select at least one online, enabled node",
        "saveMtls": "Save node mTLS",
        "reloadMtls": "Reload master mTLS credential"
      },
      "tlsVerifyMode": "TLS verification",
      "tlsVerifyModeHint": "How the panel validates the node's HTTPS certificate. Pin or Skip are for self-signed certs (https nodes only).",
      "tlsVerify": "Verify (default CA)",
      "tlsPin": "Pin certificate (SHA-256)",
      "tlsSkip": "Skip verification",
      "tlsMtls": "Mutual TLS (client certificate)",
      "mtlsFormHint": "This node authenticates the panel with a client certificate. Copy this panel's CA from the Node mTLS section onto the node, set its Trusted parent CA, then restart it.",
      "mtls": {
        "title": "Node mTLS",
        "intro": "Mutual TLS adds a client-certificate factor on top of the API token for node-to-node calls. It is opt-in: leave it empty to keep token-only auth.",
        "copyCa": "Copy this panel's CA",
        "copyCaHint": "Hand this CA to the nodes this panel manages, then set their TLS verification to Mutual TLS.",
        "caCopied": "CA certificate copied to clipboard",
        "caFailed": "Failed to obtain the CA certificate",
        "trustLabel": "Trusted parent CA",
        "trustHint": "When this panel is itself a node, paste the managing panel's CA here to require its client certificate. Restart the panel to apply.",
        "trustPlaceholder": "-----BEGIN CERTIFICATE-----",
        "save": "Save trust CA",
        "saved": "Trust CA saved — restart the panel to apply"
      },
      "tlsSkipWarning": "Skipping verification removes protection against man-in-the-middle attacks — the API token could be intercepted. Prefer pinning the certificate.",
      "pinnedCert": "Pinned certificate SHA-256",
      "pinnedCertHint": "Base64 or hex SHA-256 of the node's certificate. Use Fetch to read it from the node now.",
      "pinnedCertPlaceholder": "base64 or hex SHA-256",
      "fetchPin": "Fetch",
      "pinFetched": "Fetched the node's current certificate",
      "pinFetchFailed": "Could not fetch the certificate"
    },
    "settings": {
      "defaultTag": "Default",
      "title": "Panel Settings",
      "save": "Save",
      "infoDesc": "Every change made here needs to be saved. Please restart the panel to apply changes.",
      "restartPanel": "Restart Panel",
      "restartPanelDesc": "Are you sure you want to restart the panel? If you cannot access the panel after restarting, please view the panel log info on the server.",
      "restartPanelSuccess": "The panel was successfully restarted.",
      "actions": "Actions",
      "resetDefaultConfig": "Reset to Default",
      "panelSettings": "General",
      "securitySettings": "Authentication",
      "securityWarnings": "Security warnings",
      "panelExposed": "Your panel may be exposed:",
      "warnHttp": "Panel is served over plain HTTP — set up TLS for production.",
      "warnDefaultPort": "Default port 2053 is well-known — change it to a random port.",
      "warnDefaultBasePath": "Default base path \"/\" is well-known — change it to a random path.",
      "warnDefaultSubPath": "Default subscription path \"/sub/\" is well-known — change it.",
      "warnDefaultJsonPath": "Default JSON subscription path \"/json/\" is well-known — change it.",
      "TGBotSettings": "Telegram Bot",
      "panelListeningIP": "Listen IP",
      "panelListeningIPDesc": "The IP address for the web panel. (leave blank to listen on all IPs)",
      "panelListeningDomain": "Listen Domain",
      "panelListeningDomainDesc": "The domain name for the web panel. (leave blank to listen on all domains and IPs)",
      "panelPort": "Listen Port",
      "panelPortDesc": "The port number for the web panel. (must be an unused port)",
      "publicKeyPath": "Public Key Path",
      "publicKeyPathDesc": "The public key file path for the web panel. (begins with ‘/‘)",
      "privateKeyPath": "Private Key Path",
      "privateKeyPathDesc": "The private key file path for the web panel. (begins with ‘/‘)",
      "panelUrlPath": "URI Path",
      "panelUrlPathDesc": "The URI path for the web panel. (begins with ‘/‘ and concludes with ‘/‘)",
      "pageSize": "Pagination Size",
      "pageSizeDesc": "Define page size for inbounds table. (0 = disable)",
      "panelOutbound": "Panel Traffic Outbound",
      "panelOutboundDesc": "Routes the panel's own requests — panel/Xray version checks and downloads, Telegram, and the normal geo-file update — through this Xray outbound to bypass server-side filtering of GitHub/Telegram. A loopback bridge inbound is added to the running config automatically and applied live. The Xray-native Geodata Auto-Update is not affected; it has its own download outbound. Leave empty for a direct connection.",
      "panelOutboundPh": "Direct connection",
      "remarkTemplate": "Remark Template",
      "remarkTemplateDesc": "When set, this replaces the remark model for every subscription link — write your own format with the variable tokens (use the button to insert them). Leave empty to use the model above.",
      "subShowIdentityOnAllLinks": "Show identity on every link",
      "subShowIdentityOnAllLinksDesc": "When enabled, {{EMAIL}} and {{USERNAME}} stay on every subscription-body remark. Usage tokens still appear on the first link only.",
      "datepicker": "Calendar Type",
      "datepickerPlaceholder": "Select date",
      "datepickerDescription": "Scheduled tasks will run based on this calendar.",
      "oldUsername": "Current Username",
      "currentPassword": "Current Password",
      "newUsername": "New Username",
      "newPassword": "New Password",
      "telegramBotEnable": "Enable Telegram Bot",
      "telegramBotEnableDesc": "Enables the Telegram bot.",
      "telegramToken": "Telegram Token",
      "telegramTokenDesc": "The Telegram bot token obtained from '{'@'}BotFather'.",
      "telegramProxy": "SOCKS Proxy",
      "telegramProxyDesc": "Enables SOCKS5 proxy for connecting to Telegram. (adjust settings as per guide)",
      "telegramAPIServer": "Telegram API Server",
      "telegramAPIServerDesc": "The Telegram API server to use. Leave blank to use the default server.",
      "telegramChatId": "Admin Chat ID",
      "telegramChatIdDesc": "The Telegram Admin Chat ID(s). (comma-separated)(get it here {'@'}userinfobot) or (use '/id' command in the bot)",
      "telegramNotifyTime": "Notification Time",
      "telegramNotifyTimeDesc": "How often the Telegram bot sends periodic reports. Pick a preset interval, or choose Custom to enter a raw crontab expression.",
      "notifyTime": {
        "every": "@every — repeat at an interval",
        "hourly": "@hourly — every hour",
        "daily": "@daily — every day at 00:00",
        "weekly": "@weekly — every week",
        "monthly": "@monthly — every month",
        "custom": "Custom (crontab)",
        "seconds": "Seconds",
        "minutes": "Minutes",
        "hours": "Hours",
        "interval": "Interval",
        "unit": "Unit"
      },
      "tgNotifyBackup": "Database Backup",
      "tgNotifyBackupDesc": "Send a database backup file with a report.",
      "tgNotifyLogin": "Login Notification",
      "tgNotifyLoginDesc": "Get notified about the username, IP address, and time whenever someone attempts to log into your web panel.",
      "sessionMaxAge": "Session Duration",
      "sessionMaxAgeDesc": "The duration for which you can stay logged in. (unit: minute)",
      "expireTimeDiff": "Expiration Date Notification",
      "expireTimeDiffDesc": "Get notified about expiration date when reaching this threshold. (unit: day)",
      "trafficDiff": "Traffic Cap Notification",
      "trafficDiffDesc": "Get notified about traffic cap when reaching this threshold. (unit: GB)",
      "tgNotifyCpu": "CPU Load Notification",
      "tgNotifyCpuDesc": "Get notified if CPU load exceeds this threshold. (unit: %)",
      "timeZone": "Time Zone",
      "timeZoneDesc": "Scheduled tasks will run based on this time zone.",
      "subSettings": "Subscription",
      "subEnable": "Subscription Service",
      "subEnableDesc": "Enable/Disable the subscription service.",
      "subJsonEnable": "Enable/Disable the JSON subscription endpoint independently.",
      "subJsonEnableTitle": "JSON subscription",
      "subClashEnableTitle": "Clash / Mihomo subscription",
      "subFormatsTipTitle": "Format-specific subscription settings",
      "subFormatsTipDesc": "Configure JSON and Clash / Mihomo URL paths, reverse URLs, and client auto-detection separately.",
      "subFormatsTipAction": "Open Sub Formats",
      "subJsonAutoDetect": "Auto-detect Xray JSON clients",
      "subJsonAutoDetectDesc": "When enabled, recognized compatible clients requesting the standard subscription URL receive an Xray JSON configuration array automatically. Other clients keep the raw/base64 response. Requires JSON subscription to be enabled and a panel restart to apply.",
      "subJsonAlwaysArray": "Always return a JSON array",
      "subJsonAlwaysArrayDesc": "Return the explicit JSON subscription endpoint as an array even when it contains one profile, as required by the XTLS subscription standard. Auto-detected JSON responses always use arrays. Leave disabled to preserve the legacy single-object response.",
      "subJsonUserAgentRegex": "Xray JSON User-Agent regex",
      "subJsonUserAgentRegexDesc": "Go RE2 regular expression matched against the client's User-Agent to auto-select the Xray JSON format on the standard subscription URL. Empty by default, so auto-detection stays off until you set a pattern for the clients you want to serve. Other clients keep the raw/base64 response. Restart the panel after changes.",
      "subClashAutoDetect": "Auto-detect Clash/Mihomo clients",
      "subClashAutoDetectDesc": "When enabled, recognized Clash/Mihomo clients requesting the standard subscription URL receive Clash YAML automatically. Browsers still show the subscription page, other clients keep the raw/base64 response, and the explicit JSON and Clash URLs remain available. Requires Clash/Mihomo subscription to be enabled and a panel restart to apply.",
      "subClashUserAgentRegex": "Clash/Mihomo User-Agent regex",
      "subClashUserAgentRegexDesc": "Go RE2 regular expression matched against the client's User-Agent to recognize Clash/Mihomo clients on the standard subscription URL. Leave empty to use the default pattern. Restart the panel after changes.",
      "subTitle": "Subscription Title",
      "subTitleDesc": "Title shown in VPN client. Supports client identity tokens: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
      "subSupportUrl": "Support URL",
      "subSupportUrlDesc": "Technical support link shown in the VPN client. Supports client identity tokens: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
      "subProfileUrl": "Profile URL",
      "subProfileUrlDesc": "A link to your website displayed in the VPN client. Supports client identity tokens: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
      "subAnnounce": "Announce",
      "subAnnounceDesc": "The announcement text displayed in the VPN client. Supports client identity tokens: {{EMAIL}}, {{ID}}, {{SHORT_ID}}, {{SUB_ID}}, {{TELEGRAM_ID}}.",
      "subThemeDir": "Sub Theme Directory",
      "subThemeDirDesc": "Absolute path to a folder containing a custom index.html/sub.html subscription page template (e.g. /etc/3x-ui/sub_templates/my-theme/). Leave empty to use the default page.",
      "subThemeDirDocs": "Template guide ↗",
      "subEnableRouting": "Enable routing",
      "subEnableRoutingDesc": "Global setting to enable routing in the VPN client. (Only for Happ)",
      "subRoutingRules": "Routing rules",
      "subRoutingRulesDesc": "Paste a ready happ:// deeplink or one permanent HTTPS URL returning a deeplink or JSON. The panel refreshes remote rules in the background and keeps the last valid value, so subscription requests never wait for the source. (Happ only)",
      "subHideSettings": "Hide server settings",
      "subHideSettingsDesc": "Hide the ability to view and edit server configurations in the VPN client. (Only for Happ)",
      "subIncyEnableRouting": "Enable routing",
      "subIncyEnableRoutingDesc": "Inject a routing profile into the subscription body for the Incy client. (Only for Incy)",
      "subIncyRoutingRules": "Routing rules",
      "subIncyRoutingRulesDesc": "Paste a ready incy:// deeplink or one permanent HTTPS URL returning JSON. An HTTPS URL becomes an autorouting profile refreshed by Incy itself. (Incy only)",
      "subClashEnableRouting": "Enable routing",
      "subClashEnableRoutingDesc": "Include global Clash/Mihomo routing rules in generated YAML subscriptions.",
      "subClashRoutingRules": "Global routing rules",
      "subClashRoutingRulesDesc": "Paste inline rules/YAML or one permanent HTTPS URL. The panel refreshes it in the background, imports only groups/providers/rules, preserves generated VPN nodes and keeps the last valid value.",
      "subListen": "Listen IP",
      "subListenDesc": "The IP address for the subscription service. (leave blank to listen on all IPs)",
      "subPort": "Listen Port",
      "subPortDesc": "The port number for the subscription service. (must be an unused port). Also used to build the subscription link/QR shown in the panel when \"Reverse Proxy URI\" below is empty — if the subscription is reached through a reverse proxy on a different port, set \"Reverse Proxy URI\" instead.",
      "subCertPath": "Public Key Path",
      "subCertPathDesc": "The public key file path for the subscription service. (begins with ‘/‘)",
      "subKeyPath": "Private Key Path",
      "subKeyPathDesc": "The private key file path for the subscription service. (begins with ‘/‘)",
      "subPath": "URI Path",
      "subPathDesc": "The URI path for the subscription service. (begins with ‘/‘ and concludes with ‘/‘)",
      "subDomain": "Listen Domain",
      "subDomainDesc": "The domain name for the subscription service. (leave blank to listen on all domains and IPs). Also used as the fallback domain for the displayed subscription link when \"Reverse Proxy URI\" is empty — set \"Reverse Proxy URI\" if the panel and the subscription are reached through different domains (e.g. behind a reverse proxy).",
      "subUpdates": "Update Intervals",
      "subUpdatesDesc": "The update intervals of the subscription URL in the client apps. (unit: hour)",
      "subEncrypt": "Encode",
      "subEncryptDesc": "The returned content of subscription service will be Base64 encoded.",
      "subURI": "Reverse Proxy URI",
      "subURIDesc": "The full base URL (scheme://domain[:port]/path/) for the subscription link and QR code, used instead of Listen Domain/Listen Port. Set this whenever the subscription is reached through a reverse proxy or a domain/port different from the ones above.",
      "externalTrafficInformEnable": "External Traffic Inform",
      "externalTrafficInformEnableDesc": "Inform external API on every traffic update.",
      "externalTrafficInformURI": "External Traffic Inform URI",
      "externalTrafficInformURIDesc": "Traffic updates are sent to this URI.",
      "restartXrayOnClientDisable": "Restart Xray After Auto Disable",
      "restartXrayOnClientDisableDesc": "When a client is automatically disabled due to expiration or traffic limit, restart Xray.",
      "fragment": "Fragmentation",
      "fragmentDesc": "Enable fragmentation for TLS hello packet.",
      "fragmentSett": "Fragmentation Settings",
      "noisesDesc": "Enable Noises.",
      "noisesSett": "Noises Settings",
      "trustedProxyCidrs": "Trusted proxy CIDRs",
      "trustedProxyCidrsDesc": "Comma-separated IPs/CIDRs allowed to set forwarded host, proto, and client IP headers.",
      "ldap": {
        "enable": "Enable LDAP sync",
        "host": "LDAP host",
        "port": "LDAP port",
        "useTls": "Use TLS (LDAPS)",
        "skipTlsVerify": "Skip TLS certificate verification",
        "skipTlsVerifyDesc": "Insecure — disables server certificate validation. Use only with internal/untrusted CAs.",
        "bindDn": "Bind DN",
        "passwordConfigured": "Configured; leave blank to keep current password.",
        "passwordUnconfigured": "Not configured.",
        "passwordPlaceholder": "Configured - enter a new value to replace",
        "baseDn": "Base DN",
        "userFilter": "User filter",
        "userAttr": "User attribute (username/email)",
        "vlessField": "VLESS flag attribute",
        "flagField": "Generic flag attribute (optional)",
        "flagFieldDesc": "If set, overrides VLESS flag — e.g. shadowInactive.",
        "truthyValues": "Truthy values",
        "truthyValuesDesc": "Comma-separated; default: true,1,yes,on",
        "invertFlag": "Invert flag",
        "invertFlagDesc": "Enable when the attribute means disabled (e.g. shadowInactive).",
        "syncSchedule": "Sync schedule",
        "syncScheduleDesc": "Cron-like string, e.g. @every 1m",
        "inboundTags": "Inbound tags",
        "inboundTagsDesc": "Inbounds that LDAP sync may auto-create or auto-delete clients on.",
        "noInbounds": "No inbounds found. Create one in Inbounds first.",
        "autoCreate": "Auto create clients",
        "autoDelete": "Auto delete clients",
        "defaultTotalGb": "Default total (GB)",
        "defaultExpiryDays": "Default expiry (days)",
        "defaultIpLimit": "Default IP limit"
      },
      "subFormats": {
        "finalMask": "Final Mask",
        "finalMaskDesc": "Inject Xray finalmask TCP/UDP masks and QUIC parameters into every generated Xray JSON profile. Requires a client app that supports Xray JSON subscriptions and a recent Xray core.",
        "packets": "Packets",
        "length": "Length",
        "interval": "Interval",
        "maxSplit": "Max split",
        "noises": "Noises",
        "noiseItem": "Noise №{n}",
        "type": "Type",
        "packet": "Packet",
        "delayMs": "Delay (ms)",
        "applyTo": "Apply to",
        "addNoise": "+ Noise",
        "concurrency": "Concurrency",
        "xudpConcurrency": "xudp concurrency",
        "xudpUdp443": "xudp UDP 443"
      },
      "mux": "Mux",
      "muxDesc": "Transmit multiple independent data streams within an established data stream.",
      "muxSett": "Mux Settings",
      "direct": "Direct Connection",
      "directDesc": "Directly establishes connections with domains or IP ranges of a specific country.",
      "notifications": "Notifications",
      "certs": "Certificates",
      "externalTraffic": "External Traffic",
      "dateAndTime": "Date and Time",
      "proxyAndServer": "Proxy and Server",
      "intervals": "Intervals",
      "information": "Information",
      "profile": "Profile",
      "language": "Language",
      "telegramBotLanguage": "Telegram Bot Language",
      "security": {
        "admin": "Admin credentials",
        "twoFactor": "Two-factor authentication",
        "twoFactorEnable": "Enable 2FA",
        "twoFactorEnableDesc": "Adds an additional layer of authentication to provide more security.",
        "twoFactorModalSetTitle": "Enable two-factor authentication",
        "twoFactorModalDeleteTitle": "Disable two-factor authentication",
        "twoFactorModalSteps": "To set up two-factor authentication, perform a few steps:",
        "twoFactorModalFirstStep": "1. Scan this QR code in the app for authentication or copy the token near the QR code and paste it into the app",
        "twoFactorModalSecondStep": "2. Enter the code from the app",
        "twoFactorModalRemoveStep": "Enter the code from the application to remove two-factor authentication.",
        "twoFactorModalChangeCredentialsTitle": "Change credentials",
        "twoFactorModalChangeCredentialsStep": "Enter the code from the application to change administrator credentials.",
        "twoFactorModalSetSuccess": "Two-factor authentication has been successfully established",
        "twoFactorModalDeleteSuccess": "Two-factor authentication has been successfully deleted",
        "twoFactorModalError": "Wrong code",
        "show": "Show",
        "hide": "Hide",
        "apiTokenNew": "New token",
        "apiTokenName": "Name",
        "apiTokenNamePlaceholder": "e.g. central-panel-a",
        "apiTokenNameRequired": "Name is required",
        "apiTokenEmpty": "No tokens yet — create one to authenticate bots or remote panels.",
        "apiTokenDeleteWarning": "Any caller using this token will stop authenticating immediately.",
        "apiTokenCreatedTitle": "Token created",
        "apiTokenCreatedNotice": "Copy this token now. For security it is not stored in readable form and will not be shown again."
      },
      "toasts": {
        "modifySettings": "The parameters have been changed.",
        "getSettings": "An error occurred while retrieving parameters.",
        "modifyUserError": "An error occurred while changing administrator credentials.",
        "modifyUser": "You have successfully changed the credentials of the administrator.",
        "originalUserPassIncorrect": "The current username or password is invalid",
        "userPassMustBeNotEmpty": "The new username and password are empty",
        "getOutboundTrafficError": "Error getting traffic",
        "resetOutboundTrafficError": "Error resetting outbound traffic"
      },
      "smtpSettings": "SMTP Settings",
      "smtpEnable": "Enable Email Notifications",
      "smtpEnableDesc": "Enable email notifications via SMTP",
      "smtpHost": "SMTP Host",
      "smtpHostDesc": "SMTP server hostname (e.g. smtp.gmail.com)",
      "smtpPort": "SMTP Port",
      "smtpPortDesc": "SMTP server port (default: 587)",
      "smtpUsername": "SMTP Username",
      "smtpUsernameDesc": "SMTP authentication username",
      "smtpFrom": "SMTP From Address",
      "smtpFromDesc": "Sender address used in the email From header. Leave empty to use the username.",
      "smtpFromName": "SMTP Sender Name",
      "smtpFromNameDesc": "Optional display name shown before the sender address in the From header.",
      "smtpPassword": "SMTP Password",
      "smtpPasswordDesc": "SMTP authentication password",
      "smtpTo": "Recipients",
      "smtpToDesc": "Comma-separated recipient email addresses",
      "emailSettings": "Email",
      "emailNotifications": "Notifications",
      "smtpEventBusNotify": "Email Event Notifications",
      "smtpEventBusNotifyDesc": "Select which events trigger email notifications",
      "tgEventBusNotify": "Telegram Event Notifications",
      "tgEventBusNotifyDesc": "Select which events trigger Telegram notifications",
      "testSmtp": "Send Test Email",
      "testTgBot": "Send Test Message",
      "eventGroupOutbound": "Outbound",
      "eventGroupXray": "Xray Core",
      "eventGroupSystem": "System",
      "eventGroupSecurity": "Security",
      "eventGroupNode": "Nodes",
      "eventOutboundDown": "Down",
      "eventOutboundUp": "Up",
      "eventXrayCrash": "Crash",
      "eventNodeDown": "Down",
      "eventNodeUp": "Up",
      "eventCPUHigh": "CPU high (%)",
      "requestFailed": "Request failed",
      "smtpEncryption": "Encryption",
      "smtpEncryptionDesc": "SMTP connection encryption method",
      "smtpEncryptionNone": "None (plain text)",
      "smtpEncryptionStartTLS": "STARTTLS",
      "smtpEncryptionTLS": "TLS (implicit)",
      "smtpStageConnect": "Connection",
      "smtpStageAuth": "Authentication",
      "smtpStageSend": "Send",
      "smtpTestSuccess": "Test email sent successfully",
      "smtpHostNotConfigured": "SMTP host not configured",
      "smtpNoRecipients": "No recipients configured",
      "smtpFromNotConfigured": "SMTP sender address not configured",
      "eventLoginAttempt": "Login attempt",
      "telegramTokenConfigured": "Configured; leave blank to keep current token.",
      "telegramTokenPlaceholder": "Configured - enter a new token to replace",
      "smtpPasswordConfigured": "Configured; leave blank to keep current password.",
      "smtpPasswordPlaceholder": "Configured - enter a new password to replace",
      "smtpNotInitialized": "SMTP not initialized",
      "tgBotNotEnabled": "Telegram bot is not enabled",
      "tgTestFailed": "Telegram test failed",
      "tgTestSuccess": "Test message sent to Telegram",
      "tgBotNotRunning": "Telegram bot not running",
      "smtpErrorAuth": "Authentication failed — check username and password",
      "smtpErrorStarttls": "Server requires STARTTLS — change encryption type",
      "smtpErrorTls": "Server requires TLS — change encryption type",
      "smtpErrorRefused": "Connection refused — check host and port",
      "smtpErrorTimeout": "Connection timeout — host unreachable",
      "smtpErrorRelay": "Server rejects sending from this address",
      "smtpErrorEof": "Connection closed by server",
      "smtpErrorUnknown": "SMTP error: {{ .Error }}",
      "eventMemoryHigh": "Memory high (%)",
      "validation": {
        "pathLeadingSlash": "Path must start with /"
      },
      "secretClear": "Clear",
      "secretClearUndo": "Undo clear",
      "calendarGregorian": "Gregorian (Standard)",
      "calendarJalalian": "Jalalian (شمسی)",
      "ipLimitAllowlist": "IP limit allowlist",
      "ipLimitAllowlistDesc": "Addresses and networks that the IP limit never counts and never bans, so a shared office or campus address cannot use up a client's limit. Comma-separated, IP or CIDR.",
      "subBalancers": {
        "menu": "Sub Balancers",
        "title": "Subscription balancer",
        "add": "Add balancer",
        "desc": "Each enabled balancer is added to the JSON subscription as one extra profile that automatically picks the best of the selected inbounds' endpoints (routing.balancers + burstObservatory in the client config).",
        "remark": "Remark",
        "remarkPlaceholder": "Auto · fastest",
        "strategy": "Strategy",
        "strategyLeastLoad": "Least load",
        "strategyLeastPing": "Least ping",
        "strategyRandom": "Random",
        "strategyRoundRobin": "Round robin",
        "sortOrder": "Order",
        "sortOrderHelp": "Position in the subscription list, interleaved with the inbounds' own order; on equal numbers the balancer comes after the inbound.",
        "inbounds": "Inbounds",
        "inboundsCount": "{count} Inbounds",
        "enabled": "Enabled",
        "empty": "No balancers yet",
        "deleteConfirm": "Delete this balancer?",
        "errRemarkRequired": "Remark is required",
        "errInboundsRequired": "Select at least one inbound",
        "errSortOrder": "Order must be a whole number ≥ 1",
        "toasts": {
          "list": "Failed to list subscription balancers",
          "create": "Failed to create subscription balancer",
          "update": "Failed to update subscription balancer",
          "delete": "Failed to delete subscription balancer",
          "invalidId": "Invalid id"
        },
        "tabBalancers": "Balancers",
        "tabObservatory": "Observatory",
        "observatory": {
          "title": "Balancer observatory",
          "desc": "Probe parameters for the burst observatory emitted into each leastPing/leastLoad balancer profile. random/roundRobin balancers get no observatory. Stored as a panel-wide JSON-sub setting.",
          "destination": "Probe URL",
          "destinationDesc": "URL the client pings to measure each member outbound.",
          "connectivity": "Connectivity URL",
          "connectivityDesc": "Optional URL checked once to confirm the member can reach the probe destination. Leave empty to skip.",
          "interval": "Probe interval",
          "intervalDesc": "Time between probe rounds, e.g. 1m.",
          "timeout": "Probe timeout",
          "timeoutDesc": "Per-probe timeout, e.g. 5s.",
          "sampling": "Sampling",
          "samplingDesc": "Number of consecutive probes averaged for stability.",
          "httpMethod": "HTTP method",
          "httpMethodDesc": "Method used for probe requests.",
          "note": "leastPing/leastLoad balancers always carry a burst observatory. This switch customises its probe parameters — turn it off to use the built-in defaults. Changes apply after a panel restart."
        }
      }
    },
    "xray": {
      "save": "Save",
      "restartSuccess": "Xray has been successfully relaunched.",
      "stopSuccess": "Xray has been successfully stopped.",
      "restartError": "There was an error when rebooting the Xray.",
      "stopError": "There was an error when stopping the Xray.",
      "basicTemplate": "Basics",
      "advancedTemplate": "Advanced",
      "generalConfigs": "General",
      "generalConfigsDesc": "These options will determine general adjustments.",
      "logConfigs": "Log",
      "logConfigsDesc": "Logs may affect your server's efficiency. It is recommended to enable them wisely only when needed.",
      "basicRouting": "Basic Routing",
      "blockConnectionsConfigsDesc": "These options will block traffic based on the specific requested country.",
      "directConnectionsConfigsDesc": "A direct connection ensures that specific traffic is not routed through another server.",
      "blockips": "Block IPs",
      "blockdomains": "Block Domains",
      "directips": "Direct IPs",
      "directdomains": "Direct Domains",
      "ipv4Routing": "IPv4 Routing",
      "ipv4RoutingDesc": "These options will route traffic based on a specific destination via IPv4.",
      "Template": "Advanced Xray Configuration Template",
      "TemplateDesc": "The final Xray config file will be generated based on this template.",
      "FreedomStrategy": "Freedom Protocol Strategy",
      "FreedomStrategyDesc": "Set the output strategy for the network in the Freedom Protocol.",
      "FreedomHappyEyeballs": "Freedom Happy Eyeballs (IPv4/IPv6)",
      "FreedomHappyEyeballsDesc": "Dual-stack dialing for the direct (freedom) outbound — useful on exit servers with both IPv4 and IPv6.",
      "FreedomHappyEyeballsTryDelayDesc": "Milliseconds before trying the alternate address family. 150–250 ms is a good starting point.",
      "RoutingStrategy": "Overall Routing Strategy",
      "RoutingStrategyDesc": "Set the overall traffic routing strategy for resolving all requests.",
      "outboundTestUrl": "Outbound Test URL",
      "outboundTestUrlDesc": "URL used when testing outbound connectivity.",
      "Torrent": "Block BitTorrent Protocol",
      "Inbounds": "Inbounds",
      "Outbounds": "Outbounds",
      "Balancers": "Balancers",
      "balancerTagRequired": "Tag is required",
      "balancerSelectorRequired": "Pick at least one outbound",
      "balancerLive": "Live Target",
      "balancerOverride": "Override",
      "balancerOverridePh": "Auto (strategy)",
      "balancerLiveRefresh": "Refresh live balancer state",
      "balancerNotRunning": "This balancer is not active in the running Xray — save your changes or start Xray first",
      "routeTester": "Route Tester",
      "routeTesterDesc": "Ask the running Xray which outbound would handle a connection. No traffic is sent — the decision comes straight from the live routing engine.",
      "routeTesterDest": "Domain or IP",
      "routeTesterPort": "Port",
      "routeTesterInbound": "Inbound",
      "routeTesterProtocol": "Sniffed protocol",
      "routeTesterTest": "Test Route",
      "routeTesterMatchedOutbound": "Matched outbound",
      "routeTesterViaBalancer": "via balancer",
      "routeTesterDefaultOutbound": "No routing rule matched — traffic goes to the default (first) outbound.",
      "Routings": "Routing Rules",
      "importRules": "Import Rules",
      "exportRules": "Export Rules",
      "importOutbounds": "Import Outbounds",
      "exportOutbounds": "Export Outbounds",
      "importInvalidJson": "Invalid JSON — expected an array or an object with a matching key.",
      "completeTemplate": "All",
      "logLevel": "Log Level",
      "logLevelDesc": "The log level for error logs, indicating the information that needs to be recorded.",
      "accessLog": "Access Log",
      "accessLogDesc": "The file path for the access log. The special value 'none' disables access logs",
      "errorLog": "Error Log",
      "errorLogDesc": "The file path for the error log. The special value 'none' disables error logs",
      "dnsLog": "DNS Log",
      "dnsLogDesc": "Whether to enable DNS query logs",
      "maskAddress": "Mask Address",
      "maskAddressDesc": "IP address mask, when enabled, will automatically replace the IP address that appears in the log.",
      "statistics": "Statistics",
      "statsInboundUplink": "Inbound Upload Statistics",
      "statsInboundDownlink": "Inbound Download Statistics",
      "statsOutboundUplink": "Outbound Upload Statistics",
      "statsOutboundDownlink": "Outbound Download Statistics",
      "metricsListen": "Metrics Endpoint",
      "metricsListenDesc": "Expose Xray's Prometheus-style metrics on this address:port (e.g. 127.0.0.1:11111). Leave empty to disable. Bind to localhost and reverse-proxy it — it is unauthenticated.",
      "metricsTag": "Metrics Tag",
      "connectionLimits": "Connection Limits",
      "connectionLimitsDesc": "Connection-level policies for user level 0. Leave a field empty to use Xray's default.",
      "connIdle": "Idle Timeout",
      "connIdleDesc": "Closes a connection after it stays idle for this many seconds. Lowering it frees memory and file descriptors faster on busy servers (Xray default: 300).",
      "bufferSize": "Buffer Size",
      "bufferSizeDesc": "Per-connection internal buffer size in KB. Set to 0 to minimize memory usage on low-RAM servers (Xray default depends on the platform).",
      "bufferSizePlaceholder": "auto",
      "seconds": "seconds",
      "rules": {
        "source": "Source",
        "dest": "Destination",
        "inbound": "Inbound",
        "balancer": "Balancer",
        "useComma": "Comma-separated list"
      },
      "routing": {
        "dragToReorder": "Drag to reorder"
      },
      "geoBrowser": {
        "title": "Geo categories",
        "openTooltip": "Browse geo categories",
        "database": "Database",
        "searchCategory": "Search category",
        "searchEntries": "Filter inside category",
        "selectFound": "Select found",
        "selected": "Selected {count}",
        "clearAll": "Clear all",
        "apply": "Apply",
        "emptySelection": "Tick categories — they become rule tokens",
        "pickCategory": "Pick a category on the left to see what it contains",
        "noMatches": "Nothing found",
        "noFiles": "No geo databases in the Xray folder",
        "noFilesHint": "They appear after Xray downloads geosite.dat and geoip.dat",
        "fileMeta": "{count} categories · {size} · updated {date}",
        "entriesCount": "{count} entries",
        "subnetsCount": "{count} subnets",
        "shownRange": "Showing {from}–{to} of {total}",
        "loadFailed": "Could not load geo databases",
        "checkFailed": "Could not check these values against the geo databases",
        "parseFailed": "Damaged or not a geosite/geoip database",
        "tooLarge": "Too large to browse",
        "unknownCategories": "Not in the database: {tokens}",
        "missingDatabase": "Database file not found: {tokens} — add it under Geodata",
        "unknownAttribute": "Attribute not found, the rule would match nothing: {tokens}",
        "invalidToken": "Xray will not accept this: {tokens}",
        "wrongKind": "Wrong database kind for this field: {tokens}"
      },
      "ruleForm": {
        "sourceIps": "Source IPs",
        "sourcePort": "Source port",
        "vlessRoute": "VLESS route",
        "attributes": "Attributes",
        "value": "Value",
        "user": "User",
        "userPlaceholder": "Select users",
        "userEmpty": "No users available",
        "userLoadError": "Could not load users",
        "inboundTags": "Inbound tags",
        "outboundTag": "Outbound tag",
        "balancerTag": "Balancer tag",
        "balancerTagTooltip": "Routes traffic through one of the configured load balancers"
      },
      "outboundForm": {
        "tagDuplicate": "Tag already used by another outbound",
        "tagRequired": "Tag is required",
        "tagPlaceholder": "unique-tag",
        "localIpPlaceholder": "local IP",
        "dialerProxyPlaceholder": "Select an outbound to chain through",
        "dialerProxyHint": "Dial this outbound through another outbound (by tag) to build a proxy chain. Leave empty to connect directly.",
        "targetStrategyHint": "How the destination domain is resolved before connecting: AsIs (default) sends it unresolved, UseIP… resolves with fallback, ForceIP… requires successful resolution.",
        "addressRequired": "Address is required",
        "portRequired": "Port is required",
        "optional": "optional",
        "udpOverTcp": "UDP over TCP",
        "uotVersion": "UoT version",
        "inboundTag": "Inbound tag",
        "inboundTagPlaceholder": "inbound tag used in routing rules",
        "responseType": "Response type",
        "rewriteNetwork": "Rewrite network",
        "unchanged": "(unchanged)",
        "unchangedAddress": "(unchanged) e.g. 1.1.1.1",
        "rules": "Rules",
        "ruleN": "Rule {n}",
        "action": "Action",
        "redirect": "Redirect",
        "finalRules": "Final Rules",
        "overrideXrayPrivateIp": "Override Xray's default private-IP block",
        "blockDelay": "Block delay (ms)",
        "reverseSniffing": "Reverse Sniffing",
        "reserved": "Reserved",
        "minUploadInterval": "Min upload interval (ms)",
        "maxUploadSizeBytes": "Max upload size (bytes)",
        "uplinkChunkSize": "Uplink chunk size",
        "noGrpcHeader": "No gRPC header",
        "maxConcurrency": "Max concurrency",
        "maxConnections": "Max connections",
        "maxReuseTimes": "Max reuse times",
        "maxRequestTimes": "Max request times",
        "maxReusableSecs": "Max reusable secs",
        "keepAlivePeriod": "Keep alive period",
        "authPassword": "Auth password",
        "visionTestpre": "Vision testpre",
        "serverNamePlaceholder": "server name",
        "verifyPeerName": "Verify peer name",
        "pinnedSha256": "Pinned SHA256",
        "shortId": "Short ID",
        "sockopts": "Sockopts",
        "keepAliveInterval": "Keep alive interval",
        "markFwmark": "Mark (fwmark)",
        "interface": "Interface",
        "proxyProtocol": "Proxy protocol",
        "tcpUserTimeoutMs": "TCP user timeout (ms)",
        "tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
      },
      "outbound": {
        "tag": "Tag",
        "egress": "Egress",
        "egressHint": "Run an HTTP test to show egress IP and country.",
        "outboundStatus": "Outbound Status",
        "sendThrough": "Send Through",
        "targetStrategy": "Target Strategy",
        "modeRealDelay": "Real delay",
        "testModeTooltip": "TCP: fast dial-only probe. HTTP: full request through xray. Real delay: total time including connection setup.",
        "testAll": "Test all",
        "httpStatus": "HTTP status",
        "breakdownConnect": "Proxy connect",
        "breakdownTls": "TLS via outbound",
        "breakdownTtfb": "First byte",
        "country": "Country",
        "server": "Server",
        "city": "City",
        "allCities": "All Cities",
        "moveToTop": "Move to top"
      },
      "outboundSub": {
        "manage": "Subscriptions",
        "title": "Outbound Subscriptions",
        "remark": "Remark (optional)",
        "remarkPlaceholder": "e.g. HK nodes",
        "url": "Subscription URL",
        "urlPlaceholder": "https://... (base64 list of links)",
        "tagPrefix": "Tag prefix",
        "tagPrefixPlaceholder": "hk-",
        "interval": "Update interval",
        "hours": "h",
        "minutes": "min",
        "intervalHint": "Default 10 minutes. The background job checks frequently; each subscription only re-fetches when its own interval has passed.",
        "enabled": "Enabled",
        "allowPrivate": "Allow private address",
        "allowPrivateHint": "Permit localhost / LAN / private IPs for this subscription's URL. Off by default for security — enable only for a trusted local source.",
        "prepend": "Before manual outbounds",
        "prependHint": "Place this subscription's outbounds before your manual ones, so one can become the default.",
        "preview": "Preview",
        "previewEmpty": "No outbounds found at this URL.",
        "refreshAll": "Refresh all",
        "statusOk": "OK",
        "toastUpdated": "Subscription updated",
        "addButton": "Add",
        "active": "Active subscriptions",
        "empty": "No subscriptions yet. Add one above.",
        "colRemark": "Remark",
        "colLastFetch": "Last fetch",
        "colEnabled": "Enabled",
        "auto": "auto",
        "never": "never",
        "refreshNow": "Refresh now",
        "deleteConfirm": "Delete this subscription?",
        "restartHint": "After adding or refreshing, restart Xray (or wait for the next auto-reload) to make the outbounds active.",
        "fromSubsTitle": "From outbound subscriptions (read-only)",
        "fromSubsDesc": "Imported from your active subscriptions. Manage them in the Subscriptions panel above.",
        "toastLoadFailed": "Failed to load subscriptions",
        "toastUrlRequired": "Subscription URL is required",
        "toastAdded": "Subscription added",
        "toastAddFailed": "Failed to add subscription",
        "toastRefreshed": "Refreshed",
        "toastRefreshFailed": "Refresh failed",
        "toastDeleted": "Deleted",
        "toastDeleteFailed": "Delete failed"
      },
      "pia": {
        "menu": "PIA",
        "username": "PIA username",
        "password": "PIA password",
        "account": "Account",
        "region": "Region",
        "allRegions": "All regions",
        "noServers": "No servers found for the selected country",
        "outboundAdded": "PIA outbound added",
        "outboundUpdated": "PIA outbound updated",
        "addedServers": "Added servers",
        "alreadyAdded": "This server is already in the outbound list. Use {reset} to renew its key.",
        "provisionFailed": "Could not build the PIA outbound. Try again."
      },
      "tabBalancerSettings": "Balancer Settings",
      "tabObservatory": "Observatory",
      "observatory": {
        "autoManaged": "Observers are managed automatically from your balancers. Tune how they probe below — the watched outbounds follow your balancer selectors.",
        "emptyHint": "No connection observer is active. One is added automatically when you create a Least Ping or Least Load balancer — or a Random / Round-robin balancer with a fallback — so observer-backed balancers can check outbound health before choosing a target.",
        "mixedLegacy": "This config contains both Observatory and Burst Observatory. Xray uses one global observer, so this mixed legacy state is not supported; saving balancers will normalize it to one observer.",
        "subjectSelector": "Watched Outbounds",
        "subjectSelectorDesc": "Outbound tags this observer probes. Managed automatically from your balancers.",
        "probeURL": "Probe URL",
        "probeURLDesc": "URL fetched to measure each outbound. Should return HTTP 204.",
        "probeInterval": "Probe Interval",
        "probeIntervalDesc": "How often to probe each outbound, e.g. 30s, 1m, 2h45m.",
        "enableConcurrency": "Concurrent Probing",
        "enableConcurrencyDesc": "Probe all watched outbounds at once instead of one-by-one. Faster, but more visible on the network.",
        "destination": "Probe Destination",
        "destinationDesc": "URL fetched to measure each outbound. Should return HTTP 204.",
        "connectivity": "Connectivity Check",
        "connectivityDesc": "Optional local-network check URL, tried only after the destination fails. Leave empty to skip.",
        "interval": "Probe Interval",
        "intervalDesc": "Average time between probes per outbound, e.g. 1m. Minimum 10s.",
        "timeout": "Probe Timeout",
        "timeoutDesc": "How long to wait for a probe before it counts as failed, e.g. 5s.",
        "sampling": "Sampling Count",
        "samplingDesc": "Number of recent probe results kept to score each outbound.",
        "httpMethod": "HTTP Method",
        "httpMethodDesc": "HTTP method used for probes.",
        "deleteAlsoObservatory": "This is the last balancer using the Observatory, so it will be removed too.",
        "deleteAlsoBurst": "This is the last balancer using the Burst Observatory, so it will be removed too."
      },
      "refCleanup": {
        "header": "Deleting this also updates your routing:",
        "ruleRemoved": "Rule {label} — removed (no destination left)",
        "ruleModified": "Rule {label} — kept (now uses {keeps})",
        "balancerRemoved": "Balancer {tag} — removed (no targets left)"
      },
      "balancer": {
        "balancerStrategy": "Strategy",
        "tag": "Tag",
        "tagDuplicate": "Tag already used by another balancer",
        "tagPlaceholder": "unique balancer tag",
        "selector": "Selector",
        "fallback": "Fallback",
        "fallbackBalancerHint": "Select another balancer as fallback",
        "balancerFallbackInfo": "Traffic will be routed through: Balancer → Loopback → Server → Target Balancer → Outbound. This adds an extra hop through the server, which may introduce slight delays.",
        "balancerFallbackCycle": "Cannot set this balancer as fallback — it would create a circular dependency.",
        "balancerDeleteInUse": "Cannot delete this balancer — it is used as fallback by: {names}",
        "reservedPrefix": "_bl_ prefix is reserved for internal balancer loopback objects",
        "cycleTooltip": "Cycle: {path} → (back to {start})",
        "expected": "Expected",
        "expectedPlaceholder": "optimal node count",
        "maxRtt": "Max RTT",
        "tolerance": "Tolerance",
        "baselines": "Baselines",
        "costs": "Costs",
        "costMatch": "Tag pattern",
        "costValue": "Weight",
        "costRegexp": "Regular expression match"
      },
      "wireguard": {
        "secretKey": "Secret Key",
        "publicKey": "Public Key",
        "subnetIp": "Subnet",
        "subnetCidr": "Subnet CIDR",
        "allowedIPs": "Allowed IPs",
        "endpoint": "Endpoint",
        "domainStrategy": "Domain Strategy"
      },
      "amneziawg": {
        "privateKey": "Private Key",
        "publicKey": "Public Key",
        "subnetIp": "Subnet",
        "subnetCidr": "Subnet CIDR",
        "mtu": "MTU",
        "primaryDns": "Primary DNS",
        "secondaryDns": "Secondary DNS",
        "externalInterface": "External Interface",
        "externalInterfaceHint": "Host NIC for NAT (PostUp/PostDown). Leave empty to auto-detect.",
        "ipv6Enabled": "Enable IPv6",
        "ipv6Subnet": "IPv6 Subnet",
        "ipv6SubnetHint": "e.g. fd86:ea04:1115::/64. Required when IPv6 is enabled.",
        "ipv6ExternalInterface": "IPv6 External Interface",
        "ipv6ExternalInterfaceHint": "Host NIC each peer's IPv6 address is aliased onto. Leave empty to reuse External Interface.",
        "obfuscation": "Obfuscation parameters",
        "regenerateObfuscation": "Regenerate",
        "jc": "Jc (junk packet count)",
        "jmin": "Jmin (junk packet min size)",
        "jmax": "Jmax (junk packet max size)",
        "s1": "S1 (init packet junk size)",
        "s2": "S2 (response packet junk size)",
        "s3": "S3 (cookie reply padding)",
        "s4": "S4 (transport packet padding)",
        "h1": "H1 (magic header)",
        "h2": "H2 (magic header)",
        "h3": "H3 (magic header)",
        "h4": "H4 (magic header)",
        "hHint": "A single integer or a low-high range. Leave empty for the classic 1/2/3/4 default.",
        "i1": "I1 (signature packet)",
        "i1Hint": "Optional signature packet. Leave empty to omit it.",
        "i2": "I2 (signature packet)",
        "i3": "I3 (signature packet)",
        "i4": "I4 (signature packet)",
        "i5": "I5 (signature packet)",
        "headerProtectionKey": "HeaderProtectionKey (header protection)",
        "headerProtectionKeyHint": "Base64 32-byte key; must match on every client config. Leave empty to disable header protection.",
        "contentPaddingAddition": "ContentPaddingAddition (content padding)",
        "contentPaddingAdditionHint": "A single integer or low-high byte range added to content packets. Leave empty to disable.",
        "rekeyAfterTime": "RekeyAfterTime (seconds)",
        "rekeyTimeout": "RekeyTimeout (seconds)",
        "rejectAfterTime": "RejectAfterTime (seconds)",
        "keepaliveTimeout": "KeepaliveTimeout (seconds)",
        "maxHandshakeAttempts": "MaxHandshakeAttempts",
        "timingRangeHint": "A single integer or a low-high range. Leave empty to keep the WireGuard default.",
        "maxHandshakeAttemptsHint": "Handshake retries before giving up. Leave empty for the default.",
        "randomTrailers": "RandomTrailers",
        "randomTrailersHint": "Appends random bytes to every packet. Both ends need AmneziaWG 3.1+.",
        "disableCookies": "DisableCookies",
        "disableCookiesHint": "Never send cookie replies — removes a DPI fingerprint; weakens flood mitigation."
      },
      "tun": {
        "userLevel": "User Level"
      },
      "nord": {
        "accessToken": "Access token",
        "privateKey": "Private key",
        "noServers": "No servers found for the selected country",
        "noPublicKey": "Selected server does not advertise a NordLynx public key.",
        "outboundAdded": "NordVPN outbound added",
        "outboundUpdated": "NordVPN outbound updated"
      },
      "warp": {
        "changeIp": "Change IP",
        "changeIpSuccess": "WARP IP changed successfully!",
        "autoUpdateIp": "Auto Update IP Address",
        "intervalDays": "Interval (Days)",
        "intervalDesc": "0 to disable. Changes IP address automatically.",
        "licenseError": "Failed to set WARP license.",
        "fetchFirst": "Fetch the WARP config first.",
        "createAccount": "Create WARP account",
        "accessToken": "Access token",
        "deviceId": "Device ID",
        "licenseKey": "License key",
        "privateKey": "Private key",
        "deleteAccount": "Delete account",
        "settings": "Settings",
        "licenseKeyLabel": "WARP / WARP+ license key",
        "key": "Key",
        "keyPlaceholder": "26-char WARP+ key",
        "accountInfo": "Account info",
        "deviceName": "Device name",
        "deviceModel": "Device model",
        "deviceEnabled": "Device enabled",
        "accountType": "Account type",
        "role": "Role",
        "warpPlusData": "WARP+ data",
        "quota": "Quota",
        "usage": "Usage",
        "addOutbound": "Add outbound"
      },
      "dns": {
        "enable": "Enable DNS",
        "enableDesc": "Enable built-in DNS server",
        "tag": "DNS Inbound Tag",
        "tagDesc": "This tag will be available as an Inbound tag in routing rules.",
        "clientIp": "Client IP",
        "clientIpDesc": "Used to notify the server of the specified IP location during DNS queries",
        "disableCache": "Disable cache",
        "disableCacheDesc": "Disables DNS caching",
        "disableFallback": "Disable Fallback",
        "disableFallbackDesc": "Disables fallback DNS queries",
        "disableFallbackIfMatch": "Disable Fallback If Match",
        "disableFallbackIfMatchDesc": "Disables fallback DNS queries when the matching domain list of the DNS server is hit",
        "enableParallelQuery": "Enable Parallel Query",
        "enableParallelQueryDesc": "Enable parallel DNS queries to multiple servers for faster resolution",
        "strategy": "Query Strategy",
        "strategyDesc": "Overall strategy to resolve domain names",
        "add": "Add Server",
        "edit": "Edit Server",
        "domains": "Domains",
        "expectIPs": "Expect IPs",
        "unexpectIPs": "Unexpected IPs",
        "useSystemHosts": "Use System Hosts",
        "useSystemHostsDesc": "Use the operating system's hosts file",
        "serveStale": "Serve Stale",
        "serveStaleDesc": "Return expired cached results while refreshing in the background",
        "serveExpiredTTL": "Serve Expired TTL",
        "serveExpiredTTLDesc": "Validity (seconds) of stale cache entries; 0 = never expire",
        "timeoutMs": "Timeout (ms)",
        "skipFallback": "Skip Fallback",
        "finalQuery": "Final Query",
        "hosts": "Hosts",
        "hostsAdd": "Add Host",
        "hostsEmpty": "No host overrides defined",
        "hostsDomain": "Domain (e.g. domain:example.com)",
        "hostsValues": "IP or domain — type and press Enter",
        "usePreset": "Use Preset",
        "dnsPresetTitle": "DNS Presets",
        "dnsPresetFamily": "Family",
        "clearAll": "Delete All",
        "clearAllTitle": "Delete all DNS servers?",
        "clearAllConfirm": "This removes every DNS server from the list. This cannot be undone.",
        "dnsLeakWarning": "DNS can leak through localhost, plain UDP/TCP, local-mode DoH/DoQ, fallback queries, or EDNS client IP. Use routed DoH, hosts pins, and disable fallback when privacy matters."
      },
      "fakedns": {
        "add": "Add Fake DNS",
        "ipPool": "IP Pool Subnet",
        "poolSize": "Pool Size"
      },
      "defaultOutbound": "Default Outbound",
      "defaultOutboundDesc": "Traffic that does not match any routing rule uses this outbound (Xray uses the first outbound in the list)."
    }
  },
  "tgbot": {
    "keyboardClosed": "❌ Custom keyboard closed!",
    "noResult": "❗ No result!",
    "noQuery": "❌ Query not found! Please use the command again!",
    "wentWrong": "❌ Something went wrong!",
    "noIpRecord": "❗ No IP Record!",
    "noInbounds": "❗ No inbound found!",
    "unlimited": "♾ Unlimited(Reset)",
    "add": "Add",
    "month": "Month",
    "months": "Months",
    "days": "Days",
    "hours": "Hours",
    "minutes": "Minutes",
    "unknown": "Unknown",
    "inbounds": "Inbounds",
    "clients": "Clients",
    "offline": "🔴 Offline",
    "online": "🟢 Online",
    "commands": {
      "unknown": "❗ Unknown command.",
      "pleaseChoose": "👇 Please choose:\r\n",
      "help": "🤖 Welcome to this bot! It's designed to offer specific data from the web panel and allows you to make modifications as needed.\r\n\r\n",
      "start": "👋 Hello <i>{{ .Firstname }}</i>.\r\n",
      "welcome": "🤖 Welcome to <b>{{ .Hostname }}</b> management bot.\r\n",
      "status": "✅ Bot is OK!",
      "usage": "❗ Please provide a text to search!",
      "getID": "🆔 Your ID: <code>{{ .ID }}</code>",
      "helpAdminCommands": "To restart Xray Core:\r\n<code>/restart</code>\r\n\r\nTo search for a client email:\r\n<code>/usage [Email]</code>\r\n\r\nTo search for inbounds (with client stats):\r\n<code>/inbound [Remark]</code>\r\n\r\nTelegram Chat ID:\r\n<code>/id</code>",
      "helpClientCommands": "To search for statistics, use the following command:\r\n\r\n<code>/usage [Email]</code>\r\n\r\nTelegram Chat ID:\r\n<code>/id</code>",
      "restartUsage": "\r\n\r\n<code>/restart</code>",
      "restartSuccess": "✅ Operation successful!",
      "restartFailed": "❗ Error in operation.\r\n\r\n<code>Error: {{ .Error }}</code>.",
      "xrayNotRunning": "❗ Xray Core is not running.",
      "startDesc": "Show the main menu",
      "helpDesc": "Bot help",
      "statusDesc": "Check bot status",
      "idDesc": "Show your Telegram ID",
      "usageDesc": "Show client usage: /usage email",
      "inboundDesc": "Search inbounds: /inbound remark (admin)",
      "restartDesc": "Restart Xray core (admin)",
      "clearallDesc": "Reset all clients' traffic (admin)"
    },
    "messages": {
      "cpuThreshold": "CPU Load {{ .Percent }}% exceeds the threshold of {{ .Threshold }}%",
      "selectUserFailed": "❌ Error in user selection!",
      "userSaved": "✅ Telegram User saved.",
      "loginSuccess": "✅ Logged in to the panel successfully.\r\n",
      "loginFailed": "❗️Login attempt to the panel failed.\r\n",
      "report": "🕰 Scheduled Reports: {{ .RunTime }}\r\n",
      "datetime": "⏰ Date&Time: {{ .DateTime }}\r\n",
      "hostname": "💻 Host: {{ .Hostname }}\r\n",
      "version": "🚀 3X-UI Version: {{ .Version }}\r\n",
      "xrayVersion": "📡 Xray Version: {{ .XrayVersion }}\r\n",
      "ipv6": "🌐 IPv6: {{ .IPv6 }}\r\n",
      "ipv4": "🌐 IPv4: {{ .IPv4 }}\r\n",
      "ip": "🌐 IP: {{ .IP }}\r\n",
      "ips": "🔢 IPs:\r\n{{ .IPs }}\r\n",
      "serverUpTime": "⏳ Uptime: {{ .UpTime }} {{ .Unit }}\r\n",
      "serverLoad": "📈 System Load: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n",
      "serverMemory": "📋 RAM: {{ .Current }}/{{ .Total }}\r\n",
      "tcpCount": "🔹 TCP: {{ .Count }}\r\n",
      "udpCount": "🔸 UDP: {{ .Count }}\r\n",
      "traffic": "🚦 Traffic: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n",
      "xrayStatus": "ℹ️ Status: {{ .State }}\r\n",
      "username": "👤 Username: {{ .Username }}\r\n",
      "reason": "❗️ Reason: {{ .Reason }}\r\n",
      "time": "⏰ Time: {{ .Time }}\r\n",
      "inbound": "📍 Inbound: {{ .Remark }}\r\n",
      "port": "🔌 Port: {{ .Port }}\r\n",
      "expire": "📅 Expire Date: {{ .Time }}\r\n",
      "expireIn": "📅 Expire In: {{ .Time }}\r\n",
      "active": "💡 Active: {{ .Enable }}\r\n",
      "enabled": "🚨 Enabled: {{ .Enable }}\r\n",
      "online": "🌐 Connection status: {{ .Status }}\r\n",
      "lastOnline": "🔙 Last online: {{ .Time }}\r\n",
      "email": "📧 Email: {{ .Email }}\r\n",
      "upload": "🔼 Upload: ↑{{ .Upload }}\r\n",
      "download": "🔽 Download: ↓{{ .Download }}\r\n",
      "total": "📊 Total: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
      "TGUser": "👤 Telegram User: {{ .TelegramID }}\r\n",
      "exhaustedCount": "🚨 Exhausted {{ .Type }} count:\r\n",
      "onlinesCount": "🌐 Online Clients: {{ .Count }}\r\n",
      "disabled": "🛑 Disabled: {{ .Disabled }}\r\n",
      "depleteSoon": "🔜 Deplete Soon: {{ .Deplete }}\r\n\r\n",
      "backupTime": "🗄 Backup Time: {{ .Time }}\r\n",
      "refreshedOn": "\r\n📋🔄 Refreshed On: {{ .Time }}\r\n\r\n",
      "yes": "✅ Yes",
      "no": "❌ No",
      "received_email": "📧📥 Email updated.",
      "received_comment": "💬📥 Comment updated.",
      "email_prompt": "📧 Default Email: {{ .ClientEmail }}\n\nEnter your email.",
      "comment_prompt": "💬 Default Comment: {{ .ClientComment }}\n\nEnter your comment.",
      "cancel": "❌ Process Canceled! \n\nYou can /start again anytime. 🔄",
      "error_add_client": "⚠️ Error:\n\n {{ .error }}",
      "using_default_value": "Okay, I'll stick with the default value. 😊",
      "incorrect_input": "Your input is not valid.\nThe phrases should be continuous without spaces.\nCorrect example: aaaaaa\nIncorrect example: aaa aaa 🚫",
      "AreYouSure": "Are you sure? 🤔",
      "SuccessResetTraffic": "📧 Email: {{ .ClientEmail }}\n🏁 Result: ✅ Success",
      "FailedResetTraffic": "📧 Email: {{ .ClientEmail }}\n🏁 Result: ❌ Failed \n\n🛠️ Error: [ {{ .ErrorMessage }} ]",
      "FinishProcess": "🔚 Traffic reset process finished for all clients.",
      "eventOutboundDown": "Outbound {{ .Tag }} is DOWN",
      "eventOutboundUp": "Outbound {{ .Tag }} is UP",
      "eventErrorDetail": "Error: {{ .Error }}",
      "eventDelayDetail": "Delay: {{ .Delay }}ms",
      "eventXrayCrash": "Xray CRASHED",
      "eventXrayCrashError": "Error: {{ .Error }}",
      "eventNodeDown": "Node {{ .Name }} is DOWN",
      "eventNodeUp": "Node {{ .Name }} is UP",
      "eventLoginFallback": "Login failed from {{ .Source }}",
      "memoryThreshold": "Memory Load {{ .Percent }}% exceeds the threshold of {{ .Threshold }}%"
    },
    "buttons": {
      "closeKeyboard": "❌ Close Keyboard",
      "cancel": "❌ Cancel",
      "cancelReset": "❌ Cancel Reset",
      "cancelIpLimit": "❌ Cancel IP Limit",
      "confirmResetTraffic": "✅ Confirm Reset Traffic?",
      "confirmClearIps": "✅ Confirm Clear IPs?",
      "confirmRemoveTGUser": "✅ Confirm Remove Telegram User?",
      "confirmToggle": "✅ Confirm Enable/Disable User?",
      "dbBackup": "Get DB Backup",
      "serverUsage": "Server Usage",
      "getInbounds": "Get Inbounds",
      "depleteSoon": "Deplete Soon",
      "clientUsage": "Get Usage",
      "onlines": "Online Clients",
      "commands": "Commands",
      "refresh": "🔄 Refresh",
      "clearIPs": "❌ Clear IPs",
      "removeTGUser": "❌ Remove Telegram User",
      "selectTGUser": "👤 Select Telegram User",
      "selectOneTGUser": "👤 Select a Telegram User:",
      "resetTraffic": "📈 Reset Traffic",
      "resetExpire": "📅 Change Expiry Date",
      "ipLog": "🔢 IP Log",
      "ipLimit": "🔢 IP Limit",
      "setTGUser": "👤 Set Telegram User",
      "toggle": "🔘 Enable / Disable",
      "custom": "🔢 Custom",
      "confirmNumber": "✅ Confirm: {{ .Num }}",
      "confirmNumberAdd": "✅ Confirm adding: {{ .Num }}",
      "limitTraffic": "🚧 Traffic Limit",
      "getBanLogs": "Get Ban Logs",
      "allClients": "All Clients",
      "addClient": "Add Client",
      "submitDisable": "Submit As Disable ☑️",
      "submitEnable": "Submit As Enable ✅",
      "use_default": "🏷️ Use default",
      "change_email": "⚙️📧 Email",
      "change_comment": "⚙️💬 Comment",
      "ResetAllTraffics": "Reset All Traffic",
      "SortedTrafficUsageReport": "Sorted Traffic Usage Report"
    },
    "answers": {
      "successfulOperation": "✅ Operation successful!",
      "errorOperation": "❗ Error in operation.",
      "getInboundsFailed": "❌ Failed to get inbounds.",
      "getClientsFailed": "❌ Failed to get clients.",
      "canceled": "❌ {{ .Email }}: Operation canceled.",
      "clientRefreshSuccess": "✅ {{ .Email }}: Client refreshed successfully.",
      "IpRefreshSuccess": "✅ {{ .Email }}: IPs refreshed successfully.",
      "TGIdRefreshSuccess": "✅ {{ .Email }}: Client's Telegram User refreshed successfully.",
      "resetTrafficSuccess": "✅ {{ .Email }}: Traffic reset successfully.",
      "setTrafficLimitSuccess": "✅ {{ .Email }}: Traffic limit saved successfully.",
      "expireResetSuccess": "✅ {{ .Email }}: Expire days reset successfully.",
      "resetIpSuccess": "✅ {{ .Email }}: IP limit {{ .Count }} saved successfully.",
      "clearIpSuccess": "✅ {{ .Email }}: IPs cleared successfully.",
      "getIpLog": "✅ {{ .Email }}: Get IP Log.",
      "getUserInfo": "✅ {{ .Email }}: Get Telegram User Info.",
      "removedTGUserSuccess": "✅ {{ .Email }}: Telegram User removed successfully.",
      "enableSuccess": "✅ {{ .Email }}: Enabled successfully.",
      "disableSuccess": "✅ {{ .Email }}: Disabled successfully.",
      "askToAddUserId": "Your configuration is not found!\r\nPlease ask your admin to use your Telegram ChatID in your configuration(s).\r\n\r\nYour ChatID: <code>{{ .TgUserID }}</code>",
      "chooseClient": "Choose a Client for Inbound {{ .Inbound }}",
      "chooseInbound": "Choose an Inbound"
    }
  },
  "email": {
    "labelStatus": "Status",
    "labelOutbound": "Outbound",
    "labelNode": "Node",
    "labelError": "Error",
    "labelDelay": "Delay",
    "labelUsername": "Username",
    "labelIP": "IP",
    "labelReason": "Reason",
    "labelSource": "Source",
    "statusCrashed": "CRASHED",
    "statusHigh": "HIGH",
    "statusSuccess": "SUCCESS",
    "statusFailed": "FAILED",
    "statusDown": "DOWN",
    "statusUp": "UP"
  }
}
