Newer
Older
hard-panel / panel / frontend / src / i18n / messages / en.js
// English dictionary — canonical key set; the other locales mirror it
// (a missing slug falls back to English either way).
export default {
  // app / shell / nav
  "app.docTitle": "GHard Monitor",
  "shell.title": "Monitoring",
  "nav.dashboard": "Dashboard",
  "nav.storage": "Storage",
  "nav.settings": "Settings",
  "nav.signOut": "Sign out",

  // login screen
  "login.title": "Sign in",
  "login.subtitle": "GHard Monitor is protected by gnexus-auth",
  "login.action": "Sign in",

  // dashboard
  "dash.title": "Dashboard",
  "dash.addServer": "Add server",
  "dash.summary": "{servers} · {online}", // counts are composed via nested t()
  "dash.servers": { one: "{n} server", other: "{n} servers" },
  "dash.online": "{m} online",
  "dash.emptyTitle": "No servers yet",
  "dash.emptyText": "Add your first server — the panel will issue a key for the hard-monitor agent",
  "dash.serverCreated": "Server created",
  "dash.newServer": "New server",
  "dash.nameHint": "The name is for the panel only — the agent reports the hostname itself.",
  "dash.serverName": "Server name",
  "dash.keyHint": "The key is shown {once} — save it and configure the agent with it.",
  "dash.installOn": "Install on the server:",
  "dash.failed": "Failed",

  // server card / server page
  "server.open": "Open",
  "server.uptime": "uptime {value}",
  "server.disk": "Disk {mount}",
  "server.nodata": "no data yet — install the agent",
  "server.back": "Back to dashboard",
  "server.notFound": "Server not found",
  "server.notFoundText": "It may have been deleted",
  "server.rename": "Rename",
  "server.renameTitle": "Rename server",
  "server.serverName": "Server name",
  "server.delete": "Delete",
  "server.deleteTitle": "Delete server?",
  "server.deleteMessage": "\"{name}\" and its entire metric history will be deleted permanently.",
  "server.infoTitle": "Info",
  "server.noteTitle": "Note",
  "server.serverNote": "Server note",
  "server.notePlaceholder": "What the server is for, what runs on it. No secrets here :)",
  "server.hostname": "Hostname",
  "server.os": "OS",
  "server.kernel": "Kernel",
  "server.ips": "IP addresses",
  "server.connIp": "Connection IP",
  "server.interval": "Agent interval",
  "server.lastPacket": "Last packet",
  "server.network": "Network",
  "server.history": "History:",
  "server.tabOverview": "Overview",
  "server.tabDisks": "Disks",
  "server.tabNetwork": "Network",
  "server.tabProcesses": "Processes",
  "server.tabDocker": "Docker",
  "server.cpuRamChart": "CPU & RAM, %",
  "server.diskChart": "Disk usage, %",
  "server.netChart": "Network speed, MB/s",
  "server.colMount": "Mount point",
  "server.colSize": "Size",
  "server.colUsed": "Used",
  "server.colUsage": "Usage",
  "server.colProcess": "Process",
  "server.colPid": "PID",
  "server.colStatus": "Status",
  "server.colContainer": "Container",
  "server.colImage": "Image",
  "server.noDisks": "No disks in the last packet",
  "server.noProcesses": "No process data",
  "server.noDocker": "No Docker containers found",
  "server.of": "of {total}",
  "server.noteSaved": "Note saved",
  "server.renamed": "Renamed",
  "server.serverDeleted": "Server deleted",
  "server.failedToSave": "Failed to save",
  "server.failedToRename": "Failed to rename",
  "server.failedToDelete": "Failed to delete",
  "server.historyFailed": "History failed to load",

  // storage
  "storage.title": "Storage",
  "storage.subtitle": "Network shares mounted to the panel host",
  "storage.addShare": "Add share",
  "storage.emptyTitle": "No shares yet",
  "storage.emptyText": "Mount a network drive to the panel host and add its path here — the panel will track usage itself",
  "storage.usedLabel": "Used",
  "storage.used": "used",
  "storage.free": "free",
  "storage.total": "total",
  "storage.nodata": "no data — check the mount",
  "storage.sampledAt": "sampled: {time}",
  "storage.notSampled": "not sampled yet",
  "storage.historyTitle": "Usage over 24 h, %",
  "storage.addTitle": "Add network share",
  "storage.name": "Name",
  "storage.mountPath": "Mount path on the panel host",
  "storage.shareAdded": "Share added",
  "storage.deleteTitle": "Delete share?",
  "storage.deleteMessage": "\"{name}\" will be removed from monitoring. The mount itself and its data are not touched.",
  "storage.historyFailed": "Storage history failed to load",
  "storage.shareDeleted": "Share deleted",

  // services (health checker)
  "nav.services": "Services",
  "nav.mcpKeys": "MCP keys",
  "services.title": "Services",
  "services.subtitle": "Health of external services via their health endpoints",
  "services.addService": "Add service",
  "services.emptyTitle": "No services yet",
  "services.emptyText": "Add a health URL of a service (for example gnexus-auth) — the panel will poll it itself",
  "services.addTitle": "Add service",
  "services.name": "Name",
  "services.url": "Health URL",
  "services.urlHint": "The address the panel polls (GET) to check health, for example http://gnexus-creds.local/api/v1/health",
  "services.latency": "response {n} ms",
  "services.stateUp": "up",
  "services.stateDegraded": "degraded",
  "services.stateDown": "down",
  "services.statePending": "waiting",
  "services.modeMaintenance": "maintenance",
  "services.modeReadonly": "readonly",
  "services.modeDraining": "draining",
  "services.notResponding": "not responding — {message}",
  "services.serviceAdded": "Service added",
  "services.historyFailed": "Service history failed to load",
  "services.serviceDeleted": "Service deleted",
  "services.serviceUpdated": "Service updated",
  "services.deleteTitle": "Delete service?",
  "services.deleteMessage": "\"{name}\" will be removed from health monitoring. The service itself is not touched.",
  "services.back": "Back to list",
  "services.notFound": "Service not found",
  "services.notFoundText": "It may have been removed from monitoring",
  "services.edit": "Edit",
  "services.editTitle": "Edit service",
  "services.chartTitle": "Response time, ms",
  "services.logTitle": "Downtime incidents",
  "services.colStart": "Start",
  "services.colDuration": "Duration",
  "services.colWhat": "What",
  "services.colReason": "Reason",
  "services.ongoing": "ongoing",
  "services.noIncidents": "No downtime incidents recorded",
  "services.durD": "d",
  "services.durH": "h",
  "services.durM": "min",
  "services.durS": "s",

  // settings
  "settings.title": "Settings",
  "settings.languageToolbar": "Interface language",
  "settings.languageDescription": "By default the panel follows your gnexus-auth account language; a choice here overrides it for GHard Monitor only. Auto switches back to the account language.",
  "settings.languageDescriptionOpen": "The panel is open without an account — the choice is stored in this browser.",
  "settings.languageSaved": "Language updated.",

  // language picker (native names — invariant across UI languages)
  "profile.languageAuto": "Auto (from account)",
  "profile.langEn": "English",
  "profile.langUk": "Українська",
  "profile.langRu": "Русский",

  // status (single source for card/page/storage badges)
  "status.online": "online",
  "status.offline": "offline",
  "status.waiting": "waiting",

  // relative time (fmtAgo / fmtUptime)
  "time.never": "never",
  "time.now": "just now",
  "time.secondsAgo": "{n}s ago",
  "time.minutesAgo": "{n}m ago",
  "time.hoursAgo": "{n}h ago",
  "time.daysAgo": "{n}d ago",
  "time.upDaysHours": "{d}d {h}h",
  "time.upHoursMinutes": "{h}h {m}m",
  "time.upMinutesSeconds": "{m}m {s}s",

  // common
  "common.cancel": "Cancel",
  "common.close": "Close",
  "common.copy": "Copy",
  "common.create": "Create",
  "common.save": "Save",
  "common.add": "Add",
  "common.delete": "Delete",
  "common.once": "once",
  "common.error": "Error",
  "common.failedToLoad": "Failed to load",

  // MCP personal keys (handbook 10-platform/mcp.md)
  "mcpKeys.title": "MCP keys",
  "mcpKeys.myKeys": "My keys",
  "mcpKeys.myKeysNote": "Bearer tokens for your AI agents against /mcp of this panel.",
  "mcpKeys.defaultName": "Agent",
  "mcpKeys.namePlaceholder": "agent",
  "mcpKeys.generate": "Generate key",
  "mcpKeys.newKey": "New MCP key",
  "mcpKeys.plaintextOnceName": "Keys are shown once after creation; only a tail hint is stored afterwards.",
  "mcpKeys.createdTitle": "Key created",
  "mcpKeys.plaintextHint": "Copy the key now — it will never be shown again.",
  "mcpKeys.colKey": "Key",
  "mcpKeys.colTail": "Tail",
  "mcpKeys.colRole": "Role",
  "mcpKeys.colCreated": "Created",
  "mcpKeys.colUsed": "Last used",
  "mcpKeys.colStatus": "Status",
  "mcpKeys.colOwner": "Owner",
  "mcpKeys.badgeActive": "Active",
  "mcpKeys.badgeRevoked": "Revoked",
  "mcpKeys.revoke": "Revoke",
  "mcpKeys.revokeTitle": "Revoke key",
  "mcpKeys.revokeMessage": "Agents using the \"{name}\" key will stop getting answers from /mcp.",
  "mcpKeys.revokedTitle": "Key revoked",
  "mcpKeys.failed": "Failed",
  "mcpKeys.emptyOwn": "No keys yet — generate one for your agent.",
  "mcpKeys.emptyAll": "No keys issued by users yet.",
  "mcpKeys.allKeysAdmin": "Keys of all users",
  "mcpKeys.allKeysNote": "All issued personal keys; you can revoke any of them.",
  "mcpKeys.limits": "{count} of {limit} active keys",
  "mcpKeys.howToConnect": "How to connect an agent",
  "mcpKeys.connectNote": "Transport — streamable HTTP; authorize with the personal key from this page. Example for Claude Code:",
  "mcpKeys.authOff": "Personal MCP keys work when gnexus-auth sign-in is enabled. In an open panel (or for scripts), use the GHARD_ADMIN_TOKEN.",
};