mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-05-31 10:14:15 +00:00
Client emails containing a slash broke the path-param routes (edit/delete/view returned 404 / "client not found"), leaving stale records that could only be cleared with manual SQLite edits. Validate the email on both the backend (Create + Update, which also covers the bulk paths) and the frontend (Zod) so these characters are rejected at save time with a clear, localized message across all 13 locales. Closes #4695
1548 lines
75 KiB
JSON
1548 lines
75 KiB
JSON
{
|
||
"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",
|
||
"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",
|
||
"useIPv4ForHost": "Use IPv4 for host",
|
||
"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",
|
||
"getVersion": "Get Version",
|
||
"install": "Install",
|
||
"clients": "Clients",
|
||
"usage": "Usage",
|
||
"twoFactorCode": "Code",
|
||
"remained": "Remaining",
|
||
"security": "Security",
|
||
"secAlertTitle": "Security Alert",
|
||
"secAlertSsl": "This connection is not secure. Please avoid entering sensitive information until TLS is activated for data protection.",
|
||
"secAlertConf": "Certain settings are vulnerable to attacks. It is recommended to reinforce security protocols to prevent potential breaches.",
|
||
"secAlertSSL": "Panel lacks secure connection. Please install TLS certificate for data protection.",
|
||
"secAlertPanelPort": "Panel default port is vulnerable. Please configure a random or specific port.",
|
||
"secAlertPanelURI": "Panel default URI path is insecure. Please configure a complex URI path.",
|
||
"secAlertSubURI": "Subscription default URI path is insecure. Please configure a complex URI path.",
|
||
"secAlertSubJsonURI": "Subscription JSON default URI path is insecure. Please configure a complex URI path.",
|
||
"emptyDnsDesc": "No added DNS servers.",
|
||
"emptyFakeDnsDesc": "No added Fake DNS servers.",
|
||
"emptyBalancersDesc": "No added balancers.",
|
||
"emptyReverseDesc": "No added reverse proxies.",
|
||
"somethingWentWrong": "Something went wrong",
|
||
"subscription": {
|
||
"title": "Subscription info",
|
||
"subId": "Subscription ID",
|
||
"status": "Status",
|
||
"downloaded": "Downloaded",
|
||
"uploaded": "Uploaded",
|
||
"expiry": "Expiry",
|
||
"totalQuota": "Total quota",
|
||
"individualLinks": "Individual links",
|
||
"active": "Active",
|
||
"inactive": "Inactive",
|
||
"unlimited": "Unlimited",
|
||
"noExpiry": "No expiry"
|
||
},
|
||
"menu": {
|
||
"theme": "Theme",
|
||
"dark": "Dark",
|
||
"ultraDark": "Ultra Dark",
|
||
"dashboard": "Overview",
|
||
"inbounds": "Inbounds",
|
||
"clients": "Clients",
|
||
"groups": "Groups",
|
||
"nodes": "Nodes",
|
||
"settings": "Panel Settings",
|
||
"xray": "Xray Configs",
|
||
"apiDocs": "API Docs",
|
||
"logout": "Log Out",
|
||
"link": "Manage",
|
||
"donate": "Donate"
|
||
},
|
||
"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": {
|
||
"title": "Overview",
|
||
"cpu": "CPU",
|
||
"logicalProcessors": "Logical Processors",
|
||
"frequency": "Frequency",
|
||
"swap": "Swap",
|
||
"storage": "Storage",
|
||
"memory": "RAM",
|
||
"threads": "Threads",
|
||
"xrayStatus": "Xray",
|
||
"stopXray": "Stop",
|
||
"restartXray": "Restart",
|
||
"xraySwitch": "Version",
|
||
"xrayUpdates": "Xray Updates",
|
||
"xraySwitchClick": "Choose the version you want to switch to.",
|
||
"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",
|
||
"upToDate": "Up to date",
|
||
"xrayStatusUnknown": "Unknown",
|
||
"xrayStatusRunning": "Running",
|
||
"xrayStatusStop": "Stopped",
|
||
"xrayStatusError": "Error",
|
||
"xrayErrorPopoverTitle": "An error occurred while running Xray",
|
||
"operationHours": "Uptime",
|
||
"systemHistoryTitle": "System History",
|
||
"charts": "Charts",
|
||
"xrayMetricsTitle": "Xray Metrics",
|
||
"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",
|
||
"trendLast2Min": "Last 2 minutes",
|
||
"systemLoad": "System Load",
|
||
"systemLoadDesc": "System load average for the past 1, 5, and 15 minutes",
|
||
"connectionCount": "Connection Stats",
|
||
"ipAddresses": "IP Addresses",
|
||
"toggleIpVisibility": "Toggle visibility of the IP",
|
||
"overallSpeed": "Overall Speed",
|
||
"upload": "Upload",
|
||
"download": "Download",
|
||
"totalData": "Total Data",
|
||
"sent": "Sent",
|
||
"received": "Received",
|
||
"documentation": "Documentation",
|
||
"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.",
|
||
"panelUpdateCheckPopover": "Panel update check failed",
|
||
"panelUpdateStartedPopover": "Panel update started",
|
||
"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",
|
||
"customGeoTitle": "Custom GeoSite / GeoIP",
|
||
"customGeoAdd": "Add",
|
||
"customGeoType": "Type",
|
||
"customGeoAlias": "Alias",
|
||
"customGeoUrl": "URL",
|
||
"customGeoEnabled": "Enabled",
|
||
"customGeoLastUpdated": "Last updated",
|
||
"customGeoExtColumn": "Routing (ext:…)",
|
||
"customGeoToastUpdateAll": "All custom geo sources updated",
|
||
"customGeoActions": "Actions",
|
||
"customGeoEdit": "Edit",
|
||
"customGeoDelete": "Delete",
|
||
"customGeoDownload": "Update now",
|
||
"customGeoModalAdd": "Add custom geo",
|
||
"customGeoModalEdit": "Edit custom geo",
|
||
"customGeoModalSave": "Save",
|
||
"customGeoDeleteConfirm": "Delete this custom geo source?",
|
||
"customGeoRoutingHint": "In routing rules use the value column as ext:file.dat:tag (replace tag).",
|
||
"customGeoInvalidId": "Invalid resource id",
|
||
"customGeoAliasesError": "Failed to load custom geo aliases",
|
||
"customGeoValidationAlias": "Alias may only contain lowercase letters, digits, - and _",
|
||
"customGeoValidationUrl": "URL must start with http:// or https://",
|
||
"customGeoAliasPlaceholder": "a-z 0-9 _ -",
|
||
"customGeoAliasLabelSuffix": " (custom)",
|
||
"customGeoToastList": "Custom geo list",
|
||
"customGeoToastAdd": "Add custom geo",
|
||
"customGeoToastUpdate": "Update custom geo",
|
||
"customGeoToastDelete": "Custom geo file “{{ .fileName }}” deleted",
|
||
"customGeoToastDownload": "Geofile “{{ .fileName }}” updated",
|
||
"customGeoErrInvalidType": "Type must be geosite or geoip",
|
||
"customGeoErrAliasRequired": "Alias is required",
|
||
"customGeoErrAliasPattern": "Alias must match allowed characters",
|
||
"customGeoErrAliasReserved": "This alias is reserved",
|
||
"customGeoErrUrlRequired": "URL is required",
|
||
"customGeoErrInvalidUrl": "URL is invalid",
|
||
"customGeoErrUrlScheme": "URL must use http or https",
|
||
"customGeoErrUrlHost": "URL host is invalid",
|
||
"customGeoErrDuplicateAlias": "This alias is already used for this type",
|
||
"customGeoErrNotFound": "Custom geo source not found",
|
||
"customGeoErrDownload": "Download failed",
|
||
"customGeoErrUpdateAllIncomplete": "One or more custom geo sources failed to update",
|
||
"customGeoEmpty": "No custom geo sources yet — click Add to create one",
|
||
"dontRefresh": "Installation is in progress, please do not refresh this page",
|
||
"logs": "Logs",
|
||
"config": "Config",
|
||
"backup": "Backup",
|
||
"backupTitle": "Backup & Restore",
|
||
"exportDatabase": "Back Up",
|
||
"exportDatabaseDesc": "Click to download a .db file containing a backup of your current database to your device.",
|
||
"importDatabase": "Restore",
|
||
"importDatabaseDesc": "Click to select and upload a .db file from your device to restore your database from a backup.",
|
||
"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."
|
||
},
|
||
"inbounds": {
|
||
"title": "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",
|
||
"help": "When a connection on this inbound does not match any client, route it to another inbound. Pick a child below and the routing fields (SNI / ALPN / path / xver) auto-fill from its transport — most setups need no further tweaking. Each child should listen on 127.0.0.1 with security=none.",
|
||
"empty": "No fallbacks yet",
|
||
"add": "Add fallback",
|
||
"pickInbound": "Pick an inbound",
|
||
"matchAny": "any",
|
||
"destPlaceholder": "auto (child listen:port)",
|
||
"rederive": "Re-fill from child",
|
||
"rederived": "Re-filled from child",
|
||
"editAdvanced": "Edit routing fields",
|
||
"hideAdvanced": "Hide advanced",
|
||
"quickAddAll": "Quick add all eligible",
|
||
"quickAdded": "Added {n} fallback(s)",
|
||
"quickAddedNone": "No new eligible inbounds to add",
|
||
"routesWhen": "Routes when",
|
||
"defaultCatchAll": "Default — catches anything else"
|
||
},
|
||
"protocol": "Protocol",
|
||
"port": "Port",
|
||
"portMap": "Port Mapping",
|
||
"traffic": "Traffic",
|
||
"details": "Details",
|
||
"transportConfig": "Transport",
|
||
"expireDate": "Duration",
|
||
"createdAt": "Created",
|
||
"updatedAt": "Updated",
|
||
"resetTraffic": "Reset Traffic",
|
||
"addInbound": "Add Inbound",
|
||
"generalActions": "General Actions",
|
||
"modifyInbound": "Modify Inbound",
|
||
"deleteInbound": "Delete Inbound",
|
||
"deleteInboundContent": "Are you sure you want to delete this 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.",
|
||
"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",
|
||
"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",
|
||
"deleteClient": "Delete Client",
|
||
"deleteClientContent": "Are you sure you want to delete this client?",
|
||
"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",
|
||
"noRecommendKeepDefault": "It is recommended to keep the default",
|
||
"certificatePath": "File Path",
|
||
"certificateContent": "File Content",
|
||
"publicKey": "Public Key",
|
||
"privatekey": "Private Key",
|
||
"clickOnQRcode": "Click on QR Code to Copy",
|
||
"client": "Client",
|
||
"export": "Export All URLs",
|
||
"clone": "Clone",
|
||
"cloneInbound": "Clone",
|
||
"cloneInboundContent": "All settings of this inbound, except Port, Listening IP, and Clients, will be applied to the clone.",
|
||
"cloneInboundOk": "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?",
|
||
"resetInboundClientTraffics": "Reset Clients' Traffic",
|
||
"resetInboundClientTrafficTitle": "Reset Clients' Traffic",
|
||
"resetInboundClientTrafficContent": "Are you sure you want to reset the traffic of this inbound's clients?",
|
||
"resetAllClientTraffics": "Reset All Clients' Traffic",
|
||
"resetAllClientTrafficTitle": "Reset All Clients' Traffic",
|
||
"resetAllClientTrafficContent": "Are you sure you want to reset the traffic of all clients?",
|
||
"delDepletedClients": "Delete Depleted Clients",
|
||
"delDepletedClientsTitle": "Delete Depleted Clients",
|
||
"delDepletedClientsContent": "Are you sure you want to delete all the depleted clients?",
|
||
"email": "Email",
|
||
"emailDesc": "Please provide a unique email address.",
|
||
"IPLimit": "IP Limit",
|
||
"IPLimitDesc": "Disables inbound if the count exceeds the set value. (0 = disable)",
|
||
"IPLimitlog": "IP Log",
|
||
"IPLimitlogDesc": "The IP history log. (to re-enable the inbound after disabling, clear the 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 auth",
|
||
"vlessAuthMlkem768": "ML-KEM-768 auth",
|
||
"vlessAuthCustom": "Custom",
|
||
"vlessAuthSelected": "Selected: {auth}",
|
||
"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:",
|
||
"jsonErrorPrefix": "Advanced JSON"
|
||
},
|
||
"telegramDesc": "Please provide Telegram Chat ID. (use '/id' command in the bot) or ({'@'}userinfobot)",
|
||
"subscriptionDesc": "To find your subscription URL, navigate to the 'Details'. Additionally, you can use the same name for several clients.",
|
||
"same": "Same",
|
||
"inboundInfo": "Inbound Information",
|
||
"exportInbound": "Export Inbound",
|
||
"import": "Import",
|
||
"importInbound": "Import an Inbound",
|
||
"periodicTrafficResetTitle": "Traffic Reset",
|
||
"periodicTrafficResetDesc": "Automatically reset traffic counter at specified intervals",
|
||
"lastReset": "Last Reset",
|
||
"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.",
|
||
"inboundsUpdateSuccess": "Inbounds have been successfully updated.",
|
||
"inboundUpdateSuccess": "Inbound has been successfully updated.",
|
||
"inboundCreateSuccess": "Inbound has been successfully created.",
|
||
"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.",
|
||
"delDepletedClientsSuccess": "All depleted clients have been deleted.",
|
||
"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."
|
||
},
|
||
"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",
|
||
"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",
|
||
"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",
|
||
"sniPlaceholder": "SNI (defaults to host)",
|
||
"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",
|
||
"tcpFastOpen": "TCP Fast Open",
|
||
"multipathTcp": "Multipath TCP",
|
||
"penetrate": "Penetrate",
|
||
"v6Only": "V6 Only",
|
||
"tcpCongestion": "TCP Congestion",
|
||
"dialerProxy": "Dialer Proxy",
|
||
"trustedXForwardedFor": "Trusted X-Forwarded-For",
|
||
"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",
|
||
"pinnedPeerCertSha256": "Pinned Peer Cert SHA-256",
|
||
"pinnedPeerCertSha256Tip": "Base64-encoded SHA-256 hashes of the peer certificate. Panel-only — not written to the server's xray config, but included in share links so clients can pin the certificate.",
|
||
"pinnedPeerCertSha256Placeholder": "base64 hash(es), comma-separated",
|
||
"generateRandomPin": "Generate random 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",
|
||
"shortIds": "Short IDs",
|
||
"spiderX": "SpiderX",
|
||
"getNewCert": "Get New Cert",
|
||
"mldsa65Seed": "mldsa65 Seed",
|
||
"mldsa65Verify": "mldsa65 Verify",
|
||
"getNewSeed": "Get New Seed"
|
||
},
|
||
"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"
|
||
},
|
||
"stream": {
|
||
"general": {
|
||
"request": "Request",
|
||
"response": "Response",
|
||
"name": "Name",
|
||
"value": "Value"
|
||
},
|
||
"tcp": {
|
||
"version": "Version",
|
||
"method": "Method",
|
||
"path": "Path",
|
||
"status": "Status",
|
||
"statusDescription": "Status Desc",
|
||
"requestHeader": "Request Header",
|
||
"responseHeader": "Response Header"
|
||
}
|
||
}
|
||
},
|
||
"clients": {
|
||
"add": "Add Client",
|
||
"edit": "Edit Client",
|
||
"submitAdd": "Add Client",
|
||
"submitEdit": "Save Changes",
|
||
"clientCount": "Number of Clients",
|
||
"bulk": "Add Bulk",
|
||
"copyFromInbound": "Copy Clients from Inbound",
|
||
"copyToInbound": "Copy clients to",
|
||
"copySelected": "Copy Selected",
|
||
"copySource": "Source",
|
||
"copyEmailPreview": "Resulting email preview",
|
||
"copySelectSourceFirst": "Please select a source inbound first.",
|
||
"copyResult": "Copy result",
|
||
"copyResultSuccess": "Copied successfully",
|
||
"copyResultNone": "Nothing to copy: no clients selected or source is empty",
|
||
"copyResultErrors": "Copy errors",
|
||
"copyFlowLabel": "Flow for new clients (VLESS)",
|
||
"copyFlowHint": "Applied to all copied clients. Leave empty to skip.",
|
||
"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": "Day(s)",
|
||
"renew": "Auto Renew",
|
||
"renewDesc": "Auto-renewal after expiration. (0 = disable)(unit: day)",
|
||
"searchPlaceholder": "Search email, comment, sub ID, UUID, password, auth…",
|
||
"filterTitle": "Filter clients",
|
||
"clearAllFilters": "Clear all",
|
||
"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",
|
||
"title": "Clients",
|
||
"actions": "Actions",
|
||
"totalGB": "Total Sent/Received (GB)",
|
||
"expiryTime": "Expiry",
|
||
"addClients": "Add Clients",
|
||
"limitIp": "IP Limit",
|
||
"password": "Password",
|
||
"subId": "Subscription ID",
|
||
"online": "Online",
|
||
"email": "Email",
|
||
"emailInvalidChars": "Email 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",
|
||
"offline": "Offline",
|
||
"addClient": "Add Client",
|
||
"qrCode": "QR Code",
|
||
"clientInfo": "Client Information",
|
||
"delete": "Delete",
|
||
"reset": "Reset Traffic",
|
||
"editClient": "Edit Client",
|
||
"client": "Client",
|
||
"enabled": "Enabled",
|
||
"remaining": "Remaining",
|
||
"duration": "Duration",
|
||
"attachedInbounds": "Attached inbounds",
|
||
"selectInbound": "Select one or more inbounds",
|
||
"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.",
|
||
"general": "General",
|
||
"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.",
|
||
"deleteSelected": "Delete ({count})",
|
||
"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",
|
||
"selectedCount": "{count} selected",
|
||
"attachSelected": "Attach ({count})",
|
||
"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.",
|
||
"detachSelected": "Detach ({count})",
|
||
"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 or traffic before applying.",
|
||
"addDays": "Add days",
|
||
"addTrafficGB": "Add traffic (GB)",
|
||
"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.",
|
||
"auth": "Auth",
|
||
"hysteriaAuth": "Hysteria Auth",
|
||
"uuid": "UUID",
|
||
"flow": "Flow",
|
||
"vmessSecurity": "VMess Security",
|
||
"reverseTag": "Reverse tag",
|
||
"reverseTagPlaceholder": "Optional reverse tag",
|
||
"telegramId": "Telegram user ID",
|
||
"telegramIdPlaceholder": "Numeric Telegram user ID (0 = none)",
|
||
"created": "Created",
|
||
"updated": "Updated",
|
||
"ipLimit": "IP limit",
|
||
"toasts": {
|
||
"deleted": "Client deleted",
|
||
"trafficReset": "Traffic reset",
|
||
"allTrafficsReset": "All client traffic reset",
|
||
"bulkDeleted": "{count} clients deleted",
|
||
"bulkDeletedMixed": "{ok} deleted, {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"
|
||
}
|
||
},
|
||
"groups": {
|
||
"title": "Groups",
|
||
"name": "Name",
|
||
"clientCount": "Clients in group",
|
||
"totalGroups": "Total groups",
|
||
"totalGroupedClients": "Clients with a group",
|
||
"emptyGroups": "Empty groups",
|
||
"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 zeros up/down for all {count} client(s) in this group.",
|
||
"resetSuccess": "Reset traffic for {count} client(s).",
|
||
"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}."
|
||
},
|
||
"nodes": {
|
||
"title": "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 Settings → API Token.",
|
||
"regenerate": "Regenerate Token",
|
||
"regenerateConfirm": "Regenerating invalidates the current token. Any central panel using it will lose access until updated. Continue?",
|
||
"allowPrivateAddress": "Allow private address",
|
||
"allowPrivateAddressHint": "Enable only for nodes on a private network or VPN.",
|
||
"enable": "Enabled",
|
||
"status": "Status",
|
||
"cpu": "CPU",
|
||
"mem": "Memory",
|
||
"uptime": "Uptime",
|
||
"latency": "Latency",
|
||
"lastHeartbeat": "Last Heartbeat",
|
||
"xrayVersion": "Xray Version",
|
||
"panelVersion": "Panel Version",
|
||
"actions": "Actions",
|
||
"probe": "Probe Now",
|
||
"testConnection": "Test Connection",
|
||
"connectionOk": "Connection OK ({ms} ms)",
|
||
"connectionFailed": "Connection failed",
|
||
"never": "never",
|
||
"justNow": "just now",
|
||
"deleteConfirmTitle": "Delete node \"{name}\"?",
|
||
"deleteConfirmContent": "This stops monitoring the node. The remote panel itself is unaffected.",
|
||
"statusValues": {
|
||
"online": "Online",
|
||
"offline": "Offline",
|
||
"unknown": "Unknown"
|
||
},
|
||
"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"
|
||
}
|
||
},
|
||
"settings": {
|
||
"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)",
|
||
"panelProxy": "Panel Network Proxy",
|
||
"panelProxyDesc": "Routes the panel's own outbound requests (geo updates, Xray/panel version checks, Telegram) through this proxy to bypass server-side filtering of GitHub/Telegram. Accepts socks5:// or http(s)://, e.g. a local Xray SOCKS inbound. Leave empty for a direct connection.",
|
||
"remarkModel": "Remark Model & Separation Character",
|
||
"datepicker": "Calendar Type",
|
||
"datepickerPlaceholder": "Select date",
|
||
"datepickerDescription": "Scheduled tasks will run based on this calendar.",
|
||
"sampleRemark": "Sample Remark",
|
||
"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": "The Telegram bot notification time set for periodic reports. (use the crontab time format)",
|
||
"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",
|
||
"subTitle": "Subscription Title",
|
||
"subTitleDesc": "Title shown in VPN client",
|
||
"subSupportUrl": "Support URL",
|
||
"subSupportUrlDesc": "Technical support link shown in the VPN client",
|
||
"subProfileUrl": "Profile URL",
|
||
"subProfileUrlDesc": "A link to your website displayed in the VPN client",
|
||
"subAnnounce": "Announce",
|
||
"subAnnounceDesc": "The announcement text displayed in the VPN client",
|
||
"subEnableRouting": "Enable routing",
|
||
"subEnableRoutingDesc": "Global setting to enable routing in the VPN client. (Only for Happ)",
|
||
"subRoutingRules": "Routing rules",
|
||
"subRoutingRulesDesc": "Global routing rules for 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)",
|
||
"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)",
|
||
"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.",
|
||
"subShowInfo": "Show Usage Info",
|
||
"subShowInfoDesc": "The remaining traffic and date will be displayed in the client apps.",
|
||
"subEmailInRemark": "Include Email in Name",
|
||
"subEmailInRemarkDesc": "Include the client email in the subscription profile name.",
|
||
"subURI": "Reverse Proxy URI",
|
||
"subURIDesc": "The URI path of the subscription URL for use behind proxies.",
|
||
"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)",
|
||
"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": {
|
||
"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",
|
||
"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."
|
||
},
|
||
"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"
|
||
}
|
||
},
|
||
"xray": {
|
||
"title": "Xray Configs",
|
||
"save": "Save",
|
||
"restart": "Restart Xray",
|
||
"restartSuccess": "Xray has been successfully relaunched.",
|
||
"restartOutputTitle": "Xray restart output",
|
||
"restartConfirmTitle": "Restart xray?",
|
||
"restartConfirmContent": "Reloads the xray service with the saved configuration.",
|
||
"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.",
|
||
"blockConfigsDesc": "These options will block traffic based on specific requested protocols and websites.",
|
||
"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.",
|
||
"warpRouting": "WARP Routing",
|
||
"warpRoutingDesc": "These options will route traffic based on a specific destination via WARP.",
|
||
"nordRouting": "NordVPN Routing",
|
||
"nordRoutingDesc": "These options will route traffic based on a specific destination via NordVPN.",
|
||
"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.",
|
||
"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",
|
||
"InboundsDesc": "Accepting the specific clients.",
|
||
"Outbounds": "Outbounds",
|
||
"Balancers": "Balancers",
|
||
"balancerTagRequired": "Tag is required",
|
||
"balancerSelectorRequired": "Pick at least one outbound",
|
||
"OutboundsDesc": "Set the outgoing traffic pathway.",
|
||
"Routings": "Routing Rules",
|
||
"RoutingsDesc": "The priority of each rule is important!",
|
||
"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",
|
||
"statsInboundUplinkDesc": "Enables the statistics collection for upstream traffic of all inbound proxies.",
|
||
"statsInboundDownlink": "Inbound Download Statistics",
|
||
"statsInboundDownlinkDesc": "Enables the statistics collection for downstream traffic of all inbound proxies.",
|
||
"statsOutboundUplink": "Outbound Upload Statistics",
|
||
"statsOutboundUplinkDesc": "Enables the statistics collection for upstream traffic of all outbound proxies.",
|
||
"statsOutboundDownlink": "Outbound Download Statistics",
|
||
"statsOutboundDownlinkDesc": "Enables the statistics collection for downstream traffic of all outbound proxies.",
|
||
"rules": {
|
||
"first": "First",
|
||
"last": "Last",
|
||
"up": "Up",
|
||
"down": "Down",
|
||
"source": "Source",
|
||
"dest": "Destination",
|
||
"inbound": "Inbound",
|
||
"outbound": "Outbound",
|
||
"balancer": "Balancer",
|
||
"info": "Info",
|
||
"add": "Add Rule",
|
||
"edit": "Edit Rule",
|
||
"useComma": "Comma-separated list"
|
||
},
|
||
"routing": {
|
||
"dragToReorder": "Drag to reorder"
|
||
},
|
||
"ruleForm": {
|
||
"sourceIps": "Source IPs",
|
||
"sourcePort": "Source port",
|
||
"vlessRoute": "VLESS route",
|
||
"attributes": "Attributes",
|
||
"value": "Value",
|
||
"user": "User",
|
||
"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",
|
||
"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",
|
||
"fragment": "Fragment",
|
||
"finalRules": "Final Rules",
|
||
"overrideXrayPrivateIp": "Override Xray's default private-IP block",
|
||
"blockDelay": "Block delay (ms)",
|
||
"reverseSniffing": "Reverse Sniffing",
|
||
"workers": "Workers",
|
||
"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",
|
||
"ipv6Only": "IPv6 only",
|
||
"acceptProxyProtocol": "Accept proxy protocol",
|
||
"proxyProtocol": "Proxy protocol",
|
||
"tcpUserTimeoutMs": "TCP user timeout (ms)",
|
||
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
|
||
},
|
||
"outbound": {
|
||
"addOutbound": "Add Outbound",
|
||
"addReverse": "Add Reverse",
|
||
"editOutbound": "Edit Outbound",
|
||
"editReverse": "Edit Reverse",
|
||
"reverseTag": "Reverse Tag",
|
||
"reverseTagDesc": "VLESS simple reverse proxy tag. Leave empty to disable.",
|
||
"reverseTagPlaceholder": "reverse tag (leave empty to disable)",
|
||
"tag": "Tag",
|
||
"tagDesc": "Unique Tag",
|
||
"address": "Address",
|
||
"reverse": "Reverse",
|
||
"domain": "Domain",
|
||
"type": "Type",
|
||
"bridge": "Bridge",
|
||
"portal": "Portal",
|
||
"link": "Link",
|
||
"intercon": "Interconnection",
|
||
"settings": "Settings",
|
||
"accountInfo": "Account Information",
|
||
"outboundStatus": "Outbound Status",
|
||
"sendThrough": "Send Through",
|
||
"test": "Test",
|
||
"testResult": "Test Result",
|
||
"testing": "Testing connection...",
|
||
"testSuccess": "Test successful",
|
||
"testFailed": "Test failed",
|
||
"testError": "Failed to test outbound",
|
||
"testModeTooltip": "TCP: fast dial-only probe. HTTP: full request through xray.",
|
||
"testAll": "Test all",
|
||
"nordvpn": "NordVPN",
|
||
"accessToken": "Access Token",
|
||
"country": "Country",
|
||
"server": "Server",
|
||
"city": "City",
|
||
"allCities": "All Cities",
|
||
"privateKey": "Private Key",
|
||
"load": "Load"
|
||
},
|
||
"balancer": {
|
||
"addBalancer": "Add Balancer",
|
||
"editBalancer": "Edit Balancer",
|
||
"balancerStrategy": "Strategy",
|
||
"balancerSelectors": "Selectors",
|
||
"tag": "Tag",
|
||
"tagDesc": "Unique Tag",
|
||
"tagDuplicate": "Tag already used by another balancer",
|
||
"tagPlaceholder": "unique balancer tag",
|
||
"selector": "Selector",
|
||
"fallback": "Fallback",
|
||
"expected": "Expected",
|
||
"expectedPlaceholder": "optimal node count",
|
||
"maxRtt": "Max RTT",
|
||
"tolerance": "Tolerance",
|
||
"baselines": "Baselines",
|
||
"costs": "Costs",
|
||
"balancerDesc": "It is not possible to use balancerTag and outboundTag at the same time. If used at the same time, only outboundTag will work."
|
||
},
|
||
"wireguard": {
|
||
"secretKey": "Secret Key",
|
||
"publicKey": "Public Key",
|
||
"allowedIPs": "Allowed IPs",
|
||
"endpoint": "Endpoint",
|
||
"psk": "PreShared Key",
|
||
"domainStrategy": "Domain Strategy"
|
||
},
|
||
"tun": {
|
||
"nameDesc": "The name of the TUN interface. Default is 'xray0'",
|
||
"mtuDesc": "Maximum Transmission Unit. The maximum size of data packets. Default is 1500",
|
||
"userLevel": "User Level",
|
||
"userLevelDesc": "All connections made through this inbound will use this user level. Default is 0"
|
||
},
|
||
"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": {
|
||
"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."
|
||
},
|
||
"fakedns": {
|
||
"add": "Add Fake DNS",
|
||
"edit": "Edit Fake DNS",
|
||
"ipPool": "IP Pool Subnet",
|
||
"poolSize": "Pool Size"
|
||
}
|
||
}
|
||
},
|
||
"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",
|
||
"day": "Day",
|
||
"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"
|
||
},
|
||
"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",
|
||
"2faFailed": "2FA Failed",
|
||
"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",
|
||
"exhaustedMsg": "🚨 Exhausted {{ .Type }}:\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_id": "🔑📥 ID updated.",
|
||
"received_password": "🔑📥 Password updated.",
|
||
"received_email": "📧📥 Email updated.",
|
||
"received_comment": "💬📥 Comment updated.",
|
||
"id_prompt": "🔑 Default ID: {{ .ClientId }}\n\nEnter your ID.",
|
||
"pass_prompt": "🔑 Default Password: {{ .ClientPassword }}\n\nEnter your password.",
|
||
"email_prompt": "📧 Default Email: {{ .ClientEmail }}\n\nEnter your email.",
|
||
"comment_prompt": "💬 Default Comment: {{ .ClientComment }}\n\nEnter your comment.",
|
||
"inbound_client_data_id": "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Traffic: {{ .ClientTraffic }}\n📅 Expire Date: {{ .ClientExp }}\n🌐 IP Limit: {{ .IpLimit }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!",
|
||
"inbound_client_data_pass": "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Password: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Traffic: {{ .ClientTraffic }}\n📅 Expire Date: {{ .ClientExp }}\n🌐 IP Limit: {{ .IpLimit }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!",
|
||
"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."
|
||
},
|
||
"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_id": "⚙️🔑 ID",
|
||
"change_password": "⚙️🔑 Password",
|
||
"change_email": "⚙️📧 Email",
|
||
"change_comment": "⚙️💬 Comment",
|
||
"change_flow": "⚙️🚦 Flow",
|
||
"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"
|
||
}
|
||
}
|
||
}
|