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:`Tài khoản`,logout:`Đăng xuất`,selectProfile:`Chọn cấu hình`,add:`Thêm`,newProfileName:`Tên cấu hình mới...`,profileNameFormatTip:`Gợi ý tên cấu hình: 1-30 ký tự và không được trùng với tên hiện có`,profileLimitExceeded:`Đạt giới hạn số lượng cấu hình (tối đa {{max}})`,profileNameExists:`Tên cấu hình này đã tồn tại`,profileNameFormatError:`Định dạng tên cấu hình không hợp lệ`,create:`Tạo`,welcome:`Chào mừng`,createProfileToStart:`Tạo một cấu hình để bắt đầu.`,loading:`Đang tải...`,errorNetwork:`Lỗi mạng`,confirmDelete:`Bạn có chắc chắn muốn xóa cấu hình này không?`,confirmLogout:`Bạn có chắc chắn muốn đăng xuất không?`,notFound:`404 - Không tìm thấy trang`,notFoundDesc:`Trang bạn đang tìm kiếm không tồn tại hoặc đã bị xóa.`,backToHome:`Quay lại trang chủ`,apac:`Châu Á - Thái Bình Dương`,mainlandChina:`Trung Quốc Đại Lục`,HongKong:`Hồng Kông`,Singapore:`Singapore`,Tokyo:`Tokyo`,NorthAmerica:`Bắc Mỹ`,nae:`Miền Đông Bắc Mỹ`,naw:`Miền Tây Bắc Mỹ`,eu:`Châu Âu`,invalidFormat:`Định dạng tệp không hợp lệ`,import:`Nhập`,importSuccess:`Nhập cấu hình thành công`,importError:`Nhập cấu hình thất bại, vui lòng đảm bảo định dạng đúng và thử lại sau`,save:`Lưu`,saveSuccess:`Đã lưu cài đặt`,close:`Đóng`,cancel:`Hủy`,continue:`Tiếp tục`,back:`Quay lại`,copy:`Sao chép`,copied:`Đã sao chép`,copyKey:`Sao chép khóa khôi phục mới`,confirm:`Xác nhận`,delete:`Xóa`,rename:`Đổi tên`,disable:`Vô hiệu hóa`,confirmDisable:`Xác nhận vô hiệu hóa`,modeServerfull:`Chế độ Serverfull`,modeCloudflare:`Chế độ Cloudflare Worker`},t={setup:`Thiết lập`,rules:`Quy tắc`,stats:`Thống kê`,logs:`Nhật ký`,filter:`Bộ lọc`,settings:`Cài đặt`},n={light:`Sáng`,dark:`Tối`,system:`Theo hệ thống`},r={login:`Đăng nhập DNS Worker`,signup:`Tạo tài khoản để bắt đầu`,welcomeBack:`Chào mừng trở lại, vui lòng nhập thông tin đăng nhập`,protectInternet:`Bảo vệ bước nhảy internet đầu tiên của bạn`,error:`Lỗi`,username:`Tên đăng nhập`,usernamePlaceholder:`Tên đăng nhập của bạn`,password:`Mật khẩu`,passwordPlaceholder:`Mật khẩu của bạn`,loginBtn:`Đăng nhập`,signupBtn:`Đăng ký`,totpVerification:`Xác thực TOTP`,noAccount:`Chưa có tài khoản? Đăng ký ngay`,haveAccount:`Đã có tài khoản? Quay lại đăng nhập`,formatTipUsername:`Định dạng tên đăng nhập: Chỉ từ 5 đến 32 ký tự theo định dạng Unix (bắt đầu bằng chữ thường hoặc dấu gạch dưới, bao gồm chữ thường, số, dấu gạch dưới và dấu gạch ngang)`,formatTipPassword:`Định dạng mật khẩu: 12-100 ký tự`,authFailed:`Xác thực thất bại, vui lòng kiểm tra tên đăng nhập hoặc mật khẩu`,networkError:`Lỗi mạng, vui lòng thử lại sau`,turnstileRequired:`Vui lòng hoàn thành xác minh người máy`,turnstileError:`Không thể tải dịch vụ xác minh, vui lòng kiểm tra Site Key hoặc cấu hình tên miền`,verifying:`Đang thực hiện xác minh bảo mật...`,passwordLeaked:`Mật khẩu của bạn đã bị lộ, vì an toàn tài khoản, vui lòng sử dụng mật khẩu ngẫu nhiên/mạnh.`,usernameExists:`Tên đăng nhập này đã được đăng ký, vui lòng thử tên khác.`,skip:`Bỏ qua`,showPassword:`Hiện mật khẩu`,hidePassword:`Ẩn mật khẩu`,geolocationRequired:`Lấy vị trí địa lý thất bại, vui lòng thử đăng nhập lại.`,unauthorizedDefault:`Phiên đăng nhập của bạn đã hết hạn, vui lòng đăng nhập lại.`,unauthorizedGeo:`Phát hiện thay đổi vị trí địa lý (vượt quá giới hạn khoảng cách), phiên hiện tại đã bị buộc đăng xuất.`,unauthorizedExpired:`Đăng nhập của bạn đã hết hạn, vui lòng đăng nhập lại.`,unauthorizedReuse:`Cảnh báo bảo mật: Phát hiện đăng nhập trùng lặp, phiên đã bị chấm dứt.`,unauthorizedRevoked:`Phiên của bạn đã bị đăng xuất hoặc xóa, vui lòng đăng nhập lại.`,sessionLockTitle:`Khóa phiên khi không hoạt động`,sessionLockDesc:`Khóa giao diện bằng mã PIN 4 chữ số khi ứng dụng không hoạt động để bảo vệ các phiên đang mở khỏi truy cập vật lý trái phép.`,enableSessionLock:`Bật khóa phiên`,inactivityTimeout:`Thời gian chờ không hoạt động`,timeout1m:`1 phút`,timeout2m:`2 phút`,timeout5m:`5 phút`,timeout15m:`15 phút`,timeout30m:`30 phút`,timeout60m:`60 phút`,changePin:`Thay đổi mã PIN`,disablePin:`Tắt khóa phiên`,configurePin:`Cấu hình mã PIN`,newPin:`Mã PIN 4 chữ số mới`,pinHelper:`Chỉ nhập số, ví dụ: 1234`,confirmPin:`Xác nhận mã PIN mới`,verifyIdentity:`Xác minh danh tính`,usePassword:`Sử dụng mật khẩu`,use2fa:`Sử dụng mã TOTP`,totpCode:`Mã TOTP`,currentPassword:`Mật khẩu hiện tại`,disablePinWarning:`Tắt mã PIN sẽ vô hiệu hóa hoàn toàn tính năng khóa phiên khi không hoạt động.`,pinFormatTip:`Mã PIN phải chứa đúng 4 chữ số`,pinMatchTip:`Mã PIN không khớp`,passwordRequired:`Yêu cầu nhập mật khẩu để xác minh`,sessionLocked:`Phiên bị khóa do không hoạt động`,sessionExpired:`Quá nhiều lần thử thất bại. Phiên đã bị chấm dứt.`,pinIncorrect:`Mã PIN không chính xác`,attemptsRemaining:`Còn lại {{count}} lần thử`,logoutAndReturn:`Đăng xuất phiên`,lockNow:`Khóa ngay`,cfErrorWithDetails:`Lỗi Cloudflare Edge (Lỗi {{code}}: {{desc}}). Dịch vụ tạm thời không khả dụng, vui lòng thử lại sau. {{rayId}}`,cfErrorCodeOnly:`Lỗi Cloudflare Edge (Lỗi {{code}}). Dịch vụ tạm thời không khả dụng. {{rayId}}`,cfErrorGeneric:`Lỗi Cloudflare Edge, dịch vụ tạm thời không khả dụng. Vui lòng thử lại sau. {{rayId}}`,htmlErrorGeneric:`Máy chủ đã trả về phản hồi không mong muốn (HTTP {{status}}). Vui lòng thử lại sau.`,tooManyAttempts:`Quá nhiều yêu cầu hoặc lần thử. Vui lòng thử lại sau.`,dbQuotaExceeded:`Đã vượt quá hạn mức đọc cơ sở dữ liệu hàng ngày. Vui lòng đợi thiết lập lại hàng ngày.`,noUsersRegistered:`Chưa có tài khoản nào được đăng ký. Vui lòng đăng ký làm quản trị viên.`,registerAdminTitle:`Đăng ký tài khoản quản trị viên`,registerAdminDesc:`Hệ thống chưa có tài khoản. Người dùng đầu tiên sẽ trở thành quản trị viên hệ thống.`,goToRegisterAdmin:`Đăng ký quản trị`,dbNotInitialized:`Cơ sở dữ liệu chưa được khởi tạo hoặc thiếu bảng. Vui lòng chạy npm run db:migrate:prod trong terminal.`,verifyWithPasskey:`Xác minh bằng Passkey`,orUseTotp:`Hoặc sử dụng mã xác thực`,passwordRequiredFirst:`Vui lòng nhập mật khẩu trước`,passkeyVerification:`Xác minh Passkey`,passkeyPromptDesc:`Xác minh bằng sinh trắc học hoặc khóa bảo mật đã đăng ký`,forgotPassword:`Quên mật khẩu?`,forgotPasswordTitle:`Đặt lại mật khẩu`,forgotPasswordDesc:`Khôi phục tài khoản an toàn bằng xác thực đa yếu tố (Passkey hoặc TOTP).`,noMfaContactAdmin:`Tài khoản này chưa cấu hình xác thực đa yếu tố (Passkey hoặc TOTP). Vui lòng liên hệ quản trị viên để được đặt lại mật khẩu.`,chooseMfaForReset:`Chọn phương thức xác thực để xác minh danh tính của bạn:`,authViaPasskey:`Xác minh bằng Passkey`,authViaPasskeyDesc:`Xác thực một chạm bằng sinh trắc học hoặc khóa bảo mật phần cứng`,authViaTotp:`Xác minh bằng ứng dụng xác thực (TOTP)`,authViaTotpDesc:`Nhập mã động 6 chữ số từ ứng dụng xác thực của bạn`,authViaRecoveryKey:`Sử dụng khóa khôi phục khẩn cấp`,authViaRecoveryKeyDesc:`Nhập khóa khôi phục khẩn cấp 10 ký tự`,verifyAndProceed:`Xác minh và tiếp tục`,setNewPassword:`Đặt mật khẩu mới`,setNewPasswordDesc:`Xác minh danh tính thành công. Vui lòng đặt mật khẩu mới cho tài khoản của bạn.`,newPassword:`Mật khẩu mới`,confirmNewPassword:`Xác nhận mật khẩu mới`,passwordMismatch:`Mật khẩu mới không khớp`,saveAndReset:`Lưu và đặt lại mật khẩu`,resetSuccessTitle:`Đặt lại mật khẩu thành công`,resetSuccessDesc:`Mật khẩu của bạn đã được cập nhật và tất cả các phiên đăng nhập đã bị hủy. Vui lòng đăng nhập bằng mật khẩu mới.`,goToLogin:`Đến trang đăng nhập`,mfaSetupTitle:`Tăng cường bảo mật tài khoản`,mfaSetupDesc:`Cấu hình xác thực đa yếu tố (MFA) giúp bảo vệ tài khoản, mở khóa đăng nhập không cần mật khẩu và khôi phục tài khoản.`,mfaRecommended:`Khuyên dùng`,passkeySignupDesc:`Sử dụng Touch ID, Face ID hoặc khóa bảo mật. Cực nhanh và chống lừa đảo hiệu quả.`,bindPasskeyNow:`Đăng ký Passkey ngay`,mfaUniversal:`Phổ thông`,totpSignupDesc:`Sử dụng Google Authenticator, 1Password hoặc bất kỳ ứng dụng TOTP tiêu chuẩn nào.`,setupTotpBtn:`Cấu hình ứng dụng xác thực`,skipMfaSetup:`Bỏ qua lúc này`,backToMfaOptions:`Quay lại tùy chọn`,otherOptions:`Tùy chọn khác`,next:`Tiếp theo`,mfaVerification:`Xác thực đa yếu tố`,totpPrompt:`Nhập mã động 6 chữ số từ ứng dụng xác thực của bạn`,recoveryPrompt:`Nhập khóa khôi phục 30 chữ số của bạn (5 nhóm, mỗi nhóm 6 chữ số)`,recoveryChecksumError:`Lỗi tổng kiểm tra: nhóm này không chia hết cho 11`,recoveryChecksumErrorDesc:`Lỗi tổng kiểm tra ở nhóm {{groups}}, vui lòng kiểm tra và thử lại`,backToPasskey:`Quay lại xác thực Passkey`,recoveryKeyRequired:`Vui lòng nhập khóa khôi phục của bạn`,totpFormatError:`Vui lòng nhập mã hợp lệ gồm 6 chữ số`,registrationDisabledTitle:`Đăng ký đã bị tắt`,registrationDisabledDesc:`Tính năng đăng ký người dùng mới hiện đang tạm khóa. Vui lòng liên hệ quản trị viên hệ thống để nhận tài khoản.`,backToLogin:`Quay lại đăng nhập`,jwtSecretPreset:`Đã phát hiện JWT_SECRET mặc định. Vui lòng sửa đổi JWT_SECRET đặt sẵn trong các biến môi trường trước khi triển khai.`,jwtSecretMissing:`Thiếu JWT_SECRET. Vui lòng định cấu hình khóa bảo mật trong các biến môi trường trước khi triển khai.`,jwtSecretInvalid:`Định dạng JWT_SECRET không hợp lệ, vui lòng kiểm tra cấu hình.`,keepLoggedIn:`Duy trì đăng nhập trong {{days}} ngày`,orUseOtherMfa:`hoặc sử dụng phương thức khác`,totpUseRecovery:`Sử dụng khóa khôi phục`,totpUseApp:`Sử dụng ứng dụng xác thực`,mfaMethodTotp:`Ứng dụng xác thực (TOTP)`,invalidTotp:`Mã xác thực TOTP không hợp lệ.`},i={title:`Hướng dẫn cài đặt`,subtitle:`Cấu hình thiết bị của bạn để sử dụng DNS Worker và làm chủ an ninh internet.`,regionOptimization:`Tối ưu hóa vùng truy cập (Windows)`,otherRegion:`Các khu vực khác`,copied:`Đã sao chép vào bộ nhớ tạm`,verifyConnection:`Xác minh kết nối của bạn`,verifying:`Đang xác minh...`,connected:`Kết nối bình thường`,notConnected:`Hoặc chưa kết nối`,profileMatch:`Bạn đang lọc thông qua cấu hình này.`,profileMismatch:`Bạn đang sử dụng Obex, nhưng ID cấu hình không khớp.`,verifyHint:`Sau khi hoàn thành cấu hình bên dưới, nhấp vào nút để xác minh.`,refreshStatus:`Làm mới trạng thái`,egressIp:`Địa chỉ IP thoát (Egress IP)`,currentLocation:`Vị trí hiện tại`,edgeServer:`Máy chủ Edge`,serverLocation:`Vị trí máy chủ`,dohUrlTitle:`DoH URL của cấu hình hiện tại`,accessPointTitle:`Access DoH URL`,defaultAccessPointName:`Thiết bị-1`,moreAccessPoints:`Xem thêm điểm truy cập ↗`,accessPointName:`Tên điểm truy cập`,accessPointToken:`Khóa truy cập (Access Token)`,addAccessPoint:`Thêm điểm truy cập mới`,renameAccessPoint:`Đổi tên`,rotateToken:`Làm mới khóa (Rotate Token)`,rotateTokenConfirmDesc:`Việc làm mới khóa sẽ khiến tất cả các thiết bị sử dụng khóa cũ bị ngắt kết nối ngay lập tức. Bạn có chắc chắn muốn tiếp tục không?`,deleteAccessPoint:`Xóa`,deleteAccessPointConfirm:`Bạn có chắc chắn muốn xóa điểm truy cập này không?`,manageAccessPoints:`Quản lý điểm truy cập`,searchAccessPoints:`Tìm kiếm điểm truy cập...`,accessPointNameExists:`Tên điểm truy cập đã tồn tại`,accessPointCreated:`Tạo điểm truy cập thành công`,accessPointRenamed:`Đổi tên điểm truy cập thành công`,accessPointDeleted:`Xóa điểm truy cập thành công`,accessPointNameFormatTip:`Gợi ý tên điểm truy cập: 1-30 ký tự, chỉ cho phép chữ cái, số, dấu gạch dưới và dấu gạch ngang`,accessPointLimitExceeded:`Đạt giới hạn số lượng điểm truy cập (tối đa {{max}})`,tokenRotated:`Làm mới khóa truy cập thành công`,whatIsDoh:`DoH là gì?`,dohDesc:`DNS over HTTPS (DoH) là một công nghệ phân giải tên miền thông qua giao thức HTTPS được mã hóa.`,dohBenefit1:`Giảm thiểu việc bị nhà mạng hoặc bên thứ ba chặn và theo dõi`,dohBenefit2:`Tăng cường bảo mật khi phân giải tên miền và truy cập internet`,learnMore:`Tìm hiểu thêm`,copyUrl:`Sao chép URL`,browsers:`Trình duyệt`,browserTitle:`Cấu hình trình duyệt (Chrome/Edge)`,browserSteps:`Cài đặt > Quyền riêng tư và bảo mật > Bảo mật > Sử dụng DNS bảo mật > Tùy chỉnh > Dán URL.`,browserTips:`Hoặc sao chép địa chỉ này vào thanh địa chỉ:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Các thiết bị Apple hỗ trợ cấu hình nhanh thông qua tệp cấu hình (Profile).`,appleWarning:`Không thể cài đặt tệp cấu hình trong "Chế độ phong tỏa (Lockdown Mode)", vui lòng đảm bảo hệ thống không ở trạng thái này trước khi cài đặt.`,downloadConfig:`Tải tệp cấu hình`,appleInstallHint:`Sau khi tải về, vui lòng đi tới "Cài đặt" > "Đã tải về hồ sơ" để cài đặt`,windows:`MS Windows`,windowsTitle:`Cấu hình Windows 11`,windowsStep0:`Cài đặt > Mạng & Internet`,windowsStep1:`Thuộc tính > Máy chủ DNS > Chỉnh sửa > Thủ công.`,windowsStep2:`Chọn và nhập DNS IP:`,windowsStep3:`Bật DoH (Mẫu thủ công) và dán URL.`,windowsStep4:`Tắt "Dự phòng sang bản rõ" (Fallback to plaintext).`,android:`Android`,androidTitle:`Android / DNS riêng tư (DoT & DoQ)`,androidDesc:`Hỗ trợ 'DNS riêng tư' gốc của hệ thống (DoT) hoặc ứng dụng bên thứ ba cho DoH.`,androidDotTitle:`DNS riêng tư (DoT / DoQ)`,androidDotDesc:`Cài đặt > Mạng và internet > DNS riêng tư > Tên máy chủ của nhà cung cấp DNS riêng tư (cũng hỗ trợ máy khách DoQ):`,androidWildcardHint:`(Chứng chỉ Wildcard, chuyển tiếp đến cấu hình này)`,androidSingleDomainHint:`(Chứng chỉ một tên miền, chuyển tiếp đến cấu hình mặc định)`,androidIpNotice:`Truy cập qua IP hoặc địa chỉ cục bộ. DNS riêng tư của Android chỉ chấp nhận tên miền; vui lòng cấu hình SERVERFULL_DOT_DOMAIN trong .env (ví dụ dns.example.com).`,androidWarning:`Lưu ý: 'DNS riêng tư' gốc của Android sử dụng giao thức DoT. Khi triển khai trên Cloudflare Workers, hãy dùng ứng dụng như Intra cho DoH. Khi chạy ở chế độ Serverfull đã cấu hình TLS, bạn có thể sử dụng trực tiếp tên máy chủ DoT ở trên.`,dynamicFromDomain:`Động (từ "{{domain}}")`,dynamicFromDomainV6:`Động IPv6 (từ "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (Proxy Cloudflared DoH)`,linuxDesc:`Chạy một proxy DNS nhẹ tại địa phương, mã hóa và chuyển tiếp các yêu cầu phân giải đến Obex thông qua DoH.`,linuxStep1:`Chạy đoạn mã sau để cài đặt cloudflared và tạo dịch vụ systemd (lắng nghe tại 127.0.0.1:53).`,linuxStep2:`Thay đổi DNS hệ thống thành 127.0.0.1.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`Dùng trình phân giải này cho mọi thiết bị trong mạng bằng cách đặt nó làm máy chủ DoH của router.`,routerosStep1:`Chạy trong terminal RouterOS (RouterOS 7):`,routerosNote:`Các truy vấn do router chuyển tiếp sẽ hiển thị trong nhật ký là router, không phải từng thiết bị. Hãy cấu hình trực tiếp trên thiết bị nếu bạn cần nhật ký theo từng thiết bị.`,routerosDocs:`Tài liệu DNS của MikroTik`,accessPointsCardTitle:`Điểm truy cập`,currentAccessPoint:`Điểm truy cập hiện tại`,selectAccessPointToConfigure:`Chọn điểm truy cập để định cấu hình`,quic:`QUIC & HTTP/3`,quicTitle:`DNS over QUIC (DoQ) & HTTP/3 (DoH3)`,quicDesc:`Hỗ trợ gốc cho RFC 9250 (DNS over QUIC) và RFC 9460 (HTTP/3 & Encrypted Client Hello), sở hữu bắt tay 0-RTT siêu tốc và bảo vệ chống theo dõi SNI.`,doqTitle:`DNS over QUIC (DoQ - RFC 9250)`,doqAppHint:`Tương thích với các ứng dụng hiện đại như AdGuard, Clash Meta (Mihomo), Sing-box, v.v.:`,doqWildcardHint:`(Chứng chỉ ký tự đại diện wildcard, định tuyến đến cấu hình này)`,doqSingleDomainHint:`(Chứng chỉ tên miền đơn, định tuyến đến cấu hình mặc định)`,doqIpNotice:`DoQ yêu cầu chứng chỉ TLS và tên miền hợp lệ. Vui lòng thiết lập SERVERFULL_DOT_DOMAIN trong .env rồi tải lại.`,h3Title:`HTTP/3 (DoH3) & ECH (Encrypted Client Hello)`,h3Desc:`Các trình duyệt hiện đại (Chrome/Firefox/Safari) tự động thương lượng mã hóa HTTP/3 và ECH thông qua bản ghi Alt-Svc và RFC 9460 HTTPS:`,ddrHint:`Tích hợp RFC 9460 Phần 8 DDR (Discovery of Designated Resolvers), cho phép máy khách tự động thương lượng và nâng cấp lên DoQ/DoT và ECH qua truy vấn _dns.`,e2eeDesc:`Mã hóa nhật ký DNS tại edge bằng khóa lai hậu lượng tử (P256-MLKEM768). Đám mây không thể xem dữ liệu; giải mã chỉ diễn ra cục bộ thông qua Passkey.`,detecting:`Đang phát hiện...`,dotUnavailableCfTitle:`DoT / DoQ không khả dụng trong chế độ Cloudflare Worker`,dotUnavailableCfDesc:`Hiện đang chạy ở chế độ Cloudflare Worker (Serverless). Do các giới hạn mạng edge, việc lắng nghe trên cổng TCP/UDP 853 không được hỗ trợ. Để sử dụng DoT hoặc DoQ, hãy triển khai ở chế độ Serverfull; hiện tại vui lòng sử dụng DoH.`},a={title:`Quy tắc tùy chỉnh`,subtitle:`Kiểm soát thủ công hành vi phân giải cho các tên miền cụ thể (Chặn, Cho phép hoặc Chuyển hướng).`,action:`Hành động`,typeBlock:`Chặn (BLOCK)`,typeAllow:`Cho phép (ALLOW)`,typeRedirect:`Chuyển hướng (REDIRECT)`,pattern:`Mẫu tên miền (Pattern)`,patternPlaceholder:`example.com hoặc *.test.com`,addRule:`Thêm quy tắc`,redirectSettings:`Cài đặt bản ghi chuyển hướng`,aRecord:`Bản ghi A (IPv4)`,aaaaRecord:`Bản ghi AAAA (IPv6)`,cnameRecord:`Bản ghi CNAME`,txtRecord:`Bản ghi TXT`,optional:`(Tùy chọn)`,ipv4Placeholder:`Ví dụ: 1.2.3.4`,ipv6Placeholder:`Ví dụ: 2001:db8::1`,cnamePlaceholder:`Ví dụ: target.com`,txtPlaceholder:`Nhập nội dung văn bản...`,saveRedirectRule:`Lưu và thêm quy tắc chuyển hướng`,noRulesTitle:`Không có quy tắc tùy chỉnh`,noRulesDesc:`Bạn chưa thêm bất kỳ quy tắc thủ công nào.`,tableAction:`Hành động`,tablePattern:`Mẫu`,tableDetails:`Chi tiết phân giải`,tableOps:`Thao tác`,labelBlock:`Chặn`,labelAllow:`Cho phép`,labelRedirect:`Chuyển hướng`,detailBlock:`Phân giải thành`,detailAllow:`Chuyển tiếp đến dịch vụ thượng nguồn`,patternEmpty:`Mẫu tên miền không được để trống`,duplicatePattern:`Quy tắc cho tên miền này đã tồn tại`,addSuccess:`Thêm quy tắc thành công`,addFailed:`Thêm quy tắc thất bại`,updateSuccess:`Cập nhật quy tắc thành công`,updateFailed:`Cập nhật quy tắc thất bại`,tableCreatedAt:`Thời gian thêm`,clickToSort:`Nhấp để sắp xếp`,editRule:`Chỉnh sửa quy tắc`,cancel:`Hủy`,saveChanges:`Lưu thay đổi`,delete:`Xóa`,close:`Đóng`},o={customRange:`Khoảng thời gian tùy chỉnh`,startTime:`Thời gian bắt đầu`,endTime:`Thời gian kết thúc`,apply:`Áp dụng`,custom:`Tùy chỉnh`,totalQueries:`Tổng số truy vấn`,blocked:`Đã chặn`,redirected:`Đã chuyển hướng`,blockRate:`Tỷ lệ chặn`,activeDevices:`Thiết bị đang hoạt động`,activeIPs:`Địa chỉ IP đang hoạt động`,queryTrend:`Xu hướng truy vấn`,noRecords:`Không có bản ghi nào trong khoảng thời gian này`,topAllowed:`Tên miền thường dùng (Được cho phép)`,topBlocked:`Tên miền bị chặn nhiều nhất (Bị chặn)`,noData:`Không có dữ liệu`,clientActivity:`Hoạt động của máy khách`,ipAddress:`Địa chỉ IP`,location:`Vị trí`,queries:`Số truy vấn`,destinationDistribution:`Phân bổ đích đến của lưu lượng`,requests:`Yêu cầu`,topIsps:`Nhà mạng chính (ISP)`,pressToShowMore:`Nhấn để xem thêm`,maximize:`Phóng to`,minimize:`Thu nhỏ`,loading:`Đang tải...`},s={title:`Nhật ký truy vấn`,subtitle:`Xem nhật ký phân giải DNS và bản ghi chặn của cấu hình này.`,realtime:`Thời gian thực`,allStatus:`Tất cả trạng thái`,onlyPass:`Đã cho phép`,onlyBlock:`Đã chặn`,onlyRedirect:`Đã chuyển hướng`,searchPlaceholder:`Tìm kiếm tên miền...`,noResults:`Không tìm thấy kết quả`,noRecords:`Chưa có bản ghi nào`,noResultsDesc:`Không tìm thấy bản ghi tên miền nào khớp với "{{query}}".`,noRecordsDesc:`Không nhận được truy vấn DNS nào trong khoảng thời gian đã chọn.`,tableTime:`Thời gian`,tableDomain:`Tên miền`,tableAnswer:`Kết quả phân giải`,tableSource:`Nguồn`,tableType:`Loại`,tableStatus:`Trạng thái`,tableReason:`Lý do`,loadedAll:`Đã tải toàn bộ {{count}} bản ghi`,realtimeLoadMoreTip:`Tắt chế độ “Thời gian thực” để tải thêm`,filterAccessPoint:`Điểm truy cập`,allAccessPoint:`Tất cả điểm truy cập`,allCountry:`Tất cả quốc gia`,filterCountry:`Quốc gia đích`,allIsp:`Tất cả ISP`,filterIsp:`ISP`,timeRange:`Khoảng thời gian`,clearFilters:`Xóa bộ lọc`,details:`Chi tiết truy vấn`,detailAccessPoint:`Điểm truy cập`,basicInfo:`Thông tin cơ bản`,detailDomain:`Tên miền`,detailType:`Loại`,detailTime:`Thời gian`,detailLatency:`Thời gian phản hồi`,detailProfile:`Cấu hình sử dụng`,detailStatus:`Trạng thái`,detailUpstream:`Máy chủ thượng nguồn`,detailReason:`Lý do`,detailNoReason:`Không có (Đã cho phép)`,detailECS:`ECS`,resolutionResult:`Kết quả phân giải`,noResult:`Không có kết quả`,networkDetails:`Chi tiết mạng`,clientSource:`Máy khách (Nguồn)`,destination:`Đích đến`,quickActions:`Thao tác nhanh`,actionAllow:`Cho phép`,actionBlock:`Chặn`,actionRedirect:`Chuyển hướng`,statusPass:`Đã cho phép`,statusBlock:`Đã chặn`,statusRedirect:`Đã chuyển hướng`,export:`Xuất nhật ký`,rewritten:`Đã viết lại`,logDetails:`Chi tiết nhật ký`,searchCountry:`Tìm kiếm quốc gia...`,noMatchingCountries:`Không tìm thấy quốc gia phù hợp`,searchIsp:`Tìm kiếm nhà mạng/ISP...`,noMatchingIsps:`Không tìm thấy ISP phù hợp`,loadingIsps:`Đang tải danh sách ISP...`,loggingDisabledTitle:`Ghi nhật ký đã bị tắt`,loggingDisabledDesc:`Thời gian lưu giữ nhật ký cho hồ sơ này được đặt thành 'Tắt'. Không có nhật ký truy vấn nào được ghi lại. Để xem nhật ký, hãy bật lưu giữ nhật ký trong Cài đặt.`,detailIsClientEncrypted:`Mã hóa phía máy khách`,encryptedLocked:`Có (Đã khóa)`,encryptedDecrypted:`Có (Đã giải mã cục bộ)`,encryptedYes:`Có`,notEncrypted:`Không`,encryptedRecord:`[Bản ghi đã mã hóa]`,exportSuccess:`Xuất nhật ký thành công`,exportError:`Không thể xuất nhật ký`},c={title:`Danh sách chặn bên ngoài`,subtitle:`Đăng ký danh sách chặn tên miền do bên thứ ba duy trì (như AdGuard, v.v.).`,formatDisclaimer:`Hệ thống này chỉ hỗ trợ một số định dạng danh sách AdGuard giới hạn và danh sách tên miền thuần túy. Chỉ hỗ trợ các quy tắc chặn cơ bản (ví dụ: ||example.com^), sẽ bỏ qua danh sách trắng "@@", hiện chưa hỗ trợ các quy tắc viết lại "$" và quy tắc rút gọn "*". Hệ thống sẽ tự động khớp tất cả các tên miền phụ của tên miền.`,syncAll:`Đồng bộ tất cả danh sách`,urlPlaceholder:`Nhập URL danh sách chặn...`,addSubscription:`Thêm đăng ký`,supportedFormats:`Các định dạng danh sách được hỗ trợ:`,formatAdGuard:`Tương thích với các quy tắc lọc như ||domain.com^.`,formatHosts:`Tương thích với tệp hosts tiêu chuẩn (ví dụ: 0.0.0.0 domain.com).`,noListsTitle:`Chưa thêm danh sách nào`,noListsDesc:`Bạn chưa đăng ký bất kỳ danh sách chặn bên ngoài nào.`,tableUrl:`URL danh sách`,tableLastSync:`Lần đồng bộ cuối`,tableStatus:`Trạng thái`,tableOps:`Thao tác`,neverSynced:`Chưa bao giờ`,enabled:`Bình thường`,disabled:`Đồng bộ thất bại`,statusNormal:`Bình thường`,statusDisabled:`Đã tắt`,statusOutdated:`Hết hạn`,statusMissing:`Thiếu`,presetOisdBig:`OISD Big (Chặn quảng cáo/phần mềm độc hại, v.v.)`,presetOisdNsfw:`OISD NSFW (Chặn nội dung khiêu dâm/nhạy cảm/người lớn)`,presetAdGuard:`AdGuard AdServers (Máy chủ quảng cáo)`,presetStevenBlack:`StevenBlack Hosts (Chặn tổng hợp)`,syncTaskStarted:`Bắt đầu tác vụ đồng bộ`,syncCheckComplete:`Kiểm tra đồng bộ hoàn tất`,syncTaskFailed:`Đồng bộ thất bại`,syncing:`Đang đồng bộ...`,syncSuccess:`Đồng bộ thành công`,syncError:`Đồng bộ thất bại`,syncErrorDesc:`Không thể tải xuống hoặc phân tích danh sách chặn này. Vui lòng kiểm tra xem liên kết có đúng không và đảm bảo liên kết có thể truy cập bình thường.`,deleteConfirm:`Xác nhận xóa đăng ký?`,deleteSuccess:`Xóa danh sách thành công`,deleteError:`Xóa danh sách thất bại`,addSuccess:`Thêm danh sách thành công`,addError:`Thêm danh sách thất bại`,listEnabled:`Danh sách hoạt động`,listEnabledHint:`Tắt để ngừng lọc bằng danh sách này mà không cần xoá. Đăng ký và lịch sử đồng bộ vẫn được giữ lại.`,listEnabledToast:`Đã bật danh sách - đang xây dựng lại bộ lọc`,listDisabledToast:`Đã tắt danh sách - đang xây dựng lại bộ lọc`,checkDomain:`Kiểm tra một tên miền`,checkDomainHint:`Danh sách được lưu dưới dạng bộ lọc nén, do đó không thể duyệt các mục trong đó. Bạn có thể kiểm tra ngay bất kỳ tên miền nào với danh sách này.`,check:`Kiểm tra`,checkBlocked:`Bị chặn bởi danh sách này`,checkNotBlocked:`Không bị chặn bởi danh sách này`,checkViaParent:`(khớp với tên miền cha)`,checkNotSynced:`Danh sách này chưa đồng bộ xong, nên chưa có gì để kiểm tra.`,checkListDisabled:`Danh sách này hiện đang tắt, nên không lọc gì vào lúc này.`,checkProbabilisticRate:`Bộ lọc mang tính xác suất: khoảng 1 trong {{odds}} lượt khớp là dương tính giả. Thêm ngoại lệ cũng áp dụng cho mọi tên miền con của nó.`,checkProbabilistic:`Bộ lọc mang tính xác suất, nên một phần nhỏ các lượt khớp là dương tính giả. Thêm ngoại lệ cũng áp dụng cho mọi tên miền con của nó.`,checkAllowAction:`Vẫn cho phép`,checkAllowed:`Đã thêm ngoại lệ - tên miền này giờ đã phân giải được`,allowRuleAdded:`Đã thêm ngoại lệ cho {{domain}}`,listDetails:`Chi tiết danh sách`},l={title:`Cài đặt cấu hình`,subtitle:`Quản lý chiến lược phân giải DNS và các tùy chọn nâng cao của bạn.`,saveChanges:`Lưu tất cả thay đổi`,saveSuccess:`Lưu cài đặt thành công`,saveError:`Lưu cài đặt thất bại, vui lòng thử lại sau`,upstreamTitle:`Dịch vụ thượng nguồn`,dohUrl:`DoH URL`,dnsIP:`DNS IP`,classicDns:`DNS truyền thống`,httpsOnly:`Chỉ hỗ trợ HTTPS`,upstreamDesc:`Tất cả các truy vấn không bị chặn sẽ được chuyển tiếp đến máy chủ này. Hỗ trợ DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) hoặc DNS truyền thống. DNS truyền thống được chuyển tiếp qua TCP.`,defaultPolicyTitle:`Hành vi chặn mặc định`,onNoMatch:`Khi không khớp quy tắc`,allowAll:`Cho phép tất cả truy vấn`,blockAll:`Chặn tất cả truy vấn`,logRetentionTitle:`Lưu giữ nhật ký`,retentionDuration:`Thời gian lưu giữ`,retentionDesc:`Nhật ký được xóa tự động. `,skipLogOnPass:`Không ghi nhật ký các truy vấn được phép`,skipLogOnPassDesc:`Khi bật, các truy vấn được phép thông thường sẽ không được ghi lại. Chỉ các truy vấn bị chặn, chuyển hướng hoặc thất bại mới được lưu.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`ECS-подсеть, отправляемая на upstream-сервер`,sendEcs:`Gửi ECS`,customSubnet:`Mạng con tùy chỉnh`,customIpv4:`Mạng con IPv4 tùy chỉnh`,customIpv6:`Mạng con IPv6 tùy chỉnh`,ipv4Hint:`(Ví dụ: 1.2.3.0/24)`,ipv6Hint:`(Ví dụ: 2001:db8::/32)`,testToolTitle:`Công cụ kiểm tra phân giải thời gian thực`,testDomain:`Tên miền kiểm tra`,recordType:`Loại bản ghi`,runTest:`Chạy kiểm tra`,domainPlaceholder:`Ví dụ: google.com`,hitRule:`Quy tắc khớp / Lý do`,defaultAllow:`Chiến lược cho phép mặc định`,parseLatency:`Thời gian phân giải`,sourceIp:`Địa chỉ IP nguồn`,answerSection:`Kết quả phân giải (Answer Section)`,noRecordsReturned:`Truy vấn này không trả về bất kỳ bản ghi nào.`,diagnostics:`Thông tin chẩn đoán`,errorDetail:`Chi tiết lỗi`,upstreamResponse:`Phản hồi từ máy chủ nguồn`,presetCloudflareSecurity:`Cloudflare Security (Nhanh/Chặn tên miền độc hại/Chặn tên miền lừa đảo)`,presetCloudflareFamilies:`Cloudflare Families (Nhanh/Chặn tên miền độc hại/Chặn nội dung người lớn)`,presetQuad9:`Quad9 (Chặn tên miền độc hại/Không lưu nhật ký/Không gửi ECS)`,presetQuad9Ecs:`Quad9 ECS (Chặn tên miền độc hại/Không lưu nhật ký/Có gửi ECS)`,presetControlDFree:`ControlD Free (Chặn quảng cáo/Theo dõi/Tên miền độc hại/Lừa đảo)`,presetControlDUncensored:`ControlD Uncensored (Chống kiểm duyệt)`,presetAdGuard:`AdGuard (Chặn quảng cáo/Theo dõi)`,presetAdGuardFamily:`Bảo vệ gia đình AdGuard (Chặn quảng cáo/Theo dõi/Nội dung người lớn/Tìm kiếm an toàn)`,retention10m:`10 phút`,retention1h:`1 giờ`,retention24h:`24 giờ`,retention7d:`7 ngày`,retention30d:`30 ngày`,retention90d:`90 ngày (Tối đa)`,blockModeTitle:`Chế độ phản hồi khi chặn`,blockModeDesc:`Nội dung trả về khi tên miền bị chặn`,default:`Mặc định`,NXDOMAIN:`Tên miền không tồn tại (NXDOMAIN)`,NODATA:`Không có dữ liệu (NODATA)`,customIP:`IP tùy chỉnh`,export:`Xuất cấu hình`,exportSuccess:`Xuất cấu hình thành công`,exportError:`Xuất cấu hình thất bại, vui lòng thử lại sau`,nameUpdateSuccess:`Tên cấu hình đã được cập nhật`,saving:`Đang lưu...`,echTitle:`Ghi đè ECH`,enableEch:`Bật ghi đè ECH`,echDesc:`Đối với các miền qua Cloudflare, tự động ghi đè tham số ECH và SNI bên ngoài khi truy vấn HTTPS (Type 65) / SVCB (Type 64) để bảo vệ quyền riêng tư.`,echFrontingTitle:`SNI bên ngoài (ECH Fronting)`,echFrontingDesc:`Tên miền hiển thị ở dạng văn bản thuần trong bắt tay TLS bên ngoài`,echFrontingCustomPlaceholder:`Nhập miền fronting tùy chỉnh, ví dụ: crypto.cloudflare.com`,echPreferred:`Ưu tiên`,whatIsEch:`ECH (Encrypted Client Hello) là gì?`,echHelpDesc:`ECH là tiện ích mở rộng quyền riêng tư của TLS 1.3 giúp mã hóa hoàn toàn tên miền thực (Inner SNI), chỉ để lộ tên miền ngụy trang (Outer SNI) cho bên trung gian.`,echHelpBenefit1:`Ngăn chặn nhà mạng và bên trung gian theo dõi miền phụ bạn đang truy cập`,echHelpBenefit2:`Kết hợp với DoH để loại bỏ rò rỉ SNI dạng văn bản thuần`,retentionDisabled:`Tắt (Bảo vệ quyền riêng tư)`,retentionDisabledDesc:`Ghi nhật ký đã bị tắt. Hệ thống sẽ không ghi lại bất kỳ nhật ký truy vấn DNS nào và sẽ xóa ngay nhật ký lịch sử.`,localRetentionTitle:`Lưu trữ & Giữ lại cục bộ`,localRetentionDuration:`Thời gian giữ lại cục bộ`,localRetentionDesc:`Nhật ký được lưu trữ liên tục trong cơ sở dữ liệu SQLite cục bộ của trình duyệt (OPFS), giúp tìm kiếm nhanh và tiết kiệm chi phí lưu trữ đám mây. Nhật ký cũ sẽ tự động được xóa.`,localRetention30d:`30 ngày`,localRetention90d:`90 ngày (Khuyến nghị)`,localRetention180d:`180 ngày`,localRetention365d:`365 ngày (1 năm)`,localRetentionUnlimited:`Không giới hạn (Đến khi xóa thủ công)`,localEngineStorage:`Công cụ lưu trữ`,localEngineOpfs:`Lưu trữ liên tục OPFS`,localEngineMemory:`Bộ nhớ tạm (Chế độ riêng tư)`,localCachedCount:`Nhật ký lưu cục bộ`,localCachedCountUnit:`{{count}} bản ghi`,clearLocalData:`Xóa nhật ký cục bộ`,clearLocalDataConfirm:`Bạn có chắc chắn muốn xóa tất cả nhật ký cục bộ cho cấu hình này không? (Nhật ký trên đám mây không bị ảnh hưởng)`,clearLocalDataSuccess:`Đã xóa nhật ký cục bộ thành công`,clearLocalDataError:`Không thể xóa nhật ký cục bộ`,e2eeTitle:`Mã hóa đầu cuối (E2EE)`,e2eeEnabled:`Đã bật`,e2eeDisabled:`Đã tắt`,e2eeDesc:`Mã hóa nhật ký DNS tại edge bằng khóa lai hậu lượng tử (P256-MLKEM768). Đám mây không thể xem dữ liệu; giải mã chỉ diễn ra cục bộ thông qua Passkey.`,e2eePasskeyRequired:`E2EE yêu cầu hỗ trợ Passkey (WebAuthn). Vui lòng thêm Passkey trong Cài đặt tài khoản trước.`,e2eeGoToAccount:`Đi tới Cài đặt tài khoản`,e2eeEnableSwitch:`Bật mã hóa đầu cuối`,e2eeKeyType:`Thuật toán mã hóa`,e2eeDeviceState:`Trạng thái trên thiết bị này`,e2eeUnlocked:`Đã mở khóa trên thiết bị này`,e2eeUnlockButton:`Xác minh Passkey để mở khóa`,e2eeProtectedPasskeys:`Thông tin xác thực Passkey được ủy quyền`,e2eeDevicesUnit:`thiết bị`,e2eeEnableSuccess:`Đã bật mã hóa đầu cuối thành công`,e2eeEnableError:`Không thể bật mã hóa đầu cuối`,e2eeDisableSuccess:`Đã tắt mã hóa đầu cuối`,e2eeDisableError:`Không thể tắt mã hóa đầu cuối`,e2eeUnlockSuccess:`Khóa riêng đã được mở khóa trên thiết bị này`,e2eeUnlockError:`Xác minh Passkey thất bại`,e2eeDisableConfirm:`Bạn có chắc chắn muốn tắt E2EE không? Nhật ký trong tương lai sẽ được lưu dưới dạng văn bản thuần túy.`,e2eeUnlockPrompt:`Cấu hình này sử dụng mã hóa E2EE. Xác minh Passkey để xem nhật ký văn bản gốc.`,e2eeUnlockNow:`Mở khóa nhật ký`,e2eeUnlockRecovery:`Mở khóa bằng khóa khôi phục`,securityTitle:`Bảo mật & Truy cập`,rotateKeyTitle:`URL truy cập`,rotateKeyDesc:`Tạo URL truy cập mới cho hồ sơ này. Mọi thiết bị hiện đang sử dụng URL cũ sẽ mất kết nối ngay lập tức với DNS Worker và cần được định cấu hình lại bằng URL mới.`,rotateKeyBtn:`Xoay vòng URL`,copied:`Đã sao chép vào khay nhớ tạm`,nameUpdateFailed:`Cập nhật thất bại`},u=JSON.parse(`{"title":"Cài đặt tài khoản","subtitle":"Quản lý thông tin bảo mật và người dùng hệ thống của bạn.","e2ee":{"title":"Mã hóa đầu cuối (E2EE)","desc":"Sử dụng mã hóa phong bì lai hậu lượng tử (P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) phía máy khách được bảo vệ bởi Passkey phần cứng. Dữ liệu được mã hóa tại Edge; máy chủ chỉ lưu trữ văn bản mã hóa. Giải mã chỉ thực hiện cục bộ trên các thiết bị được ủy quyền.","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"Nâng cấp lên Hậu lượng tử (PQC)","upgradePqcSuccess":"Đã nâng cấp thành công lên mã hóa lai hậu lượng tử (P256-MLKEM768)","upgradePqcError":"Nâng cấp lên mã hóa hậu lượng tử thất bại","enabled":"Đã bật","disabled":"Chưa bật","passkeyRequired":"Mã hóa đầu cuối yêu cầu ít nhất một Passkey phần cứng (WebAuthn). Vui lòng thêm Passkey trong phần cài đặt MFA ở trên.","scopesTitle":"Phạm vi dữ liệu mã hóa","scopesSubtitle":"Chọn các danh mục dữ liệu được bảo vệ bằng mã hóa đầu cuối với Passkey phần cứng của bạn.","scopeLogsTitle":"Nhật ký truy vấn DNS","scopeLogsDesc":"Mã hóa tên miền, IP máy khách, bản ghi phản hồi và độ trễ tại Edge trước khi lưu vào D1.","scopeRulesTitle":"Quy tắc tùy chỉnh & Chuyển hướng","scopeRulesDesc":"Quy tắc chặn/cho phép tùy chỉnh và cấu hình chuyển hướng được mã hóa phía máy khách.","scopeClientsTitle":"Siêu dữ liệu thiết bị & máy khách","scopeClientsDesc":"Tên thiết bị điểm truy cập, bí danh IP và thông tin cấu trúc mạng.","statusActive":"Được bảo vệ","statusPlanned":"Đang lên kế hoạch","profileSelect":"Cấu hình Profile","keyType":"Thuật toán mã hóa","deviceState":"Trạng thái thiết bị hiện tại","unlocked":"Đã mở khóa trên thiết bị này","unlockButton":"Xác thực Passkey để mở khóa","protectedPasskeys":"Thông tin xác thực Passkey được ủy quyền","devicesUnit":"thông tin xác thực","enableSuccess":"Đã bật mã hóa đầu cuối thành công","enableError":"Không thể bật mã hóa đầu cuối","disableSuccess":"Đã tắt mã hóa đầu cuối","disableError":"Không thể tắt mã hóa đầu cuối","unlockSuccess":"Đã mở khóa khóa riêng tư thành công trên thiết bị này","unlockError":"Xác thực Passkey để mở khóa thất bại","disableConfirm":"Bạn có chắc chắn muốn tắt mã hóa đầu cuối cho cấu hình này không? Các nhật ký trong tương lai sẽ được lưu dưới dạng văn bản thô. (Nhật ký mã hóa trước đây vẫn cần khóa riêng tư để giải mã)","noKeypairTitle":"Cặp khóa mã hóa đầu cuối chưa được khởi tạo","noKeypairDesc":"Mã hóa đầu cuối yêu cầu tạo cặp khóa hậu lượng tử (P256-MLKEM768) dành riêng cho tài khoản của bạn. Khóa riêng tư được bảo vệ bằng mã hóa phong bì qua Passkey hoặc khóa khôi phục.","initPasskeyBtn":"Xác minh Passkey hiện có để tạo cặp khóa","addPasskeyBtn":"Thêm Passkey để hỗ trợ mã hóa phần cứng","initRecoveryBtn":"Tạo cặp khóa bằng khóa khôi phục","initWithRecoveryTitle":"Tạo cặp khóa bằng khóa khôi phục","initWithRecoveryDesc":"Nhập khóa khôi phục khẩn cấp 30 chữ số hiện tại của bạn. Hệ thống sẽ tạo cục bộ cặp khóa hậu lượng tử (P256-MLKEM768). Khóa sẽ tự động xoay vòng sau khi sử dụng.","keypairGenSuccess":"Đã tạo cặp khóa mã hóa đầu cuối thành công!","keypairGenError":"Không thể tạo cặp khóa mã hóa","unlockRecoveryButton":"Mở khóa bằng khóa khôi phục","unlockWithRecoveryTitle":"Mở khóa bằng khóa khôi phục","unlockWithRecoveryDesc":"Nhập khóa khôi phục 30 chữ số của bạn. Lưu ý: Theo quy tắc sử dụng một lần, khóa sẽ tự động xoay vòng ngay sau khi xác minh thành công.","recoveryKeyInputLabel":"Khóa khôi phục","unlockConfirm":"Mở khóa khóa riêng tư","recoveryUnlockFailed":"Khóa khôi phục không hợp lệ hoặc giải mã thất bại","generateKeypairBtn":"Tạo cặp khóa","enableSwitch":"Bật mã hóa đầu cuối cho nhật ký truy vấn","enableSwitchDesc":"Mã hóa tên miền, IP máy khách, bản ghi phản hồi và độ trễ ngược dòng tại biên trước khi lưu vào đám mây.","trustBoundaryTitle":"Thông báo về ranh giới bảo mật và tin cậy","trustBoundaryDesc":"Tất cả lưu lượng truy vấn DNS chắc chắn sẽ đi qua máy chủ lưu trữ (nút biên Cloudflare Workers hoặc máy chủ tự lưu trữ) trong quá trình phân giải, nơi các truy vấn được xử lý trong bộ nhớ trước khi ghi mã hóa. Tính năng này chỉ bảo vệ dữ liệu tĩnh trong cơ sở dữ liệu đám mây (D1); không thể ẩn lưu lượng mạng trực tiếp đối với máy chủ đang xử lý yêu cầu.","initFailed":"Không thể khởi tạo mã hóa đầu cuối","lockDevice":"Khóa thiết bị này","lockSuccess":"Đã khóa, khóa riêng đã được xóa khỏi bộ nhớ cục bộ"},"jwtSecretWarningTitle":"Cảnh báo bảo mật: Mã bí mật JWT yếu","jwtSecretWarningDesc":"JWT_SECRET hiện tại có ít hơn 32 ký tự, tiềm ẩn rủi ro bảo mật. Vui lòng cấu hình biến môi trường KEK_v1 trước khi xoay vòng JWT_SECRET để đảm bảo các khóa TOTP và khóa khôi phục được mã hóa phong bì vẫn có thể giải mã được.","roleAdmin":"Quản trị viên hệ thống","roleUser":"Người dùng","personalInfo":"Thông tin cá nhân","username":"Tên đăng nhập","userId":"ID người dùng","changePassword":"Đổi mật khẩu","currentPassword":"Mật khẩu hiện tại","newPassword":"Mật khẩu mới","updatePassword":"Cập nhật mật khẩu","userManagement":"Quản lý người dùng (Quản trị viên)","createUser":"Tạo người dùng","role":"Vai trò","createdAt":"Thời gian tạo","lastActive":"Hoạt động lần cuối","lastResolve":"Phân giải lần cuối","actions":"Thao tác","dangerZone":"Khu vực nguy hiểm","clearLogs":"Xóa tất cả nhật ký","clearLogsDesc":"Hành động này sẽ xóa nhật ký truy vấn được tạo bởi tất cả các cấu hình DNS dưới tên bạn. Hành động này không thể hoàn tác.","clearLogsBtn":"Xóa nhật ký ngay bây giờ","deleteAccount":"Xóa tài khoản","deleteAccountDesc":"Xóa vĩnh viễn tài khoản của bạn và tất cả dữ liệu liên quan. Hành động này sẽ khiến bạn mất tất cả các cấu hình phân giải.","deleteAccountBtn":"Xóa tài khoản vĩnh viễn","createNewUser":"Tạo người dùng mới","initialPassword":"Mật khẩu khởi tạo","userRole":"Vai trò người dùng","cancel":"Hủy","createNow":"Tạo ngay","formatTipUsername":"Định dạng tên đăng nhập: Chỉ từ 5 đến 32 ký tự theo định dạng Unix","formatTipPassword":"Định dạng mật khẩu: 12-100 ký tự","passwordSuccess":"Đổi mật khẩu thành công","updateFailed":"Cập nhật thất bại","confirmDeleteUser":"Bạn có chắc chắn muốn xóa người dùng này không? Tất cả cấu hình họ sở hữu cũng sẽ bị xóa.","confirmClearLogs":"Bạn có chắc chắn muốn xóa nhật ký truy vấn của tất cả cấu hình dưới tên bạn không? Hành động này không thể hoàn tác.","clearLogsSuccess":"Nhật ký đã được xóa thành công","confirmDeleteAccount":"Cảnh báo: Bạn có chắc chắn muốn xóa tài khoản này không?\\n\\nTất cả cấu hình DNS, quy tắc tùy chỉnh và nhật ký truy vấn của bạn sẽ bị xóa vĩnh viễn. Hành động này không thể đảo ngược!","inactivityPolicy":"Chính sách hoạt động","inactivityDesc":"Để bảo vệ quyền riêng tư của người dùng và tiết kiệm tài nguyên, tất cả nhật ký truy vấn và cấu hình DNS của các tài khoản không có hoạt động phân giải trong 30 ngày sẽ được tự động xóa. Bản thân tài khoản sẽ bị xóa sau 90 ngày không đăng nhập.","systemSettings":"Cài đặt hệ thống (Quản trị viên)","adminOnlyView":"Chỉ dành cho quản trị viên","featureToggle":"Bật/Tắt tính năng","enableTurnstileSignup":"Bật xác minh người máy trên trang đăng ký","enableTurnstileLogin":"Bật xác minh người máy trên trang đăng nhập","totp":{"title":"Ứng dụng xác thực (TOTP)","enabled":"Đã bật","disabled":"Chưa bật","setupDesc":"Thêm một lớp bảo mật bổ sung cho tài khoản của bạn. Sử dụng Google Authenticator, Authy hoặc bất kỳ ứng dụng tương thích TOTP nào.","setupBtn":"Cấu hình ứng dụng xác thực (TOTP)","scanQR":"Sử dụng ứng dụng xác thực để quét mã QR này:","orEnterManually":"Hoặc nhập khóa thủ công:","enterCode":"Vui lòng nhập mã từ ứng dụng xác thực để xác nhận:","enterCodeHint":"Nhập mã xác thực 6 chữ số để xác nhận khóa đã được ghi lại chính xác.","activate":"Kích hoạt TOTP","skipPassword":"Đăng nhập không mật khẩu — Chỉ hiển thị ô nhập TOTP khi đăng nhập (không hiển thị mật khẩu)","disable":"Tắt ứng dụng xác thực (TOTP)","disableTitle":"Tắt ứng dụng xác thực (TOTP)","disableWarning":"Sau khi tắt TOTP, nếu chưa cấu hình Passkey, tài khoản của bạn sẽ chỉ được bảo vệ bằng mật khẩu.","confirmDisable":"Tắt TOTP","recoveryKeysTitle":"Vui lòng lưu các khóa khôi phục của bạn","recoveryKeysWarning":"Vui lòng lưu khóa khôi phục ở nơi an toàn (như trình quản lý mật khẩu). Mỗi khóa chỉ có thể sử dụng một lần.","copyKeys":"Sao chép tất cả khóa","copied":"Đã sao chép!","done":"Xong, tôi đã lưu khóa","activeDesc":"Ứng dụng xác thực (TOTP) đang hoạt động và tạo mã xác nhận 6 chữ số.","invalidCode":"Vui lòng nhập mã gồm 6 chữ số"},"activity":{"title":"Nhật ký hoạt động tài khoản","action":"Sự kiện","time":"Thời gian","ip":"IP địa chỉ","session":"Phiên làm việc","empty":"Chưa có nhật ký hoạt động.","loadMore":"Tải thêm","signup":"Đăng ký","loginSuccess":"Đăng nhập thành công","loginFail":"Đăng nhập thất bại","logout":"Đăng xuất","pwChangeSuccess":"Đổi mật khẩu thành công","pwChangeFail":"Đổi mật khẩu thất bại","totpVerifySuccess":"Xác minh TOTP thành công","totpVerifyFail":"Xác minh TOTP thất bại","totpSetup":"Đã thiết lập ứng dụng TOTP","totpRemoved":"Đã tắt ứng dụng TOTP","recoveryKeyUsed":"Sử dụng khóa khôi phục","sessionRevoked":"Phiên làm việc đã bị thu hồi","reasons":{"user_active":"Người dùng chủ động đăng xuất","user_revoke":"Thu hồi phiên làm việc","expired":"Phiên đã hết hạn","geolocation_mismatch":"Hạn chế truy cập từ vị trí khác","geolocation_missing":"Thiếu thông tin vị trí địa lý","token_reuse":"Sử dụng lại mã xác thực (Cảnh báo bảo mật)"},"passkeyRegistered":"Đăng ký Passkey","passkeyDeleted":"Xóa Passkey","passkeyVerifySuccess":"Xác minh Passkey thành công","passkeyVerifyFail":"Xác minh Passkey thất bại","recoveryKeyRotated":"Khóa khôi phục đã được xoay vòng","device":"Thiết bị"},"sessions":{"title":"Phiên hoạt động","session":"Phiên","device":"Thiết bị","ip":"Địa chỉ IP","loginTime":"Thời gian đăng nhập","expires":"Hết hạn","action":"Hành động","current":"Hiện tại","revoke":"Thu hồi","revokeFailed":"Không thể thu hồi phiên.","empty":"Không tìm thấy phiên hoạt động nào.","unknownDevice":"Thiết bị không xác định","revokeOthers":"Thu hồi các phiên khác","confirmRevokeOthers":"Thu hồi các phiên khác","revokeOthersConfirmText":"Bạn có chắc chắn muốn thu hồi tất cả các phiên hoạt động khác không? Tất cả các thiết bị đã đăng nhập khác sẽ bị đăng xuất ngay lập tức."},"passkey":{"title":"Mã khóa (Passkey)","addBtn":"Thêm Passkey","desc":"Sử dụng xác thực sinh trắc học (Touch ID, Face ID, Windows Hello) hoặc khóa bảo mật (YubiKey) để xác thực đa yếu tố nhanh chóng và chống lừa đảo.","empty":"Chưa có Passkey nào được thêm.","addTitle":"Thêm Passkey","nameLabel":"Tên Passkey","namePlaceholder":"vd: my_passkey","promptNotice":"Sau khi nhấp tiếp tục, trình duyệt sẽ nhắc bạn hoàn tất đăng ký sinh trắc học hoặc khóa bảo mật.","continue":"Tiếp tục","renameTitle":"Đổi tên Passkey","deleteTitle":"Xóa Passkey","deleteConfirm":"Bạn có chắc chắn muốn xóa Passkey \\"{{name}}\\" không? Bạn sẽ không thể sử dụng nó để xác thực đa yếu tố nữa.","defaultName":"Passkey","notSupported":"Trình duyệt hoặc môi trường hiện tại của bạn không hỗ trợ Passkey (WebAuthn).","regFailed":"Đăng ký Passkey thất bại","count":"{{count}} đã định cấu hình","none":"Chưa định cấu hình","created":"Thời gian tạo","lastUsed":"Sử dụng lần cuối","neverUsed":"Chưa từng sử dụng","updated":"Cập nhật Passkey thành công","registered":"Đã đăng ký Passkey thành công","deleted":"Đã xóa Passkey","appNameLabel":"Tên miền","appNameHelper":"Mã khóa sẽ được liên kết với tên miền này","formatTip":"Gợi ý tên Passkey: 1-30 ký tự, chỉ cho phép chữ cái, số, dấu gạch dưới và dấu gạch ngang","verifyPrompt":"Xác thực bằng sinh trắc học thiết bị hoặc khóa bảo mật.","changePwNotice":"Bạn sẽ được nhắc xác thực bằng Passkey khi gửi biểu mẫu.","submitNotice":"Bạn sẽ được nhắc xác thực bằng Passkey khi gửi biểu mẫu."},"mfaNone":"Không","resetUserPassword":"Đặt lại mật khẩu","resetPasswordTitle":"Đặt lại mật khẩu người dùng","resetPasswordWarning":"Sau khi đặt lại, tất cả các phiên đăng nhập của người dùng sẽ bị hủy ngay lập tức.","resetPasswordSuccess":"Đặt lại mật khẩu thành công. Các phiên trước đó đã bị hủy.","confirmReset":"Xác nhận đặt lại","mfa":{"title":"Xác thực đa yếu tố (MFA)","enabled":"Đã cấu hình","notConfigured":"Chưa cấu hình","desc":"Khóa truy cập (Passkey) và ứng dụng xác thực (TOTP) đều là phương thức MFA. Cấu hình ít nhất một phương thức để bảo vệ tài khoản.","passwordlessTitle":"Đăng nhập không mật khẩu","passwordlessDesc":"Khi bật, đăng nhập sẽ bỏ qua mật khẩu và xác minh danh tính trực tiếp qua Passkey hoặc TOTP.","unconfiguredHint":"Chưa có phương thức MFA nào được cấu hình. Hãy thiết lập Passkey hoặc ứng dụng xác thực bên dưới.","password":"Mật khẩu","passkey":"Passkey","totp":"TOTP"},"recoveryKey":{"title":"Khóa khôi phục khẩn cấp","desc":"Khóa khôi phục khẩn cấp cho phép bạn lấy lại quyền truy cập hoặc đặt lại mật khẩu nếu bạn mất tất cả Passkey hoặc ứng dụng xác thực. Nhằm đảm bảo bảo mật không tri thức (Zero-Knowledge), khóa được lưu dưới dạng băm mật mã một chiều và không thể xem ở dạng văn bản thuần. Khóa sẽ tự động xoay vòng ngay lập tức sau mỗi lần sử dụng.","configured":"Đã cấu hình","notConfigured":"Chưa cấu hình","rotateBtn":"Xoay vòng khóa khôi phục","yourKey":"Khóa khôi phục 30 chữ số của bạn","securityTip":"Hãy giữ bí mật khóa này. Bất kỳ ai có khóa này đều có thể truy cập vào tài khoản của bạn.","rotateConfirm":"Xoay vòng khóa sẽ vô hiệu hóa khóa hiện tại ngay lập tức. Xác minh chỉ cho phép qua Passkey hiện có hoặc khóa gốc. Tiếp tục?","confirmRotateBtn":"Tiến hành xoay vòng","rotateVerifyTitle":"Xác minh danh tính để xoay vòng khóa","rotateSuccess":"Xoay vòng khóa khôi phục thành công! Vui lòng lưu trữ khóa mới ở nơi an toàn ngay.","oneWayHash":"Băm mật mã một chiều","oneWayTooltip":"Được bảo vệ bằng băm một chiều SHA-256. Máy chủ không lưu văn bản thuần và không thể giải mã.","newKeyGenerated":"Đã tạo khóa khôi phục 30 chữ số mới (Vui lòng lưu ngay)","oneWayWarning":"Lưu ý: Khóa này CHỈ HIỂN THỊ MỘT LẦN. Máy chủ chỉ lưu bản băm không thể đảo ngược, hãy sao chép và lưu trữ an toàn ngoại tuyến.","autoRotatedTitle":"Khóa khôi phục đã tự động xoay vòng","autoRotatedNotice":"Theo quy tắc sử dụng một lần, khóa trước đây của bạn đã bị vô hiệu hóa và khóa 30 chữ số mới đã được tạo. Hãy sao chép và lưu trữ ngoại tuyến an toàn ngay!","savedAndClose":"Tôi đã lưu an toàn và tiếp tục","savedAndContinue":"Tôi đã lưu an toàn và vào bảng điều khiển","descOneWay":"Khóa khôi phục khẩn cấp là thông tin xác thực duy nhất để lấy lại quyền truy cập tài khoản và giải mã dữ liệu E2EE nếu mất tất cả Passkey hoặc ứng dụng xác thực. Để đảm bảo an toàn không kiến thức (zero-knowledge), khóa được lưu trữ dưới dạng băm một chiều không thể đảo ngược, không thể xem dưới dạng văn bản thuần túy và chỉ có thể xoay vòng bằng khóa khôi phục ban đầu hoặc Passkey hiện có. Khóa sẽ tự động xoay vòng ngay sau khi được sử dụng.","keyRequired":"Cần có khóa khôi phục","verifyBtn":"Khóa khôi phục","verifyPromptLabel":"Khóa khôi phục ban đầu"},"verifyIdentity":"Xác minh bảo mật","verifyIdentityDesc":"Để bảo vệ tài khoản của bạn, vui lòng xác minh danh tính trước khi tiếp tục.","usePasskeyInstead":"Xác thực bằng Passkey","changePasswordWithPasskey":"Xác minh bằng Passkey & Cập nhật mật khẩu","enableRegistration":"Cho phép đăng ký người dùng mới","timezone":"Múi giờ","timezoneAuto":"Tự động (mặc định của trình duyệt)","totpCode":"Mã xác thực"}`),d={item1Title:`Obex Protective DNS`,item1Desc:`Bộ phân giải DNS dựa trên Cloudflare Workers & D1, nỗ lực tối đa vì tốc độ và bảo mật.`,item2Title:`Bảo vệ quyền riêng tư DoH`,item2Desc:`Ngăn chặn việc bị chặn và tăng cường quyền riêng tư thông qua đường hầm mã hóa DNS over HTTPS (RFC 8484).`,item3Title:`Mạng lưới biên toàn cầu`,item3Desc:`Dựa trên mạng lưới biên rộng lớn của Cloudflare để có tốc độ phân giải cực nhanh và độ trễ cực thấp.`,item4Title:`Lọc tinh vi`,item4Desc:`Hỗ trợ đầy đủ danh sách đen/trắng, quy tắc AdGuard và chuyển hướng bản ghi DNS tùy chỉnh.`,item5Title:`Thống kê và phân tích thời gian thực`,item5Desc:`Hiển thị trực quan tình trạng sức khỏe của mạng thông qua nhật ký truy vấn chi tiết và bảng điều khiển thống kê tổng hợp.`,item6Title:`Giao diện hiện đại & Chế độ tối`,item6Desc:`Bảng quản lý mật độ cao được thiết kế cho các kỹ sư và người dùng gia đình, dựa trên Blueprint UI của Palantir.`,item7Title:`Cơ sở hạ tầng Cloud Native`,item7Desc:`Kiến trúc không máy chủ (Serverless) đảm bảo không tốn công bảo trì và khả năng mở rộng vô hạn cho DNS cá nhân.`,item8Title:`Quản lý nhiều cấu hình`,item8Desc:`Tạo và quản lý nhiều cấu hình độc lập cho các thiết bị hoặc môi trường mạng khác nhau.`,item9Title:`Quản lý nhiều điểm truy cập`,item9Desc:`Cấu hình các điểm truy cập DNS riêng cho các thiết bị khác nhau, thực hiện cách ly và phân tích tinh vi dữ liệu nhật ký và thống kê.`},f={title:`Hướng dẫn Thiết lập & Triển khai DNS Worker`,subtitle:`Phiên bản của bạn chưa được cấu hình đầy đủ. Vui lòng hoàn thành các bước bên dưới để kích hoạt DNS Worker.`,dbStatus:`Liên kết Cơ sở Dữ liệu D1 (env.DB)`,jwtStatus:`Khóa Bí mật JWT (env.JWT_SECRET)`,configured:`Đã cấu hình`,missing:`Thiếu / Chưa cấu hình`,refresh:`Tải lại & Xác minh`,methodCli:`Triển khai bằng CLI`,methodDash:`Triển khai bằng Bảng điều khiển Cloudflare`,copy:`Sao chép`,copied:`Đã sao chép!`,stepDbTitle:`1. Liên kết Cơ sở Dữ liệu D1`,stepDbDesc:`Tạo một cơ sở dữ liệu D1 và liên kết nó với worker của bạn. Chạy lệnh sau trong terminal:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`Sao chép thông tin cơ sở dữ liệu D1 đầu ra và dán vào file wrangler.toml dưới mục [[d1_databases]]:`,stepDbCommand2:`[[d1_databases]]
|
|
1
|
+
const e={account:`Tài khoản`,logout:`Đăng xuất`,selectProfile:`Chọn cấu hình`,add:`Thêm`,newProfileName:`Tên cấu hình mới...`,profileNameFormatTip:`Gợi ý tên cấu hình: 1-30 ký tự và không được trùng với tên hiện có`,profileLimitExceeded:`Đạt giới hạn số lượng cấu hình (tối đa {{max}})`,profileNameExists:`Tên cấu hình này đã tồn tại`,profileNameFormatError:`Định dạng tên cấu hình không hợp lệ`,create:`Tạo`,welcome:`Chào mừng`,createProfileToStart:`Tạo một cấu hình để bắt đầu.`,loading:`Đang tải...`,errorNetwork:`Lỗi mạng`,confirmDelete:`Bạn có chắc chắn muốn xóa cấu hình này không?`,confirmLogout:`Bạn có chắc chắn muốn đăng xuất không?`,notFound:`404 - Không tìm thấy trang`,notFoundDesc:`Trang bạn đang tìm kiếm không tồn tại hoặc đã bị xóa.`,backToHome:`Quay lại trang chủ`,apac:`Châu Á - Thái Bình Dương`,mainlandChina:`Trung Quốc Đại Lục`,HongKong:`Hồng Kông`,Singapore:`Singapore`,Tokyo:`Tokyo`,NorthAmerica:`Bắc Mỹ`,nae:`Miền Đông Bắc Mỹ`,naw:`Miền Tây Bắc Mỹ`,eu:`Châu Âu`,invalidFormat:`Định dạng tệp không hợp lệ`,import:`Nhập`,importSuccess:`Nhập cấu hình thành công`,importError:`Nhập cấu hình thất bại, vui lòng đảm bảo định dạng đúng và thử lại sau`,save:`Lưu`,saveSuccess:`Đã lưu cài đặt`,close:`Đóng`,cancel:`Hủy`,continue:`Tiếp tục`,back:`Quay lại`,copy:`Sao chép`,copied:`Đã sao chép`,copyKey:`Sao chép khóa khôi phục mới`,confirm:`Xác nhận`,delete:`Xóa`,rename:`Đổi tên`,disable:`Vô hiệu hóa`,confirmDisable:`Xác nhận vô hiệu hóa`,modeServerfull:`Chế độ Serverfull`,modeCloudflare:`Chế độ Cloudflare Worker`},t={setup:`Thiết lập`,rules:`Quy tắc`,stats:`Thống kê`,logs:`Nhật ký`,filter:`Bộ lọc`,settings:`Cài đặt`},n={light:`Sáng`,dark:`Tối`,system:`Theo hệ thống`},r={login:`Đăng nhập DNS Worker`,signup:`Tạo tài khoản để bắt đầu`,welcomeBack:`Chào mừng trở lại, vui lòng nhập thông tin đăng nhập`,protectInternet:`Bảo vệ bước nhảy internet đầu tiên của bạn`,error:`Lỗi`,username:`Tên đăng nhập`,usernamePlaceholder:`Tên đăng nhập của bạn`,password:`Mật khẩu`,passwordPlaceholder:`Mật khẩu của bạn`,loginBtn:`Đăng nhập`,signupBtn:`Đăng ký`,totpVerification:`Xác thực TOTP`,noAccount:`Chưa có tài khoản? Đăng ký ngay`,haveAccount:`Đã có tài khoản? Quay lại đăng nhập`,formatTipUsername:`Định dạng tên đăng nhập: Chỉ từ 5 đến 32 ký tự theo định dạng Unix (bắt đầu bằng chữ thường hoặc dấu gạch dưới, bao gồm chữ thường, số, dấu gạch dưới và dấu gạch ngang)`,formatTipPassword:`Định dạng mật khẩu: 12-100 ký tự`,authFailed:`Xác thực thất bại, vui lòng kiểm tra tên đăng nhập hoặc mật khẩu`,networkError:`Lỗi mạng, vui lòng thử lại sau`,turnstileRequired:`Vui lòng hoàn thành xác minh người máy`,turnstileError:`Không thể tải dịch vụ xác minh, vui lòng kiểm tra Site Key hoặc cấu hình tên miền`,verifying:`Đang thực hiện xác minh bảo mật...`,passwordLeaked:`Mật khẩu của bạn đã bị lộ, vì an toàn tài khoản, vui lòng sử dụng mật khẩu ngẫu nhiên/mạnh.`,usernameExists:`Tên đăng nhập này đã được đăng ký, vui lòng thử tên khác.`,skip:`Bỏ qua`,showPassword:`Hiện mật khẩu`,hidePassword:`Ẩn mật khẩu`,geolocationRequired:`Lấy vị trí địa lý thất bại, vui lòng thử đăng nhập lại.`,unauthorizedDefault:`Phiên đăng nhập của bạn đã hết hạn, vui lòng đăng nhập lại.`,unauthorizedGeo:`Phát hiện thay đổi vị trí địa lý (vượt quá giới hạn khoảng cách), phiên hiện tại đã bị buộc đăng xuất.`,unauthorizedExpired:`Đăng nhập của bạn đã hết hạn, vui lòng đăng nhập lại.`,unauthorizedReuse:`Cảnh báo bảo mật: Phát hiện đăng nhập trùng lặp, phiên đã bị chấm dứt.`,unauthorizedRevoked:`Phiên của bạn đã bị đăng xuất hoặc xóa, vui lòng đăng nhập lại.`,sessionLockTitle:`Khóa phiên khi không hoạt động`,sessionLockDesc:`Khóa giao diện bằng mã PIN 4 chữ số khi ứng dụng không hoạt động để bảo vệ các phiên đang mở khỏi truy cập vật lý trái phép.`,enableSessionLock:`Bật khóa phiên`,inactivityTimeout:`Thời gian chờ không hoạt động`,timeout1m:`1 phút`,timeout2m:`2 phút`,timeout5m:`5 phút`,timeout15m:`15 phút`,timeout30m:`30 phút`,timeout60m:`60 phút`,changePin:`Thay đổi mã PIN`,disablePin:`Tắt khóa phiên`,configurePin:`Cấu hình mã PIN`,newPin:`Mã PIN 4 chữ số mới`,pinHelper:`Chỉ nhập số, ví dụ: 1234`,confirmPin:`Xác nhận mã PIN mới`,verifyIdentity:`Xác minh danh tính`,usePassword:`Sử dụng mật khẩu`,use2fa:`Sử dụng mã TOTP`,totpCode:`Mã TOTP`,currentPassword:`Mật khẩu hiện tại`,disablePinWarning:`Tắt mã PIN sẽ vô hiệu hóa hoàn toàn tính năng khóa phiên khi không hoạt động.`,pinFormatTip:`Mã PIN phải chứa đúng 4 chữ số`,pinMatchTip:`Mã PIN không khớp`,passwordRequired:`Yêu cầu nhập mật khẩu để xác minh`,sessionLocked:`Phiên bị khóa do không hoạt động`,sessionExpired:`Quá nhiều lần thử thất bại. Phiên đã bị chấm dứt.`,pinIncorrect:`Mã PIN không chính xác`,attemptsRemaining:`Còn lại {{count}} lần thử`,logoutAndReturn:`Đăng xuất phiên`,lockNow:`Khóa ngay`,cfErrorWithDetails:`Lỗi Cloudflare Edge (Lỗi {{code}}: {{desc}}). Dịch vụ tạm thời không khả dụng, vui lòng thử lại sau. {{rayId}}`,cfErrorCodeOnly:`Lỗi Cloudflare Edge (Lỗi {{code}}). Dịch vụ tạm thời không khả dụng. {{rayId}}`,cfErrorGeneric:`Lỗi Cloudflare Edge, dịch vụ tạm thời không khả dụng. Vui lòng thử lại sau. {{rayId}}`,htmlErrorGeneric:`Máy chủ đã trả về phản hồi không mong muốn (HTTP {{status}}). Vui lòng thử lại sau.`,tooManyAttempts:`Quá nhiều yêu cầu hoặc lần thử. Vui lòng thử lại sau.`,dbQuotaExceeded:`Đã vượt quá hạn mức đọc cơ sở dữ liệu hàng ngày. Vui lòng đợi thiết lập lại hàng ngày.`,noUsersRegistered:`Chưa có tài khoản nào được đăng ký. Vui lòng đăng ký làm quản trị viên.`,registerAdminTitle:`Đăng ký tài khoản quản trị viên`,registerAdminDesc:`Hệ thống chưa có tài khoản. Người dùng đầu tiên sẽ trở thành quản trị viên hệ thống.`,goToRegisterAdmin:`Đăng ký quản trị`,dbNotInitialized:`Cơ sở dữ liệu chưa được khởi tạo hoặc thiếu bảng. Vui lòng chạy npm run db:migrate:prod trong terminal.`,verifyWithPasskey:`Xác minh bằng Passkey`,orUseTotp:`Hoặc sử dụng mã xác thực`,passwordRequiredFirst:`Vui lòng nhập mật khẩu trước`,passkeyVerification:`Xác minh Passkey`,passkeyPromptDesc:`Xác minh bằng sinh trắc học hoặc khóa bảo mật đã đăng ký`,forgotPassword:`Quên mật khẩu?`,forgotPasswordTitle:`Đặt lại mật khẩu`,forgotPasswordDesc:`Khôi phục tài khoản an toàn bằng xác thực đa yếu tố (Passkey hoặc TOTP).`,noMfaContactAdmin:`Tài khoản này chưa cấu hình xác thực đa yếu tố (Passkey hoặc TOTP). Vui lòng liên hệ quản trị viên để được đặt lại mật khẩu.`,chooseMfaForReset:`Chọn phương thức xác thực để xác minh danh tính của bạn:`,authViaPasskey:`Xác minh bằng Passkey`,authViaPasskeyDesc:`Xác thực một chạm bằng sinh trắc học hoặc khóa bảo mật phần cứng`,authViaTotp:`Xác minh bằng ứng dụng xác thực (TOTP)`,authViaTotpDesc:`Nhập mã động 6 chữ số từ ứng dụng xác thực của bạn`,authViaRecoveryKey:`Sử dụng khóa khôi phục khẩn cấp`,authViaRecoveryKeyDesc:`Nhập khóa khôi phục khẩn cấp 10 ký tự`,verifyAndProceed:`Xác minh và tiếp tục`,setNewPassword:`Đặt mật khẩu mới`,setNewPasswordDesc:`Xác minh danh tính thành công. Vui lòng đặt mật khẩu mới cho tài khoản của bạn.`,newPassword:`Mật khẩu mới`,confirmNewPassword:`Xác nhận mật khẩu mới`,passwordMismatch:`Mật khẩu mới không khớp`,saveAndReset:`Lưu và đặt lại mật khẩu`,resetSuccessTitle:`Đặt lại mật khẩu thành công`,resetSuccessDesc:`Mật khẩu của bạn đã được cập nhật và tất cả các phiên đăng nhập đã bị hủy. Vui lòng đăng nhập bằng mật khẩu mới.`,goToLogin:`Đến trang đăng nhập`,mfaSetupTitle:`Tăng cường bảo mật tài khoản`,mfaSetupDesc:`Cấu hình xác thực đa yếu tố (MFA) giúp bảo vệ tài khoản, mở khóa đăng nhập không cần mật khẩu và khôi phục tài khoản.`,mfaRecommended:`Khuyên dùng`,passkeySignupDesc:`Sử dụng Touch ID, Face ID hoặc khóa bảo mật. Cực nhanh và chống lừa đảo hiệu quả.`,bindPasskeyNow:`Đăng ký Passkey ngay`,mfaUniversal:`Phổ thông`,totpSignupDesc:`Sử dụng Google Authenticator, 1Password hoặc bất kỳ ứng dụng TOTP tiêu chuẩn nào.`,setupTotpBtn:`Cấu hình ứng dụng xác thực`,skipMfaSetup:`Bỏ qua lúc này`,backToMfaOptions:`Quay lại tùy chọn`,otherOptions:`Tùy chọn khác`,next:`Tiếp theo`,mfaVerification:`Xác thực đa yếu tố`,totpPrompt:`Nhập mã động 6 chữ số từ ứng dụng xác thực của bạn`,recoveryPrompt:`Nhập khóa khôi phục 30 chữ số của bạn (5 nhóm, mỗi nhóm 6 chữ số)`,recoveryChecksumError:`Lỗi tổng kiểm tra: nhóm này không chia hết cho 11`,recoveryChecksumErrorDesc:`Lỗi tổng kiểm tra ở nhóm {{groups}}, vui lòng kiểm tra và thử lại`,backToPasskey:`Quay lại xác thực Passkey`,recoveryKeyRequired:`Vui lòng nhập khóa khôi phục của bạn`,totpFormatError:`Vui lòng nhập mã hợp lệ gồm 6 chữ số`,registrationDisabledTitle:`Đăng ký đã bị tắt`,registrationDisabledDesc:`Tính năng đăng ký người dùng mới hiện đang tạm khóa. Vui lòng liên hệ quản trị viên hệ thống để nhận tài khoản.`,backToLogin:`Quay lại đăng nhập`,jwtSecretPreset:`Đã phát hiện JWT_SECRET mặc định. Vui lòng sửa đổi JWT_SECRET đặt sẵn trong các biến môi trường trước khi triển khai.`,jwtSecretMissing:`Thiếu JWT_SECRET. Vui lòng định cấu hình khóa bảo mật trong các biến môi trường trước khi triển khai.`,jwtSecretInvalid:`Định dạng JWT_SECRET không hợp lệ, vui lòng kiểm tra cấu hình.`,keepLoggedIn:`Duy trì đăng nhập trong {{days}} ngày`,orUseOtherMfa:`hoặc sử dụng phương thức khác`,totpUseRecovery:`Sử dụng khóa khôi phục`,totpUseApp:`Sử dụng ứng dụng xác thực`,mfaMethodTotp:`Ứng dụng xác thực (TOTP)`,invalidTotp:`Mã xác thực TOTP không hợp lệ.`},i={title:`Hướng dẫn cài đặt`,subtitle:`Cấu hình thiết bị của bạn để sử dụng DNS Worker và làm chủ an ninh internet.`,regionOptimization:`Tối ưu hóa vùng truy cập (Windows)`,otherRegion:`Các khu vực khác`,copied:`Đã sao chép vào bộ nhớ tạm`,verifyConnection:`Xác minh kết nối của bạn`,verifying:`Đang xác minh...`,connected:`Kết nối bình thường`,notConnected:`Hoặc chưa kết nối`,profileMatch:`Bạn đang lọc thông qua cấu hình này.`,profileMismatch:`Bạn đang sử dụng Obex, nhưng ID cấu hình không khớp.`,verifyHint:`Sau khi hoàn thành cấu hình bên dưới, nhấp vào nút để xác minh.`,refreshStatus:`Làm mới trạng thái`,egressIp:`Địa chỉ IP thoát (Egress IP)`,currentLocation:`Vị trí hiện tại`,edgeServer:`Máy chủ Edge`,serverLocation:`Vị trí máy chủ`,dohUrlTitle:`DoH URL của cấu hình hiện tại`,accessPointTitle:`Access DoH URL`,defaultAccessPointName:`Thiết bị-1`,moreAccessPoints:`Xem thêm điểm truy cập ↗`,accessPointName:`Tên điểm truy cập`,accessPointToken:`Khóa truy cập (Access Token)`,addAccessPoint:`Thêm điểm truy cập mới`,renameAccessPoint:`Đổi tên`,rotateToken:`Làm mới khóa (Rotate Token)`,rotateTokenConfirmDesc:`Việc làm mới khóa sẽ khiến tất cả các thiết bị sử dụng khóa cũ bị ngắt kết nối ngay lập tức. Bạn có chắc chắn muốn tiếp tục không?`,deleteAccessPoint:`Xóa`,deleteAccessPointConfirm:`Bạn có chắc chắn muốn xóa điểm truy cập này không?`,manageAccessPoints:`Quản lý điểm truy cập`,searchAccessPoints:`Tìm kiếm điểm truy cập...`,accessPointNameExists:`Tên điểm truy cập đã tồn tại`,accessPointCreated:`Tạo điểm truy cập thành công`,accessPointRenamed:`Đổi tên điểm truy cập thành công`,accessPointDeleted:`Xóa điểm truy cập thành công`,accessPointNameFormatTip:`Gợi ý tên điểm truy cập: 1-30 ký tự, chỉ cho phép chữ cái, số, dấu gạch dưới và dấu gạch ngang`,accessPointLimitExceeded:`Đạt giới hạn số lượng điểm truy cập (tối đa {{max}})`,tokenRotated:`Làm mới khóa truy cập thành công`,whatIsDoh:`DoH là gì?`,dohDesc:`DNS over HTTPS (DoH) là một công nghệ phân giải tên miền thông qua giao thức HTTPS được mã hóa.`,dohBenefit1:`Giảm thiểu việc bị nhà mạng hoặc bên thứ ba chặn và theo dõi`,dohBenefit2:`Tăng cường bảo mật khi phân giải tên miền và truy cập internet`,learnMore:`Tìm hiểu thêm`,copyUrl:`Sao chép URL`,browsers:`Trình duyệt`,browserTitle:`Cấu hình trình duyệt (Chrome/Edge)`,browserSteps:`Cài đặt > Quyền riêng tư và bảo mật > Bảo mật > Sử dụng DNS bảo mật > Tùy chỉnh > Dán URL.`,browserTips:`Hoặc sao chép địa chỉ này vào thanh địa chỉ:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Các thiết bị Apple hỗ trợ cấu hình nhanh thông qua tệp cấu hình (Profile).`,appleWarning:`Không thể cài đặt tệp cấu hình trong "Chế độ phong tỏa (Lockdown Mode)", vui lòng đảm bảo hệ thống không ở trạng thái này trước khi cài đặt.`,downloadConfig:`Tải tệp cấu hình`,appleInstallHint:`Sau khi tải về, vui lòng đi tới "Cài đặt" > "Đã tải về hồ sơ" để cài đặt`,windows:`MS Windows`,windowsTitle:`Cấu hình Windows 11`,windowsStep0:`Cài đặt > Mạng & Internet`,windowsStep1:`Thuộc tính > Máy chủ DNS > Chỉnh sửa > Thủ công.`,windowsStep2:`Chọn và nhập DNS IP:`,windowsStep3:`Bật DoH (Mẫu thủ công) và dán URL.`,windowsStep4:`Tắt "Dự phòng sang bản rõ" (Fallback to plaintext).`,android:`Android`,androidTitle:`Android / DNS riêng tư (DoT & DoQ)`,androidDesc:`Hỗ trợ 'DNS riêng tư' gốc của hệ thống (DoT) hoặc ứng dụng bên thứ ba cho DoH.`,androidDotTitle:`DNS riêng tư (DoT / DoQ)`,androidDotDesc:`Cài đặt > Mạng và internet > DNS riêng tư > Tên máy chủ của nhà cung cấp DNS riêng tư (cũng hỗ trợ máy khách DoQ):`,androidWildcardHint:`(Chứng chỉ Wildcard, chuyển tiếp đến cấu hình này)`,androidSingleDomainHint:`(Chứng chỉ một tên miền, chuyển tiếp đến cấu hình mặc định)`,androidIpNotice:`Truy cập qua IP hoặc địa chỉ cục bộ. DNS riêng tư của Android chỉ chấp nhận tên miền; vui lòng cấu hình SERVERFULL_DOT_DOMAIN trong .env (ví dụ dns.example.com).`,androidWarning:`Lưu ý: 'DNS riêng tư' gốc của Android sử dụng giao thức DoT. Khi triển khai trên Cloudflare Workers, hãy dùng ứng dụng như Intra cho DoH. Khi chạy ở chế độ Serverfull đã cấu hình TLS, bạn có thể sử dụng trực tiếp tên máy chủ DoT ở trên.`,dynamicFromDomain:`Động (từ "{{domain}}")`,dynamicFromDomainV6:`Động IPv6 (từ "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (Proxy Cloudflared DoH)`,linuxDesc:`Chạy một proxy DNS nhẹ tại địa phương, mã hóa và chuyển tiếp các yêu cầu phân giải đến Obex thông qua DoH.`,linuxStep1:`Chạy đoạn mã sau để cài đặt cloudflared và tạo dịch vụ systemd (lắng nghe tại 127.0.0.1:53).`,linuxStep2:`Thay đổi DNS hệ thống thành 127.0.0.1.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`Dùng trình phân giải này cho mọi thiết bị trong mạng bằng cách đặt nó làm máy chủ DoH của router.`,routerosStep1:`Chạy trong terminal RouterOS (RouterOS 7):`,routerosNote:`Các truy vấn do router chuyển tiếp sẽ hiển thị trong nhật ký là router, không phải từng thiết bị. Hãy cấu hình trực tiếp trên thiết bị nếu bạn cần nhật ký theo từng thiết bị.`,routerosDocs:`Tài liệu DNS của MikroTik`,accessPointsCardTitle:`Điểm truy cập`,currentAccessPoint:`Điểm truy cập hiện tại`,selectAccessPointToConfigure:`Chọn điểm truy cập để định cấu hình`,quic:`QUIC & HTTP/3`,quicTitle:`DNS over QUIC (DoQ) & HTTP/3 (DoH3)`,quicDesc:`Hỗ trợ gốc cho RFC 9250 (DNS over QUIC) và RFC 9460 (HTTP/3 & Encrypted Client Hello), sở hữu bắt tay 0-RTT siêu tốc và bảo vệ chống theo dõi SNI.`,doqTitle:`DNS over QUIC (DoQ - RFC 9250)`,doqAppHint:`Tương thích với các ứng dụng hiện đại như AdGuard, Clash Meta (Mihomo), Sing-box, v.v.:`,doqWildcardHint:`(Chứng chỉ ký tự đại diện wildcard, định tuyến đến cấu hình này)`,doqSingleDomainHint:`(Chứng chỉ tên miền đơn, định tuyến đến cấu hình mặc định)`,doqIpNotice:`DoQ yêu cầu chứng chỉ TLS và tên miền hợp lệ. Vui lòng thiết lập SERVERFULL_DOT_DOMAIN trong .env rồi tải lại.`,h3Title:`HTTP/3 (DoH3) & ECH (Encrypted Client Hello)`,h3Desc:`Các trình duyệt hiện đại (Chrome/Firefox/Safari) tự động thương lượng mã hóa HTTP/3 và ECH thông qua bản ghi Alt-Svc và RFC 9460 HTTPS:`,ddrHint:`Tích hợp RFC 9460 Phần 8 DDR (Discovery of Designated Resolvers), cho phép máy khách tự động thương lượng và nâng cấp lên DoQ/DoT và ECH qua truy vấn _dns.`,e2eeDesc:`Mã hóa nhật ký DNS tại edge bằng khóa lai hậu lượng tử (P256-MLKEM768). Đám mây không thể xem dữ liệu; giải mã chỉ diễn ra cục bộ thông qua Passkey.`,detecting:`Đang phát hiện...`,dotUnavailableCfTitle:`DoT / DoQ không khả dụng trong chế độ Cloudflare Worker`,dotUnavailableCfDesc:`Hiện đang chạy ở chế độ Cloudflare Worker (Serverless). Do các giới hạn mạng edge, việc lắng nghe trên cổng TCP/UDP 853 không được hỗ trợ. Để sử dụng DoT hoặc DoQ, hãy triển khai ở chế độ Serverfull; hiện tại vui lòng sử dụng DoH.`},a={title:`Quy tắc tùy chỉnh`,subtitle:`Kiểm soát thủ công hành vi phân giải cho các tên miền cụ thể (Chặn, Cho phép hoặc Chuyển hướng).`,action:`Hành động`,typeBlock:`Chặn (BLOCK)`,typeAllow:`Cho phép (ALLOW)`,typeRedirect:`Chuyển hướng (REDIRECT)`,pattern:`Mẫu tên miền (Pattern)`,patternPlaceholder:`example.com hoặc *.test.com`,addRule:`Thêm quy tắc`,redirectSettings:`Cài đặt bản ghi chuyển hướng`,aRecord:`Bản ghi A (IPv4)`,aaaaRecord:`Bản ghi AAAA (IPv6)`,cnameRecord:`Bản ghi CNAME`,txtRecord:`Bản ghi TXT`,optional:`(Tùy chọn)`,ipv4Placeholder:`Ví dụ: 1.2.3.4`,ipv6Placeholder:`Ví dụ: 2001:db8::1`,cnamePlaceholder:`Ví dụ: target.com`,txtPlaceholder:`Nhập nội dung văn bản...`,saveRedirectRule:`Lưu và thêm quy tắc chuyển hướng`,noRulesTitle:`Không có quy tắc tùy chỉnh`,noRulesDesc:`Bạn chưa thêm bất kỳ quy tắc thủ công nào.`,tableAction:`Hành động`,tablePattern:`Mẫu`,tableDetails:`Chi tiết phân giải`,tableOps:`Thao tác`,labelBlock:`Chặn`,labelAllow:`Cho phép`,labelRedirect:`Chuyển hướng`,detailBlock:`Phân giải thành`,detailAllow:`Chuyển tiếp đến dịch vụ thượng nguồn`,patternEmpty:`Mẫu tên miền không được để trống`,duplicatePattern:`Quy tắc cho tên miền này đã tồn tại`,addSuccess:`Thêm quy tắc thành công`,addFailed:`Thêm quy tắc thất bại`,updateSuccess:`Cập nhật quy tắc thành công`,updateFailed:`Cập nhật quy tắc thất bại`,tableCreatedAt:`Thời gian thêm`,clickToSort:`Nhấp để sắp xếp`,editRule:`Chỉnh sửa quy tắc`,cancel:`Hủy`,saveChanges:`Lưu thay đổi`,delete:`Xóa`,close:`Đóng`},o={customRange:`Khoảng thời gian tùy chỉnh`,startTime:`Thời gian bắt đầu`,endTime:`Thời gian kết thúc`,apply:`Áp dụng`,custom:`Tùy chỉnh`,totalQueries:`Tổng số truy vấn`,blocked:`Đã chặn`,redirected:`Đã chuyển hướng`,blockRate:`Tỷ lệ chặn`,activeDevices:`Thiết bị đang hoạt động`,activeIPs:`Địa chỉ IP đang hoạt động`,queryTrend:`Xu hướng truy vấn`,noRecords:`Không có bản ghi nào trong khoảng thời gian này`,topAllowed:`Tên miền thường dùng (Được cho phép)`,topBlocked:`Tên miền bị chặn nhiều nhất (Bị chặn)`,noData:`Không có dữ liệu`,clientActivity:`Hoạt động của máy khách`,ipAddress:`Địa chỉ IP`,location:`Vị trí`,queries:`Số truy vấn`,destinationDistribution:`Phân bổ đích đến của lưu lượng`,requests:`Yêu cầu`,topIsps:`Nhà mạng chính (ISP)`,pressToShowMore:`Nhấn để xem thêm`,maximize:`Phóng to`,minimize:`Thu nhỏ`,loading:`Đang tải...`},s={title:`Nhật ký truy vấn`,subtitle:`Xem nhật ký phân giải DNS và bản ghi chặn của cấu hình này.`,realtime:`Thời gian thực`,allStatus:`Tất cả trạng thái`,onlyPass:`Đã cho phép`,onlyBlock:`Đã chặn`,onlyRedirect:`Đã chuyển hướng`,searchPlaceholder:`Tìm kiếm tên miền...`,noResults:`Không tìm thấy kết quả`,noRecords:`Chưa có bản ghi nào`,noResultsDesc:`Không tìm thấy bản ghi tên miền nào khớp với "{{query}}".`,noRecordsDesc:`Không nhận được truy vấn DNS nào trong khoảng thời gian đã chọn.`,tableTime:`Thời gian`,tableDomain:`Tên miền`,tableAnswer:`Kết quả phân giải`,tableSource:`Nguồn`,tableType:`Loại`,tableStatus:`Trạng thái`,tableReason:`Lý do`,loadedAll:`Đã tải toàn bộ {{count}} bản ghi`,realtimeLoadMoreTip:`Tắt chế độ “Thời gian thực” để tải thêm`,filterAccessPoint:`Điểm truy cập`,allAccessPoint:`Tất cả điểm truy cập`,allCountry:`Tất cả quốc gia`,filterCountry:`Quốc gia đích`,allIsp:`Tất cả ISP`,filterIsp:`ISP`,timeRange:`Khoảng thời gian`,clearFilters:`Xóa bộ lọc`,details:`Chi tiết truy vấn`,detailAccessPoint:`Điểm truy cập`,basicInfo:`Thông tin cơ bản`,detailDomain:`Tên miền`,detailType:`Loại`,detailTime:`Thời gian`,detailLatency:`Thời gian phản hồi`,detailProfile:`Cấu hình sử dụng`,detailStatus:`Trạng thái`,detailUpstream:`Máy chủ thượng nguồn`,detailReason:`Lý do`,detailNoReason:`Không có (Đã cho phép)`,detailECS:`ECS`,resolutionResult:`Kết quả phân giải`,noResult:`Không có kết quả`,networkDetails:`Chi tiết mạng`,clientSource:`Máy khách (Nguồn)`,destination:`Đích đến`,quickActions:`Thao tác nhanh`,actionAllow:`Cho phép`,actionBlock:`Chặn`,actionRedirect:`Chuyển hướng`,statusPass:`Đã cho phép`,statusBlock:`Đã chặn`,statusRedirect:`Đã chuyển hướng`,export:`Xuất nhật ký`,rewritten:`Đã viết lại`,logDetails:`Chi tiết nhật ký`,searchCountry:`Tìm kiếm quốc gia...`,noMatchingCountries:`Không tìm thấy quốc gia phù hợp`,searchIsp:`Tìm kiếm nhà mạng/ISP...`,noMatchingIsps:`Không tìm thấy ISP phù hợp`,loadingIsps:`Đang tải danh sách ISP...`,loggingDisabledTitle:`Ghi nhật ký đã bị tắt`,loggingDisabledDesc:`Thời gian lưu giữ nhật ký cho hồ sơ này được đặt thành 'Tắt'. Không có nhật ký truy vấn nào được ghi lại. Để xem nhật ký, hãy bật lưu giữ nhật ký trong Cài đặt.`,detailIsClientEncrypted:`Mã hóa phía máy khách`,encryptedLocked:`Có (Đã khóa)`,encryptedDecrypted:`Có (Đã giải mã cục bộ)`,encryptedYes:`Có`,notEncrypted:`Không`,encryptedRecord:`[Bản ghi đã mã hóa]`,exportSuccess:`Xuất nhật ký thành công`,exportError:`Không thể xuất nhật ký`},c={title:`Danh sách chặn bên ngoài`,subtitle:`Đăng ký danh sách chặn tên miền do bên thứ ba duy trì (như AdGuard, v.v.).`,formatDisclaimer:`Hệ thống này chỉ hỗ trợ một số định dạng danh sách AdGuard giới hạn và danh sách tên miền thuần túy. Chỉ hỗ trợ các quy tắc chặn cơ bản (ví dụ: ||example.com^), sẽ bỏ qua danh sách trắng "@@", hiện chưa hỗ trợ các quy tắc viết lại "$" và quy tắc rút gọn "*". Hệ thống sẽ tự động khớp tất cả các tên miền phụ của tên miền.`,syncAll:`Đồng bộ tất cả danh sách`,urlPlaceholder:`Nhập URL danh sách chặn...`,addSubscription:`Thêm đăng ký`,supportedFormats:`Các định dạng danh sách được hỗ trợ:`,formatAdGuard:`Tương thích với các quy tắc lọc như ||domain.com^.`,formatHosts:`Tương thích với tệp hosts tiêu chuẩn (ví dụ: 0.0.0.0 domain.com).`,noListsTitle:`Chưa thêm danh sách nào`,noListsDesc:`Bạn chưa đăng ký bất kỳ danh sách chặn bên ngoài nào.`,tableUrl:`URL danh sách`,tableLastSync:`Lần đồng bộ cuối`,tableStatus:`Trạng thái`,tableOps:`Thao tác`,neverSynced:`Chưa bao giờ`,enabled:`Bình thường`,disabled:`Đồng bộ thất bại`,statusNormal:`Bình thường`,statusDisabled:`Đã tắt`,statusOutdated:`Hết hạn`,statusMissing:`Thiếu`,presetOisdBig:`OISD Big (Chặn quảng cáo/phần mềm độc hại, v.v.)`,presetOisdNsfw:`OISD NSFW (Chặn nội dung khiêu dâm/nhạy cảm/người lớn)`,presetAdGuard:`AdGuard AdServers (Máy chủ quảng cáo)`,presetStevenBlack:`StevenBlack Hosts (Chặn tổng hợp)`,syncTaskStarted:`Bắt đầu tác vụ đồng bộ`,syncCheckComplete:`Kiểm tra đồng bộ hoàn tất`,syncTaskFailed:`Đồng bộ thất bại`,syncing:`Đang đồng bộ...`,syncSuccess:`Đồng bộ thành công`,syncError:`Đồng bộ thất bại`,syncErrorDesc:`Không thể tải xuống hoặc phân tích danh sách chặn này. Vui lòng kiểm tra xem liên kết có đúng không và đảm bảo liên kết có thể truy cập bình thường.`,deleteConfirm:`Xác nhận xóa đăng ký?`,deleteSuccess:`Xóa danh sách thành công`,deleteError:`Xóa danh sách thất bại`,addSuccess:`Thêm danh sách thành công`,addError:`Thêm danh sách thất bại`,listEnabled:`Danh sách hoạt động`,listEnabledHint:`Tắt để ngừng lọc bằng danh sách này mà không cần xoá. Đăng ký và lịch sử đồng bộ vẫn được giữ lại.`,listEnabledToast:`Đã bật danh sách - đang xây dựng lại bộ lọc`,listDisabledToast:`Đã tắt danh sách - đang xây dựng lại bộ lọc`,checkDomain:`Kiểm tra một tên miền`,checkDomainHint:`Danh sách được lưu dưới dạng bộ lọc nén, do đó không thể duyệt các mục trong đó. Bạn có thể kiểm tra ngay bất kỳ tên miền nào với danh sách này.`,check:`Kiểm tra`,checkBlocked:`Bị chặn bởi danh sách này`,checkNotBlocked:`Không bị chặn bởi danh sách này`,checkViaParent:`(khớp với tên miền cha)`,checkNotSynced:`Danh sách này chưa đồng bộ xong, nên chưa có gì để kiểm tra.`,checkListDisabled:`Danh sách này hiện đang tắt, nên không lọc gì vào lúc này.`,checkProbabilisticRate:`Bộ lọc mang tính xác suất: khoảng 1 trong {{odds}} lượt khớp là dương tính giả. Thêm ngoại lệ cũng áp dụng cho mọi tên miền con của nó.`,checkProbabilistic:`Bộ lọc mang tính xác suất, nên một phần nhỏ các lượt khớp là dương tính giả. Thêm ngoại lệ cũng áp dụng cho mọi tên miền con của nó.`,checkAllowAction:`Vẫn cho phép`,checkAllowed:`Đã thêm ngoại lệ - tên miền này giờ đã phân giải được`,allowRuleAdded:`Đã thêm ngoại lệ cho {{domain}}`,listDetails:`Chi tiết danh sách`},l={title:`Cài đặt cấu hình`,subtitle:`Quản lý chiến lược phân giải DNS và các tùy chọn nâng cao của bạn.`,saveChanges:`Lưu tất cả thay đổi`,saveSuccess:`Lưu cài đặt thành công`,saveError:`Lưu cài đặt thất bại, vui lòng thử lại sau`,upstreamTitle:`Dịch vụ thượng nguồn`,dohUrl:`DoH URL`,dnsIP:`DNS IP`,classicDns:`DNS truyền thống`,httpsOnly:`Chỉ hỗ trợ HTTPS`,upstreamDesc:`Tất cả các truy vấn không bị chặn sẽ được chuyển tiếp đến máy chủ này. Hỗ trợ DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) hoặc DNS truyền thống. DNS truyền thống được chuyển tiếp qua TCP.`,defaultPolicyTitle:`Hành vi chặn mặc định`,onNoMatch:`Khi không khớp quy tắc`,allowAll:`Cho phép tất cả truy vấn`,blockAll:`Chặn tất cả truy vấn`,logRetentionTitle:`Lưu giữ nhật ký`,retentionDuration:`Thời gian lưu giữ`,retentionDesc:`Nhật ký được xóa tự động. `,skipLogOnPass:`Không ghi nhật ký các truy vấn được phép`,skipLogOnPassDesc:`Khi bật, các truy vấn được phép thông thường sẽ không được ghi lại. Chỉ các truy vấn bị chặn, chuyển hướng hoặc thất bại mới được lưu.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`ECS-подсеть, отправляемая на upstream-сервер`,sendEcs:`Gửi ECS`,customSubnet:`Mạng con tùy chỉnh`,customIpv4:`Mạng con IPv4 tùy chỉnh`,customIpv6:`Mạng con IPv6 tùy chỉnh`,ipv4Hint:`(Ví dụ: 1.2.3.0/24)`,ipv6Hint:`(Ví dụ: 2001:db8::/32)`,testToolTitle:`Công cụ kiểm tra phân giải thời gian thực`,testDomain:`Tên miền kiểm tra`,recordType:`Loại bản ghi`,runTest:`Chạy kiểm tra`,domainPlaceholder:`Ví dụ: google.com`,hitRule:`Quy tắc khớp / Lý do`,defaultAllow:`Chiến lược cho phép mặc định`,parseLatency:`Thời gian phân giải`,sourceIp:`Địa chỉ IP nguồn`,answerSection:`Kết quả phân giải (Answer Section)`,noRecordsReturned:`Truy vấn này không trả về bất kỳ bản ghi nào.`,diagnostics:`Thông tin chẩn đoán`,errorDetail:`Chi tiết lỗi`,upstreamResponse:`Phản hồi từ máy chủ nguồn`,presetCloudflareSecurity:`Cloudflare Security (Nhanh/Chặn tên miền độc hại/Chặn tên miền lừa đảo)`,presetCloudflareFamilies:`Cloudflare Families (Nhanh/Chặn tên miền độc hại/Chặn nội dung người lớn)`,presetQuad9:`Quad9 (Chặn tên miền độc hại/Không lưu nhật ký/Không gửi ECS)`,presetQuad9Ecs:`Quad9 ECS (Chặn tên miền độc hại/Không lưu nhật ký/Có gửi ECS)`,presetControlDFree:`ControlD Free (Chặn quảng cáo/Theo dõi/Tên miền độc hại/Lừa đảo)`,presetControlDUncensored:`ControlD Uncensored (Chống kiểm duyệt)`,presetAdGuard:`AdGuard (Chặn quảng cáo/Theo dõi)`,presetAdGuardFamily:`Bảo vệ gia đình AdGuard (Chặn quảng cáo/Theo dõi/Nội dung người lớn/Tìm kiếm an toàn)`,retention10m:`10 phút`,retention1h:`1 giờ`,retention24h:`24 giờ`,retention7d:`7 ngày`,retention30d:`30 ngày`,retention90d:`90 ngày`,retention180d:`180 ngày`,retention360d:`360 ngày`,retentionMaxSuffix:`(Tối đa)`,daysUnit:`ngày`,blockModeTitle:`Chế độ phản hồi khi chặn`,blockModeDesc:`Nội dung trả về khi tên miền bị chặn`,default:`Mặc định`,NXDOMAIN:`Tên miền không tồn tại (NXDOMAIN)`,NODATA:`Không có dữ liệu (NODATA)`,customIP:`IP tùy chỉnh`,export:`Xuất cấu hình`,exportSuccess:`Xuất cấu hình thành công`,exportError:`Xuất cấu hình thất bại, vui lòng thử lại sau`,nameUpdateSuccess:`Tên cấu hình đã được cập nhật`,saving:`Đang lưu...`,echTitle:`Ghi đè ECH`,enableEch:`Bật ghi đè ECH`,echDesc:`Đối với các miền qua Cloudflare, tự động ghi đè tham số ECH và SNI bên ngoài khi truy vấn HTTPS (Type 65) / SVCB (Type 64) để bảo vệ quyền riêng tư.`,echFrontingTitle:`SNI bên ngoài (ECH Fronting)`,echFrontingDesc:`Tên miền hiển thị ở dạng văn bản thuần trong bắt tay TLS bên ngoài`,echFrontingCustomPlaceholder:`Nhập miền fronting tùy chỉnh, ví dụ: crypto.cloudflare.com`,echPreferred:`Ưu tiên`,whatIsEch:`ECH (Encrypted Client Hello) là gì?`,echHelpDesc:`ECH là tiện ích mở rộng quyền riêng tư của TLS 1.3 giúp mã hóa hoàn toàn tên miền thực (Inner SNI), chỉ để lộ tên miền ngụy trang (Outer SNI) cho bên trung gian.`,echHelpBenefit1:`Ngăn chặn nhà mạng và bên trung gian theo dõi miền phụ bạn đang truy cập`,echHelpBenefit2:`Kết hợp với DoH để loại bỏ rò rỉ SNI dạng văn bản thuần`,retentionDisabled:`Tắt (Bảo vệ quyền riêng tư)`,retentionDisabledDesc:`Ghi nhật ký đã bị tắt. Hệ thống sẽ không ghi lại bất kỳ nhật ký truy vấn DNS nào và sẽ xóa ngay nhật ký lịch sử.`,localRetentionTitle:`Lưu trữ & Giữ lại cục bộ`,localRetentionDuration:`Thời gian giữ lại cục bộ`,localRetentionDesc:`Nhật ký được lưu trữ liên tục trong cơ sở dữ liệu SQLite cục bộ của trình duyệt (OPFS), giúp tìm kiếm nhanh và tiết kiệm chi phí lưu trữ đám mây. Nhật ký cũ sẽ tự động được xóa.`,localRetention30d:`30 ngày`,localRetention90d:`90 ngày (Khuyến nghị)`,localRetention180d:`180 ngày`,localRetention365d:`365 ngày (1 năm)`,localRetentionUnlimited:`Không giới hạn (Đến khi xóa thủ công)`,localEngineStorage:`Công cụ lưu trữ`,localEngineOpfs:`Lưu trữ liên tục OPFS`,localEngineMemory:`Bộ nhớ tạm (Chế độ riêng tư)`,localCachedCount:`Nhật ký lưu cục bộ`,localCachedCountUnit:`{{count}} bản ghi`,clearLocalData:`Xóa nhật ký cục bộ`,clearLocalDataConfirm:`Bạn có chắc chắn muốn xóa tất cả nhật ký cục bộ cho cấu hình này không? (Nhật ký trên đám mây không bị ảnh hưởng)`,clearLocalDataSuccess:`Đã xóa nhật ký cục bộ thành công`,clearLocalDataError:`Không thể xóa nhật ký cục bộ`,e2eeTitle:`Mã hóa đầu cuối (E2EE)`,e2eeEnabled:`Đã bật`,e2eeDisabled:`Đã tắt`,e2eeDesc:`Mã hóa nhật ký DNS tại edge bằng khóa lai hậu lượng tử (P256-MLKEM768). Đám mây không thể xem dữ liệu; giải mã chỉ diễn ra cục bộ thông qua Passkey.`,e2eePasskeyRequired:`E2EE yêu cầu hỗ trợ Passkey (WebAuthn). Vui lòng thêm Passkey trong Cài đặt tài khoản trước.`,e2eeGoToAccount:`Đi tới Cài đặt tài khoản`,e2eeEnableSwitch:`Bật mã hóa đầu cuối`,e2eeKeyType:`Thuật toán mã hóa`,e2eeDeviceState:`Trạng thái trên thiết bị này`,e2eeUnlocked:`Đã mở khóa trên thiết bị này`,e2eeUnlockButton:`Xác minh Passkey để mở khóa`,e2eeProtectedPasskeys:`Thông tin xác thực Passkey được ủy quyền`,e2eeDevicesUnit:`thiết bị`,e2eeEnableSuccess:`Đã bật mã hóa đầu cuối thành công`,e2eeEnableError:`Không thể bật mã hóa đầu cuối`,e2eeDisableSuccess:`Đã tắt mã hóa đầu cuối`,e2eeDisableError:`Không thể tắt mã hóa đầu cuối`,e2eeUnlockSuccess:`Khóa riêng đã được mở khóa trên thiết bị này`,e2eeUnlockError:`Xác minh Passkey thất bại`,e2eeDisableConfirm:`Bạn có chắc chắn muốn tắt E2EE không? Nhật ký trong tương lai sẽ được lưu dưới dạng văn bản thuần túy.`,e2eeUnlockPrompt:`Cấu hình này sử dụng mã hóa E2EE. Xác minh Passkey để xem nhật ký văn bản gốc.`,e2eeUnlockNow:`Mở khóa nhật ký`,e2eeUnlockRecovery:`Mở khóa bằng khóa khôi phục`,securityTitle:`Bảo mật & Truy cập`,rotateKeyTitle:`URL truy cập`,rotateKeyDesc:`Tạo URL truy cập mới cho hồ sơ này. Mọi thiết bị hiện đang sử dụng URL cũ sẽ mất kết nối ngay lập tức với DNS Worker và cần được định cấu hình lại bằng URL mới.`,rotateKeyBtn:`Xoay vòng URL`,copied:`Đã sao chép vào khay nhớ tạm`,nameUpdateFailed:`Cập nhật thất bại`},u=JSON.parse(`{"title":"Cài đặt tài khoản","subtitle":"Quản lý thông tin bảo mật và người dùng hệ thống của bạn.","e2ee":{"title":"Mã hóa đầu cuối (E2EE)","desc":"Sử dụng mã hóa phong bì lai hậu lượng tử (P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) phía máy khách được bảo vệ bởi Passkey phần cứng. Dữ liệu được mã hóa tại Edge; máy chủ chỉ lưu trữ văn bản mã hóa. Giải mã chỉ thực hiện cục bộ trên các thiết bị được ủy quyền.","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"Nâng cấp lên Hậu lượng tử (PQC)","upgradePqcSuccess":"Đã nâng cấp thành công lên mã hóa lai hậu lượng tử (P256-MLKEM768)","upgradePqcError":"Nâng cấp lên mã hóa hậu lượng tử thất bại","enabled":"Đã bật","disabled":"Chưa bật","passkeyRequired":"Mã hóa đầu cuối yêu cầu ít nhất một Passkey phần cứng (WebAuthn). Vui lòng thêm Passkey trong phần cài đặt MFA ở trên.","scopesTitle":"Phạm vi dữ liệu mã hóa","scopesSubtitle":"Chọn các danh mục dữ liệu được bảo vệ bằng mã hóa đầu cuối với Passkey phần cứng của bạn.","scopeLogsTitle":"Nhật ký truy vấn DNS","scopeLogsDesc":"Mã hóa tên miền, IP máy khách, bản ghi phản hồi và độ trễ tại Edge trước khi lưu vào D1.","scopeRulesTitle":"Quy tắc tùy chỉnh & Chuyển hướng","scopeRulesDesc":"Quy tắc chặn/cho phép tùy chỉnh và cấu hình chuyển hướng được mã hóa phía máy khách.","scopeClientsTitle":"Siêu dữ liệu thiết bị & máy khách","scopeClientsDesc":"Tên thiết bị điểm truy cập, bí danh IP và thông tin cấu trúc mạng.","statusActive":"Được bảo vệ","statusPlanned":"Đang lên kế hoạch","profileSelect":"Cấu hình Profile","keyType":"Thuật toán mã hóa","deviceState":"Trạng thái thiết bị hiện tại","unlocked":"Đã mở khóa trên thiết bị này","unlockButton":"Xác thực Passkey để mở khóa","protectedPasskeys":"Thông tin xác thực Passkey được ủy quyền","devicesUnit":"thông tin xác thực","enableSuccess":"Đã bật mã hóa đầu cuối thành công","enableError":"Không thể bật mã hóa đầu cuối","disableSuccess":"Đã tắt mã hóa đầu cuối","disableError":"Không thể tắt mã hóa đầu cuối","unlockSuccess":"Đã mở khóa khóa riêng tư thành công trên thiết bị này","unlockError":"Xác thực Passkey để mở khóa thất bại","disableConfirm":"Bạn có chắc chắn muốn tắt mã hóa đầu cuối cho cấu hình này không? Các nhật ký trong tương lai sẽ được lưu dưới dạng văn bản thô. (Nhật ký mã hóa trước đây vẫn cần khóa riêng tư để giải mã)","noKeypairTitle":"Cặp khóa mã hóa đầu cuối chưa được khởi tạo","noKeypairDesc":"Mã hóa đầu cuối yêu cầu tạo cặp khóa hậu lượng tử (P256-MLKEM768) dành riêng cho tài khoản của bạn. Khóa riêng tư được bảo vệ bằng mã hóa phong bì qua Passkey hoặc khóa khôi phục.","initPasskeyBtn":"Xác minh Passkey hiện có để tạo cặp khóa","addPasskeyBtn":"Thêm Passkey để hỗ trợ mã hóa phần cứng","initRecoveryBtn":"Tạo cặp khóa bằng khóa khôi phục","initWithRecoveryTitle":"Tạo cặp khóa bằng khóa khôi phục","initWithRecoveryDesc":"Nhập khóa khôi phục khẩn cấp 30 chữ số hiện tại của bạn. Hệ thống sẽ tạo cục bộ cặp khóa hậu lượng tử (P256-MLKEM768). Khóa sẽ tự động xoay vòng sau khi sử dụng.","keypairGenSuccess":"Đã tạo cặp khóa mã hóa đầu cuối thành công!","keypairGenError":"Không thể tạo cặp khóa mã hóa","unlockRecoveryButton":"Mở khóa bằng khóa khôi phục","unlockWithRecoveryTitle":"Mở khóa bằng khóa khôi phục","unlockWithRecoveryDesc":"Nhập khóa khôi phục 30 chữ số của bạn. Lưu ý: Theo quy tắc sử dụng một lần, khóa sẽ tự động xoay vòng ngay sau khi xác minh thành công.","recoveryKeyInputLabel":"Khóa khôi phục","unlockConfirm":"Mở khóa khóa riêng tư","recoveryUnlockFailed":"Khóa khôi phục không hợp lệ hoặc giải mã thất bại","generateKeypairBtn":"Tạo cặp khóa","enableSwitch":"Bật mã hóa đầu cuối cho nhật ký truy vấn","enableSwitchDesc":"Mã hóa tên miền, IP máy khách, bản ghi phản hồi và độ trễ ngược dòng tại biên trước khi lưu vào đám mây.","trustBoundaryTitle":"Thông báo về ranh giới bảo mật và tin cậy","trustBoundaryDesc":"Tất cả lưu lượng truy vấn DNS chắc chắn sẽ đi qua máy chủ lưu trữ (nút biên Cloudflare Workers hoặc máy chủ tự lưu trữ) trong quá trình phân giải, nơi các truy vấn được xử lý trong bộ nhớ trước khi ghi mã hóa. Tính năng này chỉ bảo vệ dữ liệu tĩnh trong cơ sở dữ liệu đám mây (D1); không thể ẩn lưu lượng mạng trực tiếp đối với máy chủ đang xử lý yêu cầu.","initFailed":"Không thể khởi tạo mã hóa đầu cuối","lockDevice":"Khóa thiết bị này","lockSuccess":"Đã khóa, khóa riêng đã được xóa khỏi bộ nhớ cục bộ","enrollPasskeyBtn":"Liên kết Passkey hiện tại","enrollPasskeySuccess":"Đã liên kết thành công Passkey với mã hóa đầu cuối!","enrollPasskeyFailed":"Liên kết Passkey thất bại","resetKeypairBtn":"Đặt lại cặp khóa","confirmResetBtn":"Xác nhận đặt lại và tạo lại","resetKeypairTitle":"Đặt lại cặp khóa E2EE","resetKeypairDesc":"Nếu khóa khôi phục không khớp hoặc không thể giải mã và không có Passkey nào được liên kết, việc đặt lại sẽ xóa các khóa cũ khỏi máy chủ và tạo cặp khóa hậu lượng tử (P256-MLKEM768) hoàn toàn mới.","resetKeypairPasskeyNotice":"Sau khi xác nhận, Passkey đã định cấu hình của bạn sẽ được gọi ngay lập tức để mã hóa và ủy quyền cho cặp khóa mới.","resetKeypairRecoveryNotice":"Sau khi xác nhận, bạn sẽ được nhắc nhập khóa khôi phục hiện tại để tạo và mã hóa cặp khóa mới.","resetAndInitPasskeySuccess":"Cặp khóa đã được đặt lại thành công và mã hóa lại bằng Passkey của bạn!","resetSuccessEnterRecovery":"Đã xóa khóa cũ. Vui lòng khởi tạo cặp khóa mới bằng Khóa khôi phục của bạn.","resetFailed":"Không thể đặt lại cặp khóa"},"jwtSecretWarningTitle":"Cảnh báo bảo mật: Mã bí mật JWT yếu","jwtSecretWarningDesc":"JWT_SECRET hiện tại có ít hơn 32 ký tự, tiềm ẩn rủi ro bảo mật. Vui lòng cấu hình biến môi trường KEK_v1 trước khi xoay vòng JWT_SECRET để đảm bảo các khóa TOTP và khóa khôi phục được mã hóa phong bì vẫn có thể giải mã được.","roleAdmin":"Quản trị viên hệ thống","roleUser":"Người dùng","personalInfo":"Thông tin cá nhân","username":"Tên đăng nhập","userId":"ID người dùng","changePassword":"Đổi mật khẩu","currentPassword":"Mật khẩu hiện tại","newPassword":"Mật khẩu mới","updatePassword":"Cập nhật mật khẩu","userManagement":"Quản lý người dùng (Quản trị viên)","createUser":"Tạo người dùng","role":"Vai trò","createdAt":"Thời gian tạo","lastActive":"Hoạt động lần cuối","lastResolve":"Phân giải lần cuối","actions":"Thao tác","dangerZone":"Khu vực nguy hiểm","clearLogs":"Xóa tất cả nhật ký","clearLogsDesc":"Hành động này sẽ xóa nhật ký truy vấn được tạo bởi tất cả các cấu hình DNS dưới tên bạn. Hành động này không thể hoàn tác.","currentDbSize":"Kích thước cơ sở dữ liệu hiện tại","clearLogsBtn":"Xóa nhật ký ngay bây giờ","deleteAccount":"Xóa tài khoản","deleteAccountDesc":"Xóa vĩnh viễn tài khoản của bạn và tất cả dữ liệu liên quan. Hành động này sẽ khiến bạn mất tất cả các cấu hình phân giải.","deleteAccountBtn":"Xóa tài khoản vĩnh viễn","createNewUser":"Tạo người dùng mới","initialPassword":"Mật khẩu khởi tạo","userRole":"Vai trò người dùng","cancel":"Hủy","createNow":"Tạo ngay","formatTipUsername":"Định dạng tên đăng nhập: Chỉ từ 5 đến 32 ký tự theo định dạng Unix","formatTipPassword":"Định dạng mật khẩu: 12-100 ký tự","passwordSuccess":"Đổi mật khẩu thành công","updateFailed":"Cập nhật thất bại","confirmDeleteUser":"Bạn có chắc chắn muốn xóa người dùng này không? Tất cả cấu hình họ sở hữu cũng sẽ bị xóa.","confirmClearLogs":"Bạn có chắc chắn muốn xóa nhật ký truy vấn của tất cả cấu hình dưới tên bạn không? Hành động này không thể hoàn tác.","clearLogsSuccess":"Nhật ký đã được xóa thành công","confirmDeleteAccount":"Cảnh báo: Bạn có chắc chắn muốn xóa tài khoản này không?\\n\\nTất cả cấu hình DNS, quy tắc tùy chỉnh và nhật ký truy vấn của bạn sẽ bị xóa vĩnh viễn. Hành động này không thể đảo ngược!","inactivityPolicy":"Chính sách hoạt động","inactivityDesc":"Để bảo vệ quyền riêng tư của người dùng và tiết kiệm tài nguyên, tất cả nhật ký truy vấn và cấu hình DNS của các tài khoản không có hoạt động phân giải trong 30 ngày sẽ được tự động xóa. Bản thân tài khoản sẽ bị xóa sau 90 ngày không đăng nhập.","systemSettings":"Cài đặt hệ thống (Quản trị viên)","adminOnlyView":"Chỉ dành cho quản trị viên","featureToggle":"Bật/Tắt tính năng","enableTurnstileSignup":"Bật xác minh người máy trên trang đăng ký","enableTurnstileLogin":"Bật xác minh người máy trên trang đăng nhập","totp":{"title":"Ứng dụng xác thực (TOTP)","enabled":"Đã bật","disabled":"Chưa bật","setupDesc":"Thêm một lớp bảo mật bổ sung cho tài khoản của bạn. Sử dụng Google Authenticator, Authy hoặc bất kỳ ứng dụng tương thích TOTP nào.","setupBtn":"Cấu hình ứng dụng xác thực (TOTP)","scanQR":"Sử dụng ứng dụng xác thực để quét mã QR này:","orEnterManually":"Hoặc nhập khóa thủ công:","enterCode":"Vui lòng nhập mã từ ứng dụng xác thực để xác nhận:","enterCodeHint":"Nhập mã xác thực 6 chữ số để xác nhận khóa đã được ghi lại chính xác.","activate":"Kích hoạt TOTP","skipPassword":"Đăng nhập không mật khẩu — Chỉ hiển thị ô nhập TOTP khi đăng nhập (không hiển thị mật khẩu)","disable":"Tắt ứng dụng xác thực (TOTP)","disableTitle":"Tắt ứng dụng xác thực (TOTP)","disableWarning":"Sau khi tắt TOTP, nếu chưa cấu hình Passkey, tài khoản của bạn sẽ chỉ được bảo vệ bằng mật khẩu.","confirmDisable":"Tắt TOTP","recoveryKeysTitle":"Vui lòng lưu các khóa khôi phục của bạn","recoveryKeysWarning":"Vui lòng lưu khóa khôi phục ở nơi an toàn (như trình quản lý mật khẩu). Mỗi khóa chỉ có thể sử dụng một lần.","copyKeys":"Sao chép tất cả khóa","copied":"Đã sao chép!","done":"Xong, tôi đã lưu khóa","activeDesc":"Ứng dụng xác thực (TOTP) đang hoạt động và tạo mã xác nhận 6 chữ số.","invalidCode":"Vui lòng nhập mã gồm 6 chữ số","testBtn":"Kiểm tra mã","testTitle":"Kiểm tra ứng dụng xác thực (TOTP)","testDesc":"Nhập mã xác thực 6 chữ số từ ứng dụng xác thực của bạn để xác nhận ứng dụng đã đồng bộ chính xác và tạo mã hợp lệ.","testSuccess":"Xác minh thành công! Ứng dụng xác thực của bạn đã được cấu hình đúng.","testFailed":"Mã xác thực không hợp lệ hoặc thời gian chưa được đồng bộ","verificationCode":"Mã xác thực 6 chữ số","verifyBtn":"Xác minh ngay"},"activity":{"title":"Nhật ký hoạt động tài khoản","action":"Sự kiện","time":"Thời gian","ip":"IP địa chỉ","session":"Phiên làm việc","empty":"Chưa có nhật ký hoạt động.","loadMore":"Tải thêm","signup":"Đăng ký","loginSuccess":"Đăng nhập thành công","loginFail":"Đăng nhập thất bại","logout":"Đăng xuất","pwChangeSuccess":"Đổi mật khẩu thành công","pwChangeFail":"Đổi mật khẩu thất bại","totpVerifySuccess":"Xác minh TOTP thành công","totpVerifyFail":"Xác minh TOTP thất bại","totpSetup":"Đã thiết lập ứng dụng TOTP","totpRemoved":"Đã tắt ứng dụng TOTP","recoveryKeyUsed":"Sử dụng khóa khôi phục","sessionRevoked":"Phiên làm việc đã bị thu hồi","reasons":{"user_active":"Người dùng chủ động đăng xuất","user_revoke":"Thu hồi phiên làm việc","expired":"Phiên đã hết hạn","geolocation_mismatch":"Hạn chế truy cập từ vị trí khác","geolocation_missing":"Thiếu thông tin vị trí địa lý","token_reuse":"Sử dụng lại mã xác thực (Cảnh báo bảo mật)"},"passkeyRegistered":"Đăng ký Passkey","passkeyDeleted":"Xóa Passkey","passkeyVerifySuccess":"Xác minh Passkey thành công","passkeyVerifyFail":"Xác minh Passkey thất bại","recoveryKeyRotated":"Khóa khôi phục đã được xoay vòng","device":"Thiết bị"},"sessions":{"title":"Phiên hoạt động","session":"Phiên","device":"Thiết bị","ip":"Địa chỉ IP","loginTime":"Thời gian đăng nhập","expires":"Hết hạn","action":"Hành động","current":"Hiện tại","revoke":"Thu hồi","revokeFailed":"Không thể thu hồi phiên.","empty":"Không tìm thấy phiên hoạt động nào.","unknownDevice":"Thiết bị không xác định","revokeOthers":"Thu hồi các phiên khác","confirmRevokeOthers":"Thu hồi các phiên khác","revokeOthersConfirmText":"Bạn có chắc chắn muốn thu hồi tất cả các phiên hoạt động khác không? Tất cả các thiết bị đã đăng nhập khác sẽ bị đăng xuất ngay lập tức."},"passkey":{"title":"Mã khóa (Passkey)","addBtn":"Thêm Passkey","desc":"Sử dụng xác thực sinh trắc học (Touch ID, Face ID, Windows Hello) hoặc khóa bảo mật (YubiKey) để xác thực đa yếu tố nhanh chóng và chống lừa đảo.","empty":"Chưa có Passkey nào được thêm.","addTitle":"Thêm Passkey","nameLabel":"Tên Passkey","namePlaceholder":"vd: my_passkey","promptNotice":"Sau khi nhấp tiếp tục, trình duyệt sẽ nhắc bạn hoàn tất đăng ký sinh trắc học hoặc khóa bảo mật.","continue":"Tiếp tục","renameTitle":"Đổi tên Passkey","deleteTitle":"Xóa Passkey","deleteConfirm":"Bạn có chắc chắn muốn xóa Passkey \\"{{name}}\\" không? Bạn sẽ không thể sử dụng nó để xác thực đa yếu tố nữa.","defaultName":"Passkey","notSupported":"Trình duyệt hoặc môi trường hiện tại của bạn không hỗ trợ Passkey (WebAuthn).","regFailed":"Đăng ký Passkey thất bại","count":"{{count}} đã định cấu hình","none":"Chưa định cấu hình","created":"Thời gian tạo","lastUsed":"Sử dụng lần cuối","neverUsed":"Chưa từng sử dụng","updated":"Cập nhật Passkey thành công","registered":"Đã đăng ký Passkey thành công","deleted":"Đã xóa Passkey","appNameLabel":"Tên miền","appNameHelper":"Mã khóa sẽ được liên kết với tên miền này","formatTip":"Gợi ý tên Passkey: 1-30 ký tự, chỉ cho phép chữ cái, số, dấu gạch dưới và dấu gạch ngang","verifyPrompt":"Xác thực bằng sinh trắc học thiết bị hoặc khóa bảo mật.","changePwNotice":"Bạn sẽ được nhắc xác thực bằng Passkey khi gửi biểu mẫu.","submitNotice":"Bạn sẽ được nhắc xác thực bằng Passkey khi gửi biểu mẫu.","testBtn":"Kiểm tra mã khóa","testThis":"Kiểm tra mã khóa này","testSuccess":"Xác minh mã khóa thành công: {{name}}","testCancelled":"Đã hủy xác minh mã khóa","testFailed":"Xác minh mã khóa thất bại"},"mfaNone":"Không","resetUserPassword":"Đặt lại mật khẩu","resetPasswordTitle":"Đặt lại mật khẩu người dùng","resetPasswordWarning":"Sau khi đặt lại, tất cả các phiên đăng nhập của người dùng sẽ bị hủy ngay lập tức.","resetPasswordSuccess":"Đặt lại mật khẩu thành công. Các phiên trước đó đã bị hủy.","confirmReset":"Xác nhận đặt lại","mfa":{"title":"Xác thực đa yếu tố (MFA)","enabled":"Đã cấu hình","notConfigured":"Chưa cấu hình","desc":"Khóa truy cập (Passkey) và ứng dụng xác thực (TOTP) đều là phương thức MFA. Cấu hình ít nhất một phương thức để bảo vệ tài khoản.","passwordlessTitle":"Đăng nhập không mật khẩu","passwordlessDesc":"Khi bật, đăng nhập sẽ bỏ qua mật khẩu và xác minh danh tính trực tiếp qua Passkey hoặc TOTP.","unconfiguredHint":"Chưa có phương thức MFA nào được cấu hình. Hãy thiết lập Passkey hoặc ứng dụng xác thực bên dưới.","password":"Mật khẩu","passkey":"Passkey","totp":"TOTP"},"recoveryKey":{"title":"Khóa khôi phục khẩn cấp","desc":"Khóa khôi phục khẩn cấp cho phép bạn lấy lại quyền truy cập hoặc đặt lại mật khẩu nếu bạn mất tất cả Passkey hoặc ứng dụng xác thực. Nhằm đảm bảo bảo mật không tri thức (Zero-Knowledge), khóa được lưu dưới dạng băm mật mã một chiều và không thể xem ở dạng văn bản thuần. Khóa sẽ tự động xoay vòng ngay lập tức sau mỗi lần sử dụng.","configured":"Đã cấu hình","notConfigured":"Chưa cấu hình","rotateBtn":"Xoay vòng khóa khôi phục","yourKey":"Khóa khôi phục 30 chữ số của bạn","securityTip":"Hãy giữ bí mật khóa này. Bất kỳ ai có khóa này đều có thể truy cập vào tài khoản của bạn.","rotateConfirm":"Xoay vòng khóa sẽ vô hiệu hóa khóa hiện tại ngay lập tức. Xác minh chỉ cho phép qua Passkey hiện có hoặc khóa gốc. Tiếp tục?","confirmRotateBtn":"Tiến hành xoay vòng","rotateVerifyTitle":"Xác minh danh tính để xoay vòng khóa","rotateSuccess":"Xoay vòng khóa khôi phục thành công! Vui lòng lưu trữ khóa mới ở nơi an toàn ngay.","oneWayHash":"Băm mật mã một chiều","oneWayTooltip":"Được bảo vệ bằng băm một chiều SHA-256. Máy chủ không lưu văn bản thuần và không thể giải mã.","newKeyGenerated":"Đã tạo khóa khôi phục 30 chữ số mới (Vui lòng lưu ngay)","oneWayWarning":"Lưu ý: Khóa này CHỈ HIỂN THỊ MỘT LẦN. Máy chủ chỉ lưu bản băm không thể đảo ngược, hãy sao chép và lưu trữ an toàn ngoại tuyến.","autoRotatedTitle":"Khóa khôi phục đã tự động xoay vòng","autoRotatedNotice":"Theo quy tắc sử dụng một lần, khóa trước đây của bạn đã bị vô hiệu hóa và khóa 30 chữ số mới đã được tạo. Hãy sao chép và lưu trữ ngoại tuyến an toàn ngay!","savedAndClose":"Tôi đã lưu an toàn và tiếp tục","savedAndContinue":"Tôi đã lưu an toàn và vào bảng điều khiển","descOneWay":"Khóa khôi phục khẩn cấp là thông tin xác thực duy nhất để lấy lại quyền truy cập tài khoản và giải mã dữ liệu E2EE nếu mất tất cả Passkey hoặc ứng dụng xác thực. Để đảm bảo an toàn không kiến thức (zero-knowledge), khóa được lưu trữ dưới dạng băm một chiều không thể đảo ngược, không thể xem dưới dạng văn bản thuần túy và chỉ có thể xoay vòng bằng khóa khôi phục ban đầu hoặc Passkey hiện có. Khóa sẽ tự động xoay vòng ngay sau khi được sử dụng.","keyRequired":"Cần có khóa khôi phục","verifyBtn":"Khóa khôi phục","verifyPromptLabel":"Khóa khôi phục ban đầu","rotateSuccessE2eeWarning":"Khóa khôi phục đã được xoay vòng thành công! Lưu ý: Vì E2EE trước đó đã bị khóa và không thể giải mã, dữ liệu cũ vẫn yêu cầu khóa khôi phục trước đó để mở khóa, hoặc bạn có thể nhấp vào \\"Đặt lại cặp khóa\\" bên dưới."},"verifyIdentity":"Xác minh bảo mật","verifyIdentityDesc":"Để bảo vệ tài khoản của bạn, vui lòng xác minh danh tính trước khi tiếp tục.","usePasskeyInstead":"Xác thực bằng Passkey","changePasswordWithPasskey":"Xác minh bằng Passkey & Cập nhật mật khẩu","enableRegistration":"Cho phép đăng ký người dùng mới","timezone":"Múi giờ","timezoneAuto":"Tự động (mặc định của trình duyệt)","totpCode":"Mã xác thực"}`),d={item1Title:`Obex Protective DNS`,item1Desc:`Bộ phân giải DNS dựa trên Cloudflare Workers & D1, nỗ lực tối đa vì tốc độ và bảo mật.`,item2Title:`Bảo vệ quyền riêng tư DoH`,item2Desc:`Ngăn chặn việc bị chặn và tăng cường quyền riêng tư thông qua đường hầm mã hóa DNS over HTTPS (RFC 8484).`,item3Title:`Mạng lưới biên toàn cầu`,item3Desc:`Dựa trên mạng lưới biên rộng lớn của Cloudflare để có tốc độ phân giải cực nhanh và độ trễ cực thấp.`,item4Title:`Lọc tinh vi`,item4Desc:`Hỗ trợ đầy đủ danh sách đen/trắng, quy tắc AdGuard và chuyển hướng bản ghi DNS tùy chỉnh.`,item5Title:`Thống kê và phân tích thời gian thực`,item5Desc:`Hiển thị trực quan tình trạng sức khỏe của mạng thông qua nhật ký truy vấn chi tiết và bảng điều khiển thống kê tổng hợp.`,item6Title:`Giao diện hiện đại & Chế độ tối`,item6Desc:`Bảng quản lý mật độ cao được thiết kế cho các kỹ sư và người dùng gia đình, dựa trên Blueprint UI của Palantir.`,item7Title:`Cơ sở hạ tầng Cloud Native`,item7Desc:`Kiến trúc không máy chủ (Serverless) đảm bảo không tốn công bảo trì và khả năng mở rộng vô hạn cho DNS cá nhân.`,item8Title:`Quản lý nhiều cấu hình`,item8Desc:`Tạo và quản lý nhiều cấu hình độc lập cho các thiết bị hoặc môi trường mạng khác nhau.`,item9Title:`Quản lý nhiều điểm truy cập`,item9Desc:`Cấu hình các điểm truy cập DNS riêng cho các thiết bị khác nhau, thực hiện cách ly và phân tích tinh vi dữ liệu nhật ký và thống kê.`},f={title:`Hướng dẫn Thiết lập & Triển khai DNS Worker`,subtitle:`Phiên bản của bạn chưa được cấu hình đầy đủ. Vui lòng hoàn thành các bước bên dưới để kích hoạt DNS Worker.`,dbStatus:`Liên kết Cơ sở Dữ liệu D1 (env.DB)`,jwtStatus:`Khóa Bí mật JWT (env.JWT_SECRET)`,configured:`Đã cấu hình`,missing:`Thiếu / Chưa cấu hình`,refresh:`Tải lại & Xác minh`,methodCli:`Triển khai bằng CLI`,methodDash:`Triển khai bằng Bảng điều khiển Cloudflare`,copy:`Sao chép`,copied:`Đã sao chép!`,stepDbTitle:`1. Liên kết Cơ sở Dữ liệu D1`,stepDbDesc:`Tạo một cơ sở dữ liệu D1 và liên kết nó với worker của bạn. Chạy lệnh sau trong terminal:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`Sao chép thông tin cơ sở dữ liệu D1 đầu ra và dán vào file wrangler.toml dưới mục [[d1_databases]]:`,stepDbCommand2:`[[d1_databases]]
|
|
2
2
|
binding = "DB"
|
|
3
3
|
database_name = "dns_worker_db"
|
|
4
4
|
database_id = "<D1_DATABASE_ID_CỦA_BẠN>"
|
|
@@ -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={keepLoggedIn:`保持登录 {{days}} 天`,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 边缘节点异常 (错误代码 {{code}}: {{desc}})。服务暂时不可用,请稍后重试。{{rayId}}`,cfErrorCodeOnly:`Cloudflare 边缘服务异常 (错误代码 {{code}})。服务暂时不可用,请稍后重试。{{rayId}}`,cfErrorGeneric:`Cloudflare 边缘服务异常,服务暂时不可用,请稍后重试。{{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:`多因素认证`,totpPrompt:`请输入身份验证应用中的 6 位动态验证码`,recoveryPrompt:`请输入 30 位应急恢复密钥(5 组,每组 6 位数字)`,recoveryChecksumError:`校验码错误:该组 6 位数无法被 11 整除`,recoveryChecksumErrorDesc:`第 {{groups}} 组校验码错误,请核对后重试`,backToPasskey:`返回通行密钥验证`,recoveryKeyRequired:`请输入应急恢复密钥`,totpFormatError:`请输入有效的 6 位验证码`,registrationDisabledTitle:`注册已停用`,registrationDisabledDesc:`当前系统已暂停开放新用户注册,请联系系统管理员获取账号。`,backToLogin:`返回登录`,jwtSecretPreset:`检测到正在使用预设的 JWT_SECRET,请在环境变量中修改并替换为自定义安全密钥后重新部署。`,jwtSecretMissing:`缺少 JWT_SECRET,请在环境变量中配置安全密钥后重新部署。`,jwtSecretInvalid:`JWT_SECRET 密钥格式无效,请检查配置。`,orUseOtherMfa:`或使用其他验证方式`,totpUseRecovery:`使用紧急恢复密钥`,totpUseApp:`使用身份验证器 App`,mfaMethodTotp:`数字验证器 (TOTP)`,invalidTotp:`TOTP 验证码无效,请重试`},i={title:`安装指南`,subtitle:`配置设备以使用 DNS Worker 主掌您的互联网安全。`,regionOptimization:`接入地区优化 (Windows)`,otherRegion:`其他地区`,copied:`已复制到剪贴板`,verifyConnection:`验证您的连接`,verifying:`正在验证...`,connected:`连接正常`,notConnected:`或未连接`,profileMatch:`您正通过此配置进行过滤。`,profileMismatch:`您正使用 Obex,但配置 ID 不匹配。`,verifyHint:`完成下方配置后,点击按钮验证。`,refreshStatus:`刷新状态`,egressIp:`出口 IP 地址`,currentLocation:`当前位置`,edgeServer:`边缘服务器`,serverLocation:`服务器位置`,dohUrlTitle:`当前配置 DoH URL`,accessPointTitle:`Access 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)”或使用第三方 App 配置 DoH。`,androidDotTitle:`私有 DNS (DoT / DoQ)`,androidDotDesc:`设置 > 网络和互联网 > 私有 DNS > 提供商主机名 (亦支持各类现代 DoQ 客户端):`,androidWildcardHint:`(通配符证书,路由至此配置)`,androidSingleDomainHint:`(单域名证书,路由至默认配置)`,androidIpNotice:`检测到当前通过 IP 或本地地址访问面板。Android 原生私有 DNS 仅接受域名,请在 .env 中配置 SERVERFULL_DOT_DOMAIN (例如 dns.example.com) 后刷新。`,androidWarning:`注:系统原生的“私有 DNS”使用 DoT 协议。若部署在 Cloudflare Workers,建议使用 Intra 等 App 配置 DoH;若运行在 Serverfull 模式并配置了 TLS 证书,可直接使用上述 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 证书与有效域名,请在配置中填入 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 Section 8 DDR (Discovery of Designated Resolvers),支持客户端通过 _dns 域名查询自动协商并升级至 DoQ / DoT 与 ECH。`,e2eeDesc:`使用专属后量子混合密钥 (P256-MLKEM768) 在边缘即刻加密 DNS 日志。云端无法窥视,数据仅在通过您的硬件 Passkey 授权的客户端本地解密并分析。`,detecting:`正在检测...`,dotUnavailableCfTitle:`DoT / DoQ 在 Cloudflare Worker 模式下不可用`,dotUnavailableCfDesc:`当前运行于 Cloudflare Worker (Serverless) 模式。受边缘无服务器运行环境网络限制,不支持监听原生 TCP/UDP 853 端口。若需使用 DoT 或 DoQ,请部署在独立服务器 (Serverfull 模式) 下;在当前模式下请使用 DoH (DNS over HTTPS)。`},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:`全部运营商`,filterIsp:`运营商`,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:`搜索运营商...`,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:`启用后不记录正常放行的 DNS 查询,仅记录被拦截、重定向或解析失败的记录。可大幅减少存储占用与写操作。`,ecsTitle:`EDNS 客户端子网 (ECS)`,ecsUpstreamHint:`并非所有上游 DNS 都支持 ECS。对于 ControlD 等递归解析器,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:`域名不存在`,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 (加密客户端问候) 是 TLS 1.3 的重要隐私扩展,它将 TLS 握手中的真实目标域名 (Inner SNI) 全程加密,仅向网络中间人暴露表层伪装域名 (Outer SNI / ECH Fronting)。`,echHelpBenefit1:`防止中间人及 ISP 窥探您正在访问的具体网页与子域名`,echHelpBenefit2:`配合 DoH 与自定义表层 SNI,消除明文 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,请先在「账号设置」中添加 Passkey。`,e2eeGoToAccount:`前往账号设置添加 Passkey`,e2eeEnableSwitch:`启用日志端到端加密`,e2eeKeyType:`加密算法`,e2eeDeviceState:`当前设备状态`,e2eeUnlocked:`已在此设备解锁`,e2eeUnlockButton:`验证 Passkey 解锁`,e2eeProtectedPasskeys:`已授权 Passkey 凭据`,e2eeDevicesUnit:`个凭据`,e2eeEnableSuccess:`端到端加密已成功启用`,e2eeEnableError:`启用端到端加密失败`,e2eeDisableSuccess:`端到端加密已关闭`,e2eeDisableError:`关闭端到端加密失败`,e2eeUnlockSuccess:`私钥已成功在此设备解锁`,e2eeUnlockError:`验证 Passkey 解锁失败`,e2eeDisableConfirm:`确定要关闭端到端加密吗?关闭后新生成的 DNS 日志将以明文存储。(已加密的历史日志仍需私钥解密)`,e2eeUnlockPrompt:`此配置已启用端到端加密,请验证 Passkey 解锁查看完整明文日志。`,e2eeUnlockNow:`解锁加密日志`,e2eeUnlockRecovery:`使用恢复密钥解锁`,securityTitle:`安全与访问`,rotateKeyTitle:`接入凭据 (URL)`,rotateKeyDesc:`为此配置重新生成新的访问 URL。当前使用旧 URL 的所有设备将立即失去与 DNS Worker 的连接,需使用新 URL 重新配置。`,rotateKeyBtn:`轮换接入凭据`,copied:`已复制到剪贴板`,nameUpdateFailed:`更新失败`},u=JSON.parse(`{"title":"账号设置","subtitle":"管理您的安全凭据和系统用户。","e2ee":{"title":"端到端加密 (E2EE)","desc":"采用客户端后量子混合加密 (P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) 硬件信封加密技术。数据在边缘即刻加密,服务端仅存储不可逆密文,只有已授权硬件 Passkey 的设备可在本地解密并分析。","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"升级到后量子 (PQC)","upgradePqcSuccess":"已成功升级到后量子混合加密 (P256-MLKEM768)","upgradePqcError":"升级到后量子加密失败","enabled":"已启用","disabled":"未启用","passkeyRequired":"端到端加密需要硬件 Passkey (WebAuthn) 支持。请在上方「双重认证 (MFA)」设置中先添加至少一个 Passkey 凭据。","scopesTitle":"数据加密范围","scopesSubtitle":"选择通过硬件 Passkey 进行端到端加密保护的数据类型。","scopeLogsTitle":"DNS 查询日志","scopeLogsDesc":"在边缘加密 DNS 请求的域名、客户端 IP、解析记录及上游信息,防止云端日志被窃取或留存明文。","scopeRulesTitle":"自定义规则与重定向","scopeRulesDesc":"端到端加密自定义拦截/放行规则与 URL 重定向配置。","scopeClientsTitle":"设备别名与客户端元数据","scopeClientsDesc":"端到端加密接入点设备名称、IP 别名与拓扑信息。","statusActive":"已保护","statusPlanned":"规划中","profileSelect":"配置 Profile","keyType":"加密算法","deviceState":"当前设备状态","unlocked":"已在此设备解锁","lockDevice":"锁定此设备","lockSuccess":"已锁定,私钥已从本地清除","unlockButton":"验证 Passkey 解锁","protectedPasskeys":"已授权 Passkey 凭据","devicesUnit":"个凭据","enableSuccess":"端到端加密已成功启用","enableError":"启用端到端加密失败","disableSuccess":"端到端加密已关闭","disableError":"关闭端到端加密失败","unlockSuccess":"私钥已成功在此设备解锁","unlockError":"验证 Passkey 解锁失败","disableConfirm":"确定要关闭端到端加密吗?关闭后新生成的 DNS 日志将以明文存储。(已加密的历史日志仍需私钥解密)","noKeypairTitle":"尚未生成端到端加密密钥对","noKeypairDesc":"端到端加密需要为您的账户生成专属的后量子 (P256-MLKEM768) 密钥对。私钥将通过通行密钥 (Passkey) 或恢复密钥 (Recovery Key) 进行硬件/信封加密保护,服务端无法解密您的 DNS 记录。","initPasskeyBtn":"验证现有 Passkey 生成密钥对","addPasskeyBtn":"添加 Passkey 以支持硬件加密","initRecoveryBtn":"通过恢复密钥生成密钥对","initWithRecoveryTitle":"通过恢复密钥生成密钥对","initWithRecoveryDesc":"请输入您当前的 30 位紧急恢复密钥。系统将在本地生成后量子 (P256-MLKEM768) 密钥对并通过该密钥信封加密。使用后恢复密钥将自动轮换以确保安全。","keypairGenSuccess":"端到端加密密钥对已成功生成!","keypairGenError":"生成端到端加密密钥对失败","unlockRecoveryButton":"使用恢复密钥解锁","unlockWithRecoveryTitle":"使用恢复密钥解锁","unlockWithRecoveryDesc":"请输入 30 位紧急恢复密钥。注意:根据单次使用规则,恢复密钥验证成功后将立即自动轮换。","recoveryKeyInputLabel":"恢复密钥","unlockConfirm":"解锁私钥","recoveryUnlockFailed":"恢复密钥无效或解析失败","generateKeypairBtn":"生成密钥对","enableSwitch":"启用查询日志端到端加密","enableSwitchDesc":"在客户端边缘加密 DNS 请求的域名、客户端 IP、解析记录及上游信息后再写入云端持久化存储。","trustBoundaryTitle":"安全与信任边界提示","trustBoundaryDesc":"所有 DNS 查询流量在网络解析时必然会经过托管服务器(Cloudflare Workers 边缘节点或自建主机运行时),服务器在运行时内存中处理解析后将记录加密写入。本功能仅用于保护云端持久化数据库(D1 / 数据仓库)免受静态数据泄露或离线分析,无法向正在处理转发请求的托管服务器隐藏实时网络流量。","initFailed":"初始化端到端加密失败"},"jwtSecretWarningTitle":"安全提示:JWT 密钥强度较弱","jwtSecretWarningDesc":"当前 JWT_SECRET 长度小于 32 位字符,存在潜在安全隐患。请先配置环境变量 KEK_v1 完成凭据信封加密迁移,然后再轮换 JWT_SECRET,以防止存量加密的 TOTP 或恢复密钥无法解密。","roleAdmin":"系统管理员","roleUser":"用户","personalInfo":"个人信息","username":"用户名","userId":"用户 ID","changePassword":"修改密码","currentPassword":"当前密码","newPassword":"新密码","updatePassword":"更新密码","userManagement":"用户管理 (管理员)","createUser":"创建用户","role":"角色","createdAt":"创建时间","lastActive":"最后活动时间","lastResolve":"最后解析时间","actions":"操作","dangerZone":"危险区域","clearLogs":"清空所有日志","clearLogsDesc":"这将删除您名下所有 DNS 配置生成的查询日志。此操作不可恢复。","clearLogsBtn":"立即清空日志","deleteAccount":"注销账号","deleteAccountDesc":"永久删除您的账号及所有关联数据。此操作将导致您失去所有解析配置。","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 配置将被自动清理。账户本身在 90 天无登录后将予移除。","systemSettings":"系统设置 (管理员)","adminOnlyView":"仅管理员可见","featureToggle":"功能开关","enableTurnstileSignup":"注册页面启用人机验证","enableTurnstileLogin":"登录页面启用人机验证","totp":{"title":"数字验证器 (TOTP)","enabled":"已启用","disabled":"停用","setupDesc":"为账号添加额外的安全层。使用 Google Authenticator、Authy 或任何 TOTP 兼容应用。","setupBtn":"配置数字验证器","scanQR":"使用验证器应用扫描此二维码:","orEnterManually":"或手动输入密钥:","enterCode":"请输入验证器代码进行确认:","enterCodeHint":"输入 6 位验证码以确认密钥已正确录入。","activate":"激活数字验证器","skipPassword":"无密码登录 — 登录时只显示 TOTP 输入框(不显示密码)","disable":"停用数字验证器","disableTitle":"停用数字验证器","disableWarning":"停用数字验证器后,若未配置通行密钥,账号将仅受密码保护。确定要停用吗?","confirmDisable":"确认停用","recoveryKeysTitle":"请保存您的恢复密钥","recoveryKeysWarning":"请将恢复密钥妥善保存(如密码管理器)。每个密钥只能使用一次。","copyKeys":"复制全部密钥","copied":"已复制!","done":"完成,我已保存密钥","activeDesc":"数字验证器已启用,正在为您的账号提供 6 位动态验证码保护。","invalidCode":"请输入 6 位验证码"},"sessions":{"session":"会话","title":"活跃会话","device":"设备","ip":"IP 地址","loginTime":"登录时间","expires":"过期时间","action":"操作","current":"当前会话","revoke":"撤销","revokeFailed":"撤销会话失败。","empty":"未找到活跃会话。","unknownDevice":"未知设备","revokeOthers":"撤销其他会话","confirmRevokeOthers":"撤销其他会话","revokeOthersConfirmText":"确定要撤销所有其他活跃会话吗?除当前设备外,其他已登录设备将立即退出。"},"activity":{"title":"账号活动记录","action":"事件","time":"时间","session":"会话","ip":"IP 地址","empty":"暂无活动记录。","loadMore":"加载更多","signup":"注册","loginSuccess":"登录成功","loginFail":"登录失败","logout":"退出登录","pwChangeSuccess":"密码已修改","pwChangeFail":"密码修改失败","totpVerifySuccess":"TOTP 验证通过","totpVerifyFail":"TOTP 验证失败","totpSetup":"配置数字验证器","totpRemoved":"停用数字验证器","recoveryKeyUsed":"使用了恢复密钥","sessionRevoked":"会话已撤销","reasons":{"user_active":"主动登出","user_revoke":"撤销会话","expired":"会话已过期","geolocation_mismatch":"异地访问限制","geolocation_missing":"缺少地理位置信息","token_reuse":"凭证重复使用(安全警告)"},"passkeyRegistered":"添加通行密钥","passkeyDeleted":"删除通行密钥","passkeyVerifySuccess":"通行密钥验证通过","passkeyVerifyFail":"通行密钥验证失败","recoveryKeyRotated":"应急恢复密钥已轮换","device":"设备"},"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":"提交修改时将调用通行密钥 (Passkey) 生物识别或硬件密钥核验身份。","submitNotice":"提交时将调用通行密钥 (Passkey) 生物识别或硬件密钥核验身份。"},"mfaNone":"无","resetUserPassword":"重置密码","resetPasswordTitle":"重置用户密码","resetPasswordWarning":"重置后,该用户的所有现有会话将立即注销,用户需使用新密码重新登录。","resetPasswordSuccess":"密码已成功重置,用户旧登录会话已注销。","confirmReset":"确认重置","mfa":{"title":"多因素认证 (MFA)","enabled":"已配置","notConfigured":"未配置","desc":"通行密钥 (Passkey) 与数字验证器 (TOTP) 均可作为多因素认证方式,配置任选其一即可保障账号安全并支持无密码登录与密码重置。","passwordlessTitle":"无密码登录 (Passwordless Login)","passwordlessDesc":"启用后,登录时无需输入密码,直接通过通行密钥 (Passkey) 或数字验证码 (TOTP) 完成身份核验。","unconfiguredHint":"当前账号尚未配置任何多因素认证。配置通行密钥或数字验证器后,可启用无密码快捷登录并在忘记密码时安全找回账号。","password":"密码","passkey":"通行密钥 (Passkey)","totp":"身份验证器 (TOTP)"},"recoveryKey":{"title":"紧急恢复密钥","desc":"紧急恢复密钥用于在丢失所有通行密钥或数字验证器时重新登录账户或重置密码。为保证零知识安全,恢复密钥采用单向不可逆密码学散列存储,无法在网页端直接解密查看,仅支持轮换。使用后密钥将立即自动轮换。","configured":"已配置","notConfigured":"未配置","oneWayHash":"单向不可逆散列","oneWayTooltip":"采用 SHA-256 单向密码学散列保护,服务端不存储明文且不可解密,仅支持身份轮换验证。","rotateBtn":"轮换恢复密钥","yourKey":"您的 30 位应急恢复密钥","newKeyGenerated":"已生成全新 30 位恢复密钥(请立即保存)","securityTip":"请妥善保管此恢复密钥。拥有此密钥者可以重获您的账户访问权限。","oneWayWarning":"注意:此密钥仅在此显示一次,关闭后将无法再次查看!服务端仅保存不可逆散列,请务必将其妥善复制并离线安全保存。","rotateConfirm":"轮换恢复密钥将立即使原恢复密钥失效,并重新派生信封加密密钥。仅允许通过现有通行密钥 (Passkey) 或原恢复密钥完成轮换验证。是否继续?","confirmRotateBtn":"确认进入轮换验证","rotateVerifyTitle":"验证身份以轮换恢复密钥","rotateSuccess":"恢复密钥已成功轮换!请立即妥善离线保存新密钥,旧密钥已失效。","autoRotatedTitle":"恢复密钥已自动轮换","autoRotatedNotice":"根据恢复密钥单次使用规则,您的原恢复密钥已失效,系统已为您生成全新 30 位紧急恢复密钥。请务必立即复制并妥善离线保存,关闭后将无法再次查看!","savedAndClose":"我已妥善保存并继续","savedAndContinue":"我已妥善保存并进入控制台","descOneWay":"紧急恢复密钥是在您丢失所有通行密钥 (Passkey) 或身份验证器时,恢复账号访问及端到端解密数据的唯一凭据。为确保零知识安全,恢复密钥采用单向不可逆散列存储,无法在网页端查看明文,仅支持通过原恢复密钥或现有 Passkey 进行轮换。密钥一旦被使用将立即自动轮换。","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:`无服务器架构确保零维护和私人 DNS 的无限扩展性。`,item8Title:`多配置管理`,item8Desc:`为不同设备或网络环境创建并管理多个独立配置。`,item9Title:`多接入点管理`,item9Desc:`为不同设备配置专属的 DNS 接入点,实现日志和统计数据的精细化隔离与分析。`},f={title:`DNS Worker 部署与配置指南`,subtitle:`您的系统实例尚未完全配置。请按照以下步骤完成部署以启用 DNS Worker。`,dbStatus:`D1 数据库绑定 (env.DB)`,jwtStatus:`JWT 密钥 Secrets (env.JWT_SECRET)`,configured:`已配置`,missing:`缺失 / 未配置`,refresh:`重新检测并刷新`,methodCli:`CLI 命令行部署`,methodDash:`Cloudflare 控制台部署`,copy:`复制`,copied:`已复制!`,stepDbTitle:`1. 创建与绑定 D1 数据库`,stepDbDesc:`在 Cloudflare 中创建 D1 数据库实例,在终端运行以下命令:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`复制终端输出的配置信息,并粘贴到项目根目录的 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={keepLoggedIn:`保持登录 {{days}} 天`,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 边缘节点异常 (错误代码 {{code}}: {{desc}})。服务暂时不可用,请稍后重试。{{rayId}}`,cfErrorCodeOnly:`Cloudflare 边缘服务异常 (错误代码 {{code}})。服务暂时不可用,请稍后重试。{{rayId}}`,cfErrorGeneric:`Cloudflare 边缘服务异常,服务暂时不可用,请稍后重试。{{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:`多因素认证`,totpPrompt:`请输入身份验证应用中的 6 位动态验证码`,recoveryPrompt:`请输入 30 位应急恢复密钥(5 组,每组 6 位数字)`,recoveryChecksumError:`校验码错误:该组 6 位数无法被 11 整除`,recoveryChecksumErrorDesc:`第 {{groups}} 组校验码错误,请核对后重试`,backToPasskey:`返回通行密钥验证`,recoveryKeyRequired:`请输入应急恢复密钥`,totpFormatError:`请输入有效的 6 位验证码`,registrationDisabledTitle:`注册已停用`,registrationDisabledDesc:`当前系统已暂停开放新用户注册,请联系系统管理员获取账号。`,backToLogin:`返回登录`,jwtSecretPreset:`检测到正在使用预设的 JWT_SECRET,请在环境变量中修改并替换为自定义安全密钥后重新部署。`,jwtSecretMissing:`缺少 JWT_SECRET,请在环境变量中配置安全密钥后重新部署。`,jwtSecretInvalid:`JWT_SECRET 密钥格式无效,请检查配置。`,orUseOtherMfa:`或使用其他验证方式`,totpUseRecovery:`使用紧急恢复密钥`,totpUseApp:`使用身份验证器 App`,mfaMethodTotp:`数字验证器 (TOTP)`,invalidTotp:`TOTP 验证码无效,请重试`},i={title:`安装指南`,subtitle:`配置设备以使用 DNS Worker 主掌您的互联网安全。`,regionOptimization:`接入地区优化 (Windows)`,otherRegion:`其他地区`,copied:`已复制到剪贴板`,verifyConnection:`验证您的连接`,verifying:`正在验证...`,connected:`连接正常`,notConnected:`或未连接`,profileMatch:`您正通过此配置进行过滤。`,profileMismatch:`您正使用 Obex,但配置 ID 不匹配。`,verifyHint:`完成下方配置后,点击按钮验证。`,refreshStatus:`刷新状态`,egressIp:`出口 IP 地址`,currentLocation:`当前位置`,edgeServer:`边缘服务器`,serverLocation:`服务器位置`,dohUrlTitle:`当前配置 DoH URL`,accessPointTitle:`Access 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)”或使用第三方 App 配置 DoH。`,androidDotTitle:`私有 DNS (DoT / DoQ)`,androidDotDesc:`设置 > 网络和互联网 > 私有 DNS > 提供商主机名 (亦支持各类现代 DoQ 客户端):`,androidWildcardHint:`(通配符证书,路由至此配置)`,androidSingleDomainHint:`(单域名证书,路由至默认配置)`,androidIpNotice:`检测到当前通过 IP 或本地地址访问面板。Android 原生私有 DNS 仅接受域名,请在 .env 中配置 SERVERFULL_DOT_DOMAIN (例如 dns.example.com) 后刷新。`,androidWarning:`注:系统原生的“私有 DNS”使用 DoT 协议。若部署在 Cloudflare Workers,建议使用 Intra 等 App 配置 DoH;若运行在 Serverfull 模式并配置了 TLS 证书,可直接使用上述 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 证书与有效域名,请在配置中填入 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 Section 8 DDR (Discovery of Designated Resolvers),支持客户端通过 _dns 域名查询自动协商并升级至 DoQ / DoT 与 ECH。`,e2eeDesc:`使用专属后量子混合密钥 (P256-MLKEM768) 在边缘即刻加密 DNS 日志。云端无法窥视,数据仅在通过您的硬件 Passkey 授权的客户端本地解密并分析。`,detecting:`正在检测...`,dotUnavailableCfTitle:`DoT / DoQ 在 Cloudflare Worker 模式下不可用`,dotUnavailableCfDesc:`当前运行于 Cloudflare Worker (Serverless) 模式。受边缘无服务器运行环境网络限制,不支持监听原生 TCP/UDP 853 端口。若需使用 DoT 或 DoQ,请部署在独立服务器 (Serverfull 模式) 下;在当前模式下请使用 DoH (DNS over HTTPS)。`},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:`全部运营商`,filterIsp:`运营商`,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:`搜索运营商...`,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:`启用后不记录正常放行的 DNS 查询,仅记录被拦截、重定向或解析失败的记录。可大幅减少存储占用与写操作。`,ecsTitle:`EDNS 客户端子网 (ECS)`,ecsUpstreamHint:`并非所有上游 DNS 都支持 ECS。对于 ControlD 等递归解析器,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:`域名不存在`,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 (加密客户端问候) 是 TLS 1.3 的重要隐私扩展,它将 TLS 握手中的真实目标域名 (Inner SNI) 全程加密,仅向网络中间人暴露表层伪装域名 (Outer SNI / ECH Fronting)。`,echHelpBenefit1:`防止中间人及 ISP 窥探您正在访问的具体网页与子域名`,echHelpBenefit2:`配合 DoH 与自定义表层 SNI,消除明文 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,请先在「账号设置」中添加 Passkey。`,e2eeGoToAccount:`前往账号设置添加 Passkey`,e2eeEnableSwitch:`启用日志端到端加密`,e2eeKeyType:`加密算法`,e2eeDeviceState:`当前设备状态`,e2eeUnlocked:`已在此设备解锁`,e2eeUnlockButton:`验证 Passkey 解锁`,e2eeProtectedPasskeys:`已授权 Passkey 凭据`,e2eeDevicesUnit:`个凭据`,e2eeEnableSuccess:`端到端加密已成功启用`,e2eeEnableError:`启用端到端加密失败`,e2eeDisableSuccess:`端到端加密已关闭`,e2eeDisableError:`关闭端到端加密失败`,e2eeUnlockSuccess:`私钥已成功在此设备解锁`,e2eeUnlockError:`验证 Passkey 解锁失败`,e2eeDisableConfirm:`确定要关闭端到端加密吗?关闭后新生成的 DNS 日志将以明文存储。(已加密的历史日志仍需私钥解密)`,e2eeUnlockPrompt:`此配置已启用端到端加密,请验证 Passkey 解锁查看完整明文日志。`,e2eeUnlockNow:`解锁加密日志`,e2eeUnlockRecovery:`使用恢复密钥解锁`,securityTitle:`安全与访问`,rotateKeyTitle:`接入凭据 (URL)`,rotateKeyDesc:`为此配置重新生成新的访问 URL。当前使用旧 URL 的所有设备将立即失去与 DNS Worker 的连接,需使用新 URL 重新配置。`,rotateKeyBtn:`轮换接入凭据`,copied:`已复制到剪贴板`,nameUpdateFailed:`更新失败`},u=JSON.parse(`{"title":"账号设置","subtitle":"管理您的安全凭据和系统用户。","e2ee":{"title":"端到端加密 (E2EE)","desc":"采用客户端后量子混合加密 (P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) 硬件信封加密技术。数据在边缘即刻加密,服务端仅存储不可逆密文,只有已授权硬件 Passkey 的设备可在本地解密并分析。","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"升级到后量子 (PQC)","upgradePqcSuccess":"已成功升级到后量子混合加密 (P256-MLKEM768)","upgradePqcError":"升级到后量子加密失败","enabled":"已启用","disabled":"未启用","passkeyRequired":"端到端加密需要硬件 Passkey (WebAuthn) 支持。请在上方「双重认证 (MFA)」设置中先添加至少一个 Passkey 凭据。","scopesTitle":"数据加密范围","scopesSubtitle":"选择通过硬件 Passkey 进行端到端加密保护的数据类型。","scopeLogsTitle":"DNS 查询日志","scopeLogsDesc":"在边缘加密 DNS 请求的域名、客户端 IP、解析记录及上游信息,防止云端日志被窃取或留存明文。","scopeRulesTitle":"自定义规则与重定向","scopeRulesDesc":"端到端加密自定义拦截/放行规则与 URL 重定向配置。","scopeClientsTitle":"设备别名与客户端元数据","scopeClientsDesc":"端到端加密接入点设备名称、IP 别名与拓扑信息。","statusActive":"已保护","statusPlanned":"规划中","profileSelect":"配置 Profile","keyType":"加密算法","deviceState":"当前设备状态","unlocked":"已在此设备解锁","lockDevice":"锁定此设备","lockSuccess":"已锁定,私钥已从本地清除","unlockButton":"验证 Passkey 解锁","protectedPasskeys":"已授权 Passkey 凭据","devicesUnit":"个凭据","enableSuccess":"端到端加密已成功启用","enableError":"启用端到端加密失败","disableSuccess":"端到端加密已关闭","disableError":"关闭端到端加密失败","unlockSuccess":"私钥已成功在此设备解锁","unlockError":"验证 Passkey 解锁失败","disableConfirm":"确定要关闭端到端加密吗?关闭后新生成的 DNS 日志将以明文存储。(已加密的历史日志仍需私钥解密)","noKeypairTitle":"尚未生成端到端加密密钥对","noKeypairDesc":"端到端加密需要为您的账户生成专属的后量子 (P256-MLKEM768) 密钥对。私钥将通过通行密钥 (Passkey) 或恢复密钥 (Recovery Key) 进行硬件/信封加密保护,服务端无法解密您的 DNS 记录。","initPasskeyBtn":"验证现有 Passkey 生成密钥对","addPasskeyBtn":"添加 Passkey 以支持硬件加密","initRecoveryBtn":"通过恢复密钥生成密钥对","initWithRecoveryTitle":"通过恢复密钥生成密钥对","initWithRecoveryDesc":"请输入您当前的 30 位紧急恢复密钥。系统将在本地生成后量子 (P256-MLKEM768) 密钥对并通过该密钥信封加密。使用后恢复密钥将自动轮换以确保安全。","keypairGenSuccess":"端到端加密密钥对已成功生成!","keypairGenError":"生成端到端加密密钥对失败","unlockRecoveryButton":"使用恢复密钥解锁","unlockWithRecoveryTitle":"使用恢复密钥解锁","unlockWithRecoveryDesc":"请输入 30 位紧急恢复密钥。注意:根据单次使用规则,恢复密钥验证成功后将立即自动轮换。","recoveryKeyInputLabel":"恢复密钥","unlockConfirm":"解锁私钥","recoveryUnlockFailed":"恢复密钥无效或解析失败","generateKeypairBtn":"生成密钥对","enableSwitch":"启用查询日志端到端加密","enableSwitchDesc":"在客户端边缘加密 DNS 请求的域名、客户端 IP、解析记录及上游信息后再写入云端持久化存储。","trustBoundaryTitle":"安全与信任边界提示","trustBoundaryDesc":"所有 DNS 查询流量在网络解析时必然会经过托管服务器(Cloudflare Workers 边缘节点或自建主机运行时),服务器在运行时内存中处理解析后将记录加密写入。本功能仅用于保护云端持久化数据库(D1 / 数据仓库)免受静态数据泄露或离线分析,无法向正在处理转发请求的托管服务器隐藏实时网络流量。","initFailed":"初始化端到端加密失败","enrollPasskeyBtn":"关联当前通行密钥","enrollPasskeySuccess":"已成功将通行密钥关联至端到端加密!","enrollPasskeyFailed":"关联通行密钥失败","resetKeypairBtn":"重置密钥对","confirmResetBtn":"确认重置并重新生成","resetKeypairTitle":"重置端到端加密密钥对","resetKeypairDesc":"如果您的恢复密钥不匹配或无法解密,且未关联通行密钥,重置密钥对将从服务端清除旧密钥,并为您重新生成全新的后量子 (P256-MLKEM768) 密钥对。","resetKeypairPasskeyNotice":"确认后将立即调用您当前已配置的通行密钥 (Passkey) 完成新密钥对的加密与授权。","resetKeypairRecoveryNotice":"确认后将引导您输入当前恢复密钥以完成新密钥对的生成与加密。","resetAndInitPasskeySuccess":"密钥对已成功重置并使用通行密钥重新加密!","resetSuccessEnterRecovery":"旧密钥已清除,请使用恢复密钥初始化新密钥对。","resetFailed":"重置密钥对失败"},"jwtSecretWarningTitle":"安全提示:JWT 密钥强度较弱","jwtSecretWarningDesc":"当前 JWT_SECRET 长度小于 32 位字符,存在潜在安全隐患。请先配置环境变量 KEK_v1 完成凭据信封加密迁移,然后再轮换 JWT_SECRET,以防止存量加密的 TOTP 或恢复密钥无法解密。","roleAdmin":"系统管理员","roleUser":"用户","personalInfo":"个人信息","username":"用户名","userId":"用户 ID","changePassword":"修改密码","currentPassword":"当前密码","newPassword":"新密码","updatePassword":"更新密码","userManagement":"用户管理 (管理员)","createUser":"创建用户","role":"角色","createdAt":"创建时间","lastActive":"最后活动时间","lastResolve":"最后解析时间","actions":"操作","dangerZone":"危险区域","clearLogs":"清空所有日志","clearLogsDesc":"这将删除您名下所有 DNS 配置生成的查询日志。此操作不可恢复。","currentDbSize":"当前数据库大小","clearLogsBtn":"立即清空日志","deleteAccount":"注销账号","deleteAccountDesc":"永久删除您的账号及所有关联数据。此操作将导致您失去所有解析配置。","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 配置将被自动清理。账户本身在 90 天无登录后将予移除。","systemSettings":"系统设置 (管理员)","adminOnlyView":"仅管理员可见","featureToggle":"功能开关","enableTurnstileSignup":"注册页面启用人机验证","enableTurnstileLogin":"登录页面启用人机验证","totp":{"title":"数字验证器 (TOTP)","enabled":"已启用","disabled":"停用","setupDesc":"为账号添加额外的安全层。使用 Google Authenticator、Authy 或任何 TOTP 兼容应用。","setupBtn":"配置数字验证器","scanQR":"使用验证器应用扫描此二维码:","orEnterManually":"或手动输入密钥:","enterCode":"请输入验证器代码进行确认:","enterCodeHint":"输入 6 位验证码以确认密钥已正确录入。","activate":"激活数字验证器","skipPassword":"无密码登录 — 登录时只显示 TOTP 输入框(不显示密码)","disable":"停用数字验证器","disableTitle":"停用数字验证器","disableWarning":"停用数字验证器后,若未配置通行密钥,账号将仅受密码保护。确定要停用吗?","confirmDisable":"确认停用","recoveryKeysTitle":"请保存您的恢复密钥","recoveryKeysWarning":"请将恢复密钥妥善保存(如密码管理器)。每个密钥只能使用一次。","copyKeys":"复制全部密钥","copied":"已复制!","done":"完成,我已保存密钥","activeDesc":"数字验证器已启用,正在为您的账号提供 6 位动态验证码保护。","invalidCode":"请输入 6 位验证码","testBtn":"测试动态口令","testTitle":"测试数字验证器 (TOTP)","testDesc":"请输入身份验证器 App 当前显示的 6 位验证码,以验证其配置是否正确并已准确同步。","testSuccess":"验证成功!您的身份验证器配置正确并能正常生成验证码。","testFailed":"验证码错误或设备时钟未同步","verificationCode":"6 位验证码","verifyBtn":"立即验证"},"sessions":{"session":"会话","title":"活跃会话","device":"设备","ip":"IP 地址","loginTime":"登录时间","expires":"过期时间","action":"操作","current":"当前会话","revoke":"撤销","revokeFailed":"撤销会话失败。","empty":"未找到活跃会话。","unknownDevice":"未知设备","revokeOthers":"撤销其他会话","confirmRevokeOthers":"撤销其他会话","revokeOthersConfirmText":"确定要撤销所有其他活跃会话吗?除当前设备外,其他已登录设备将立即退出。"},"activity":{"title":"账号活动记录","action":"事件","time":"时间","session":"会话","ip":"IP 地址","empty":"暂无活动记录。","loadMore":"加载更多","signup":"注册","loginSuccess":"登录成功","loginFail":"登录失败","logout":"退出登录","pwChangeSuccess":"密码已修改","pwChangeFail":"密码修改失败","totpVerifySuccess":"TOTP 验证通过","totpVerifyFail":"TOTP 验证失败","totpSetup":"配置数字验证器","totpRemoved":"停用数字验证器","recoveryKeyUsed":"使用了恢复密钥","sessionRevoked":"会话已撤销","reasons":{"user_active":"主动登出","user_revoke":"撤销会话","expired":"会话已过期","geolocation_mismatch":"异地访问限制","geolocation_missing":"缺少地理位置信息","token_reuse":"凭证重复使用(安全警告)"},"passkeyRegistered":"添加通行密钥","passkeyDeleted":"删除通行密钥","passkeyVerifySuccess":"通行密钥验证通过","passkeyVerifyFail":"通行密钥验证失败","recoveryKeyRotated":"应急恢复密钥已轮换","device":"设备"},"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":"提交修改时将调用通行密钥 (Passkey) 生物识别或硬件密钥核验身份。","submitNotice":"提交时将调用通行密钥 (Passkey) 生物识别或硬件密钥核验身份。","testBtn":"测试通行密钥","testThis":"测试此通行密钥","testSuccess":"通行密钥验证成功:{{name}}","testCancelled":"通行密钥验证已取消","testFailed":"通行密钥验证失败"},"mfaNone":"无","resetUserPassword":"重置密码","resetPasswordTitle":"重置用户密码","resetPasswordWarning":"重置后,该用户的所有现有会话将立即注销,用户需使用新密码重新登录。","resetPasswordSuccess":"密码已成功重置,用户旧登录会话已注销。","confirmReset":"确认重置","mfa":{"title":"多因素认证 (MFA)","enabled":"已配置","notConfigured":"未配置","desc":"通行密钥 (Passkey) 与数字验证器 (TOTP) 均可作为多因素认证方式,配置任选其一即可保障账号安全并支持无密码登录与密码重置。","passwordlessTitle":"无密码登录 (Passwordless Login)","passwordlessDesc":"启用后,登录时无需输入密码,直接通过通行密钥 (Passkey) 或数字验证码 (TOTP) 完成身份核验。","unconfiguredHint":"当前账号尚未配置任何多因素认证。配置通行密钥或数字验证器后,可启用无密码快捷登录并在忘记密码时安全找回账号。","password":"密码","passkey":"通行密钥 (Passkey)","totp":"身份验证器 (TOTP)"},"recoveryKey":{"title":"紧急恢复密钥","desc":"紧急恢复密钥用于在丢失所有通行密钥或数字验证器时重新登录账户或重置密码。为保证零知识安全,恢复密钥采用单向不可逆密码学散列存储,无法在网页端直接解密查看,仅支持轮换。使用后密钥将立即自动轮换。","configured":"已配置","notConfigured":"未配置","oneWayHash":"单向不可逆散列","oneWayTooltip":"采用 SHA-256 单向密码学散列保护,服务端不存储明文且不可解密,仅支持身份轮换验证。","rotateBtn":"轮换恢复密钥","yourKey":"您的 30 位应急恢复密钥","newKeyGenerated":"已生成全新 30 位恢复密钥(请立即保存)","securityTip":"请妥善保管此恢复密钥。拥有此密钥者可以重获您的账户访问权限。","oneWayWarning":"注意:此密钥仅在此显示一次,关闭后将无法再次查看!服务端仅保存不可逆散列,请务必将其妥善复制并离线安全保存。","rotateConfirm":"轮换恢复密钥将立即使原恢复密钥失效,并重新派生信封加密密钥。仅允许通过现有通行密钥 (Passkey) 或原恢复密钥完成轮换验证。是否继续?","confirmRotateBtn":"确认进入轮换验证","rotateVerifyTitle":"验证身份以轮换恢复密钥","rotateSuccess":"恢复密钥已成功轮换!请立即妥善离线保存新密钥,旧密钥已失效。","autoRotatedTitle":"恢复密钥已自动轮换","autoRotatedNotice":"根据恢复密钥单次使用规则,您的原恢复密钥已失效,系统已为您生成全新 30 位紧急恢复密钥。请务必立即复制并妥善离线保存,关闭后将无法再次查看!","savedAndClose":"我已妥善保存并继续","savedAndContinue":"我已妥善保存并进入控制台","descOneWay":"紧急恢复密钥是在您丢失所有通行密钥 (Passkey) 或身份验证器时,恢复账号访问及端到端解密数据的唯一凭据。为确保零知识安全,恢复密钥采用单向不可逆散列存储,无法在网页端查看明文,仅支持通过原恢复密钥或现有 Passkey 进行轮换。密钥一旦被使用将立即自动轮换。","keyRequired":"请输入紧急恢复密钥","verifyBtn":"恢复密钥","verifyPromptLabel":"原恢复密钥 (Original Recovery Key)","rotateSuccessE2eeWarning":"恢复密钥已成功轮换!注意:由于端到端加密此前处于锁定状态且未能解密,旧 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:`无服务器架构确保零维护和私人 DNS 的无限扩展性。`,item8Title:`多配置管理`,item8Desc:`为不同设备或网络环境创建并管理多个独立配置。`,item9Title:`多接入点管理`,item9Desc:`为不同设备配置专属的 DNS 接入点,实现日志和统计数据的精细化隔离与分析。`},f={title:`DNS Worker 部署与配置指南`,subtitle:`您的系统实例尚未完全配置。请按照以下步骤完成部署以启用 DNS Worker。`,dbStatus:`D1 数据库绑定 (env.DB)`,jwtStatus:`JWT 密钥 Secrets (env.JWT_SECRET)`,configured:`已配置`,missing:`缺失 / 未配置`,refresh:`重新检测并刷新`,methodCli:`CLI 命令行部署`,methodDash:`Cloudflare 控制台部署`,copy:`复制`,copied:`已复制!`,stepDbTitle:`1. 创建与绑定 D1 数据库`,stepDbDesc:`在 Cloudflare 中创建 D1 数据库实例,在终端运行以下命令:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`复制终端输出的配置信息,并粘贴到项目根目录的 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>"
|