Files
3x-ui-agent/internal/web/translation/en-US.json
T
Rogue 29de9761c8
CI / go-test (push) Waiting to run
CI / postgres-durable-first (push) Waiting to run
CI / codegen (push) Waiting to run
CI / govulncheck (push) Waiting to run
CI / race (push) Waiting to run
CI / fuzz-smoke (push) Waiting to run
CI / golangci (push) Waiting to run
CI / frontend (push) Waiting to run
Docs CI / build (push) Waiting to run
Docs Deploy (GitHub Pages) / build (push) Waiting to run
Docs Deploy (GitHub Pages) / deploy (push) Blocked by required conditions
Release 3X-UI / build (386) (push) Waiting to run
Release 3X-UI / build (amd64) (push) Waiting to run
Release 3X-UI / build (arm64) (push) Waiting to run
Release 3X-UI / build (armv5) (push) Waiting to run
Release 3X-UI / build (armv6) (push) Waiting to run
Release 3X-UI / build (armv7) (push) Waiting to run
Release 3X-UI / build (s390x) (push) Waiting to run
Release 3X-UI / Build for Windows (amd64) (push) Waiting to run
Release 3X-UI / Publish rolling dev release (push) Blocked by required conditions
CodeQL Advanced / Analyze (go) (push) Waiting to run
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
V2.0.1: listen override fix, sing-box core fetch, probe settings page + fast report, spx removal, core mem env
- 0: sing-box gen overrides fragment listen/port from the inbound row
  (empty listen -> "::"), Update/Add recompute the stored fragment;
  non-loopback E2E against the real core binary.
- 1: agent fetches the sing-box core from the Gitea release when
  missing, self-checks it, and only then latches the switch.
- 2: node list shows the sing-box core version (heartbeat field,
  persisted on the node row), xray version as fallback.
- 3: public-page fallback returns 404 to anonymous visitors when the
  page is disabled.
- 4: settings restart hint bar removed, dead i18n keys cleaned.
- 5: two PUT calls missing JSON headers fixed (audit: only those two),
  batch probe-task creation endpoint + UI.
- 6: cf-probe retirement card and coverage pipeline removed.
- 7: generated vless links no longer carry spx (panel export + sub);
  parser still accepts spx; golden fixtures updated.
- probe batch: dedicated probe settings tab (public-page settings,
  tasks, per-node meta), retention_days editable, per-node traffic
  calibration + stat-interface pinning, runtime metrics split into a
  lightweight fast report (default 3s, 1-60s adjustable).
- 8: sing-box core processes start with GOMEMLIMIT=32MiB, GOGC=50.
- 9: dead /getTwoFactorEnable docs entries removed (frontend call and
  contract entry already gone at base; verified by grep).
2026-10-23 07:53:11 +00:00

1642 lines
87 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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",
"install": "Install",
"clients": "Clients",
"usage": "Usage",
"remained": "Remaining",
"security": "Security",
"somethingWentWrong": "Something went wrong",
"subscription": {
"title": "Subscription info",
"subId": "Subscription ID",
"email": "Email",
"status": "Status",
"downloaded": "Downloaded",
"uploaded": "Uploaded",
"expiry": "Expiry",
"totalQuota": "Total quota",
"active": "Active",
"inactive": "Inactive",
"unlimited": "Unlimited",
"noExpiry": "No expiry",
"copyAllConfigs": "Copy All Configs",
"copyAllConfigsCopied": "All configs copied",
"individualLinks": "Individual links"
},
"menu": {
"theme": "Theme",
"dashboard": "Overview",
"inbounds": "Inbounds",
"clients": "Clients",
"nodes": "Nodes",
"hosts": "Hosts",
"settings": "Panel Settings",
"donate": "Donate",
"docs": "Documentation",
"openMenu": "Open menu",
"pinSidebar": "Pin sidebar",
"unpinSidebar": "Unpin sidebar"
},
"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",
"updatePanel": "Update Panel",
"panelUpdateDesc": "This will update L-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",
"connectionCount": "Connection Stats",
"ipAddresses": "IP Addresses",
"toggleIpVisibility": "Toggle visibility of the IP",
"overallSpeed": "Overall Speed",
"upload": "Upload",
"download": "Download",
"sent": "Sent",
"received": "Received",
"panelUpdateDialog": "Do you really want to update the panel?",
"panelUpdateDialogDesc": "This will update L-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.",
"dontRefresh": "Installation is in progress, please do not refresh this page",
"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.",
"free": "free",
"openSockets": "open sockets",
"throughputSub": "Interface total",
"healthWarm": "{list} — running warm",
"healthCritical": "{list} — critical",
"panel": "Panel",
"threads": "Threads",
"uptime": "Uptime",
"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…",
"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",
"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",
"forwardingTab": "Forwarding",
"forwarding": {
"mode": "Forwarding",
"direct": "Direct",
"forward": "Forward (entry → exit)",
"landing": "Landing",
"managed": "Managed landing",
"manual": "Manual endpoint",
"target": "Landing inbound",
"targetPlaceholder": "Pick a SOCKS (mixed) inbound",
"targetDisabled": "disabled",
"address": "Landing address",
"port": "Exit port",
"protocol": "Entry → exit protocol",
"username": "SOCKS5 username",
"password": "Landing password",
"importLink": "Import from link",
"importPlaceholder": "socks5://user:pass@host:port",
"importApply": "Import",
"importFailed": "Could not parse that link",
"help": "Applies when this inbound is deployed to an agent node: on every config pull the panel compiles this forwarding into a dedicated outbound plus a routing rule for that agent. A managed landing's address and credentials are resolved from the chosen inbound at build time."
},
"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.",
"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",
"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"
},
"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",
"coreVersion": "Core 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.",
"updateAgent": "Update Agent",
"updateAgentConfirmContent": "The agent on this node will download the latest release, verify it, and restart onto it. If the update fails, the node keeps running the current version.",
"agentInstallCommand": "Install Command",
"agentTokenNotStored": "This node's token is not stored on the master yet, so the command below has no token. The token is saved on the node itself in /etc/x-ui/agent.json; it will be filled in here automatically after the agent's next authenticated request.",
"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",
"nodeType": "Node Type",
"nodeTypeTraditional": "Traditional Panel Node",
"nodeTypeAgent": "Agent Lightweight Node",
"agentHint": "Agent nodes connect out to the master; no address, port or API token needed. An install command is generated on creation.",
"agentTokenTitle": "Agent Node Setup",
"agentTokenCreated": "Node {{name}} created successfully",
"agentTokenHint": "Copy the command below and run it on the node machine. This token is shown only once!",
"agentTokenInstructions": "The command downloads the installer, configures the master URL and token. The node comes online in ~30s.",
"agentTokenCopied": "Install command copied",
"agentTokenCopyFailed": "Copy failed, please copy manually",
"copyToken": "Copy Install Command",
"agentMasterUrlHint": "Master URL (used by agent to reach the master; change to public address if behind proxy):",
"agentMasterUrlRequired": "Master URL is empty — enter the master address first; the install command is generated only then.",
"probe": {
"title": "Public status page",
"hint": "Display and plan data for the public status page. Saving takes effect immediately.",
"public": "Show on public page",
"publicRemark": "Public remark",
"group": "Group",
"sort": "Sort order",
"price": "Price",
"currency": "Currency",
"billingCycle": "Billing cycle",
"cycleOnce": "One-time",
"cycleMonthly": "Monthly",
"cycleQuarterly": "Quarterly",
"cycleSemiannual": "Semiannual",
"cycleYearly": "Yearly",
"cycleBiennial": "Biennial",
"cycleTriennial": "Triennial",
"expiresAt": "Expires on (YYYY-MM-DD)",
"trafficLimit": "Traffic limit (GB, 0 = unlimited)",
"trafficMode": "Traffic counting",
"modeSum": "Up + down",
"modeUp": "Up only",
"modeDown": "Down only",
"modeMax": "Larger of up/down",
"trafficResetDay": "Traffic reset day",
"notify": "Expiry / traffic alerts",
"countryPin": "Country pin (e.g. JP)",
"ipv4Pin": "IPv4 pin",
"ipv6Pin": "IPv6 pin",
"calUp": "Uplink correction (GB)",
"calDown": "Downlink correction (GB)",
"calHint": "Corrections are added to the counted traffic (negative values subtract) and apply to panel statistics, the public page and traffic alerts.",
"statIface": "Counted interface",
"movedHint": "Probe metadata (pricing, traffic limits, calibration…) is edited on the probe settings page.",
"goSettings": "Open probe settings",
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
},
"probeTasks": {
"title": "Probe tasks",
"intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
"loading": "Loading…",
"empty": "No probe tasks yet. Add one to start measuring latency.",
"add": "Add probe",
"name": "Name",
"target": "Target",
"targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
"interval": "Interval (s)",
"region": "Region",
"ungrouped": "Ungrouped",
"autoJoin": "Auto-join",
"autoJoinOn": "Auto",
"nodes": "Nodes",
"nodesPlaceholder": "Assign nodes",
"actions": "Actions",
"edit": "Edit",
"delete": "Delete",
"deleteConfirm": "Delete this probe and its history?",
"save": "Save",
"cancel": "Cancel",
"saved": "Probe task saved",
"deleted": "Probe task deleted",
"loadFailed": "Failed to load probe tasks",
"saveFailed": "Operation failed",
"batchTitle": "Batch add",
"batchPlaceholder": "One target per line, or comma-separated — host:port, e.g. 1.1.1.1:443",
"batchSubmit": "Add all",
"batchHint": "The shared fields apply to every target; leave the name empty to name each task after its target.",
"batchEmpty": "Enter at least one target",
"batchDone": "Added {{count}} probe tasks"
}
},
"settings": {
"probeThemes": {
"title": "Theme store",
"settingsTitle": "Public status page",
"publicPage": "Public page",
"publicPageHint": "When off, the status page and its API answer only to the logged-in panel.",
"siteName": "Site name",
"site": "Site URL",
"githubProxy": "GitHub proxy",
"githubProxyHint": "Prefix used when downloading theme packages from GitHub; leave empty to connect directly.",
"favicon": "Site icon (favicon)",
"touchIcon": "Touch icon (apple-touch-icon)",
"chooseImage": "Choose image",
"iconHint": "PNG, ICO, SVG, WebP, JPEG or GIF, at most 20 KiB; larger photos are scaled down. The icon follows the site across theme switches.",
"iconTooLarge": "The image cannot be fitted into 20 KiB",
"saved": "Saved",
"saveFailed": "Operation failed",
"uploadInstall": "Upload theme.tar.gz",
"installed": "Theme \"{{name}}\" installed",
"uploadFailed": "Upload failed",
"installByUrl": "Install by address",
"installByUrlPlaceholder": "Theme GitHub repository, e.g. https://github.com/author/repo",
"installFailed": "Install failed",
"inUse": "In use",
"use": "Use",
"builtin": "Built-in",
"deleteConfirm": "Delete this theme?",
"updatedTo": "Updated to {{version}}",
"alreadyLatest": "Already the latest version",
"config": "Theme settings"
},
"probe": {
"title": "Probe settings",
"retentionDays": "History retention (days)",
"retentionHint": "How long probe history (metrics and latency) is kept.",
"fastInterval": "Fast report interval",
"fastIntervalHint": "How often agents report runtime metrics; everything else still rides the 60 s heartbeat.",
"metaTitle": "Per-node probe metadata",
"metaNodePlaceholder": "Select a node"
},
"probeNotify": {
"notifyTitle": "Notifications",
"notifyHint": "Offline, traffic and expiry alerts, delivered to the channels below (Telegram reuses the panel bot settings).",
"grace": "Offline grace (minutes)",
"graceHint": "An alert fires only after reporting has stopped for this long; a recovery inside the grace stays silent.",
"trafficPct": "Traffic alert threshold (%)",
"trafficHint": "Alerts once at this percentage and once more at 100%, once per billing period each; 0 disables traffic alerts.",
"expiryDays": "Expiry alert (days)",
"expiryHint": "A daily digest of nodes expiring within this many days; online nodes roll over automatically by billing cycle; 0 disables.",
"loginAlert": "Panel sign-in alerts",
"telegramChannel": "Telegram channel",
"telegramHint": "The token and chat IDs are configured in the Telegram bot settings.",
"webhookChannel": "Webhook channel",
"configured": "Configured",
"notConfigured": "Not configured",
"telegramText": "Telegram text template",
"webhookUrl": "Webhook URL",
"webhookHeaders": "Headers (one Name: value per line)",
"webhookBody": "Body template (JSON)",
"secretSet": "Set (leave empty to keep)",
"clearSecret": "Clear",
"templateHint": "Placeholders: {{title}} {{message}} {{node}} {{event}} {{time}} {{count}} {{site}}",
"testSend": "Send a test alert",
"testSent": "Test alert sent: {{channels}}"
},
"defaultTag": "Default",
"title": "Panel Settings",
"save": "Save",
"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.",
"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)",
"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.",
"datepickerPlaceholder": "Select date",
"oldUsername": "Current Username",
"currentPassword": "Current Password",
"newUsername": "New Username",
"newPassword": "New Password",
"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)",
"timeZone": "Time Zone",
"timeZoneDesc": "Scheduled tasks will run based on this time zone.",
"subSettings": "Subscription",
"subEnable": "Subscription Service",
"subEnableDesc": "Enable/Disable the subscription service.",
"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}}.",
"subHideSettings": "Hide server settings",
"subHideSettingsDesc": "Hide the ability to view and edit server configurations in the VPN client. (Only for Happ)",
"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.Leave empty to omit the port from subscription links (the service still listens on the default port 2096).",
"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.",
"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.",
"subFormats": {
"packets": "Packets",
"length": "Length",
"interval": "Interval",
"maxSplit": "Max split",
"noises": "Noises",
"noiseItem": "Noise №{n}",
"type": "Type",
"packet": "Packet",
"delayMs": "Delay (ms)",
"applyTo": "Apply to",
"concurrency": "Concurrency",
"xudpConcurrency": "xudp concurrency",
"xudpUdp443": "xudp UDP 443"
},
"mux": "Mux",
"muxSett": "Mux Settings",
"certs": "Certificates",
"dateAndTime": "Date and Time",
"proxyAndServer": "Proxy and Server",
"intervals": "Intervals",
"information": "Information",
"profile": "Profile",
"language": "Language",
"security": {
"admin": "Admin credentials",
"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"
},
"eventNodeDown": "Down",
"eventNodeUp": "Up",
"eventCPUHigh": "CPU high (%)",
"requestFailed": "Request failed",
"eventLoginAttempt": "Login attempt",
"eventMemoryHigh": "Memory high (%)",
"validation": {
"pathLeadingSlash": "Path must start with /"
},
"secretClear": "Clear",
"secretClearUndo": "Undo clear",
"TGBotSettings": "Telegram Bot",
"notifications": "Notifications",
"notifyTime": {
"custom": "Custom (crontab)",
"daily": "@daily — every day at 00:00",
"every": "@every — repeat at an interval",
"hourly": "@hourly — every hour",
"hours": "Hours",
"interval": "Interval",
"minutes": "Minutes",
"monthly": "@monthly — every month",
"seconds": "Seconds",
"unit": "Unit",
"weekly": "@weekly — every week"
},
"telegramAPIServer": "Telegram API Server",
"telegramAPIServerDesc": "The Telegram API server to use. Leave blank to use the default server.",
"telegramBotEnable": "Enable Telegram Bot",
"telegramBotEnableDesc": "Enables the Telegram bot.",
"telegramBotLanguage": "Telegram Bot Language",
"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.",
"telegramToken": "Telegram Token",
"telegramTokenConfigured": "Configured; leave blank to keep current token.",
"telegramTokenDesc": "The Telegram bot token obtained from '{'@'}BotFather'.",
"telegramTokenPlaceholder": "Configured - enter a new token to replace",
"testTgBot": "Send Test Message",
"tgBotNotEnabled": "Telegram bot is not enabled",
"tgBotNotRunning": "Telegram bot not running",
"tgEventBusNotify": "Telegram Event Notifications",
"tgEventBusNotifyDesc": "Select which events trigger Telegram notifications",
"tgNotifyBackup": "Database Backup",
"tgNotifyBackupDesc": "Send a database backup file with a report.",
"tgTestFailed": "Telegram test failed",
"tgTestSuccess": "Test message sent to Telegram",
"trafficStatsInboundUplink": "Inbound Upload Accounting",
"trafficStatsInboundDownlink": "Inbound Download Accounting",
"trafficStatsOutboundUplink": "Outbound Upload Accounting",
"trafficStatsOutboundDownlink": "Outbound Download Accounting",
"trafficStatsDesc": "Applies to the whole network. A direction pair (inbound or outbound) is counted only while both of its switches are on. While counting is off, that traffic is never recorded and the gap is permanent — it is not backfilled later — and expiry / over-quota auto-disable loses the data it relies on."
},
"xray": {
"basicTemplate": "Basics",
"advancedTemplate": "Advanced",
"Outbounds": "Outbounds",
"Balancers": "Balancers",
"rules": {
"inbound": "Inbound"
},
"outboundForm": {
"minUploadInterval": "Min upload interval (ms)",
"maxConcurrency": "Max concurrency",
"maxConnections": "Max connections",
"maxReuseTimes": "Max reuse times",
"maxRequestTimes": "Max request times",
"maxReusableSecs": "Max reusable secs",
"keepAlivePeriod": "Keep alive period"
},
"wireguard": {
"secretKey": "Secret Key",
"publicKey": "Public Key",
"subnetIp": "Subnet",
"subnetCidr": "Subnet CIDR",
"allowedIPs": "Allowed IPs",
"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"
}
}
},
"tgbot": {
"noIpRecord": "❗ No IP Record!",
"keyboardClosed": "❌ Custom keyboard closed!",
"noResult": "❗ No result!",
"noQuery": "❌ Query not found! Please use the command again!",
"wentWrong": "❌ Something went wrong!",
"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",
"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>",
"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": "🚀 L-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.",
"eventErrorDetail": "Error: {{ .Error }}",
"eventDelayDetail": "Delay: {{ .Delay }}ms",
"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"
}
}
}