merge feat/probe-b6: item 7 B1-B6 (probe collector, history, contract API, ping, themes, notify)

# Conflicts:
#	internal/agent/agent.go
This commit is contained in:
Muse
2026-10-23 00:37:55 +00:00
341 changed files with 16398 additions and 18 deletions
+127 -1
View File
@@ -922,9 +922,135 @@
"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."
"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",
"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"
}
},
"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"
},
"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}}",
"retireTitle": "cf-probe retirement checklist",
"retireHint": "Only once every node is served by the panel may the old public page be switched off, in the order given in the deployment notes.",
"retirePublicPage": "Public page",
"retirePublicPageOff": "Off (enable it above)",
"retireHasProbe": "Probe reporting",
"retireNoProbe": "No probe data",
"retireOnline": "Online",
"retireOffline": "Offline",
"retireProbeAt": "Last report {{time}}",
"retireAllReady": "Every node is served by the panel; cf-probe can be retired in the documented order.",
"retireNotReady": "Some nodes have no probe data yet; do not take cf-probe down."
},
"defaultTag": "Mặc định",
"title": "Cài đặt",
"save": "Lưu",