home-hosted 0.7.21 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +130 -157
- package/README.md +14 -5
- package/dist/cli.js +281 -417
- package/dist/cli.js.map +1 -1
- package/package.json +2 -1
- package/uis/stock/dist/assets/de-DRY6VVqP.js +1 -0
- package/uis/stock/dist/assets/es-CKPLbx5t.js +1 -0
- package/uis/stock/dist/assets/fr-CQ7_4vtN.js +1 -0
- package/uis/stock/dist/assets/index-DwE9bYyS.css +2 -0
- package/uis/stock/dist/assets/index-HT6jUD-L.js +46 -0
- package/uis/stock/dist/assets/ja-bRUylgOt.js +1 -0
- package/uis/stock/dist/assets/ko-DWqbA99M.js +1 -0
- package/uis/stock/dist/assets/plex-sans-cyrillic-BAAhND-U.woff2 +0 -0
- package/uis/stock/dist/assets/plex-sans-cyrillic-ext-d45eAU9y.woff2 +0 -0
- package/uis/stock/dist/assets/ru-DUFxhVp3.js +1 -0
- package/uis/stock/dist/assets/vi-B0-81iVf.js +1 -0
- package/uis/stock/dist/assets/zh-CN-CeoyD9BM.js +1 -0
- package/uis/stock/dist/index.html +7 -3
- package/uis/stock/dist/ui.json +3 -3
- package/uis/stock/dist/assets/index-3hQv8lsr.js +0 -46
- package/uis/stock/dist/assets/index-Dp4rjHQQ.css +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"app.name":`home-hosted`,"app.tagline":`进程监管控制面板`,"common.cancel":`取消`,"common.confirm":`确认`,"common.reset":`重置`,"common.keepIt":`保持不变`,"common.remove":`移除`,"common.close":`关闭`,"common.save":`保存`,"common.saving":`正在保存…`,"common.discard":`放弃更改`,"common.delete":`删除`,"common.edit":`编辑`,"common.add":`添加`,"common.retry":`重试`,"common.copy":`复制`,"common.copied":`已复制`,"common.enabled":`已启用`,"common.disabled":`已停用`,"common.none":`无`,"common.unknown":`未知`,"common.loading":`正在加载…`,"common.selectAll":`全选`,"common.selectNone":`全不选`,"common.name":`名称`,"common.label":`标签`,"common.hostname":`主机名`,"common.port":`端口`,"common.command":`命令`,"common.environment":`环境变量`,"common.memory":`内存`,"common.cpu":`CPU`,"common.disk":`磁盘`,"common.uptime":`运行时长`,"common.status":`状态`,"common.actions":`操作`,"common.details":`详情`,"common.overview":`概览`,"common.warning":`警告`,"common.error":`错误`,"common.confirmQuestion":`{label}?`,"common.unset":`未设置`,"common.never":`从未`,"common.now":`刚刚`,"nav.global":`全局`,"nav.workspace":`工作区`,"nav.others":`其他`,"nav.overview":`概览`,"nav.servers":`服务器`,"nav.logs":`日志`,"nav.workspaceSettings":`工作区设置`,"nav.globalOverview":`全局概览`,"nav.globalSettings":`全局设置`,"nav.reverseProxy":`反向代理`,"connection.live":`实时`,"connection.connecting":`正在连接`,"connection.reconnecting":`正在重新连接`,"connection.liveUpdates":`实时更新`,"theme.label":`主题:{theme}`,"theme.light":`浅色`,"theme.dark":`深色`,"theme.system":`跟随系统`,"language.label":`语言`,"language.select":`选择语言`,"topbar.search":`搜索或运行命令`,"topbar.openNavigation":`打开导航`,"topbar.commandPalette":`命令面板`,"topbar.account":`账户`,"topbar.signedIn":`已登录`,"topbar.signOut":`退出登录`,"status.stopped":`已停止`,"status.starting":`正在启动`,"status.running":`运行中`,"status.stopping":`正在停止`,"status.backoff":`正在重启`,"status.crashed":`已崩溃`,"status.conflict":`端口冲突`,"health.disabled":`未检查`,"health.unknown":`未探测`,"health.healthy":`正常`,"health.unhealthy":`异常`,"history.start":`已启动`,"history.exit":`已退出`,"history.crash":`已崩溃`,"history.forcedRestart":`强制重启`,"history.unhealthy":`异常`,"history.recovered":`已恢复`,"servers.total":{other:`{count} 台服务器`},"servers.running":{other:`{count} 台运行中`},"logs.lines":{other:`{count} 行`},"days.remaining":{other:`{count} 天`},"login.title":`登录以继续`,"login.firstRunTitle":`此面板尚未设置密码`,"login.firstRunSubtitle":`本机上的任何程序都能访问它。登录后请立即设置密码。`,"login.authOffTitle":`身份验证已关闭`,"login.authOffSubtitle":`面板仅监听回环地址,这是目前唯一的保护。`,"login.subtitle":`控制面板已受保护。请输入密码以继续。`,"login.password":`密码`,"login.showPassword":`显示密码`,"login.hidePassword":`隐藏密码`,"login.signIn":`登录`,"login.openDashboard":`打开仪表盘`,"login.exposed":`已暴露`,"login.defaultPasswordWarning":`仍在使用默认密码 {password}。请在设置中修改 — 在修改之前,绑定到 127.0.0.1 之外仍会被拒绝。`,"login.noPasswordWarning":`尚未设置密码。请在本机打开设置进行添加,或运行 {command}。`,"login.sessionNote":`会话在最后一次访问后保持登录 {days} 天 — 每次请求都会延长该期限。退出登录仅清除此浏览器。`,"login.servedFromThisMachine":`由此机器提供服务`,"nav.navigation":`导航`,"nav.closeNavigation":`关闭导航`,"nav.hostVitals":`主机指标`,"common.dismiss":`忽略`,"topbar.workspaceLabel":`工作区:{name}`,"palette.placeholder":`跳转到服务器、运行操作、打开设置…`,"palette.openServer":`打开 {label}`,"palette.serverLogs":`{label} 的日志`,"palette.startServer":`启动 {label}`,"palette.stopServer":`停止 {label}`,"palette.restartServer":`重启 {label}`,"palette.goOverview":`前往概览`,"palette.goGlobalOverview":`前往全局概览`,"palette.goGlobalSettings":`前往全局设置`,"palette.goProxy":`前往反向代理`,"palette.goServers":`前往服务器`,"palette.goLogs":`前往日志`,"palette.goWorkspaceSettings":`前往工作区设置`,"palette.startAll":`启动此处所有已启用的服务器`,"palette.stopAll":`停止此处所有服务器`,"palette.switchWorkspace":`切换到 {label}`,"palette.globalSetting":`全局设置:{label}`,"palette.workspaceSetting":`工作区设置:{label}`,"palette.theme":`{theme}主题`,"palette.groupServers":`服务器`,"palette.groupActions":`操作`,"palette.groupNavigate":`导航`,"palette.groupWorkspaces":`工作区`,"palette.groupAppearance":`外观`,"palette.navigate":`移动`,"palette.run":`运行`,"palette.noMatches":`没有匹配“{query}”的结果。`,"palette.results":{other:`{count} 个结果`},"workspace.new":`新建工作区`,"workspace.rename":`重命名工作区`,"workspace.create":`创建工作区`,"workspace.renameAction":`重命名`,"workspace.createHint":`拥有独立的设置、服务器、日志、密钥和备份条目 — 由同一个面板提供服务。`,"workspace.renameHint":`只更改名称;工作区 id 保持不变,因此 URL 和路径仍然有效。`,"workspace.nameHint":`显示在顶栏中。`,"workspace.nameHintId":`显示在顶栏中。Id:{id}`,"workspace.none":`无工作区`,"workspace.delete":`删除工作区`,"notice.configError":`无法读取配置:{error}`,"notice.configErrorHint":`面板仍在运行原有配置;修复 {path} 后它会自行重新加载。`,"notice.defaultPassword":`此面板仍在使用默认密码。`,"notice.defaultPasswordHint":`请在全局设置中修改 — 在修改之前,绑定到 127.0.0.1 之外仍会被拒绝。`,"notice.noPassword":`身份验证已开启但未设置密码,因此不会要求任何凭据。`,"notice.noPasswordHint":`请在全局设置中设置密码,以真正锁定面板。`,"notice.exposed":`此面板可从 127.0.0.1 之外访问。`,"notice.exposedHint":`请保持密码强度,或在前方放置一个终止 TLS 的代理。`,"notice.authOff":`身份验证已禁用 — 面板仅靠回环绑定来保护。`,"host.loadPerCpu":`负载 / cpu`,"host.cpuTemp":`CPU 温度`,"activity.emptyTitle":`过去 24 小时内没有事件`,"activity.emptyDescription":`启动、退出、崩溃和恢复发生时都会显示在这里。`,"activity.ran":`已运行 {duration}`,"serverCard.open":`打开 {url}`,"serverCard.adoptedHint":`该进程替换了自身:面板接管了后继进程,而不是再启动一份副本。停止仍然有效,它的输出仍留在后继进程发送的位置。`,"serverCard.detached":`已脱离`,"serverCard.persistentHint":"此条目由自己的 nanny 运行,因此面板停止、重启或被终止时它仍会继续运行。`home-hosted down` 会报告它而不是停止它;只有显式停止才会停止。","serverCard.persistent":`常驻`,"serverCard.disabled":`已禁用`,"serverCard.autostart":`自动启动`,"serverCard.healthProbe":`健康探测`,"serverCard.notProbed":`尚未探测`,"serverCard.restarts":`重启次数`,"serverCard.pid":`PID`,"serverCard.rss":`RSS`,"serverCard.procs":`进程数`,"serverCard.portFree":`空闲`,"serverCard.portInUse":`占用中`,"serverCard.uptime24h":`24 小时在线`,"serverCard.probe":`探测`,"serverCard.crashes24h":`24 小时崩溃`,"serverCard.lastCrash":`上次崩溃`,"serverCard.unhealthyFor":`已不健康 {duration}`,"serverCard.nextAttempt":`下次尝试 {when}`,"serverCard.start":`启动`,"serverCard.stop":`停止`,"serverCard.restart":`重启`,"serverCard.detailsHint":`实时日志和完整遥测`,"serverCard.moreActions":`{label} 的更多操作`,"serverCard.disable":`禁用服务器`,"serverCard.enable":`启用服务器`,"serverCard.removeFromAutostart":`从自动启动中移除`,"serverCard.autostartWithPanel":`随面板一起自动启动`,"serverCard.clearLogBuffer":`清空日志缓冲`,"serverCard.removeServer":`移除服务器`,"serverCard.removeTitle":`移除此服务器?`,"serverCard.removeDescription":`{label} 将从 servers.config.json 中移除:其进程会被停止,日志和崩溃历史也会一并删除。`,"serverCard.statusField":`状态`,"addServer.title":`添加服务器`,"addServer.description":`向 {workspace} 的 servers.config.json 追加一个条目;未填写的策略都继承默认值。`,"addServer.thisWorkspace":`此工作区`,"addServer.identity":`标识`,"addServer.id":`Id`,"addServer.idHint":`小写字母、数字、短横线和下划线;用于 URL 和日志。`,"addServer.labelHint":`显示在面板中;默认为 id。`,"addServer.process":`进程`,"addServer.commandHint":`不通过 shell 直接启动。`,"addServer.argumentsHint":`每行一个参数;行内空白会保留。`,"addServer.portLifecycle":`端口与生命周期`,"addServer.bindHint":`lan 会将其暴露到网络;仅在启用认证后才能这样做。`,"addServer.advanced":`高级设置`,"addServer.advancedHint":`环境变量、备份、策略、生命周期、bootstrap`,"addServer.backups":`备份`,"addServer.backupIgnore":`忽略已知的生成文件`,"addServer.bootstrapDescription":`首次启动前运行的一次性命令。`,"addServer.bootstrapHint":`安装、迁移、下载——只在首次启动前运行,而不是每次启动。`,"addServer.policyResources":`策略与资源`,"addServer.logBufferHint":`留空则使用默认值。`,"addServer.inheritNote":`重启、健康和停止策略最初与{settings}一致;在此处修改某一项后,它会写入此条目,而不再保持继承。`,"addServer.serverDefaults":`设置 → 服务器默认值`,"addServer.placeholdersTitle":`可用的参数占位符`,"addServer.submit":`添加到 servers.config.json`,"serverForm.workingDirectory":`工作目录`,"serverForm.cwdHint":`相对路径在 projectDir 下解析。`,"serverForm.arguments":`参数`,"serverForm.portHint":`留空表示该服务器没有可供探测或预检的端口。`,"serverForm.bindAddress":`绑定地址`,"serverForm.autostart":`随 up 自动启动`,"serverForm.autostartHint":`控制平面启动时即启动它。`,"serverForm.persistent":`常驻`,"serverForm.persistentHint":"面板停止后仍继续运行;`down` 会报告它而不是停止它。","serverForm.envHint":`每行 KEY=value,导出到进程。`,"serverForm.dataEnvs":`数据环境变量`,"serverForm.dataEnvsHint":`每行 ENV=path——导出到进程并自动备份。`,"serverForm.envFile":`环境变量文件`,"serverForm.envFilePlaceholder":`可选的 KEY=value 文件`,"serverForm.envFileHint":`启动时加载;其中的值会覆盖 env。`,"serverForm.dependsOn":`依赖于`,"serverForm.dependsOnHint":`以逗号分隔;最先启动并等待其健康,最后停止。`,"serverForm.backupPaths":`额外备份路径`,"serverForm.backupPathsHint":`每行一个,允许使用占位符;数据环境变量已自动纳入。`,"serverForm.backupIgnore":`备份此条目时忽略已知的生成文件`,"serverForm.backupIgnoreHint":`跳过 node_modules、dist、.next 以及其他不会被任何还原使用的缓存。`,"serverForm.bootstrap":`Bootstrap`,"serverForm.bootstrapDescription":`首次启动前运行的一次性命令——安装、迁移、下载。`,"serverForm.runBootstrap":`运行 bootstrap`,"serverForm.bootstrapHint":`关闭表示该条目没有 bootstrap,该键会以 null 发送。`,"serverForm.timeoutMs":`超时(ms)`,"serverForm.runOnce":`每个会话仅一次`,"serverForm.runOnceHint":`关闭表示每次启动都会重新运行。`,"serverForm.bootstrapArgs":`Bootstrap 参数`,"serverForm.bootstrapArgsHint":`每行一个;占位符与主参数相同。`,"serverForm.bootstrapEnv":`Bootstrap 环境变量`,"serverForm.bootstrapEnvHint":`每行 KEY=value,仅导出到 bootstrap 进程。`,"serverForm.onPortConflict":`端口冲突时`,"serverForm.logBufferLines":`日志缓冲行数`,"serverForm.maxRssMb":`最大 RSS(MB)`,"serverForm.maxRssHint":`超过此值即重启;留空或 0 表示禁用。`,"serverForm.enabledHint":`关闭后条目仍保留在配置中,但拒绝启动。`,"bind.local":`local — 127.0.0.1`,"bind.lan":`lan — 0.0.0.0`,"bind.explicit":`{bind} — 显式指定`,"onPortConflict.block":`block — 拒绝启动`,"onPortConflict.warn":`warn — 仍然启动`,"onPortConflict.follow":`follow — 接管自身脱离后的重启`,"onPortConflict.reclaim":`reclaim — 用受监管的副本替换`,"onPortConflict.kill":`kill — 停止占用该端口的任何进程`,"editor.title":`编辑配置`,"editor.description":`将覆盖项写入 {file};未改动的部分继续继承默认值。`,"editor.unsaved":{one:`项未保存的改动`,other:`项未保存的改动`},"editor.inSync":`已同步`,"editor.process":`进程`,"editor.processDescription":`启动什么、在哪里启动、使用哪个环境。`,"editor.labelPlaceholder":`留空则回退到 id`,"editor.argumentsHint":`每行一个;{port} {host} {home} {projectDir} {dataRoot} {id} {label} {cwd} {bind} {lanIp} 会被替换。`,"editor.portTitle":`端口与绑定`,"editor.portDescription":`端口如何预检,以及进程可在何处访问。`,"editor.bindHint":`配置中已设置的自定义 IPv4 仍可选择。`,"editor.lifecycle":`生命周期`,"editor.lifecycleDescription":`监管器是否管理此条目。`,"editor.save":`保存到 servers.config.json`,"editor.changesTitle":`未保存的改动`,"editor.changesDescription":`保存后将对 servers.config.json 写入的内容。`,"editor.nothingToSave":`没有可保存的内容。`,"editor.saveChanges":{one:`保存 {count} 项改动`,other:`保存 {count} 项改动`},"lifecycle.restartTitle":`重启策略`,"lifecycle.restartDescription":`崩溃后各次尝试之间的退避间隔。`,"lifecycle.restartOnCrash":`崩溃后重启`,"lifecycle.maxRetries":`最大重试次数`,"lifecycle.maxRetriesHint":`尝试多少次后让服务器保持崩溃状态。`,"lifecycle.baseDelay":`基础延迟(ms)`,"lifecycle.factor":`退避系数`,"lifecycle.maxDelay":`最大延迟(ms)`,"lifecycle.resetAfter":`重置时间(ms)`,"lifecycle.resetAfterHint":`运行时长达到此值即清零重试计数。`,"lifecycle.healthTitle":`健康检查`,"lifecycle.healthDescription":`进程启动后如何探测就绪状态。`,"lifecycle.probe":`探测此服务器`,"lifecycle.probeType":`探测类型`,"lifecycle.probePort":`TCP 端口 — 仅连接`,"lifecycle.probeHttp":`HTTP 请求 — 校验响应`,"lifecycle.interval":`间隔(ms)`,"lifecycle.timeout":`超时(ms)`,"lifecycle.unhealthyAfter":`不健康判定次数`,"lifecycle.unhealthyAfterHint":`连续探测失败次数。`,"lifecycle.forceRestartAfter":`强制重启时间(ms)`,"lifecycle.forceRestartAfterHint":`0 表示禁用。`,"lifecycle.startTimeout":`启动超时(ms)`,"lifecycle.httpPath":`HTTP 路径`,"lifecycle.httpMethod":`HTTP 方法`,"lifecycle.expectStatus":`期望状态码`,"lifecycle.expectStatusHint":`留空则接受任何低于该值的状态码。`,"lifecycle.expectStatusBelow":`状态码低于此值即健康`,"lifecycle.expectBody":`响应体必须包含`,"lifecycle.expectBodyPlaceholder":`可选子串`,"lifecycle.headBodyHint":`HEAD 没有响应体,因此忽略此检查——请改用 GET,或清空该项。`,"lifecycle.stopTitle":`停止行为`,"lifecycle.stopDescription":`如何要求进程树退出。`,"lifecycle.signal":`信号`,"lifecycle.signalTerm":`SIGTERM — 请求停止`,"lifecycle.signalInt":`SIGINT — 中断(Ctrl-C)`,"lifecycle.signalKill":`SIGKILL — 立即终止`,"lifecycle.grace":`宽限期(ms)`,"lifecycle.killGroup":`终止整个进程组`,"lifecycle.killPortHolders":`同时终止占用该端口的进程`,"killPort.trigger":`终止占用端口 {port} 的进程`,"killPort.title":`终止端口 {port} 上的进程?`,"killPort.body":`会先请求它停止,只有它无视请求时才终止。本面板监管的任何进程都会被拒绝,因此受管服务器不会以这种方式丢失。`,"killPort.confirm":`终止它`,"logs.emptyHint":`暂无输出。`,"logs.noMatches":`没有匹配该搜索或流筛选条件的内容。`,"logs.searchPlaceholder":`在此输出中搜索`,"logs.searchLabel":`搜索日志输出`,"logs.clearSearch":`清除搜索`,"logs.prevMatch":`上一个匹配`,"logs.nextMatch":`下一个匹配`,"logs.showTimestamps":`显示时间戳`,"logs.hideTimestamps":`隐藏时间戳`,"logs.timestampsShort":`ts`,"logs.pause":`暂停`,"logs.follow":`跟随`,"logs.clearHint":`清空内存中的缓冲`,"logs.clearLabel":`清空日志缓冲`,"logs.downloadHint":`下载已持久化的文件`,"logs.downloadLabel":`下载日志文件`,"logs.outputLabel":`日志输出`,"logs.jumpToLatest":`跳到最新`,"logs.streaming":`流式传输中`,"logs.paused":`已暂停`,"logs.snapshot":`快照`,"logs.linesOf":`{total} 行中的 {count} 行`,"logs.matches":`{count} 个匹配`,"logs.rowHeight":`行高 {height}px · 窗口化`,"logs.streamAll":`全部`,"logs.streamOut":`out`,"logs.streamErr":`err`,"logs.streamSys":`sys`,"metric.emptyHint":`正在采集…`,"host.samplingOff":`主机采样已关闭`,"host.samplingOffDescription":`在设置中开启以采集负载、内存、磁盘和温度。`,"host.swap":`交换分区`,"host.cpus":`CPU`,"host.loadAverage":`负载 1 / 5 / 15`,"host.memoryUsed":`已用内存`,"host.sampled":`采样时间`,"host.filesystems":`文件系统`,"host.thresholdsBreached":`超出的阈值`,"validation.port":`端口必须是 1 到 65535 之间的整数。`,"validation.idRequired":`必须填写 id——它是此服务器所依据的键。`,"validation.idPattern":`id 必须以小写字母或数字开头,只能包含小写字母、数字、短横线和下划线。`,"validation.commandRequired":`必须填写 command——监管器启动的可执行文件。`,"validation.bootstrapCommand":`bootstrap 需要一个要运行的命令。`,"settings.shell.fieldsChanged":{one:`个字段已更改`,other:`个字段已更改`},"settings.shell.noUnsavedChanges":`没有未保存的更改`,"settings.shell.discard":`放弃更改`,"settings.shell.save":`保存设置`,"settings.shell.unsavedTitle":`未保存的更改`,"settings.shell.nothingToSave":`没有可保存的内容。`,"settings.shell.saveChanges":{one:`保存 {count} 项更改`,other:`保存 {count} 项更改`},"settings.auth.policyTitle":`访问策略`,"settings.auth.policyDescription":`无论面板位于回环地址还是暴露到网络,身份验证都会生效。`,"settings.auth.requirePassword":`要求密码`,"settings.auth.requirePasswordHint":`每个请求都需要已登录的会话。`,"settings.auth.sessionLifetime":`会话有效期(ms)`,"settings.auth.sessionLifetimeHint":`空闲超时:604800000 表示一周无活动。每个请求都会重新计时。`,"settings.auth.cookieSecure":`Cookie Secure`,"settings.auth.cookieSecureAuto":`自动 — 仅通过 HTTPS`,"settings.auth.cookieSecureAlways":`始终`,"settings.auth.cookieSecureNever":`从不 — 纯 HTTP`,"settings.auth.trustProxy":`位于反向代理之后`,"settings.auth.trustProxyOff":`否 — 忽略 x-forwarded-*`,"settings.auth.trustProxyLoopback":`是,仅来自本机`,"settings.auth.trustProxyAny":`是,来自任何调用方`,"settings.auth.trustProxyHint":`信任 x-forwarded-* 以确定客户端地址和协议。“仅来自本机”对同一主机上的代理是安全的选择。“来自任何调用方”会相信调用方自己的请求头,因此登录锁定会按伪造的地址计数,从而可被绕过。`,"settings.auth.maxLoginAttempts":`最大登录尝试次数`,"settings.auth.maxLoginAttemptsHint":`失败多少次后临时锁定。`,"settings.auth.lockout":`锁定时长(ms)`,"settings.auth.apiTokenSet":`已设置 API 令牌`,"settings.auth.apiTokenMissing":`没有 API 令牌`,"settings.auth.apiTokenNote":`脚本可以用 {code} 调用 API,而无需登录。`,"settings.auth.noTokenNote":`对于 shell 脚本和 agent,可用 {command} 生成一个。`,"settings.auth.defaultPasswordTitle":`仍在使用默认密码`,"settings.auth.defaultPasswordText":`请在下方设置自己的密码。在此之前,绑定到 {address} 之外仍会被拒绝。`,"settings.auth.blockedTitle":`此监听地址正被拒绝`,"settings.auth.noPasswordTitle":`身份验证已开启,但尚未设置密码`,"settings.auth.noPasswordText":`实际上还没有任何要求生效,且在设置密码之前,绑定到 {address} 之外仍会被拒绝。`,"settings.auth.exposedTitle":`可从 127.0.0.1 之外访问`,"settings.auth.exposedText":`请保持密码强度,或在面板前放置一个终止 TLS 的代理。`,"settings.auth.changePassword":`更改密码`,"settings.auth.setPassword":`设置密码`,"settings.auth.passwordDescription":`以 scrypt 哈希存储在密钥文件中,绝不写入配置。`,"settings.auth.currentPassword":`当前密码`,"settings.auth.newPassword":`新密码`,"settings.auth.repeatPassword":`重复新密码`,"settings.auth.passwordMismatch":`两次输入的密码不一致。`,"settings.auth.updatePassword":`更新密码`,"settings.auth.setPasswordAndEnable":`设置密码并启用身份验证`,"settings.auth.clearPassword":`清除密码`,"settings.auth.clearPasswordConfirm":`确认清除`,"settings.auth.clearPasswordTitle":`清除密码?`,"settings.auth.clearPasswordHint":`身份验证会随之关闭,任何能访问面板的人都能直接进入。`,"settings.auth.shortPasswordTitle":`这个密码偏短`,"settings.auth.shortPasswordText":`可以使用,但更长的密码是网络与这个面板之间唯一的屏障。`,"settings.auth.passwordUpdated":`密码已更新。其他会话已被登出。`,"settings.auth.passwordCleared":`密码已清除,身份验证已禁用。`,"settings.backup.createTitle":`创建备份`,"settings.backup.createDescription":`选择此归档要捕获的内容。在你创建之前不会写入任何内容。`,"settings.backup.entriesCount":{one:`{count} 个条目`,other:`{count} 个条目`},"settings.backup.itemsSelected":{one:`已选择 {count} 项`,other:`已选择 {count} 项`},"settings.backup.chooseItems":`选择项目`,"settings.backup.partialCapture":`只捕获所选项目。`,"settings.backup.withoutGlobalSettings":`没有全局设置时,还原只能把工作区放到目标面板已声明它的位置。`,"settings.backup.password":`密码(可选)`,"settings.backup.passwordHint":`加密归档;还原时需要相同的密码。`,"settings.backup.create":`创建备份`,"settings.backup.chooseItemsFor":`{label} — 选择项目`,"settings.backup.subDescription":`工作区可以整体捕获,也可以只捕获其设置、服务器、密钥和已声明的数据路径。`,"settings.backup.selectedOf":`已选择 {selected}/{total}`,"settings.backup.nothingSelectable":`此工作区尚未声明任何可选择的项目。`,"settings.backup.apply":`应用`,"settings.backup.created":`备份已创建。`,"settings.backup.leafSettingsHint":`服务器默认值、日志保留和通知`,"settings.backup.leafServersHint":`servers.config.json 中的每个条目`,"settings.backup.leafSecretsHint":`Telegram bot 令牌和 DDNS 凭据`,"settings.backup.leafDataHint":`一个已声明的数据路径`,"settings.backup.pathFromOrigin":`{path} — 来自 {origin}`,"settings.backup.entrySettingsHint":`监听、身份验证、主机指标和备份策略`,"settings.backup.entrySecretsHint":`密码哈希和 API 令牌哈希`,"settings.backup.entryTlsHint":`面板自己的证书对`,"settings.backup.entryWorkspaceHint":`其设置、服务器、密钥和已声明的数据路径`,"settings.backups.policyTitle":`策略`,"settings.backups.policyDescription":`面板保留多少份归档,以及每份归档额外捕获的路径。`,"settings.backups.allow":`允许备份`,"settings.backups.allowHint":`关闭后不再产生新归档;磁盘上已有的仍可下载和还原。`,"settings.backups.offTitle":`备份已关闭`,"settings.backups.offText":`在重新开启之前不会归档任何新内容。下方的归档仍可下载、还原和删除。`,"settings.backups.keep":`保留`,"settings.backups.keepHint":`每次备份后会清理更早的归档。`,"settings.backups.extraPaths":`额外路径`,"settings.backups.extraPathsHint":`以逗号分隔,除各工作区声明的路径外,每份归档都会捕获这些路径。`,"settings.backups.extraPathsPlaceholder":`{home}/myapp-data`,"settings.backups.archiveDirectory":`归档目录`,"settings.backups.copyArchiveDirectory":`复制归档目录`,"settings.backups.changeDirectory":`更改它属于文件层面的决定:请编辑 {path}。`,"settings.backups.theSettingsFile":`设置文件`,"settings.backups.capturesTitle":`备份捕获哪些内容`,"settings.backups.capturesDescription":`在创建对话框中勾选这些项目。工作区可以整体捕获,也可以只捕获其设置、服务器、密钥和已声明的数据路径。`,"settings.backups.nothingSelectable":`尚无可选择的项目。`,"settings.backups.fromOrigin":`来自 {origin}`,"settings.backups.notCaptured":`未捕获`,"settings.backups.generatedSkipped":`已跳过生成目录`,"settings.backups.included":`已包含`,"settings.backups.skipped":`已跳过`,"settings.backups.workspacesNote":`此面板服务 {count} 个工作区;每个工作区都是独立的可选条目。`,"settings.backups.archivesTitle":`归档`,"settings.backups.archivesDescription":`存储在备份目录中,随时可下载。`,"settings.backups.create":`创建备份…`,"settings.backups.restore":`还原…`,"settings.backups.noArchives":`还没有归档`,"settings.backups.noArchivesEnabled":`现在创建一个,以捕获面板和你选择的工作区。`,"settings.backups.noArchivesDisabled":`尚未归档任何内容,且备份已关闭。`,"settings.backups.encrypted":`已加密`,"settings.backups.download":`下载`,"settings.backups.restoreAction":`还原`,"settings.backups.confirmDelete":`确认删除`,"settings.backups.deleted":`已删除 {name}。`,"settings.backups.kindSettings":`设置`,"settings.backups.kindServers":`服务器`,"settings.backups.kindSecrets":`密钥`,"settings.backups.kindTls":`tls`,"settings.backups.kindData":`数据`,"settings.ddns.statePending":`等待中`,"settings.ddns.stateOk":`已更新`,"settings.ddns.stateUnchanged":`当前值`,"settings.ddns.stateSkipped":`已跳过`,"settings.ddns.stateError":`失败`,"settings.ddns.passFinished":`动态 DNS 轮次已完成`,"settings.ddns.credentialsSaved":`已为 {account} 保存凭据`,"settings.ddns.credentialsRemoved":`已移除 {account} 的凭据`,"settings.ddns.loadErrorTitle":`无法加载动态 DNS 设置`,"settings.ddns.title":`动态 DNS`,"settings.ddns.description":`让这些主机名始终指向本机的公网地址。凭据存放在密钥文件中,绝不写入 servers.config.json。`,"settings.ddns.checking":`正在检查`,"settings.ddns.needsAttention":`需要关注`,"settings.ddns.watching":`监控中`,"settings.ddns.updateNow":`立即更新`,"settings.ddns.enabled":`持续更新动态 DNS`,"settings.ddns.enabledHint":`按下方间隔执行一轮;只有当地址确实变化时才调用提供商。`,"settings.ddns.interval":`检查间隔(ms)`,"settings.ddns.intervalHint":`60000 为一分钟;默认是五分钟。`,"settings.ddns.ttl":`TTL(秒)`,"settings.ddns.ttlHint":`在提供商支持的情况下,1 表示自动。`,"settings.ddns.detectIpv4":`检测 IPv4`,"settings.ddns.detectIpv4Hint":`A 记录需要。`,"settings.ddns.detectIpv6":`检测 IPv6`,"settings.ddns.detectIpv6Hint":`AAAA 记录需要。`,"settings.ddns.accountsTitle":`提供商账户`,"settings.ddns.accountsDescription":`每个 API 令牌一个条目。凭据存储在服务器上,且永不回传。`,"settings.ddns.hostnameCount":{one:`{count} 个主机名`,other:`{count} 个主机名`},"settings.ddns.credentialsSet":`凭据已保存`,"settings.ddns.noCredentials":`没有凭据`,"settings.ddns.credentials":`凭据`,"settings.ddns.removeAccountBlocked":`请先移除使用此账户的主机名`,"settings.ddns.noAccounts":`还没有账户。选择一个提供商并添加。`,"settings.ddns.provider":`提供商`,"settings.ddns.accountId":`账户 id`,"settings.ddns.accountIdPlaceholder":`cloudflare-home`,"settings.ddns.accountIdHint":"账户 id 用来命名账户并作为其凭据的键;只能用小写字母、数字、`-` 和 `_`。","settings.ddns.hostnamesTitle":`主机名`,"settings.ddns.hostnamesDescription":`需要持续更新的完整列表 — suba.domain.com、domain.xyz 等等。`,"settings.ddns.account":`账户`,"settings.ddns.recordA":`A(IPv4)`,"settings.ddns.recordAaaa":`AAAA(IPv6)`,"settings.ddns.aaaaUnsupported":`此提供商无法管理 AAAA 记录。`,"settings.ddns.proxied":`代理`,"settings.ddns.proxiedHint":`Cloudflare 通过自己的网络提供此记录。`,"settings.ddns.ipv6Off":`IPv6 检测已关闭`,"settings.ddns.advanced":`高级`,"settings.ddns.advancedHint":`注册域名和 TTL 覆盖`,"settings.ddns.registeredDomain":`注册域名`,"settings.ddns.registeredDomainPlaceholder":`example.co.uk`,"settings.ddns.registeredDomainHint":`仅在必须告知提供商顶级域名时使用,例如三标签域名。`,"settings.ddns.ttlOverride":`TTL 覆盖(秒)`,"settings.ddns.ttlOverrideHint":`留空则使用上面的值。`,"settings.ddns.noHostnames":`还没有主机名。`,"settings.ddns.hostnamePlaceholder":`home.example.com`,"settings.ddns.lastPass":`上一轮`,"settings.ddns.ipv4Value":`IPv4 {address}`,"settings.ddns.ipv6Value":`IPv6 {address}`,"settings.ddns.type":`类型`,"settings.ddns.state":`状态`,"settings.ddns.address":`地址`,"settings.ddns.detail":`详情`,"settings.ddns.credentialsTitle":`提供商凭据`,"settings.ddns.credentialsDescription":`已保存的字段永不回传。保存会替换此账户的所有字段,并立即执行一轮。`,"settings.ddns.optional":`可选。`,"settings.ddns.whereToGet":`在哪里获取这些`,"settings.ddns.forget":`忘记`,"settings.ddns.forgetConfirm":`忘记它们`,"settings.ddns.forgetTitle":`忘记已存储的凭据?`,"settings.ddns.forgetHint":`它们会从磁盘移除且无法再读回;你需要重新粘贴。`,"settings.ddns.saveCredentials":`保存凭据`,"settings.defaults.title":`服务器默认值`,"settings.defaults.description":`应用于每个未自行设置该值的条目。`,"settings.defaults.enabledHint":`新条目默认处于启用状态。`,"settings.defaults.autostart":`随面板一起自动启动`,"settings.defaults.bind":`绑定`,"settings.defaults.bindLocal":`Local — 127.0.0.1`,"settings.defaults.bindLan":`LAN — 0.0.0.0`,"settings.defaults.onPortConflict":`端口冲突时`,"settings.defaults.conflictBlock":`阻止启动`,"settings.defaults.conflictWarn":`警告并仍然启动`,"settings.defaults.conflictFollow":`跟随自身脱离后的重启`,"settings.defaults.conflictReclaim":`用受监管的副本替换脱离后的重启`,"settings.defaults.conflictKill":`终止占用该端口的任何进程`,"settings.defaults.logBufferLines":`日志缓冲行数`,"settings.defaults.logBufferLinesHint":`每个服务器在内存中保留的行数。`,"settings.host.title":`阈值`,"settings.host.description":`阈值为 0 表示关闭该告警。超出时会通知一次,恢复时再通知一次。`,"settings.host.enabled":`采样本机`,"settings.host.enabledHint":`按下方间隔采集负载、内存、交换分区、磁盘和 CPU 温度。`,"settings.host.interval":`间隔(ms)`,"settings.host.intervalHint":`主机采样和告警检查的频率。`,"settings.host.diskPaths":`磁盘路径`,"settings.host.diskPathsHint":`以逗号分隔;诸如 {home} 的模板会被展开。`,"settings.host.diskUsed":`磁盘已用(%)`,"settings.host.memoryUsed":`内存已用(%)`,"settings.host.swapUsed":`交换分区已用(%)`,"settings.host.zeroDisables":`0 表示关闭该告警。`,"settings.host.loadPerCpu":`每 CPU 负载`,"settings.host.loadPerCpuHint":`1 分钟平均负载除以核心数。`,"settings.host.tempCelsius":`CPU 温度(°C)`,"settings.host.tempCelsiusHint":`仅 Linux;操作系统未提供时忽略该项。`,"settings.host.breachingNow":`当前超出阈值:`,"settings.host.nothingBreaching":`当前没有超出任何阈值。`,"settings.interface.title":`界面`,"settings.interface.description":`面板是静态站点:可以保留自带界面,也可以从状态目录提供你自己的构建。`,"settings.interface.currentlyServing":`当前提供`,"settings.interface.copyDirectory":`复制 UI 目录`,"settings.interface.fileCount":`{count} 个文件`,"settings.interface.sourceStock":`自带`,"settings.interface.sourceCustom":`自定义`,"settings.interface.unnamed":`未命名`,"settings.interface.panelVersion":`面板版本`,"settings.interface.copyPanelVersion":`复制面板版本`,"settings.interface.panelVersionHint":`此面板进程正在运行的版本 — {command} 会打印相同的数字。`,"settings.interface.panelName":`面板名称`,"settings.interface.panelNameHint":`由自带 UI 显示在侧边栏。自定义 UI 可以改为显示自己的名称。`,"settings.interface.uploadLabel":`上传 UI 构建(含 index.html 的 .zip)`,"settings.interface.docsHint":`API 约定见 {docs}。如果自定义 UI 让面板出问题,可在终端用 {command} 恢复自带界面。`,"settings.interface.resetName":`重置名称`,"settings.interface.confirmRevert":`确认还原`,"settings.interface.revertToStock":`还原为自带界面`,"settings.interface.install":`安装 UI`,"settings.interface.installed":`UI 已替换为 {name} — 请刷新页面`,"settings.interface.yourBuild":`你的构建`,"settings.interface.restored":`已恢复自带 UI — 请刷新页面`,"settings.interface.nothingInstalled":`未安装任何自定义 UI`,"settings.listener.title":`监听`,"settings.listener.description":`面板应答的位置。改动这里会重启面板,并把此页面带到新地址。`,"settings.listener.port":`控制端口`,"settings.listener.portHint":`默认 3999。`,"settings.listener.bind":`绑定`,"settings.listener.bindLocal":`本地`,"settings.listener.bindLan":`局域网`,"settings.listener.bindCustom":`自定义`,"settings.listener.bindLanHint":`0.0.0.0 — 整个网络都可访问。`,"settings.listener.bindLocalHint":`127.0.0.1 — 仅本机。`,"settings.listener.bindCustomHint":`在下方输入的具体网卡地址。`,"settings.listener.ipv4":`IPv4 地址`,"settings.listener.ipv4Placeholder":`192.168.1.20`,"settings.listener.ipv4Error":`请输入 IPv4 地址,例如 192.168.1.20。`,"settings.listener.ipv4Hint":`绑定到 127.0.0.1 之外需要真实密码。`,"settings.listener.openBrowser":`面板启动时打开浏览器`,"settings.listener.liveAddress":`当前地址`,"settings.listener.restartRequired":`需要重启`,"settings.listener.copyLiveAddress":`复制当前地址`,"settings.listener.liveAddressHint":`监听当前绑定到的地址;保存的更改在面板重新绑定后生效。`,"settings.logs.title":`保留`,"settings.logs.description":`实时视图始终来自内存;这些文件在重启后仍然存在,并为日志页面提供内容。`,"settings.logs.persist":`在磁盘上保留日志`,"settings.logs.persistHint":`关闭后只把所有内容保存在内存中。`,"settings.logs.maxBytes":`轮转阈值(字节)`,"settings.logs.maxBytesHint":`每个服务器,超过后滚动为 .1、.2、…`,"settings.logs.keep":`保留轮转后的文件`,"settings.logs.directory":`日志目录`,"settings.logs.copyDirectory":`复制日志目录`,"settings.logs.browseHint":`在{logs}页面浏览并下载这些文件。`,"settings.telegram.title":`Telegram`,"settings.telegram.description":`策略存放在配置中;bot 令牌属于密钥,绝不会从服务器回传。`,"settings.telegram.enabled":`发送通知`,"settings.telegram.enabledHint":`每个事件一条消息,由下方的冷却时间限流。`,"settings.telegram.chatId":`Chat id`,"settings.telegram.chatIdPlaceholder":`123456789 或 @channel`,"settings.telegram.chatIdHint":`可用“检测 chat”从 bot 的更新中填入此项。`,"settings.telegram.cooldown":`每个事件的冷却时间(ms)`,"settings.telegram.cooldownHint":`按服务器和原因分别计算,因此反复波动的服务器也无法刷屏。`,"settings.telegram.onCrash":`重试次数已耗尽`,"settings.telegram.onUnhealthy":`端口不健康`,"settings.telegram.onForcedRestart":`强制重启`,"settings.telegram.onRecovered":`已恢复`,"settings.telegram.onHost":`主机指标超出阈值`,"settings.telegram.onHostHint":`磁盘、内存、交换分区、负载和 CPU 温度,依据主机指标下的阈值。`,"settings.telegram.onDdns":`动态 DNS 变更或失败`,"settings.telegram.onDdnsHint":`每轮改动了记录发一条消息,失败的一轮也发一条。`,"settings.telegram.botToken":`Bot 令牌`,"settings.telegram.tokenSet":`已设置令牌`,"settings.telegram.noToken":`没有令牌`,"settings.telegram.tokenNote":`来自 @BotFather — 属于密钥,绝不写入 servers.config.json。`,"settings.telegram.tokenPlaceholder":`123456789:AA…`,"settings.telegram.tokenSavedPlaceholder":`已保存 — 输入新令牌以替换`,"settings.telegram.saveToken":`保存令牌`,"settings.telegram.detectChats":`检测 chat`,"settings.telegram.sendTest":`发送测试`,"settings.telegram.removeToken":`移除令牌`,"settings.telegram.removeTokenConfirm":`确认移除`,"settings.telegram.removeTokenTitle":`移除 bot 令牌?`,"settings.telegram.removeTokenHint":`在重新粘贴令牌之前,通知会停止。`,"settings.telegram.tokenSaved":`令牌已保存。`,"settings.telegram.tokenSavedFor":`已为 @{username} 保存令牌。`,"settings.telegram.tokenRemoved":`令牌已移除。`,"settings.telegram.noChats":`未找到 chat。请先向 bot 发送 /start,然后重新检测。`,"settings.telegram.testSent":`测试消息已发送。`,"settings.telegram.testFailed":`测试消息发送失败。`,"settings.telegram.chatsSeen":`bot 见过的 chat:`,"settings.telegram.lastSend":`上次发送:{result}`,"settings.tls.title":`HTTPS`,"settings.tls.description":`上传一对 PEM 文件,面板便在自己的监听端口上提供 TLS。在家庭网络中,自签名证书就够了。`,"settings.tls.serve":`通过 HTTPS 提供面板`,"settings.tls.serveHint":`随“保存设置”一起保存;面板会重新绑定,此页面随之前往新地址。`,"settings.tls.certificateTitle":`证书`,"settings.tls.certificateDescription":`PEM 编码的证书及其私钥。两者都保存在密钥文件中。`,"settings.tls.unusableTitle":`已存储的证书无法使用`,"settings.tls.subject":`主体`,"settings.tls.issuer":`颁发者`,"settings.tls.validUntil":`有效期至`,"settings.tls.days":`{count} 天`,"settings.tls.privateKey":`私钥`,"settings.tls.keyMatches":`与证书匹配`,"settings.tls.keyMismatch":`不匹配`,"settings.tls.fingerprint":`指纹`,"settings.tls.copyFingerprint":`复制指纹`,"settings.tls.noCertificateTitle":`未上传证书`,"settings.tls.noCertificateText":`请在下方上传 PEM 证书和密钥,然后保存。在存在证书之前不会提供 HTTPS。`,"settings.tls.certFile":`证书文件(.pem、.crt)`,"settings.tls.keyFile":`私钥文件(.pem、.key)`,"settings.tls.pasteCertificate":`或粘贴证书`,"settings.tls.pasteKey":`或粘贴私钥`,"settings.tls.saveCertificate":`保存证书`,"settings.tls.removeCertificate":`移除证书`,"settings.tls.confirmRemove":`确认移除`,"settings.tls.removeTitle":`移除证书?`,"settings.tls.removeHint":`TLS 仍然开启但没有可提供的内容,因此监听重新绑定后面板会回退到 http。`,"settings.tls.stored":`证书已存储。`,"settings.tls.removed":`证书已移除。`,"settings.paths.dataRoot":`数据根目录`,"settings.paths.dataRootHint":`HHOSTED_HOME — 全局设置、工作区、TLS、备份和 UI。`,"settings.paths.globalSettings":`全局设置`,"settings.paths.globalSettingsHint":`settings.json — 监听、身份验证、TLS 策略、主机指标、备份。`,"settings.paths.projectDir":`项目目录`,"settings.paths.projectDirHint":`相对条目路径的基准目录。`,"settings.paths.panelAddress":`面板地址`,"settings.paths.panelAddressHint":`此控制面板当前所在的位置。`,"settings.paths.serversConfig":`服务器配置`,"settings.paths.serversConfigHint":`{label} 的 servers.config.json。`,"settings.paths.workspaceSettings":`工作区设置`,"settings.paths.workspaceSettingsHint":`服务器默认值、日志保留、通知、DDNS。`,"settings.paths.logs":`日志`,"settings.paths.logsHint":`此工作区持久化的输出。`,"settings.paths.copyPath":`复制 {label}`,"settings.paths.whereThingsLive":`文件都在哪里`,"settings.paths.whereThingsLiveDescription":`只读。把路径直接复制到 shell 或编辑器中。`,"settings.paths.workspaceFiles":`工作区文件`,"settings.paths.workspaceFilesDescription":`每个工作区拥有自己的配置、设置和日志目录;彼此之间不共享任何内容。`,"settings.restore.title":`还原备份`,"settings.restore.description":`在应用该计划之前不会写入任何内容。`,"settings.restore.archive":`归档`,"settings.restore.archiveHint":`已存储的归档,或来自本机的 .zip 文件。`,"settings.restore.encryptedName":`{name} — 已加密`,"settings.restore.uploadOption":`上传文件…`,"settings.restore.archiveFile":`归档文件(.zip)`,"settings.restore.unchangedTitle":`目前还没有任何变化`,"settings.restore.archiveLine":`归档 {name}。`,"settings.restore.uploadedArchive":`已上传的归档。`,"settings.restore.passwordProtected":`此备份受密码保护。`,"settings.restore.password":`密码`,"settings.restore.checkAgain":`用密码再次检查`,"settings.restore.choosePrompt":`选择要还原的内容 — 已选择 {selected}/{total}。`,"settings.restore.willRestore":`将还原:{items}。`,"settings.restore.skipped":`已跳过:{items}。`,"settings.restore.nothing":`无`,"settings.restore.restartNote":`面板自身的设置不同,因此之后请重启面板。`,"settings.restore.reloadedNote":`还原的工作区会立即重新加载;标记为自动启动的条目会自行启动。`,"settings.restore.applyStored":`应用此还原`,"settings.restore.applyUpload":`还原上传的归档`,"settings.restore.restored":`已还原 {count} 项。`,"settings.restore.restoredWithNotes":`已还原 {count} 项 — {notes}。`,"settings.restore.noteReloaded":`还原的服务器已上线,自动启动条目正在启动`,"settings.restore.noteRestart":`重启面板以应用其自身设置`,"settings.rebind.failed":`控制面板未在 {target} 上应答。请查看控制台以了解新的监听地址。`,"proxy.status.certified":`证书已就绪`,"proxy.status.localCa":`引擎 CA`,"proxy.status.uploaded":`已上传的证书对`,"proxy.status.awaitingCa":`等待 CA`,"proxy.status.failed":`证书失败`,"proxy.status.fellBack":`已回退到本地 CA`,"proxy.status.serving":`正在服务`,"proxy.status.disabled":`已禁用`,"proxy.status.noUpstream":`无上游`,"proxy.status.error":`错误`,"proxy.status.unapplied":`尚未应用`,"proxy.status.off":`关闭`,"proxy.status.stopped":`已停止`,"proxy.status.starting":`正在启动`,"proxy.status.running":`运行中`,"proxy.status.unsupported":`不支持`,"proxy.target.server":`受监管的服务器`,"proxy.target.panel":`此控制面板`,"proxy.target.external":`字面量上游`,"proxy.target.controlPanel":`控制面板`,"proxy.target.noServer":`未选择服务器`,"proxy.target.noUpstream":`无上游`,"proxy.tls.auto":`自动 — 由引擎决定`,"proxy.tls.off":`关闭 — 纯 HTTP`,"proxy.tls.manual":`已上传的证书`,"proxy.tls.plain":`纯 HTTP`,"proxy.tls.uploaded":`已上传的证书`,"proxy.tls.letsEncrypt":`Let’s Encrypt`,"proxy.tls.engineCa":`引擎 CA(本地)`,"proxy.tls.hintOff":`纯 HTTP:此主机名不提供任何证书。`,"proxy.tls.hintManual":`提供下方上传的证书对。`,"proxy.tls.hintEmpty":`公网主机名会获得 ACME 证书;仅本地名称会获得引擎自有的 CA。`,"proxy.tls.hintPublic":`这是公网主机名,因此引擎会向 CA 申请证书 — 需要 ACME 账户邮箱。`,"proxy.tls.hintLocal":`这是仅本地名称,因此引擎用其本地受信任的 CA 自行签发。`,"proxy.retry.inFallback":`约 8 小时`,"proxy.retry.inMinutes":{one:`约 {count} 分钟`,other:`约 {count} 分钟`},"proxy.retry.inHours":{one:`约 {count} 小时`,other:`约 {count} 小时`},"proxy.engine.title":`引擎`,"proxy.engine.description":`反向代理本身。面板会下载当前构建、监管它,并通过引擎自有的管理 API 应用其配置。`,"proxy.engine.notInFrame":`代理状态尚未进入此面板的范围。`,"proxy.engine.readFailed":`无法读取引擎`,"proxy.engine.notInstalled":`未安装引擎`,"proxy.engine.installNote":`安装会下载面板所监管的当前 {engine} 版本 — 约 46 MB,只需一次。在添加路由并开启代理之前,不会暴露任何内容。`,"proxy.engine.version":`版本`,"proxy.engine.notProbed":`尚未探测`,"proxy.engine.source":`来源`,"proxy.engine.sourceCustom":`手动配置的路径`,"proxy.engine.sourceDownloaded":`由面板下载`,"proxy.engine.size":`大小`,"proxy.engine.binary":`可执行文件`,"proxy.engine.copyPath":`复制可执行文件路径`,"proxy.engine.address":`当前地址`,"proxy.engine.process":`进程`,"proxy.engine.certificates":`证书`,"proxy.engine.noCert":`尚无公网证书`,"proxy.engine.expiresSoon":`最早的在 {days} 天后过期`,"proxy.engine.acme":`ACME 证书`,"proxy.engine.localCa":`本地 CA`,"proxy.engine.dns01":`DNS-01`,"proxy.engine.tcpUdp":`TCP/UDP`,"proxy.engine.documentation":`{engine} 文档`,"proxy.engine.failed":`引擎报告了故障`,"proxy.engine.setcapHint":`特权端口(低于 1024)在 Linux 上需要执行一次此命令:`,"proxy.engine.copyCommand":`复制命令`,"proxy.engine.install":`安装引擎`,"proxy.engine.start":`启动`,"proxy.engine.stop":`停止`,"proxy.engine.apply":`应用配置`,"proxy.engine.revert":`还原`,"proxy.engine.revertHint":`回到上一次应用之前的配置`,"proxy.engine.update":`更新引擎`,"proxy.listener.title":`监听与证书`,"proxy.listener.description":`代理监听的位置。80 和 443 是路由器转发的端口,也是 ACME 质询所期望的端口;低于 1024 的端口需要特权绑定。`,"proxy.listener.unprivilegedPorts":`非特权端口`,"proxy.listener.run":`运行反向代理`,"proxy.listener.runHint":`随“保存设置”一起保存;面板会相应地启动或停止引擎。`,"proxy.listener.httpPort":`HTTP 端口`,"proxy.listener.httpPortHint":`ACME HTTP-01 质询和到 HTTPS 的跳转。`,"proxy.listener.httpsPort":`HTTPS 端口`,"proxy.listener.httpsPortHint":`提供证书的端口。`,"proxy.listener.useFallback":`使用 {http} / {https}`,"proxy.listener.useStandard":`使用 80 / 443`,"proxy.listener.forwardHint":`正以非特权方式运行 — 请在路由器上把 80 和 443 转发到这些端口。`,"proxy.listener.privilegedTitle":`低于 1024 的端口需要特权绑定`,"proxy.listener.privilegedBody":`以自己的用户身份运行面板,未经授权无法绑定 80 或 443。要么授予它一次{how}并重启引擎,要么保留 {http}/{https} 并在路由器上转发 80/443。在 Windows 上该端口可以自由绑定,但可能有其他程序占用。`,"proxy.listener.privilegedWithSetcap":`在引擎可执行文件上使用 {command}`,"proxy.listener.email":`ACME 账户邮箱`,"proxy.listener.emailPlaceholder":`you@example.com`,"proxy.listener.emailHint":`Let's Encrypt 用它在你证书即将过期时提醒你。仅本地名称使用引擎自有的 CA,无需邮箱。`,"proxy.listener.emailNeededTitle":`自动 HTTPS 需要邮箱`,"proxy.listener.emailNeededBody":`“{host}”是公网主机名,因此引擎会向 CA 申请证书,账户地址是必需的。请填写它、关闭该路由的 TLS,或在试验期间开启 staging 端点。`,"proxy.listener.staging":`使用 ACME staging 端点`,"proxy.listener.stagingHint":`在你试验期间使用不受信任的证书,也不会消耗速率限制额度。`,"proxy.listener.dns01":`使用 DNS-01 应答质询`,"proxy.listener.dns01Hint":`面板通过某个路由的 DNS 账户写入质询记录,因此获取证书无需任何入站端口。`,"proxy.listener.resolvers":`对照以下服务器检查记录`,"proxy.listener.resolversPlaceholder":`1.1.1.1, 8.8.8.8`,"proxy.listener.resolversHint":`引擎读取记录所使用的域名服务器;留空则使用其自有的。当分离解析 DNS 让它看到不同视图时需要设置。`,"proxy.listener.noAccountTitle":`没有 DNS 账户能应答质询`,"proxy.listener.noAccountBody":`DNS-01 已开启,但没有账户拥有可用的凭据。请在工作区设置 → 动态 DNS 下添加一个,否则公网名称将继续使用端口质询,并等待一个无法访问它们的 CA。`,"proxy.listener.manyAccountsTitle":`每个公网路由都必须选择一个账户`,"proxy.listener.manyAccountsBody":`有多个账户可以应答,因此“自动”无法选择。请为每个路由选择一个,否则那些名称将继续使用端口质询。`,"proxy.listener.accountNote":`每个路由选择自己的账户,因此不同区域中的名称各自对应正确的账户。保持“自动”的路由会使用表中列出的唯一账户。没有任何账户能应答的名称将继续使用端口质询。`,"proxy.listener.pendingNote":`证书仍在签发的公网名称在此期间仍可访问 — 通过 HTTPS 使用临时的不受信任证书,或通过纯 HTTP 显示一个页面,列出需要转发的端口。`,"proxy.routes.title":`路由`,"proxy.routes.description":`每个服务一个公网主机名。路由可以指向任一工作区中受监管的服务器、本面板,或一个字面量上游。`,"proxy.routes.add":`添加路由`,"proxy.routes.cannotSaveTitle":`这些路由按当前状态无法保存`,"proxy.routes.cannotRoute":`无法为 {host} 建立路由`,"proxy.routes.emptyTitle":`还没有路由`,"proxy.routes.emptyDescription":`添加一个即可通过域名暴露服务器 — 引擎会自行获取证书。`,"proxy.routes.addFirst":`添加第一个路由`,"proxy.routes.columnHostname":`主机名`,"proxy.routes.columnTarget":`目标`,"proxy.routes.columnUpstream":`上游`,"proxy.routes.columnTls":`TLS`,"proxy.routes.columnState":`状态`,"proxy.routes.columnOn":`开启`,"proxy.routes.openInTab":`在新标签页中打开 {url}`,"proxy.routes.noHostname":`尚无主机名`,"proxy.routes.toggle":`路由 {name}`,"proxy.routes.edit":`编辑 {name}`,"proxy.routes.remove":`移除 {name}`,"proxy.routeDialog.titleEdit":`编辑路由`,"proxy.routeDialog.titleAdd":`添加路由`,"proxy.routeDialog.description":`一个主机名、它转发到哪里,以及如何通过 TLS 提供服务。`,"proxy.routeDialog.hostname":`主机名`,"proxy.routeDialog.hostnamePlaceholder":`gitea.example.com`,"proxy.routeDialog.path":`路径前缀`,"proxy.routeDialog.pathPlaceholder":`/optional`,"proxy.routeDialog.pathHint":`留空则服务整个主机。`,"proxy.routeDialog.target":`目标`,"proxy.routeDialog.tls":`TLS`,"proxy.routeDialog.dnsAccount":`DNS 账户`,"proxy.routeDialog.localNote":`仅本地名称由引擎自有的 CA 签发,因此不涉及 DNS 账户。`,"proxy.routeDialog.workspace":`工作区`,"proxy.routeDialog.server":`服务器`,"proxy.routeDialog.noServers":`此工作区没有服务器`,"proxy.routeDialog.stoppedNote":`已停止的服务器不会被路由:该行会显示“无上游”,直到它再次运行。`,"proxy.routeDialog.upstream":`上游`,"proxy.routeDialog.upstreamPlaceholder":`http://10.0.0.5:8080`,"proxy.routeDialog.upstreamHint":`一个具体地址,包括端口。协议头可选。`,"proxy.routeDialog.panelNote":`服务控制面板需要开启身份验证并使用非默认密码 — 否则面板会拒绝保存。`,"proxy.routeDialog.save":`保存路由`,"proxy.account.automatic":`自动(唯一能应答的账户)`,"proxy.account.noTxt":`不支持 TXT`,"proxy.account.noCredentials":`没有凭据`,"proxy.account.gone":`该账户已不再配置。`,"proxy.account.emptyHint":`DNS-01 在此写入质询记录。留空则使用唯一能应答质询的账户(如果有)。`,"proxy.account.cannotWrite":`{provider} 账户无法写入 TXT 记录,因此无法应答 DNS-01 质询。`,"proxy.account.noCredentialsYet":`此 {provider} 账户尚未存储任何凭据。`,"proxy.account.through":`质询通过此 {provider} 账户写入。`,"proxy.certificate.title":`已上传的证书`,"proxy.certificate.description":`由设置为“已上传的证书”的路由提供。其他所有情况 — 公网或本地 — 都由引擎自行签发证书。`,"proxy.certificate.add":`添加证书`,"proxy.certificate.emptyTitle":`未上传任何证书`,"proxy.certificate.emptyDescription":`设置为“已上传的证书”的路由需要一对覆盖其主机名的证书,否则引擎没有可提供的内容。`,"proxy.certificate.daysLeft":`剩余 {days} 天`,"proxy.certificate.subject":`主体`,"proxy.certificate.issuer":`颁发者`,"proxy.certificate.validUntil":`有效期至`,"proxy.certificate.covers":`覆盖`,"proxy.certificate.noSans":`其 SAN 中没有任何主机名`,"proxy.certificate.removeAria":`移除 {name}`,"proxy.certificate.removeQuestion":`移除“{name}”?`,"proxy.certificate.removeBody":`该证书对会从磁盘删除。仍设置为“已上传的证书”的路由会继续提供引擎自有的证书,直到你更改;只要有路由仍在使用它,面板就会拒绝此操作。`,"proxy.certificate.removeIt":`移除它`,"proxy.certificate.stored":`已存储“{label}”。`,"proxy.certificate.removed":`已移除“{name}”。`,"proxy.certificateDialog.title":`添加证书`,"proxy.certificateDialog.description":`证书对以其 id 为名存储在磁盘上,设置为“已上传的证书”的路由即可使用它。`,"proxy.certificateDialog.label":`标签`,"proxy.certificateDialog.labelPlaceholder":`家庭通配符`,"proxy.certificateDialog.id":`Id`,"proxy.certificateDialog.idHint":`为磁盘上的文件命名`,"proxy.certificateDialog.certFile":`证书文件(.pem、.crt)`,"proxy.certificateDialog.keyFile":`私钥文件(.pem、.key)`,"proxy.certificateDialog.pasteCert":`或粘贴证书`,"proxy.certificateDialog.pasteKey":`或粘贴私钥`,"proxy.certificateDialog.certPlaceholder":`-----BEGIN CERTIFICATE-----`,"proxy.certificateDialog.keyPlaceholder":`-----BEGIN PRIVATE KEY-----`,"proxy.certificateDialog.store":`存储证书`,"proxy.certificateDialog.errorLabel":`必须填写标签`,"proxy.certificateDialog.errorId":`id 必须以字母或数字开头,随后只能是字母、数字、短横线或下划线`,"proxy.certificateDialog.errorTaken":`“{id}”已被另一份证书使用`,"proxy.certificateDialog.errorCertificate":`请粘贴或选择证书`,"proxy.certificateDialog.errorPrivateKey":`请粘贴或选择私钥`,"proxy.retryButton.force":`强制重试证书`,"proxy.retryButton.question":`为 {host} 再次向 CA 申请?`,"proxy.retryButton.body":`引擎此前未能为此主机名取得 CA 证书,正在使用其本地 CA。它每 {retryIn}自动重试一次。`,"proxy.retryButton.warning":`立即重试会终止此路由并使其短暂不可用,确定要继续吗?`,"proxy.retryButton.leave":`暂不处理`,"proxy.retryButton.now":`立即重试`,"proxy.view.title":`反向代理`,"proxy.view.description":`通过域名暴露你的服务器,经由 80/443 或 DNS 质询自动获取 HTTPS。`,"proxy.view.dnsNote":`使用 DNS-01 时,请在任意工作区的“工作区设置 → 动态 DNS”下添加该域名的 DNS 提供商;之后路由便可以从任意工作区选择该账户。`,"proxy.view.readFailed":`无法读取反向代理`,"proxy.view.reading":`正在读取反向代理…`,"proxy.view.engineInstalled":`引擎已安装`,"proxy.view.engineStarting":`引擎正在启动`,"proxy.view.engineStopping":`引擎正在停止`,"proxy.view.configApplied":`配置已应用`,"proxy.view.configReverted":`配置已还原`,"proxy.view.settingsSaved":`设置已保存。`,"proxy.view.settingsSavedToast":`设置已保存`,"proxy.view.retryFailed":`重试失败`,"proxy.view.retryAsked":`正在为 {host} 再次向 CA 申请`,"proxy.view.fieldChanged":`个字段已更改`,"proxy.view.fieldsChanged":`个字段已更改`,"proxy.view.noChanges":`没有未保存的更改`,"proxy.view.discard":`放弃更改`,"proxy.view.save":`保存设置`,"proxy.validation.labelRequired":`必须填写标签`,"proxy.validation.idPattern":`id 必须以字母或数字开头,随后只能是字母、数字、短横线或下划线`,"proxy.validation.hostRequired":`必须填写主机名`,"proxy.validation.hostPattern":`主机名只能包含字母、数字、点和短横线,例如 home.example.com`,"proxy.validation.hostTaken":`"{host}" 已在此路径上建立了路由`,"proxy.validation.pathSlash":`路径前缀以 / 开头`,"proxy.validation.pathSpace":`路径前缀不能包含空格`,"proxy.validation.idTaken":`路由 id "{id}" 被使用了两次`,"proxy.validation.workspaceRequired":`请选择拥有该服务器的工作区`,"proxy.validation.serverRequired":`请在该工作区中选择一个服务器`,"proxy.validation.url":`诸如 http://10.0.0.5:8080 的上游`,"views.actions.addAServer":`添加服务器`,"views.actions.addServer":`添加服务器`,"views.actions.startAll":`全部启动`,"views.actions.stopAll":`全部停止`,"views.common.thisWorkspace":`此工作区`,"views.globalOverview.configError":`无法读取配置:{error}`,"views.globalOverview.degraded":`降级`,"views.globalOverview.description":`主机指标以及所有工作区中的每台服务器,按所在位置分组。`,"views.globalOverview.emptyDescription":`在页眉中选择一个工作区,并添加它应保持运行的第一进程。`,"views.globalOverview.emptyTitle":`任何地方都还没有服务器`,"views.globalOverview.groupEmptyDescription":`添加一个后,它会显示在这里和工作区页面上。`,"views.globalOverview.groupRunning":`{running}/{total} 运行中`,"views.globalOverview.hostUptime":`主机在线时长`,"views.globalOverview.hostVitals":`主机指标`,"views.globalOverview.hostVitalsNote":`本机,由所有工作区共享。`,"views.globalOverview.needLook":{one:`{count} 台服务器需要关注`,other:`{count} 台服务器需要关注`},"views.globalOverview.openWorkspace":`打开工作区`,"views.globalOverview.panelUptime":`面板在线时长`,"views.globalOverview.samplingOff":`采样已关闭`,"views.globalOverview.samplingOn":`采样已开启`,"views.globalOverview.serversTotal":`共 {count} 台服务器`,"views.globalOverview.serving":`正在服务`,"views.globalOverview.workspaces":`工作区`,"views.globalSettings.authenticationDescription":`谁可以登录此面板,以及会话如何被信任。`,"views.globalSettings.backupsDescription":`每次捕获一份归档,覆盖面板和你选择的任意工作区。`,"views.globalSettings.changesDescription":`保存后将对面板设置文件写入的内容。`,"views.globalSettings.description":`此面板的监听、访问、主机指标、备份、TLS 和路径 — 由所有工作区共享。`,"views.globalSettings.hostDescription":`针对本机自身资源的告警阈值。`,"views.globalSettings.interfaceDescription":`提供你自己的面板 UI,而不使用自带界面。`,"views.globalSettings.languageDescription":`此面板在此浏览器中显示所用的语言。`,"views.globalSettings.languageNote":`你的选择保存在此浏览器中,并同样适用于登录页面。它不会改变面板自身的日志输出或 API 消息。`,"views.globalSettings.listenerDescription":`控制面板监听的地址以及它如何对外公布自己。`,"views.globalSettings.loadErrorTitle":`部分仅存于文件中的值无法加载`,"views.globalSettings.navLabel":`全局设置分区`,"views.globalSettings.pathsDescription":`home-hosted 存放其文件的位置,包括全局和每个工作区。`,"views.globalSettings.saveFailed":`无法保存设置。`,"views.globalSettings.saved":`设置已保存。`,"views.globalSettings.savedRebinding":`设置已保存 — 面板正在迁移到新地址。`,"views.globalSettings.savedToast":`设置已保存`,"views.globalSettings.sectionAuthentication":`身份验证`,"views.globalSettings.sectionBackups":`备份`,"views.globalSettings.sectionHost":`主机指标`,"views.globalSettings.sectionInterface":`界面`,"views.globalSettings.sectionListener":`监听`,"views.globalSettings.sectionPaths":`路径`,"views.globalSettings.sectionTls":`TLS`,"views.globalSettings.title":`全局设置`,"views.globalSettings.tlsDescription":`使用你自己的证书通过 HTTPS 提供面板。`,"views.logs.allStreams":`所有流`,"views.logs.clear":`清空`,"views.logs.clearDescription":`{server} — 磁盘上的文件会被截断。进程继续运行,新行从此刻起写入。`,"views.logs.clearFile":`清空文件`,"views.logs.clearNote":`如果仍需要这些输出,请先下载 — 此操作无法从面板撤销。`,"views.logs.clearTitle":`清空持久化的日志文件?`,"views.logs.fileEmpty":`持久化的文件为空。`,"views.logs.filesOnDisk":{one:`{count} 个文件`,other:`{count} 个文件`},"views.logs.loadedLines":`已加载 {count} 行`,"views.logs.modeLive":`实时流`,"views.logs.modePersisted":`已持久化`,"views.logs.noServersDescription":`添加一个后,其输出将持久化保存在这里。`,"views.logs.noServersTitle":`没有服务器`,"views.logs.nothingOnDisk":`此服务器在磁盘上没有任何内容 — 持久化已关闭,或它还没有写入任何内容。`,"views.logs.nothingPersisted":`没有持久化内容`,"views.logs.persistedSummary":`{workspace} · {total} 台服务器中有 {persisted} 台在磁盘上 · {size}`,"views.logs.persistedTitle":`持久化日志`,"views.logs.pickServerDescription":`持久化输出和实时流都是按服务器区分的。请从列表中选择一个。`,"views.logs.pickServerTitle":`选择服务器`,"views.logs.reload":`重新加载`,"views.logs.retentionNote":`轮转和保留在工作区设置 → 日志下设置。`,"views.logs.searchAria":`搜索日志`,"views.logs.searchPlaceholder":`在尾部窗口中搜索`,"views.logs.searchedLines":`已搜索 {count} 行`,"views.logs.streamAria":`流`,"views.logs.tailAria":`尾部大小`,"views.logs.waitingOutput":`已连接 — 正在等待输出。`,"views.overview.acrossTree":`整个树中`,"views.overview.cpuNow":`当前 {value}% CPU`,"views.overview.crashedOrUnhealthy":`崩溃或不健康`,"views.overview.description":`此工作区中每台服务器的实时状态,通过单一事件流刷新。`,"views.overview.emptyDescription":`添加此工作区应保持运行的第一进程。`,"views.overview.emptyTitle":`此工作区没有服务器`,"views.overview.enabled":`{count} 个已启用`,"views.overview.longestUptime":`最长在线时长`,"views.overview.needLook":{one:`{count} 台服务器需要关注`,other:`{count} 台服务器需要关注`},"views.overview.needsAttention":`需要关注`,"views.overview.notUp":`{count} 个未运行`,"views.overview.nothingBroken":`没有任何故障`,"views.overview.nothingRunning":`没有正在运行的进程`,"views.overview.openFullList":`打开完整列表`,"views.overview.peak":`峰值 {value}`,"views.overview.processMemory":`进程内存`,"views.overview.recentActivity":`最近活动`,"views.overview.running":`运行中`,"views.overview.sampling":`资源历史每 5 秒采样一次,并在本次会话中保留`,"views.overview.stopped":`已停止`,"views.overview.workspaceLabel":`工作区 {id}`,"views.route.server":`服务器`,"views.serverDetail.allServers":`所有服务器`,"views.serverDetail.autostart":`随面板一起自动启动`,"views.serverDetail.backToServers":`返回服务器列表`,"views.serverDetail.bind":`绑定`,"views.serverDetail.bindCustom":`{bind} — 自定义`,"views.serverDetail.bindLan":`0.0.0.0 — 所有网卡`,"views.serverDetail.bindLocal":`127.0.0.1 — 仅本机`,"views.serverDetail.closeEditor":`关闭编辑器`,"views.serverDetail.copyJson":`复制 JSON 配置`,"views.serverDetail.crashes24":`24 小时崩溃`,"views.serverDetail.dependencies":`依赖`,"views.serverDetail.detached":`已脱离`,"views.serverDetail.detachedHint":`该进程替换了自身:面板接管了后继进程,而不是再启动一份副本。停止仍然有效,它的输出仍留在后继进程发送的位置。`,"views.serverDetail.disableServer":`禁用服务器`,"views.serverDetail.editHint":`编辑此条目的每个字段`,"views.serverDetail.effectiveConfig":`生效配置`,"views.serverDetail.effectiveConfigNote":`来自设置的默认值已合并进这些值。`,"views.serverDetail.enableServer":`启用服务器`,"views.serverDetail.eventHistory":`事件历史`,"views.serverDetail.eventHistoryNote":`由面板保留 24 小时。`,"views.serverDetail.fieldArgs":`args`,"views.serverDetail.fieldBackupPaths":`备份路径`,"views.serverDetail.fieldBootstrap":`bootstrap`,"views.serverDetail.fieldCommand":`command`,"views.serverDetail.fieldCwd":`cwd`,"views.serverDetail.fieldDataEnvs":`数据环境变量`,"views.serverDetail.fieldDependsOn":`依赖于`,"views.serverDetail.fieldEnv":`env`,"views.serverDetail.fieldEnvFile":`环境变量文件`,"views.serverDetail.fieldHealth":`健康`,"views.serverDetail.fieldLogBuffer":`日志缓冲`,"views.serverDetail.fieldOnPortConflict":`端口冲突时`,"views.serverDetail.fieldPortBind":`端口 · 绑定`,"views.serverDetail.fieldRestart":`重启`,"views.serverDetail.fieldRssLimit":`RSS 限制`,"views.serverDetail.fieldStop":`停止`,"views.serverDetail.fields":`字段`,"views.serverDetail.goneDescription":`{id} 已不再存在于 servers.config.json 中。它可能已从另一个标签页中被移除。`,"views.serverDetail.goneTitle":`该服务器已不存在`,"views.serverDetail.health":`健康`,"views.serverDetail.healthProbe":`健康探测`,"views.serverDetail.lastCrash":`上次崩溃`,"views.serverDetail.lastProbe":`上次探测`,"views.serverDetail.logBufferLines":`{count} 行`,"views.serverDetail.memoryRss":`内存(RSS)`,"views.serverDetail.moreActions":`{label} 的更多操作`,"views.serverDetail.neverWritten":`此服务器还没有写入任何内容。`,"views.serverDetail.nextAttempt":`下次尝试`,"views.serverDetail.none":`无`,"views.serverDetail.off":`关闭`,"views.serverDetail.persistent":`常驻`,"views.serverDetail.persistentHint":"此条目由自己的 nanny 运行,因此面板停止、重启或被终止时它仍会继续运行。`home-hosted down` 会报告它而不是停止它;只有“停止”才会。","views.serverDetail.pid":`PID`,"views.serverDetail.portFree":`空闲`,"views.serverDetail.portInUse":`占用中`,"views.serverDetail.portState":`端口状态`,"views.serverDetail.probeFailed":`健康探测未通过。`,"views.serverDetail.probeFailedFor":`健康探测已连续 {duration} 未通过。`,"views.serverDetail.processes":`进程`,"views.serverDetail.rawJson":`原始 JSON`,"views.serverDetail.removeAutostart":`从自动启动中移除`,"views.serverDetail.removeDescription":`{label} 将从 servers.config.json 中移除:其进程会被停止,日志和崩溃历史也会一并删除。`,"views.serverDetail.removeNote":`此操作无法从面板撤销 — 必须手动或从备份中重新添加该条目。`,"views.serverDetail.removeServer":`移除服务器`,"views.serverDetail.removeTitle":`移除此服务器?`,"views.serverDetail.restart":`重启`,"views.serverDetail.restarts":`重启次数`,"views.serverDetail.sectionConfig":`配置`,"views.serverDetail.sectionHistory":`历史`,"views.serverDetail.sectionOutput":`实时输出`,"views.serverDetail.start":`启动`,"views.serverDetail.startsOnItsOwn":`自行启动。在 {code} 下添加 id 可将它排在其他服务器之后。`,"views.serverDetail.stop":`停止`,"views.serverDetail.telemetry":`遥测`,"views.serverDetail.telemetryNote":`此页面打开时每 5 秒采样一次。`,"views.serverDetail.unhealthyFor":`不健康时长`,"views.serverDetail.uptime24":`24 小时在线`,"views.serverDetail.waitingFirstLine":`正在等待第一行…`,"views.servers.clearFilter":`清除筛选`,"views.servers.clearFilters":`清除筛选条件`,"views.servers.description":`{workspace} 的 servers.config.json 中的每个条目,包含实时资源、健康和历史。`,"views.servers.emptyDescription":`添加此面板应监管的第一进程。其命令、参数、环境变量和工作目录都在配置文件中。`,"views.servers.emptyTitle":`未配置任何服务器`,"views.servers.filterAll":`全部`,"views.servers.filterAria":`筛选服务器`,"views.servers.filterAttention":`需关注`,"views.servers.filterDisabled":`已禁用`,"views.servers.filterPlaceholder":`按 id、标签、命令或端口筛选`,"views.servers.filterRunning":`运行中`,"views.servers.filterStopped":`已停止`,"views.servers.noMatchDescription":`请尝试其他状态或清除搜索。`,"views.servers.noMatchTitle":`没有匹配该筛选条件的内容`,"views.settings.changesDescription":`保存后将对 {workspace} 的设置写入的内容。`,"views.settings.configErrorNote":`面板会用它已有的配置继续监管;修复该文件后会自行重新加载。`,"views.settings.configErrorTitle":`无法读取工作区配置`,"views.settings.configWarningTitle":`此工作区的配置有警告`,"views.settings.ddnsDescription":`让主机名始终指向本机的公网地址,无论它们由哪家注册商持有。`,"views.settings.defaultsDescription":`应用于此工作区中每个未自行设置该值的条目。`,"views.settings.description":`{workspace} 的服务器默认值、日志保留、通知和动态 DNS。`,"views.settings.logsDescription":`此工作区在磁盘上保留多少输出以及保留多久。`,"views.settings.navLabel":`工作区设置分区`,"views.settings.notificationsDescription":`此工作区的崩溃和健康告警,发送到 Telegram 聊天。`,"views.settings.saveFailed":`无法保存设置。`,"views.settings.saved":`工作区设置已保存。`,"views.settings.savedToast":`工作区设置已保存`,"views.settings.sectionDdns":`动态 DNS`,"views.settings.sectionDefaults":`服务器默认值`,"views.settings.sectionLogs":`日志`,"views.settings.sectionNotifications":`通知`};export{e as default};
|
|
@@ -6,18 +6,22 @@
|
|
|
6
6
|
<meta name="color-scheme" content="light dark" />
|
|
7
7
|
<title>home-hosted — control panel</title>
|
|
8
8
|
<script>
|
|
9
|
-
// Applied before the first paint so the shell never flashes the wrong theme
|
|
9
|
+
// Applied before the first paint so the shell never flashes the wrong theme, and `lang` is
|
|
10
|
+
// right for the fonts and the screen reader. The translated text itself lands with
|
|
11
|
+
// `initLocale()` in main.ts, which resolves before the app mounts.
|
|
10
12
|
;(function () {
|
|
11
13
|
try {
|
|
12
14
|
var stored = localStorage.getItem('hh.theme')
|
|
13
15
|
var dark = stored === 'dark' || (stored !== 'light' && matchMedia('(prefers-color-scheme: dark)').matches)
|
|
14
16
|
document.documentElement.classList.toggle('dark', dark)
|
|
17
|
+
var locale = localStorage.getItem('hh.locale')
|
|
18
|
+
if (locale) document.documentElement.lang = locale
|
|
15
19
|
}
|
|
16
20
|
catch (error) { /* storage unavailable — fall through to light */ }
|
|
17
21
|
})()
|
|
18
22
|
</script>
|
|
19
|
-
<script type="module" crossorigin src="/assets/index-
|
|
20
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
23
|
+
<script type="module" crossorigin src="/assets/index-HT6jUD-L.js"></script>
|
|
24
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DwE9bYyS.css">
|
|
21
25
|
</head>
|
|
22
26
|
<body>
|
|
23
27
|
<div id="app"></div>
|
package/uis/stock/dist/ui.json
CHANGED