const en = { common: { help: "Help", refresh: "Refresh", refreshing: "Refreshing…", query: "Search", clearFilters: "Clear filters", prevPage: "Previous", nextPage: "Next", perPage: "{{n}}/page", pagerMeta: "{{total}} items · page {{page}}/{{pages}}", opFailed: "Operation failed", empty: "-", }, workbench: { title: "Workbench", backToWorkbench: "Back to Workbench", openInNewTab: "Open in new tab", openModule: "Open or switch to this module tab", monitoring: "Monitoring", operations: "Operations", cards: { umeSync: "UME Sync", umeSyncDesc: "UME alarms, subscription & inventory", managedNe: "NE Management", managedNeDesc: "Multi-vendor SSH/Telnet NEs & connectivity test", collect: "Batch Collect", collectDesc: "Run custom CLI commands on connected NEs and save logs", }, }, layout: { title: "UME Integration", titleUme: "UME Sync", titleManagedNe: "NE Management", titleCollect: "Batch Collect", navUme: "UME", netxApi: "netx api", oclawBridge: "oclaw bridge", language: "Language", moreMenu: "More", langZh: "中文", langEn: "English", }, collect: { create: { title: "New collection job", hint: "Configure commands and NEs, then create the job. Click Start in the job list to run collection.", selectedTitle: "Selected NEs", selectedEmpty: "Filter below and add NEs one by one.", selectedCount: "{{count}} selected", clearSelected: "Clear selection", remove: "Remove", pickTitle: "Eligible NEs (connectivity passed)", pickHint: "Only NEs with connect_status=pass. Run connectivity test in NE Management first.", pickEmpty: "No matching NEs.", filterKeyword: "Filter", filterKeywordPh: "Name / IP / vendor / device type", add: "Add", added: "Added", create: "Create job", creating: "Creating…", meta: "{{ne}} NE(s) selected · {{cmd}} command(s)", }, eligible: { title: "Eligible NEs (connectivity passed)", hint: "Only NEs with connect_status=pass. Run connectivity test in NE Management first.", empty: "No NEs with passed connectivity test.", }, form: { title: "Collection setup", jobTitle: "Job title", jobTitlePh: "Auto-generated if empty", commands: "Commands (one per line, # for comments)", commandsPh: "display version\ndisplay current-configuration", commandsHint: "Commands run in order on each device; output is saved as a text log (legacy NetX format).", meta: "{{ne}} NE(s) selected · {{cmd}} command(s)", start: "Start collection", starting: "Submitting…", }, created: "Collection job created: {{id}}", started: "Collection started: {{id}}", paused: "Job paused", restarted: "Collection restarted", retryFailedDone: "Retrying failed devices", deleted: "Job deleted", nothingToRetry: "No failed devices to retry", confirmDelete: "Delete this collection job and its log files?", jobs: { title: "Collection jobs", col: { title: "Job", status: "Status", progress: "Progress", created: "Created", lastRun: "Last run", actions: "Actions", }, ok: "ok", fail: "fail", expand: "Details", collapse: "Hide", pause: "Pause", start: "Start", starting: "Starting…", restart: "Restart", retryFailed: "Retry failed", downloadResults: "Download results", delete: "Delete", autoRefresh: "Auto-refresh every 2s while jobs are running", runsInProgress: "Some devices are still being collected…", }, runs: { status: "Status", message: "Message", download: "Log", downloadFile: "Download", filterStatus: "Status filter", filterDevice: "Device filter", deviceKeywordPh: "Name / IP", allStatus: "All statuses", }, }, managedNe: { title: "Network Elements", credsNotConfigured: "NETX_CREDENTIAL_SECRET_KEY is not set. Configure a Fernet key in .env and restart the API to store passwords.", add: "Add NE", importBtn: "Import", downloadTemplate: "Download template", importing: "Importing…", edit: "Edit", delete: "Delete", confirmDelete: "Delete this network element?", keywordPh: "name / IP / user / tags", allVendors: "All vendors", allConnectStatus: "All connect status", col: { name: "Name", vendor: "Vendor", deviceType: "Device type", ip: "Management IP", port: "Port", protocol: "Protocol", user: "Username", password: "Password", tags: "Tags", remark: "Remark", connect: "Connect", testedAt: "Tested at", actions: "Actions", }, connect: { run: "Connectivity test", running: "Testing…", submitted: "Submitted tests for {{n}} device(s)", }, importResult: { done: "Import done: {{inserted}} inserted, {{updated}} updated, {{failed}} failed row(s)", }, form: { requiredHint: "Fields marked with * are required", nameConnectHint: "After a successful connectivity test, name is replaced with the device hostname", createTitle: "Add network element", editTitle: "Edit network element", save: "Save", saving: "Saving…", cancel: "Cancel", created: "Network element created", updated: "Network element updated", deleted: "Network element deleted", passwordRequired: "Password is required", passwordOptional: "leave blank to keep unchanged", }, }, ume: { token: { title: "UME Token", disconnected: "disconnected", connected: "connected", connectedRenew: "connected (renew required)", expiresIn: "expires_in", needsRenew: "renew / 0s", preview: "preview", refreshStatus: "Refresh status", renewLogin: "Renew / login", renewing: "Renewing…", disconnect: "Disconnect token", disconnecting: "Disconnecting…", renewOkChanged: "Token renewed and updated", renewOkSame: "Renew completed (unchanged)", disconnectOk: "UME token disconnected", renewHint: "Token missing expiry or expired. Use Renew / login or wait for background keepalive.", }, subscription: { title: "UME alarm subscription (WebSocket)", help: "Subscriptions must be created/cancelled manually. After establish (or on restart if a valid subscription exists in DB), the backend auto-connects WSS for live alarms. Pause/resume on runtime task alarms_current_ws_consumer stops/resumes WSS only (does not cancel the UME subscription).", sub: "subscription", subActive: "active", subInactive: "inactive", wssPaused: "paused", wssModeBanner: "Current alarms are maintained via WSS (mode: {{mode}}); scheduled REST full sync is paused. Use Sync current alarms below for full reconcile.", serverLostBanner: "UME server subscription is missing or expired; local state may still show active. Clear local record and re-subscribe.", establish: "Establish subscription", establishing: "Establishing…", reestablish: "Clear local & re-subscribe", reestablishing: "Re-subscribing…", cancel: "Cancel subscription", cancelling: "Cancelling…", refreshStatus: "Refresh subscription", clearLocalOnly: "Clear local only", clearing: "Clearing…", opFailed: "Subscription operation failed", confirmClearDefault: "UME alarm subscription no longer exists or has expired.\n\nClear local subscription record? You can establish again afterwards.", confirmReestablish: "Clear local record and re-establish subscription on UME. Continue?", titleLoginFirst: "Log in to UME token first", titleReestablish: "Clear stale local record and re-establish on UME", establishInvalid: "Establish did not return a valid id/uri", establishExists: "Subscription already exists (WSS will stay/connect)", establishOk: "Subscription established; WSS will connect", clearLocalOk: "Local subscription cleared; you can establish again", serverLostMsg: "UME subscription lost. Clear local record and re-subscribe?", cancelFailed: "Cancel failed: subscription may still exist on UME", cancelOkMissing: "Local cleared (UME subscription was already missing)", cancelOk: "Subscription cancelled", wsLogs: "WSS runtime log", wsActivity: "Last activity {{time}}", wsAutoRefresh: "Auto refresh", wsLogsEmpty: "No logs yet (connect WSS after establishing subscription)", }, sync: { title: "UME sync", inventory: "Sync inventory", alarmsCurrent: "Sync current alarms", full: "Full sync", failed: "Sync failed", }, tasks: { currentTitle: "Running jobs", running: "running", noRunning: "No running jobs", runtimeTitle: "Background tasks", runtimeOpFailed: "Background task operation failed", noRuntime: "No background task status", intervalTitle: "Configured sleep between loop iterations (clamped at process start)", lastRunTitle: "Last finished sync for scheduled tasks; refreshed at each loop tick", deletedTitle: "Reconcile deletes: inventory = NE rows; alarms_current = current alarm rows", }, syncStatus: { title: "Sync history", empty: "No sync records", }, ne: { title: "Network elements", keywordPh: "keyword(ne_id/ne_name/user_label/ip/host_name)", clearTitle: "Clear keyword and reset to page 1", expand: "Expand details", collapse: "Collapse details", }, alarms: { title: "Current alarms", keywordPh: "keyword(alarm key/cause/ne_name/host_name/ip…)", hostNamePh: "host_name (contains)", allSeverity: "All severities", clearedAll: "is_cleared: all", clearTitle: "Clear filters and reset to page 1", filterByHost: "Filter by this host", noHostName: "No host_name (sync inventory first)", }, }, }; export default en;