home-hosted 0.8.2 → 0.9.0

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.
Files changed (35) hide show
  1. package/AGENTS.md +9 -5
  2. package/README.md +50 -14
  3. package/dist/cli.js +1331 -282
  4. package/dist/cli.js.map +1 -1
  5. package/docs/DDNS.md +2 -1
  6. package/docs/NOTIFICATIONS.md +72 -20
  7. package/docs/SERVERS.md +20 -1
  8. package/docs/UI_CREATION.md +22 -7
  9. package/docs/branding/logo.svg +33 -0
  10. package/docs/branding/social-preview.png +0 -0
  11. package/package.json +27 -24
  12. package/uis/stock/dist/assets/de-DL4xkOYj.js +1 -0
  13. package/uis/stock/dist/assets/es-CKj-v3FY.js +1 -0
  14. package/uis/stock/dist/assets/fr-72WremqT.js +1 -0
  15. package/uis/stock/dist/assets/index-BNSSU69y.js +47 -0
  16. package/uis/stock/dist/assets/index-GxTN2fYn.css +2 -0
  17. package/uis/stock/dist/assets/ja-BU4XyMbC.js +1 -0
  18. package/uis/stock/dist/assets/ko-Db8xtJ0N.js +1 -0
  19. package/uis/stock/dist/assets/ru-Bs8KXP2O.js +1 -0
  20. package/uis/stock/dist/assets/vi-DdQD4h7B.js +1 -0
  21. package/uis/stock/dist/assets/zh-CN-DIrw2Ubv.js +1 -0
  22. package/uis/stock/dist/favicon.ico +0 -0
  23. package/uis/stock/dist/favicon.svg +14 -0
  24. package/uis/stock/dist/index.html +6 -2
  25. package/uis/stock/dist/ui.json +3 -3
  26. package/uis/stock/dist/assets/de-DQxDtYp2.js +0 -1
  27. package/uis/stock/dist/assets/es-BP0qzCTU.js +0 -1
  28. package/uis/stock/dist/assets/fr-DHCvxiys.js +0 -1
  29. package/uis/stock/dist/assets/index-C02FUAwz.js +0 -46
  30. package/uis/stock/dist/assets/index-Skf2FzpK.css +0 -2
  31. package/uis/stock/dist/assets/ja-DseIeS1D.js +0 -1
  32. package/uis/stock/dist/assets/ko-Dcu2b6c2.js +0 -1
  33. package/uis/stock/dist/assets/ru-DaAAVw09.js +0 -1
  34. package/uis/stock/dist/assets/vi-D780h-t9.js +0 -1
  35. package/uis/stock/dist/assets/zh-CN-C8OC-N1b.js +0 -1
@@ -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":`셸 없이 실행됩니다.`,"addServer.argumentsHint":`한 줄에 인수 하나. 줄 안의 공백은 유지됩니다.`,"addServer.portLifecycle":`포트와 수명 주기`,"addServer.bindHint":`lan은 네트워크에 노출합니다. 인증 뒤에서만 사용하세요.`,"addServer.advanced":`고급 설정`,"addServer.advancedHint":`환경 변수, 백업, 정책, 수명 주기, 부트스트랩`,"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.sending":`전송 중…`,"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.httpScheme":`스킴`,"lifecycle.allowInvalidCert":`모든 인증서 허용`,"lifecycle.allowInvalidCertHint":`자체 서명 백엔드용이며 https에서만 의미가 있습니다.`,"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를 끄거나, 시험 중에는 스테이징 엔드포인트를 켜세요.`,"proxy.listener.staging":`ACME 스테이징 엔드포인트 사용`,"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":`부트스트랩`,"serverForm.bootstrapDescription":`첫 시작 전에 실행되는 일회성 명령 — 설치, 마이그레이션, 다운로드.`,"serverForm.runBootstrap":`부트스트랩 실행`,"serverForm.bootstrapHint":`끄면 항목에 부트스트랩이 없고 키가 null로 전송됩니다.`,"serverForm.timeoutMs":`시간 제한 (ms)`,"serverForm.runOnce":`세션마다 한 번만`,"serverForm.runOnceHint":`끄면 시작할 때마다 다시 실행합니다.`,"serverForm.bootstrapArgs":`부트스트랩 인수`,"serverForm.bootstrapArgsHint":`한 줄에 하나, 자리표시자는 기본 인수와 같습니다.`,"serverForm.bootstrapEnv":`부트스트랩 환경 변수`,"serverForm.bootstrapEnvHint":`한 줄에 KEY=value 하나, 부트스트랩 프로세스에만 내보냅니다.`,"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은 1주일간 활동이 없는 것입니다. 요청마다 다시 시작됩니다.`,"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":`셸 스크립트와 에이전트용으로는 {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":`{total}개 중 {selected}개 선택됨`,"settings.backup.nothingSelectable":`이 워크스페이스에는 아직 선택할 수 있는 항목이 없습니다.`,"settings.backup.apply":`적용`,"settings.backup.created":`백업을 만들었습니다.`,"settings.backup.leafSettingsHint":`서버 기본값, 로그 보존, 알림`,"settings.backup.leafServersHint":`servers.config.json의 모든 항목`,"settings.backup.leafSecretsHint":`Telegram 봇 토큰과 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 토큰)`,"settings.backup.entryTlsCertificate":`TLS 인증서`,"settings.backup.leafSettings":`설정`,"settings.backup.leafServers":`서버`,"settings.backup.leafSecrets":`시크릿`,"settings.backup.secretPassword":`비밀번호`,"settings.backup.secretPasswordHint":`제어판 자체의 비밀번호 해시입니다. 복원하면 이전 비밀번호로 돌아갑니다`,"settings.backup.secretApiToken":`API 토큰`,"settings.backup.secretApiTokenHint":`스크립트와 에이전트가 사용하는 장기 토큰`,"settings.backup.secretTelegram":`Telegram 봇 토큰`,"settings.backup.secretTelegramHint":`알림에 사용됩니다`,"settings.backup.secretDdns":`DDNS 자격 증명`,"settings.backup.secretDdnsHint":`공급자 자격 증명은 해당 키와 함께 봉인되어 보관됩니다`,"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.schedule":`자동 백업`,"settings.backups.scheduleHint":`패널이 이 간격으로 아카이브를 직접 만듭니다.`,"settings.backups.scheduleHours":`간격(시간)`,"settings.backups.scheduleHoursHint":`24는 매일 1회입니다.`,"settings.backups.scheduleKeep":`자동 보관 개수`,"settings.backups.scheduleKeepHint":`수동 아카이브는 보관 개수로 따로 계산됩니다.`,"settings.backups.scheduleLast":`마지막 자동: {when}`,"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은 1분이며 기본값은 5분입니다.`,"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":`공급자에게 apex를 알려야 할 때만. 예: 3단계 레이블 도메인.`,"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":`로컬 — 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.destination.title":`대상`,"settings.destination.generalTitle":`일반`,"settings.destination.generalDescription":`대상이 자체 설정을 하지 않는 한 여기를 따릅니다.`,"settings.destination.description":`이벤트가 가는 곳입니다. 각 대상은 위의 공통 설정을 따르거나 자체 설정을 가질 수 있습니다.`,"settings.destination.addTelegram":`Telegram 추가`,"settings.destination.addWebhook":`웹훅 추가`,"settings.destination.empty":`아직 대상이 없습니다. Telegram 채팅이나 웹훅을 추가하면 알림을 받습니다.`,"settings.destination.chatId":`채팅 ID`,"settings.destination.chatIdHint":`채팅 감지로 봇의 업데이트에서 채울 수 있습니다.`,"settings.destination.botToken":`봇 토큰`,"settings.destination.saveToken":`토큰 저장`,"settings.destination.tokenSet":`토큰 설정됨`,"settings.destination.noToken":`토큰 없음`,"settings.destination.detectChats":`채팅 감지`,"settings.destination.sendTest":`테스트 전송`,"settings.destination.remove":`삭제`,"settings.destination.removeQuestion":`{name}을(를) 삭제할까요?`,"settings.destination.removeBody":`이 대상으로의 전송이 중지되고 저장된 봇 토큰도 제거됩니다.`,"settings.destination.ownSettings":`자체 설정`,"settings.destination.ownSettingsHint":`끄면 위의 공통 설정을 따릅니다.`,"settings.destination.lastSend":`마지막 전송: {result} {when}`,"settings.destination.testSent":`테스트를 보냈습니다.`,"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 전용. OS가 제공하지 않으면 무시됩니다.`,"settings.host.breachingNow":`현재 초과 중:`,"settings.host.nothingBreaching":`현재 초과 중인 항목이 없습니다.`,"settings.interface.title":`인터페이스`,"settings.interface.description":`제어판은 정적 사이트입니다. 기본 제공 UI를 쓰거나 상태 디렉터리에서 직접 빌드한 UI를 제공하세요.`,"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}로 터미널에서 기본 UI를 되돌릴 수 있습니다.`,"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":`LAN`,"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":`읽기 전용. 경로를 셸이나 편집기에 바로 복사할 수 있습니다.`,"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":`복원할 항목 선택 — {total}개 중 {selected}개 선택됨.`,"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":`정책은 설정에 있고 봇 토큰은 시크릿이라 서버에서 다시 돌아오지 않습니다.`,"settings.telegram.enabled":`알림 보내기`,"settings.telegram.enabledHint":`이벤트마다 메시지 하나, 아래 쿨다운으로 제한됩니다.`,"settings.telegram.chatId":`채팅 id`,"settings.telegram.chatIdPlaceholder":`123456789 또는 @channel`,"settings.telegram.chatIdHint":`채팅 감지를 사용하면 봇의 업데이트에서 자동으로 채웁니다.`,"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":`봇 토큰`,"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":`채팅 감지`,"settings.telegram.sendTest":`테스트 전송`,"settings.telegram.removeToken":`토큰 제거`,"settings.telegram.removeTokenConfirm":`제거 확인`,"settings.telegram.removeTokenTitle":`봇 토큰을 제거할까요?`,"settings.telegram.removeTokenHint":`다시 토큰을 붙여 넣을 때까지 알림이 중지됩니다.`,"settings.telegram.tokenSaved":`토큰을 저장했습니다.`,"settings.telegram.tokenSavedFor":`@{username}의 토큰을 저장했습니다.`,"settings.telegram.tokenRemoved":`토큰을 제거했습니다.`,"settings.telegram.noChats":`채팅을 찾지 못했습니다. 먼저 봇에 /start를 보낸 뒤 다시 감지하세요.`,"settings.telegram.testSent":`테스트 메시지를 보냈습니다.`,"settings.telegram.testFailed":`테스트 메시지를 보내지 못했습니다.`,"settings.telegram.chatsSeen":`봇이 확인한 채팅:`,"settings.telegram.lastSend":`마지막 전송: {result}`,"settings.tls.title":`HTTPS`,"settings.tls.description":`PEM 쌍을 업로드하면 제어판이 자체 리스너에서 TLS를 제공합니다. 홈 네트워크에서는 자체 서명 인증서로 충분합니다.`,"settings.tls.serve":`제어판을 HTTPS로 제공`,"settings.tls.serveHint":`설정 저장으로 저장됩니다. 제어판이 다시 바인딩하고 이 페이지도 따라갑니다.`,"settings.tls.certificateTitle":`인증서`,"settings.tls.certificateDescription":`PEM으로 인코딩된 인증서와 개인 키. 둘 다 시크릿 파일에 남습니다.`,"settings.tls.unusableTitle":`저장된 인증서를 사용할 수 없습니다`,"settings.tls.subject":`주체`,"settings.tls.issuer":`발급자`,"settings.tls.validUntil":`만료일`,"settings.tls.days":`{count}일`,"settings.tls.privateKey":`개인 키`,"settings.tls.keyMatches":`인증서와 일치함`,"settings.tls.keyMismatch":`일치하지 않음`,"settings.tls.fingerprint":`지문`,"settings.tls.copyFingerprint":`지문 복사`,"settings.tls.noCertificateTitle":`업로드된 인증서 없음`,"settings.tls.noCertificateText":`아래에서 PEM 인증서와 키를 업로드한 뒤 저장하세요. 인증서가 있을 때까지 HTTPS는 제공되지 않습니다.`,"settings.tls.certFile":`인증서 파일 (.pem, .crt)`,"settings.tls.keyFile":`개인 키 파일 (.pem, .key)`,"settings.tls.pasteCertificate":`또는 인증서 붙여 넣기`,"settings.tls.pasteKey":`또는 개인 키 붙여 넣기`,"settings.tls.saveCertificate":`인증서 저장`,"settings.tls.removeCertificate":`인증서 제거`,"settings.tls.confirmRemove":`제거 확인`,"settings.tls.removeTitle":`인증서를 제거할까요?`,"settings.tls.removeHint":`TLS는 켜진 채로 남지만 제공할 것이 없어, 리스너가 다시 바인딩되면 제어판이 http로 돌아갑니다.`,"settings.tls.stored":`인증서를 저장했습니다.`,"settings.tls.removed":`인증서를 제거했습니다.`,"settings.webhook.title":`웹훅`,"settings.webhook.description":`HTTP 요청을 받는 곳이면 어디든 같은 이벤트를 보냅니다.`,"settings.webhook.empty":`아직 웹훅이 없습니다. 추가하면 이벤트를 다른 곳으로 보냅니다.`,"settings.webhook.add":`웹훅 추가`,"settings.webhook.newTarget":`hook`,"settings.webhook.url":`URL`,"settings.webhook.urlPlaceholder":`https://ntfy.sh/my-topic`,"settings.webhook.method":`메서드`,"settings.webhook.format":`본문`,"settings.webhook.formatJson":`JSON`,"settings.webhook.formatText":`일반 텍스트`,"settings.webhook.formatHint":`Discord, Slack 또는 자체 엔드포인트는 JSON, ntfy는 일반 텍스트입니다.`,"settings.webhook.headers":`헤더`,"settings.webhook.headersHint":`한 줄에 Name: value 하나씩, 모든 요청에 함께 전송합니다. ntfy는 여기서 Title과 Priority를 읽고, bearer 토큰은 Authorization에 넣습니다.`,"settings.webhook.presets":`프리셋`,"settings.webhook.presetNtfy":`ntfy`,"settings.webhook.presetDiscord":`Discord`,"settings.webhook.presetSlack":`Slack`,"settings.webhook.sendTest":`테스트 전송`,"settings.webhook.testSent":`테스트를 보냈습니다.`,"settings.webhook.cooldown":`쿨다운(ms)`,"settings.webhook.cooldownHint":`서버와 사유별로 이 대상에만 적용됩니다. 0이면 사용하지 않습니다.`,"settings.webhook.lastSend":`마지막 전송: {result} {when}`,"settings.webhook.removeQuestion":`{name}을(를) 삭제할까요?`,"settings.webhook.removeBody":`이벤트 전송이 중지됩니다. URL과 헤더는 이 워크스페이스 설정에서 제거됩니다.`,"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":`명령은 필수입니다 — 감독자가 실행하는 실행 파일입니다.`,"validation.bootstrapCommand":`부트스트랩에는 실행할 명령이 필요합니다.`,"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 대신 직접 만든 제어판 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":`인수`,"views.serverDetail.fieldBackupPaths":`백업 경로`,"views.serverDetail.fieldBootstrap":`부트스트랩`,"views.serverDetail.fieldCommand":`명령`,"views.serverDetail.fieldCwd":`작업 디렉터리`,"views.serverDetail.fieldDataEnvs":`데이터 환경 변수`,"views.serverDetail.fieldDependsOn":`의존 대상`,"views.serverDetail.fieldEnv":`환경 변수`,"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};
@@ -0,0 +1 @@
1
+ var e={"activity.emptyTitle":`За последние 24 часа событий нет`,"activity.emptyDescription":`Запуски, завершения, аварии и восстановления появляются здесь по мере происходящего.`,"activity.ran":`работал {duration}`,"addServer.title":`Добавить сервер`,"addServer.description":`Добавляет запись в servers.config.json рабочего пространства {workspace}; каждая пропущенная политика наследуется от значений по умолчанию.`,"addServer.thisWorkspace":`этого рабочего пространства`,"addServer.identity":`Идентификация`,"addServer.id":`Id`,"addServer.idHint":`Строчные буквы, цифры, дефисы и подчёркивания; используется в URL и журналах.`,"addServer.labelHint":`Показывается в панели; по умолчанию совпадает с id.`,"addServer.process":`Процесс`,"addServer.commandHint":`Запускается без оболочки.`,"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.sending":`Отправка…`,"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":`ЦП`,"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":`Нагрузка / цп`,"host.cpuTemp":`Темп. ЦП`,"host.samplingOff":`Опрос хоста выключен`,"host.samplingOffDescription":`Включите его в настройках, чтобы собирать нагрузку, память, диск и температуру.`,"host.swap":`Подкачка`,"host.cpus":`ЦП`,"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":`Базовая задержка (мс)`,"lifecycle.factor":`Коэффициент задержки`,"lifecycle.maxDelay":`Макс. задержка (мс)`,"lifecycle.resetAfter":`Сброс после (мс)`,"lifecycle.resetAfterHint":`Запуск такой длительности сбрасывает счётчик попыток.`,"lifecycle.healthTitle":`Проверка исправности`,"lifecycle.healthDescription":`Как проверяется готовность, когда процесс запущен.`,"lifecycle.probe":`Проверять этот сервер`,"lifecycle.probeType":`Тип проверки`,"lifecycle.probePort":`TCP-порт — только соединение`,"lifecycle.probeHttp":`HTTP-запрос — проверка ответа`,"lifecycle.interval":`Интервал (мс)`,"lifecycle.timeout":`Тайм-аут (мс)`,"lifecycle.unhealthyAfter":`Неисправен после`,"lifecycle.unhealthyAfterHint":`Подряд неудачных проверок.`,"lifecycle.forceRestartAfter":`Принудительный перезапуск через (мс)`,"lifecycle.forceRestartAfterHint":`0 отключает его.`,"lifecycle.startTimeout":`Тайм-аут запуска (мс)`,"lifecycle.httpScheme":`Схема`,"lifecycle.allowInvalidCert":`Принимать любой сертификат`,"lifecycle.allowInvalidCertHint":`Для самоподписанного бэкенда. Имеет смысл только по https.`,"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":`Льготный период (мс)`,"lifecycle.killGroup":`Завершить всю группу процессов`,"lifecycle.killPortHolders":`Также завершить всё, что занимает порт`,"login.title":`Войдите, чтобы продолжить`,"login.firstRunTitle":`У этой панели ещё нет пароля`,"login.firstRunSubtitle":`Доступ к ней может получить что угодно на этой машине. Задайте пароль сразу после входа.`,"login.authOffTitle":`Аутентификация отключена`,"login.authOffSubtitle":`Панель слушает только loopback — сейчас это единственная её защита.`,"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":`{count} из {total} строк`,"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":`Аутентификация отключена — панель защищена только привязкой к loopback.`,"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":`Домашний wildcard-сертификат`,"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":`Сам обратный прокси. Панель скачивает текущую сборку, управляет ею и применяет её конфигурацию через собственный admin-API движка.`,"proxy.engine.notInFrame":`Состояние прокси пока не попадает в кадр этой панели.`,"proxy.engine.readFailed":`Не удалось прочитать данные движка`,"proxy.engine.notInstalled":`Движок не установлен`,"proxy.engine.installNote":`Установка скачивает текущий выпуск {engine}, которым управляет панель — около 46 МБ, однократно. Ничего не открывается наружу, пока не добавлен маршрут и не включён прокси.`,"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":`Использовать staging-эндпоинт ACME`,"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":`Серверы имён, с которых движок читает запись; пусто — использует свои. Нужно там, где split-horizon DNS показывает ему другую картину.`,"proxy.listener.noAccountTitle":`Ни одна DNS-учётная запись не может ответить на проверку`,"proxy.listener.noAccountBody":`DNS-01 включён, но ни у одной учётной записи нет подходящих учётных данных. Добавьте её в разделе «Настройки рабочего пространства» → Dynamic 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":`Снова запросить у CA сертификат для {host}?`,"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":`Открывайте свои серверы через домены, с автоматическим HTTPS через 80/443 или DNS-проверку.`,"proxy.view.dnsNote":`Для DNS-01 добавьте DNS-провайдера домена в любое рабочее пространство в разделе «Настройки рабочего пространства» → Dynamic 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":`у CA снова запрашивается сертификат для {host}`,"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=путь по строке — экспортируется в процесс и автоматически резервируется.`,"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":`Выключено означает, что у элемента его нет и ключ отправляется как null.`,"serverForm.timeoutMs":`Тайм-аут (мс)`,"serverForm.runOnce":`Только раз за сеанс`,"serverForm.runOnceHint":`Выключено означает, что он выполняется при каждом запуске.`,"serverForm.bootstrapArgs":`Аргументы bootstrap`,"serverForm.bootstrapArgsHint":`По одному на строку; те же подстановки, что и у основных аргументов.`,"serverForm.bootstrapEnv":`Окружение bootstrap`,"serverForm.bootstrapEnvHint":`KEY=value по строке, экспортируется только в процесс bootstrap.`,"serverForm.onPortConflict":`При конфликте портов`,"serverForm.logBufferLines":`Строк в буфере журнала`,"serverForm.maxRssMb":`Макс. RSS (МБ)`,"serverForm.maxRssHint":`Перезапуск при превышении; пусто или 0 отключает.`,"serverForm.enabledHint":`Выключено сохраняет элемент в конфигурации, но отказывается его запускать.`,"settings.auth.policyTitle":`Политика доступа`,"settings.auth.policyDescription":`Аутентификация действует независимо от того, слушает панель loopback или открыта в сеть.`,"settings.auth.requirePassword":`Требовать пароль`,"settings.auth.requirePasswordHint":`Для каждого запроса нужен сеанс с выполненным входом.`,"settings.auth.sessionLifetime":`Время жизни сеанса (мс)`,"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":`Блокировка (мс)`,"settings.auth.apiTokenSet":`API-токен задан`,"settings.auth.apiTokenMissing":`Нет API-токена`,"settings.auth.apiTokenNote":`Скрипты могут вызывать API с помощью {code} вместо входа в систему.`,"settings.auth.noTokenNote":`Для shell-скриптов и агентов создайте его командой {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 и учётные данные 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-токен)`,"settings.backup.entryTlsCertificate":`Сертификат TLS`,"settings.backup.leafSettings":`Настройки`,"settings.backup.leafServers":`Серверы`,"settings.backup.leafSecrets":`Секреты`,"settings.backup.secretPassword":`Пароль`,"settings.backup.secretPasswordHint":`Хеш собственного пароля панели; его восстановление возвращает прежний пароль`,"settings.backup.secretApiToken":`API-токен`,"settings.backup.secretApiTokenHint":`Долгоживущий токен, который используют скрипты и агенты`,"settings.backup.secretTelegram":`Токен бота Telegram`,"settings.backup.secretTelegramHint":`Используется для уведомлений`,"settings.backup.secretDdns":`Учётные данные DDNS`,"settings.backup.secretDdnsHint":`Учётные данные провайдера, хранимые запечатанными вместе с ключом`,"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.schedule":`Автоматические копии`,"settings.backups.scheduleHint":`Панель сама создаёт архив с этим интервалом.`,"settings.backups.scheduleHours":`Каждые (часов)`,"settings.backups.scheduleHoursHint":`24 — один архив в день.`,"settings.backups.scheduleKeep":`Хранить автоматические`,"settings.backups.scheduleKeepHint":`Ручные архивы считаются отдельно, по «Хранить».`,"settings.backups.scheduleLast":`Последняя автоматическая: {when}`,"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":`Проход Dynamic DNS завершён`,"settings.ddns.credentialsSaved":`Учётные данные сохранены для {account}`,"settings.ddns.credentialsRemoved":`Учётные данные удалены для {account}`,"settings.ddns.loadErrorTitle":`Не удалось загрузить настройки Dynamic DNS`,"settings.ddns.title":`Dynamic DNS`,"settings.ddns.description":`Держите эти имена хостов указывающими на публичный адрес этой машины. Учётные данные лежат в файле секретов, никогда в servers.config.json.`,"settings.ddns.checking":`проверка`,"settings.ddns.needsAttention":`требует внимания`,"settings.ddns.watching":`наблюдение`,"settings.ddns.updateNow":`Обновить сейчас`,"settings.ddns.enabled":`Поддерживать Dynamic DNS в актуальном состоянии`,"settings.ddns.enabledHint":`Проход выполняется с интервалом ниже; провайдер вызывается только тогда, когда адрес действительно изменился.`,"settings.ddns.interval":`Проверять каждые (мс)`,"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":`Только когда провайдеру нужно сообщить apex, например для доменов из трёх меток.`,"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":`Локально — 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.destination.title":`Получатели`,"settings.destination.generalTitle":`Общие`,"settings.destination.generalDescription":`Чему следует каждый получатель, если не задал своё.`,"settings.destination.description":`Куда уходят события. Каждый может следовать общим настройкам выше или иметь свои.`,"settings.destination.addTelegram":`Добавить Telegram`,"settings.destination.addWebhook":`Добавить вебхук`,"settings.destination.empty":`Получателей пока нет. Добавьте чат Telegram или вебхук, чтобы получать оповещения.`,"settings.destination.chatId":`ID чата`,"settings.destination.chatIdHint":`Нажмите «Найти чаты», чтобы взять это из обновлений бота.`,"settings.destination.botToken":`Токен бота`,"settings.destination.saveToken":`Сохранить токен`,"settings.destination.tokenSet":`токен задан`,"settings.destination.noToken":`нет токена`,"settings.destination.detectChats":`Найти чаты`,"settings.destination.sendTest":`Отправить тест`,"settings.destination.remove":`Удалить`,"settings.destination.removeQuestion":`Удалить {name}?`,"settings.destination.removeBody":`События перестанут отправляться, а сохранённый токен бота будет удалён.`,"settings.destination.ownSettings":`Свои настройки`,"settings.destination.ownSettingsHint":`Выключено — следовать общим настройкам выше.`,"settings.destination.lastSend":`Последняя отправка: {result} {when}`,"settings.destination.testSent":`Тест отправлен.`,"settings.host.title":`Пороги`,"settings.host.description":`Порог 0 отключает это оповещение. Превышения уведомляют один раз и ещё раз при восстановлении.`,"settings.host.enabled":`Опрошивать эту машину`,"settings.host.enabledHint":`Нагрузка, память, подкачка, диск и температура ЦП, с интервалом ниже.`,"settings.host.interval":`Интервал (мс)`,"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":`Нагрузка на ЦП`,"settings.host.loadPerCpuHint":`Средняя нагрузка за 1 минуту, делённая на число ядер.`,"settings.host.tempCelsius":`Температура ЦП (°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 (.zip с index.html)`,"settings.interface.docsHint":`См. {docs} о контракте API. Если собственный 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":`LAN`,"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":`servers.config.json для {label}.`,"settings.paths.workspaceSettings":`Настройки рабочего пространства`,"settings.paths.workspaceSettingsHint":`Серверные значения по умолчанию, хранение журналов, уведомления, DDNS.`,"settings.paths.logs":`Журналы`,"settings.paths.logsHint":`Сохранённый вывод для этого рабочего пространства.`,"settings.paths.copyPath":`Скопировать {label}`,"settings.paths.whereThingsLive":`Где что лежит`,"settings.paths.whereThingsLiveDescription":`Только чтение. Копируйте путь прямо в оболочку или редактор.`,"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":`Политика лежит в конфигурации; токен бота — это секрет и никогда не возвращается с сервера.`,"settings.telegram.enabled":`Отправлять уведомления`,"settings.telegram.enabledHint":`Одно сообщение на событие, ограниченное временем ожидания ниже.`,"settings.telegram.chatId":`Id чата`,"settings.telegram.chatIdPlaceholder":`123456789 или @channel`,"settings.telegram.chatIdHint":`Используйте «Определить чаты», чтобы заполнить это из обновлений бота.`,"settings.telegram.cooldown":`Время ожидания на событие (мс)`,"settings.telegram.cooldownHint":`Для каждого сервера и причины, чтобы часто падающий сервер не мог спамить.`,"settings.telegram.onCrash":`Попытки исчерпаны`,"settings.telegram.onUnhealthy":`Порт неисправен`,"settings.telegram.onForcedRestart":`Принудительный перезапуск`,"settings.telegram.onRecovered":`Восстановлен`,"settings.telegram.onHost":`Показатели хоста превышены`,"settings.telegram.onHostHint":`Диск, память, подкачка, нагрузка и температура ЦП, согласно порогам в разделе «Показатели хоста».`,"settings.telegram.onDdns":`Dynamic DNS изменился или дал сбой`,"settings.telegram.onDdnsHint":`Одно сообщение на проход, изменивший запись, и одно для прохода, который завершился сбоем.`,"settings.telegram.botToken":`Токен бота`,"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":`Определить чаты`,"settings.telegram.sendTest":`Отправить тест`,"settings.telegram.removeToken":`Удалить токен`,"settings.telegram.removeTokenConfirm":`Подтвердить удаление`,"settings.telegram.removeTokenTitle":`Удалить токен бота?`,"settings.telegram.removeTokenHint":`Уведомления прекратятся, пока вы снова не вставите токен.`,"settings.telegram.tokenSaved":`Токен сохранён.`,"settings.telegram.tokenSavedFor":`Токен сохранён для @{username}.`,"settings.telegram.tokenRemoved":`Токен удалён.`,"settings.telegram.noChats":`Чаты не найдены. Сначала отправьте боту /start, затем определите снова.`,"settings.telegram.testSent":`Тестовое сообщение отправлено.`,"settings.telegram.testFailed":`Тестовое сообщение не удалось отправить.`,"settings.telegram.chatsSeen":`Чаты, которые видел бот:`,"settings.telegram.lastSend":`Последняя отправка: {result}`,"settings.tls.title":`HTTPS`,"settings.tls.description":`Загрузите пару PEM, и панель начнёт отдавать TLS на своём прослушивателе. Самоподписанный сертификат вполне годится для домашней сети.`,"settings.tls.serve":`Отдавать панель по HTTPS`,"settings.tls.serveHint":`Сохраняется вместе с «Сохранить настройки»; панель перепривязывается, и эта страница следует за ней.`,"settings.tls.certificateTitle":`Сертификат`,"settings.tls.certificateDescription":`Сертификат в кодировке PEM и его закрытый ключ. Оба остаются в файле секретов.`,"settings.tls.unusableTitle":`Сохранённый сертификат нельзя использовать`,"settings.tls.subject":`Субъект`,"settings.tls.issuer":`Издатель`,"settings.tls.validUntil":`Действителен до`,"settings.tls.days":`{count} дней`,"settings.tls.privateKey":`Закрытый ключ`,"settings.tls.keyMatches":`соответствует сертификату`,"settings.tls.keyMismatch":`не соответствует`,"settings.tls.fingerprint":`Отпечаток`,"settings.tls.copyFingerprint":`Скопировать отпечаток`,"settings.tls.noCertificateTitle":`Сертификат не загружен`,"settings.tls.noCertificateText":`Загрузите ниже сертификат PEM и ключ, затем сохраните. HTTPS не отдаётся, пока нет сертификата.`,"settings.tls.certFile":`Файл сертификата (.pem, .crt)`,"settings.tls.keyFile":`Файл закрытого ключа (.pem, .key)`,"settings.tls.pasteCertificate":`Или вставьте сертификат`,"settings.tls.pasteKey":`Или вставьте закрытый ключ`,"settings.tls.saveCertificate":`Сохранить сертификат`,"settings.tls.removeCertificate":`Удалить сертификат`,"settings.tls.confirmRemove":`Подтвердить удаление`,"settings.tls.removeTitle":`Удалить сертификат?`,"settings.tls.removeHint":`TLS остаётся включённым, но отдавать нечего, поэтому после повторной привязки прослушивателя панель вернётся к http.`,"settings.tls.stored":`Сертификат сохранён.`,"settings.tls.removed":`Сертификат удалён.`,"settings.webhook.title":`Вебхуки`,"settings.webhook.description":`Отправляет те же события куда угодно, где принимают HTTP-запрос.`,"settings.webhook.empty":`Вебхуков пока нет. Добавьте, чтобы отправлять события в другое место.`,"settings.webhook.add":`Добавить вебхук`,"settings.webhook.newTarget":`hook`,"settings.webhook.url":`URL`,"settings.webhook.urlPlaceholder":`https://ntfy.sh/my-topic`,"settings.webhook.method":`Метод`,"settings.webhook.format":`Тело`,"settings.webhook.formatJson":`JSON`,"settings.webhook.formatText":`Обычный текст`,"settings.webhook.formatHint":`JSON для Discord, Slack или своего эндпоинта; обычный текст для ntfy.`,"settings.webhook.headers":`Заголовки`,"settings.webhook.headersHint":`По одному Name: value в строке, с каждым запросом. ntfy читает здесь Title и Priority; bearer-токен идёт в Authorization.`,"settings.webhook.presets":`Шаблоны`,"settings.webhook.presetNtfy":`ntfy`,"settings.webhook.presetDiscord":`Discord`,"settings.webhook.presetSlack":`Slack`,"settings.webhook.sendTest":`Отправить тест`,"settings.webhook.testSent":`Тест отправлен.`,"settings.webhook.cooldown":`Пауза (мс)`,"settings.webhook.cooldownHint":`По серверу и причине, только для этого адресата. 0 отключает.`,"settings.webhook.lastSend":`Последняя отправка: {result} {when}`,"settings.webhook.removeQuestion":`Удалить {name}?`,"settings.webhook.removeBody":`События перестанут отправляться. URL и заголовки удаляются из конфигурации этого пространства.`,"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":`Требуется команда — исполняемый файл, который запускает супервизор.`,"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} · {persisted} из {total} серверов на диске · {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}% ЦП сейчас`,"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":`Запускается сам. Добавьте id в {code}, чтобы упорядочить его после других серверов.`,"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":`Каждая запись в servers.config.json рабочего пространства {workspace}, с живыми ресурсами, исправностью и историей.`,"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":`Серверные значения по умолчанию, хранение журналов, уведомления и Dynamic DNS для {workspace}.`,"views.settings.logsDescription":`Сколько вывода это рабочее пространство хранит на диске и как долго.`,"views.settings.navLabel":`Разделы настроек рабочего пространства`,"views.settings.notificationsDescription":`Оповещения об авариях и исправности для этого рабочего пространства, отправляемые в чат Telegram.`,"views.settings.saveFailed":`Не удалось сохранить настройки.`,"views.settings.saved":`Настройки рабочего пространства сохранены.`,"views.settings.savedToast":`Настройки рабочего пространства сохранены`,"views.settings.sectionDdns":`Dynamic 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":{one:`{count} день`,few:`{count} дня`,many:`{count} дней`,other:`{count} дня`},"editor.unsaved":{one:`несохранённое изменение`,few:`несохранённых изменения`,many:`несохранённых изменений`,other:`несохранённых изменения`},"editor.saveChanges":{one:`Сохранить {count} изменение`,few:`Сохранить {count} изменения`,many:`Сохранить {count} изменений`,other:`Сохранить {count} изменения`},"logs.lines":{one:`{count} строка`,few:`{count} строки`,many:`{count} строк`,other:`{count} строки`},"palette.results":{one:`{count} результат`,few:`{count} результата`,many:`{count} результатов`,other:`{count} результата`},"proxy.retry.inMinutes":{one:`~{count} минуту`,few:`~{count} минуты`,many:`~{count} минут`,other:`~{count} минуты`},"proxy.retry.inHours":{one:`~{count} час`,few:`~{count} часа`,many:`~{count} часов`,other:`~{count} часа`},"servers.total":{one:`{count} сервер`,few:`{count} сервера`,many:`{count} серверов`,other:`{count} сервера`},"servers.running":{one:`{count} работает`,few:`{count} работают`,many:`{count} работают`,other:`{count} работают`},"settings.backup.entriesCount":{one:`{count} запись`,few:`{count} записи`,many:`{count} записей`,other:`{count} записи`},"settings.backup.itemsSelected":{one:`выбран {count} элемент`,few:`выбрано {count} элемента`,many:`выбрано {count} элементов`,other:`выбрано {count} элемента`},"settings.ddns.hostnameCount":{one:`{count} имя хоста`,few:`{count} имени хоста`,many:`{count} имён хостов`,other:`{count} имени хоста`},"settings.shell.fieldsChanged":{one:`поле изменено`,few:`поля изменены`,many:`полей изменено`,other:`поля изменены`},"settings.shell.saveChanges":{one:`Сохранить {count} изменение`,few:`Сохранить {count} изменения`,many:`Сохранить {count} изменений`,other:`Сохранить {count} изменения`},"views.globalOverview.needLook":{one:`{count} сервер требует внимания`,few:`{count} сервера требуют внимания`,many:`{count} серверов требуют внимания`,other:`{count} сервера требуют внимания`},"views.logs.filesOnDisk":{one:`{count} файл`,few:`{count} файла`,many:`{count} файлов`,other:`{count} файла`},"views.overview.needLook":{one:`{count} сервер требует внимания`,few:`{count} сервера требуют внимания`,many:`{count} серверов требуют внимания`,other:`{count} сервера требуют внимания`}};export{e as default};