mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 21:12:51 +08:00
2 lines
76 KiB
JavaScript
2 lines
76 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.limited":{one:"{n} feature is off",other:"{n} features are off"},"act.mode":"Outbound mode","act.global":"Global target","mode.rule":"Rule","mode.direct":"Direct","mode.global":"Global","act.modeApplied":"Outbound mode written to the configuration and reloaded: {mode}","act.modeNoRouting":"The main configuration has no routing section","act.modeInterleaved":"An ordinary rule comes before a must rule in the routing block. Move the must rules to the top of the routing block, then change the outbound mode.","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.readOnlyDocs":"Read-only sources","act.modeUnavailable":"Not provided by this backend","act.globalMissing":"Global mode needs a target group","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 connections 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.generationHelp":"The number of the active configuration's generation. A reload that changes the active configuration starts a new generation; a reload that leaves the content unchanged keeps the current one.","config.saveValidating":"Validating…","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.readOnly":"Read-only","config.readOnlyHelp":"The backend does not allow configuration writes. On honk, enable experimental.native_api.config_write and set a secret or password sign-in.","config.secretSource":"Contains secrets","config.redactedSource":"Redacted","config.withheldSource":"Text not returned","config.readOnlyAttempt":"This file is 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.noChanges":"No changes to apply","config.saveConflict":"Keep or discard your changes first","config.wizardSubsInvalid":"Each subscription needs a unique name and an HTTP or HTTPS URL","config.validateNoMain":"The backend did not return the whole main configuration, so it cannot be validated","config.validateOther":"Validation covers the main configuration and its includes, not this file","config.incomplete":"The text is incomplete or redacted; it cannot be edited here","config.moduleEditBlocked":"Another section has unsaved changes; apply or cancel them first","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.changedOnDisk":"The file changed on disk while you were editing; saving would replace that change.","config.keepChanges":"Keep changes","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 a loaded file 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.newSourceFailed":"Could not create {path}","config.newSourceUnmatched":"No include pattern of the loaded files 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":{one:"{n} line, {size}",other:"{n} lines, {size}"},"config.loadedAt":"Loaded: {time}","config.unsaved":"Unsaved","config.unsavedHint":"Reloading or closing the page loses the changes","config.editNote":"Click the text to edit it. If the file changes on disk after loading, the backend refuses the save and does not overwrite the file.","config.editNoteValidate":"Click the text to edit it; Validate checks it before you save. If the file changes on disk after loading, the backend refuses the save and does not overwrite the file.","config.generatedNote":"The engine generates this file and overwrites it when it regenerates, so it can only be viewed here. To change it, change the configuration that produces it.","config.subscriptionNote":"This file is downloaded from the subscription URL and replaced when the subscription updates, so it can only be viewed here.","config.readOnlyNote":"The backend does not allow configuration writes, so this file can only be viewed. The help above explains how to turn writes on.","config.secretNote":"This file holds a listener secret, so the backend does not write it back. Move the secret into its own included file to edit the rest.","config.refusedNote":"The backend does not accept writes to this file, so it can only be viewed.","config.redactedNote":"The backend hid part of this file. Writing it back would lose those values, so it can only be viewed.","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.stateHelp.observed":"The connection was accepted and rule matching has not started.","conn.stateHelp.routing":"Matching the routing rules.","conn.stateHelp.dialing":"Opening the outbound connection.","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":"The backend has no userspace transfer to interrupt, so this connection cannot be closed. Connections the kernel forwards directly are of this kind.","conn.closeFailed":"Could not close the connection","conn.notInSnapshot":"This connection is not in the current list.","conn.ungrouped":"None","conn.collapseAll":"Collapse all","conn.expandAll":"Expand all","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.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.queryUnavailable":"This backend cannot run DNS queries right now","dns.typeUnsupported":"This backend cannot query this record type","dns.noTypes":"This backend offers no record types to 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.deleteUnsupported":"This backend does not support deleting cache entries","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.logTotal":{one:"{n} record kept",other:"{n} records kept"},"dns.logTotalHelp":"When a new record brings the kept count or memory use to its limit, the oldest records are removed.","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.flushUnsupported":"This backend does not support clearing the 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 since recording started: {n}","event.gapUnscoped":"reason: {reason}, records dropped since recording started: {n}","event.gapNoCount":"{id}, reason: {reason}","event.gapUnscopedNoCount":"reason: {reason}","event.gap.overflow":"records reached the retention limit","event.gap.sampled":"skipped by sampling","event.gap.evicted":"removed from the retained records","event.gapHelp.overflow":"Some flow records could not be kept. If the kept count reached its limit, raise that limit in Settings.","event.gapHelp.evicted":"Finished flows are removed from the retained records after the retention time, or earlier when the record limit is reached. Flows in progress are not affected.","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","log.emptyNotRecorded":"Turn on log recording in Settings first","log.emptyForbidden":"Log recording is disabled in the configuration","log.emptyFiltered":"No log records match the filters","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.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.nameMissing":"Enter a name","nodes.nameInvalid":"The name may use only letters, digits, _, . and -","nodes.url":"Subscription URL","nodes.urlInvalid":"The subscription URL must be an HTTP or HTTPS 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.linkInvalid":"The node link must look like vless://…","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 datapath did not recover, so new connections proxied through userspace are refused. See Overview for details.","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.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 interval","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.r.dnsLog":"DNS log","ov.r.configValidate":"Validation","ov.lim.title":"Features that are off","ov.lim.why":"Possible causes","ov.lim.howTo":"How to turn on","ov.lim.h.configNotLoaded":"The configuration cannot be read","ov.lim.h.configReadOnly":"The configuration is read-only","ov.lim.h.mainReadOnly":"Nodes and sources cannot be edited","ov.lim.h.recordOff":{one:"The configuration turns off {n} recorder",other:"The configuration turns off {n} recorders"},"ov.lim.h.geodataUpdate":"Geodata cannot be updated","ov.lim.h.geodataUnreadable":"Geodata is unavailable","ov.lim.h.notRunning":"{n} services are unavailable for now","ov.lim.h.probes":"Latency probes are not running for now","ov.lim.h.subscriptions":"Subscriptions cannot be refreshed for now","ov.lim.h.flowsIdle":"Flows are recorded only while viewed","ov.lim.h.flowsOff":"Flow recording is off","ov.lim.h.notProvided":{one:"This honk build lacks {n} feature",other:"This honk build lacks {n} features"},"ov.lim.h.notProvidedOther":{one:"The backend does not provide {n} feature",other:"The backend does not provide {n} features"},"ov.lim.configMissing":"honk is still starting, or the configuration has more than 32 files or more than 8 MiB in total.","ov.lim.configWrite":"Add the setting below and one of password_auth: true or secret to the configuration, then restart honk. Writes are still refused while honk loads the configuration or its store blocks writes.","ov.lim.recordOff":"These recorders are on by default. Add the settings below to the configuration, then restart honk.","ov.lim.mainReadOnly":"The main configuration file contains the native API secret or a listener secret, and honk does not write back a file with secrets. Move the secrets into their own include file.","ov.lim.geoNoAssets":"The configuration loads no geosite or geoip file.","ov.lim.geoNoStateDb":"honk's state database did not open, so it has no built-in download URLs. Add the two URLs below to the configuration, then restart honk. A loaded file without a path on disk still cannot be updated.","ov.lim.geoNoUrl":"A loaded file has no download URL or no path on disk.","ov.lim.geoUnreadable":"Routing and DNS loaded different files of the same kind.","ov.lim.notRunningReason":"honk is starting or stopping.","ov.lim.subscriptions":"Subscriptions","ov.lim.manage":"Nodes and sources","ov.lim.close":"Closing connections","ov.lim.docsVersion":"Version requirements","ov.lim.docsReadOnly":"Read-only sources","ov.lim.docsStateDb":"State database problems","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 revision","ov.uptime":"Uptime","ov.cpu":"CPU usage","ov.lastReload":"Last reload","ov.datapath":"Datapath","ov.status.datapathDegraded":"{status}, datapath degraded","ov.status.datapathFailed":"{status}, datapath failed","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.noAttachments":"No attachment data","ov.occupancyUnknown":"Occupancy not reported, capacity {capacity}","ov.degradedHelp.runtime":"The datapath did not recover after the reload, so new connections proxied through userspace are refused. Reload the configuration again to try to recover it.","ov.degradedHelp.datapath":"Part of the datapath state could not be confirmed. The errors below give the cause.","ov.unknownHelp":"The backend has not confirmed this state.","ov.cgroupHelp.service":"This cgroup holds only this service. Its used memory counts toward this service, and usage is the used memory against the limit.","ov.cgroupHelp.shared":"This cgroup also holds other processes, and its used memory and usage include them.","ov.cgroupHelp.unknown":"The backend cannot tell whether other processes share this cgroup, so its used memory may include them.","ov.datapathHelp":"This card shows the checks of the eBPF programs, hooks and maps in the kernel.","ov.configHelp":"The revision of the active configuration. It changes when changed content takes effect. When the backend reports none, the generation is shown instead.","ov.rateWindowHelp":"Upload and download rates are averages over this interval.","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 select rows and use Add to group below. Changes are staged until you review and apply them.","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.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":"Test all is not available for this group","policy.probing":"Testing…","policy.probeAll":"Test all","policy.healthy":"{n} available","policy.down":"{n} unavailable","policy.untested":"{n} untested","policy.untestedHelp":"The state of these members is not known yet.","policy.untestedProbe":"Use Test all to test them again.","policy.untestedNoProbe":"Test all is not available for this group.","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.noChanges":"No changes to 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.topologyNote":"The paths from rules or devices to outbounds and nodes, with the number of flows kept.","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":"Lock this outbound","rule.mustHelp":"When locked, a match takes this outbound directly: no sniffing or rerouting by domain, and Global or Direct mode does not override it. direct(must) also keeps port 53 DNS out of transparent DNS takeover.","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.valuesMissing":"Enter the values","rule.conditionMissing":"Enter a condition","rule.conditionInvalid":"The condition must be a single line containing a call such as domain(…), with balanced parentheses and no ->, # comment or braces","rule.outboundMissing":"Choose an outbound","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.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":"Userspace","rule.sourceUnknown":"Unknown","rule.sourceHelp.kernel":"An eBPF program in the kernel matched the rule.","rule.sourceHelp.recomputed":"Userspace evaluated the rules again to find the rule.","rule.sourceHelp.unknown":"Where the rule was matched cannot be confirmed.","rule.unknownRule":"Unknown rule","rule.distributionEmpty":"No flows in this snapshot","rule.distributionNotRecorded":"Turn on flow recording in Settings first","rule.distributionForbidden":"Flow recording is disabled in the configuration","rule.distributionFiltered":"No flows from this source","rule.dictionaryEmpty":"No routing rules","rule.dnsHeading":"DNS: {name}","rule.droppedUnknown":"Dropped record count unknown","rule.traceFailed":"Could not run the trace","rule.traceUnavailable":"The backend cannot run a trace right now","rule.resolveUnavailable":"The backend does not offer this resolution mode","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.noProfile":"No profile yet; saving the backend creates one","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.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.noSubscriptions":"No subscriptions to refresh","settings.refreshedAll":"Subscriptions refreshed: {n} of {total}","settings.refreshedDegraded":"Nodes applied, but the datapath did not recover, so new connections proxied through userspace are refused. See Overview for details.","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.geodataUnread":"The geodata status could not be read, so it cannot be updated","settings.geodataLastUpdated":"Last updated","settings.geodataLastError":"Last error","settings.geodataNever":"Never","settings.geodataVerifiedYes":"Verified","settings.geodataVerifiedNo":"Not verified","settings.geodataUnverifiedHelp":"The download URL publishes no .sha256sum file, or the backend did not download the file. The file is still loaded; a download whose SHA-256 does not match is discarded.","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.runtimeInvalid":"{field} must be a whole number within the range shown","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.guide":"Setup guide","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.","login.connectedTo":"Connecting to {backend}","login.demoNote":"Demo account: {username} Password: {password}","login.gameLabel":"Mini game: press to make the duck flap","login.gameLoading":"Loading the showcase","login.gameProgress":"99%","login.gameStatus":"Under construction","login.gameStart":"Click to start (done waiting)","login.gameRestart":"Click or press Space to restart","login.gameResult":"Link down {amount} forwarded","login.gameBest":"Best {amount}","login.gameOver":"Link down, {amount} forwarded, best {best}. Click or press Space to restart.","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.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","ui.changeApplying":"Another change is being applied","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.errTimeout":"The backend did not answer within {seconds} seconds.","ui.errTimeoutWrite":"The backend did not answer within {seconds} seconds; the change may still have been applied. Reload before trying again.","ui.backendMessage":"Backend message: {message}","ui.backendUrl":"Backend URL","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.lifecycleFailed":"The service state change failed","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.invalidIp":"Enter an IPv4 or IPv6 address.","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.helpFor":"About {name}","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":"Generation","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.nodeLatency":"Node latency","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};
|