dns-worker 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/serverfull.mjs +73 -69
- package/dist/serverfull.mjs.map +4 -4
- package/package.json +3 -1
- package/static/assets/AccountView-p5jSjMAE.js +4 -0
- package/static/assets/{AnalyticsView-C_g_jz14.js → AnalyticsView-BywwDzah.js} +2 -2
- package/static/assets/AuthView-qoUKd5PS.js +2 -0
- package/static/assets/{DestinationMap-jSW7gimP.js → DestinationMap-9Yc54Mdj.js} +1 -1
- package/static/assets/FilteringView-Bs3__NpV.js +1 -0
- package/static/assets/LogsView-B-U9oaxB.js +5 -0
- package/static/assets/{QRCodeCanvas-Cu_-aNyM.js → QRCodeCanvas-DQ-xNuwF.js} +2 -2
- package/static/assets/{RulesView-CfVeQv0-.js → RulesView-B2kL1QhI.js} +1 -1
- package/static/assets/SettingsView-DTGI6eSd.js +1 -0
- package/static/assets/SetupView-DE9MM-32.js +1 -0
- package/static/assets/{SwipeableDrawer-BrmEzhuP.js → SwipeableDrawer-B81ANpsc.js} +1 -1
- package/static/assets/{TrendChart-Dc5yJndv.js → TrendChart-CCR1W3fC.js} +3 -3
- package/static/assets/browser-Dc5iKjY4.js +1 -0
- package/static/assets/date-CpvuBM37.js +1 -0
- package/static/assets/{de-DE-CA3VPcoz.js → de-DE-kDnumQOF.js} +1 -1
- package/static/assets/{es-ES-CHvRWwd-.js → es-ES-CqKS7vHl.js} +1 -1
- package/static/assets/{fr-FR-CqGOuepx.js → fr-FR-BRcdpT35.js} +1 -1
- package/static/assets/getFlagEmoji-DRubsb7D.js +1 -0
- package/static/assets/index-Bheo8y3N.css +2 -0
- package/static/assets/index-dXN_pYn1.js +16 -0
- package/static/assets/{ja-JP-BJSbUSmh.js → ja-JP-C5jk6SuH.js} +1 -1
- package/static/assets/{ko-KR-Chzg6jwO.js → ko-KR-z38NtMFa.js} +1 -1
- package/static/assets/{ru-RU-CSyCGGPn.js → ru-RU-Bicx52lz.js} +1 -1
- package/static/assets/services-BVnEJBDq.js +1 -0
- package/static/assets/vendor-i18next-BKUzkAKP.js +1 -0
- package/static/assets/vendor-react-BmoHsW1x.js +11 -0
- package/static/assets/{vendor-ui-core-sfZn2C08.js → vendor-ui-core-CY_WyMIf.js} +1 -1
- package/static/assets/{vendor-utils-CnB7BG7m.js → vendor-utils-BWSB0jGn.js} +1 -1
- package/static/assets/{vi-VN-D7rcA1IX.js → vi-VN-CvS_mTAu.js} +1 -1
- package/static/assets/{zh-CN-CSPdaOkF.js → zh-CN-B0nRgJTD.js} +1 -1
- package/static/assets/{zh-TW-DETA1X3X.js → zh-TW-lc_SSoVI.js} +1 -1
- package/static/index.html +6 -6
- package/static/sw.js +1 -1
- package/static/assets/AccountView-CGRwz6ae.js +0 -4
- package/static/assets/AuthView-BQzmEyvO.js +0 -2
- package/static/assets/FilteringView-CQ7sX3Rp.js +0 -1
- package/static/assets/LogsView-eLfZMRVo.js +0 -5
- package/static/assets/SettingsView-agJiYEt5.js +0 -1
- package/static/assets/SetupView-CTgCUAgk.js +0 -1
- package/static/assets/browser-DPi2BX_1.js +0 -1
- package/static/assets/date-IKj2stuv.js +0 -1
- package/static/assets/getFlagEmoji-_Wxhq0lT.js +0 -1
- package/static/assets/index-919BqnYI.css +0 -2
- package/static/assets/index-CbTjGMTZ.js +0 -16
- package/static/assets/services-Cwvmit1q.js +0 -1
- package/static/assets/vendor-i18next-cO7FDf_e.js +0 -1
- package/static/assets/vendor-react-CHk5ngkq.js +0 -11
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e={account:`계정`,logout:`로그아웃`,selectProfile:`설정 선택`,add:`추가`,newProfileName:`새 설정 이름...`,profileNameFormatTip:`설정 이름 팁: 1-30자, 기존 설정과 중복되지 않는 이름이어야 합니다`,profileLimitExceeded:`설정 수가 상한에 도달했습니다 (최대 {{max}}개)`,profileNameExists:`해당 설정 이름이 이미 존재합니다`,profileNameFormatError:`설정 이름 형식이 올바르지 않습니다`,create:`생성`,welcome:`환영합니다`,createProfileToStart:`시작하려면 설정을 생성하세요.`,loading:`로드 중...`,errorNetwork:`네트워크 오류`,confirmDelete:`이 설정을 삭제하시겠습니까?`,confirmLogout:`로그아웃하시겠습니까?`,notFound:`404 - 페이지를 찾을 수 없음`,notFoundDesc:`요청하신 페이지가 존재하지 않거나 이동되었습니다.`,backToHome:`홈으로 돌아가기`,apac:`아시아 태평양`,mainlandChina:`중국 본토`,HongKong:`홍콩`,Singapore:`싱가포르`,Tokyo:`도쿄`,NorthAmerica:`북미`,nae:`북미 동부`,naw:`북미 서부`,eu:`유럽`,invalidFormat:`유효하지 않은 파일 형식`,import:`가져오기`,importSuccess:`설정을 성공적으로 가져왔습니다`,importError:`설정 가져오기 실패, 형식을 확인하고 나중에 다시 시도하세요`,save:`저장`,saveSuccess:`설정이 저장되었습니다`,close:`닫기`,cancel:`취소`,continue:`계속`,back:`뒤로`,copy:`복사`,copied:`복사됨`,copyKey:`새 복구 키 복사`,confirm:`확인`,delete:`삭제`,rename:`이름 바꾸기`,disable:`비활성화`,confirmDisable:`비활성화 확인`,modeServerfull:`Serverfull 모드`,modeCloudflare:`Cloudflare Worker 모드`},t={setup:`설치`,rules:`규칙`,stats:`통계`,logs:`로그`,filter:`필터링`,settings:`설정`},n={light:`라이트 모드`,dark:`다크 모드`,system:`시스템 설정 적용`},r={login:`DNS Worker 로그인`,signup:`계정을 생성하여 시작하기`,welcomeBack:`다시 오신 것을 환영합니다, 자격 증명을 입력하세요`,protectInternet:`인터넷의 첫 번째 단계를 보호합니다`,error:`오류`,username:`사용자 이름`,usernamePlaceholder:`사용자 이름`,password:`비밀번호`,passwordPlaceholder:`비밀번호`,loginBtn:`로그인`,signupBtn:`회원가입`,totpVerification:`TOTP 인증`,noAccount:`계정이 없으신가요? 회원가입`,haveAccount:`이미 계정이 있으신가요? 로그인으로 돌아가기`,formatTipUsername:`사용자 이름 형식 팁: 5~32자의 Unix 사용자 이름 형식(소문자 또는 언더바로 시작하고 소문자, 숫자, 언더바, 하이픈만 포함)`,formatTipPassword:`비밀번호 형식 팁: 12-100자`,authFailed:`인증 실패, 사용자 이름 또는 비밀번호를 확인하세요`,networkError:`네트워크 오류, 나중에 다시 시도하세요`,turnstileRequired:`보안 문자를 완료하십시오`,turnstileError:`인증 서비스 로드 실패, Site Key 또는 도메인 설정을 확인하세요`,verifying:`보안 확인 중...`,passwordLeaked:`이 비밀번호는 유출되었을 수 있습니다. 계정 보안을 위해 무작위 비밀번호 또는 강력한 비밀번호를 사용하세요.`,usernameExists:`이 사용자 이름은 이미 등록되어 있습니다. 다른 사용자 이름을 시도해 보세요.`,skip:`건너뛰기`,showPassword:`비밀번호 표시`,hidePassword:`비밀번호 숨기기`,geolocationRequired:`지리적 위치 정보를 가져오지 못했습니다. 다시 시도하십시오.`,unauthorizedDefault:`로그인 세션이 만료되었습니다. 다시 로그인해 주세요.`,unauthorizedGeo:`지리적 위치 변경(거리 제한 초과)이 감지되어 현재 세션이 강제 종료되었습니다.`,unauthorizedExpired:`로그인 기간이 만료되었습니다. 다시 로그인해 주세요.`,unauthorizedReuse:`보안 경고: 중복 로그인이 감지되어 세션이 종료되었습니다.`,unauthorizedRevoked:`세션이 취소되거나 삭제되었습니다. 다시 로그인해 주세요.`,sessionLockTitle:`유휴 세션 잠금`,sessionLockDesc:`애플리케이션이 유휴 상태일 때 4자리 PIN으로 인터페이스를 잠궈 무단 물리적 접근으로부터 활성 세션을 보호합니다.`,enableSessionLock:`세션 잠금 활성화`,inactivityTimeout:`유휴 시간 제한`,timeout1m:`1분`,timeout2m:`2분`,timeout5m:`5분`,timeout15m:`15분`,timeout30m:`30분`,timeout60m:`60분`,changePin:`PIN 변경`,disablePin:`세션 잠금 비활성화`,configurePin:`PIN 설정`,newPin:`새 4자리 PIN`,pinHelper:`숫자만 입력, 예: 1234`,confirmPin:`새 PIN 확인`,verifyIdentity:`본인 인증`,usePassword:`비밀번호 사용`,use2fa:`TOTP 코드 사용`,totpCode:`TOTP 코드`,currentPassword:`현재 비밀번호`,disablePinWarning:`PIN을 비활성화하면 유휴 세션 잠금 기능이 완전히 해제됩니다.`,pinFormatTip:`PIN은 정확히 4자리여야 합니다`,pinMatchTip:`PIN이 일치하지 않습니다`,passwordRequired:`인증을 위해 비밀번호가 필요합니다`,sessionLocked:`유휴 상태로 인해 세션이 잠겼습니다`,sessionExpired:`실패 횟수가 너무 많습니다. 세션이 종료되었습니다.`,pinIncorrect:`올바르지 않은 PIN`,attemptsRemaining:`남은 시도 횟수: {{count}}회`,logoutAndReturn:`세션 로그아웃`,lockNow:`지금 잠금`,cfErrorWithDetails:`Cloudflare Edge 오류 (오류 {{code}}: {{desc}}). 서비스를 일시적으로 사용할 수 없습니다. 잠시 후 다시 시도해 주세요. {{rayId}}`,cfErrorCodeOnly:`Cloudflare Edge 오류 (오류 {{code}}). 서비스를 일시적으로 사용할 수 없습니다. {{rayId}}`,cfErrorGeneric:`Cloudflare Edge 오류가 발생했습니다. 잠시 후 다시 시도해 주세요. {{rayId}}`,htmlErrorGeneric:`서버에서 비정상적인 응답을 반환했습니다 (HTTP {{status}}). 잠시 후 다시 시도해 주세요.`,tooManyAttempts:`요청 또는 시도 횟수가 너무 많습니다. 잠시 후 다시 시도해 주세요.`,dbQuotaExceeded:`데이터베이스 일일 읽기 할당량이 초과되었습니다. 일일 재설정을 기다려 주세요.`,noUsersRegistered:`등록된 계정이 없습니다. 관리자로 가입해 주세요.`,registerAdminTitle:`관리자 계정 등록`,registerAdminDesc:`시스템에 계정이 없습니다. 첫 번째 가입자가 시스템 관리자가 됩니다.`,goToRegisterAdmin:`관리자 등록`,dbNotInitialized:`데이터베이스가 초기화되지 않았거나 테이블이 없습니다. npm run db:migrate:prod 를 실행하세요.`,verifyWithPasskey:`패스키로 인증`,orUseTotp:`또는 인증 앱 코드 사용`,passwordRequiredFirst:`먼저 비밀번호를 입력해 주세요`,passkeyVerification:`패스키 인증`,passkeyPromptDesc:`등록된 생체 인식 또는 보안 키를 사용하여 인증`,forgotPassword:`비밀번호를 잊으셨나요?`,forgotPasswordTitle:`비밀번호 재설정`,forgotPasswordDesc:`다중 요소 인증(패스키 또는 인증 앱)을 사용하여 계정을 안전하게 복구합니다.`,noMfaContactAdmin:`이 계정에는 다중 요소 인증(Passkey 또는 TOTP)이 설정되어 있지 않아 직접 복구할 수 없습니다. 시스템 관리자에게 문의하세요.`,chooseMfaForReset:`본인 인증 방법을 선택하세요:`,authViaPasskey:`패스키로 인증`,authViaPasskeyDesc:`생체 인식 또는 보안 키를 사용한 원클릭 인증`,authViaTotp:`인증 앱 (TOTP)으로 인증`,authViaTotpDesc:`인증 앱에 표시된 6자리 동적 코드를 입력하세요`,authViaRecoveryKey:`비상 복구 키 사용`,authViaRecoveryKeyDesc:`10자리 비상 복구 키 입력`,verifyAndProceed:`인증 및 계속`,setNewPassword:`새 비밀번호 설정`,setNewPasswordDesc:`인증되었습니다. 계정에 사용할 새 비밀번호를 입력하세요.`,newPassword:`새 비밀번호`,confirmNewPassword:`새 비밀번호 확인`,passwordMismatch:`입력한 비밀번호가 일치하지 않습니다`,saveAndReset:`저장 및 재설정`,resetSuccessTitle:`비밀번호 재설정 완료`,resetSuccessDesc:`비밀번호가 업데이트되었으며 모든 기존 세션이 로그아웃되었습니다. 새 비밀번호로 다시 로그인하세요.`,goToLogin:`로그인으로 이동`,mfaSetupTitle:`계정 보안 강화`,mfaSetupDesc:`다중 요소 인증(MFA)을 구성하면 계정을 안전하게 보호하고 비밀번호 없는 로그인 및 비밀번호 복구가 가능해집니다.`,mfaRecommended:`추천`,passkeySignupDesc:`지문, 얼굴 인식 또는 보안 키를 사용하여 빠르고 안전하게 인증하세요.`,bindPasskeyNow:`지금 패스키 등록`,mfaUniversal:`범용`,totpSignupDesc:`Google Authenticator, 1Password 등의 앱을 사용하여 6자리 인증 코드를 생성합니다.`,setupTotpBtn:`인증 앱 설정`,skipMfaSetup:`지금은 건너뛰기`,backToMfaOptions:`옵션 선택으로 돌아가기`,otherOptions:`기타 옵션`,next:`다음`,mfaVerification:`다단계 인증 (MFA)`,totpPrompt:`인증 앱의 6자리 동적 코드를 입력하세요`,recoveryPrompt:`30자리 비상 복구 키(6자리 5개 그룹)를 입력하세요`,recoveryChecksumError:`체크섬 오류: 이 그룹의 6자리 숫자는 11로 나누어떨어지지 않습니다`,recoveryChecksumErrorDesc:`{{groups}}번째 그룹의 체크섬 오류입니다. 확인 후 다시 시도하세요`,backToPasskey:`Passkey 인증으로 돌아가기`,recoveryKeyRequired:`비상 복구 키를 입력하세요`,totpFormatError:`유효한 6자리 코드를 입력하세요`,registrationDisabledTitle:`회원가입 비활성화됨`,registrationDisabledDesc:`현재 신규 사용자 등록이 일시 중지되었습니다. 계정 발급은 시스템 관리자에게 문의하세요.`,backToLogin:`로그인으로 돌아가기`,jwtSecretPreset:`기본 JWT_SECRET이 감지되었습니다. 배포하기 전에 환경 변수에서 기본 JWT_SECRET을 수정한 후 다시 배포해 주세요.`,jwtSecretMissing:`JWT_SECRET이 누락되었습니다. 배포하기 전에 환경 변수에서 안전한 키를 설정해 주세요.`,jwtSecretInvalid:`JWT_SECRET 형식이 잘못되었습니다. 구성을 확인해 주세요.`,keepLoggedIn:`{{days}}일 동안 로그인 상태 유지`,orUseOtherMfa:`또는 다른 방법 사용`,totpUseRecovery:`복구 키 사용`,totpUseApp:`인증 앱 사용`,mfaMethodTotp:`인증 앱 (TOTP)`,invalidTotp:`잘못된 TOTP 인증 코드입니다. 다시 시도해 주세요.`},i={title:`설치 가이드`,subtitle:`장치를 설정하여 Obex DNS로 인터넷 보안을 관리하세요.`,regionOptimization:`접속 지역 최적화 (Windows)`,otherRegion:`기타 지역`,copied:`클립보드에 복사됨`,verifyConnection:`연결 확인`,verifying:`확인 중...`,connected:`연결됨`,notConnected:`미연결`,profileMatch:`이 설정으로 필터링되고 있습니다.`,profileMismatch:`Obex를 사용 중이지만 설정 ID가 일치하지 않습니다.`,verifyHint:`아래 설정을 완료한 후 버튼을 클릭하여 확인하세요.`,refreshStatus:`상태 새로고침`,egressIp:`송신 IP 주소`,currentLocation:`현재 위치`,edgeServer:`엣지 서버`,serverLocation:`서버 위치`,dohUrlTitle:`현재 설정의 DoH URL`,accessPointTitle:`접속용 DoH URL`,defaultAccessPointName:`장치-1`,moreAccessPoints:`액세스 포인트 추가 설정 ↗`,accessPointName:`액세스 포인트 이름`,accessPointToken:`액세스 토큰`,addAccessPoint:`새 액세스 포인트 추가`,renameAccessPoint:`이름 변경`,rotateToken:`토큰 재발급`,rotateTokenConfirmDesc:`토큰을 재발급하면 기존 토큰을 사용하는 모든 장치의 연결이 즉시 끊어집니다. 계속하시겠습니까?`,deleteAccessPoint:`삭제`,deleteAccessPointConfirm:`이 액세스 포인트를 삭제하시겠습니까?`,manageAccessPoints:`액세스 포인트 관리`,searchAccessPoints:`액세스 포인트 검색...`,accessPointNameExists:`액세스 포인트 이름이 이미 존재합니다`,accessPointCreated:`액세스 포인트가 성공적으로 생성되었습니다`,accessPointRenamed:`액세스 포인트 이름이 성공적으로 변경되었습니다`,accessPointDeleted:`액세스 포인트가 성공적으로 삭제되었습니다`,accessPointNameFormatTip:`액세스 포인트 이름 팁: 1-30자, 영문자, 숫자, 언더바, 하이픈만 허용`,accessPointLimitExceeded:`액세스 포인트 수가 상한에 도달했습니다 (최대 {{max}}개)`,tokenRotated:`액세스 토큰이 성공적으로 재발급되었습니다`,whatIsDoh:`DoH란 무엇인가요?`,dohDesc:`DNS over HTTPS(DoH)는 암호화된 HTTPS 프로토콜을 통해 도메인 이름을 해석하는 기술입니다.`,dohBenefit1:`통신 사업자 등 중간자에 의한 변조 및 도청을 방지합니다`,dohBenefit2:`도메인 이름 해석 및 인터넷 접속 보안을 향상시킵니다`,learnMore:`더 알아보기`,copyUrl:`URL 복사`,browsers:`브라우저`,browserTitle:`브라우저 설정 (Chrome/Edge)`,browserSteps:`설정 > 개인정보 보호 및 보안 > 보안 > 보안 DNS 사용 > 사용자 지정 > URL 붙여넣기.`,browserTips:`또는 이 주소를 주소창에 복사하십시오:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Apple 장치는 구성 프로파일을 사용하여 빠르게 설정할 수 있습니다.`,appleWarning:`「봉쇄 모드 (Lockdown Mode)」가 활성화된 경우 프로파일을 설치할 수 없습니다. 설치 전에 확인해 주십시오.`,downloadConfig:`구성 프로파일 다운로드`,appleInstallHint:`다운로드 후 「설정」>「다운로드된 프로파일」에서 설치를 완료하세요`,windows:`MS Windows`,windowsTitle:`Windows 11 구성`,windowsStep0:`설정 > 네트워크 및 인터넷`,windowsStep1:`속성 > DNS 서버 할당 > 편집 > 수동.`,windowsStep2:`다음 DNS IP를 선택하고 입력합니다:`,windowsStep3:`DoH(수동 템플릿)를 켜고 URL을 붙여넣습니다.`,windowsStep4:`「암호화되지 않은 연결로의 대체」를 끕니다.`,android:`Android`,androidTitle:`Android / 개인 DNS (DoT & DoQ)`,androidDesc:`시스템 기본 '프라이빗 DNS (DoT)' 또는 서드파티 앱을 통한 DoH 구성을 지원합니다.`,androidDotTitle:`개인 DNS (DoT / DoQ)`,androidDotDesc:`설정 > 네트워크 및 인터넷 > 개인 DNS > 개인 DNS 공급자 호스트 이름(최신 DoQ 클라이언트 지원):`,androidWildcardHint:`(와일드카드 인증서, 이 프로필로 라우팅)`,androidSingleDomainHint:`(단일 도메인 인증서, 기본 프로필로 라우팅)`,androidIpNotice:`현재 IP 또는 로컬 주소로 접속 중입니다. Android 프라이빗 DNS는 도메인 이름만 지원합니다. .env에 SERVERFULL_DOT_DOMAIN (예: dns.example.com)을 구성해 주세요.`,androidWarning:`참고: Android의 기본 '프라이빗 DNS'는 DoT 프로토콜을 사용합니다. Cloudflare Workers에 배포된 경우 Intra 등의 앱을 사용하여 DoH를 구성하세요. TLS 인증서가 구성된 Serverfull 모드에서 실행 중인 경우 위의 DoT 호스트 이름을 직접 사용할 수 있습니다.`,dynamicFromDomain:`동적 (다음에서 가져옴 "{{domain}}")`,dynamicFromDomainV6:`동적 IPv6 (다음에서 가져옴 "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (Cloudflared DoH 프록시)`,linuxDesc:`로컬에서 가벼운 DNS 프록시를 실행하여 DoH를 통해 요청을 암호화하고 Obex로 전달합니다.`,linuxStep1:`다음 스크립트를 실행하여 cloudflared를 설치하고 systemd 서비스를 생성합니다 (127.0.0.1:53 감시).`,linuxStep2:`시스템 DNS를 127.0.0.1로 변경합니다.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`라우터의 DoH 서버로 설정하면 네트워크의 모든 기기에서 이 리졸버를 사용할 수 있습니다.`,routerosStep1:`RouterOS 터미널에서 실행하세요 (RouterOS 7):`,routerosNote:`라우터가 전달한 쿼리는 개별 기기가 아닌 라우터로 로그에 표시됩니다. 기기별 로그가 필요하면 각 기기를 직접 설정하세요.`,routerosDocs:`MikroTik DNS 문서`,accessPointsCardTitle:`액세스 포인트`,currentAccessPoint:`현재 액세스 포인트`,selectAccessPointToConfigure:`구성할 액세스 포인트 선택`,quic:`QUIC & HTTP/3`,quicTitle:`DNS over QUIC (DoQ) & HTTP/3 (DoH3)`,quicDesc:`RFC 9250 (DNS over QUIC) 및 RFC 9460 (HTTP/3 & Encrypted Client Hello)을 기본 지원하며, 0-RTT 초고속 핸드셰이크와 SNI 엿보기 방지 기능을 제공합니다.`,doqTitle:`DNS over QUIC (DoQ - RFC 9250)`,doqAppHint:`AdGuard, Clash Meta (Mihomo), Sing-box 등 최신 클라이언트와 호환됩니다:`,doqWildcardHint:`(와일드카드 인증서, 이 프로필로 라우팅)`,doqSingleDomainHint:`(단일 도메인 인증서, 기본 프로필로 라우팅)`,doqIpNotice:`DoQ는 TLS 인증서와 유효한 도메인 이름이 필요합니다. .env에 SERVERFULL_DOT_DOMAIN을 설정한 후 새로고침하세요.`,h3Title:`HTTP/3 (DoH3) & ECH (Encrypted Client Hello)`,h3Desc:`최신 브라우저(Chrome/Firefox/Safari)는 Alt-Svc 및 RFC 9460 HTTPS 레코드를 통해 HTTP/3 및 ECH 암호화를 자동 협상합니다:`,ddrHint:`RFC 9460 섹션 8 DDR (Discovery of Designated Resolvers)이 통합되어 있어 클라이언트가 _dns 쿼리를 통해 DoQ/DoT 및 ECH로 자동 협상 및 업그레이드할 수 있습니다.`,e2eeDesc:`전용 양자내성 하이브리드 키(P256-MLKEM768)를 사용하여 엣지에서 즉시 DNS 로그를 암호화합니다. 클라우드에서는 볼 수 없으며 하드웨어 Passkey로 인증된 브라우저에서만 복호화됩니다.`,detecting:`감지 중...`,dotUnavailableCfTitle:`Cloudflare Worker 모드에서는 DoT / DoQ를 사용할 수 없음`,dotUnavailableCfDesc:`현재 Cloudflare Worker (Serverless) 모드로 실행 중입니다. 엣지 런타임 제약으로 인해 TCP/UDP 853 포트 수신 대기가 지원되지 않습니다. DoT 또는 DoQ를 사용하려면 Serverfull 모드로 배포하세요. 현재 모드에서는 DoH를 사용하세요.`},a={title:`사용자 지정 규칙`,subtitle:`특정 도메인의 해석 동작(차단, 허용 또는 리다이렉트)을 수동으로 제어합니다.`,action:`작업`,typeBlock:`차단 (BLOCK)`,typeAllow:`허용 (ALLOW)`,typeRedirect:`리다이렉트 (REDIRECT)`,pattern:`도메인 패턴 (Pattern)`,patternPlaceholder:`example.com 또는 *.test.com`,addRule:`규칙 추가`,redirectSettings:`리다이렉트 레코드 설정`,aRecord:`A 레코드 (IPv4)`,aaaaRecord:`AAAA 레코드 (IPv6)`,cnameRecord:`CNAME 레코드`,txtRecord:`TXT 레코드`,optional:`(선택 사항)`,ipv4Placeholder:`예: 1.2.3.4`,ipv6Placeholder:`예: 2001:db8::1`,cnamePlaceholder:`예: target.com`,txtPlaceholder:`텍스트 내용을 입력하세요...`,saveRedirectRule:`리다이렉트 규칙 저장 및 추가`,noRulesTitle:`사용자 지정 규칙 없음`,noRulesDesc:`추가된 수동 규칙이 없습니다.`,tableAction:`작업`,tablePattern:`패턴`,tableDetails:`해석 상세`,tableOps:`작업`,labelBlock:`차단`,labelAllow:`허용`,labelRedirect:`리다이렉트`,detailBlock:`다음으로 해석: `,detailAllow:`상류 서비스로 전달`,patternEmpty:`도메인 패턴은 비워 둘 수 없습니다`,duplicatePattern:`이 도메인의 규칙이 이미 존재합니다`,addSuccess:`규칙이 성공적으로 추가되었습니다`,addFailed:`규칙 추가 실패`,updateSuccess:`규칙이 성공적으로 업데이트되었습니다`,updateFailed:`규칙 업데이트 실패`,tableCreatedAt:`추가 시간`,clickToSort:`정렬하려면 클릭`,editRule:`규칙 편집`,cancel:`취소`,saveChanges:`변경 사항 저장`,delete:`삭제`,close:`닫기`},o={customRange:`사용자 지정 범위`,startTime:`시작 시간`,endTime:`종료 시간`,apply:`적용`,custom:`사용자 지정`,totalQueries:`총 쿼리 수`,blocked:`차단됨`,redirected:`리다이렉트됨`,blockRate:`차단율`,activeDevices:`활성 장치`,activeIPs:`활성 IP 주소`,queryTrend:`쿼리 트렌드`,noRecords:`이 기간 동안의 기록이 없습니다`,topAllowed:`자주 허용되는 도메인 (Allowed)`,topBlocked:`가장 많이 차단된 도메인 (Blocked)`,noData:`데이터 없음`,clientActivity:`클라이언트 활성도`,ipAddress:`IP 주소`,location:`위치`,queries:`쿼리 수`,destinationDistribution:`트래픽 목적지 분포`,requests:`요청`,topIsps:`주요 통신사`,pressToShowMore:`클릭하여 더 보기`,maximize:`최대화`,minimize:`최소화`,loading:`로딩 중...`},s={title:`쿼리 로그`,subtitle:`이 설정의 DNS 해석 로그와 차단 기록을 확인합니다.`,realtime:`실시간`,allStatus:`모든 상태`,onlyPass:`허용됨`,onlyBlock:`차단됨`,onlyRedirect:`리다이렉트됨`,searchPlaceholder:`도메인 검색...`,noResults:`결과를 찾을 수 없음`,noRecords:`기록 없음`,noResultsDesc:`"{{query}}"에 일치하는 도메인 기록이 없습니다.`,noRecordsDesc:`선택한 기간 동안 수신된 DNS 쿼리가 없습니다.`,tableTime:`시간`,tableDomain:`도메인`,tableAnswer:`해석 결과`,tableSource:`출처`,tableType:`유형`,tableStatus:`상태`,tableReason:`이유`,loadedAll:`총 {{count}}개의 기록을 로드했습니다`,realtimeLoadMoreTip:`더 많이 로드하려면 「실시간」 모드를 끄십시오`,filterAccessPoint:`액세스 포인트`,allAccessPoint:`모든 액세스 포인트`,allCountry:`모든 국가`,filterCountry:`목적지 국가`,allIsp:`모든 ISP`,filterIsp:`ISP`,timeRange:`시간 범위`,clearFilters:`필터 초기화`,details:`쿼리 상세`,detailAccessPoint:`액세스 포인트`,basicInfo:`기본 정보`,detailDomain:`도메인`,detailType:`유형`,detailTime:`시간`,detailLatency:`소요 시간`,detailProfile:`사용된 설정`,detailStatus:`상태`,detailUpstream:`상류 서버`,detailReason:`이유`,detailNoReason:`없음 (허용됨)`,detailECS:`ECS`,resolutionResult:`해석 결과`,noResult:`결과 없음`,networkDetails:`네트워크 상세`,clientSource:`클라이언트 (소스)`,destination:`목적지`,quickActions:`빠른 작업`,actionAllow:`허용`,actionBlock:`차단`,actionRedirect:`리다이렉트`,statusPass:`허용됨`,statusBlock:`차단됨`,statusRedirect:`리다이렉트됨`,export:`로그 내보내기`,rewritten:`재작성됨`,logDetails:`로그 상세 정보`,searchCountry:`국가 검색...`,noMatchingCountries:`일치하는 국가를 찾을 수 없습니다`,searchIsp:`통신사/ISP 검색...`,noMatchingIsps:`일치하는 통신사를 찾을 수 없습니다`,loadingIsps:`통신사 목록 불러오는 중...`,loggingDisabledTitle:`로그 기록이 비활성화되었습니다`,loggingDisabledDesc:`이 프로필의 로그 보존이 '비활성화'로 설정되었습니다. 쿼리 로그가 기록되지 않습니다. 로그를 보려면 설정에서 로그 보존을 활성화하세요.`,detailIsClientEncrypted:`클라이언트 암호화 여부`,encryptedLocked:`예 (잠김)`,encryptedDecrypted:`예 (로컬 복호화됨)`,encryptedYes:`예`,notEncrypted:`아니요`,encryptedRecord:`[암호화된 기록]`,exportSuccess:`로그 내보내기 성공`,exportError:`로그 내보내기 실패`},c={title:`외부 차단 리스트`,subtitle:`타사에서 유지 관리하는 도메인 차단 목록(예: AdGuard 등)을 구독합니다.`,formatDisclaimer:`본 시스템은 일부 AdGuard 형식 목록 및 순수 도메인 목록만 지원합니다. 기본적인 차단 규칙(예: ||example.com^)만 지원되며, "@@" 백리스트, "$" 재작성 규칙 및 "*" 와일드카드 규칙은 현재 무시됩니다. 하위 도메인은 자동으로 일치합니다.`,syncAll:`모든 목록 동기화`,urlPlaceholder:`차단 리스트 URL 입력...`,addSubscription:`구독 추가`,supportedFormats:`지원되는 목록 형식:`,formatAdGuard:`||domain.com^ 등의 필터링 규칙과 호환됩니다.`,formatHosts:`표준 hosts 파일과 호환됩니다 (예: 0.0.0.0 domain.com).`,noListsTitle:`목록 추가되지 않음`,noListsDesc:`구독 중인 외부 차단 목록이 없습니다.`,tableUrl:`목록 URL`,tableLastSync:`최근 동기화`,tableStatus:`상태`,tableOps:`작업`,neverSynced:`동기화된 적 없음`,enabled:`정상`,disabled:`동기화 실패`,statusNormal:`정상`,statusDisabled:`비활성화됨`,statusOutdated:`만료됨`,statusMissing:`누락됨`,presetOisdBig:`OISD Big (광고/악성코드 등 차단)`,presetOisdNsfw:`OISD NSFW (음란물/유해/성인 콘텐츠 차단)`,presetAdGuard:`AdGuard AdServers (광고 서버)`,presetStevenBlack:`StevenBlack Hosts (종합 차단)`,syncTaskStarted:`동기화 작업 시작`,syncCheckComplete:`동기화 확인 완료`,syncTaskFailed:`동기화 실패`,syncing:`동기화 중...`,syncSuccess:`동기화 성공`,syncError:`동기화 실패`,syncErrorDesc:`차단 목록을 다운로드하거나 해석할 수 없습니다. 링크가 올바른지, 정상적으로 접속 가능한지 확인해 주십시오.`,deleteConfirm:`구독을 삭제하시겠습니까?`,deleteSuccess:`목록이 성공적으로 삭제되었습니다`,deleteError:`목록 삭제 실패`,addSuccess:`목록이 성공적으로 추가되었습니다`,addError:`목록 추가 실패`,listEnabled:`목록 활성`,listEnabledHint:`삭제하지 않고 이 목록으로 필터링만 중단하려면 비활성화하세요. 구독 및 동기화 기록은 유지됩니다.`,listEnabledToast:`목록이 활성화되었습니다 - 필터 재구성 중`,listDisabledToast:`목록이 비활성화되었습니다 - 필터 재구성 중`,checkDomain:`도메인 확인`,checkDomainHint:`목록은 압축된 필터 형태로 저장되므로 항목을 열람할 수 없습니다. 원하는 도메인을 이 목록에 즉시 테스트할 수 있습니다.`,check:`확인`,checkBlocked:`이 목록에서 차단됨`,checkNotBlocked:`이 목록에서 차단되지 않음`,checkViaParent:`(상위 도메인에서 일치)`,checkNotSynced:`이 목록은 아직 동기화가 끝나지 않아 확인할 것이 없습니다.`,checkListDisabled:`이 목록은 현재 비활성화되어 있어 지금은 아무것도 필터링하지 않습니다.`,checkProbabilisticRate:`필터는 확률적입니다: 약 {{odds}}건 중 1건이 오탐입니다. 예외를 추가하면 모든 하위 도메인도 함께 적용됩니다.`,checkProbabilistic:`필터는 확률적이므로 일부 일치는 오탐입니다. 예외를 추가하면 모든 하위 도메인도 함께 적용됩니다.`,checkAllowAction:`그래도 허용`,checkAllowed:`예외가 추가되었습니다 - 이제 이 도메인이 확인됩니다`,allowRuleAdded:`{{domain}}에 대한 예외가 추가되었습니다`,listDetails:`목록 세부정보`},l={title:`구성 설정`,subtitle:`DNS 해석 정책 및 고급 옵션을 관리합니다.`,saveChanges:`모든 변경 사항 저장`,saveSuccess:`설정이 성공적으로 저장되었습니다`,saveError:`설정 저장 실패, 나중에 다시 시도하세요`,upstreamTitle:`상류 서비스`,dohUrl:`DoH URL`,dnsIP:`DNS IP`,classicDns:`기존 DNS`,httpsOnly:`HTTPS만 지원`,upstreamDesc:`차단되지 않은 모든 쿼리는 이 서버로 전달됩니다. DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) 또는 기존 DNS를 지원합니다. 기존 DNS는 TCP를 통해 전달됩니다.`,defaultPolicyTitle:`기본 필터링 동작`,onNoMatch:`일치하는 규칙이 없을 때`,allowAll:`모든 쿼리 허용`,blockAll:`모든 쿼리 차단`,logRetentionTitle:`로그 보존`,retentionDuration:`보존 기간`,retentionDesc:`로그는 자동으로 삭제됩니다. `,skipLogOnPass:`허용된 쿼리 기록하지 않기`,skipLogOnPassDesc:`활성화하면 정상적으로 허용된 쿼리는 기록되지 않으며, 차단, 리다이렉트 또는 실패한 쿼리만 저장됩니다.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`상류 서버로 전송되는 ECS 서브넷`,sendEcs:`ECS 제공`,customSubnet:`사용자 지정 서브넷`,customIpv4:`사용자 지정 IPv4 서브넷`,customIpv6:`사용자 지정 IPv6 서브넷`,ipv4Hint:`(예: 1.2.3.0/24)`,ipv6Hint:`(예: 2001:db8::/32)`,testToolTitle:`실시간 해석 테스트 도구`,testDomain:`테스트 도메인`,recordType:`레코드 유형`,runTest:`테스트 실행`,domainPlaceholder:`예: google.com`,hitRule:`일치 규칙 / 이유`,defaultAllow:`기본 허용 정책`,parseLatency:`해석 소요 시간`,sourceIp:`소스 IP 주소`,answerSection:`해석 결과 회신 (Answer Section)`,noRecordsReturned:`이 쿼리는 반환된 레코드가 없습니다.`,diagnostics:`진단 정보`,errorDetail:`오류 세부 정보`,upstreamResponse:`업스트림 응답 내용`,presetCloudflareSecurity:`Cloudflare Security (빠름/악성 및 피싱 도메인 제거)`,presetCloudflareFamilies:`Cloudflare Families (빠름/악성 및 성인 콘텐츠 제거)`,presetQuad9:`Quad9 (악성 도메인 제거/로그 없음/ECS 미제공)`,presetQuad9Ecs:`Quad9 ECS (악성 도메인 제거/로그 없음/ECS 제공)`,presetControlDFree:`ControlD Free (광고/추적/악성 및 피싱 도메인 제거)`,presetControlDUncensored:`ControlD Uncensored (검閲 우회)`,presetAdGuard:`AdGuard (광고/추적 제거)`,presetAdGuardFamily:`AdGuard Family protection (광고/추적/성인 콘텐츠 제거/안전 검색)`,retention10m:`10분`,retention1h:`1시간`,retention24h:`24시간`,retention7d:`7일`,retention30d:`30일`,retention90d:`90일(최대)`,blockModeTitle:`차단 응답 모드`,blockModeDesc:`도메인이 차단되었을 때 반환되는 내용`,default:`기본값`,NXDOMAIN:`NXDOMAIN (존재하지 않는 도메인)`,NODATA:`NODATA (레코드 없음)`,customIP:`사용자 지정 IP`,export:`설정 내보내기`,exportSuccess:`설정을 성공적으로 내보냈습니다`,exportError:`설정 내보내기 실패, 나중에 다시 시도하세요`,nameUpdateSuccess:`설정 이름이 업데이트되었습니다`,saving:`저장 중...`,echTitle:`ECH 재작성`,enableEch:`ECH 재작성 활성화`,echDesc:`Cloudflare 프록시 도메인에 대해 HTTPS(Type 65) / SVCB(Type 64) 쿼리 시 ECH 매개변수와 외부 SNI를 자동으로 재작성하여 프라이버시를 보호합니다.`,echFrontingTitle:`외부 SNI (ECH Fronting)`,echFrontingDesc:`TLS 핸드셰이크 외부에 표시되는 위장 도메인`,echFrontingCustomPlaceholder:`사용자 지정 프론팅 도메인 입력 (예: crypto.cloudflare.com)`,echPreferred:`권장`,whatIsEch:`ECH (Encrypted Client Hello)란 무엇인가요?`,echHelpDesc:`ECH는 실제 목적지 도메인(Inner SNI)을 완전히 암호화하고 네트워크 중간자에게는 위장 도메인(Outer SNI)만 노출하는 TLS 1.3의 핵심 보안 확장 기능입니다.`,echHelpBenefit1:`ISP나 중간자가 방문 중인 세부 하위 도메인을 감청하는 것을 방지`,echHelpBenefit2:`DoH와 결합하여 평문 SNI 노출 및 차단 위험 제거`,retentionDisabled:`비활성화 (개인 정보 보호)`,retentionDisabledDesc:`로그 기록이 비활성화되었습니다. 시스템은 DNS 쿼리 로그를 기록하지 않으며 기존 로그를 즉시 삭제합니다.`,localRetentionTitle:`로컬 저장소 및 보존`,localRetentionDuration:`로컬 보존 기간`,localRetentionDesc:`로그는 브라우저 로컬 SQLite 데이터베이스(OPFS)에 안전하게 영구 저장되어 초고속 검색을 제공하고 클라우드 비용을 절감합니다. 보존 기간이 지난 로컬 로그는 자동으로 삭제됩니다。`,localRetention30d:`30일`,localRetention90d:`90일 (권장)`,localRetention180d:`180일`,localRetention365d:`365일 (1년)`,localRetentionUnlimited:`무제한 (직접 삭제할 때까지)`,localEngineStorage:`저장소 엔진`,localEngineOpfs:`OPFS 영구 저장소`,localEngineMemory:`메모리 임시 저장소 (시크릿 모드)`,localCachedCount:`로컬 캐시 로그`,localCachedCountUnit:`{{count}}개 기록`,clearLocalData:`로컬 로그 지우기`,clearLocalDataConfirm:`이 프로필의 로컬 저장 로그를 모두 삭제하시겠습니까? (클라우드 로그는 유지됩니다)`,clearLocalDataSuccess:`로컬 로그가 삭제되었습니다`,clearLocalDataError:`로컬 로그 삭제 실패`,e2eeTitle:`로그 종단간 암호화 (E2EE)`,e2eeEnabled:`활성화됨`,e2eeDisabled:`비활성화됨`,e2eeDesc:`전용 양자내성 하이브리드 키(P256-MLKEM768)를 사용하여 엣지에서 즉시 DNS 로그를 암호화합니다. 클라우드에서는 볼 수 없으며 하드웨어 Passkey로 인증된 브라우저에서만 복호화됩니다.`,e2eePasskeyRequired:`종단간 암호화에는 Passkey(WebAuthn)가 필요합니다. 계정 설정에서 먼저 Passkey를 등록해 주세요.`,e2eeGoToAccount:`계정 설정으로 이동하여 Passkey 추가`,e2eeEnableSwitch:`로그 E2EE 암호화 활성화`,e2eeKeyType:`암호화 알고리즘`,e2eeDeviceState:`현재 기기 상태`,e2eeUnlocked:`이 기기에서 잠금 해제됨`,e2eeUnlockButton:`Passkey로 잠금 해제`,e2eeProtectedPasskeys:`인증된 Passkey 자격증명`,e2eeDevicesUnit:`개 기기`,e2eeEnableSuccess:`종단간 암호화가 활성화되었습니다`,e2eeEnableError:`종단간 암호화 활성화 실패`,e2eeDisableSuccess:`종단간 암호화가 비활성화되었습니다`,e2eeDisableError:`종단간 암호화 비활성화 실패`,e2eeUnlockSuccess:`개인키가 이 기기에서 성공적으로 잠금 해제되었습니다`,e2eeUnlockError:`Passkey 인증 실패`,e2eeDisableConfirm:`종단간 암호화를 비활성화하시겠습니까? 이후 생성되는 DNS 로그는 일반 텍스트로 저장됩니다.`,e2eeUnlockPrompt:`이 프로필은 E2EE가 적용되어 있습니다. Passkey로 인증하여 원본 로그를 확인하세요.`,e2eeUnlockNow:`암호화 로그 잠금 해제`,e2eeUnlockRecovery:`복구 키로 잠금 해제`,securityTitle:`보안 및 액세스`,rotateKeyTitle:`액세스 URL`,rotateKeyDesc:`이 프로필의 새 액세스 URL을 생성합니다. 이전 URL을 사용하는 모든 기기는 즉시 DNS Worker와의 연결이 끊어지며 새 URL로 재구성해야 합니다.`,rotateKeyBtn:`URL 순환 교체`,copied:`클립보드에 복사됨`,nameUpdateFailed:`업데이트 실패`},u=JSON.parse(`{"title":"계정 설정","subtitle":"보안 자격 증명 및 시스템 사용자를 관리합니다.","e2ee":{"title":"종단간 암호화 (E2EE)","desc":"하드웨어 Passkey 기반 클라이언트 측 양자내성 하이브리드 암호화(P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) 엔벨로프 암호화를 사용합니다. 엣지에서 즉시 암호화되며 서버에는 암호문만 저장됩니다. 복호화는 승인된 기기에서만 로컬로 수행됩니다.","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"양자 내성 암호(PQC)로 업그레이드","upgradePqcSuccess":"양자 내성 하이브리드 암호화(P256-MLKEM768)로 업그레이드되었습니다","upgradePqcError":"양자 내성 암호화로 업그레이드하지 못했습니다","enabled":"활성화됨","disabled":"비활성화됨","passkeyRequired":"종단간 암호화에는 하드웨어 Passkey(WebAuthn)가 필요합니다. 상단 MFA 설정에서 먼저 Passkey를 등록해 주세요.","scopesTitle":"암호화 데이터 범위","scopesSubtitle":"하드웨어 Passkey로 종단간 암호화할 데이터 범주를 선택하세요.","scopeLogsTitle":"DNS 쿼리 로그","scopeLogsDesc":"D1에 저장되기 전 엣지에서 도메인, 클라이언트 IP, 응답 레코드 및 업스트림 지연 시간을 암호화합니다.","scopeRulesTitle":"사용자 지정 규칙 및 리디렉션","scopeRulesDesc":"클라이언트 측에서 암호화된 사용자 지정 차단/허용 규칙 및 리디렉션 구성입니다.","scopeClientsTitle":"클라이언트 기기 메타데이터","scopeClientsDesc":"액세스 포인트 기기 이름, IP 별칭 및 네트워크 토폴로지 메타데이터입니다.","statusActive":"보호됨","statusPlanned":"예정됨","profileSelect":"프로필 구성","keyType":"암호화 알고리즘","deviceState":"현재 기기 상태","unlocked":"이 기기에서 잠금 해제됨","unlockButton":"Passkey 인증으로 잠금 해제","protectedPasskeys":"승인된 Passkey 자격 증명","devicesUnit":"개 자격 증명","enableSuccess":"종단간 암호화가 성공적으로 활성화되었습니다","enableError":"종단간 암호화 활성화 실패","disableSuccess":"종단간 암호화가 비활성화되었습니다","disableError":"종단간 암호화 비활성화 실패","unlockSuccess":"이 기기에서 개인 키가 성공적으로 잠금 해제되었습니다","unlockError":"Passkey 인증 및 잠금 해제 실패","disableConfirm":"이 프로필의 종단간 암호화를 비활성화하시겠습니까? 향후 생성되는 로그는 일반 텍스트로 저장됩니다. (기존 암호화 로그 복호화에는 여전히 개인 키가 필요합니다)","noKeypairTitle":"종단간 암호화 키 쌍이 초기화되지 않음","noKeypairDesc":"종단간 암호화를 위해 계정 전용 양자내성(P256-MLKEM768) 키 쌍 생성이 필요합니다. 개인 키는 패스키 또는 복구 키를 통한 봉투 암호화로 보호되어 서버에서 로그를 복호화할 수 없습니다.","initPasskeyBtn":"기존 패스키 인증으로 키 쌍 생성","addPasskeyBtn":"하드웨어 암호화 지원을 위한 패스키 추가","initRecoveryBtn":"복구 키로 키 쌍 생성","initWithRecoveryTitle":"복구 키로 키 쌍 생성","initWithRecoveryDesc":"현재 30자리 비상 복구 키를 입력하세요. 시스템이 로컬에서 양자내성(P256-MLKEM768) 키 쌍을 생성합니다. 사용 후 복구 키는 즉시 자동 교체됩니다.","keypairGenSuccess":"종단간 암호화 키 쌍이 성공적으로 생성되었습니다!","keypairGenError":"암호화 키 쌍 생성 실패","unlockRecoveryButton":"복구 키로 잠금 해제","unlockWithRecoveryTitle":"복구 키로 잠금 해제","unlockWithRecoveryDesc":"30자리 비상 복구 키를 입력하세요. 주의: 단일 사용 원칙에 따라 인증 완료 즉시 새 키로 자동 교체됩니다.","recoveryKeyInputLabel":"복구 키","unlockConfirm":"개인 키 잠금 해제","recoveryUnlockFailed":"유효하지 않은 복구 키이거나 복호화에 실패했습니다","generateKeypairBtn":"키 쌍 생성","enableSwitch":"쿼리 로그 종단간 암호화 활성화","enableSwitchDesc":"도메인 이름, 클라이언트 IP, 응답 레코드 및 업스트림 지연 시간을 에지에서 암호화한 후 클라우드 스토리지에 저장합니다.","trustBoundaryTitle":"보안 및 신뢰 경계 안내","trustBoundaryDesc":"모든 DNS 쿼리 트래픽은 조회 시 호스팅 서버(Cloudflare Workers 에지 노드 또는 자체 호스팅 런타임)를 필연적으로 거치며, 메모리에서 처리된 후 암호화되어 기록됩니다. 이 기능은 클라우드 데이터베이스(D1 / 영구 저장소)의 저장 데이터를 보호하기 위한 것이며, 요청을 전달 및 처리하는 호스팅 서버로부터 실시간 트래픽을 숨기지는 않습니다.","initFailed":"종단간 암호화 초기화 실패","lockDevice":"이 기기 잠금","lockSuccess":"잠겼습니다. 개인 키가 로컬 저장소에서 삭제되었습니다"},"jwtSecretWarningTitle":"보안 알림: 취약한 JWT 시크릿","jwtSecretWarningDesc":"현재 JWT_SECRET 길이가 32자 미만이어서 잠재적인 보안 위험이 있습니다. 봉투 암호화된 기존 TOTP 및 복구 키의 복호화가 가능하도록 JWT_SECRET을 교체하기 전에 KEK_v1 환경 변수를 먼저 구성하십시오.","roleAdmin":"시스템 관리자","roleUser":"사용자","personalInfo":"개인 정보","username":"사용자 이름","userId":"사용자 ID","changePassword":"비밀번호 변경","currentPassword":"현재 비밀번호","newPassword":"새 비밀번호","updatePassword":"비밀번호 업데이트","userManagement":"사용자 관리 (관리자 전용)","createUser":"사용자 생성","role":"역할","createdAt":"생성 시간","lastActive":"최근 활동 시간","lastResolve":"최근 해석 시간","actions":"작업","dangerZone":"위험 구역","clearLogs":"모든 로그 지우기","clearLogsDesc":"계정에 등록된 모든 설정에서 발생한 쿼리 로그를 삭제합니다. 이 작업은 되돌릴 수 없습니다.","clearLogsBtn":"즉시 로그 지우기","deleteAccount":"회원 탈퇴","deleteAccountDesc":"계정 및 모든 관련 데이터를 영구적으로 삭제합니다. 모든 DNS 해석 설정을 잃게 됩니다.","deleteAccountBtn":"탈퇴 및 계정 삭제","createNewUser":"새 사용자 생성","initialPassword":"초기 비밀번호","userRole":"사용자 역할","cancel":"취소","createNow":"즉시 생성","formatTipUsername":"사용자 이름 형식 팁: 5~32자의 Unix 사용자 이름 형식","formatTipPassword":"비밀번호 형식 팁: 12-100자","passwordSuccess":"비밀번호가 성공적으로 변경되었습니다","updateFailed":"수정 실패","confirmDeleteUser":"이 사용자를 삭제하시겠습니까? 소유한 모든 설정도 제거됩니다.","confirmClearLogs":"계정 내 모든 설정의 쿼리 로그를 지우시겠습니까? 이 작업은 취소할 수 없습니다.","clearLogsSuccess":"로그가 성공적으로 지워졌습니다","confirmDeleteAccount":"경고: 정말 회원 탈퇴를 진행하고 본 계정을 삭제하시겠습니까?\\n\\n소유한 모든 DNS 설정, 사용자 지정 규칙 및 쿼리 로그가 영구적으로 삭제됩니다. 이 작업은 되돌릴 수 없습니다!","inactivityPolicy":"활동 정책","inactivityDesc":"사용자 개인 정보 보호 및 리소스 절약을 위해 30일 동안 DNS 조회 활동이 없는 계정의 모든 쿼리 로그 및 DNS 구성이 자동으로 삭제됩니다. 계정 자체는 90일 동안 로그인 활동이 없을 경우 삭제됩니다.","systemSettings":"시스템 설정 (관리자 전용)","adminOnlyView":"관리자만 볼 수 있음","featureToggle":"기능 토글","enableTurnstileSignup":"회원가입 페이지 보안 문자 활성화","enableTurnstileLogin":"로그인 페이지 보안 문자 활성화","totp":{"title":"인증 앱 (TOTP)","enabled":"활성화됨","disabled":"비활성화됨","setupDesc":"계정에 추가 보안 레이어를 추가합니다. Google Authenticator, Authy 또는 모든 TOTP 호환 앱을 사용하십시오.","setupBtn":"인증 앱 (TOTP) 설정","scanQR":"인증 앱을 사용하여 이 QR 코드를 스캔하세요:","orEnterManually":"또는 수동으로 키를 입력하세요:","enterCode":"확인을 위해 인증 앱 코드를 입력하세요:","enterCodeHint":"키가 올바르게 등록되었는지 확인하려면 6자리 코드를 입력하세요.","activate":"TOTP 활성화","skipPassword":"비밀번호 건너뛰기 — 로그인 시 TOTP 코드만 입력 (비밀번호 입력 생략)","disable":"인증 앱 (TOTP) 비활성화","disableTitle":"인증 앱 (TOTP) 비활성화","disableWarning":"TOTP를 비활성화하면 패스키가 설정되어 있지 않은 경우 계정이 비밀번호로만 보호됩니다.","confirmDisable":"TOTP 비활성화","recoveryKeysTitle":"복구 키를 저장해 주십시오","recoveryKeysWarning":"복구 키를 안전한 곳(비밀번호 관리 앱 등)에 보관하십시오. 각 키는 단 한 번만 사용할 수 있습니다.","copyKeys":"모든 키 복사","copied":"복사 완료!","done":"완료 (키를 저장했습니다)","activeDesc":"인증 앱(TOTP)이 활성화되어 6자리 확인 코드를 생성하고 있습니다.","invalidCode":"6자리 코드를 입력하세요"},"activity":{"title":"계정 활동 기록","action":"이벤트","time":"시간","ip":"IP 주소","session":"세션","empty":"활동 기록이 없습니다.","loadMore":"더 보기","signup":"가입","loginSuccess":"로그인 성공","loginFail":"로그인 실패","logout":"로그아웃","pwChangeSuccess":"비밀번호 변경 성공","pwChangeFail":"비밀번호 변경 실패","totpVerifySuccess":"TOTP 인증 성공","totpVerifyFail":"TOTP 인증 실패","totpSetup":"TOTP 인증 앱 설정","totpRemoved":"TOTP 인증 앱 제거","recoveryKeyUsed":"복구 키 사용됨","sessionRevoked":"세션 취소됨","reasons":{"user_active":"수동 로그아웃","user_revoke":"세션 취소","expired":"세션 만료됨","geolocation_mismatch":"지리적 위치 불일치 (원격 액세스 제한)","geolocation_missing":"지리적 위치 정보 누락","token_reuse":"토큰 재사용 (보안 경고)"},"passkeyRegistered":"패스키 등록","passkeyDeleted":"패스키 삭제","passkeyVerifySuccess":"패스키 인증 성공","passkeyVerifyFail":"패스키 인증 실패","recoveryKeyRotated":"비상 복구 키 순환됨","device":"기기"},"sessions":{"title":"활성 세션","session":"세션","device":"기기","ip":"IP 주소","loginTime":"로그인 시간","expires":"만료 시간","action":"작업","current":"현재","revoke":"취소","revokeFailed":"세션을 취소하지 못했습니다.","empty":"활성 세션을 찾을 수 없습니다.","unknownDevice":"알 수 없는 기기","revokeOthers":"다른 세션 취소","confirmRevokeOthers":"다른 세션 취소","revokeOthersConfirmText":"다른 모든 활성 세션을 취소하시겠습니까? 현재 장치를 제외한 모든 로그인된 장치에서 즉시 로그아웃됩니다."},"passkey":{"title":"패스키 (Passkey)","addBtn":"패스키 추가","desc":"생체 인식(Touch ID, Face ID, Windows Hello) 또는 보안 키(YubiKey)를 사용하여 빠르고 피싱에 강한 다단계 인증을 수행하세요.","empty":"추가된 패스키가 없습니다.","addTitle":"패스키 추가","nameLabel":"패스키 이름","namePlaceholder":"예: my_passkey","promptNotice":"계속을 클릭하면 브라우저에 생체 인식 또는 보안 키 등록을 완료하라는 메시지가 표시됩니다.","continue":"계속","renameTitle":"패스키 이름 바꾸기","deleteTitle":"패스키 삭제","deleteConfirm":"패스키 \\"{{name}}\\"을(를) 삭제하시겠습니까? 삭제 후에는 다단계 인증에 사용할 수 없습니다.","defaultName":"패스키","notSupported":"브라우저 또는 현재 환경이 패스키(WebAuthn)를 지원하지 않습니다.","regFailed":"패스키 등록 실패","count":"{{count}}개 구성됨","none":"구성되지 않음","created":"추가 일시","lastUsed":"마지막 사용","neverUsed":"사용 이력 없음","updated":"패스키가 성공적으로 업데이트되었습니다","registered":"패스키가 성공적으로 등록되었습니다","deleted":"패스키 삭제됨","appNameLabel":"도메인","appNameHelper":"패스키가 이 도메인에 바인딩됩니다","formatTip":"패스키 이름 팁: 1-30자, 영문자, 숫자, 언더바, 하이픈만 허용","verifyPrompt":"기기의 생체 인식(지문, 얼굴, Windows Hello) 또는 보안 키를 사용하여 인증하세요.","changePwNotice":"제출 시 패스키 생체 인증 또는 보안 키 확인이 요청됩니다.","submitNotice":"제출 시 패스키 생체 인증 또는 보안 키 확인이 요청됩니다."},"mfaNone":"없음","resetUserPassword":"비밀번호 재설정","resetPasswordTitle":"사용자 비밀번호 재설정","resetPasswordWarning":"재설정 후 해당 사용자의 모든 활성 세션이 즉시 만료됩니다.","resetPasswordSuccess":"비밀번호가 성공적으로 재설정되었습니다. 활성 세션이 종료되었습니다.","confirmReset":"재설정 확인","mfa":{"title":"다중 요소 인증 (MFA)","enabled":"구성됨","notConfigured":"구성되지 않음","desc":"패스키(Passkey)와 인증 앱(TOTP) 모두 MFA 인증 방식으로 사용할 수 있습니다. 최소 하나를 설정하여 계정을 보호하세요.","passwordlessTitle":"비밀번호 없는 로그인","passwordlessDesc":"활성화하면 비밀번호 입력 없이 패스키 또는 TOTP로 직접 신원을 확인합니다.","unconfiguredHint":"아직 MFA 방식이 설정되지 않았습니다. 아래에서 패스키나 인증 앱을 설정하세요.","password":"비밀번호","passkey":"패스키 (Passkey)","totp":"인증 앱 (TOTP)"},"recoveryKey":{"title":"비상 복구 키","desc":"비상 복구 키를 사용하면 등록된 모든 패스키 또는 인증기를 분실한 경우 계정에 다시 접근하거나 비밀번호를 재설정할 수 있습니다. 영지식(Zero-Knowledge) 보안을 위해 복구 키는 단방향 암호화 해시로 저장되며 웹에서 일반 텍스트로 조회할 수 없습니다. 1회 사용 시 즉시 자동 교체됩니다.","configured":"구성됨","notConfigured":"구성되지 않음","rotateBtn":"복구 키 교체","yourKey":"30자리 비상 복구 키","securityTip":"이 키를 안전하게 보관하세요. 이 키를 아는 사람은 누구나 귀하의 계정에 접근할 수 있습니다.","rotateConfirm":"복구 키를 교체하면 현재 키는 즉시 무효화됩니다. 본인 인증은 기존 패스키 또는 원래 복구 키로만 가능합니다. 계속하시겠습니까?","confirmRotateBtn":"교체 진행","rotateVerifyTitle":"복구 키 교체를 위한 본인 인증","rotateSuccess":"복구 키가 성공적으로 교체되었습니다! 새 키를 즉시 안전한 곳에 보관하세요.","oneWayHash":"단방향 암호화 해시","oneWayTooltip":"SHA-256 단방향 암호화 해시로 보호됩니다. 서버에는 일반 텍스트가 저장되지 않으며 복호화할 수 없습니다.","newKeyGenerated":"새로운 30자리 복구 키가 생성되었습니다 (지금 저장하세요)","oneWayWarning":"주의: 이 키는 한 번만 표시됩니다! 서버에는 되돌릴 수 없는 해시만 저장되므로 반드시 복사하여 오프라인에 안전하게 보관하세요.","autoRotatedTitle":"복구 키가 자동으로 교체되었습니다","autoRotatedNotice":"단일 사용 규칙에 따라 이전 키는 무효화되었으며 새로운 30자리 키가 생성되었습니다. 지금 즉시 복사하여 안전하게 오프라인에 보관하세요!","savedAndClose":"안전하게 저장함 및 계속","savedAndContinue":"안전하게 저장함 및 대시보드로 이동","descOneWay":"비상 복구 키는 모든 패스키 또는 인증 앱을 분실했을 때 계정 액세스를 복구하고 E2EE 데이터를 복호화할 수 있는 유일한 자격 증명입니다. 제로 지식 보안을 보장하기 위해 단방향 비가역 해시로 저장되며 웹에서 일반 텍스트로 볼 수 없습니다. 원래 복구 키 또는 기존 패스키를 사용해서만 교체할 수 있습니다. 키를 사용하면 즉시 자동으로 순환 교체됩니다.","keyRequired":"복구 키를 입력하세요","verifyBtn":"복구 키","verifyPromptLabel":"원래 복구 키 (Original Recovery Key)"},"verifyIdentity":"보안 본인 확인","verifyIdentityDesc":"계정 보안을 위해 계속 진행하기 전에 본인 확인을 완료하세요.","usePasskeyInstead":"패스키로 인증","changePasswordWithPasskey":"패스키 인증 후 비밀번호 변경","enableRegistration":"신규 사용자 가입 허용","timezone":"시간대","timezoneAuto":"자동 (브라우저 기본값)","totpCode":"인증 코드"}`),d={item1Title:`Obex 보호 DNS`,item1Desc:`속도와 보안을 위해 설계된 Cloudflare Workers & D1 기반의 DNS 리졸버입니다.`,item2Title:`DoH 개인정보 보호`,item2Desc:`DNS over HTTPS (RFC 8484) 암호화 터널을 통해 통신사의 위변조를 방지하고 개인정보를 보호합니다.`,item3Title:`글로벌 에지 네트워크`,item3Desc:`Cloudflare의 방대한 에지 네트워크를 활용하여 초고속 해석 및 최저 레이턴시 경험을 제공합니다.`,item4Title:`정밀한 필터링`,item4Desc:`화이트리스트/블랙리스트, AdGuard 규칙 및 사용자 지정 DNS 레코드 리다이렉트를 지원합니다.`,item5Title:`실시간 통계 분석`,item5Desc:`상세한 쿼리 로그와 종합적인 통계 대시보드를 통해 네트워크 상태를 한눈에 보여줍니다.`,item6Title:`현대적인 UI 및 다크 모드`,item6Desc:`엔지니어와 가정용 사용자를 위해 설계된, Palantir의 Blueprint UI 기반 고밀도 관리 패널입니다.`,item7Title:`클라우드 네이티브 인프라`,item7Desc:`서버리스 아키텍처로 제로 유지보수와 무제한 확장성을 보장합니다.`,item8Title:`여러 설정 관리`,item8Desc:`기기나 네트워크 환경에 따라 여러 개의 독립적인 DNS 설정 프로필을 생성하고 관리할 수 있습니다.`,item9Title:`여러 액세스 포인트 관리`,item9Desc:`기기마다 전용 DNS 액세스 포인트를 구성하여 로그 및 통계 데이터의 정밀한 격리 분석이 가능합니다.`},f={title:`DNS Worker 설정 및 배포 가이드`,subtitle:`인스턴스가 아직 완전히 구성되지 않았습니다. DNS Worker를 활성화하려면 아래 단계를 완료하세요.`,dbStatus:`D1 데이터베이스 바인딩 (env.DB)`,jwtStatus:`JWT 비밀 키 (env.JWT_SECRET)`,configured:`구성됨`,missing:`누락됨 / 구성되지 않음`,refresh:`새로고침 및 확인`,methodCli:`CLI 배포`,methodDash:`Cloudflare 대시보드 배포`,copy:`복사`,copied:`복사 완료!`,stepDbTitle:`1. D1 데이터베이스 바인딩`,stepDbDesc:`D1 데이터베이스를 생성하고 Worker에 바인딩합니다. 터미널에서 다음을 실행하세요:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`출력된 D1 데이터베이스 상세 정보를 복사하여 wrangler.toml의 [[d1_databases]] 아래에 붙여넣습니다:`,stepDbCommand2:`[[d1_databases]]
|
|
1
|
+
const e={account:`계정`,logout:`로그아웃`,selectProfile:`설정 선택`,add:`추가`,newProfileName:`새 설정 이름...`,profileNameFormatTip:`설정 이름 팁: 1-30자, 기존 설정과 중복되지 않는 이름이어야 합니다`,profileLimitExceeded:`설정 수가 상한에 도달했습니다 (최대 {{max}}개)`,profileNameExists:`해당 설정 이름이 이미 존재합니다`,profileNameFormatError:`설정 이름 형식이 올바르지 않습니다`,create:`생성`,welcome:`환영합니다`,createProfileToStart:`시작하려면 설정을 생성하세요.`,loading:`로드 중...`,errorNetwork:`네트워크 오류`,confirmDelete:`이 설정을 삭제하시겠습니까?`,confirmLogout:`로그아웃하시겠습니까?`,notFound:`404 - 페이지를 찾을 수 없음`,notFoundDesc:`요청하신 페이지가 존재하지 않거나 이동되었습니다.`,backToHome:`홈으로 돌아가기`,apac:`아시아 태평양`,mainlandChina:`중국 본토`,HongKong:`홍콩`,Singapore:`싱가포르`,Tokyo:`도쿄`,NorthAmerica:`북미`,nae:`북미 동부`,naw:`북미 서부`,eu:`유럽`,invalidFormat:`유효하지 않은 파일 형식`,import:`가져오기`,importSuccess:`설정을 성공적으로 가져왔습니다`,importError:`설정 가져오기 실패, 형식을 확인하고 나중에 다시 시도하세요`,save:`저장`,saveSuccess:`설정이 저장되었습니다`,close:`닫기`,cancel:`취소`,continue:`계속`,back:`뒤로`,copy:`복사`,copied:`복사됨`,copyKey:`새 복구 키 복사`,confirm:`확인`,delete:`삭제`,rename:`이름 바꾸기`,disable:`비활성화`,confirmDisable:`비활성화 확인`,modeServerfull:`Serverfull 모드`,modeCloudflare:`Cloudflare Worker 모드`},t={setup:`설치`,rules:`규칙`,stats:`통계`,logs:`로그`,filter:`필터링`,settings:`설정`},n={light:`라이트 모드`,dark:`다크 모드`,system:`시스템 설정 적용`},r={login:`DNS Worker 로그인`,signup:`계정을 생성하여 시작하기`,welcomeBack:`다시 오신 것을 환영합니다, 자격 증명을 입력하세요`,protectInternet:`인터넷의 첫 번째 단계를 보호합니다`,error:`오류`,username:`사용자 이름`,usernamePlaceholder:`사용자 이름`,password:`비밀번호`,passwordPlaceholder:`비밀번호`,loginBtn:`로그인`,signupBtn:`회원가입`,totpVerification:`TOTP 인증`,noAccount:`계정이 없으신가요? 회원가입`,haveAccount:`이미 계정이 있으신가요? 로그인으로 돌아가기`,formatTipUsername:`사용자 이름 형식 팁: 5~32자의 Unix 사용자 이름 형식(소문자 또는 언더바로 시작하고 소문자, 숫자, 언더바, 하이픈만 포함)`,formatTipPassword:`비밀번호 형식 팁: 12-100자`,authFailed:`인증 실패, 사용자 이름 또는 비밀번호를 확인하세요`,networkError:`네트워크 오류, 나중에 다시 시도하세요`,turnstileRequired:`보안 문자를 완료하십시오`,turnstileError:`인증 서비스 로드 실패, Site Key 또는 도메인 설정을 확인하세요`,verifying:`보안 확인 중...`,passwordLeaked:`이 비밀번호는 유출되었을 수 있습니다. 계정 보안을 위해 무작위 비밀번호 또는 강력한 비밀번호를 사용하세요.`,usernameExists:`이 사용자 이름은 이미 등록되어 있습니다. 다른 사용자 이름을 시도해 보세요.`,skip:`건너뛰기`,showPassword:`비밀번호 표시`,hidePassword:`비밀번호 숨기기`,geolocationRequired:`지리적 위치 정보를 가져오지 못했습니다. 다시 시도하십시오.`,unauthorizedDefault:`로그인 세션이 만료되었습니다. 다시 로그인해 주세요.`,unauthorizedGeo:`지리적 위치 변경(거리 제한 초과)이 감지되어 현재 세션이 강제 종료되었습니다.`,unauthorizedExpired:`로그인 기간이 만료되었습니다. 다시 로그인해 주세요.`,unauthorizedReuse:`보안 경고: 중복 로그인이 감지되어 세션이 종료되었습니다.`,unauthorizedRevoked:`세션이 취소되거나 삭제되었습니다. 다시 로그인해 주세요.`,sessionLockTitle:`유휴 세션 잠금`,sessionLockDesc:`애플리케이션이 유휴 상태일 때 4자리 PIN으로 인터페이스를 잠궈 무단 물리적 접근으로부터 활성 세션을 보호합니다.`,enableSessionLock:`세션 잠금 활성화`,inactivityTimeout:`유휴 시간 제한`,timeout1m:`1분`,timeout2m:`2분`,timeout5m:`5분`,timeout15m:`15분`,timeout30m:`30분`,timeout60m:`60분`,changePin:`PIN 변경`,disablePin:`세션 잠금 비활성화`,configurePin:`PIN 설정`,newPin:`새 4자리 PIN`,pinHelper:`숫자만 입력, 예: 1234`,confirmPin:`새 PIN 확인`,verifyIdentity:`본인 인증`,usePassword:`비밀번호 사용`,use2fa:`TOTP 코드 사용`,totpCode:`TOTP 코드`,currentPassword:`현재 비밀번호`,disablePinWarning:`PIN을 비활성화하면 유휴 세션 잠금 기능이 완전히 해제됩니다.`,pinFormatTip:`PIN은 정확히 4자리여야 합니다`,pinMatchTip:`PIN이 일치하지 않습니다`,passwordRequired:`인증을 위해 비밀번호가 필요합니다`,sessionLocked:`유휴 상태로 인해 세션이 잠겼습니다`,sessionExpired:`실패 횟수가 너무 많습니다. 세션이 종료되었습니다.`,pinIncorrect:`올바르지 않은 PIN`,attemptsRemaining:`남은 시도 횟수: {{count}}회`,logoutAndReturn:`세션 로그아웃`,lockNow:`지금 잠금`,cfErrorWithDetails:`Cloudflare Edge 오류 (오류 {{code}}: {{desc}}). 서비스를 일시적으로 사용할 수 없습니다. 잠시 후 다시 시도해 주세요. {{rayId}}`,cfErrorCodeOnly:`Cloudflare Edge 오류 (오류 {{code}}). 서비스를 일시적으로 사용할 수 없습니다. {{rayId}}`,cfErrorGeneric:`Cloudflare Edge 오류가 발생했습니다. 잠시 후 다시 시도해 주세요. {{rayId}}`,htmlErrorGeneric:`서버에서 비정상적인 응답을 반환했습니다 (HTTP {{status}}). 잠시 후 다시 시도해 주세요.`,tooManyAttempts:`요청 또는 시도 횟수가 너무 많습니다. 잠시 후 다시 시도해 주세요.`,dbQuotaExceeded:`데이터베이스 일일 읽기 할당량이 초과되었습니다. 일일 재설정을 기다려 주세요.`,noUsersRegistered:`등록된 계정이 없습니다. 관리자로 가입해 주세요.`,registerAdminTitle:`관리자 계정 등록`,registerAdminDesc:`시스템에 계정이 없습니다. 첫 번째 가입자가 시스템 관리자가 됩니다.`,goToRegisterAdmin:`관리자 등록`,dbNotInitialized:`데이터베이스가 초기화되지 않았거나 테이블이 없습니다. npm run db:migrate:prod 를 실행하세요.`,verifyWithPasskey:`패스키로 인증`,orUseTotp:`또는 인증 앱 코드 사용`,passwordRequiredFirst:`먼저 비밀번호를 입력해 주세요`,passkeyVerification:`패스키 인증`,passkeyPromptDesc:`등록된 생체 인식 또는 보안 키를 사용하여 인증`,forgotPassword:`비밀번호를 잊으셨나요?`,forgotPasswordTitle:`비밀번호 재설정`,forgotPasswordDesc:`다중 요소 인증(패스키 또는 인증 앱)을 사용하여 계정을 안전하게 복구합니다.`,noMfaContactAdmin:`이 계정에는 다중 요소 인증(Passkey 또는 TOTP)이 설정되어 있지 않아 직접 복구할 수 없습니다. 시스템 관리자에게 문의하세요.`,chooseMfaForReset:`본인 인증 방법을 선택하세요:`,authViaPasskey:`패스키로 인증`,authViaPasskeyDesc:`생체 인식 또는 보안 키를 사용한 원클릭 인증`,authViaTotp:`인증 앱 (TOTP)으로 인증`,authViaTotpDesc:`인증 앱에 표시된 6자리 동적 코드를 입력하세요`,authViaRecoveryKey:`비상 복구 키 사용`,authViaRecoveryKeyDesc:`10자리 비상 복구 키 입력`,verifyAndProceed:`인증 및 계속`,setNewPassword:`새 비밀번호 설정`,setNewPasswordDesc:`인증되었습니다. 계정에 사용할 새 비밀번호를 입력하세요.`,newPassword:`새 비밀번호`,confirmNewPassword:`새 비밀번호 확인`,passwordMismatch:`입력한 비밀번호가 일치하지 않습니다`,saveAndReset:`저장 및 재설정`,resetSuccessTitle:`비밀번호 재설정 완료`,resetSuccessDesc:`비밀번호가 업데이트되었으며 모든 기존 세션이 로그아웃되었습니다. 새 비밀번호로 다시 로그인하세요.`,goToLogin:`로그인으로 이동`,mfaSetupTitle:`계정 보안 강화`,mfaSetupDesc:`다중 요소 인증(MFA)을 구성하면 계정을 안전하게 보호하고 비밀번호 없는 로그인 및 비밀번호 복구가 가능해집니다.`,mfaRecommended:`추천`,passkeySignupDesc:`지문, 얼굴 인식 또는 보안 키를 사용하여 빠르고 안전하게 인증하세요.`,bindPasskeyNow:`지금 패스키 등록`,mfaUniversal:`범용`,totpSignupDesc:`Google Authenticator, 1Password 등의 앱을 사용하여 6자리 인증 코드를 생성합니다.`,setupTotpBtn:`인증 앱 설정`,skipMfaSetup:`지금은 건너뛰기`,backToMfaOptions:`옵션 선택으로 돌아가기`,otherOptions:`기타 옵션`,next:`다음`,mfaVerification:`다단계 인증 (MFA)`,totpPrompt:`인증 앱의 6자리 동적 코드를 입력하세요`,recoveryPrompt:`30자리 비상 복구 키(6자리 5개 그룹)를 입력하세요`,recoveryChecksumError:`체크섬 오류: 이 그룹의 6자리 숫자는 11로 나누어떨어지지 않습니다`,recoveryChecksumErrorDesc:`{{groups}}번째 그룹의 체크섬 오류입니다. 확인 후 다시 시도하세요`,backToPasskey:`Passkey 인증으로 돌아가기`,recoveryKeyRequired:`비상 복구 키를 입력하세요`,totpFormatError:`유효한 6자리 코드를 입력하세요`,registrationDisabledTitle:`회원가입 비활성화됨`,registrationDisabledDesc:`현재 신규 사용자 등록이 일시 중지되었습니다. 계정 발급은 시스템 관리자에게 문의하세요.`,backToLogin:`로그인으로 돌아가기`,jwtSecretPreset:`기본 JWT_SECRET이 감지되었습니다. 배포하기 전에 환경 변수에서 기본 JWT_SECRET을 수정한 후 다시 배포해 주세요.`,jwtSecretMissing:`JWT_SECRET이 누락되었습니다. 배포하기 전에 환경 변수에서 안전한 키를 설정해 주세요.`,jwtSecretInvalid:`JWT_SECRET 형식이 잘못되었습니다. 구성을 확인해 주세요.`,keepLoggedIn:`{{days}}일 동안 로그인 상태 유지`,orUseOtherMfa:`또는 다른 방법 사용`,totpUseRecovery:`복구 키 사용`,totpUseApp:`인증 앱 사용`,mfaMethodTotp:`인증 앱 (TOTP)`,invalidTotp:`잘못된 TOTP 인증 코드입니다. 다시 시도해 주세요.`},i={title:`설치 가이드`,subtitle:`장치를 설정하여 Obex DNS로 인터넷 보안을 관리하세요.`,regionOptimization:`접속 지역 최적화 (Windows)`,otherRegion:`기타 지역`,copied:`클립보드에 복사됨`,verifyConnection:`연결 확인`,verifying:`확인 중...`,connected:`연결됨`,notConnected:`미연결`,profileMatch:`이 설정으로 필터링되고 있습니다.`,profileMismatch:`Obex를 사용 중이지만 설정 ID가 일치하지 않습니다.`,verifyHint:`아래 설정을 완료한 후 버튼을 클릭하여 확인하세요.`,refreshStatus:`상태 새로고침`,egressIp:`송신 IP 주소`,currentLocation:`현재 위치`,edgeServer:`엣지 서버`,serverLocation:`서버 위치`,dohUrlTitle:`현재 설정의 DoH URL`,accessPointTitle:`접속용 DoH URL`,defaultAccessPointName:`장치-1`,moreAccessPoints:`액세스 포인트 추가 설정 ↗`,accessPointName:`액세스 포인트 이름`,accessPointToken:`액세스 토큰`,addAccessPoint:`새 액세스 포인트 추가`,renameAccessPoint:`이름 변경`,rotateToken:`토큰 재발급`,rotateTokenConfirmDesc:`토큰을 재발급하면 기존 토큰을 사용하는 모든 장치의 연결이 즉시 끊어집니다. 계속하시겠습니까?`,deleteAccessPoint:`삭제`,deleteAccessPointConfirm:`이 액세스 포인트를 삭제하시겠습니까?`,manageAccessPoints:`액세스 포인트 관리`,searchAccessPoints:`액세스 포인트 검색...`,accessPointNameExists:`액세스 포인트 이름이 이미 존재합니다`,accessPointCreated:`액세스 포인트가 성공적으로 생성되었습니다`,accessPointRenamed:`액세스 포인트 이름이 성공적으로 변경되었습니다`,accessPointDeleted:`액세스 포인트가 성공적으로 삭제되었습니다`,accessPointNameFormatTip:`액세스 포인트 이름 팁: 1-30자, 영문자, 숫자, 언더바, 하이픈만 허용`,accessPointLimitExceeded:`액세스 포인트 수가 상한에 도달했습니다 (최대 {{max}}개)`,tokenRotated:`액세스 토큰이 성공적으로 재발급되었습니다`,whatIsDoh:`DoH란 무엇인가요?`,dohDesc:`DNS over HTTPS(DoH)는 암호화된 HTTPS 프로토콜을 통해 도메인 이름을 해석하는 기술입니다.`,dohBenefit1:`통신 사업자 등 중간자에 의한 변조 및 도청을 방지합니다`,dohBenefit2:`도메인 이름 해석 및 인터넷 접속 보안을 향상시킵니다`,learnMore:`더 알아보기`,copyUrl:`URL 복사`,browsers:`브라우저`,browserTitle:`브라우저 설정 (Chrome/Edge)`,browserSteps:`설정 > 개인정보 보호 및 보안 > 보안 > 보안 DNS 사용 > 사용자 지정 > URL 붙여넣기.`,browserTips:`또는 이 주소를 주소창에 복사하십시오:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Apple 장치는 구성 프로파일을 사용하여 빠르게 설정할 수 있습니다.`,appleWarning:`「봉쇄 모드 (Lockdown Mode)」가 활성화된 경우 프로파일을 설치할 수 없습니다. 설치 전에 확인해 주십시오.`,downloadConfig:`구성 프로파일 다운로드`,appleInstallHint:`다운로드 후 「설정」>「다운로드된 프로파일」에서 설치를 완료하세요`,windows:`MS Windows`,windowsTitle:`Windows 11 구성`,windowsStep0:`설정 > 네트워크 및 인터넷`,windowsStep1:`속성 > DNS 서버 할당 > 편집 > 수동.`,windowsStep2:`다음 DNS IP를 선택하고 입력합니다:`,windowsStep3:`DoH(수동 템플릿)를 켜고 URL을 붙여넣습니다.`,windowsStep4:`「암호화되지 않은 연결로의 대체」를 끕니다.`,android:`Android`,androidTitle:`Android / 개인 DNS (DoT & DoQ)`,androidDesc:`시스템 기본 '프라이빗 DNS (DoT)' 또는 서드파티 앱을 통한 DoH 구성을 지원합니다.`,androidDotTitle:`개인 DNS (DoT / DoQ)`,androidDotDesc:`설정 > 네트워크 및 인터넷 > 개인 DNS > 개인 DNS 공급자 호스트 이름(최신 DoQ 클라이언트 지원):`,androidWildcardHint:`(와일드카드 인증서, 이 프로필로 라우팅)`,androidSingleDomainHint:`(단일 도메인 인증서, 기본 프로필로 라우팅)`,androidIpNotice:`현재 IP 또는 로컬 주소로 접속 중입니다. Android 프라이빗 DNS는 도메인 이름만 지원합니다. .env에 SERVERFULL_DOT_DOMAIN (예: dns.example.com)을 구성해 주세요.`,androidWarning:`참고: Android의 기본 '프라이빗 DNS'는 DoT 프로토콜을 사용합니다. Cloudflare Workers에 배포된 경우 Intra 등의 앱을 사용하여 DoH를 구성하세요. TLS 인증서가 구성된 Serverfull 모드에서 실행 중인 경우 위의 DoT 호스트 이름을 직접 사용할 수 있습니다.`,dynamicFromDomain:`동적 (다음에서 가져옴 "{{domain}}")`,dynamicFromDomainV6:`동적 IPv6 (다음에서 가져옴 "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (Cloudflared DoH 프록시)`,linuxDesc:`로컬에서 가벼운 DNS 프록시를 실행하여 DoH를 통해 요청을 암호화하고 Obex로 전달합니다.`,linuxStep1:`다음 스크립트를 실행하여 cloudflared를 설치하고 systemd 서비스를 생성합니다 (127.0.0.1:53 감시).`,linuxStep2:`시스템 DNS를 127.0.0.1로 변경합니다.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`라우터의 DoH 서버로 설정하면 네트워크의 모든 기기에서 이 리졸버를 사용할 수 있습니다.`,routerosStep1:`RouterOS 터미널에서 실행하세요 (RouterOS 7):`,routerosNote:`라우터가 전달한 쿼리는 개별 기기가 아닌 라우터로 로그에 표시됩니다. 기기별 로그가 필요하면 각 기기를 직접 설정하세요.`,routerosDocs:`MikroTik DNS 문서`,accessPointsCardTitle:`액세스 포인트`,currentAccessPoint:`현재 액세스 포인트`,selectAccessPointToConfigure:`구성할 액세스 포인트 선택`,quic:`QUIC & HTTP/3`,quicTitle:`DNS over QUIC (DoQ) & HTTP/3 (DoH3)`,quicDesc:`RFC 9250 (DNS over QUIC) 및 RFC 9460 (HTTP/3 & Encrypted Client Hello)을 기본 지원하며, 0-RTT 초고속 핸드셰이크와 SNI 엿보기 방지 기능을 제공합니다.`,doqTitle:`DNS over QUIC (DoQ - RFC 9250)`,doqAppHint:`AdGuard, Clash Meta (Mihomo), Sing-box 등 최신 클라이언트와 호환됩니다:`,doqWildcardHint:`(와일드카드 인증서, 이 프로필로 라우팅)`,doqSingleDomainHint:`(단일 도메인 인증서, 기본 프로필로 라우팅)`,doqIpNotice:`DoQ는 TLS 인증서와 유효한 도메인 이름이 필요합니다. .env에 SERVERFULL_DOT_DOMAIN을 설정한 후 새로고침하세요.`,h3Title:`HTTP/3 (DoH3) & ECH (Encrypted Client Hello)`,h3Desc:`최신 브라우저(Chrome/Firefox/Safari)는 Alt-Svc 및 RFC 9460 HTTPS 레코드를 통해 HTTP/3 및 ECH 암호화를 자동 협상합니다:`,ddrHint:`RFC 9460 섹션 8 DDR (Discovery of Designated Resolvers)이 통합되어 있어 클라이언트가 _dns 쿼리를 통해 DoQ/DoT 및 ECH로 자동 협상 및 업그레이드할 수 있습니다.`,e2eeDesc:`전용 양자내성 하이브리드 키(P256-MLKEM768)를 사용하여 엣지에서 즉시 DNS 로그를 암호화합니다. 클라우드에서는 볼 수 없으며 하드웨어 Passkey로 인증된 브라우저에서만 복호화됩니다.`,detecting:`감지 중...`,dotUnavailableCfTitle:`Cloudflare Worker 모드에서는 DoT / DoQ를 사용할 수 없음`,dotUnavailableCfDesc:`현재 Cloudflare Worker (Serverless) 모드로 실행 중입니다. 엣지 런타임 제약으로 인해 TCP/UDP 853 포트 수신 대기가 지원되지 않습니다. DoT 또는 DoQ를 사용하려면 Serverfull 모드로 배포하세요. 현재 모드에서는 DoH를 사용하세요.`},a={title:`사용자 지정 규칙`,subtitle:`특정 도메인의 해석 동작(차단, 허용 또는 리다이렉트)을 수동으로 제어합니다.`,action:`작업`,typeBlock:`차단 (BLOCK)`,typeAllow:`허용 (ALLOW)`,typeRedirect:`리다이렉트 (REDIRECT)`,pattern:`도메인 패턴 (Pattern)`,patternPlaceholder:`example.com 또는 *.test.com`,addRule:`규칙 추가`,redirectSettings:`리다이렉트 레코드 설정`,aRecord:`A 레코드 (IPv4)`,aaaaRecord:`AAAA 레코드 (IPv6)`,cnameRecord:`CNAME 레코드`,txtRecord:`TXT 레코드`,optional:`(선택 사항)`,ipv4Placeholder:`예: 1.2.3.4`,ipv6Placeholder:`예: 2001:db8::1`,cnamePlaceholder:`예: target.com`,txtPlaceholder:`텍스트 내용을 입력하세요...`,saveRedirectRule:`리다이렉트 규칙 저장 및 추가`,noRulesTitle:`사용자 지정 규칙 없음`,noRulesDesc:`추가된 수동 규칙이 없습니다.`,tableAction:`작업`,tablePattern:`패턴`,tableDetails:`해석 상세`,tableOps:`작업`,labelBlock:`차단`,labelAllow:`허용`,labelRedirect:`리다이렉트`,detailBlock:`다음으로 해석: `,detailAllow:`상류 서비스로 전달`,patternEmpty:`도메인 패턴은 비워 둘 수 없습니다`,duplicatePattern:`이 도메인의 규칙이 이미 존재합니다`,addSuccess:`규칙이 성공적으로 추가되었습니다`,addFailed:`규칙 추가 실패`,updateSuccess:`규칙이 성공적으로 업데이트되었습니다`,updateFailed:`규칙 업데이트 실패`,tableCreatedAt:`추가 시간`,clickToSort:`정렬하려면 클릭`,editRule:`규칙 편집`,cancel:`취소`,saveChanges:`변경 사항 저장`,delete:`삭제`,close:`닫기`},o={customRange:`사용자 지정 범위`,startTime:`시작 시간`,endTime:`종료 시간`,apply:`적용`,custom:`사용자 지정`,totalQueries:`총 쿼리 수`,blocked:`차단됨`,redirected:`리다이렉트됨`,blockRate:`차단율`,activeDevices:`활성 장치`,activeIPs:`활성 IP 주소`,queryTrend:`쿼리 트렌드`,noRecords:`이 기간 동안의 기록이 없습니다`,topAllowed:`자주 허용되는 도메인 (Allowed)`,topBlocked:`가장 많이 차단된 도메인 (Blocked)`,noData:`데이터 없음`,clientActivity:`클라이언트 활성도`,ipAddress:`IP 주소`,location:`위치`,queries:`쿼리 수`,destinationDistribution:`트래픽 목적지 분포`,requests:`요청`,topIsps:`주요 통신사`,pressToShowMore:`클릭하여 더 보기`,maximize:`최대화`,minimize:`최소화`,loading:`로딩 중...`},s={title:`쿼리 로그`,subtitle:`이 설정의 DNS 해석 로그와 차단 기록을 확인합니다.`,realtime:`실시간`,allStatus:`모든 상태`,onlyPass:`허용됨`,onlyBlock:`차단됨`,onlyRedirect:`리다이렉트됨`,searchPlaceholder:`도메인 검색...`,noResults:`결과를 찾을 수 없음`,noRecords:`기록 없음`,noResultsDesc:`"{{query}}"에 일치하는 도메인 기록이 없습니다.`,noRecordsDesc:`선택한 기간 동안 수신된 DNS 쿼리가 없습니다.`,tableTime:`시간`,tableDomain:`도메인`,tableAnswer:`해석 결과`,tableSource:`출처`,tableType:`유형`,tableStatus:`상태`,tableReason:`이유`,loadedAll:`총 {{count}}개의 기록을 로드했습니다`,realtimeLoadMoreTip:`더 많이 로드하려면 「실시간」 모드를 끄십시오`,filterAccessPoint:`액세스 포인트`,allAccessPoint:`모든 액세스 포인트`,allCountry:`모든 국가`,filterCountry:`목적지 국가`,allIsp:`모든 ISP`,filterIsp:`ISP`,timeRange:`시간 범위`,clearFilters:`필터 초기화`,details:`쿼리 상세`,detailAccessPoint:`액세스 포인트`,basicInfo:`기본 정보`,detailDomain:`도메인`,detailType:`유형`,detailTime:`시간`,detailLatency:`소요 시간`,detailProfile:`사용된 설정`,detailStatus:`상태`,detailUpstream:`상류 서버`,detailReason:`이유`,detailNoReason:`없음 (허용됨)`,detailECS:`ECS`,resolutionResult:`해석 결과`,noResult:`결과 없음`,networkDetails:`네트워크 상세`,clientSource:`클라이언트 (소스)`,destination:`목적지`,quickActions:`빠른 작업`,actionAllow:`허용`,actionBlock:`차단`,actionRedirect:`리다이렉트`,statusPass:`허용됨`,statusBlock:`차단됨`,statusRedirect:`리다이렉트됨`,export:`로그 내보내기`,rewritten:`재작성됨`,logDetails:`로그 상세 정보`,searchCountry:`국가 검색...`,noMatchingCountries:`일치하는 국가를 찾을 수 없습니다`,searchIsp:`통신사/ISP 검색...`,noMatchingIsps:`일치하는 통신사를 찾을 수 없습니다`,loadingIsps:`통신사 목록 불러오는 중...`,loggingDisabledTitle:`로그 기록이 비활성화되었습니다`,loggingDisabledDesc:`이 프로필의 로그 보존이 '비활성화'로 설정되었습니다. 쿼리 로그가 기록되지 않습니다. 로그를 보려면 설정에서 로그 보존을 활성화하세요.`,detailIsClientEncrypted:`클라이언트 암호화 여부`,encryptedLocked:`예 (잠김)`,encryptedDecrypted:`예 (로컬 복호화됨)`,encryptedYes:`예`,notEncrypted:`아니요`,encryptedRecord:`[암호화된 기록]`,exportSuccess:`로그 내보내기 성공`,exportError:`로그 내보내기 실패`},c={title:`외부 차단 리스트`,subtitle:`타사에서 유지 관리하는 도메인 차단 목록(예: AdGuard 등)을 구독합니다.`,formatDisclaimer:`본 시스템은 일부 AdGuard 형식 목록 및 순수 도메인 목록만 지원합니다. 기본적인 차단 규칙(예: ||example.com^)만 지원되며, "@@" 백리스트, "$" 재작성 규칙 및 "*" 와일드카드 규칙은 현재 무시됩니다. 하위 도메인은 자동으로 일치합니다.`,syncAll:`모든 목록 동기화`,urlPlaceholder:`차단 리스트 URL 입력...`,addSubscription:`구독 추가`,supportedFormats:`지원되는 목록 형식:`,formatAdGuard:`||domain.com^ 등의 필터링 규칙과 호환됩니다.`,formatHosts:`표준 hosts 파일과 호환됩니다 (예: 0.0.0.0 domain.com).`,noListsTitle:`목록 추가되지 않음`,noListsDesc:`구독 중인 외부 차단 목록이 없습니다.`,tableUrl:`목록 URL`,tableLastSync:`최근 동기화`,tableStatus:`상태`,tableOps:`작업`,neverSynced:`동기화된 적 없음`,enabled:`정상`,disabled:`동기화 실패`,statusNormal:`정상`,statusDisabled:`비활성화됨`,statusOutdated:`만료됨`,statusMissing:`누락됨`,presetOisdBig:`OISD Big (광고/악성코드 등 차단)`,presetOisdNsfw:`OISD NSFW (음란물/유해/성인 콘텐츠 차단)`,presetAdGuard:`AdGuard AdServers (광고 서버)`,presetStevenBlack:`StevenBlack Hosts (종합 차단)`,syncTaskStarted:`동기화 작업 시작`,syncCheckComplete:`동기화 확인 완료`,syncTaskFailed:`동기화 실패`,syncing:`동기화 중...`,syncSuccess:`동기화 성공`,syncError:`동기화 실패`,syncErrorDesc:`차단 목록을 다운로드하거나 해석할 수 없습니다. 링크가 올바른지, 정상적으로 접속 가능한지 확인해 주십시오.`,deleteConfirm:`구독을 삭제하시겠습니까?`,deleteSuccess:`목록이 성공적으로 삭제되었습니다`,deleteError:`목록 삭제 실패`,addSuccess:`목록이 성공적으로 추가되었습니다`,addError:`목록 추가 실패`,listEnabled:`목록 활성`,listEnabledHint:`삭제하지 않고 이 목록으로 필터링만 중단하려면 비활성화하세요. 구독 및 동기화 기록은 유지됩니다.`,listEnabledToast:`목록이 활성화되었습니다 - 필터 재구성 중`,listDisabledToast:`목록이 비활성화되었습니다 - 필터 재구성 중`,checkDomain:`도메인 확인`,checkDomainHint:`목록은 압축된 필터 형태로 저장되므로 항목을 열람할 수 없습니다. 원하는 도메인을 이 목록에 즉시 테스트할 수 있습니다.`,check:`확인`,checkBlocked:`이 목록에서 차단됨`,checkNotBlocked:`이 목록에서 차단되지 않음`,checkViaParent:`(상위 도메인에서 일치)`,checkNotSynced:`이 목록은 아직 동기화가 끝나지 않아 확인할 것이 없습니다.`,checkListDisabled:`이 목록은 현재 비활성화되어 있어 지금은 아무것도 필터링하지 않습니다.`,checkProbabilisticRate:`필터는 확률적입니다: 약 {{odds}}건 중 1건이 오탐입니다. 예외를 추가하면 모든 하위 도메인도 함께 적용됩니다.`,checkProbabilistic:`필터는 확률적이므로 일부 일치는 오탐입니다. 예외를 추가하면 모든 하위 도메인도 함께 적용됩니다.`,checkAllowAction:`그래도 허용`,checkAllowed:`예외가 추가되었습니다 - 이제 이 도메인이 확인됩니다`,allowRuleAdded:`{{domain}}에 대한 예외가 추가되었습니다`,listDetails:`목록 세부정보`},l={title:`구성 설정`,subtitle:`DNS 해석 정책 및 고급 옵션을 관리합니다.`,saveChanges:`모든 변경 사항 저장`,saveSuccess:`설정이 성공적으로 저장되었습니다`,saveError:`설정 저장 실패, 나중에 다시 시도하세요`,upstreamTitle:`상류 서비스`,dohUrl:`DoH URL`,dnsIP:`DNS IP`,classicDns:`기존 DNS`,httpsOnly:`HTTPS만 지원`,upstreamDesc:`차단되지 않은 모든 쿼리는 이 서버로 전달됩니다. DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) 또는 기존 DNS를 지원합니다. 기존 DNS는 TCP를 통해 전달됩니다.`,defaultPolicyTitle:`기본 필터링 동작`,onNoMatch:`일치하는 규칙이 없을 때`,allowAll:`모든 쿼리 허용`,blockAll:`모든 쿼리 차단`,logRetentionTitle:`로그 보존`,retentionDuration:`보존 기간`,retentionDesc:`로그는 자동으로 삭제됩니다. `,skipLogOnPass:`허용된 쿼리 기록하지 않기`,skipLogOnPassDesc:`활성화하면 정상적으로 허용된 쿼리는 기록되지 않으며, 차단, 리다이렉트 또는 실패한 쿼리만 저장됩니다.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`상류 서버로 전송되는 ECS 서브넷`,sendEcs:`ECS 제공`,customSubnet:`사용자 지정 서브넷`,customIpv4:`사용자 지정 IPv4 서브넷`,customIpv6:`사용자 지정 IPv6 서브넷`,ipv4Hint:`(예: 1.2.3.0/24)`,ipv6Hint:`(예: 2001:db8::/32)`,testToolTitle:`실시간 해석 테스트 도구`,testDomain:`테스트 도메인`,recordType:`레코드 유형`,runTest:`테스트 실행`,domainPlaceholder:`예: google.com`,hitRule:`일치 규칙 / 이유`,defaultAllow:`기본 허용 정책`,parseLatency:`해석 소요 시간`,sourceIp:`소스 IP 주소`,answerSection:`해석 결과 회신 (Answer Section)`,noRecordsReturned:`이 쿼리는 반환된 레코드가 없습니다.`,diagnostics:`진단 정보`,errorDetail:`오류 세부 정보`,upstreamResponse:`업스트림 응답 내용`,presetCloudflareSecurity:`Cloudflare Security (빠름/악성 및 피싱 도메인 제거)`,presetCloudflareFamilies:`Cloudflare Families (빠름/악성 및 성인 콘텐츠 제거)`,presetQuad9:`Quad9 (악성 도메인 제거/로그 없음/ECS 미제공)`,presetQuad9Ecs:`Quad9 ECS (악성 도메인 제거/로그 없음/ECS 제공)`,presetControlDFree:`ControlD Free (광고/추적/악성 및 피싱 도메인 제거)`,presetControlDUncensored:`ControlD Uncensored (검閲 우회)`,presetAdGuard:`AdGuard (광고/추적 제거)`,presetAdGuardFamily:`AdGuard Family protection (광고/추적/성인 콘텐츠 제거/안전 검색)`,retention10m:`10분`,retention1h:`1시간`,retention24h:`24시간`,retention7d:`7일`,retention30d:`30일`,retention90d:`90일`,retention180d:`180일`,retention360d:`360일`,retentionMaxSuffix:`(최대)`,daysUnit:`일`,blockModeTitle:`차단 응답 모드`,blockModeDesc:`도메인이 차단되었을 때 반환되는 내용`,default:`기본값`,NXDOMAIN:`NXDOMAIN (존재하지 않는 도메인)`,NODATA:`NODATA (레코드 없음)`,customIP:`사용자 지정 IP`,export:`설정 내보내기`,exportSuccess:`설정을 성공적으로 내보냈습니다`,exportError:`설정 내보내기 실패, 나중에 다시 시도하세요`,nameUpdateSuccess:`설정 이름이 업데이트되었습니다`,saving:`저장 중...`,echTitle:`ECH 재작성`,enableEch:`ECH 재작성 활성화`,echDesc:`Cloudflare 프록시 도메인에 대해 HTTPS(Type 65) / SVCB(Type 64) 쿼리 시 ECH 매개변수와 외부 SNI를 자동으로 재작성하여 프라이버시를 보호합니다.`,echFrontingTitle:`외부 SNI (ECH Fronting)`,echFrontingDesc:`TLS 핸드셰이크 외부에 표시되는 위장 도메인`,echFrontingCustomPlaceholder:`사용자 지정 프론팅 도메인 입력 (예: crypto.cloudflare.com)`,echPreferred:`권장`,whatIsEch:`ECH (Encrypted Client Hello)란 무엇인가요?`,echHelpDesc:`ECH는 실제 목적지 도메인(Inner SNI)을 완전히 암호화하고 네트워크 중간자에게는 위장 도메인(Outer SNI)만 노출하는 TLS 1.3의 핵심 보안 확장 기능입니다.`,echHelpBenefit1:`ISP나 중간자가 방문 중인 세부 하위 도메인을 감청하는 것을 방지`,echHelpBenefit2:`DoH와 결합하여 평문 SNI 노출 및 차단 위험 제거`,retentionDisabled:`비활성화 (개인 정보 보호)`,retentionDisabledDesc:`로그 기록이 비활성화되었습니다. 시스템은 DNS 쿼리 로그를 기록하지 않으며 기존 로그를 즉시 삭제합니다.`,localRetentionTitle:`로컬 저장소 및 보존`,localRetentionDuration:`로컬 보존 기간`,localRetentionDesc:`로그는 브라우저 로컬 SQLite 데이터베이스(OPFS)에 안전하게 영구 저장되어 초고속 검색을 제공하고 클라우드 비용을 절감합니다. 보존 기간이 지난 로컬 로그는 자동으로 삭제됩니다。`,localRetention30d:`30일`,localRetention90d:`90일 (권장)`,localRetention180d:`180일`,localRetention365d:`365일 (1년)`,localRetentionUnlimited:`무제한 (직접 삭제할 때까지)`,localEngineStorage:`저장소 엔진`,localEngineOpfs:`OPFS 영구 저장소`,localEngineMemory:`메모리 임시 저장소 (시크릿 모드)`,localCachedCount:`로컬 캐시 로그`,localCachedCountUnit:`{{count}}개 기록`,clearLocalData:`로컬 로그 지우기`,clearLocalDataConfirm:`이 프로필의 로컬 저장 로그를 모두 삭제하시겠습니까? (클라우드 로그는 유지됩니다)`,clearLocalDataSuccess:`로컬 로그가 삭제되었습니다`,clearLocalDataError:`로컬 로그 삭제 실패`,e2eeTitle:`로그 종단간 암호화 (E2EE)`,e2eeEnabled:`활성화됨`,e2eeDisabled:`비활성화됨`,e2eeDesc:`전용 양자내성 하이브리드 키(P256-MLKEM768)를 사용하여 엣지에서 즉시 DNS 로그를 암호화합니다. 클라우드에서는 볼 수 없으며 하드웨어 Passkey로 인증된 브라우저에서만 복호화됩니다.`,e2eePasskeyRequired:`종단간 암호화에는 Passkey(WebAuthn)가 필요합니다. 계정 설정에서 먼저 Passkey를 등록해 주세요.`,e2eeGoToAccount:`계정 설정으로 이동하여 Passkey 추가`,e2eeEnableSwitch:`로그 E2EE 암호화 활성화`,e2eeKeyType:`암호화 알고리즘`,e2eeDeviceState:`현재 기기 상태`,e2eeUnlocked:`이 기기에서 잠금 해제됨`,e2eeUnlockButton:`Passkey로 잠금 해제`,e2eeProtectedPasskeys:`인증된 Passkey 자격증명`,e2eeDevicesUnit:`개 기기`,e2eeEnableSuccess:`종단간 암호화가 활성화되었습니다`,e2eeEnableError:`종단간 암호화 활성화 실패`,e2eeDisableSuccess:`종단간 암호화가 비활성화되었습니다`,e2eeDisableError:`종단간 암호화 비활성화 실패`,e2eeUnlockSuccess:`개인키가 이 기기에서 성공적으로 잠금 해제되었습니다`,e2eeUnlockError:`Passkey 인증 실패`,e2eeDisableConfirm:`종단간 암호화를 비활성화하시겠습니까? 이후 생성되는 DNS 로그는 일반 텍스트로 저장됩니다.`,e2eeUnlockPrompt:`이 프로필은 E2EE가 적용되어 있습니다. Passkey로 인증하여 원본 로그를 확인하세요.`,e2eeUnlockNow:`암호화 로그 잠금 해제`,e2eeUnlockRecovery:`복구 키로 잠금 해제`,securityTitle:`보안 및 액세스`,rotateKeyTitle:`액세스 URL`,rotateKeyDesc:`이 프로필의 새 액세스 URL을 생성합니다. 이전 URL을 사용하는 모든 기기는 즉시 DNS Worker와의 연결이 끊어지며 새 URL로 재구성해야 합니다.`,rotateKeyBtn:`URL 순환 교체`,copied:`클립보드에 복사됨`,nameUpdateFailed:`업데이트 실패`},u=JSON.parse(`{"title":"계정 설정","subtitle":"보안 자격 증명 및 시스템 사용자를 관리합니다.","e2ee":{"title":"종단간 암호화 (E2EE)","desc":"하드웨어 Passkey 기반 클라이언트 측 양자내성 하이브리드 암호화(P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) 엔벨로프 암호화를 사용합니다. 엣지에서 즉시 암호화되며 서버에는 암호문만 저장됩니다. 복호화는 승인된 기기에서만 로컬로 수행됩니다.","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"양자 내성 암호(PQC)로 업그레이드","upgradePqcSuccess":"양자 내성 하이브리드 암호화(P256-MLKEM768)로 업그레이드되었습니다","upgradePqcError":"양자 내성 암호화로 업그레이드하지 못했습니다","enabled":"활성화됨","disabled":"비활성화됨","passkeyRequired":"종단간 암호화에는 하드웨어 Passkey(WebAuthn)가 필요합니다. 상단 MFA 설정에서 먼저 Passkey를 등록해 주세요.","scopesTitle":"암호화 데이터 범위","scopesSubtitle":"하드웨어 Passkey로 종단간 암호화할 데이터 범주를 선택하세요.","scopeLogsTitle":"DNS 쿼리 로그","scopeLogsDesc":"D1에 저장되기 전 엣지에서 도메인, 클라이언트 IP, 응답 레코드 및 업스트림 지연 시간을 암호화합니다.","scopeRulesTitle":"사용자 지정 규칙 및 리디렉션","scopeRulesDesc":"클라이언트 측에서 암호화된 사용자 지정 차단/허용 규칙 및 리디렉션 구성입니다.","scopeClientsTitle":"클라이언트 기기 메타데이터","scopeClientsDesc":"액세스 포인트 기기 이름, IP 별칭 및 네트워크 토폴로지 메타데이터입니다.","statusActive":"보호됨","statusPlanned":"예정됨","profileSelect":"프로필 구성","keyType":"암호화 알고리즘","deviceState":"현재 기기 상태","unlocked":"이 기기에서 잠금 해제됨","unlockButton":"Passkey 인증으로 잠금 해제","protectedPasskeys":"승인된 Passkey 자격 증명","devicesUnit":"개 자격 증명","enableSuccess":"종단간 암호화가 성공적으로 활성화되었습니다","enableError":"종단간 암호화 활성화 실패","disableSuccess":"종단간 암호화가 비활성화되었습니다","disableError":"종단간 암호화 비활성화 실패","unlockSuccess":"이 기기에서 개인 키가 성공적으로 잠금 해제되었습니다","unlockError":"Passkey 인증 및 잠금 해제 실패","disableConfirm":"이 프로필의 종단간 암호화를 비활성화하시겠습니까? 향후 생성되는 로그는 일반 텍스트로 저장됩니다. (기존 암호화 로그 복호화에는 여전히 개인 키가 필요합니다)","noKeypairTitle":"종단간 암호화 키 쌍이 초기화되지 않음","noKeypairDesc":"종단간 암호화를 위해 계정 전용 양자내성(P256-MLKEM768) 키 쌍 생성이 필요합니다. 개인 키는 패스키 또는 복구 키를 통한 봉투 암호화로 보호되어 서버에서 로그를 복호화할 수 없습니다.","initPasskeyBtn":"기존 패스키 인증으로 키 쌍 생성","addPasskeyBtn":"하드웨어 암호화 지원을 위한 패스키 추가","initRecoveryBtn":"복구 키로 키 쌍 생성","initWithRecoveryTitle":"복구 키로 키 쌍 생성","initWithRecoveryDesc":"현재 30자리 비상 복구 키를 입력하세요. 시스템이 로컬에서 양자내성(P256-MLKEM768) 키 쌍을 생성합니다. 사용 후 복구 키는 즉시 자동 교체됩니다.","keypairGenSuccess":"종단간 암호화 키 쌍이 성공적으로 생성되었습니다!","keypairGenError":"암호화 키 쌍 생성 실패","unlockRecoveryButton":"복구 키로 잠금 해제","unlockWithRecoveryTitle":"복구 키로 잠금 해제","unlockWithRecoveryDesc":"30자리 비상 복구 키를 입력하세요. 주의: 단일 사용 원칙에 따라 인증 완료 즉시 새 키로 자동 교체됩니다.","recoveryKeyInputLabel":"복구 키","unlockConfirm":"개인 키 잠금 해제","recoveryUnlockFailed":"유효하지 않은 복구 키이거나 복호화에 실패했습니다","generateKeypairBtn":"키 쌍 생성","enableSwitch":"쿼리 로그 종단간 암호화 활성화","enableSwitchDesc":"도메인 이름, 클라이언트 IP, 응답 레코드 및 업스트림 지연 시간을 에지에서 암호화한 후 클라우드 스토리지에 저장합니다.","trustBoundaryTitle":"보안 및 신뢰 경계 안내","trustBoundaryDesc":"모든 DNS 쿼리 트래픽은 조회 시 호스팅 서버(Cloudflare Workers 에지 노드 또는 자체 호스팅 런타임)를 필연적으로 거치며, 메모리에서 처리된 후 암호화되어 기록됩니다. 이 기능은 클라우드 데이터베이스(D1 / 영구 저장소)의 저장 데이터를 보호하기 위한 것이며, 요청을 전달 및 처리하는 호스팅 서버로부터 실시간 트래픽을 숨기지는 않습니다.","initFailed":"종단간 암호화 초기화 실패","lockDevice":"이 기기 잠금","lockSuccess":"잠겼습니다. 개인 키가 로컬 저장소에서 삭제되었습니다","enrollPasskeyBtn":"현재 패스키 연결","enrollPasskeySuccess":"패스키가 종단간 암호화에 성공적으로 연결되었습니다!","enrollPasskeyFailed":"패스키 연결 실패","resetKeypairBtn":"키 쌍 재설정","confirmResetBtn":"재설정 및 재생성 확인","resetKeypairTitle":"E2EE 키 쌍 재설정","resetKeypairDesc":"복구 키가 일치하지 않거나 복호화할 수 없고 등록된 패스키가 없는 경우, 재설정하면 서버에서 이전 키가 삭제되고 새로운 양자 내성(P256-MLKEM768) 키 쌍이 생성됩니다.","resetKeypairPasskeyNotice":"확인 시 구성된 패스키가 즉시 호출되어 새 키 쌍을 암호화하고 인증합니다.","resetKeypairRecoveryNotice":"확인 시 현재 복구 키를 입력하여 새 키 쌍을 생성하고 암호화하도록 안내합니다.","resetAndInitPasskeySuccess":"키 쌍이 성공적으로 재설정되었으며 패스키로 다시 암호화되었습니다!","resetSuccessEnterRecovery":"이전 키가 삭제되었습니다. 복구 키로 새 키 쌍을 초기화하세요.","resetFailed":"키 쌍 재설정 실패"},"jwtSecretWarningTitle":"보안 알림: 취약한 JWT 시크릿","jwtSecretWarningDesc":"현재 JWT_SECRET 길이가 32자 미만이어서 잠재적인 보안 위험이 있습니다. 봉투 암호화된 기존 TOTP 및 복구 키의 복호화가 가능하도록 JWT_SECRET을 교체하기 전에 KEK_v1 환경 변수를 먼저 구성하십시오.","roleAdmin":"시스템 관리자","roleUser":"사용자","personalInfo":"개인 정보","username":"사용자 이름","userId":"사용자 ID","changePassword":"비밀번호 변경","currentPassword":"현재 비밀번호","newPassword":"새 비밀번호","updatePassword":"비밀번호 업데이트","userManagement":"사용자 관리 (관리자 전용)","createUser":"사용자 생성","role":"역할","createdAt":"생성 시간","lastActive":"최근 활동 시간","lastResolve":"최근 해석 시간","actions":"작업","dangerZone":"위험 구역","clearLogs":"모든 로그 지우기","clearLogsDesc":"계정에 등록된 모든 설정에서 발생한 쿼리 로그를 삭제합니다. 이 작업은 되돌릴 수 없습니다.","currentDbSize":"현재 데이터베이스 크기","clearLogsBtn":"즉시 로그 지우기","deleteAccount":"회원 탈퇴","deleteAccountDesc":"계정 및 모든 관련 데이터를 영구적으로 삭제합니다. 모든 DNS 해석 설정을 잃게 됩니다.","deleteAccountBtn":"탈퇴 및 계정 삭제","createNewUser":"새 사용자 생성","initialPassword":"초기 비밀번호","userRole":"사용자 역할","cancel":"취소","createNow":"즉시 생성","formatTipUsername":"사용자 이름 형식 팁: 5~32자의 Unix 사용자 이름 형식","formatTipPassword":"비밀번호 형식 팁: 12-100자","passwordSuccess":"비밀번호가 성공적으로 변경되었습니다","updateFailed":"수정 실패","confirmDeleteUser":"이 사용자를 삭제하시겠습니까? 소유한 모든 설정도 제거됩니다.","confirmClearLogs":"계정 내 모든 설정의 쿼리 로그를 지우시겠습니까? 이 작업은 취소할 수 없습니다.","clearLogsSuccess":"로그가 성공적으로 지워졌습니다","confirmDeleteAccount":"경고: 정말 회원 탈퇴를 진행하고 본 계정을 삭제하시겠습니까?\\n\\n소유한 모든 DNS 설정, 사용자 지정 규칙 및 쿼리 로그가 영구적으로 삭제됩니다. 이 작업은 되돌릴 수 없습니다!","inactivityPolicy":"활동 정책","inactivityDesc":"사용자 개인 정보 보호 및 리소스 절약을 위해 30일 동안 DNS 조회 활동이 없는 계정의 모든 쿼리 로그 및 DNS 구성이 자동으로 삭제됩니다. 계정 자체는 90일 동안 로그인 활동이 없을 경우 삭제됩니다.","systemSettings":"시스템 설정 (관리자 전용)","adminOnlyView":"관리자만 볼 수 있음","featureToggle":"기능 토글","enableTurnstileSignup":"회원가입 페이지 보안 문자 활성화","enableTurnstileLogin":"로그인 페이지 보안 문자 활성화","totp":{"title":"인증 앱 (TOTP)","enabled":"활성화됨","disabled":"비활성화됨","setupDesc":"계정에 추가 보안 레이어를 추가합니다. Google Authenticator, Authy 또는 모든 TOTP 호환 앱을 사용하십시오.","setupBtn":"인증 앱 (TOTP) 설정","scanQR":"인증 앱을 사용하여 이 QR 코드를 스캔하세요:","orEnterManually":"또는 수동으로 키를 입력하세요:","enterCode":"확인을 위해 인증 앱 코드를 입력하세요:","enterCodeHint":"키가 올바르게 등록되었는지 확인하려면 6자리 코드를 입력하세요.","activate":"TOTP 활성화","skipPassword":"비밀번호 건너뛰기 — 로그인 시 TOTP 코드만 입력 (비밀번호 입력 생략)","disable":"인증 앱 (TOTP) 비활성화","disableTitle":"인증 앱 (TOTP) 비활성화","disableWarning":"TOTP를 비활성화하면 패스키가 설정되어 있지 않은 경우 계정이 비밀번호로만 보호됩니다.","confirmDisable":"TOTP 비활성화","recoveryKeysTitle":"복구 키를 저장해 주십시오","recoveryKeysWarning":"복구 키를 안전한 곳(비밀번호 관리 앱 등)에 보관하십시오. 각 키는 단 한 번만 사용할 수 있습니다.","copyKeys":"모든 키 복사","copied":"복사 완료!","done":"완료 (키를 저장했습니다)","activeDesc":"인증 앱(TOTP)이 활성화되어 6자리 확인 코드를 생성하고 있습니다.","invalidCode":"6자리 코드를 입력하세요","testBtn":"코드 테스트","testTitle":"인증 앱 테스트 (TOTP)","testDesc":"인증 앱에 표시된 6자리 인증 코드를 입력하여 올바르게 동기화되고 유효한 코드가 생성되는지 확인하세요.","testSuccess":"인증에 성공했습니다! 인증 앱이 올바르게 구성되었습니다.","testFailed":"잘못된 인증 코드이거나 기기 시간이 동기화되지 않았습니다","verificationCode":"6자리 인증 코드","verifyBtn":"지금 확인"},"activity":{"title":"계정 활동 기록","action":"이벤트","time":"시간","ip":"IP 주소","session":"세션","empty":"활동 기록이 없습니다.","loadMore":"더 보기","signup":"가입","loginSuccess":"로그인 성공","loginFail":"로그인 실패","logout":"로그아웃","pwChangeSuccess":"비밀번호 변경 성공","pwChangeFail":"비밀번호 변경 실패","totpVerifySuccess":"TOTP 인증 성공","totpVerifyFail":"TOTP 인증 실패","totpSetup":"TOTP 인증 앱 설정","totpRemoved":"TOTP 인증 앱 제거","recoveryKeyUsed":"복구 키 사용됨","sessionRevoked":"세션 취소됨","reasons":{"user_active":"수동 로그아웃","user_revoke":"세션 취소","expired":"세션 만료됨","geolocation_mismatch":"지리적 위치 불일치 (원격 액세스 제한)","geolocation_missing":"지리적 위치 정보 누락","token_reuse":"토큰 재사용 (보안 경고)"},"passkeyRegistered":"패스키 등록","passkeyDeleted":"패스키 삭제","passkeyVerifySuccess":"패스키 인증 성공","passkeyVerifyFail":"패스키 인증 실패","recoveryKeyRotated":"비상 복구 키 순환됨","device":"기기"},"sessions":{"title":"활성 세션","session":"세션","device":"기기","ip":"IP 주소","loginTime":"로그인 시간","expires":"만료 시간","action":"작업","current":"현재","revoke":"취소","revokeFailed":"세션을 취소하지 못했습니다.","empty":"활성 세션을 찾을 수 없습니다.","unknownDevice":"알 수 없는 기기","revokeOthers":"다른 세션 취소","confirmRevokeOthers":"다른 세션 취소","revokeOthersConfirmText":"다른 모든 활성 세션을 취소하시겠습니까? 현재 장치를 제외한 모든 로그인된 장치에서 즉시 로그아웃됩니다."},"passkey":{"title":"패스키 (Passkey)","addBtn":"패스키 추가","desc":"생체 인식(Touch ID, Face ID, Windows Hello) 또는 보안 키(YubiKey)를 사용하여 빠르고 피싱에 강한 다단계 인증을 수행하세요.","empty":"추가된 패스키가 없습니다.","addTitle":"패스키 추가","nameLabel":"패스키 이름","namePlaceholder":"예: my_passkey","promptNotice":"계속을 클릭하면 브라우저에 생체 인식 또는 보안 키 등록을 완료하라는 메시지가 표시됩니다.","continue":"계속","renameTitle":"패스키 이름 바꾸기","deleteTitle":"패스키 삭제","deleteConfirm":"패스키 \\"{{name}}\\"을(를) 삭제하시겠습니까? 삭제 후에는 다단계 인증에 사용할 수 없습니다.","defaultName":"패스키","notSupported":"브라우저 또는 현재 환경이 패스키(WebAuthn)를 지원하지 않습니다.","regFailed":"패스키 등록 실패","count":"{{count}}개 구성됨","none":"구성되지 않음","created":"추가 일시","lastUsed":"마지막 사용","neverUsed":"사용 이력 없음","updated":"패스키가 성공적으로 업데이트되었습니다","registered":"패스키가 성공적으로 등록되었습니다","deleted":"패스키 삭제됨","appNameLabel":"도메인","appNameHelper":"패스키가 이 도메인에 바인딩됩니다","formatTip":"패스키 이름 팁: 1-30자, 영문자, 숫자, 언더바, 하이픈만 허용","verifyPrompt":"기기의 생체 인식(지문, 얼굴, Windows Hello) 또는 보안 키를 사용하여 인증하세요.","changePwNotice":"제출 시 패스키 생체 인증 또는 보안 키 확인이 요청됩니다.","submitNotice":"제출 시 패스키 생체 인증 또는 보안 키 확인이 요청됩니다.","testBtn":"패스키 테스트","testThis":"이 패스키 테스트","testSuccess":"패스키 인증 성공: {{name}}","testCancelled":"패스키 인증이 취소되었습니다","testFailed":"패스키 인증에 실패했습니다"},"mfaNone":"없음","resetUserPassword":"비밀번호 재설정","resetPasswordTitle":"사용자 비밀번호 재설정","resetPasswordWarning":"재설정 후 해당 사용자의 모든 활성 세션이 즉시 만료됩니다.","resetPasswordSuccess":"비밀번호가 성공적으로 재설정되었습니다. 활성 세션이 종료되었습니다.","confirmReset":"재설정 확인","mfa":{"title":"다중 요소 인증 (MFA)","enabled":"구성됨","notConfigured":"구성되지 않음","desc":"패스키(Passkey)와 인증 앱(TOTP) 모두 MFA 인증 방식으로 사용할 수 있습니다. 최소 하나를 설정하여 계정을 보호하세요.","passwordlessTitle":"비밀번호 없는 로그인","passwordlessDesc":"활성화하면 비밀번호 입력 없이 패스키 또는 TOTP로 직접 신원을 확인합니다.","unconfiguredHint":"아직 MFA 방식이 설정되지 않았습니다. 아래에서 패스키나 인증 앱을 설정하세요.","password":"비밀번호","passkey":"패스키 (Passkey)","totp":"인증 앱 (TOTP)"},"recoveryKey":{"title":"비상 복구 키","desc":"비상 복구 키를 사용하면 등록된 모든 패스키 또는 인증기를 분실한 경우 계정에 다시 접근하거나 비밀번호를 재설정할 수 있습니다. 영지식(Zero-Knowledge) 보안을 위해 복구 키는 단방향 암호화 해시로 저장되며 웹에서 일반 텍스트로 조회할 수 없습니다. 1회 사용 시 즉시 자동 교체됩니다.","configured":"구성됨","notConfigured":"구성되지 않음","rotateBtn":"복구 키 교체","yourKey":"30자리 비상 복구 키","securityTip":"이 키를 안전하게 보관하세요. 이 키를 아는 사람은 누구나 귀하의 계정에 접근할 수 있습니다.","rotateConfirm":"복구 키를 교체하면 현재 키는 즉시 무효화됩니다. 본인 인증은 기존 패스키 또는 원래 복구 키로만 가능합니다. 계속하시겠습니까?","confirmRotateBtn":"교체 진행","rotateVerifyTitle":"복구 키 교체를 위한 본인 인증","rotateSuccess":"복구 키가 성공적으로 교체되었습니다! 새 키를 즉시 안전한 곳에 보관하세요.","oneWayHash":"단방향 암호화 해시","oneWayTooltip":"SHA-256 단방향 암호화 해시로 보호됩니다. 서버에는 일반 텍스트가 저장되지 않으며 복호화할 수 없습니다.","newKeyGenerated":"새로운 30자리 복구 키가 생성되었습니다 (지금 저장하세요)","oneWayWarning":"주의: 이 키는 한 번만 표시됩니다! 서버에는 되돌릴 수 없는 해시만 저장되므로 반드시 복사하여 오프라인에 안전하게 보관하세요.","autoRotatedTitle":"복구 키가 자동으로 교체되었습니다","autoRotatedNotice":"단일 사용 규칙에 따라 이전 키는 무효화되었으며 새로운 30자리 키가 생성되었습니다. 지금 즉시 복사하여 안전하게 오프라인에 보관하세요!","savedAndClose":"안전하게 저장함 및 계속","savedAndContinue":"안전하게 저장함 및 대시보드로 이동","descOneWay":"비상 복구 키는 모든 패스키 또는 인증 앱을 분실했을 때 계정 액세스를 복구하고 E2EE 데이터를 복호화할 수 있는 유일한 자격 증명입니다. 제로 지식 보안을 보장하기 위해 단방향 비가역 해시로 저장되며 웹에서 일반 텍스트로 볼 수 없습니다. 원래 복구 키 또는 기존 패스키를 사용해서만 교체할 수 있습니다. 키를 사용하면 즉시 자동으로 순환 교체됩니다.","keyRequired":"복구 키를 입력하세요","verifyBtn":"복구 키","verifyPromptLabel":"원래 복구 키 (Original Recovery Key)","rotateSuccessE2eeWarning":"복구 키가 성공적으로 변경되었습니다! 참고: E2EE가 이전에 잠겨 있어 복호화할 수 없었으므로 이전 E2EE 데이터는 이전 복구 키로 잠금을 해제해야 하거나 아래에서 \\"키 쌍 재설정\\"을 클릭할 수 있습니다."},"verifyIdentity":"보안 본인 확인","verifyIdentityDesc":"계정 보안을 위해 계속 진행하기 전에 본인 확인을 완료하세요.","usePasskeyInstead":"패스키로 인증","changePasswordWithPasskey":"패스키 인증 후 비밀번호 변경","enableRegistration":"신규 사용자 가입 허용","timezone":"시간대","timezoneAuto":"자동 (브라우저 기본값)","totpCode":"인증 코드"}`),d={item1Title:`Obex 보호 DNS`,item1Desc:`속도와 보안을 위해 설계된 Cloudflare Workers & D1 기반의 DNS 리졸버입니다.`,item2Title:`DoH 개인정보 보호`,item2Desc:`DNS over HTTPS (RFC 8484) 암호화 터널을 통해 통신사의 위변조를 방지하고 개인정보를 보호합니다.`,item3Title:`글로벌 에지 네트워크`,item3Desc:`Cloudflare의 방대한 에지 네트워크를 활용하여 초고속 해석 및 최저 레이턴시 경험을 제공합니다.`,item4Title:`정밀한 필터링`,item4Desc:`화이트리스트/블랙리스트, AdGuard 규칙 및 사용자 지정 DNS 레코드 리다이렉트를 지원합니다.`,item5Title:`실시간 통계 분석`,item5Desc:`상세한 쿼리 로그와 종합적인 통계 대시보드를 통해 네트워크 상태를 한눈에 보여줍니다.`,item6Title:`현대적인 UI 및 다크 모드`,item6Desc:`엔지니어와 가정용 사용자를 위해 설계된, Palantir의 Blueprint UI 기반 고밀도 관리 패널입니다.`,item7Title:`클라우드 네이티브 인프라`,item7Desc:`서버리스 아키텍처로 제로 유지보수와 무제한 확장성을 보장합니다.`,item8Title:`여러 설정 관리`,item8Desc:`기기나 네트워크 환경에 따라 여러 개의 독립적인 DNS 설정 프로필을 생성하고 관리할 수 있습니다.`,item9Title:`여러 액세스 포인트 관리`,item9Desc:`기기마다 전용 DNS 액세스 포인트를 구성하여 로그 및 통계 데이터의 정밀한 격리 분석이 가능합니다.`},f={title:`DNS Worker 설정 및 배포 가이드`,subtitle:`인스턴스가 아직 완전히 구성되지 않았습니다. DNS Worker를 활성화하려면 아래 단계를 완료하세요.`,dbStatus:`D1 데이터베이스 바인딩 (env.DB)`,jwtStatus:`JWT 비밀 키 (env.JWT_SECRET)`,configured:`구성됨`,missing:`누락됨 / 구성되지 않음`,refresh:`새로고침 및 확인`,methodCli:`CLI 배포`,methodDash:`Cloudflare 대시보드 배포`,copy:`복사`,copied:`복사 완료!`,stepDbTitle:`1. D1 데이터베이스 바인딩`,stepDbDesc:`D1 데이터베이스를 생성하고 Worker에 바인딩합니다. 터미널에서 다음을 실행하세요:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`출력된 D1 데이터베이스 상세 정보를 복사하여 wrangler.toml의 [[d1_databases]] 아래에 붙여넣습니다:`,stepDbCommand2:`[[d1_databases]]
|
|
2
2
|
binding = "DB"
|
|
3
3
|
database_name = "dns_worker_db"
|
|
4
4
|
database_id = "<사용자의_D1_DATABASE_ID>"
|