mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 18:12:51 +08:00
2 lines
66 KiB
JavaScript
2 lines
66 KiB
JavaScript
const e={"act.noOutbounds":"This backend does not provide outbound counters","act.noConnections":"This backend does not provide connections","act.emptyHistory":"No history samples yet","act.historyRange":"History range","act.noHistory":"This backend does not provide history","act.unknown":"Unknown","act.latency":"Latency","act.upload":"Upload","act.download":"Download","act.active":"Active connections","act.memory":"Memory","act.sampling":"Sampling","act.rss":"Resident memory","act.cgroup":"cgroup used","act.truncated":"Truncated","act.memoryOk":"Normal","act.memoryHigh":"High","act.memoryNearLimit":"Near limit","act.traffic":"Traffic","act.viewDetails":"View details","act.mode":"Outbound mode","act.global":"Global target","mode.rule":"Rule","mode.direct":"Direct","mode.global":"Global","act.apply":"Apply","act.modeApplied":"Outbound mode written to the configuration and reloaded: {mode}","act.modeNoRouting":"The main configuration has no routing section","act.modeInterleaved":"Ordinary rules precede must rules; the outbound mode cannot be changed safely.","act.modeReadOnly":"Read-only","act.modeWhyReadOnly":"Why is the mode read-only?","act.modeReadOnlyReason":"honk requires configuration writes and authenticated control. It marks the main source read-only if it contains a secret field or nested block in native_api or clash_api, or an active listener secret.","act.modeReadOnlyAction":"Make the main file writable by honk and keep native_api in its own include file.","act.installGuide":"Installation instructions","act.modeUnavailable":"Not provided by this backend","act.viewAll":"View all","act.noticeRepeat":{one:"{n} time",other:"{n} times"},"act.since":"Since {t}","act.good":"Good","act.live":"Live","act.m10":"10 min","act.h1":"1 h","act.h6":"6 h","act.h24":"24 h","act.outUsage":"Outbound downloads","act.topDevices":"Top traffic","act.devices":"Devices","act.domains":"Domains","act.node":"Node","act.issues":"Notifications","act.noIssues":"No issues require attention","act.unavailable":"Unavailable","act.d7":"7 d","act.rankingScope":"Ranked by download totals for visible connections. Shares use all visible data.","act.rankingTruncated":"The connection list is truncated. Rankings cover only the retrieved data.","act.rankingEmpty":"No connection data to rank","config.tabModules":"Modules","config.moduleOpen":"Open page","config.moduleManual":"Edit by hand","config.moduleManualTip":"Open the whole file in the Sources tab at this section","config.moduleAbsent":"Section not configured; add it to {file}.","config.moduleAbsentReadOnly":"Section not configured.","config.moduleSettings":{one:"{n} setting",other:"{n} settings"},"config.moduleSubscriptions":{one:"{n} subscription",other:"{n} subscriptions"},"config.moduleNodes":{one:"{n} node",other:"{n} nodes"},"config.moduleGroups":{one:"{n} group: {policies}",other:"{n} groups: {policies}"},"config.moduleDnsUpstreams":{one:"{n} upstream",other:"{n} upstreams"},"config.wizardPresetHelp":"All templates first connect NetworkManager, private-address and multicast traffic directly, then block remaining UDP/443 traffic. All except Global proxy also block advertisements.","config.wizardListenerPort":"Transparent proxy port","config.wizardDefaultDns":"Default DNS upstream","config.wizardChinaDns":"Mainland-China domain DNS upstream","config.wizardNetworkError":"Enter a port from 1 to 65535 and both DNS upstreams.","config.moduleDnsRequests":{one:"{n} request rule",other:"{n} request rules"},"config.moduleDnsResponses":{one:"{n} response rule",other:"{n} response rules"},"config.moduleRules":{one:"{n} rule",other:"{n} rules"},"config.generation":"Generation","config.revision":"Revision","config.errors":{one:"{n} error",other:"{n} errors"},"config.warnings":{one:"{n} warning",other:"{n} warnings"},"config.clean":"No diagnostics","config.redacted":"Listener secret values are redacted","config.editable":"Editable","config.readOnly":"Read-only","config.kind.main":"Main","config.kind.include":"Include","config.kind.subscription":"Subscription","config.kind.generated":"Generated","config.validate":"Validate","config.edit":"Edit","config.save":"Apply and reload","config.incomplete":"The text is incomplete or redacted; it cannot be edited here","config.unquotable":"Cannot write this value losslessly as a single-quoted string: it contains an apostrophe, line break, or trailing backslash.","config.contentHidden":"This backend does not provide the configuration text","config.contentWithheld":"The backend did not return this source's text, so it cannot be edited here. Check the backend's content visibility policy.","config.valid":"Validation passed","config.invalid":{one:"Validation found {n} error",other:"Validation found {n} errors"},"config.saved":"{path} written, configuration reloaded","config.writeRestart":{one:"{n} setting takes effect only after a restart; nothing written. Change it in the file, then restart honk",other:"{n} settings take effect only after a restart; nothing written. Change them in the file, then restart honk"},"config.diskAhead":"The file on disk is not the running configuration, so nothing was written. Reload honk to apply the file, or restart honk if it changes a setting that needs a restart","config.tooLarge":"The configuration is larger than the backend accepts. Limit: {limit} bytes","config.diagnostics":"Diagnostics","config.export":"Export","config.exportWarning":"Exports preserve the displayed source bytes and may contain credentials. Review them before sharing.","config.newSource":"New file","config.newSourceTitle":"New configuration file","config.newSourceHelp":"The file starts empty and loads only when an include pattern of the main configuration matches its path. The path is relative to the main configuration's directory.","config.newSourcePath":"Path","config.newSourceCreate":"Create","config.newSourceCreated":"{path} created, configuration reloaded","config.newSourceUnmatched":"No include pattern of the main configuration matches this path, so the backend will refuse it.","config.newSourceAbsolute":"Use a path relative to the main configuration's directory","config.newSourceSegments":"Path segments cannot be empty, . or ..","config.newSourceExtension":"The file name must end in .dae","config.newSourceControl":"The path cannot contain control characters","config.newSourceNameHelp":"The file starts empty. Its directory and extension come from an include pattern of the main configuration, so enter only the name.","config.newSourcePattern":"Include pattern","config.newSourceName":"Name","config.newSourceNameSlash":"The name cannot contain /","config.newSourceNameControl":"The name cannot contain control characters","config.wizard":"Quick setup","config.wizardSubscriptions":"Subscriptions","config.wizardSubscriptionName":"Name","config.wizardAddSubscription":"Add subscription","config.wizardRemove":"Remove {name}","config.wizardKeep":"Keep the current rules","config.wizardKeepHelp":"The routing section stays as it is","config.wizardGlobal":"Global proxy","config.wizardGlobalHelp":"After the shared exceptions, route remaining traffic through the proxy group.","config.wizardBypass":"Bypass mainland China","config.wizardBypassHelp":"Block advertisements; connect directly for Google China, mainland-China games and mainland-China traffic, then proxy remaining traffic.","config.wizardGfw":"GFW list only","config.wizardGfwHelp":"Block advertisements; proxy GFW-list and Telegram traffic, then connect directly for remaining traffic.","config.wizardMini":"Mini groups","config.wizardMiniHelp":"Based on ACL4SSR Mini: provides a node-selection group and an automatic-selection group.","config.wizardStandard":"Standard groups (default)","config.wizardStandardHelp":"Based on ACL4SSR Online: adds Telegram, overseas-media and Apple-service groups.","config.wizardFull":"Full groups","config.wizardFullHelp":"Based on ACL4SSR Full: adds AI, video and regional node groups for advanced users.","config.wizardWriteHelp":"Rewrites the subscription section of {path} and, when a template is selected, replaces every top-level routing section and adds missing groups. All other content remains unchanged.","config.wizardNote":"Enter subscriptions in the form and select a rule template or retain the existing rules. URLs are written unchanged to subscription for the engine to fetch and parse.","config.wizardSubscription":"Subscription URL","config.wizardSubscriptionHelp":"An HTTP or HTTPS URL; see the backend for supported formats","config.wizardTemplate":"Rules","config.wizardGroupUsed":"This template uses {name}, the first existing group if one is configured.","config.wizardLan":"LAN interface","config.wizardNamedGroups":"This template uses named groups: {names}. Existing groups with these names stay unchanged.","config.wizardPreview":"Generated configuration","config.atFile":"{file} line {line}: {message}","config.repeated":"{text} ({n} times)","config.backendDetail":"{text}. Backend message: {message}","config.saveShortcut":"Ctrl+S","config.saveShortcutMac":"⌘S","config.discardTitle":"Discard unsaved changes?","config.discardHelp":"Changes to this source are lost when you leave.","config.discard":"Discard changes","config.tabSource":"Sources","config.tabValidate":"Validation","config.failed":"Failed: {errors}, {warnings}","config.passedWarnings":{one:"Passed with {n} warning",other:"Passed with {n} warnings"},"config.passed":"Passed","config.lastRun":"Last validation: {time}","config.acceptedDiagnostics":"Diagnostics kept for the accepted configuration (generation {generation})","config.revalidate":"Validate again","config.validateNote":"Parsing is lenient and records all issues; validation identifies fatal errors. If errors remain, applying does not write files and reloading does not activate the configuration.","config.level":"Level","config.levelAll":"All {n}","config.levelErrors":"Errors {n}","config.levelWarnings":"Warnings {n}","config.levelInfo":"Info {n}","config.where":"Where","config.message":"Message","config.code":"Code","config.noDiagnostics":"No items at this level","config.openSource":"Open source","config.openSourceAt":"Open source: {where}","config.source":"Source","config.sourceFacts":"Lines: {lines}, size: {size}, loaded: {time}","config.unsaved":"Unsaved","config.unsavedHint":"Reloading or closing the page loses the changes","config.editNote":"The backend may withhold source text, paths or diagnostics; displayed and exported text may still contain credentials. Editing is available only when the backend provides the complete content. If the file has changed on disk before saving, the backend refuses the save and does not overwrite the file.","config.readNote":"This source is written by the engine or the backend does not allow editing; view only.","config.level.error":"Error","config.level.warning":"Warning","config.level.info":"Info","config.previewFailed":"Could not generate the configuration","conn.tab.traffic":"Traffic","conn.tab.list":"Connections","conn.chart.busiest":"Heaviest connection","conn.chart.down":"Download","conn.chart.up":"Upload","conn.chart.sample":"Connections: {n}","conn.chart.sampleUnknown":"Connections: {n}, without byte totals: {unknown}","conn.chart.moreDown":"More download","conn.chart.moreUp":"More upload","conn.chart.hint":"Horizontal: upload, vertical: download, dashed line: equal traffic. Select a point to open its connection.","conn.chain":"Chain","conn.node":"Node","conn.rule":"Rule","conn.recomputed":"Recomputed","conn.state.observed":"Observed","conn.state.routing":"Routing","conn.state.dialing":"Dialing","conn.state.active":"Active","conn.state.closed":"Closed","conn.state.blocked":"Blocked","conn.state.failed":"Failed","conn.state.unknown":"Unknown","conn.columns":"Columns","conn.group":"Group by","conn.byClient":"By device","conn.activeCount":{one:"{n} active connection",other:"{n} active connections"},"conn.onlyThisClient":"Only this device","conn.close":"Close connection","conn.closeAll":"Close all","conn.closeAllHelp":{one:"Closes the {n} listed connection unless it is a kernel-direct connection the backend does not own.",other:"Closes the {n} listed connections one by one; kernel-direct connections the backend does not own are skipped."},"conn.closeAllLive":"Closes every connection from {src} ({n} right now), including ones opened after this dialog; kernel-direct connections are skipped.","conn.closeAllLiveTcp":"Closes every TCP connection from {src} ({n} right now), including ones opened after this dialog; kernel-direct connections are skipped.","conn.closeAllLiveUdp":"Closes every UDP connection from {src} ({n} right now), including ones opened after this dialog; kernel-direct connections are skipped.","conn.anySource":"any device","conn.closedAll":"Closed {closed}, skipped {skipped}","conn.export":"Export CSV","conn.closed":"Closed {name}","conn.notClosable":"This connection is not owned by the userspace datapath and cannot be closed","conn.closeFailed":"Could not close the connection","conn.notInSnapshot":"This connection is not in the current list.","conn.ungrouped":"None","conn.groupCount":"{name} ({n})","conn.truncated":"The connection list is truncated; only some records are shown.","conn.chart.title":"Traffic per connection","conn.chart.point":"Download: {down}, upload: {up}","conn.latency.title":"Node latency","conn.latency.sample":"Nodes with a latency: {n}, without: {missing}","conn.latency.percentiles":"All nodes, P50: {p50}, P90: {p90}","conn.latency.weighted":"Nodes in use, weighted by connections, P50: {p50}","conn.latency.weightedUnplaced":"Nodes in use, weighted by connections, P50: {p50}, connections without a latency: {n}","conn.latency.inUse":"In use","conn.latency.others":"Not in use","conn.latency.pending":"No node has a latency sample yet.","conn.latency.hint":"Each dot is one node, at the TCP latency the Nodes page shows.","conn.visibilityPartial":"Partial connection visibility","conn.visibilityNone":"No connection visibility","conn.visibilityNote":"The backend lists only connections observable by its userspace datapath; an empty list does not establish that the device has no connections.","conn.filterHint":"Domain, IP, device, process","conn.allOutbounds":"All outbounds","conn.pick":"Select","conn.filters":"Filters","conn.filtersActive":{one:"Filters, {n} applied",other:"Filters, {n} applied"},"conn.allDevices":"All devices","conn.allRules":"All rules","conn.empty":"No matching connections","conn.viewFlow":"View flow","conn.showRule":"Show matched rule","conn.ruleBeforeMatched":"Before the matched rule","conn.ruleTop":"First","conn.ruleMoved":"The matched rule changed; the rule will be added at the earliest place doona can write.","conn.ruleNoPosition":"No rule is in a file doona can write, so there is no place to insert.","conn.f.dst":"Target address","conn.f.ingress":"Ingress","conn.f.domainSource":"Domain source","conn.f.observedBy":"Observed by","conn.observed.userspace":"Userspace","conn.observed.ebpf":"eBPF","conn.observed.mixed":"Userspace and eBPF","conn.f.uploadRate":"Upload rate","conn.f.downloadRate":"Download rate","conn.f.started":"Start time","dns.chart.ranking":"Top queries","dns.chart.byDevice":"Devices","dns.chart.byDomain":"Domains","dns.chart.resolver":"The resolver itself","dns.chart.cache":"Cache","dns.chart.cacheNote":"Entries: {n}, capacity limit: not reported","dns.chart.positive":"Positive answers","dns.chart.negative":"Negative answers","dns.chart.usage":"Usage","dns.chart.usageFacts":"Entries: {entries}","dns.chart.coverage":"Caches {kinds}; {persistent}","dns.chart.persistent":"kept across restarts","dns.chart.memoryOnly":"held in memory only, cleared on restart","dns.chart.count":{one:"{n} lookup",other:"{n} lookups"},"dns.chart.rest":{one:"{n} more lookup",other:"{n} more lookups"},"dns.tab.stats":"Statistics","dns.chart.share":"{n} ({share})","dns.chart.median":"Median","dns.chart.p95":"P95","dns.chart.cacheRate":"Cache hit rate","dns.chart.failureRate":"Failure rate","dns.chart.sample":"Loaded: {n}, uncached: {uncached}, sent upstream: {upstream}","dns.queryFailed":"Could not run the query: {error}","dns.deleted":{one:"Deleted {n} cache entry",other:"Deleted {n} cache entries"},"dns.deleteFailed":"Could not delete the cache entry","dns.flushed":"Cache cleared, matched: {matched}, deleted: {deleted}","dns.flushFailed":"Could not clear the cache: {error}","dns.allTypes":"All supported types","dns.query":"Query","dns.hit":"Cache hit","dns.miss":"Cache miss","dns.routeSource":"Route source","dns.route.forced":"Forced","dns.route.rules":"DNS routing rule","dns.route.default":"Default","dns.routeRule":"Route rule","dns.noAnswers":"No answers","dns.positive":"Positive cache","dns.negative":"Negative cache","dns.persistent":"Persistent cache","dns.notCovered":"Not covered","dns.empty":"No cache entries","dns.cacheUnavailable":"This backend does not provide a cache listing","dns.cacheBusy":"The cache listing is temporarily unavailable","dns.expires":"Expires","dns.staleUntil":"Stale until","dns.deleteEntry":"Delete the {type} cache entry for {domain}","dns.entries":"Cache entries","dns.viewCache":"View cache","dns.log":"Resolution log","dns.chart.tooFew":"Too few records to chart yet","dns.chart.noLog":"Resolution log not loaded","dns.chart.shortPage":"The backend ended this page early: {n} of {limit} records","dns.chart.speed":{one:"Upstream latency ({n} lookup)",other:"Upstream latency ({n} lookups)"},"dns.chart.typical":"Median: {value}","dns.chart.slowest":"P95: {value}","dns.chart.upstream":{one:"{n} lookup, median: {median}",other:"{n} lookups, median: {median}"},"dns.chart.outcomes":"Outcomes","dns.chart.medianKey":"Median per upstream","dns.outcome.cached":"From the cache","dns.outcome.answered":"Answered upstream","dns.outcome.nxdomain":"No such name","dns.outcome.failed":"Failed","dns.exportLog":"Export CSV","dns.result":"Result","dns.logFilterHint":"Name contains","dns.srcInvalid":"Enter an IPv4 or IPv6 address.","dns.logTotal":{one:"{n} record in the ring buffer",other:"{n} records in the ring buffer"},"dns.logLoaded":{one:"{n} loaded; the export covers loaded records only",other:"{n} loaded; the export covers loaded records only"},"dns.loadOlder":"Load older records","dns.newerWaiting":"Newer records are waiting. Refresh replaces the loaded records.","dns.logEmpty":"No matching resolutions","dns.logUnavailable":"This backend does not provide a resolution log","dns.cacheFilter":"Domain: {domain}","dns.flushConfirm":{one:"This clears the {n} cache entry and cannot be undone.",other:"This clears all {n} cache entries and cannot be undone."},"dns.flushConfirmAll":"This clears every cache entry and cannot be undone.","dns.flushAll":"Clear all cache","dns.answer":"{name} {type}; TTL {ttl} s; {data}","event.export":"Export JSON","event.kind":"Kind","event.allKinds":"All kinds","event.withoutRuntime":"Exclude runtime updates","event.k.streamReady":"Stream ready","event.k.runtimeUpdated":"Runtime updated","event.k.flowUpdated":"Flow updated","event.k.flowGap":"Flow records lost","event.k.operationUpdated":"Operation updated","event.k.generationChanged":"Configuration activated","event.unavailable":"This backend does not provide an event stream","event.connected":"Connected","event.reconnecting":"Reconnecting","event.disconnected":"Disconnected","event.lostHistory":"Events lost: those sent while disconnected cannot be recovered","event.cursor":"Resumes from the last position","event.limit":{one:"Latest {n} event, newest first",other:"Latest {n} events, newest first"},"event.empty":"No matching events","event.summary":"Summary","event.resource":"{resource}","event.flow":"{id}, revision: {revision}","event.operation":"{id}, status: {status}","event.generation":"{previous} to {current}","event.gap":"{id}, reason: {reason}, records dropped: {n}","event.gapUnscoped":"reason: {reason}, records dropped: {n}","event.gapNoCount":"{id}, reason: {reason}","event.gapUnscopedNoCount":"reason: {reason}","event.gap.overflow":"buffer overflow","event.gap.sampled":"skipped by sampling","event.gap.evicted":"evicted from the ring buffer","event.gap.recording":"recording changed","log.chart.errors":"Errors","log.chart.peakErrors":"Most errors","log.chart.peak":"Busiest period","log.chart.count":{one:"{n} record",other:"{n} records"},"log.level":"Level","log.level.trace":"Trace","log.level.debug":"Debug","log.level.info":"Info","log.level.warn":"Warning","log.level.error":"Error","log.target":"Module","log.targetPlaceholder":"Module prefix","log.pause":"Pause","log.connected":"Streaming","log.paused":{one:"Paused: {n} new record",other:"Paused: {n} new records"},"log.reconnecting":"Reconnecting","log.disconnected":"Disconnected","log.gap":"Logs lost: records sent while disconnected cannot be recovered","log.recorded":"Engine records: {level} and above","log.levelNotRecorded":"{level}: lower the log level in Settings first","log.clear":"Clear","log.export":"Export","log.message":"Message","log.chart.title":"Log activity over time","log.chart.sample":{one:"From the latest {n} record",other:"From the latest {n} records"},"log.chart.cell":{one:"{time}, {level}: {n} record",other:"{time}, {level}: {n} records"},"log.chart.minimum":"Show {level} and above","log.chart.current":"{level}: the current minimum","log.empty":"No log records yet","nodes.latency.lowest":"Lowest","nodes.latency.highest":"Highest","nodes.latency.unavailable":"Unavailable","nodes.latency.count":{one:"{n} node",other:"{n} nodes"},"nodes.tab.list":"Nodes","nodes.tab.latency":"Latency","nodes.latency.title":"Node latency","nodes.latency.sample":{one:"From the latest measurement of {n} node",other:"From the latest measurement of {n} nodes"},"nodes.latency.by":"Group by","nodes.latency.byGroup":"Group","nodes.latency.byProtocol":"Protocol","nodes.latency.latest":"Latest latency","nodes.latency.moving":"Moving average","nodes.latency.avg10":"Average of the last 10","nodes.latency.unavailableList":{one:"{n} unavailable: {names}",other:"{n} unavailable: {names}"},"nodes.latency.unmeasuredList":{one:"{n} not measured: {names}",other:"{n} not measured: {names}"},"nodes.latency.andMore":"and {n} more","nodes.latency.noGroup":"No group","nodes.latency.noProtocol":"Unknown protocol","nodes.latency.showAll":"Show all {n}","nodes.note":"Sources are subscriptions, files and the nodes in the configuration. When the backend allows it, subscriptions and share links are added here; changes are written to the main configuration and reloaded.","nodes.addProvider":"Add subscription","nodes.addProviderHelp":"The name becomes the tag in the subscription section; the engine fetches the URL, which is never returned.","nodes.add":"Add","nodes.name":"Name","nodes.url":"Subscription URL","nodes.agent":"User-Agent","nodes.agentInvalid":"Up to 256 printable ASCII characters","nodes.cache":"Cache the subscription","nodes.cacheHelp":"Keeps the last fetched copy so it loads at startup without the network.","nodes.added":"{name} added","nodes.addedRefreshed":{one:"{name} added and refreshed, {n} node",other:"{name} added and refreshed, {n} nodes"},"nodes.addedRefreshFailed":"{name} was written to the configuration, but could not be refreshed","nodes.remove":"Remove {name}","nodes.removeProviderTitle":"Remove source {name}","nodes.removeProviderHelp":"Deletes this source and its nodes from the main configuration and reloads.","nodes.removed":"{name} removed","nodes.addNode":"Paste node link","nodes.addNodeHelp":"Adds an engine-supported share link, such as vless, vmess, trojan or ss, to the node section.","nodes.joinGroup":"Add {name} to a group","nodes.newGroup":"New group…","nodes.newGroupHelp":"Adds a group to the group section and includes {name} using a name filter. Its policy can be changed on the policies page.","nodes.join":"Add","nodes.joined":"{name} added to {group}","nodes.link":"Node link","nodes.removeNodeTitle":"Remove node {name}","nodes.removeNodeHelp":"Deletes it from the node section of the main configuration and reloads.","nodes.probe":"Test {name}","nodes.probed":"{name}: {n} ms","nodes.probeFailed":"{name}: unreachable","nodes.probeUnknown":"{name}: result unknown","nodes.probeUnknownWhy":"{name}: result unknown ({error})","nodes.search":"Search nodes","nodes.group":"Group","nodes.anyGroup":"All groups","nodes.anyProtocol":"All protocols","nodes.providers":"Sources","nodes.provider":"Source","nodes.kindLabel":"Kind","nodes.kind.subscription":"Subscription","nodes.kind.file":"File","nodes.kind.inline":"In configuration","nodes.kind.builtin":"Built-in","nodes.kind.unattributed":"Unattributed","nodes.count":"Nodes","nodes.usage":"Usage","nodes.updated":"Updated","nodes.expires":"Expires","nodes.status.ok":"OK","nodes.status.stale":"Stale","nodes.status.error":"Failed","nodes.refresh":"Refresh {name}","nodes.refreshed":{one:"{name} refreshed, {n} node",other:"{name} refreshed, {n} nodes"},"nodes.interval":"Auto-refresh","nodes.intervalOf":"Auto-refresh of {name}","nodes.manualOnly":"Manual only","nodes.everyHours":{one:"Every {n} hour",other:"Every {n} hours"},"nodes.intervalSet":"{name} auto-refresh written to the configuration and reloaded: {interval}","nodes.noProviders":"No node sources","nodes.of":"Nodes of {name}","nodes.node":"Node","nodes.protocol":"Protocol","nodes.latency":"Latency","nodes.groups":"Groups","nodes.empty":"This source has no nodes","nodes.refreshFailed":"Could not refresh {name}","nodes.refreshedDegraded":"{name}: nodes applied, but the runtime is degraded","nodes.probeError":"Could not test {name}","ov.v.ebpf":"eBPF","ov.v.userspace":"Userspace","ov.v.mock":"Mock","ov.v.active":"Active","ov.v.degraded":"Degraded","ov.v.detached":"Detached","ov.v.failed":"Failed","ov.v.disabled":"Disabled","ov.v.full":"Full","ov.v.partial":"Partial","ov.v.none":"None","ov.v.real":"Real","ov.v.loaded":"Loaded","ov.v.notLoaded":"Not loaded","ov.v.attached":"Attached","ov.v.partiallyAttached":"Partially attached","ov.v.published":"Published","ov.v.notPublished":"Not published","ov.v.healthy":"Healthy","ov.v.ready":"Ready","ov.v.error":"Error","ov.v.unknown":"Unknown","ov.v.ingress":"Ingress","ov.v.egress":"Egress","ov.engine":"Engine","ov.export":"Export state JSON","ov.counters":"Traffic counters","ov.resources":"Backend features","ov.available":"Available","ov.notAvailable":"Not provided","ov.profileBase":"Base","ov.profileFull":"Full observability","ov.scopeVisible":"visible traffic","ov.scopeAll":"all traffic","ov.countersSince":"Since {t}, {scope}","ov.f.engine":"Engine","ov.f.api":"API","ov.f.build":"Build","ov.f.instance":"Instance","ov.f.started":"Started","ov.f.activated":"Configuration activated","ov.f.tcp":"TCP connections","ov.f.udp":"UDP connections","ov.f.total":"Total connections","ov.f.rateWindow":"Rate window","ov.r.routingTrace":"Routing trace","ov.r.dnsQuery":"DNS query","ov.r.dnsCache":"DNS cache","ov.r.probes":"Latency probes","ov.r.trafficHistory":"Traffic history","ov.r.memoryHistory":"Memory history","ov.r.outbounds":"Outbound counters","ov.f.kind":"Kind","ov.f.state":"State","ov.f.visibility":"Visibility","ov.f.backend":"Backend","ov.f.programs":"Programs","ov.f.hooks":"Hooks","ov.f.routing":"Routing publication","ov.f.health":"Health","ov.f.maps":"Maps","ov.f.connState":"Connection map occupancy","ov.f.rss":"Resident memory","ov.f.cgroupCurrent":"cgroup used","ov.f.cgroupLimit":"cgroup limit","ov.f.cgroupPercent":"cgroup usage","ov.f.cgroupScope":"cgroup scope","ov.v.cgroupService":"This service","ov.v.cgroupShared":"Shared with other processes","ov.f.oomHigh":"High-watermark events","ov.f.oom":"OOM events","ov.f.oomKill":"OOM kills","ov.f.ebpfBytes":"eBPF kernel memory","ov.config":"Configuration version","ov.uptime":"Uptime","ov.cpu":"CPU usage","ov.lastReload":"Last reload","ov.datapath":"Datapath","ov.memory":"Memory","ov.attachments":"Attachments","ov.name":"Name","ov.interface":"Interface","ov.direction":"Direction","ov.state":"State","ov.reload":"Reload","ov.suspend":"Suspend","ov.resume":"Resume","ov.running":"Running","ov.succeeded":"Completed","ov.failed":"Failed","ov.loading":"Loading","ov.unavailable":"This backend does not provide this data","ov.unknown":"Unknown","ov.operationResult":"{action}: {status} ({id})","ov.operationError":"Could not run the operation","arrange.drag":"Drag {name}","arrange.dropInto":"Drop into group {group}","arrange.ruleSelectsMore":{one:"Currently selects: {names} and {n} more",other:"Currently selects: {names} and {n} more"},"arrange.failed":"Could not apply: {error}","arrange.memberCount":{one:"{n} node",other:"{n} nodes"},"arrange.show":"Show","arrange.subscriptions":"Subscriptions","arrange.nodes":"Nodes","arrange.selected":"{n} selected","arrange.selectHint":"Select rows to add them together, or drag them.","arrange.clear":"Clear selection","arrange.addSelected":"Add to group","arrange.undoShort":"Undo","arrange.undoRemove":"Undo removing {name}","arrange.ruleSelects":"Currently selects: {names}","policy.tab.groups":"Groups","policy.tab.arrange":"Arrange","arrange.note":"Drag a node or subscription from the right onto a group to add it, or use the Add menu on its row. Changes are staged; review them and apply them together.","arrange.readOnly":"This backend does not provide configuration writes, so this view is read-only.","arrange.noMain":"The main configuration is not fully available, so it cannot be arranged here.","arrange.pendingRegion":"Changes not applied","arrange.pending":{one:"{n} change not applied",other:"{n} changes not applied"},"arrange.discard":"Discard all","arrange.review":"Review and apply","arrange.dropHint":"Drop here to add","arrange.new":"New","arrange.holdsAll":"This group has no filter, so it holds every node.","arrange.byName":"Nodes added by name","arrange.bySubscription":"Whole subscriptions","arrange.byRule":"Selected by rules","arrange.subscriptionCount":{one:"{name} ({n} node)",other:"{name} ({n} nodes)"},"arrange.ruleNote":{one:"Nodes this rule selects cannot be removed here.",other:"Nodes these {n} rules select cannot be removed here."},"arrange.editSource":"Change them in the configuration source","arrange.remove":"Remove {name} from {group}","arrange.lastMember":"This is the group's last filter; removing it would make the group hold every node.","arrange.stillIn":"{names} still match another rule of this group and stay in it after the name is removed.","arrange.tray":"Nodes and subscriptions","arrange.search":"Search nodes or subscriptions","arrange.trayEmpty":"No matching nodes or subscriptions","arrange.subscriptionMeta":{one:"Subscription, {n} node",other:"Subscription, {n} nodes"},"arrange.newGroup":"New group","arrange.create":"Create","arrange.groupName":"Group name","arrange.groupNameHint":"Letters, digits, underscores, periods and hyphens only.","arrange.badName":"Use only letters, digits, underscores, periods and hyphens.","arrange.takenName":"A group with this name already exists.","arrange.policy":"Selection policy","arrange.newGroupNote":"Add at least one node or subscription after creating it; a group with no members holds every node, so it cannot be applied.","arrange.policy.fastest":"Fastest on average","arrange.policy.fastestHint":"Uses the node with the lowest recent average latency (recommended)","arrange.policy.fallback":"First available","arrange.policy.fallbackHint":"Uses the current node until it fails, then the next in order","arrange.policy.spread":"Round robin","arrange.policy.spreadHint":"Spreads connections across all nodes in turn","arrange.policy.manual":"Manual","arrange.policy.manualHint":"The node is selected by hand on the Groups tab","arrange.reviewTitle":"Review changes","arrange.apply":"Apply","arrange.undo":"Undo: {change}","arrange.showText":"Show the configuration text to be written","arrange.applyNote":"Applying validates the whole configuration first, then writes and reloads; nothing is written if validation fails.","arrange.emptyNew":"Group {group} has no members yet; a group without members holds every node, so add a node or subscription first.","arrange.unknown":"No node is named {names} right now; the name takes effect once such a node appears.","arrange.applied":{one:"Applied {n} change and reloaded.",other:"Applied {n} changes and reloaded."},"arrange.change.addNode":"Add node {name} to {group}","arrange.change.removeNode":"Remove node {name} from {group}","arrange.change.addSubscription":"Add the whole subscription {name} to {group}","arrange.change.removeSubscription":"Remove subscription {name} from {group}","arrange.change.createGroup":"Create group {group}","policy.kind.selector":"Manual","policy.kind.urltest":"Fastest on average","policy.kind.loadbalance":"Load balance","policy.kind.fallback":"First available","policy.kind.random":"Random","policy.kind.score":"Score","policy.filter":"Filter nodes","policy.region":"Region","policy.allRegions":"All regions","policy.sort":"Sort","policy.byLatency":"By latency","policy.byName":"By name","policy.aliveOnly":"Available only","policy.none":"No matching nodes","policy.members":{one:"{n} member",other:"{n} members"},"policy.membersDown":{one:"{n} member, {down} unavailable",other:"{n} members, {down} unavailable"},"policy.loading":"Loading {id}…","policy.noProbe":"This group does not support TCP probes","policy.probing":"Testing…","policy.probeAll":"Test all","policy.healthy":"{n} available","policy.down":"{n} unavailable","policy.untested":"{n} untested","policy.network":"Select network for {name}","policy.both":"Both","policy.updated":"Configuration for {name} written and reloaded","policy.interrupt":"Interrupt existing connections on switch","policy.selectedInterrupted":"{name} selected {member}; existing connections interrupted","policy.selectedKept":"{name} selected {member}; existing connections kept","policy.note":"Manual groups switch members directly, and TCP and UDP can be selected separately.","policy.automatic":"Automatic","policy.overridden":"Pinned","policy.releaseOverride":"Back to automatic","policy.pinned":"{name} pinned {member}; the automatic policy is paused","policy.backToAutomatic":"{name} is automatic again, currently {member}","policy.noneSelected":"no member selected yet","policy.empty":"No groups","policy.cfg.defaultMember":"Default member","policy.cfg.finalOutbound":"Final outbound","policy.cfg.checkUrl":"Check URL","policy.cfg.tolerance":"Tolerance","policy.cfg.checkInterval":"Check interval","policy.cfg.idleTimeout":"Idle timeout","policy.cfg.interruptConnections":"Interrupt connections on switch","policy.cfg.seconds":"{n} s","policy.edit":"Edit","policy.editTitle":"Edit group {name}","policy.editHelp":"Rewrites this group's policy and filters in the group section of the main configuration, keeping its other fields. Saves and reloads after validation passes.","policy.filterN":"Filter {n}","policy.removeFilter":"Remove filter {n}","policy.addFilter":"Add filter","policy.save":"Save","policy.editUnsafe":"Filters and the policy must stay on one line with balanced parentheses and no comment or brace.","policy.cfg.millis":"{n} ms","policy.probeChanged":"Available: {healthy}, unavailable: {unavailable}, unknown: {unknown}, selection: changed","policy.probeUnchanged":"Available: {healthy}, unavailable: {unavailable}, unknown: {unknown}, selection: unchanged","policy.probePartial":{one:"Tested {done} of {n} member; {error}",other:"Tested {done} of {n} members; {error}"},"policy.purpose.data":"data","policy.purpose.dns":"DNS","policy.purpose.shared":"shared","policy.observedVia":"{transport} ({purpose})","policy.sectionCount":" ({n})","policy.memberPerNetwork":"TCP: {tcp}, UDP: {udp}","policy.editNoMain":"The main configuration is not available yet","policy.editNoEntry":"This group is not defined in the group section of the main configuration","policy.checkEdit":"Check settings","policy.checkEditTitle":"Check settings for {name}","policy.checkUrlHelp":"An http or https URL the backend requests through each member. Leave empty to use the global check URL.","policy.checkIntervalHelp":"Seconds between checks. Leave empty to use the global interval.","policy.checkUrlInvalid":"Enter an http or https URL with a host, up to 2048 bytes, without a user name, whitespace or commas.","policy.checkIntervalInvalid":"Enter a whole number of seconds, 1 or more.","policy.actionFailed":"Could not complete the action on {name}: {error}","flow.detailLoading":"Loading flow trace…","flow.allStates":"All states","flow.map":"Traffic path","flow.topology":"Connection topology","flow.mapOutbound":"Outbound","flow.mapNode":"Node","flow.mapRule":"Rule","flow.mapUnknown":"Unknown","flow.mapFilter":"Path: {label}","flow.clearMapFilter":"Clear path filter","flow.viewPinned":{one:"Show the {n} flow on this path",other:"Show the {n} flows on this path"},"flow.mapEmpty":"No rules, policy groups or retained flows are available to display","flow.stageClient":"Device","flow.treeFlows":{one:"{n} flow",other:"{n} flows"},"flow.treeTo":"→ {names}","flow.treeFrom":"← {names}","flow.byRule":"By rule","flow.byClient":"By device","flow.addRule":"Add a rule for this target","flow.treeNoNode":"No node selected","flow.treePanHint":"Swipe sideways to view outbounds and nodes","flow.treeShowMore":{one:"Show {n} more item",other:"Show {n} more items"},"flow.treeFewer":{one:"Show only the first {n} item",other:"Show only the first {n} items"},"flow.coverage":"Observation coverage","flow.coverageSummary":{one:"{n} scope not fully observed",other:"{n} scopes not fully observed"},"flow.connectionFilter":"Connection: {id}","flow.clearConnectionFilter":"Clear connection filter","flow.viewConnection":"View connection","flow.empty":"No matching flows","flow.dropped":{one:"{n} dropped record",other:"{n} dropped records"},"flow.revision":"Revision {n}","flow.userspaceTcp":"Userspace TCP","flow.userspaceUdp":"Userspace UDP","flow.kernelDirect":"Kernel direct","flow.kernelBlock":"Kernel block","flow.dnsIntercept":"DNS interception","flow.kernelBypass":"Kernel bypass","flow.full":"Full","flow.partialVisibility":"Partial","flow.f.chain":"Chain","flow.f.plane":"Plane","flow.f.must":"must","flow.f.dialTarget":"Dial target","flow.f.verification":"Verification","flow.f.selectedIp":"Selected IP","flow.f.selectionPath":"Selection path","flow.f.leafNode":"Leaf node ID","flow.f.milestone":"Milestone","flow.f.reason":"Reason","flow.f.action":"Action","flow.f.performed":"Performed","flow.f.input":"{name}","flow.f.source":"Source","flow.f.cache":"Cache","flow.v.kernel":"Kernel","flow.v.userspace":"Userspace","flow.v.matched":"Matched","flow.v.otherFamilyTrusted":"Other family trusted","flow.v.failed":"Failed","flow.v.notRequired":"Not required","flow.v.unavailable":"Unavailable","flow.v.pass":"Pass","flow.v.redirect":"Redirect","flow.v.hold":"Hold","flow.v.armDirect":"Arm direct","flow.v.activateDirect":"Activate direct","flow.v.activateProxy":"Activate proxy","flow.v.drop":"Drop","flow.v.started":"Started","flow.v.succeeded":"Succeeded","flow.v.cancelled":"Cancelled","flow.v.transportReady":"Transport ready","flow.v.targetRequestSent":"Target request sent","flow.v.targetConfirmed":"Target confirmed","flow.v.firstReply":"First reply","flow.v.terminal":"Terminal","flow.v.routeSelected":"Route selected","flow.v.noNewRoutingInput":"No new routing input","flow.v.replyReceived":"Reply received","flow.v.hit":"Hit","flow.v.miss":"Miss","flow.v.stale":"Stale","flow.v.bypass":"Bypassed","flow.v.hosts":"hosts file","flow.v.coalesced":"Coalesced","flow.v.cache":"Cache","flow.v.lan":"LAN","flow.v.wan":"WAN","flow.v.tlsSni":"TLS SNI","flow.v.httpHost":"HTTP Host","flow.v.quicSni":"QUIC SNI","flow.v.dnsMapping":"DNS mapping","flow.v.explicit":"Explicit","flow.m.notInstrumented":"Not instrumented","flow.m.startedLate":"Recording started late","flow.m.bufferOverflow":"Buffer overflow","flow.m.sampled":"Sampled","flow.m.redacted":"Redacted","flow.m.evicted":"Evicted","flow.missing":"Why incomplete","flow.status.complete":"Complete","flow.status.partial":"Partial","flow.status.disabled":"Disabled","flow.stage.input":"Input","flow.stage.route":"Route","flow.stage.dialMode":"Dial mode","flow.stage.dns":"DNS","flow.stage.outbound":"Outbound","flow.stage.connection":"Connection","flow.stage.datapath":"Datapath","flow.stage.reroute":"Reroute","rule.dictionaryCaption":{one:"{n} rule, generation {generation}",other:"{n} rules, generation {generation}"},"rule.where":"Where","rule.openSource":"Open source","rule.lineOnly":"Line {n}","rule.add":"Add rule","rule.must":"Require this outbound","rule.addHelp":"Adds the rule to the source file's routing section, then saves and reloads after validation passes.","rule.condition":"Condition","rule.conditionMode":"Condition form","rule.pick":"Select","rule.kind":"Match by","rule.values":"Values","rule.valuesHelp":"Separate multiple values with commas","rule.valuesInvalid":"Values cannot contain an apostrophe, #, ->, braces or unmatched parentheses.","rule.kind.domainSuffix":"Domain suffix","rule.kind.domain":"Full domain","rule.kind.geosite":"geosite category","rule.kind.dip":"Destination IP","rule.kind.geoip":"geoip region","rule.kind.sip":"Source IP","rule.kind.dport":"Destination port","rule.kind.sport":"Source port","rule.kind.pname":"Process name","rule.kind.l4proto":"Transport protocol","rule.position":"Insert","rule.positionEnd":"Last, before the fallback","rule.positionBefore":"Before rule {n}","rule.added":"Rule written; reloading","rule.hold":"Hold","rule.refused":"Validation did not pass; nothing written","rule.partial":{one:"{n} rule written; {held} still held",other:"{n} rules written; {held} still held"},"rule.holdHelp":"Held rules are written together when you apply them from the top bar. Apply now writes this rule and reloads at once.","rule.addApply":"Apply now","rule.held":"Rule held; not written yet","rule.pending":"Pending: {n}","rule.pendingFiles":"Writes {n} files","rule.applyPending":"Apply and reload ({n})","rule.applyFiles":"Apply and reload ({n}); writes {files} files","rule.applied":{one:"{n} rule written; reloading",other:"{n} rules written; reloading"},"rule.discard":"Discard held rule","rule.remove":"Remove rule","rule.removeTitle":"Remove this rule?","rule.removeHelp":"Deletes line {line} of {file}, then saves and reloads after validation passes.","rule.removed":"Rule removed; reloading","rule.stale":"The rule list and configuration are out of sync. The list has been refreshed; retry the operation.","rule.note":"Simulates routing with the current configuration, not an actual connection. Enter a domain or destination IP. For live or query resolution, enter a domain and leave the destination IP empty.","rule.dstPort":"Destination port","rule.srcPort":"Source port","rule.resolve":"Resolution mode","rule.resolveNone":"No resolution (none)","rule.resolveLive":"Live resolution (live)","rule.resolveQuery":"Resolve, then simulate (query)","rule.invalidTarget":"Enter a domain or destination IP.","rule.invalidPort":"Ports must be integers from 1 to 65535.","rule.invalidIp":"Enter an IPv4 or IPv6 address.","rule.invalidLive":"Resolving requires a domain and an empty destination IP.","rule.advanced":"Advanced","rule.result.matched":"Matched","rule.result.not_matched":"Not matched","rule.result.skipped":"Skipped","rule.result.indeterminate":"Indeterminate","rule.trace":"Trace simulation","rule.map":"Routing map","rule.flows":"Flow records","rule.determinate":"Determined","rule.run":"Run trace","rule.result":"Simulation result","rule.observed":"Observed at","rule.decision":"Decision","rule.likelyOutbound":"Likely outbound","rule.likelyHelp":"Earlier rules could not be evaluated because inputs were missing. If none matches, traffic uses the indicated likely outbound. Provide {inputs} and simulate again to determine the result.","rule.missing":"Missing inputs","rule.node":"Node","rule.reach":"Reachability","rule.untested":"Not tested","rule.noMember":"The group currently has no selected member","rule.ipOnly":"With only a destination IP, the simulation evaluates the IP and port. When dial_mode uses a domain-family mode, the engine extracts the domain from actual TLS or HTTP traffic and evaluates the rules again. Include the domain to simulate that result.","rule.evaluation":"Rule evaluation {n}","rule.expression":"Expression","rule.outcome":"Result","rule.address":"Address","rule.simulatedAddress":"Simulated address","rule.listTitle":"Rule list","rule.id":"#","rule.hits":"Hits","rule.share":"Share","rule.distributionCaption":{one:"The {n} flow retained in this snapshot, grouped by rule; not accumulated across polls",other:"The {n} flows retained in this snapshot, grouped by rule; not accumulated across polls"},"rule.distributionScope":"Grouped by expression, ID and source. Summaries have no generation ID. Shares use the entire snapshot.","rule.distributionSource":"Rule source","rule.sourceKernel":"Kernel","rule.sourceRecomputed":"Recomputed","rule.sourceUnknown":"Unknown","rule.unknownRule":"Unknown rule","rule.distributionEmpty":"No matching flows in this snapshot","rule.dictionaryEmpty":"No routing rules","rule.dnsHeading":"DNS: {name}","rule.droppedUnknown":"Dropped record count unknown","rule.traceFailed":"Could not run the trace","nav.settings":"Settings","settings.backend":"Backend","settings.profile":"Profile","settings.profilesCorrupt":"Could not read saved backend profiles: the JSON is corrupt. Reconfigure the backend in Settings.","settings.profileName":"Profile name","settings.addProfile":"Add profile","settings.renameProfile":"Rename profile","settings.deleteProfile":"Delete profile","settings.deleteProfileHelp":"Delete {name}? Its backend URL and token will be removed from this browser.","settings.switchProfileHelp":"Switching profiles discards unsaved backend URL and token changes. Saved profiles remain unchanged.","settings.profileDiscardHelp":"This discards unsaved backend URL and token changes.","settings.api":"Backend URL","settings.apiHelp":"Backend root or reverse-proxy prefix, not /api/v1. Leave empty or enter mock for built-in demo data.","settings.invalidUrl":"Enter http(s)://host[:port][/prefix] without credentials, a query, or a fragment, or enter mock.","settings.passwordMode":"This backend signs in with a username and password, so no token is needed; sign out here once signed in.","settings.token":"Token","settings.showToken":"Show token","settings.hideToken":"Hide token","settings.test":"Test connection","settings.signOut":"Sign out","settings.signOutFailed":"Could not sign out","settings.testing":"Testing connection…","settings.save":"Save","settings.saveHelp":"Saving reloads the page to apply the profile.","settings.saveError":"Could not save settings: allow local storage for this site.","settings.firstRun":"No backend configured; showing built-in demo data","settings.demo":"Using built-in demo data; no external backend was contacted.","settings.reachable":"Connected, API v{version}","settings.network":"Network connection failed. Check the backend URL and service.","settings.cors":"Network or CORS request failed. Check that the backend is reachable and allows this origin.","settings.unauthorized":"Token required. Enter a valid token and retry.","settings.tokenRejected":"The backend rejected the token. Enter a valid token and retry.","settings.nonJson":"The backend did not return valid JSON. Check the backend root or reverse-proxy prefix.","settings.invalidResponse":"The response has no API version information. Check the backend URL.","settings.httpError":"The backend returned HTTP {status}. Check authorization and the backend configuration.","settings.timeout":"Connection test timed out after 5 seconds. Check the backend URL and network.","settings.appearance":"Appearance","settings.scheme":"Color scheme","settings.mirror":"Mirrored layout","settings.toastPlacement":"Notification position","settings.toastTop":"Top center","settings.toastTopEnd":"Top corner","settings.toastBottom":"Bottom center","settings.toastBottomEnd":"Bottom corner","settings.mirrorHelp":"Flips the layout left to right for left-handed use.","settings.runtime":"Backend options","settings.runtimeNote":"Changes apply immediately and are not written to the configuration file. A restart, or any change that reloads the configuration, restores the configured values; switching the outbound mode, editing nodes, groups or rules, and updating geodata all reload it.","settings.runtimeUnavailable":"This backend does not provide runtime option changes","settings.sourceConfig":"From configuration","settings.sourceRuntime":"Runtime override","settings.logLevel":"Log level","settings.logBuffer":"Log records kept","settings.dnsLogSize":"DNS log records kept","settings.flowsMax":"Flows kept","settings.flowsRetention":"Flow retention (seconds)","settings.recording":"Recording","settings.recordFlows":"Flow recording","settings.recordLogs":"Log recording","settings.recordDnsLog":"DNS log","settings.record.auto":"With panel","settings.record.on":"Always","settings.record.off":"Off","settings.recordingActive":"Recording","settings.recordingIdle":"Idle","settings.recordingForbidden":"Disabled in configuration","settings.recordingEvents":"Event capture is running: a panel is attached or a recorder is pinned on. Each recorder's light shows whether it is recording.","settings.recordingDetached":"No panel is attached; recorders set to follow one are idle.","settings.recordingGrace":"Recording continues for {n} s after the panel detaches.","settings.range":"{min} to {max}","settings.rangeMin":"At least {min}","settings.apply":"Apply","settings.runtimeSaved":"Backend options applied","settings.runtimeConflict":"Backend options changed; your draft was kept. Review it before applying, or discard changes to load the current values.","settings.about":"About","settings.actions":"Backend actions","settings.actionsNote":"This section provides the individual actions available on other pages. Buttons appear only for capabilities advertised by the backend.","settings.groupLifecycle":"Service","settings.actionsNone":"This backend does not provide any actions","settings.closeAllHelp":"Closes every connection the backend owns ({n} right now), including ones opened after this dialog; kernel-direct connections are skipped.","settings.refreshAll":{one:"Refresh subscription ({n})",other:"Refresh all subscriptions ({n})"},"settings.refreshedAll":"Subscriptions refreshed: {n} of {total}","settings.refreshedDegraded":"Nodes applied, but the runtime is degraded","settings.refreshedAllFailed":"Subscriptions refreshed: {n} of {total}; {failed} failed","settings.geodata":"Geodata","settings.geodataNote":"The data files used by geosite and geoip rules. Updating downloads and verifies the files from their sources, replaces the existing files and reloads the configuration.","settings.geodataUpdate":"Update","settings.geodataUpdated":"Geodata updated and reloaded","settings.geodataAsset":"Asset","settings.geodataSize":"Size","settings.geodataSource":"Source","settings.geodataSourcesNote":"Changes save at once; a new source downloads right away.","settings.geodataSourcesNoteStored":"Changes save at once. This backend cannot update on request, so a new source downloads at the next automatic update.","settings.geodataMissing":"Lacks categories the rules use: {codes}","settings.geodataLackingTitle":"Use {preset}","settings.geodataLackingHelp":"{preset} lacks categories the rules use: {codes}. The backend refuses such a file on update and keeps the current files.","settings.geodataSaveUpdate":"Save and update","settings.geodataSaveSources":"Save","settings.geodataDetails":"Details","settings.geodataUpdating":"Updating…","settings.geodataRouteGroupGone":"Group no longer exists","settings.geodataRouteGroup":"Specific group","settings.geodataRouteDirect":"Direct","settings.geodataRouteRoutingVia":"By routing rules ({group})","settings.geodataRouteRouting":"By routing rules","settings.geodataRoute":"Download route","settings.geodataEdit":"Edit","settings.geodataCustomUrls":"Custom URLs","settings.geodataConfigSeeded":"When honk restarts, the URLs in the config file replace any changes made to them here.","settings.geodataPreset.metacubex":"MetaCubeX full","settings.geodataPreset.metacubexLite":"MetaCubeX lite","settings.geodataPreset.loyalsoldier":"Loyalsoldier","settings.geodataCustom":"Custom","settings.geodataPresetSize":"geosite about {geosite}, geoip about {geoip}","settings.geodataUrlLabel":"{kind} URL {n}","settings.geodataMoveUp":"Move {url} up","settings.geodataMoveDown":"Move {url} down","settings.geodataUrlHelp":"Up to 4 URLs per asset, tried in order; the next is used only when one fails. Use URLs that serve the file directly: GitHub release download links redirect and do not work.","settings.geodataUrlRequired":"At least one URL is required","settings.geodataUrlInvalid":"Enter an http(s) URL without credentials or a fragment, at most 4096 characters.","settings.geodataUrlDuplicate":"This URL is listed twice","settings.geodataAutoUpdate":"Automatic updates","settings.geodataInterval":"Interval (hours)","settings.geodataSaved":"Geodata sources saved; they download at the next automatic update","settings.geodataAutoSaved":"Automatic update settings saved","settings.geodataRouteSaved":"Download route saved","settings.geodataSaveFailed":"Could not save the geodata settings","settings.geodataStatus":"Status","settings.geodataUpdateNow":"Update now","settings.geodataLastUpdated":"Last updated","settings.geodataLastError":"Last error","settings.geodataNever":"Never","settings.geodataVerifiedYes":"Verified","settings.geodataVerifiedNo":"Not verified","settings.paired":"Backend URL and token were filled in from the link; they take effect once saved.","settings.install":"Install as an app","settings.installHintIos":"To install, tap Share, then Add to Home Screen.","settings.installHintMac":"To install, choose File > Add to Dock from the menu bar.","settings.installed":"Installed","settings.apiMajor":"The backend uses API major version {major}. This panel implements the contract for major version 1, so fields may be incompatible.","settings.installFailed":"Could not install","settings.runtimeFailed":"Could not apply backend options","settings.refreshAllFailed":"Could not refresh subscriptions","settings.geodataFailed":"Could not update geodata","shell.langUnavailable":"Could not switch to {name}: the interface text did not load.","shell.searchUnavailable":"Could not open search: it did not load.","shell.shortcuts":"Keyboard shortcuts","shell.notOffered":"This backend does not provide this page","shell.toActivity":"Back to activity","shell.shortcutHelp":"Show shortcut help","shell.shortcutSequence":"Press g, then the page letter within 800 ms. Shortcuts are inactive while typing.","shell.shortcutFilter":"Focus this page's filter field","shell.shortcutTables":"Tables and lists: ↑ ↓ move, Enter or Space selects, Esc closes the side panel or clears a pin.","shell.shortcutEditor":"Configuration editor: Ctrl S saves, Ctrl F searches, Ctrl G goes to a line, Ctrl / toggles a comment.","shell.shortcutEditorMac":"Configuration editor: ⌘S saves, ⌘F searches, ⌘G goes to a line, ⌘/ toggles a comment.","nav.rules":"Rules","nav.config":"Configuration","nav.nodes":"Nodes","nav.logs":"Logs","login.title":"Token required","login.noApiTitle":"This honk build has no native API","login.noApiNote":"Use a honk build that provides the native API.","login.requirements":"Native API requirements","login.note":"{backend} requires a Bearer token; it is stored only in this browser and sent in the Authorization header of every request.","login.token":"Token","login.submit":"Connect","login.settings":"Change backend URL","login.rejected":"The backend rejected the saved token; enter a new one.","login.stale":"The profile changed; the token was not saved. Reload the page and check the backend URL before connecting.","login.setupTitle":"Create the administrator","login.passwordTitle":"Sign in","login.setupNote":"{backend} has no administrator yet; creating one signs you in. Accepted only from loopback, private or link-local addresses.","login.username":"Username","login.password":"Password","login.confirm":"Confirm password","login.passwordRule":"8 to 128 characters.","login.create":"Create and sign in","login.signIn":"Sign in","login.showPassword":"Show password","login.hidePassword":"Hide password","login.usernameRequired":"Enter a username.","login.passwordRequired":"Enter a password.","login.badUsername":"The username may contain only letters, digits, underscores, periods and hyphens, 1 to 64 characters.","login.passwordShort":"The password is shorter than 8 characters.","login.passwordLong":"The password is longer than 128 characters.","login.mismatch":"The passwords do not match.","login.invalidCredentials":"The username or password is incorrect.","login.needsSetup":"The backend has no administrator yet; create one first.","login.alreadySetUp":"An administrator already exists; sign in with that account.","login.setupPeer":"The backend accepts administrator setup only from loopback, private or link-local addresses.","login.rateLimited":{one:"Too many attempts. Try again in {n} second.",other:"Too many attempts. Try again in {n} seconds."},"login.failed":"Could not sign in: {error}","login.sessionEnded":"The session has ended; sign in again.","hint.logs":"Live engine log","hint.nodes":"Node sources, usage and refresh","nav.activity":"Activity","nav.overview":"Overview","nav.connections":"Connections","nav.policies":"Policies","nav.dns":"DNS","nav.events":"Events","hint.overview":"Service state and backend features","hint.connections":"Live connections, grouped by device","hint.policies":"Policy groups and their selected nodes","hint.rules":"Rule list, routing map, flow records and trace simulation","hint.config":"Accepted configuration sources, validation and editing","hint.dns":"Name resolution and cache contents","hint.events":"Backend state changes","hub.overview":"Overview","hub.traffic":"Traffic","hub.routing":"Routing","hub.settings":"Settings",search:"Search pages, connections, nodes, groups and sources",refresh:"Refresh","shell.rateLimited":"Rate limit reached: retrying in {n} s","shell.backendBusy":"Backend busy: retrying in {n} s","theme.system":"System","theme.light":"Light","theme.dark":"Dark",palette:"Palette","palette.glass":"Frosted glass",wordmark:"Wordmark","wordmark.gradient":"Gradient","wordmark.plain":"Plain",lang:"Language",theme:"Theme",moreOptions:"More options",hubs:"Sections","search.nodes":"Nodes","search.none":"No matches","search.groups":"Groups","search.pages":"Pages","search.providers":"Node sources","search.sources":"Configuration sources","search.nodeCount":{one:"{n} node",other:"{n} nodes"},"shell.theme":"Theme: {theme}","shell.reloadEngine":"Reload honk","shell.shortcut":"Ctrl K","shell.macShortcut":"⌘K","shell.backend.title":"Backend","shell.backend.label":"Backend: {engine}, {state}","shell.backend.profile":"Profile","shell.backend.address":"Backend URL","shell.backend.build":"Build","shell.backend.demo":"Built-in demo data","shell.backend.connected":"Connected","shell.backend.connecting":"Connecting","shell.backend.signIn":"Sign-in required","shell.backend.offline":"Unreachable","shell.backend.degraded":"Connected, version unknown","shell.backend.edit":"Edit backend","palette.rosePine":"Rosé Pine","palette.moon":"Moon","palette.dawnMain":"Dawn / Main","palette.dawnMoon":"Dawn / Moon","palette.catppuccin":"Catppuccin","palette.frappe":"Frappé","palette.macchiato":"Macchiato","palette.mocha":"Mocha","palette.latteFrappe":"Latte / Frappé","palette.latteMacchiato":"Latte / Macchiato","palette.latteMocha":"Latte / Mocha","palette.nord":"Nord","palette.nordVariants":"Snow Storm / Polar Night","palette.antd":"Ant Design","palette.defaultDark":"Default / Dark","palette.bytedance":"ByteDance","palette.arco":"Arco Design","palette.semi":"Semi Design","palette.lightDark":"Light / Dark","palette.kary":"Kary Pro Colors","about.title":"About doona","about.tagline":"Web UI for {engine}","about.duck":"Pet me","about.quack":"Honk!","about.engine":"Engine","about.api":"API","about.license":"License","about.contract":"Contract commit","about.close":"Close","about.credits":"Fonts Noto Sans TC/SC (OFL); icons Adobe Spectrum (Apache-2.0); palettes from Rosé Pine, Catppuccin, Nord, Kary Pro Colors, Ant Design, Arco Design and Semi Design.","about.privacy":"doona talks only to the backend you connect it to. It collects no data and sends nothing anywhere else.","palette.glassName":"Glass","ui.separator":", ","ui.aside":"{text} ({note})","ui.requestNote":" (request_id: {id})","ui.apiVersion":"{name} v{major} ({status})","lifecycle.starting":"Starting","lifecycle.running":"Running","lifecycle.reloading":"Reloading","lifecycle.suspended":"Suspended","lifecycle.draining":"Draining","lifecycle.degraded":"Degraded","lifecycle.failed":"Failed","cm.find":"Find","cm.completions":"Completions","cm.replace":"Replace","cm.next":"Next","cm.previous":"Previous","cm.all":"All","cm.matchCase":"Match case","cm.regexp":"Regexp","cm.byWord":"By word","cm.replaceOne":"Replace","cm.replaceAll":"Replace all","cm.gotoLine":"Go to line","cm.go":"Go","cm.currentMatch":"Current match","cm.replacedMatches":"Matches replaced: $","cm.replacedOnLine":"Replaced match on line $","cm.onLine":"On line","cm.selectionDeleted":"Selection deleted","cm.controlCharacter":"Control character",close:"Close","ui.back":"Back","toast.collapse":"Collapse","toast.clearAll":"Clear all","ui.openRule":"Open {rule} in the rule list",clear:"Clear","ui.all":"All","ui.allCount":"All {n}","ui.errNoJson":"The backend response has no JSON body.","ui.errNetwork":"The backend could not be reached.","ui.backendMessage":"Backend message: {message}","ui.backend.sampleDelayed":"Routing map sample delayed","ui.backend.invalidRequest":"Invalid request","ui.backend.authenticationRequired":"Authentication required","ui.backend.permissionDenied":"Permission denied","ui.backend.resourceNotFound":"Resource not found","ui.backend.capabilityNotSupported":"Capability unavailable","ui.backend.stateConflict":"Operation conflicts with the current state","ui.backend.idempotencyConflict":"Idempotency key conflicts with the original request","ui.backend.eventCursorExpired":"Event cursor expired","ui.backend.snapshotUnavailable":"Snapshot unavailable","ui.backend.snapshotExpired":"Snapshot expired","ui.backend.flowExpired":"Flow record expired","ui.backend.staleRevision":"Revision changed","ui.backend.requestTooLarge":"Request too large","ui.backend.unsupportedMediaType":"Unsupported media type","ui.backend.unsupportedValue":"Unsupported value","ui.backend.preconditionRequired":"Precondition required","ui.backend.rateLimited":"Too many requests","ui.backend.temporarilyUnavailable":"Backend temporarily unavailable","ui.backend.setupRequired":"Initial setup required","ui.backend.setupAlreadyCompleted":"Initial setup already completed","ui.backend.invalidCredentials":"Invalid credentials","ui.backend.reloadRejected":"The backend rejected the configuration reload","ui.backend.reloadDegraded":"The configuration is applied, but the datapath is degraded","ui.backend.engineUnavailable":"The engine is unavailable or stopped before finishing","ui.backend.requestExhausted":"Reload request numbers are exhausted","ui.backend.geodataUpdateFailed":"The geodata update failed","ui.backend.assetValidationFailed":"The new geodata file failed validation: it could not be read or lacks categories the rules use. The current files are kept","ui.backend.probeInterrupted":"The probe stopped before finishing","ui.backend.probeCleanupFailed":"The probe finished, but its cleanup failed","ui.backend.publicationRejected":"The backend rejected the new nodes and kept the active ones","ui.backend.fetchFailed":"Could not fetch the subscription; the active nodes are kept","ui.backend.providerReplaced":"The subscription changed during the refresh, so this result was discarded","ui.backend.resultTooLarge":"The operation result exceeds the backend memory limit","ui.backend.routeUnavailable":"The subscription download route has no usable node yet; download this subscription directly","ui.backend.publicationUnavailable":"The backend stopped before applying the new nodes","ui.backend.supervisorStopped":"The backend stopped before the refresh finished","ui.backend.probeCancelled":"The probe was cancelled before measuring","ui.backend.probeDeadline":"The probe timed out before measuring","ui.backend.probeFailed":"The probe failed","ui.backend.duplicateSubscriptionEntry":"Duplicate node in the subscription; the first usable entry is kept","ui.errOtherOrigin":"The operation address belongs to another origin and was not read.","ui.errNoStream":"The backend response has no event stream.","ui.errGenerationChanged":"The routing changed during simulation. Run the query again.","ui.listSeparator":", ","ui.labelSeparator":": ","ui.filter":"Filter","ui.clearFilters":"Clear filters","ui.loading":"Loading…","ui.empty":"No data","ui.loadFailed":"Could not load data: {error}","ui.retry":"Retry","ui.refreshed":"Data refreshed.","ui.newBuild":"A new version is ready; reload the page to use it.","ui.reloadPage":"Reload","ui.refreshFailed":"Could not refresh data","ui.saved":"Settings saved.","ui.state":"State","ui.actions":"Actions","ui.moreActions":"More actions","ui.source":"Source","ui.target":"Target","ui.domain":"Domain","ui.destinationIp":"Destination IP","ui.sourceIp":"Source IP","ui.process":"Process name","ui.outbound":"Outbound","ui.network":"Network protocol","ui.protocol":"Protocol","ui.started":"Started","ui.download":"Download","ui.upload":"Upload","ui.name":"Name","ui.type":"Type","ui.time":"Time","ui.delete":"Delete","ui.none":"None","ui.yes":"Yes","ui.no":"No","ui.cancel":"Cancel","ui.unknown":"Unknown","ui.direct":"direct","ui.resizeColumn":"Resize the {name} column","ui.block":"block","ui.error":"Error","ui.operationFailed":"The operation did not succeed","ui.operationUnknown":"Could not confirm the result of the operation; the data was reloaded","ui.writtenNotApplied":"Written to the configuration file but not applied; the running configuration is unchanged. Fix the file, then reload or restart honk","ui.probeUnsupported":"This backend does not provide a TCP probe for this target","ui.groupNotLoaded":"The group has not loaded","ui.config":"Configuration","ui.generation":"Configuration version","ui.warning":"Warning","ui.notice":"Notice","ui.upstream":"Upstream","ui.elapsed":"Elapsed","ui.cache":"Cache","ui.rule":"Rule","ui.valuePair":"{label}: {value}","ui.share":"{bytes}, {percent}%","ui.fraction":"{part} / {whole}","ui.tcp":"TCP","ui.udp":"UDP","ui.latency":"{n} ms","ui.microseconds":"{n} μs","ui.seconds":"{n} s","ui.unavailable":"Unavailable","ui.group":"Group","ui.current":"Current","ui.percent":"{n}%","toast.showAllCount":"Show all ({n})","ui.device":"Device","ui.writeInvalid":{one:"Validation found {n} error; nothing written",other:"Validation found {n} errors; nothing written"},"ui.writeFailed":"Could not write the configuration"};export{e as messages};
|