home-hosted 0.8.1 → 0.8.2
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 +4 -1
- package/dist/cli.js +170 -27
- package/dist/cli.js.map +1 -1
- package/docs/UI_CREATION.md +23 -0
- package/package.json +4 -2
- package/uis/stock/dist/assets/de-DQxDtYp2.js +1 -0
- package/uis/stock/dist/assets/es-BP0qzCTU.js +1 -0
- package/uis/stock/dist/assets/fr-DHCvxiys.js +1 -0
- package/uis/stock/dist/assets/index-C02FUAwz.js +46 -0
- package/uis/stock/dist/assets/{index-DwE9bYyS.css → index-Skf2FzpK.css} +1 -1
- package/uis/stock/dist/assets/ja-DseIeS1D.js +1 -0
- package/uis/stock/dist/assets/ko-Dcu2b6c2.js +1 -0
- package/uis/stock/dist/assets/ru-DaAAVw09.js +1 -0
- package/uis/stock/dist/assets/vi-D780h-t9.js +1 -0
- package/uis/stock/dist/assets/zh-CN-C8OC-N1b.js +1 -0
- package/uis/stock/dist/index.html +2 -2
- package/uis/stock/dist/ui.json +3 -3
- package/uis/stock/dist/assets/de-DRY6VVqP.js +0 -1
- package/uis/stock/dist/assets/es-CKPLbx5t.js +0 -1
- package/uis/stock/dist/assets/fr-CQ7_4vtN.js +0 -1
- package/uis/stock/dist/assets/index-HT6jUD-L.js +0 -46
- package/uis/stock/dist/assets/ja-bRUylgOt.js +0 -1
- package/uis/stock/dist/assets/ko-DWqbA99M.js +0 -1
- package/uis/stock/dist/assets/ru-DUFxhVp3.js +0 -1
- package/uis/stock/dist/assets/vi-B0-81iVf.js +0 -1
- package/uis/stock/dist/assets/zh-CN-CeoyD9BM.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"activity.emptyTitle":`Không có sự kiện nào trong 24 giờ qua`,"activity.emptyDescription":`Khởi động, thoát, sự cố và phục hồi xuất hiện ở đây khi chúng xảy ra.`,"activity.ran":`đã chạy {duration}`,"addServer.title":`Thêm máy chủ`,"addServer.description":`Thêm một mục vào servers.config.json của {workspace}; mọi chính sách bạn bỏ trống đều kế thừa từ giá trị mặc định.`,"addServer.thisWorkspace":`không gian làm việc này`,"addServer.identity":`Nhận dạng`,"addServer.id":`Id`,"addServer.idHint":`Chữ thường, chữ số, dấu gạch ngang và gạch dưới; được dùng trong URL và nhật ký.`,"addServer.labelHint":`Hiển thị trong bảng điều khiển; mặc định là id.`,"addServer.process":`Tiến trình`,"addServer.commandHint":`Được spawn không qua shell.`,"addServer.argumentsHint":`Mỗi dòng một tham số; khoảng trắng trong dòng được giữ nguyên.`,"addServer.portLifecycle":`Cổng & vòng đời`,"addServer.bindHint":`lan mở nó ra mạng; chỉ làm vậy khi đã có xác thực.`,"addServer.advanced":`Cài đặt nâng cao`,"addServer.advancedHint":`môi trường, sao lưu, chính sách, vòng đời, bootstrap`,"addServer.backups":`Sao lưu`,"addServer.backupIgnore":`Bỏ qua các tệp sinh tự động đã biết`,"addServer.bootstrapDescription":`Một lệnh chạy một lần trước lần khởi động đầu tiên.`,"addServer.bootstrapHint":`Cài đặt, migration, tải xuống — trước lần khởi động đầu tiên, không phải mọi lần.`,"addServer.policyResources":`Chính sách & tài nguyên`,"addServer.logBufferHint":`Để trống là dùng mặc định.`,"addServer.inheritNote":`Khởi động lại, tình trạng và dừng ban đầu khớp với {settings}; đổi một mục ở đây thì nó được ghi vào mục này thay vì tiếp tục kế thừa.`,"addServer.serverDefaults":`Cài đặt → Mặc định máy chủ`,"addServer.placeholdersTitle":`Các placeholder có sẵn cho tham số`,"addServer.submit":`Thêm vào servers.config.json`,"app.name":`home-hosted`,"app.tagline":`Bảng điều khiển giám sát tiến trình`,"bind.local":`local — 127.0.0.1`,"bind.lan":`lan — 0.0.0.0`,"bind.explicit":`{bind} — chỉ định rõ`,"common.cancel":`Huỷ`,"common.confirm":`Xác nhận`,"common.reset":`Đặt lại`,"common.keepIt":`Giữ nguyên`,"common.remove":`Gỡ bỏ`,"common.close":`Đóng`,"common.save":`Lưu`,"common.saving":`Đang lưu…`,"common.discard":`Bỏ thay đổi`,"common.delete":`Xoá`,"common.edit":`Sửa`,"common.add":`Thêm`,"common.retry":`Thử lại`,"common.copy":`Sao chép`,"common.copied":`Đã sao chép`,"common.enabled":`Đang bật`,"common.disabled":`Đang tắt`,"common.none":`Không có`,"common.unknown":`không rõ`,"common.loading":`Đang tải…`,"common.selectAll":`Chọn tất cả`,"common.selectNone":`Bỏ chọn tất cả`,"common.name":`Tên`,"common.label":`Nhãn`,"common.hostname":`Tên máy chủ`,"common.port":`Cổng`,"common.command":`Lệnh`,"common.environment":`Biến môi trường`,"common.memory":`Bộ nhớ`,"common.cpu":`CPU`,"common.disk":`Đĩa`,"common.uptime":`Thời gian hoạt động`,"common.status":`Trạng thái`,"common.actions":`Thao tác`,"common.details":`Chi tiết`,"common.overview":`Tổng quan`,"common.warning":`Cảnh báo`,"common.error":`Lỗi`,"common.confirmQuestion":`{label}?`,"common.unset":`chưa đặt`,"common.never":`chưa bao giờ`,"common.now":`vừa xong`,"common.dismiss":`Bỏ qua`,"connection.live":`Trực tiếp`,"connection.connecting":`Đang kết nối`,"connection.reconnecting":`Đang kết nối lại`,"connection.liveUpdates":`Cập nhật trực tiếp`,"editor.title":`Sửa cấu hình`,"editor.description":`Ghi các ghi đè vào {file}; phần nào để nguyên sẽ tiếp tục kế thừa giá trị mặc định.`,"editor.inSync":`đã đồng bộ`,"editor.process":`Tiến trình`,"editor.processDescription":`Thứ được spawn, ở đâu, và với môi trường nào.`,"editor.labelPlaceholder":`quay về dùng id`,"editor.argumentsHint":`Mỗi dòng một tham số; {port} {host} {home} {projectDir} {dataRoot} {id} {label} {cwd} {bind} {lanIp} sẽ được thay thế.`,"editor.portTitle":`Cổng & bind`,"editor.portDescription":`Cách cổng được preflight và nơi tiến trình truy cập được.`,"editor.bindHint":`Một IPv4 tuỳ chỉnh mà cấu hình đã đặt vẫn chọn được.`,"editor.lifecycle":`Vòng đời`,"editor.lifecycleDescription":`Supervisor có quản lý mục này hay không.`,"editor.save":`Lưu vào servers.config.json`,"editor.changesTitle":`Thay đổi chưa lưu`,"editor.changesDescription":`Những gì nút Lưu sẽ ghi vào servers.config.json.`,"editor.nothingToSave":`Không có gì để lưu.`,"health.disabled":`Không kiểm tra`,"health.unknown":`Chưa dò`,"health.healthy":`Bình thường`,"health.unhealthy":`Bất thường`,"history.start":`Đã khởi động`,"history.exit":`Đã thoát`,"history.crash":`Gặp sự cố`,"history.forcedRestart":`Buộc khởi động lại`,"history.unhealthy":`Bất thường`,"history.recovered":`Đã phục hồi`,"host.loadPerCpu":`Tải / cpu`,"host.cpuTemp":`Nhiệt độ CPU`,"host.samplingOff":`Lấy mẫu máy chủ đang tắt`,"host.samplingOffDescription":`Bật trong Cài đặt để thu thập tải, bộ nhớ, đĩa và nhiệt độ.`,"host.swap":`Swap`,"host.cpus":`CPU`,"host.loadAverage":`Tải 1 / 5 / 15`,"host.memoryUsed":`Bộ nhớ đã dùng`,"host.sampled":`Đã lấy mẫu`,"host.filesystems":`Hệ thống tệp`,"host.thresholdsBreached":`Ngưỡng bị vượt`,"killPort.trigger":`Kill thứ đang giữ cổng {port}`,"killPort.title":`Kill tiến trình trên cổng {port}?`,"killPort.body":`Nó được yêu cầu dừng trước, và chỉ bị kill nếu bỏ qua yêu cầu đó. Mọi thứ bảng điều khiển này giám sát đều bị từ chối, nên một máy chủ được quản lý không thể mất theo cách này.`,"killPort.confirm":`Kill nó`,"language.label":`Ngôn ngữ`,"language.select":`Chọn ngôn ngữ`,"lifecycle.restartTitle":`Chính sách khởi động lại`,"lifecycle.restartDescription":`Thời gian chờ tăng dần giữa các lần thử sau khi sự cố.`,"lifecycle.restartOnCrash":`Khởi động lại khi sự cố`,"lifecycle.maxRetries":`Số lần thử tối đa`,"lifecycle.maxRetriesHint":`Số lần thử trước khi máy chủ bị bỏ ở trạng thái sự cố.`,"lifecycle.baseDelay":`Độ trễ cơ sở (ms)`,"lifecycle.factor":`Hệ số tăng dần`,"lifecycle.maxDelay":`Độ trễ tối đa (ms)`,"lifecycle.resetAfter":`Đặt lại sau (ms)`,"lifecycle.resetAfterHint":`Một lần chạy dài đến mức này sẽ xoá bộ đếm số lần thử.`,"lifecycle.healthTitle":`Dò tình trạng`,"lifecycle.healthDescription":`Cách dò mức sẵn sàng sau khi tiến trình chạy lên.`,"lifecycle.probe":`Dò máy chủ này`,"lifecycle.probeType":`Kiểu dò`,"lifecycle.probePort":`Cổng TCP — chỉ kết nối`,"lifecycle.probeHttp":`Yêu cầu HTTP — kiểm tra phản hồi`,"lifecycle.interval":`Khoảng thời gian (ms)`,"lifecycle.timeout":`Thời gian chờ (ms)`,"lifecycle.unhealthyAfter":`Bất thường sau`,"lifecycle.unhealthyAfterHint":`Số lần dò thất bại liên tiếp.`,"lifecycle.forceRestartAfter":`Buộc khởi động lại sau (ms)`,"lifecycle.forceRestartAfterHint":`0 là tắt.`,"lifecycle.startTimeout":`Thời gian chờ khởi động (ms)`,"lifecycle.httpPath":`Đường dẫn HTTP`,"lifecycle.httpMethod":`Phương thức HTTP`,"lifecycle.expectStatus":`Mong đợi mã trạng thái`,"lifecycle.expectStatusHint":`Để trống là chấp nhận mọi mã thấp hơn.`,"lifecycle.expectStatusBelow":`Khoẻ khi trạng thái thấp hơn`,"lifecycle.expectBody":`Nội dung phải chứa`,"lifecycle.expectBodyPlaceholder":`chuỗi con không bắt buộc`,"lifecycle.headBodyHint":`HEAD không có nội dung phản hồi, nên phép dò này bị bỏ qua — hãy dùng GET hoặc xoá trống.`,"lifecycle.stopTitle":`Hành vi khi dừng`,"lifecycle.stopDescription":`Cách yêu cầu cây tiến trình kết thúc.`,"lifecycle.signal":`Tín hiệu`,"lifecycle.signalTerm":`SIGTERM — yêu cầu dừng`,"lifecycle.signalInt":`SIGINT — ngắt (Ctrl-C)`,"lifecycle.signalKill":`SIGKILL — kill ngay`,"lifecycle.grace":`Thời gian gia hạn (ms)`,"lifecycle.killGroup":`Kill toàn bộ nhóm tiến trình`,"lifecycle.killPortHolders":`Cũng kill bất cứ thứ gì đang giữ cổng`,"login.title":`Đăng nhập để tiếp tục`,"login.firstRunTitle":`Bảng điều khiển này chưa có mật khẩu`,"login.firstRunSubtitle":`Bất kỳ thứ gì trên máy này đều truy cập được. Hãy đặt mật khẩu ngay sau khi vào.`,"login.authOffTitle":`Xác thực đang tắt`,"login.authOffSubtitle":`Bảng điều khiển chỉ lắng nghe trên loopback, và đó là thứ duy nhất bảo vệ nó lúc này.`,"login.subtitle":`Bảng điều khiển đã được bảo vệ. Nhập mật khẩu để tiếp tục.`,"login.password":`Mật khẩu`,"login.showPassword":`Hiện mật khẩu`,"login.hidePassword":`Ẩn mật khẩu`,"login.signIn":`Đăng nhập`,"login.openDashboard":`Mở bảng điều khiển`,"login.exposed":`Đang phơi bày`,"login.defaultPasswordWarning":`Vẫn đang dùng mật khẩu mặc định {password}. Hãy đổi trong Cài đặt — việc lắng nghe ngoài 127.0.0.1 vẫn bị từ chối cho đến khi bạn đổi.`,"login.noPasswordWarning":`Chưa đặt mật khẩu. Mở Cài đặt từ máy này để thêm, hoặc chạy {command}.`,"login.sessionNote":`Phiên đăng nhập kéo dài {days} ngày sau lần truy cập cuối — mỗi yêu cầu gia hạn thêm. Đăng xuất chỉ xoá trên trình duyệt này.`,"login.servedFromThisMachine":`phục vụ từ máy này`,"logs.emptyHint":`Chưa có đầu ra.`,"logs.noMatches":`Không có gì khớp với tìm kiếm hoặc bộ lọc luồng đó.`,"logs.searchPlaceholder":`Tìm trong đầu ra này`,"logs.searchLabel":`Tìm trong đầu ra nhật ký`,"logs.clearSearch":`Xoá tìm kiếm`,"logs.prevMatch":`Kết quả trước`,"logs.nextMatch":`Kết quả tiếp theo`,"logs.showTimestamps":`Hiện dấu thời gian`,"logs.hideTimestamps":`Ẩn dấu thời gian`,"logs.timestampsShort":`ts`,"logs.pause":`Tạm dừng`,"logs.follow":`Bám theo`,"logs.clearHint":`Xoá bộ đệm trong bộ nhớ`,"logs.clearLabel":`Xoá bộ đệm nhật ký`,"logs.downloadHint":`Tải tệp đã lưu`,"logs.downloadLabel":`Tải tệp nhật ký`,"logs.outputLabel":`Đầu ra nhật ký`,"logs.jumpToLatest":`Nhảy tới mới nhất`,"logs.streaming":`đang truyền`,"logs.paused":`đã tạm dừng`,"logs.snapshot":`ảnh chụp`,"logs.linesOf":`{count} trong {total} dòng`,"logs.matches":`{count} kết quả`,"logs.rowHeight":`chiều cao dòng {height}px · dạng cửa sổ`,"logs.streamAll":`Tất cả`,"logs.streamOut":`out`,"logs.streamErr":`err`,"logs.streamSys":`sys`,"metric.emptyHint":`đang thu thập…`,"nav.global":`Toàn cục`,"nav.workspace":`Không gian làm việc`,"nav.others":`Khác`,"nav.overview":`Tổng quan`,"nav.servers":`Máy chủ`,"nav.logs":`Nhật ký`,"nav.workspaceSettings":`Cài đặt không gian làm việc`,"nav.globalOverview":`Tổng quan toàn cục`,"nav.globalSettings":`Cài đặt toàn cục`,"nav.reverseProxy":`Reverse Proxy`,"nav.navigation":`Điều hướng`,"nav.closeNavigation":`Đóng điều hướng`,"nav.hostVitals":`Chỉ số máy chủ`,"notice.configError":`Không đọc được tệp cấu hình: {error}`,"notice.configErrorHint":`Bảng điều khiển vẫn chạy cấu hình cũ; sửa {path} là nó tự nạp lại.`,"notice.defaultPassword":`Bảng điều khiển này vẫn dùng mật khẩu mặc định.`,"notice.defaultPasswordHint":`Hãy đổi trong Cài đặt toàn cục — việc lắng nghe ngoài 127.0.0.1 vẫn bị từ chối cho đến khi bạn đổi.`,"notice.noPassword":`Xác thực đang bật nhưng chưa đặt mật khẩu, nên không có gì được yêu cầu.`,"notice.noPasswordHint":`Đặt mật khẩu trong Cài đặt toàn cục để thực sự khoá bảng điều khiển.`,"notice.exposed":`Bảng điều khiển này truy cập được từ ngoài 127.0.0.1.`,"notice.exposedHint":`Hãy giữ mật khẩu mạnh, hoặc đặt một proxy kết thúc TLS phía trước.`,"notice.authOff":`Xác thực đang tắt — bảng điều khiển chỉ được bảo vệ bởi việc lắng nghe trên loopback.`,"onPortConflict.block":`block — từ chối khởi động`,"onPortConflict.warn":`warn — vẫn khởi động`,"onPortConflict.follow":`follow — tiếp nhận bản khởi động lại tách rời của chính nó`,"onPortConflict.reclaim":`reclaim — thay bằng một bản sao được giám sát`,"onPortConflict.kill":`kill — dừng bất cứ thứ gì đang giữ cổng`,"palette.placeholder":`Chuyển tới máy chủ, chạy thao tác, mở cài đặt…`,"palette.openServer":`Mở {label}`,"palette.serverLogs":`Nhật ký của {label}`,"palette.startServer":`Khởi động {label}`,"palette.stopServer":`Dừng {label}`,"palette.restartServer":`Khởi động lại {label}`,"palette.goOverview":`Tới Tổng quan`,"palette.goGlobalOverview":`Tới Tổng quan toàn cục`,"palette.goGlobalSettings":`Tới Cài đặt toàn cục`,"palette.goProxy":`Tới Reverse Proxy`,"palette.goServers":`Tới Máy chủ`,"palette.goLogs":`Tới Nhật ký`,"palette.goWorkspaceSettings":`Tới Cài đặt không gian làm việc`,"palette.startAll":`Khởi động mọi máy chủ đang bật ở đây`,"palette.stopAll":`Dừng mọi máy chủ ở đây`,"palette.switchWorkspace":`Chuyển sang {label}`,"palette.globalSetting":`Cài đặt toàn cục: {label}`,"palette.workspaceSetting":`Cài đặt không gian làm việc: {label}`,"palette.theme":`Giao diện {theme}`,"palette.groupServers":`Máy chủ`,"palette.groupActions":`Thao tác`,"palette.groupNavigate":`Điều hướng`,"palette.groupWorkspaces":`Không gian làm việc`,"palette.groupAppearance":`Giao diện`,"palette.navigate":`di chuyển`,"palette.run":`chạy`,"palette.noMatches":`Không có kết quả cho “{query}”.`,"proxy.account.automatic":`Tự động (tài khoản duy nhất có thể trả lời)`,"proxy.account.noTxt":`không hỗ trợ TXT`,"proxy.account.noCredentials":`chưa có thông tin đăng nhập`,"proxy.account.gone":`Tài khoản đó không còn được cấu hình.`,"proxy.account.emptyHint":`DNS-01 ghi bản ghi thử thách ở đây. Để trống là dùng tài khoản duy nhất có thể trả lời thử thách, nếu có.`,"proxy.account.cannotWrite":`Tài khoản {provider} không ghi được bản ghi TXT, nên không thể trả lời thử thách DNS-01.`,"proxy.account.noCredentialsYet":`Chưa có thông tin đăng nhập nào được lưu cho tài khoản {provider} này.`,"proxy.account.through":`Thử thách được ghi qua tài khoản {provider} này.`,"proxy.certificate.title":`Chứng chỉ đã tải lên`,"proxy.certificate.description":`Được phục vụ bởi các tuyến đường đặt ở “Chứng chỉ đã tải lên”. Mọi thứ khác — công khai hay nội bộ — đều do engine tự cấp chứng chỉ.`,"proxy.certificate.add":`Thêm chứng chỉ`,"proxy.certificate.emptyTitle":`Chưa tải lên chứng chỉ nào`,"proxy.certificate.emptyDescription":`Route đặt ở “Chứng chỉ đã tải lên” cần một cặp bao phủ hostname của nó, nếu không engine không có gì để phục vụ.`,"proxy.certificate.daysLeft":`còn {days} ngày`,"proxy.certificate.subject":`Chủ thể`,"proxy.certificate.issuer":`Nhà phát hành`,"proxy.certificate.validUntil":`Có hiệu lực đến`,"proxy.certificate.covers":`Bao phủ`,"proxy.certificate.noSans":`không có hostname nào trong SAN`,"proxy.certificate.removeAria":`Gỡ {name}`,"proxy.certificate.removeQuestion":`Gỡ “{name}”?`,"proxy.certificate.removeBody":`Cặp chứng chỉ bị xoá khỏi đĩa. Tuyến đường vẫn đặt ở “Chứng chỉ đã tải lên” sẽ tiếp tục phục vụ chứng chỉ riêng của engine cho đến khi bạn đổi, và bảng điều khiển từ chối thao tác này khi còn tuyến đường đang dùng nó.`,"proxy.certificate.removeIt":`Gỡ nó`,"proxy.certificate.stored":`Đã lưu “{label}”.`,"proxy.certificate.removed":`Đã gỡ “{name}”.`,"proxy.certificateDialog.title":`Thêm chứng chỉ`,"proxy.certificateDialog.description":`Cặp chứng chỉ được lưu trên đĩa dưới id của nó, và tuyến đường đặt ở “Chứng chỉ đã tải lên” có thể phục vụ nó.`,"proxy.certificateDialog.label":`Nhãn`,"proxy.certificateDialog.labelPlaceholder":`Wildcard gia đình`,"proxy.certificateDialog.id":`Id`,"proxy.certificateDialog.idHint":`đặt tên cho các tệp trên đĩa`,"proxy.certificateDialog.certFile":`Tệp chứng chỉ (.pem, .crt)`,"proxy.certificateDialog.keyFile":`Tệp khoá riêng (.pem, .key)`,"proxy.certificateDialog.pasteCert":`Hoặc dán chứng chỉ`,"proxy.certificateDialog.pasteKey":`Hoặc dán khoá riêng`,"proxy.certificateDialog.certPlaceholder":`-----BEGIN CERTIFICATE-----`,"proxy.certificateDialog.keyPlaceholder":`-----BEGIN PRIVATE KEY-----`,"proxy.certificateDialog.store":`Lưu chứng chỉ`,"proxy.certificateDialog.errorLabel":`cần có nhãn`,"proxy.certificateDialog.errorId":`id phải bắt đầu bằng chữ cái hoặc chữ số, sau đó là chữ cái, chữ số, gạch ngang hoặc gạch dưới`,"proxy.certificateDialog.errorTaken":`“{id}” đã được một chứng chỉ khác dùng`,"proxy.certificateDialog.errorCertificate":`hãy dán hoặc chọn chứng chỉ`,"proxy.certificateDialog.errorPrivateKey":`hãy dán hoặc chọn khoá riêng`,"proxy.engine.title":`Bộ máy`,"proxy.engine.description":`Bản thân proxy nghịch đảo. Bảng điều khiển tải bản build hiện tại, giám sát nó và áp dụng cấu hình qua API quản trị riêng của engine.`,"proxy.engine.notInFrame":`Trạng thái proxy chưa nằm trong khung của bảng điều khiển này.`,"proxy.engine.readFailed":`Không đọc được engine`,"proxy.engine.notInstalled":`Chưa cài engine`,"proxy.engine.installNote":`Cài đặt sẽ tải bản phát hành {engine} hiện tại mà bảng điều khiển giám sát — khoảng 46 MB, một lần. Không có gì được mở ra cho đến khi thêm tuyến đường và bật proxy.`,"proxy.engine.version":`Phiên bản`,"proxy.engine.notProbed":`chưa dò`,"proxy.engine.source":`Nguồn`,"proxy.engine.sourceCustom":`một đường dẫn được cấu hình thủ công`,"proxy.engine.sourceDownloaded":`do bảng điều khiển tải về`,"proxy.engine.size":`Kích thước`,"proxy.engine.binary":`Tệp nhị phân`,"proxy.engine.copyPath":`Sao chép đường dẫn nhị phân`,"proxy.engine.address":`Địa chỉ đang hoạt động`,"proxy.engine.process":`Tiến trình`,"proxy.engine.certificates":`Chứng chỉ`,"proxy.engine.noCert":`chưa có chứng chỉ công khai`,"proxy.engine.expiresSoon":`cái sớm nhất hết hạn sau {days} ngày`,"proxy.engine.acme":`Chứng chỉ ACME`,"proxy.engine.localCa":`CA cục bộ`,"proxy.engine.dns01":`DNS-01`,"proxy.engine.tcpUdp":`TCP/UDP`,"proxy.engine.documentation":`Tài liệu {engine}`,"proxy.engine.failed":`Engine báo lỗi`,"proxy.engine.setcapHint":`Cổng đặc quyền (dưới 1024) cần lệnh này một lần trên Linux:`,"proxy.engine.copyCommand":`Sao chép lệnh`,"proxy.engine.install":`Cài engine`,"proxy.engine.start":`Khởi động`,"proxy.engine.stop":`Dừng`,"proxy.engine.apply":`Áp dụng cấu hình`,"proxy.engine.revert":`Hoàn tác`,"proxy.engine.revertHint":`Quay về cấu hình đã được áp dụng trước lần gần nhất`,"proxy.engine.update":`Cập nhật engine`,"proxy.listener.title":`Listener & chứng chỉ`,"proxy.listener.description":`Nơi proxy lắng nghe. 80 và 443 là những cổng router chuyển tiếp và thử thách ACME mong đợi; cổng dưới 1024 cần bind đặc quyền.`,"proxy.listener.unprivilegedPorts":`cổng không đặc quyền`,"proxy.listener.run":`Chạy proxy nghịch đảo`,"proxy.listener.runHint":`Được lưu cùng nút Lưu cài đặt; bảng điều khiển khởi động hoặc dừng engine cho khớp.`,"proxy.listener.httpPort":`Cổng HTTP`,"proxy.listener.httpPortHint":`Thử thách HTTP-01 của ACME và chuyển hướng sang HTTPS.`,"proxy.listener.httpsPort":`Cổng HTTPS`,"proxy.listener.httpsPortHint":`Nơi phục vụ chứng chỉ.`,"proxy.listener.useFallback":`Dùng {http} / {https}`,"proxy.listener.useStandard":`Dùng 80 / 443`,"proxy.listener.forwardHint":`Đang chạy không đặc quyền — hãy chuyển tiếp 80 và 443 tới các cổng này trên router.`,"proxy.listener.privilegedTitle":`Cổng dưới 1024 cần bind đặc quyền`,"proxy.listener.privilegedBody":`Chạy bảng điều khiển dưới người dùng của bạn không thể bind 80 hay 443 nếu không có quyền. Hoặc cấp quyền một lần {how} rồi khởi động lại engine, hoặc giữ {http}/{https} và chuyển tiếp 80/443 từ router. Trên Windows, cổng này bind được tự do, nhưng thứ khác có thể đang giữ nó.`,"proxy.listener.privilegedWithSetcap":`bằng {command} trên tệp nhị phân của engine`,"proxy.listener.email":`Email tài khoản ACME`,"proxy.listener.emailPlaceholder":`you@example.com`,"proxy.listener.emailHint":`Let's Encrypt dùng địa chỉ này để cảnh báo khi chứng chỉ sắp hết hạn. Tên chỉ dùng nội bộ sẽ nhận CA riêng của engine và không cần địa chỉ nào.`,"proxy.listener.emailNeededTitle":`Cần một email cho HTTPS tự động`,"proxy.listener.emailNeededBody":`“{host}” là hostname công khai, nên engine hỏi một CA để lấy chứng chỉ và địa chỉ tài khoản là bắt buộc. Hãy điền vào, tắt TLS của tuyến đường, hoặc bật endpoint staging trong lúc thử nghiệm.`,"proxy.listener.staging":`Dùng endpoint staging của ACME`,"proxy.listener.stagingHint":`Chứng chỉ không được tin cậy và không tiêu tốn hạn mức trong lúc bạn thử nghiệm.`,"proxy.listener.dns01":`Trả lời thử thách bằng DNS-01`,"proxy.listener.dns01Hint":`Bảng điều khiển ghi bản ghi thử thách qua tài khoản DNS của tuyến đường, nên không cần cổng vào để lấy chứng chỉ.`,"proxy.listener.resolvers":`Kiểm tra bản ghi dựa trên`,"proxy.listener.resolversPlaceholder":`1.1.1.1, 8.8.8.8`,"proxy.listener.resolversHint":`Các nameserver mà engine đọc bản ghi từ đó; để trống là dùng của chính nó. Cần thiết khi DNS split-horizon cho nó thấy một góc nhìn khác.`,"proxy.listener.noAccountTitle":`Không có tài khoản DNS nào trả lời được thử thách`,"proxy.listener.noAccountBody":`DNS-01 đang bật, nhưng không tài khoản nào có thông tin đăng nhập dùng được. Hãy thêm một tài khoản trong Cài đặt không gian làm việc → Dynamic DNS, nếu không các tên công khai vẫn dùng thử thách qua cổng và chờ một CA không thể tiếp cận chúng.`,"proxy.listener.manyAccountsTitle":`Mỗi tuyến đường công khai phải chọn một tài khoản`,"proxy.listener.manyAccountsBody":`Có nhiều tài khoản có thể trả lời, nên “Tự động” không thể chọn. Hãy chọn một tài khoản cho mỗi tuyến đường, nếu không những tên đó vẫn dùng thử thách qua cổng.`,"proxy.listener.accountNote":`Mỗi tuyến đường tự chọn tài khoản của nó, nên các tên trong vùng khác nhau đều nhận đúng tài khoản. Tuyến đường để ở “Tự động” sẽ dùng tài khoản duy nhất mà bảng liệt kê. Tên không tài khoản nào trả lời được vẫn dùng thử thách qua cổng.`,"proxy.listener.pendingNote":`Tên công khai có chứng chỉ vẫn đang được cấp vẫn truy cập được trong lúc chờ — qua HTTPS với chứng chỉ tạm thời không được tin cậy, hoặc qua HTTP thuần với một trang nêu các cổng cần chuyển tiếp.`,"proxy.retry.inFallback":`~8 giờ`,"proxy.retryButton.force":`Buộc thử lại chứng chỉ`,"proxy.retryButton.question":`Hỏi lại CA cho {host}?`,"proxy.retryButton.body":`Trước đó engine không lấy được chứng chỉ CA cho hostname này và đang dùng CA cục bộ của nó. Nó tự thử lại mỗi {retryIn}.`,"proxy.retryButton.warning":`Thử lại ngay sẽ kill tuyến đường này và khiến nó không truy cập được một lúc, bạn có chắc muốn tiếp tục?`,"proxy.retryButton.leave":`Để vậy`,"proxy.retryButton.now":`Thử lại ngay`,"proxy.routeDialog.titleEdit":`Sửa tuyến đường`,"proxy.routeDialog.titleAdd":`Thêm tuyến đường`,"proxy.routeDialog.description":`Một hostname, đích chuyển tiếp, và cách phục vụ qua TLS.`,"proxy.routeDialog.hostname":`Hostname`,"proxy.routeDialog.hostnamePlaceholder":`gitea.example.com`,"proxy.routeDialog.path":`Tiền tố đường dẫn`,"proxy.routeDialog.pathPlaceholder":`/optional`,"proxy.routeDialog.pathHint":`Để trống là phục vụ toàn bộ host.`,"proxy.routeDialog.target":`Đích`,"proxy.routeDialog.tls":`TLS`,"proxy.routeDialog.dnsAccount":`Tài khoản DNS`,"proxy.routeDialog.localNote":`Tên chỉ dùng nội bộ được CA riêng của engine ký, nên không liên quan tài khoản DNS.`,"proxy.routeDialog.workspace":`Không gian làm việc`,"proxy.routeDialog.server":`Máy chủ`,"proxy.routeDialog.noServers":`không gian làm việc này không có máy chủ nào`,"proxy.routeDialog.stoppedNote":`Máy chủ đã dừng thì không được định tuyến: dòng đó hiển thị “Không có upstream” cho đến khi nó chạy lại.`,"proxy.routeDialog.upstream":`Upstream`,"proxy.routeDialog.upstreamPlaceholder":`http://10.0.0.5:8080`,"proxy.routeDialog.upstreamHint":`Một địa chỉ cụ thể, bao gồm cả cổng. Phần scheme là không bắt buộc.`,"proxy.routeDialog.panelNote":`Phục vụ bảng điều khiển cần bật xác thực và một mật khẩu không phải mặc định — nếu không bảng điều khiển sẽ từ chối lưu.`,"proxy.routeDialog.save":`Lưu tuyến đường`,"proxy.routes.title":`Tuyến đường`,"proxy.routes.description":`Mỗi dịch vụ một hostname công khai. Một tuyến đường có thể trỏ tới máy chủ được giám sát trong bất kỳ không gian làm việc nào, tới bảng điều khiển này, hoặc tới một upstream cụ thể.`,"proxy.routes.add":`Thêm tuyến đường`,"proxy.routes.cannotSaveTitle":`Không thể lưu các tuyến đường này ở trạng thái hiện tại`,"proxy.routes.cannotRoute":`Không thể định tuyến {host}`,"proxy.routes.emptyTitle":`Chưa có tuyến đường nào`,"proxy.routes.emptyDescription":`Hãy thêm một tuyến đường để mở một máy chủ ra qua tên miền — engine tự lấy chứng chỉ.`,"proxy.routes.addFirst":`Thêm tuyến đường đầu tiên`,"proxy.routes.columnHostname":`Hostname`,"proxy.routes.columnTarget":`Đích`,"proxy.routes.columnUpstream":`Upstream`,"proxy.routes.columnTls":`TLS`,"proxy.routes.columnState":`Trạng thái`,"proxy.routes.columnOn":`Bật`,"proxy.routes.openInTab":`Mở {url} trong thẻ mới`,"proxy.routes.noHostname":`chưa có hostname`,"proxy.routes.toggle":`Tuyến đường {name}`,"proxy.routes.edit":`Sửa {name}`,"proxy.routes.remove":`Gỡ {name}`,"proxy.status.certified":`chứng chỉ đã sẵn sàng`,"proxy.status.localCa":`CA của engine`,"proxy.status.uploaded":`cặp đã tải lên`,"proxy.status.awaitingCa":`đang chờ CA`,"proxy.status.failed":`chứng chỉ thất bại`,"proxy.status.fellBack":`Đã quay về Local CA`,"proxy.status.serving":`Đang phục vụ`,"proxy.status.disabled":`Đã tắt`,"proxy.status.noUpstream":`Không có upstream`,"proxy.status.error":`Lỗi`,"proxy.status.unapplied":`Chưa được áp dụng`,"proxy.status.off":`Tắt`,"proxy.status.stopped":`Đã dừng`,"proxy.status.starting":`Đang khởi động`,"proxy.status.running":`Đang chạy`,"proxy.status.unsupported":`Không được hỗ trợ`,"proxy.target.server":`Một máy chủ được giám sát`,"proxy.target.panel":`Bảng điều khiển này`,"proxy.target.external":`Một upstream cụ thể`,"proxy.target.controlPanel":`bảng điều khiển`,"proxy.target.noServer":`chưa chọn máy chủ`,"proxy.target.noUpstream":`không có upstream`,"proxy.tls.auto":`Tự động — engine quyết định`,"proxy.tls.off":`Tắt — HTTP thuần`,"proxy.tls.manual":`Chứng chỉ đã tải lên`,"proxy.tls.plain":`HTTP thuần`,"proxy.tls.uploaded":`chứng chỉ đã tải lên`,"proxy.tls.letsEncrypt":`Let’s Encrypt`,"proxy.tls.engineCa":`CA của engine (cục bộ)`,"proxy.tls.hintOff":`HTTP thuần: không có chứng chỉ nào được phục vụ cho hostname này.`,"proxy.tls.hintManual":`Phục vụ cặp chứng chỉ được tải lên bên dưới.`,"proxy.tls.hintEmpty":`Hostname công khai sẽ nhận chứng chỉ ACME; tên chỉ dùng nội bộ sẽ nhận CA riêng của engine.`,"proxy.tls.hintPublic":`Đây là hostname công khai, nên engine sẽ hỏi một CA để lấy chứng chỉ — cần có email tài khoản ACME.`,"proxy.tls.hintLocal":`Đây là tên chỉ dùng nội bộ, nên engine tự ký bằng CA được tin cậy cục bộ của nó.`,"proxy.validation.labelRequired":`cần có nhãn`,"proxy.validation.idPattern":`id phải bắt đầu bằng chữ cái hoặc chữ số, sau đó là chữ cái, chữ số, gạch ngang hoặc gạch dưới`,"proxy.validation.hostRequired":`cần có hostname`,"proxy.validation.hostPattern":`hostname gồm chữ cái, chữ số, dấu chấm và gạch ngang, ví dụ home.example.com`,"proxy.validation.hostTaken":`"{host}" đã được định tuyến cho đường dẫn này`,"proxy.validation.pathSlash":`tiền tố đường dẫn bắt đầu bằng /`,"proxy.validation.pathSpace":`tiền tố đường dẫn không được chứa dấu cách`,"proxy.validation.idTaken":`id tuyến đường "{id}" bị dùng hai lần`,"proxy.validation.workspaceRequired":`hãy chọn không gian làm việc sở hữu máy chủ`,"proxy.validation.serverRequired":`hãy chọn một máy chủ trong không gian làm việc đó`,"proxy.validation.url":`upstream dạng như http://10.0.0.5:8080`,"proxy.view.title":`Proxy nghịch đảo`,"proxy.view.description":`Mở các máy chủ của bạn ra qua tên miền, với HTTPS tự động qua 80/443 hoặc thử thách DNS.`,"proxy.view.dnsNote":`Với DNS-01, hãy thêm nhà cung cấp DNS của tên miền vào bất kỳ không gian làm việc nào trong Cài đặt không gian làm việc → Dynamic DNS; sau đó một tuyến đường có thể chọn tài khoản đó, từ bất kỳ không gian làm việc nào.`,"proxy.view.readFailed":`Không đọc được proxy nghịch đảo`,"proxy.view.reading":`Đang đọc proxy nghịch đảo…`,"proxy.view.engineInstalled":`Đã cài engine`,"proxy.view.engineStarting":`Engine đang khởi động`,"proxy.view.engineStopping":`Engine đang dừng`,"proxy.view.configApplied":`Đã áp dụng cấu hình`,"proxy.view.configReverted":`Đã hoàn tác cấu hình`,"proxy.view.settingsSaved":`Đã lưu cài đặt.`,"proxy.view.settingsSavedToast":`Đã lưu cài đặt`,"proxy.view.retryFailed":`thử lại thất bại`,"proxy.view.retryAsked":`đang hỏi lại CA cho {host}`,"proxy.view.fieldChanged":`trường đã thay đổi`,"proxy.view.fieldsChanged":`trường đã thay đổi`,"proxy.view.noChanges":`Không có thay đổi chưa lưu`,"proxy.view.discard":`Bỏ thay đổi`,"proxy.view.save":`Lưu cài đặt`,"serverCard.open":`Mở {url}`,"serverCard.adoptedHint":`Tiến trình này tự thay thế chính nó: bảng điều khiển tiếp nhận tiến trình kế nhiệm thay vì khởi động thêm một bản sao. Nút Dừng vẫn hoạt động, đầu ra của nó vẫn ở nơi tiến trình kế nhiệm gửi tới.`,"serverCard.detached":`tách rời`,"serverCard.persistentHint":"Mục này chạy dưới nanny riêng, nên nó vẫn chạy khi bảng điều khiển dừng, khởi động lại hoặc bị kill. `home-hosted down` báo cáo nó thay vì dừng nó; chỉ lệnh dừng tường minh mới dừng được.","serverCard.persistent":`thường trú`,"serverCard.disabled":`đã tắt`,"serverCard.autostart":`tự khởi động`,"serverCard.healthProbe":`Dò tình trạng`,"serverCard.notProbed":`chưa dò`,"serverCard.restarts":`Số lần khởi động lại`,"serverCard.pid":`PID`,"serverCard.rss":`RSS`,"serverCard.procs":`Tiến trình`,"serverCard.portFree":`trống`,"serverCard.portInUse":`đang dùng`,"serverCard.uptime24h":`24 giờ hoạt động`,"serverCard.probe":`Kiểm tra`,"serverCard.crashes24h":`sự cố trong 24 giờ`,"serverCard.lastCrash":`Sự cố gần nhất`,"serverCard.unhealthyFor":`Bất thường trong {duration}`,"serverCard.nextAttempt":`Lần thử tiếp theo {when}`,"serverCard.start":`Khởi động`,"serverCard.stop":`Dừng`,"serverCard.restart":`Khởi động lại`,"serverCard.detailsHint":`Nhật ký trực tiếp và toàn bộ telemetry`,"serverCard.moreActions":`Thêm thao tác cho {label}`,"serverCard.disable":`Tắt máy chủ`,"serverCard.enable":`Bật máy chủ`,"serverCard.removeFromAutostart":`Bỏ khỏi tự khởi động`,"serverCard.autostartWithPanel":`Tự khởi động cùng bảng điều khiển`,"serverCard.clearLogBuffer":`Xoá bộ đệm nhật ký`,"serverCard.removeServer":`Gỡ máy chủ`,"serverCard.removeTitle":`Gỡ máy chủ này?`,"serverCard.removeDescription":`{label} sẽ bị gỡ khỏi servers.config.json: tiến trình của nó bị dừng, nhật ký và lịch sử sự cố của nó cũng bị xoá theo.`,"serverCard.statusField":`trạng thái`,"serverForm.workingDirectory":`Thư mục làm việc`,"serverForm.cwdHint":`Đường dẫn tương đối được giải theo projectDir.`,"serverForm.arguments":`Tham số`,"serverForm.portHint":`Để trống nghĩa là máy chủ không có cổng để kiểm tra hay preflight.`,"serverForm.bindAddress":`Địa chỉ lắng nghe`,"serverForm.autostart":`Tự khởi động cùng up`,"serverForm.autostartHint":`Khởi động nó mỗi khi control plane chạy lên.`,"serverForm.persistent":`Thường trú`,"serverForm.persistentHint":"Vẫn chạy khi bảng điều khiển dừng; `down` báo cáo nó thay vì dừng nó.","serverForm.envHint":`KEY=value mỗi dòng, được export cho tiến trình.`,"serverForm.dataEnvs":`Data env`,"serverForm.dataEnvsHint":`ENV=path mỗi dòng — được export cho tiến trình và tự động sao lưu.`,"serverForm.envFile":`Tệp env`,"serverForm.envFilePlaceholder":`tệp KEY=value không bắt buộc`,"serverForm.envFileHint":`Được nạp khi spawn; giá trị trong đó ghi đè env.`,"serverForm.dependsOn":`Phụ thuộc vào`,"serverForm.dependsOnHint":`Phân tách bằng dấu phẩy; được khởi động trước và chờ đến khi bình thường, dừng sau cùng.`,"serverForm.backupPaths":`Đường dẫn sao lưu thêm`,"serverForm.backupPathsHint":`Mỗi dòng một đường dẫn, cho phép placeholder; data env đã được sao lưu sẵn.`,"serverForm.backupIgnore":`Bỏ qua các tệp sinh tự động đã biết khi sao lưu mục này`,"serverForm.backupIgnoreHint":`Bỏ qua node_modules, dist, .next và các cache khác mà không bản khôi phục nào dùng tới.`,"serverForm.bootstrap":`Bootstrap`,"serverForm.bootstrapDescription":`Một lệnh chạy một lần trước lần khởi động đầu tiên — cài đặt, migration, tải xuống.`,"serverForm.runBootstrap":`Chạy một bootstrap`,"serverForm.bootstrapHint":`Tắt nghĩa là mục này không có bootstrap và khoá được gửi dưới dạng null.`,"serverForm.timeoutMs":`Thời gian chờ (ms)`,"serverForm.runOnce":`Chỉ một lần mỗi phiên`,"serverForm.runOnceHint":`Tắt nghĩa là mỗi lần khởi động đều chạy lại.`,"serverForm.bootstrapArgs":`Tham số bootstrap`,"serverForm.bootstrapArgsHint":`Mỗi dòng một tham số; placeholder giống tham số chính.`,"serverForm.bootstrapEnv":`Môi trường bootstrap`,"serverForm.bootstrapEnvHint":`KEY=value mỗi dòng, chỉ export cho tiến trình bootstrap.`,"serverForm.onPortConflict":`Khi trùng cổng`,"serverForm.logBufferLines":`Số dòng đệm nhật ký`,"serverForm.maxRssMb":`RSS tối đa (MB)`,"serverForm.maxRssHint":`Khởi động lại khi vượt mức này; để trống hoặc 0 là tắt.`,"serverForm.enabledHint":`Tắt vẫn giữ mục trong cấu hình nhưng từ chối khởi động nó.`,"settings.auth.policyTitle":`Chính sách truy cập`,"settings.auth.policyDescription":`Xác thực luôn được áp dụng, dù bảng điều khiển ở loopback hay được mở ra mạng.`,"settings.auth.requirePassword":`Yêu cầu mật khẩu`,"settings.auth.requirePasswordHint":`Mọi yêu cầu đều cần một phiên đã đăng nhập.`,"settings.auth.sessionLifetime":`Thời hạn phiên (ms)`,"settings.auth.sessionLifetimeHint":`Thời gian chờ không hoạt động: 604800000 là một tuần không có hoạt động. Mỗi yêu cầu đặt lại đồng hồ này.`,"settings.auth.cookieSecure":`Cookie Secure`,"settings.auth.cookieSecureAuto":`Tự động — chỉ qua HTTPS`,"settings.auth.cookieSecureAlways":`Luôn luôn`,"settings.auth.cookieSecureNever":`Không bao giờ — HTTP thuần`,"settings.auth.trustProxy":`Đứng sau proxy nghịch đảo`,"settings.auth.trustProxyOff":`Không — bỏ qua x-forwarded-*`,"settings.auth.trustProxyLoopback":`Có, chỉ từ máy này`,"settings.auth.trustProxyAny":`Có, từ mọi nguồn gọi`,"settings.auth.trustProxyHint":`Tin x-forwarded-* cho địa chỉ và giao thức của client. 'Chỉ từ máy này' là lựa chọn an toàn cho proxy trên cùng máy. 'Từ mọi nguồn gọi' tin vào header do chính người gọi gửi, nên việc khoá đăng nhập sẽ đếm theo địa chỉ giả và có thể bị vượt qua.`,"settings.auth.maxLoginAttempts":`Số lần đăng nhập tối đa`,"settings.auth.maxLoginAttemptsHint":`Số lần thất bại trước khi bị khoá tạm thời.`,"settings.auth.lockout":`Thời gian khoá (ms)`,"settings.auth.apiTokenSet":`Đã đặt API token`,"settings.auth.apiTokenMissing":`Chưa có API token`,"settings.auth.apiTokenNote":`Script có thể gọi API bằng {code} thay vì đăng nhập.`,"settings.auth.noTokenNote":`Với script shell và agent, hãy tạo một cái bằng {command}.`,"settings.auth.defaultPasswordTitle":`Mật khẩu mặc định vẫn đang được dùng`,"settings.auth.defaultPasswordText":`Hãy đặt mật khẩu riêng ở bên dưới. Việc bind ra ngoài {address} vẫn bị từ chối cho đến khi bạn làm vậy.`,"settings.auth.blockedTitle":`Listener này đang bị từ chối`,"settings.auth.noPasswordTitle":`Xác thực đang bật nhưng chưa đặt mật khẩu`,"settings.auth.noPasswordText":`Thực tế vẫn chưa có gì được yêu cầu, và việc bind ra ngoài {address} vẫn bị từ chối cho đến khi có mật khẩu.`,"settings.auth.exposedTitle":`Truy cập được từ ngoài 127.0.0.1`,"settings.auth.exposedText":`Hãy giữ mật khẩu mạnh, hoặc đặt một proxy kết thúc TLS phía trước bảng điều khiển.`,"settings.auth.changePassword":`Đổi mật khẩu`,"settings.auth.setPassword":`Đặt mật khẩu`,"settings.auth.passwordDescription":`Được lưu dưới dạng hash scrypt trong tệp bí mật, không bao giờ trong cấu hình.`,"settings.auth.currentPassword":`Mật khẩu hiện tại`,"settings.auth.newPassword":`Mật khẩu mới`,"settings.auth.repeatPassword":`Nhập lại mật khẩu mới`,"settings.auth.passwordMismatch":`Hai mật khẩu không khớp.`,"settings.auth.updatePassword":`Cập nhật mật khẩu`,"settings.auth.setPasswordAndEnable":`Đặt mật khẩu và bật xác thực`,"settings.auth.clearPassword":`Xoá mật khẩu`,"settings.auth.clearPasswordConfirm":`Xác nhận xoá`,"settings.auth.clearPasswordTitle":`Xoá mật khẩu?`,"settings.auth.clearPasswordHint":`Xác thực sẽ bị tắt theo, và bất kỳ ai truy cập được bảng điều khiển đều vào thẳng.`,"settings.auth.shortPasswordTitle":`Đó là một mật khẩu ngắn`,"settings.auth.shortPasswordText":`Vẫn được chấp nhận, nhưng mật khẩu dài hơn là thứ duy nhất đứng giữa mạng và bảng điều khiển này.`,"settings.auth.passwordUpdated":`Đã cập nhật mật khẩu. Các phiên khác đã bị đăng xuất.`,"settings.auth.passwordCleared":`Đã xoá mật khẩu và tắt xác thực.`,"settings.backup.createTitle":`Tạo bản sao lưu`,"settings.backup.createDescription":`Chọn những gì bản lưu này sẽ ghi lại. Không có gì được ghi cho đến khi bạn tạo nó.`,"settings.backup.chooseItems":`Chọn các mục`,"settings.backup.partialCapture":`Chỉ những mục được chọn mới được ghi lại.`,"settings.backup.withoutGlobalSettings":`Nếu không có cài đặt toàn cục, bản khôi phục chỉ có thể đặt một không gian làm việc ở nơi bảng điều khiển đích đã khai báo nó.`,"settings.backup.password":`Mật khẩu (không bắt buộc)`,"settings.backup.passwordHint":`Mã hoá bản lưu; khi khôi phục sẽ hỏi đúng mật khẩu đó.`,"settings.backup.create":`Tạo bản sao lưu`,"settings.backup.chooseItemsFor":`{label} — chọn các mục`,"settings.backup.subDescription":`Một không gian làm việc có thể được lưu toàn bộ hoặc chỉ phần cài đặt, máy chủ, bí mật và các đường dẫn dữ liệu đã khai báo.`,"settings.backup.selectedOf":`đã chọn {selected} trên {total}`,"settings.backup.nothingSelectable":`Không gian làm việc này chưa khai báo gì có thể chọn.`,"settings.backup.apply":`Áp dụng`,"settings.backup.created":`Đã tạo bản sao lưu.`,"settings.backup.leafSettingsHint":`Mặc định máy chủ, thời gian giữ nhật ký và thông báo`,"settings.backup.leafServersHint":`Mọi mục trong servers.config.json`,"settings.backup.leafSecretsHint":`Token bot Telegram và thông tin đăng nhập DDNS`,"settings.backup.leafDataHint":`Một đường dẫn dữ liệu đã khai báo`,"settings.backup.pathFromOrigin":`{path} — từ {origin}`,"settings.backup.entrySettingsHint":`Listener, xác thực, thông tin máy chủ và chính sách sao lưu`,"settings.backup.entrySecretsHint":`Hash mật khẩu và hash API token`,"settings.backup.entryTlsHint":`Cặp chứng chỉ của chính bảng điều khiển`,"settings.backup.entryWorkspaceHint":`Cài đặt, máy chủ, bí mật và các đường dẫn dữ liệu đã khai báo của nó`,"settings.backup.entryGlobalSettings":`Cài đặt toàn cục`,"settings.backup.entryGlobalSecrets":`Bí mật toàn cục (mật khẩu, API token)`,"settings.backup.entryTlsCertificate":`Chứng chỉ TLS`,"settings.backup.leafSettings":`Cài đặt`,"settings.backup.leafServers":`Máy chủ`,"settings.backup.leafSecrets":`Bí mật`,"settings.backup.restoreItemLabel":`{workspace}: {item}`,"settings.backup.noteMissing":`chưa tồn tại`,"settings.backup.noteCovered":`được bao phủ bởi {path}`,"settings.backup.noteAlreadyDeclared":`đã được khai báo bởi {origin}`,"settings.backup.noteContainsBackupDir":`chứa thư mục sao lưu`,"settings.backup.noteUnknownWorkspace":`không gian làm việc không rõ`,"settings.backup.noteMissingFromArchive":`không có trong tệp lưu trữ`,"settings.backup.noteDeclaredByBackup":`được khai báo bởi cấu hình của bản sao lưu, mà bản này không khôi phục`,"settings.backup.noteNotDeclared":`không được khai báo bởi cấu hình này, cũng không bởi bản sao lưu`,"settings.backup.noteRestoredFrom":`được khôi phục từ {path}`,"settings.backups.policyTitle":`Chính sách`,"settings.backups.policyDescription":`Số bản lưu bảng điều khiển giữ lại, và các đường dẫn thêm mà mọi bản lưu đều ghi lại.`,"settings.backups.allow":`Cho phép sao lưu`,"settings.backups.allowHint":`Tắt sẽ dừng tạo bản lưu mới; những gì đã có trên đĩa vẫn tải về và khôi phục được.`,"settings.backups.offTitle":`Sao lưu đang tắt`,"settings.backups.offText":`Không có bản lưu mới nào được tạo cho đến khi bật lại. Các bản lưu bên dưới vẫn tải về, khôi phục và xoá được.`,"settings.backups.keep":`Giữ lại`,"settings.backups.keepHint":`Các bản lưu cũ hơn bị dọn sau mỗi lần sao lưu.`,"settings.backups.extraPaths":`Đường dẫn thêm`,"settings.backups.extraPathsHint":`Phân tách bằng dấu phẩy, được ghi trong mọi bản lưu ngoài những gì mỗi không gian làm việc khai báo.`,"settings.backups.extraPathsPlaceholder":`{home}/myapp-data`,"settings.backups.archiveDirectory":`Thư mục lưu trữ`,"settings.backups.copyArchiveDirectory":`Sao chép thư mục lưu trữ`,"settings.backups.changeDirectory":`Đổi nó là quyết định ở mức tệp: hãy sửa {path}.`,"settings.backups.theSettingsFile":`tệp cài đặt`,"settings.backups.capturesTitle":`Bản sao lưu ghi lại những gì`,"settings.backups.capturesDescription":`Chọn những mục này trong hộp thoại tạo. Một không gian làm việc có thể được lấy toàn bộ hoặc chỉ phần cài đặt, máy chủ, bí mật và các đường dẫn dữ liệu đã khai báo.`,"settings.backups.nothingSelectable":`Chưa có gì có thể chọn.`,"settings.backups.fromOrigin":`từ {origin}`,"settings.backups.notCaptured":`không được ghi lại`,"settings.backups.generatedSkipped":`đã bỏ qua các thư mục sinh tự động`,"settings.backups.included":`đã bao gồm`,"settings.backups.skipped":`đã bỏ qua`,"settings.backups.workspacesNote":`Bảng điều khiển này phục vụ {count} không gian làm việc; mỗi không gian làm việc là một mục có thể chọn riêng.`,"settings.backups.archivesTitle":`Bản lưu trữ`,"settings.backups.archivesDescription":`Được lưu trong thư mục sao lưu và có thể tải về bất cứ lúc nào.`,"settings.backups.create":`Tạo bản sao lưu…`,"settings.backups.restore":`Khôi phục…`,"settings.backups.noArchives":`Chưa có bản lưu nào`,"settings.backups.noArchivesEnabled":`Hãy tạo ngay một bản để ghi lại bảng điều khiển và những không gian làm việc bạn chọn.`,"settings.backups.noArchivesDisabled":`Chưa có gì được lưu trữ, và sao lưu đang tắt.`,"settings.backups.encrypted":`đã mã hoá`,"settings.backups.download":`Tải về`,"settings.backups.restoreAction":`Khôi phục`,"settings.backups.confirmDelete":`Xác nhận xoá`,"settings.backups.deleted":`Đã xoá {name}.`,"settings.backups.kindSettings":`cài đặt`,"settings.backups.kindServers":`máy chủ`,"settings.backups.kindSecrets":`bí mật`,"settings.backups.kindTls":`tls`,"settings.backups.kindData":`dữ liệu`,"settings.backups.kindWorkspace":`không gian làm việc`,"settings.ddns.statePending":`Đang chờ`,"settings.ddns.stateOk":`Đã cập nhật`,"settings.ddns.stateUnchanged":`Hiện tại`,"settings.ddns.stateSkipped":`Đã bỏ qua`,"settings.ddns.stateError":`Thất bại`,"settings.ddns.passFinished":`Lượt cập nhật Dynamic DNS đã xong`,"settings.ddns.credentialsSaved":`Đã lưu thông tin đăng nhập cho {account}`,"settings.ddns.credentialsRemoved":`Đã gỡ thông tin đăng nhập của {account}`,"settings.ddns.loadErrorTitle":`Không tải được cài đặt Dynamic DNS`,"settings.ddns.title":`Dynamic DNS`,"settings.ddns.description":`Giữ các hostname này trỏ về địa chỉ công khai của máy này. Thông tin đăng nhập nằm trong tệp bí mật, không bao giờ trong servers.config.json.`,"settings.ddns.checking":`đang kiểm tra`,"settings.ddns.needsAttention":`cần chú ý`,"settings.ddns.watching":`đang theo dõi`,"settings.ddns.updateNow":`Cập nhật ngay`,"settings.ddns.enabled":`Giữ Dynamic DNS luôn được cập nhật`,"settings.ddns.enabledHint":`Một lượt chạy theo khoảng thời gian bên dưới; nhà cung cấp chỉ được gọi khi địa chỉ thực sự thay đổi.`,"settings.ddns.interval":`Kiểm tra mỗi (ms)`,"settings.ddns.intervalHint":`60000 là một phút; mặc định là năm phút.`,"settings.ddns.ttl":`TTL (giây)`,"settings.ddns.ttlHint":`1 nghĩa là tự động ở nơi nhà cung cấp hỗ trợ.`,"settings.ddns.detectIpv4":`Phát hiện IPv4`,"settings.ddns.detectIpv4Hint":`Cần cho bản ghi A.`,"settings.ddns.detectIpv6":`Phát hiện IPv6`,"settings.ddns.detectIpv6Hint":`Cần cho bản ghi AAAA.`,"settings.ddns.accountsTitle":`Tài khoản nhà cung cấp`,"settings.ddns.accountsDescription":`Mỗi API token một mục. Thông tin đăng nhập được lưu trên máy chủ và không bao giờ trả về.`,"settings.ddns.credentialsSet":`đã lưu thông tin đăng nhập`,"settings.ddns.noCredentials":`chưa có thông tin đăng nhập`,"settings.ddns.credentials":`Thông tin đăng nhập`,"settings.ddns.removeAccountBlocked":`Hãy gỡ các hostname đang dùng tài khoản này trước`,"settings.ddns.noAccounts":`Chưa có tài khoản nào. Hãy chọn một nhà cung cấp và thêm tài khoản.`,"settings.ddns.provider":`Nhà cung cấp`,"settings.ddns.accountId":`Id tài khoản`,"settings.ddns.accountIdPlaceholder":`cloudflare-home`,"settings.ddns.accountIdHint":"Id tài khoản đặt tên cho tài khoản và là khoá lưu thông tin đăng nhập; chữ thường, chữ số, `-` và `_`.","settings.ddns.hostnamesTitle":`Hostname`,"settings.ddns.hostnamesDescription":`Toàn bộ danh sách cần giữ cập nhật — suba.domain.com, domain.xyz, v.v.`,"settings.ddns.account":`Tài khoản`,"settings.ddns.recordA":`A (IPv4)`,"settings.ddns.recordAaaa":`AAAA (IPv6)`,"settings.ddns.aaaaUnsupported":`Nhà cung cấp này không quản lý được bản ghi AAAA.`,"settings.ddns.proxied":`Qua proxy`,"settings.ddns.proxiedHint":`Cloudflare phục vụ bản ghi này qua mạng của chính nó.`,"settings.ddns.ipv6Off":`Phát hiện IPv6 đang tắt`,"settings.ddns.advanced":`Nâng cao`,"settings.ddns.advancedHint":`tên miền đã đăng ký và ghi đè TTL`,"settings.ddns.registeredDomain":`Tên miền đã đăng ký`,"settings.ddns.registeredDomainPlaceholder":`example.co.uk`,"settings.ddns.registeredDomainHint":`Chỉ dùng khi cần cho nhà cung cấp biết tên miền gốc, ví dụ tên miền ba nhãn.`,"settings.ddns.ttlOverride":`Ghi đè TTL (giây)`,"settings.ddns.ttlOverrideHint":`Để trống là dùng giá trị bên trên.`,"settings.ddns.noHostnames":`Chưa có hostname nào.`,"settings.ddns.hostnamePlaceholder":`home.example.com`,"settings.ddns.lastPass":`Lượt gần nhất`,"settings.ddns.ipv4Value":`IPv4 {address}`,"settings.ddns.ipv6Value":`IPv6 {address}`,"settings.ddns.type":`Loại`,"settings.ddns.state":`Trạng thái`,"settings.ddns.address":`Địa chỉ`,"settings.ddns.detail":`Chi tiết`,"settings.ddns.credentialsTitle":`Thông tin đăng nhập nhà cung cấp`,"settings.ddns.credentialsDescription":`Các trường đã lưu không bao giờ được gửi trả lại. Lưu sẽ thay thế toàn bộ trường của tài khoản này và chạy một lượt ngay lập tức.`,"settings.ddns.optional":`Không bắt buộc.`,"settings.ddns.whereToGet":`Lấy những thứ này ở đâu`,"settings.ddns.forget":`Quên`,"settings.ddns.forgetConfirm":`Quên chúng`,"settings.ddns.forgetTitle":`Quên thông tin đăng nhập đã lưu?`,"settings.ddns.forgetHint":`Chúng bị xoá khỏi đĩa và không đọc lại được; bạn sẽ phải dán lại.`,"settings.ddns.saveCredentials":`Lưu thông tin đăng nhập`,"settings.defaults.title":`Mặc định máy chủ`,"settings.defaults.description":`Áp dụng cho mọi mục không tự đặt giá trị riêng.`,"settings.defaults.enabledHint":`Mục mới bắt đầu ở trạng thái bật.`,"settings.defaults.autostart":`Tự khởi động cùng bảng điều khiển`,"settings.defaults.bind":`Lắng nghe trên`,"settings.defaults.bindLocal":`Local — 127.0.0.1`,"settings.defaults.bindLan":`LAN — 0.0.0.0`,"settings.defaults.onPortConflict":`Khi trùng cổng`,"settings.defaults.conflictBlock":`Chặn việc khởi động`,"settings.defaults.conflictWarn":`Cảnh báo và vẫn khởi động`,"settings.defaults.conflictFollow":`Bám theo bản khởi động lại tách rời của chính nó`,"settings.defaults.conflictReclaim":`Thay bản khởi động lại tách rời bằng một bản sao được giám sát`,"settings.defaults.conflictKill":`Kill bất cứ thứ gì đang giữ cổng`,"settings.defaults.logBufferLines":`Số dòng đệm nhật ký`,"settings.defaults.logBufferLinesHint":`Được giữ trong bộ nhớ cho mỗi máy chủ.`,"settings.host.title":`Ngưỡng`,"settings.host.description":`Ngưỡng 0 sẽ tắt cảnh báo đó. Khi vượt ngưỡng sẽ thông báo một lần, và một lần nữa khi hồi phục.`,"settings.host.enabled":`Lấy mẫu máy này`,"settings.host.enabledHint":`Tải, bộ nhớ, swap, đĩa và nhiệt độ CPU, theo khoảng thời gian bên dưới.`,"settings.host.interval":`Khoảng thời gian (ms)`,"settings.host.intervalHint":`Tần suất lấy mẫu máy chủ và kiểm tra cảnh báo.`,"settings.host.diskPaths":`Đường dẫn đĩa`,"settings.host.diskPathsHint":`Phân tách bằng dấu phẩy; các mẫu như {home} được mở rộng.`,"settings.host.diskUsed":`Đĩa đã dùng (%)`,"settings.host.memoryUsed":`Bộ nhớ đã dùng (%)`,"settings.host.swapUsed":`Swap đã dùng (%)`,"settings.host.zeroDisables":`0 sẽ tắt cảnh báo.`,"settings.host.loadPerCpu":`Tải trên mỗi CPU`,"settings.host.loadPerCpuHint":`Tải trung bình 1 phút chia cho số nhân.`,"settings.host.tempCelsius":`Nhiệt độ CPU (°C)`,"settings.host.tempCelsiusHint":`Chỉ trên Linux; bị bỏ qua ở nơi hệ điều hành không cung cấp.`,"settings.host.breachingNow":`Đang vượt ngưỡng:`,"settings.host.nothingBreaching":`Hiện không có gì vượt ngưỡng.`,"settings.interface.title":`Giao diện`,"settings.interface.description":`Bảng điều khiển là một trang tĩnh: giữ bản mặc định, hoặc phục vụ bản build của riêng bạn từ thư mục state.`,"settings.interface.currentlyServing":`Đang phục vụ`,"settings.interface.copyDirectory":`Sao chép thư mục UI`,"settings.interface.fileCount":`{count} tệp`,"settings.interface.sourceStock":`mặc định`,"settings.interface.sourceCustom":`tuỳ chỉnh`,"settings.interface.unnamed":`chưa đặt tên`,"settings.interface.panelVersion":`Phiên bản bảng điều khiển`,"settings.interface.copyPanelVersion":`Sao chép phiên bản bảng điều khiển`,"settings.interface.panelVersionHint":`Bản phát hành mà tiến trình bảng điều khiển này đang chạy — {command} in ra cùng con số đó.`,"settings.interface.panelName":`Tên bảng điều khiển`,"settings.interface.panelNameHint":`Được UI mặc định hiển thị ở thanh bên. UI tuỳ chỉnh có thể hiển thị tên riêng.`,"settings.interface.uploadLabel":`Tải lên bản build UI (.zip có index.html)`,"settings.interface.docsHint":`Xem {docs} để biết hợp đồng API. Nếu UI tuỳ chỉnh làm hỏng bảng điều khiển, {command} sẽ đưa bản mặc định trở lại từ terminal.`,"settings.interface.resetName":`Đặt lại tên`,"settings.interface.confirmRevert":`Xác nhận hoàn tác`,"settings.interface.revertToStock":`Quay về bản mặc định`,"settings.interface.install":`Cài đặt UI`,"settings.interface.installed":`Đã thay UI bằng {name} — hãy tải lại trang`,"settings.interface.yourBuild":`bản build của bạn`,"settings.interface.restored":`đã khôi phục UI mặc định — hãy tải lại trang`,"settings.interface.nothingInstalled":`chưa cài UI tuỳ chỉnh nào`,"settings.listener.title":`Bộ lắng nghe`,"settings.listener.description":`Nơi bảng điều khiển trả lời. Thay đổi đây sẽ khởi động lại bảng điều khiển và đưa trang này tới địa chỉ mới.`,"settings.listener.port":`Cổng điều khiển`,"settings.listener.portHint":`Mặc định 3999.`,"settings.listener.bind":`Lắng nghe trên`,"settings.listener.bindLocal":`Nội bộ`,"settings.listener.bindLan":`Mạng LAN`,"settings.listener.bindCustom":`Tuỳ chỉnh`,"settings.listener.bindLanHint":`0.0.0.0 — truy cập được từ toàn bộ mạng.`,"settings.listener.bindLocalHint":`127.0.0.1 — chỉ máy này.`,"settings.listener.bindCustomHint":`Một địa chỉ giao diện cụ thể do bạn nhập bên dưới.`,"settings.listener.ipv4":`Địa chỉ IPv4`,"settings.listener.ipv4Placeholder":`192.168.1.20`,"settings.listener.ipv4Error":`Hãy nhập một địa chỉ IPv4, ví dụ 192.168.1.20.`,"settings.listener.ipv4Hint":`Bind ra ngoài 127.0.0.1 cần một mật khẩu thật.`,"settings.listener.openBrowser":`Mở trình duyệt khi bảng điều khiển chạy lên`,"settings.listener.liveAddress":`Địa chỉ đang hoạt động`,"settings.listener.restartRequired":`cần khởi động lại`,"settings.listener.copyLiveAddress":`Sao chép địa chỉ đang hoạt động`,"settings.listener.liveAddressHint":`Địa chỉ listener đang bind hiện tại; thay đổi đã lưu có hiệu lực sau khi bảng điều khiển bind lại.`,"settings.logs.title":`Thời gian giữ`,"settings.logs.description":`Chế độ xem trực tiếp luôn lấy từ bộ nhớ; các tệp này tồn tại qua lần khởi động lại và nuôi trang Nhật ký.`,"settings.logs.persist":`Giữ nhật ký trên đĩa`,"settings.logs.persistHint":`Tắt để chỉ giữ mọi thứ trong bộ nhớ.`,"settings.logs.maxBytes":`Xoay vòng khi (byte)`,"settings.logs.maxBytesHint":`Mỗi máy chủ, trước khi chuyển sang .1, .2, …`,"settings.logs.keep":`Giữ các tệp đã xoay vòng`,"settings.logs.directory":`Thư mục nhật ký`,"settings.logs.copyDirectory":`Sao chép thư mục nhật ký`,"settings.logs.browseHint":`Duyệt và tải các tệp này ở trang {logs}.`,"settings.paths.dataRoot":`Thư mục gốc dữ liệu`,"settings.paths.dataRootHint":`HHOSTED_HOME — cài đặt toàn cục, không gian làm việc, TLS, bản sao lưu và UI.`,"settings.paths.globalSettings":`Cài đặt toàn cục`,"settings.paths.globalSettingsHint":`settings.json — listener, xác thực, chính sách TLS, thông tin máy chủ, sao lưu.`,"settings.paths.projectDir":`Thư mục dự án`,"settings.paths.projectDirHint":`Cơ sở cho các đường dẫn mục tương đối.`,"settings.paths.panelAddress":`Địa chỉ bảng điều khiển`,"settings.paths.panelAddressHint":`Nơi bảng điều khiển này đang hoạt động.`,"settings.paths.serversConfig":`Cấu hình máy chủ`,"settings.paths.serversConfigHint":`servers.config.json của {label}.`,"settings.paths.workspaceSettings":`Cài đặt không gian làm việc`,"settings.paths.workspaceSettingsHint":`Mặc định máy chủ, thời gian giữ nhật ký, thông báo, DDNS.`,"settings.paths.logs":`Nhật ký`,"settings.paths.logsHint":`Đầu ra được lưu cho không gian làm việc này.`,"settings.paths.copyPath":`Sao chép {label}`,"settings.paths.whereThingsLive":`Mọi thứ nằm ở đâu`,"settings.paths.whereThingsLiveDescription":`Chỉ đọc. Sao chép đường dẫn thẳng vào shell hoặc trình soạn thảo.`,"settings.paths.workspaceFiles":`Tệp của không gian làm việc`,"settings.paths.workspaceFilesDescription":`Mỗi không gian làm việc sở hữu cấu hình, cài đặt và thư mục nhật ký của riêng nó; không có gì được chia sẻ giữa chúng.`,"settings.rebind.failed":`Bảng điều khiển không trả lời tại {target}. Hãy xem console để biết listener mới.`,"settings.restore.title":`Khôi phục bản sao lưu`,"settings.restore.description":`Không có gì được ghi cho đến khi kế hoạch được áp dụng.`,"settings.restore.archive":`Bản lưu trữ`,"settings.restore.archiveHint":`Một bản lưu đã có, hoặc một tệp .zip từ máy này.`,"settings.restore.encryptedName":`{name} — đã mã hoá`,"settings.restore.uploadOption":`Tải lên một tệp…`,"settings.restore.archiveFile":`Tệp lưu trữ (.zip)`,"settings.restore.unchangedTitle":`Chưa có gì thay đổi`,"settings.restore.archiveLine":`Bản lưu trữ {name}.`,"settings.restore.uploadedArchive":`Bản lưu trữ đã tải lên.`,"settings.restore.passwordProtected":`Bản sao lưu này được bảo vệ bằng mật khẩu.`,"settings.restore.password":`Mật khẩu`,"settings.restore.checkAgain":`Kiểm tra lại với mật khẩu`,"settings.restore.choosePrompt":`Chọn những gì cần khôi phục — đã chọn {selected} trên {total}.`,"settings.restore.willRestore":`Sẽ khôi phục: {items}.`,"settings.restore.skipped":`Đã bỏ qua: {items}.`,"settings.restore.nothing":`không có gì`,"settings.restore.restartNote":`Cài đặt của chính bảng điều khiển khác đi, nên hãy khởi động lại bảng điều khiển sau đó.`,"settings.restore.reloadedNote":`Các không gian làm việc được khôi phục sẽ tải lại ngay; những mục được đánh dấu tự khởi động sẽ tự chạy.`,"settings.restore.applyStored":`Áp dụng bản khôi phục này`,"settings.restore.applyUpload":`Khôi phục tệp đã tải lên`,"settings.restore.restored":`Đã khôi phục {count} mục.`,"settings.restore.restoredWithNotes":`Đã khôi phục {count} mục — {notes}.`,"settings.restore.noteReloaded":`các máy chủ đã khôi phục đang chạy, các mục tự khởi động đang được khởi động`,"settings.restore.noteRestart":`khởi động lại bảng điều khiển để áp dụng cài đặt của chính nó`,"settings.restore.reasonSymbolicLink":`liên kết tượng trưng, đã bỏ qua`,"settings.restore.reasonNotSelected":`không được chọn`,"settings.restore.reasonUnrestorable":`không thể khôi phục ở đây`,"settings.restore.reasonInvalidSettings":`cài đặt trong tệp lưu trữ không hợp lệ`,"settings.restore.reasonInvalidServers":`máy chủ trong tệp lưu trữ không hợp lệ`,"settings.shell.noUnsavedChanges":`Không có thay đổi chưa lưu`,"settings.shell.discard":`Bỏ thay đổi`,"settings.shell.save":`Lưu cài đặt`,"settings.shell.unsavedTitle":`Thay đổi chưa lưu`,"settings.shell.nothingToSave":`Không có gì để lưu.`,"settings.telegram.title":`Telegram`,"settings.telegram.description":`Chính sách nằm trong cấu hình; token bot là một secret và không bao giờ được máy chủ trả về.`,"settings.telegram.enabled":`Gửi thông báo`,"settings.telegram.enabledHint":`Mỗi sự kiện một tin nhắn, được điều tiết bởi thời gian chờ bên dưới.`,"settings.telegram.chatId":`Id chat`,"settings.telegram.chatIdPlaceholder":`123456789 hoặc @channel`,"settings.telegram.chatIdHint":`Dùng Detect chats để điền từ các cập nhật của bot.`,"settings.telegram.cooldown":`Thời gian chờ mỗi sự kiện (ms)`,"settings.telegram.cooldownHint":`Theo từng máy chủ và lý do, nên một máy chủ dao động liên tục không thể spam.`,"settings.telegram.onCrash":`Đã hết số lần thử`,"settings.telegram.onUnhealthy":`Cổng bất thường`,"settings.telegram.onForcedRestart":`Buộc khởi động lại`,"settings.telegram.onRecovered":`Đã hồi phục`,"settings.telegram.onHost":`Chỉ số máy chủ vượt ngưỡng`,"settings.telegram.onHostHint":`Đĩa, bộ nhớ, swap, tải và nhiệt độ CPU, theo các ngưỡng trong mục Chỉ số máy chủ.`,"settings.telegram.onDdns":`Dynamic DNS thay đổi hoặc thất bại`,"settings.telegram.onDdnsHint":`Một tin nhắn cho mỗi lượt có thay đổi bản ghi, và một tin cho lượt thất bại.`,"settings.telegram.botToken":`Token bot`,"settings.telegram.tokenSet":`đã đặt token`,"settings.telegram.noToken":`chưa có token`,"settings.telegram.tokenNote":`Lấy từ @BotFather — là secret, không bao giờ nằm trong servers.config.json.`,"settings.telegram.tokenPlaceholder":`123456789:AA…`,"settings.telegram.tokenSavedPlaceholder":`Đã lưu — nhập token mới để thay thế`,"settings.telegram.saveToken":`Lưu token`,"settings.telegram.detectChats":`Phát hiện chat`,"settings.telegram.sendTest":`Gửi thử`,"settings.telegram.removeToken":`Gỡ token`,"settings.telegram.removeTokenConfirm":`Xác nhận gỡ`,"settings.telegram.removeTokenTitle":`Gỡ token bot?`,"settings.telegram.removeTokenHint":`Thông báo sẽ dừng cho đến khi bạn dán token trở lại.`,"settings.telegram.tokenSaved":`Đã lưu token.`,"settings.telegram.tokenSavedFor":`Đã lưu token cho @{username}.`,"settings.telegram.tokenRemoved":`Đã gỡ token.`,"settings.telegram.noChats":`Không tìm thấy chat nào. Hãy gửi /start cho bot trước, rồi phát hiện lại.`,"settings.telegram.testSent":`Đã gửi tin nhắn thử.`,"settings.telegram.testFailed":`Gửi tin nhắn thử thất bại.`,"settings.telegram.chatsSeen":`Các chat bot đã thấy:`,"settings.telegram.lastSend":`Lần gửi gần nhất: {result}`,"settings.tls.title":`HTTPS`,"settings.tls.description":`Tải lên một cặp PEM và bảng điều khiển sẽ phục vụ TLS trên listener của chính nó. Chứng chỉ tự ký là ổn trong mạng gia đình.`,"settings.tls.serve":`Phục vụ bảng điều khiển qua HTTPS`,"settings.tls.serveHint":`Được lưu cùng nút Lưu cài đặt; bảng điều khiển bind lại và trang này đi theo nó.`,"settings.tls.certificateTitle":`Chứng chỉ`,"settings.tls.certificateDescription":`Chứng chỉ mã hoá PEM và khoá riêng của nó. Cả hai đều nằm trong tệp bí mật.`,"settings.tls.unusableTitle":`Không dùng được chứng chỉ đã lưu`,"settings.tls.subject":`Chủ thể`,"settings.tls.issuer":`Nhà phát hành`,"settings.tls.validUntil":`Có hiệu lực đến`,"settings.tls.days":`{count} ngày`,"settings.tls.privateKey":`Khoá riêng`,"settings.tls.keyMatches":`khớp với chứng chỉ`,"settings.tls.keyMismatch":`không khớp`,"settings.tls.fingerprint":`Vân tay`,"settings.tls.copyFingerprint":`Sao chép vân tay`,"settings.tls.noCertificateTitle":`Chưa tải lên chứng chỉ`,"settings.tls.noCertificateText":`Hãy tải lên chứng chỉ PEM và khoá bên dưới, rồi lưu. HTTPS không được phục vụ cho đến khi có chứng chỉ.`,"settings.tls.certFile":`Tệp chứng chỉ (.pem, .crt)`,"settings.tls.keyFile":`Tệp khoá riêng (.pem, .key)`,"settings.tls.pasteCertificate":`Hoặc dán chứng chỉ`,"settings.tls.pasteKey":`Hoặc dán khoá riêng`,"settings.tls.saveCertificate":`Lưu chứng chỉ`,"settings.tls.removeCertificate":`Gỡ chứng chỉ`,"settings.tls.confirmRemove":`Xác nhận gỡ`,"settings.tls.removeTitle":`Gỡ chứng chỉ?`,"settings.tls.removeHint":`TLS vẫn bật nhưng không có gì để phục vụ, nên bảng điều khiển quay về http sau khi listener bind lại.`,"settings.tls.stored":`Đã lưu chứng chỉ.`,"settings.tls.removed":`Đã gỡ chứng chỉ.`,"status.stopped":`Đã dừng`,"status.starting":`Đang khởi động`,"status.running":`Đang chạy`,"status.stopping":`Đang dừng`,"status.backoff":`Đang khởi động lại`,"status.crashed":`Đã gặp sự cố`,"status.conflict":`Xung đột cổng`,"theme.label":`Giao diện: {theme}`,"theme.light":`sáng`,"theme.dark":`tối`,"theme.system":`theo hệ thống`,"topbar.search":`Tìm kiếm hoặc chạy lệnh`,"topbar.openNavigation":`Mở điều hướng`,"topbar.commandPalette":`Bảng lệnh`,"topbar.account":`Tài khoản`,"topbar.signedIn":`Đã đăng nhập`,"topbar.signOut":`Đăng xuất`,"topbar.workspaceLabel":`Không gian làm việc: {name}`,"validation.port":`Cổng phải là số nguyên từ 1 đến 65535.`,"validation.idRequired":`Cần có id — đó là khoá mà máy chủ này nằm dưới.`,"validation.idPattern":`Id phải bắt đầu bằng chữ thường hoặc chữ số và chỉ chứa chữ thường, chữ số, dấu gạch ngang và gạch dưới.`,"validation.commandRequired":`Cần có command — tệp thực thi mà supervisor spawn.`,"validation.bootstrapCommand":`Bootstrap cần có lệnh để chạy.`,"views.actions.addAServer":`Thêm một máy chủ`,"views.actions.addServer":`Thêm máy chủ`,"views.actions.startAll":`Khởi động tất cả`,"views.actions.stopAll":`Dừng tất cả`,"views.common.thisWorkspace":`không gian làm việc này`,"views.globalOverview.configError":`Không đọc được cấu hình: {error}`,"views.globalOverview.degraded":`suy giảm`,"views.globalOverview.description":`Chỉ số máy chủ và mọi máy chủ của mọi không gian làm việc, nhóm theo nơi chúng nằm.`,"views.globalOverview.emptyDescription":`Hãy chọn một không gian làm việc ở thanh trên và thêm tiến trình đầu tiên cần được giữ chạy.`,"views.globalOverview.emptyTitle":`Chưa có máy chủ nào ở bất kỳ đâu`,"views.globalOverview.groupEmptyDescription":`Hãy thêm một cái, nó sẽ xuất hiện ở đây và trên trang không gian làm việc.`,"views.globalOverview.groupRunning":`{running}/{total} đang chạy`,"views.globalOverview.hostUptime":`Thời gian hoạt động của máy chủ`,"views.globalOverview.hostVitals":`Chỉ số máy chủ`,"views.globalOverview.hostVitalsNote":`Máy này, được mọi không gian làm việc chia sẻ.`,"views.globalOverview.openWorkspace":`Mở không gian làm việc`,"views.globalOverview.panelUptime":`Thời gian hoạt động của bảng điều khiển`,"views.globalOverview.samplingOff":`đã tắt lấy mẫu`,"views.globalOverview.samplingOn":`đang lấy mẫu`,"views.globalOverview.serversTotal":`tổng cộng {count} máy chủ`,"views.globalOverview.serving":`đang phục vụ`,"views.globalOverview.workspaces":`Không gian làm việc`,"views.globalSettings.authenticationDescription":`Ai được đăng nhập vào bảng điều khiển này, và cách một phiên được tin cậy.`,"views.globalSettings.backupsDescription":`Mỗi lần lưu một bản lưu trữ, bao gồm bảng điều khiển và bất kỳ không gian làm việc bạn chọn.`,"views.globalSettings.changesDescription":`Những gì nút Lưu sẽ ghi vào tệp cài đặt của bảng điều khiển.`,"views.globalSettings.description":`Listener, truy cập, thông tin máy chủ, sao lưu, TLS và đường dẫn cho bảng điều khiển này — được mọi không gian làm việc chia sẻ.`,"views.globalSettings.hostDescription":`Ngưỡng cảnh báo cho tài nguyên của chính máy này.`,"views.globalSettings.interfaceDescription":`Phục vụ UI bảng điều khiển của riêng bạn thay vì bản mặc định.`,"views.globalSettings.languageDescription":`Ngôn ngữ hiển thị của bảng điều khiển này, cho trình duyệt này.`,"views.globalSettings.languageNote":`Lựa chọn của bạn được giữ trong trình duyệt này và áp dụng cả cho trang đăng nhập. Nó không thay đổi đầu ra nhật ký hay thông báo API của chính bảng điều khiển.`,"views.globalSettings.listenerDescription":`Nơi bảng điều khiển lắng nghe và cách nó tự công bố.`,"views.globalSettings.loadErrorTitle":`Không tải được một số giá trị chỉ có trong tệp`,"views.globalSettings.navLabel":`Các mục cài đặt toàn cục`,"views.globalSettings.pathsDescription":`Nơi home-hosted lưu các tệp của nó, toàn cục và theo từng không gian làm việc.`,"views.globalSettings.saveFailed":`Không lưu được cài đặt.`,"views.globalSettings.saved":`Đã lưu cài đặt.`,"views.globalSettings.savedRebinding":`Đã lưu cài đặt — bảng điều khiển đang chuyển sang địa chỉ mới.`,"views.globalSettings.savedToast":`Đã lưu cài đặt`,"views.globalSettings.sectionAuthentication":`Xác thực`,"views.globalSettings.sectionBackups":`Sao lưu`,"views.globalSettings.sectionHost":`Chỉ số máy chủ`,"views.globalSettings.sectionInterface":`Giao diện`,"views.globalSettings.sectionListener":`Bộ lắng nghe`,"views.globalSettings.sectionPaths":`Đường dẫn`,"views.globalSettings.sectionTls":`TLS`,"views.globalSettings.title":`Cài đặt toàn cục`,"views.globalSettings.tlsDescription":`Phục vụ bảng điều khiển qua HTTPS bằng chứng chỉ của riêng bạn.`,"views.logs.allStreams":`Mọi luồng`,"views.logs.clear":`Xoá`,"views.logs.clearDescription":`{server} — tệp trên đĩa bị cắt ngắn. Tiến trình vẫn chạy và các dòng mới được ghi từ đây trở đi.`,"views.logs.clearFile":`Xoá tệp`,"views.logs.clearNote":`Hãy tải về trước nếu vẫn cần đầu ra — thao tác này không thể hoàn tác từ bảng điều khiển.`,"views.logs.clearTitle":`Xoá tệp nhật ký đã lưu?`,"views.logs.fileEmpty":`Tệp đã lưu đang trống.`,"views.logs.loadedLines":`đã nạp {count} dòng`,"views.logs.modeLive":`Luồng trực tiếp`,"views.logs.modePersisted":`Đã lưu`,"views.logs.noServersDescription":`Hãy thêm một cái, đầu ra của nó sẽ được lưu ở đây.`,"views.logs.noServersTitle":`Không có máy chủ`,"views.logs.nothingOnDisk":`Không có gì trên đĩa cho máy chủ này — tính năng lưu đang tắt, hoặc nó chưa ghi gì.`,"views.logs.nothingPersisted":`không có gì được lưu`,"views.logs.persistedSummary":`{workspace} · {persisted} trên {total} máy chủ có trên đĩa · {size}`,"views.logs.persistedTitle":`Nhật ký đã lưu`,"views.logs.pickServerDescription":`Đầu ra đã lưu và luồng trực tiếp là theo từng máy chủ. Hãy chọn một cái trong danh sách.`,"views.logs.pickServerTitle":`Chọn một máy chủ`,"views.logs.reload":`Tải lại`,"views.logs.retentionNote":`Việc xoay vòng và thời gian giữ được đặt trong Cài đặt không gian làm việc → Nhật ký.`,"views.logs.searchAria":`Tìm trong nhật ký`,"views.logs.searchPlaceholder":`tìm trong cửa sổ đuôi`,"views.logs.searchedLines":`đã tìm trong {count} dòng`,"views.logs.streamAria":`Luồng`,"views.logs.tailAria":`Kích thước đuôi`,"views.logs.waitingOutput":`Đã kết nối — đang chờ đầu ra.`,"views.overview.acrossTree":`trên toàn bộ cây`,"views.overview.cpuNow":`{value}% cpu hiện tại`,"views.overview.crashedOrUnhealthy":`sự cố hoặc bất thường`,"views.overview.description":`Trạng thái trực tiếp của mọi máy chủ trong không gian làm việc này, được làm mới qua một luồng sự kiện duy nhất.`,"views.overview.emptyDescription":`Hãy thêm tiến trình đầu tiên mà không gian làm việc này cần giữ chạy.`,"views.overview.emptyTitle":`Không gian làm việc này không có máy chủ nào`,"views.overview.enabled":`{count} đang bật`,"views.overview.longestUptime":`Hoạt động lâu nhất`,"views.overview.needsAttention":`Cần chú ý`,"views.overview.notUp":`{count} không hoạt động`,"views.overview.nothingBroken":`không có gì hỏng`,"views.overview.nothingRunning":`không có gì đang chạy`,"views.overview.openFullList":`Mở danh sách đầy đủ`,"views.overview.peak":`đỉnh {value}`,"views.overview.processMemory":`Bộ nhớ tiến trình`,"views.overview.recentActivity":`Hoạt động gần đây`,"views.overview.running":`Đang chạy`,"views.overview.sampling":`lịch sử tài nguyên được lấy mẫu mỗi 5 giây và giữ trong phiên này`,"views.overview.stopped":`Đã dừng`,"views.overview.workspaceLabel":`không gian làm việc {id}`,"views.route.server":`Máy chủ`,"views.serverDetail.allServers":`Mọi máy chủ`,"views.serverDetail.autostart":`Tự khởi động cùng bảng điều khiển`,"views.serverDetail.backToServers":`Quay lại danh sách máy chủ`,"views.serverDetail.bind":`lắng nghe trên`,"views.serverDetail.bindCustom":`{bind} — tuỳ chỉnh`,"views.serverDetail.bindLan":`0.0.0.0 — mọi giao diện`,"views.serverDetail.bindLocal":`127.0.0.1 — chỉ máy này`,"views.serverDetail.closeEditor":`Đóng trình soạn thảo`,"views.serverDetail.copyJson":`Sao chép cấu hình JSON`,"views.serverDetail.crashes24":`sự cố trong 24 giờ`,"views.serverDetail.dependencies":`Phụ thuộc`,"views.serverDetail.detached":`tách rời`,"views.serverDetail.detachedHint":`Tiến trình này tự thay thế chính nó: bảng điều khiển tiếp nhận tiến trình kế nhiệm thay vì khởi động thêm một bản sao. Nút Dừng vẫn hoạt động, đầu ra của nó vẫn ở nơi tiến trình kế nhiệm gửi tới.`,"views.serverDetail.disableServer":`Tắt máy chủ`,"views.serverDetail.editHint":`Sửa mọi trường của mục này`,"views.serverDetail.effectiveConfig":`Cấu hình hiệu lực`,"views.serverDetail.effectiveConfigNote":`Giá trị mặc định từ Cài đặt đã được hợp nhất vào các giá trị này.`,"views.serverDetail.enableServer":`Bật máy chủ`,"views.serverDetail.eventHistory":`Lịch sử sự kiện`,"views.serverDetail.eventHistoryNote":`Được bảng điều khiển giữ trong 24 giờ.`,"views.serverDetail.fieldArgs":`args`,"views.serverDetail.fieldBackupPaths":`đường dẫn sao lưu`,"views.serverDetail.fieldBootstrap":`bootstrap`,"views.serverDetail.fieldCommand":`command`,"views.serverDetail.fieldCwd":`cwd`,"views.serverDetail.fieldDataEnvs":`data envs`,"views.serverDetail.fieldDependsOn":`phụ thuộc vào`,"views.serverDetail.fieldEnv":`env`,"views.serverDetail.fieldEnvFile":`tệp env`,"views.serverDetail.fieldHealth":`tình trạng`,"views.serverDetail.fieldLogBuffer":`bộ đệm nhật ký`,"views.serverDetail.fieldOnPortConflict":`khi trùng cổng`,"views.serverDetail.fieldPortBind":`cổng · bind`,"views.serverDetail.fieldRestart":`khởi động lại`,"views.serverDetail.fieldRssLimit":`giới hạn RSS`,"views.serverDetail.fieldStop":`dừng`,"views.serverDetail.fields":`Trường`,"views.serverDetail.goneDescription":`{id} không còn trong servers.config.json nữa. Nó có thể đã bị gỡ từ một thẻ khác.`,"views.serverDetail.goneTitle":`Máy chủ đó đã biến mất`,"views.serverDetail.health":`Tình trạng`,"views.serverDetail.healthProbe":`Dò tình trạng`,"views.serverDetail.lastCrash":`Sự cố gần nhất`,"views.serverDetail.lastProbe":`Lần dò gần nhất`,"views.serverDetail.logBufferLines":`{count} dòng`,"views.serverDetail.memoryRss":`Bộ nhớ (RSS)`,"views.serverDetail.moreActions":`Thêm thao tác cho {label}`,"views.serverDetail.neverWritten":`Máy chủ này chưa ghi gì cả.`,"views.serverDetail.nextAttempt":`Lần thử tiếp theo`,"views.serverDetail.none":`không có`,"views.serverDetail.off":`tắt`,"views.serverDetail.persistent":`thường trú`,"views.serverDetail.persistentHint":"Mục này chạy dưới nanny riêng, nên nó vẫn chạy khi bảng điều khiển dừng, khởi động lại hoặc bị kill. `home-hosted down` báo cáo nó thay vì dừng nó; chỉ nút Dừng mới làm được.","views.serverDetail.pid":`PID`,"views.serverDetail.portFree":`trống`,"views.serverDetail.portInUse":`đang dùng`,"views.serverDetail.portState":`Trạng thái cổng`,"views.serverDetail.probeFailed":`Phép dò tình trạng chưa đạt.`,"views.serverDetail.probeFailedFor":`Phép dò tình trạng chưa đạt trong {duration}.`,"views.serverDetail.processes":`Tiến trình`,"views.serverDetail.rawJson":`JSON thô`,"views.serverDetail.removeAutostart":`Bỏ khỏi tự khởi động`,"views.serverDetail.removeDescription":`{label} sẽ bị gỡ khỏi servers.config.json: tiến trình của nó bị dừng, nhật ký và lịch sử sự cố của nó cũng bị xoá theo.`,"views.serverDetail.removeNote":`Thao tác này không thể hoàn tác từ bảng điều khiển — mục đó phải được thêm lại bằng tay hoặc từ một bản sao lưu.`,"views.serverDetail.removeServer":`Gỡ máy chủ`,"views.serverDetail.removeTitle":`Gỡ máy chủ này?`,"views.serverDetail.restart":`Khởi động lại`,"views.serverDetail.restarts":`Số lần khởi động lại`,"views.serverDetail.sectionConfig":`Cấu hình`,"views.serverDetail.sectionHistory":`Lịch sử`,"views.serverDetail.sectionOutput":`Đầu ra trực tiếp`,"views.serverDetail.start":`Khởi động`,"views.serverDetail.startsOnItsOwn":`Tự khởi động. Thêm id trong {code} để sắp nó sau các máy chủ khác.`,"views.serverDetail.stop":`Dừng`,"views.serverDetail.telemetry":`Đo từ xa`,"views.serverDetail.telemetryNote":`Được lấy mẫu mỗi 5 giây khi trang này mở.`,"views.serverDetail.unhealthyFor":`Bất thường trong`,"views.serverDetail.uptime24":`Hoạt động 24 giờ`,"views.serverDetail.waitingFirstLine":`Đang chờ dòng đầu tiên…`,"views.servers.clearFilter":`Xoá bộ lọc`,"views.servers.clearFilters":`Xoá các bộ lọc`,"views.servers.description":`Mọi mục trong servers.config.json của {workspace}, kèm tài nguyên trực tiếp, tình trạng và lịch sử.`,"views.servers.emptyDescription":`Hãy thêm tiến trình đầu tiên mà bảng điều khiển này cần giám sát. Command, args, env và thư mục làm việc của nó đều nằm trong tệp cấu hình.`,"views.servers.emptyTitle":`Chưa cấu hình máy chủ nào`,"views.servers.filterAll":`Tất cả`,"views.servers.filterAria":`Lọc máy chủ`,"views.servers.filterAttention":`Cần chú ý`,"views.servers.filterDisabled":`Đã tắt`,"views.servers.filterPlaceholder":`Lọc theo id, nhãn, command hoặc cổng`,"views.servers.filterRunning":`Đang chạy`,"views.servers.filterStopped":`Đã dừng`,"views.servers.noMatchDescription":`Hãy thử trạng thái khác hoặc xoá tìm kiếm.`,"views.servers.noMatchTitle":`Không có gì khớp với bộ lọc đó`,"views.settings.changesDescription":`Những gì nút Lưu sẽ ghi vào cài đặt của {workspace}.`,"views.settings.configErrorNote":`Bảng điều khiển tiếp tục giám sát với cấu hình nó đã có; sửa tệp sẽ tự động nạp lại.`,"views.settings.configErrorTitle":`Không đọc được cấu hình của không gian làm việc`,"views.settings.configWarningTitle":`Cấu hình của không gian làm việc này có cảnh báo`,"views.settings.ddnsDescription":`Giữ các hostname luôn trỏ về địa chỉ công khai của máy này, bất kể nhà đăng ký nào đang giữ chúng.`,"views.settings.defaultsDescription":`Áp dụng cho mọi mục trong không gian làm việc này không tự đặt giá trị riêng.`,"views.settings.description":`Mặc định máy chủ, thời gian giữ nhật ký, thông báo và dynamic DNS cho {workspace}.`,"views.settings.logsDescription":`Không gian làm việc này giữ bao nhiêu đầu ra trên đĩa và trong bao lâu.`,"views.settings.navLabel":`Các mục cài đặt không gian làm việc`,"views.settings.notificationsDescription":`Cảnh báo sự cố và tình trạng cho không gian làm việc này, gửi tới một chat Telegram.`,"views.settings.saveFailed":`Không lưu được cài đặt.`,"views.settings.saved":`Đã lưu cài đặt không gian làm việc.`,"views.settings.savedToast":`Đã lưu cài đặt không gian làm việc`,"views.settings.sectionDdns":`Dynamic DNS`,"views.settings.sectionDefaults":`Mặc định máy chủ`,"views.settings.sectionLogs":`Nhật ký`,"views.settings.sectionNotifications":`Thông báo`,"workspace.new":`Không gian làm việc mới`,"workspace.rename":`Đổi tên không gian làm việc`,"workspace.create":`Tạo không gian làm việc`,"workspace.renameAction":`Đổi tên`,"workspace.createHint":`Có cài đặt, máy chủ, nhật ký, bí mật và bản sao lưu riêng — do chính bảng điều khiển này phục vụ.`,"workspace.renameHint":`Chỉ tên thay đổi; id không gian làm việc giữ nguyên nên URL và đường dẫn vẫn hoạt động.`,"workspace.nameHint":`Hiển thị ở thanh trên.`,"workspace.nameHintId":`Hiển thị ở thanh trên. Id: {id}`,"workspace.none":`Không có không gian làm việc`,"workspace.delete":`Xoá không gian làm việc`,"days.remaining":{other:`{count} ngày`},"editor.unsaved":{one:`thay đổi chưa lưu`,other:`thay đổi chưa lưu`},"editor.saveChanges":{one:`Lưu {count} thay đổi`,other:`Lưu {count} thay đổi`},"logs.lines":{other:`{count} dòng`},"palette.results":{other:`{count} kết quả`},"proxy.retry.inMinutes":{one:`~{count} phút`,other:`~{count} phút`},"proxy.retry.inHours":{one:`~{count} giờ`,other:`~{count} giờ`},"servers.total":{other:`{count} máy chủ`},"servers.running":{other:`{count} đang chạy`},"settings.backup.entriesCount":{one:`{count} mục`,other:`{count} mục`},"settings.backup.itemsSelected":{one:`đã chọn {count} mục`,other:`đã chọn {count} mục`},"settings.ddns.hostnameCount":{one:`{count} hostname`,other:`{count} hostname`},"settings.shell.fieldsChanged":{one:`trường đã thay đổi`,other:`trường đã thay đổi`},"settings.shell.saveChanges":{one:`Lưu {count} thay đổi`,other:`Lưu {count} thay đổi`},"views.globalOverview.needLook":{one:`{count} máy chủ cần xem xét`,other:`{count} máy chủ cần xem xét`},"views.logs.filesOnDisk":{one:`{count} tệp`,other:`{count} tệp`},"views.overview.needLook":{one:`{count} máy chủ cần xem xét`,other:`{count} máy chủ cần xem xét`}};export{e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"activity.emptyTitle":`过去 24 小时内没有事件`,"activity.emptyDescription":`启动、退出、崩溃和恢复发生时都会显示在这里。`,"activity.ran":`已运行 {duration}`,"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`,"app.name":`home-hosted`,"app.tagline":`进程监管控制面板`,"bind.local":`local — 127.0.0.1`,"bind.lan":`lan — 0.0.0.0`,"bind.explicit":`{bind} — 显式指定`,"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":`刚刚`,"common.dismiss":`忽略`,"connection.live":`实时`,"connection.connecting":`正在连接`,"connection.reconnecting":`正在重新连接`,"connection.liveUpdates":`实时更新`,"editor.title":`编辑配置`,"editor.description":`将覆盖项写入 {file};未改动的部分继续继承默认值。`,"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":`没有可保存的内容。`,"health.disabled":`未检查`,"health.unknown":`未探测`,"health.healthy":`正常`,"health.unhealthy":`异常`,"history.start":`已启动`,"history.exit":`已退出`,"history.crash":`已崩溃`,"history.forcedRestart":`强制重启`,"history.unhealthy":`异常`,"history.recovered":`已恢复`,"host.loadPerCpu":`负载 / cpu`,"host.cpuTemp":`CPU 温度`,"host.samplingOff":`主机采样已关闭`,"host.samplingOffDescription":`在设置中开启以采集负载、内存、磁盘和温度。`,"host.swap":`交换分区`,"host.cpus":`CPU`,"host.loadAverage":`负载 1 / 5 / 15`,"host.memoryUsed":`已用内存`,"host.sampled":`采样时间`,"host.filesystems":`文件系统`,"host.thresholdsBreached":`超出的阈值`,"killPort.trigger":`终止占用端口 {port} 的进程`,"killPort.title":`终止端口 {port} 上的进程?`,"killPort.body":`会先请求它停止,只有它无视请求时才终止。本面板监管的任何进程都会被拒绝,因此受管服务器不会以这种方式丢失。`,"killPort.confirm":`终止它`,"language.label":`语言`,"language.select":`选择语言`,"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":`同时终止占用该端口的进程`,"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":`由此机器提供服务`,"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":`正在采集…`,"nav.global":`全局`,"nav.workspace":`工作区`,"nav.others":`其他`,"nav.overview":`概览`,"nav.servers":`服务器`,"nav.logs":`日志`,"nav.workspaceSettings":`工作区设置`,"nav.globalOverview":`全局概览`,"nav.globalSettings":`全局设置`,"nav.reverseProxy":`反向代理`,"nav.navigation":`导航`,"nav.closeNavigation":`关闭导航`,"nav.hostVitals":`主机指标`,"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":`身份验证已禁用 — 面板仅靠回环绑定来保护。`,"onPortConflict.block":`block — 拒绝启动`,"onPortConflict.warn":`warn — 仍然启动`,"onPortConflict.follow":`follow — 接管自身脱离后的重启`,"onPortConflict.reclaim":`reclaim — 用受监管的副本替换`,"onPortConflict.kill":`kill — 停止占用该端口的任何进程`,"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}”的结果。`,"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.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.retry.inFallback":`约 8 小时`,"proxy.retryButton.force":`强制重试证书`,"proxy.retryButton.question":`为 {host} 再次向 CA 申请?`,"proxy.retryButton.body":`引擎此前未能为此主机名取得 CA 证书,正在使用其本地 CA。它每 {retryIn}自动重试一次。`,"proxy.retryButton.warning":`立即重试会终止此路由并使其短暂不可用,确定要继续吗?`,"proxy.retryButton.leave":`暂不处理`,"proxy.retryButton.now":`立即重试`,"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.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.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.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 的上游`,"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":`保存设置`,"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":`状态`,"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":`关闭后条目仍保留在配置中,但拒绝启动。`,"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.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.backup.entryGlobalSettings":`全局设置`,"settings.backup.entryGlobalSecrets":`全局密钥(密码、API token)`,"settings.backup.entryTlsCertificate":`TLS 证书`,"settings.backup.leafSettings":`设置`,"settings.backup.leafServers":`服务器`,"settings.backup.leafSecrets":`密钥`,"settings.backup.restoreItemLabel":`{workspace}:{item}`,"settings.backup.noteMissing":`尚不存在`,"settings.backup.noteCovered":`已被 {path} 涵盖`,"settings.backup.noteAlreadyDeclared":`已由 {origin} 声明`,"settings.backup.noteContainsBackupDir":`包含备份目录`,"settings.backup.noteUnknownWorkspace":`未知工作区`,"settings.backup.noteMissingFromArchive":`归档中缺失`,"settings.backup.noteDeclaredByBackup":`由备份的配置声明,而该配置未被恢复`,"settings.backup.noteNotDeclared":`既不由此配置声明,也不由备份声明`,"settings.backup.noteRestoredFrom":`已从 {path} 恢复`,"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.backups.kindWorkspace":`工作区`,"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.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.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.rebind.failed":`控制面板未在 {target} 上应答。请查看控制台以了解新的监听地址。`,"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.restore.reasonSymbolicLink":`符号链接,已跳过`,"settings.restore.reasonNotSelected":`未选择`,"settings.restore.reasonUnrestorable":`无法在此恢复`,"settings.restore.reasonInvalidSettings":`归档中的设置无效`,"settings.restore.reasonInvalidServers":`归档中的服务器无效`,"settings.shell.noUnsavedChanges":`没有未保存的更改`,"settings.shell.discard":`放弃更改`,"settings.shell.save":`保存设置`,"settings.shell.unsavedTitle":`未保存的更改`,"settings.shell.nothingToSave":`没有可保存的内容。`,"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":`证书已移除。`,"status.stopped":`已停止`,"status.starting":`正在启动`,"status.running":`运行中`,"status.stopping":`正在停止`,"status.backoff":`正在重启`,"status.crashed":`已崩溃`,"status.conflict":`端口冲突`,"theme.label":`主题:{theme}`,"theme.light":`浅色`,"theme.dark":`深色`,"theme.system":`跟随系统`,"topbar.search":`搜索或运行命令`,"topbar.openNavigation":`打开导航`,"topbar.commandPalette":`命令面板`,"topbar.account":`账户`,"topbar.signedIn":`已登录`,"topbar.signOut":`退出登录`,"topbar.workspaceLabel":`工作区:{name}`,"validation.port":`端口必须是 1 到 65535 之间的整数。`,"validation.idRequired":`必须填写 id——它是此服务器所依据的键。`,"validation.idPattern":`id 必须以小写字母或数字开头,只能包含小写字母、数字、短横线和下划线。`,"validation.commandRequired":`必须填写 command——监管器启动的可执行文件。`,"validation.bootstrapCommand":`bootstrap 需要一个要运行的命令。`,"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.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.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.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":`通知`,"workspace.new":`新建工作区`,"workspace.rename":`重命名工作区`,"workspace.create":`创建工作区`,"workspace.renameAction":`重命名`,"workspace.createHint":`拥有独立的设置、服务器、日志、密钥和备份条目 — 由同一个面板提供服务。`,"workspace.renameHint":`只更改名称;工作区 id 保持不变,因此 URL 和路径仍然有效。`,"workspace.nameHint":`显示在顶栏中。`,"workspace.nameHintId":`显示在顶栏中。Id:{id}`,"workspace.none":`无工作区`,"workspace.delete":`删除工作区`,"days.remaining":{other:`{count} 天`},"editor.unsaved":{one:`项未保存的改动`,other:`项未保存的改动`},"editor.saveChanges":{one:`保存 {count} 项改动`,other:`保存 {count} 项改动`},"logs.lines":{other:`{count} 行`},"palette.results":{other:`{count} 个结果`},"proxy.retry.inMinutes":{one:`约 {count} 分钟`,other:`约 {count} 分钟`},"proxy.retry.inHours":{one:`约 {count} 小时`,other:`约 {count} 小时`},"servers.total":{other:`{count} 台服务器`},"servers.running":{other:`{count} 台运行中`},"settings.backup.entriesCount":{one:`{count} 个条目`,other:`{count} 个条目`},"settings.backup.itemsSelected":{one:`已选择 {count} 项`,other:`已选择 {count} 项`},"settings.ddns.hostnameCount":{one:`{count} 个主机名`,other:`{count} 个主机名`},"settings.shell.fieldsChanged":{one:`个字段已更改`,other:`个字段已更改`},"settings.shell.saveChanges":{one:`保存 {count} 项更改`,other:`保存 {count} 项更改`},"views.globalOverview.needLook":{one:`{count} 台服务器需要关注`,other:`{count} 台服务器需要关注`},"views.logs.filesOnDisk":{one:`{count} 个文件`,other:`{count} 个文件`},"views.overview.needLook":{one:`{count} 台服务器需要关注`,other:`{count} 台服务器需要关注`}};export{e as default};
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
catch (error) { /* storage unavailable — fall through to light */ }
|
|
21
21
|
})()
|
|
22
22
|
</script>
|
|
23
|
-
<script type="module" crossorigin src="/assets/index-
|
|
24
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
23
|
+
<script type="module" crossorigin src="/assets/index-C02FUAwz.js"></script>
|
|
24
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Skf2FzpK.css">
|
|
25
25
|
</head>
|
|
26
26
|
<body>
|
|
27
27
|
<div id="app"></div>
|
package/uis/stock/dist/ui.json
CHANGED