import { getFuLocaleMessage } from '@/lang/fu'; const message = { apiKeyManagement: { title: 'API Key', manage: 'API Key 관리', personalEntry: '설정에서 내 키, 접근 조건 및 APP QR 연결을 관리합니다.', create: 'API Key 만들기', legacy: '기존 키', identifier: '키 식별자', details: 'API Key 상세 정보', statusEnable: '활성', statusDisable: '비활성', statusRevoked: '폐기됨', statusExpired: '만료됨', specifiedIPs: '지정 IP', anyIP: '모든 IP', ipHelp: '한 줄에 IP 또는 CIDR 하나를 입력하세요. 모든 출처를 허용하려면 모든 IP를 명시적으로 선택하세요.', signatureWindow: '요청 서명 유효 시간', expiresAt: '키 만료 시간', never: '만료 없음', futureExpiry: '현재 이후의 만료 시간을 선택하세요.', allowAppBinding: 'APP QR 연결 허용', bindingDisableHelp: 'QR 연결을 비활성화하면 새로운 기기를 연결할 수 없습니다. 이미 연결된 기기는 키가 비활성화, 폐기 또는 만료될 때까지 계속 사용할 수 있습니다.', saveSecret: '지금 키를 복사하여 저장하세요. 닫으면 일반 키 관리에서 전체 키를 다시 표시할 수 없습니다.', saved: '키를 저장했습니다', alreadyCreated: '이 키는 이미 생성되어 다시 표시할 수 없습니다. 원래 응답을 잃었다면 폐기 후 다시 만들거나 허용된 QR 연결을 사용하세요.', uncertain: '요청 결과를 확인할 수 없습니다. 중복 생성을 피하려면 같은 설정으로 재시도하거나 닫고 목록을 확인하세요.', legacyHelp: '기존 키는 이전에 설정한 API 연결과의 호환성을 유지합니다. 활성화, 비활성화 및 재설정은 이 키에만 적용됩니다.', showLegacy: '기존 키 표시', revoke: '폐기', revokeConfirm: '“{0}” 키를 폐기할까요? 새 요청이 거부되고 해당 터미널이 닫힙니다. 되돌릴 수 없으며 실행 중인 백그라운드 작업은 취소되지 않습니다.', disableConfirm: '“{0}” 키를 비활성화할까요? 새 요청이 거부되고 해당 터미널이 닫힙니다. 실행 중인 백그라운드 작업은 취소되지 않습니다.', enableConfirm: '현재 접근 조건으로 “{0}” 키를 활성화할까요?', bindingKey: '연결 키', selectKey: '내 키 선택', noBindableKey: 'QR 연결 가능한 키가 없습니다. 키를 만들거나 유효한 키의 QR 연결을 허용하세요.', appKeyExpired: '선택한 API Key가 만료되었습니다. 만료일을 연장하거나 다른 키를 선택하세요.', appSecurityHelp: '모바일 앱은 선택한 API Key를 사용하여 해당 키 소유 계정과 동일한 권한으로 패널에 접근합니다. 연결된 기기를 안전하게 관리하세요.', mobileIPHelp: '휴대폰의 외부 IP는 허용 목록과 일치해야 합니다. 네트워크 전환으로 접근이 차단될 수 있으며 허용 목록은 자동으로 확대되지 않습니다.', qrUnavailable: '이 QR 코드를 사용할 수 없습니다. 새로 고침하여 다시 만드세요.', showQR: 'QR 코드 표시', hideQR: 'QR 코드 숨기기', bindingNotAllowed: 'QR 연결 꺼짐', sameKeyDevices: '여러 기기가 같은 키를 공유하면 함께 폐기됩니다. 개별 제어가 필요하면 기기별 키를 만드세요.', closePending: '키 변경을 저장했습니다. 일부 원격 터미널 종료가 대기 중이며 재시도됩니다.', }, commons: { true: '참', false: '거짓', colon: ': ', example: '예: ', fit2cloud: 'FIT2CLOUD', lingxia: 'LXware', button: { run: '실행', add: '추가', select: '선택', save: '저장', set: '설정', sync: '동기화', delete: '삭제', edit: '편집', enable: '활성화', disable: '비활성화', confirm: '확인', check: '검사', submit: '제출', cancel: '취소', reset: '재설정', restart: '재시작', conn: '연결', disConn: '연결 해제', clean: '지우기', cleanAll: '모두 지우기', selectAll: '전체 선택', login: '로그인', close: '닫기', stop: '중지', start: '시작', view: '보기', watch: '실시간 보기', handle: '실행', clone: '복제', expand: '확장', collapse: '축소', log: '로그', back: '뒤로', backup: '백업', recover: '복원', retry: '재시도', upload: '업로드', download: '다운로드', init: '초기화', verify: '검증', saveAndEnable: '저장 및 활성화', import: '가져오기', importAll: '모두 가져오기', export: '내보내기', power: '제출', search: '검색', refresh: '새로고침', get: '가져오기', upgrade: '업그레이드', update: '업데이트', ignore: '업그레이드 무시', install: '설치', copy: '복사', random: '생성', uninstall: '제거', fullscreen: '전체 화면', quitFullscreen: '전체 화면 종료', showAll: '모두 표시', hideSome: '일부 숨기기', agree: '동의', notAgree: '동의하지 않음', preview: '미리 보기', open: '열기', notSave: '저장하지 않음', createNewFolder: '새 폴더 생성', createNewFile: '새 파일 생성', helpDoc: '문서', unbind: '연결 해제', cover: '덮어쓰기', skip: '건너뛰기', fix: '수정', down: '중지', up: '시작', sure: '확인', show: '표시', hide: '숨기기', visit: '열기', migrate: '마이그레이션', prev: '이전', next: '다음', create: '생성', setDefault: '기본값 복원', bind: '연결', tip: '팁', reconnect: '다시 연결', }, operate: { start: '시작', stop: '중지', restart: '재시작', reload: '다시 로드', rebuild: '재구축', sync: '동기화', up: '실행', down: '중지', delete: '삭제', }, search: { timeStart: '시작 시간', timeEnd: '종료 시간', timeRange: '부터', dateStart: '시작 날짜', dateEnd: '종료 날짜', date: '날짜', }, table: { all: '전체', total: '총 {0}', name: '이름', type: '유형', card: '카드', table: '표', status: '상태', statusSuccess: '성공', statusFailed: '실패', statusWaiting: '대기 중...', records: '기록', group: '그룹', createdAt: '생성 시간', publishedAt: '게시 시간', date: '날짜', updatedAt: '업데이트 시간', operate: '작업', message: '메시지', description: '설명', interval: '간격', user: '소유자', title: '제목', port: '포트', forward: '포워드', protocol: '프로토콜', tableSetting: '테이블 설정', refreshRate: '새로 고침 속도', selectColumn: '열 선택', local: '로컬', serialNumber: '일련 번호', manageGroup: '그룹 관리', backToList: '목록으로 돌아가기', keepEdit: '계속 편집', pin: '상단 고정', unpin: '고정 해제', default: '기본값', noRefresh: '자동 새로고침 안 함', creator: '생성자', updater: '수정자', }, loadingText: { Upgrading: '시스템 업그레이드 중입니다. 잠시만 기다려 주십시오...', Restarting: '시스템 재시작 중입니다. 잠시만 기다려 주십시오...', Recovering: '스냅샷에서 복구 중입니다. 잠시만 기다려 주십시오...', Rollbacking: '스냅샷에서 롤백 중입니다. 잠시만 기다려 주십시오...', }, msg: { noneData: '데이터가 없습니다', delete: '이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?', clean: '이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?', closeDrawerHelper: '시스템에서 변경 사항을 저장하지 않을 수 있습니다. 계속하시겠습니까?', deleteSuccess: '삭제 완료', loginSuccess: '로그인 성공', operationSuccess: '작업 완료', operationFailed: '작업에 실패했습니다', copySuccess: '복사 완료', notSupportOperation: '이 작업은 지원되지 않습니다', requestTimeout: '요청이 시간 초과되었습니다. 나중에 다시 시도해 주십시오', infoTitle: '안내', notRecords: '현재 작업에 대한 실행 기록이 생성되지 않았습니다', sureLogOut: '로그아웃하시겠습니까?', createSuccess: '생성 완료', updateSuccess: '업데이트 완료', uploadSuccess: '업로드 성공', operateConfirm: '작업을 확인하려면 수동으로 입력하십시오: ', inputOrSelect: '선택하거나 입력해 주십시오', selectOne: '{0}을(를) 하나 선택해 주십시오', copyFailed: '복사 실패', operatorHelper: '"{0}"에 대해 "{1}" 작업이 수행되며 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?', notFound: '죄송합니다. 요청하신 페이지를 찾을 수 없습니다.', unSupportType: '현재 파일 형식은 지원되지 않습니다.', unSupportSize: '업로드된 파일이 {0}M을 초과했습니다. 확인해 주십시오!', fileExist: '현재 폴더에 이미 동일한 파일이 존재합니다. 중복 업로드는 지원되지 않습니다.', fileNameErr: '파일 이름은 1~256 자 사이의 영어, 중국어, 숫자, 또는 점(.-_)만 포함해야 합니다.', confirmNoNull: '{0} 값이 비어 있지 않은지 확인하십시오.', errPort: '포트 정보가 올바르지 않습니다. 확인해 주십시오!', remove: '제거', backupHelper: '현재 작업은 {0}을(를) 백업합니다. 계속하시겠습니까?', recoverHelper: '{0} 파일에서 복원 중입니다. 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?', refreshSuccess: '새로 고침 완료', rootInfoErr: '이미 루트 디렉토리입니다', resetSuccess: '초기화 완료', creatingInfo: '생성 중입니다. 이 작업이 필요하지 않습니다', offlineTips: '오프라인 버전은 이 작업을 지원하지 않습니다', errImportFormat: '가져오기 데이터 또는 형식이 비정상입니다. 확인 후 다시 시도하세요!', importHelper: '충돌하거나 중복되는 데이터를 가져올 때 가져온 내용을 기준으로 원래 데이터베이스 데이터를 업데이트합니다.', errImport: '파일 내용이 비정상입니다:', backupSuccess: '백업 성공', restoreSuccess: '복원 성공', installSuccess: '설치 성공', uninstallSuccess: '제거 성공', }, login: { username: '사용자 이름', password: '비밀번호', passkey: '패스키 로그인', otherLoginMethods: '다른 로그인 방법', welcome: '다시 오신 것을 환영합니다. 사용자 이름과 비밀번호를 입력하여 로그인하세요!', errorAuthInfo: '입력한 사용자 이름 또는 비밀번호가 잘못되었습니다. 다시 입력해주세요!', errorMfaInfo: '인증 정보가 잘못되었습니다. 다시 시도해주세요!', captchaHelper: '캡챠', errorCaptcha: '캡챠 코드 오류!', codeInput: 'MFA 인증기의 6자리 인증 코드를 입력하세요', mfaTitle: 'MFA 인증', mfaCode: 'MFA 인증 코드', title: 'Linux 서버 관리 패널', licenseHelper: '<커뮤니티 라이선스 계약>', errorAgree: '커뮤니티 소프트웨어 라이선스에 동의하려면 클릭하세요', logout: '로그아웃', agreeTitle: '동의', agreeContent: '귀하의 합법적인 권리와 이익을 보다 잘 보호하기 위해, 다음 « 커뮤니티 라이선스 계약 »을 읽고 동의해주세요.', passkeyFailed: '패스키 로그인에 실패했습니다. 다시 시도하세요', passkeyNotSupported: '현재 브라우저 또는 환경에서 패스키를 지원하지 않습니다', passkeyToPassword: '패스키 사용에 문제가 있나요? 비밀번호로 로그인하세요', }, rule: { username: '사용자 이름을 입력하세요', password: '비밀번호를 입력하세요', rePassword: '확인 비밀번호가 비밀번호와 일치하지 않습니다.', requiredInput: '이 필드는 필수 항목입니다.', requiredSelect: '목록에서 항목을 선택하세요', illegalChar: '현재 & ; $ \' ` ( ) " > < | 문자 주입은 지원되지 않습니다', illegalInput: '이 필드에는 유효하지 않은 문자가 포함될 수 없습니다.', duplicate: '이 값은 고유해야 합니다.', commonName: '이 필드는 특수 문자로 시작할 수 없으며, 영어, 한자, 숫자, ".", "-", "_" 문자로 구성되어야 하며 길이는 1-128자여야 합니다.', userName: '특수 문자로 시작하지 않고, 영어, 한국어, 숫자 및 _, 길이 3-30 지원', simpleName: '이 필드는 "_"로 시작할 수 없으며, 영어, 숫자 및 "_" 문자로 구성되어야 하며 길이는 3-30 자여야 합니다.', simplePassword: '이 필드는 "_"로 시작할 수 없으며, 영어, 숫자 및 "_" 문자로 구성되어야 하며 길이는 1-30 자여야 합니다.', dbName: '이 필드는 "_"로 시작할 수 없으며, 영어, 숫자 및 "_" 문자로 구성되어야 하며 길이는 1-64 자여야 합니다.', imageName: '특수 문자로 시작하지 않고, 영어, 숫자, :@/.-_ 지원, 길이 1-256', composeName: '특수 문자로 시작할 수 없으며, 소문자, 숫자, "-", "_"를 지원하며 길이는 1-256 자여야 합니다.', volumeName: '이 필드는 영어, 숫자, ".", "-", "_" 문자로 구성되어야 하며 길이는 2-30 자여야 합니다.', supervisorName: '이 필드는 특수 문자로 시작할 수 없으며, 영어, 숫자, "-", "_" 문자로 구성되어야 하며 길이는 1-128 자여야 합니다.', complexityPassword: '길이 8-30 자이며 영문, 숫자, 특수 문자 중 최소 두 가지를 포함하는 비밀번호 조합을 지원합니다.', commonPassword: '이 필드 길이는 6 자 이상이어야 합니다.', linuxName: '이 필드 길이는 1-128 자 사이여야 하며, 다음 특수 문자를 포함할 수 없습니다: "{0}".', email: '이 필드는 유효한 이메일 주소여야 합니다.', number: '이 필드는 숫자여야 합니다.', integer: '이 필드는 양의 정수여야 합니다.', ip: '이 필드는 유효한 IP 주소여야 합니다.', host: '이 필드는 유효한 IP 주소 또는 도메인 이름이어야 합니다.', hostHelper: 'IP 주소 또는 도메인 이름 입력을 지원합니다', port: '이 필드는 유효한 포트 번호여야 합니다.', selectHelper: '올바른 {0} 파일을 선택하세요', domain: '이 필드는 다음 형식이어야 합니다: example.com 또는 example.com:8080.', databaseName: '이 필드는 영어, 숫자 및 "_" 문자로 구성되어야 하며 길이는 1-30 자여야 합니다.', ipErr: '이 필드는 유효한 IP 주소여야 합니다.', numberRange: '이 필드는 {0}에서 {1} 사이의 숫자여야 합니다.', paramName: '이 필드는 영어, 숫자, ".", "-", "_" 문자로 구성되어야 하며 길이는 2-30 자여야 합니다.', paramComplexity: '이 필드는 특수 문자로 시작하거나 끝날 수 없으며, 영어, 숫자, "{0}" 문자로 구성되어야 하며 길이는 6-128 자여야 합니다.', paramUrlAndPort: '이 필드는 "http(s)://(도메인 이름/IP):(포트)" 형식이어야 합니다.', nginxDoc: '이 필드는 영어, 숫자, ".", "_", "-" 문자로 구성되어야 합니다.', appName: '소문자, 숫자, "-", "_"를 지원하며 길이는 2-30 자이고, "-" 또는 "_"로 시작하거나 끝날 수 없습니다.', containerName: '영어, 숫자, "-", "_", "."를 지원하며, "-", "_", "."로 시작할 수 없고 길이는 2-128 자여야 합니다.', mirror: '미러 가속 주소는 http(s)://로 시작해야 하며, 대소문자 영어, 숫자, ".", "/", "-"를 지원하고 공백을 포함할 수 없습니다.', disableFunction: '영어 문자, 밑줄 및 ,만 지원합니다', leechExts: '영어 문자, 숫자 및 ,만 지원합니다', paramSimple: '소문자와 숫자를 지원하며 길이는 1-128 자여야 합니다', filePermission: '파일 권한 오류', formatErr: '형식 오류입니다. 확인 후 다시 시도하세요', phpExtension: '소문자 영어와 숫자, "_"만 지원합니다', paramHttp: 'http:// 또는 https:// 로 시작해야 합니다', phone: '전화번호 형식이 올바르지 않습니다', authBasicPassword: '알파벳, 숫자 및 일반 특수 문자 지원, 길이 1-72', length128Err: '길이는 128자를 초과할 수 없습니다', maxLength: '길이는 {0}자를 초과할 수 없습니다', vmName: '영문, 숫자, ".", "-", "_"를 지원하며 길이는 1-64자이고 영문 또는 숫자로 시작해야 합니다.', vmNetwork: '영문, 숫자, ".", ":", "-", "_"를 지원하며 길이는 1-64자이고 영문 또는 숫자로 시작해야 합니다.', alias: '영어, 숫자, - 및 _ 지원, 길이 1-128, -_로 시작하거나 끝날 수 없습니다.', }, res: { paramError: '요청이 실패했습니다. 나중에 다시 시도하세요!', forbidden: '현재 사용자는 권한이 없습니다', serverError: '서비스 예외', notFound: '리소스가 존재하지 않습니다', commonError: '요청이 실패했습니다', }, service: { serviceNotStarted: '{0} 서비스가 시작되지 않았습니다.', }, status: { running: '실행 중', done: '완료', scanFailed: '불완전', success: '성공', waiting: '대기 중', waitForUpgrade: '업그레이드 대기 중', failed: '실패', stopped: '중지됨', error: '오류', created: '생성됨', restarting: '재시작 중', uploading: '업로드 중', unhealthy: '비정상', removing: '제거 중', paused: '일시 중지', blocked: '차단됨', shutdown: '종료 중', crashed: '충돌 발생', pmsuspended: '절전 모드', exited: '종료됨', partial: '부분 실행', dead: '중단됨', installing: '설치 중', enabled: '활성화됨', disabled: '비활성화됨', normal: '정상', building: '빌드 중', upgrading: '업그레이드 중', pending: '편집 대기', rebuilding: '재빌드 중', deny: '거부됨', accept: '수락됨', used: '사용 중', starting: '시작 중', recreating: '재생성 중', creating: '생성 중', init: '애플리케이션 대기 중', ready: '정상', applying: '적용 중', uninstalling: '제거 중', lost: '연결 끊김', bound: '바인딩됨', unbind: '미바인드', exceptional: '예외', free: '여유', enable: '활성화됨', disable: '비활성화됨', deleted: '삭제됨', notfound: '찾을 수 없음', inactive: '시작되지 않음', degraded: '저하됨', inaccessible: '접근 불가', unknown: '알 수 없음', downloading: '다운로드 중', packing: '패키징 중', sending: '전송 중', healthy: '정상', executing: '실행 중', installerr: '설치 실패', applyerror: '적용 실패', systemrestart: '중단됨', starterr: '시작 실패', uperr: '실행 실패', new: '신규', conflict: '충돌', duplicate: '중복', unexecuted: '실행되지 않음', canceled: '취소됨', unused: '미사용', }, units: { second: '초 | 초 | 초', minute: '분 | 분 | 분', hour: '시간 | 시간 | 시간', day: '일 | 일 | 일', week: '주 | 주 | 주', month: '월 | 월 | 월', year: '년 | 년 | 년', time: '시간', core: '코어 | 코어 | 코어', secondUnit: '초', minuteUnit: '분', hourUnit: '시간', dayUnit: '일', millisecond: '밀리초', semicolon: ';', }, log: { noLog: '로그 없음', }, }, menu: { home: '대시보드', apps: '앱 스토어', website: '웹사이트 | 웹사이트들', project: '프로젝트 | 프로젝트들', config: '구성 | 구성들', ssh: 'SSH 설정', firewall: '방화벽', ssl: '인증서 | 인증서들', database: '데이터베이스 | 데이터베이스들', aiTools: 'AI', mcp: 'MCP', container: '컨테이너 | 컨테이너들', cronjob: '크론 작업 | 크론 작업들', system: '시스템', security: '보안', files: '파일', monitor: '모니터링', terminal: '터미널', settings: '설정', toolbox: '툴박스', logs: '로그 | 로그들', runtime: '런타임 | 런타임들', processManage: '프로세스 | 프로세스들', process: '프로세스 | 프로세스들', network: '네트워크 | 네트워크들', supervisor: '슈퍼바이저', tamper: '변조 방지', app: '애플리케이션', msgCenter: '작업', disk: '디스크', template: '템플릿', filter: '필터', }, home: { recommend: '추천', dir: '디렉토리', alias: '별칭', quickDir: '빠른 액세스', minQuickJump: '최소 하나의 빠른 액세스 항목을 추가하세요', maxQuickJump: '빠른 액세스를 최대 4개까지 추가할 수 있습니다', database: '데이터베이스 - 전체', restart_1panel: '패널 재시작', restart_system: '서버 재시작', operationSuccess: '완료되었습니다. 재시작 중입니다. 나중에 브라우저를 새로 고침하세요.', entranceHelper: '보안 진입이 활성화되어 있지 않습니다. "설정 -> 보안"에서 활성화하여 보안을 강화하세요.', appInstalled: '설치된 애플리케이션', systemInfo: '시스템 정보', hostname: '호스트 이름', platformVersion: '운영 체제', kernelVersion: '커널', kernelArch: '아키텍처', network: '네트워크', io: '디스크 I/O', ip: '로컬 IP', proxy: '시스템 프록시', baseInfo: '기본 정보', totalSend: '총 송신', totalRecv: '총 수신', rwPerSecond: 'I/O 작업', ioDelay: 'I/O 지연 시간', uptime: '작동 시간', runningTime: '가동 시간', mem: '시스템 메모리', swapMem: '스왑 파티션', runSmoothly: '낮은 부하', runNormal: '보통 부하', runSlowly: '높은 부하', runJam: '심한 부하', core: '물리적 코어', logicCore: '논리 코어', corePercent: '코어 사용률', cpuFrequency: 'CPU 주파수', cpuDetailedPercent: 'CPU 사용률 상세', cpuUser: '사용자', cpuSystem: '시스템', cpuIdle: '유휴', cpuIrq: 'IRQ', cpuSoftirq: 'Soft IRQ', cpuSteal: 'Steal', cpuTop: 'CPU 사용률 상위 5개 프로세스 정보', memTop: '메모리 사용률 상위 5개 프로세스 정보', loadAverage: '지난 1분의 평균 부하 | 지난 {0}분의 평균 부하', load: '부하', mount: '마운트 지점', fileSystem: '파일 시스템', total: '전체', used: '사용', cache: '�시', free: '여유', shard: '샤딩', available: '사용 가능', percent: '사용률', goInstall: 'Go 설치', networkCard: '네트워크 카드', disk: '디스크', memo: '메모', memoPlaceholder: '편집 버튼을 클릭하여 편집을 활성화하세요.', carouselSetting: '캐러셀 설정', tooltipSensitiveInfo: '민감한 정보 표시/숨기기', }, tabs: { more: '더 보기', hide: '숨기기', closeLeft: '왼쪽 닫기', closeRight: '오른쪽 닫기', closeCurrent: '현재 탭 닫기', closeOther: '다른 탭 닫기', closeAll: '모두 닫기', keepAlive: '페이지 세션 유지', cancelKeepAlive: '페이지 세션 유지 해제', }, header: { userCenter: '사용자 센터', exitSystem: '로그아웃', logout: '로그아웃', }, database: { manage: '관리', deleteBackupHelper: '데이터베이스 백업을 동시에 삭제', delete: '삭제 작업은 되돌릴 수 없습니다. 삭제하려면 "', deleteHelper: '"를 입력하세요.', deleteUserHelper: '"를 입력하여 이 사용자를 삭제하세요.', userBoundDatabases: '다음 데이터베이스에 대한 접근 권한이 있습니다:', noMysql: '데이터베이스 서비스 (MySQL 또는 MariaDB)', noPostgresql: '데이터베이스 서비스 PostgreSQL', goUpgrade: '업그레이드로 이동', goInstall: '설치로 이동', isDelete: '삭제됨', permission: '권한', format: '문자 집합', collation: '콜레이션', collationHelper: '비어 있으면 {0} 문자 집합의 기본 콜레이션을 사용합니다', permissionForIP: 'IP', permissionAll: '모두(%)', localhostHelper: '컨테이너 배포 시 데이터베이스 권한을 "localhost"로 설정하면 컨테이너 외부에서 접근할 수 없게 됩니다. 신중하게 선택하세요!', databaseConnInfo: '연결', rootPassword: '루트 비밀번호', serviceName: '서비스 이름', serviceNameHelper: '같은 네트워크 내 컨테이너 간의 접근.', backupList: '백업', loadBackup: '불러오기', localUpload: '로컬 업로드', hostSelect: '서버 선택', selectHelper: '백업 파일 {0}을(를) 가져오시겠습니까?', remoteAccess: '원격 접근', remoteHelper: '여러 IP 를 쉼표로 구분하여 입력, 예: 172.16.10.111,172.16.10.112', remoteConnHelper: 'MySQL 의 root 사용자로 원격 접속은 보안 위험을 초래할 수 있습니다. 따라서 이 작업은 신중히 수행해야 합니다.', changePassword: '비밀번호', changeConnHelper: '이 작업은 현재 데이터베이스 {0}을(를) 수정합니다. 계속하시겠습니까?', changePasswordHelper: '데이터베이스가 애플리케이션과 연결되어 있습니다. 비밀번호를 변경하면 애플리케이션의 데이터베이스 비밀번호도 변경됩니다. 변경 사항은 애플리케이션이 재시작된 후에 적용됩니다.', recoverTimeoutHelper: '-1은 제한 시간 제한 없음을 의미합니다', confChange: '설정', confNotFound: '설정 파일을 찾을 수 없습니다. 앱 스토어에서 애플리케이션을 최신 버전으로 업그레이드하고 다시 시도해주세요!', portHelper: '이 포트는 컨테이너의 노출된 포트입니다. 수정을 별도로 저장하고 컨테이너를 재시작해야 합니다!', loadFromRemote: '동기화', userBind: '사용자 바인딩', noUserBind: '바인딩 없음', userAuthorization: '사용자 권한', noUserAuthorization: '권한 부여 안 함', authorizedDatabaseCount: '데이터베이스 {0}개 권한 보유', authorizationManagement: '권한 관리', authorizedUsers: '권한이 부여된 사용자', authorizedUserCount: '사용자 {0}명', addUserAuthorization: '사용자 권한 추가', revokeAuthorization: '권한 취소', revokeAuthorizationHelper: '사용자 {0}의 데이터베이스 {1} 접근 권한을 취소하시겠습니까?', supplementPassword: '비밀번호 추가', supplementPasswordHelper: '기존 비밀번호를 1Panel에만 저장하며 MySQL 비밀번호는 변경하지 않습니다.', pgBindHelper: '이 작업은 새 사용자를 생성하여 대상 데이터베이스에 바인딩하는 데 사용됩니다. 현재 데이터베이스에 이미 존재하는 사용자 선택은 지원되지 않습니다.', pgSuperUser: '슈퍼 사용자', loadFromRemoteHelper: '서버의 데이터베이스, 사용자 및 권한 정보를 1Panel로 동기화합니다. 계속하시겠습니까?', passwordHelper: '확인 불가, 수정하려면 클릭', remote: '원격', remoteDB: '원격 서버 | 원격 서버들', createRemoteDB: '원격 DB 바인딩', unBindRemoteDB: '원격 DB 바인딩 해제', unBindForce: '강제 바인딩 해제', unBindForceHelper: '바인딩 해제 중 발생하는 모든 오류를 무시하고 최종 작업을 성공적으로 완료합니다.', unBindRemoteHelper: '원격 데이터베이스 바인딩 해제는 바인딩 관계만 제거하며, 원격 데이터베이스 자체는 삭제되지 않습니다.', editRemoteDB: '원격 서버 편집', localDB: '로컬 데이터베이스', address: '데이터베이스 주소', version: '데이터베이스 버전', userHelper: '루트 사용자 또는 루트 권한을 가진 데이터베이스 사용자가 원격 데이터베이스에 접근할 수 있습니다.', mongodbPermissionDbOwner: '데이터베이스 소유자', mongodbPermissionRead: '데이터 읽기', mongodbPermissionReadWrite: '데이터 읽기 및 쓰기', mongodbPermissionUserAdmin: '사용자 관리자', pgUserHelper: '슈퍼 사용자 권한을 가진 데이터베이스 사용자.', ssl: 'SSL 사용', clientKey: '클라이언트 개인 키', clientCert: '클라이언트 인증서', caCert: 'CA 인증서', hasCA: 'CA 인증서 있음', skipVerify: '인증서 유효성 검사 무시', initialDB: '초기 데이터베이스', formatHelper: '현재 데이터베이스 문자셋은 {0} 입니다. 문자셋 불일치로 인해 복구에 실패할 수 있습니다.', dropHelper: '여기에 업로드한 파일을 드래그 앤 드롭하거나', clickHelper: '클릭하여 업로드', supportUpType: 'sql, sql.gz, tar.gz, .zip 파일 형식만 지원합니다. 가져오는 압축 파일에는 하나의 .sql 파일만 있거나 test.sql이 포함되어 있어야 합니다', currentStatus: '현재 상태', baseParam: '기본 파라미터', performanceParam: '성능 파라미터', runTime: '시작 시간', connections: '전체 연결', bytesSent: '전송된 바이트', bytesReceived: '수신된 바이트', queryPerSecond: '초당 쿼리', txPerSecond: '초당 전송', connInfo: '활성/최대 연결', connInfoHelper: '값이 너무 크면 "max_connections" 값을 증가시켜야 합니다.', threadCacheHit: '스레드 캐시 적중', threadCacheHitHelper: '값이 너무 낮으면 "thread_cache_size" 값을 증가시켜야 합니다.', indexHit: '인덱스 적중', indexHitHelper: '값이 너무 낮으면 "key_buffer_size" 값을 증가시켜야 합니다.', innodbIndexHit: 'Innodb 인덱스 적중률', innodbIndexHitHelper: '값이 너무 낮으면 "innodb_buffer_pool_size" 값을 증가시켜야 합니다.', cacheHit: '쿼리 캐시 적중', cacheHitHelper: '값이 너무 낮으면 "query_cache_size" 값을 증가시켜야 합니다.', tmpTableToDB: '디스크로 임시 테이블', tmpTableToDBHelper: '값이 너무 크면 "tmp_table_size" 값을 증가시켜야 합니다.', openTables: '열린 테이블', openTablesHelper: '"table_open_cache" 설정 값이 이 값 이상이어야 합니다.', selectFullJoin: '전체 조인 선택', selectFullJoinHelper: '값이 0이 아니면 데이터 테이블의 인덱스가 올바른지 확인하십시오.', selectRangeCheck: '인덱스 없는 조인 수', selectRangeCheckHelper: '값이 0이 아니면 데이터 테이블의 인덱스가 올바른지 확인하십시오.', sortMergePasses: '정렬된 병합 횟수', sortMergePassesHelper: '값이 너무 크면 "sort_buffer_size" 값을 증가시켜야 합니다.', tableLocksWaited: '테이블 잠금 대기', tableLocksWaitedHelper: '값이 너무 크면 데이터베이스 성능을 증가시키는 것을 고려해야 합니다.', performanceTuning: '성능 튜닝', optimizationScheme: '최적화 방안', keyBufferSizeHelper: '인덱스용 버퍼 크기', queryCacheSizeHelper: '쿼리 캐시. 이 기능이 비활성화된 경우 이 값을 0으로 설정하세요.', tmpTableSizeHelper: '임시 테이블 캐시 크기', innodbBufferPoolSizeHelper: 'Innodb 버퍼 크기', innodbLogBufferSizeHelper: 'Innodb 로그 버퍼 크기', sortBufferSizeHelper: '* 연결당, 스레드 정렬 버퍼 크기', readBufferSizeHelper: '* 연결당, 읽기 버퍼 크기', readRndBufferSizeHelper: '* 연결당, 임의 읽기 버퍼 크기', joinBufferSizeHelper: '* 연결당, 조인 테이블 캐시 크기', threadStackelper: '* 연결당, 스레드별 스택 크기', binlogCacheSizeHelper: '* 연결당, 이진 로그 캐시 크기 (4096의 배수)', threadCacheSizeHelper: '스레드 풀 크기', tableOpenCacheHelper: '테이블 캐시', maxConnectionsHelper: '최대 연결 수', restart: '재시작', slowLog: '느린 로그', noData: '아직 느린 로그가 없습니다.', isOn: '켜짐', longQueryTime: '임계값(s)', thresholdRangeHelper: '올바른 임계값을 입력하십시오 (1 - 600).', timeout: '타임아웃(s)', timeoutHelper: '유휴 연결의 타임아웃 기간. 0은 연결이 지속적으로 유지됨을 의미합니다.', maxclients: '최대 클라이언트', requirepassHelper: '비밀번호가 설정되지 않은 경우 이 필드를 비워 두세요. 변경 사항은 별도로 저장하고 컨테이너를 재시작해야 합니다!', databases: '데이터베이스 수', maxmemory: '최대 메모리 사용량', maxmemoryHelper: '0은 제한이 없음을 의미합니다.', tcpPort: '현재 수신 포트.', uptimeInDays: '운영 일수.', connectedClients: '연결된 클라이언트 수.', usedMemory: '현재 Redis 의 메모리 사용량.', usedMemoryRss: '운영 체제에서 요청한 메모리 크기.', usedMemoryPeak: 'Redis 의 최대 메모리 소비량.', memFragmentationRatio: '메모리 단편화 비율.', totalConnectionsReceived: '시작 이후 총 연결된 클라이언트 수.', totalCommandsProcessed: '실행된 총 명령 수.', instantaneousOpsPerSec: '초당 서버에서 실행된 명령 수.', keyspaceHits: '데이터베이스 키가 성공적으로 발견된 횟수.', keyspaceMisses: '데이터베이스 키를 찾지 못한 횟수.', hit: '데이터베이스 키 발견 비율.', latestForkUsec: '마지막 fork() 작업에 소요된 마이크로초 수.', redisCliHelper: '"redis-cli" 서비스가 감지되지 않았습니다. 서비스를 먼저 활성화하십시오.', redisQuickCmd: 'Redis 빠른 명령', recoverHelper: '이 작업은 데이터를 [{0}]으로 덮어씁니다. 계속하시겠습니까?', mongodbRecoverDropAllCollections: '복원 전에 현재 데이터베이스 비우기', mongodbRecoverDropAllCollectionsHelper: '기본적으로는 기존 컬렉션만 덮어쓰고 새로 추가된 컬렉션은 유지합니다. 활성화하면 현재 데이터베이스를 비운 뒤 백업 내용으로 복원합니다.', submitIt: '데이터 덮어쓰기', baseConf: '기본 설정', allConf: '모든 설정', restartNow: '지금 재시작', restartNowHelper1: '구성 변경 사항이 적용되려면 시스템을 재시작해야 합니다. 데이터가 지속되어야 하는 경우 먼저 저장 작업을 수행하십시오.', restartNowHelper: '이 작업은 시스템이 재시작된 후에만 적용됩니다.', persistence: '지속성', rdbHelper1: '초 단위, 삽입', rdbHelper2: '데이터 항목 수', rdbHelper3: '조건을 충족하면 RDB 지속성이 트리거됩니다.', rdbInfo: '규칙 목록의 값이 1에서 100000 사이여야 합니다.', containerConn: '컨테이너 연결', copyConnURL: '연결 URL 복사', connAddress: '주소', containerConnHelper: '이 연결 주소는 웹사이트 런타임(PHP 등) 또는 컨테이너에서 실행 중인 애플리케이션에서 사용할 수 있습니다.', remoteConn: '외부 연결', remoteConnHelper2: '컨테이너 환경이 아닌 경우 또는 외부 연결에는 이 주소를 사용하십시오.', remoteConnHelper3: '기본 접근 주소는 호스트 IP입니다. 수정하려면 패널 설정 페이지의 "기본 접근 주소" 구성 항목으로 이동하세요.', localIP: '로컬 IP', }, aiTools: { agents: { agent: '에이전트', account: '모델 계정', batchOperation: '일괄 작업', operationType: '작업 유형', batchAction: '일괄 {0}', installSkillAction: 'Skill 배포', batchAgentTask: '에이전트 일괄 {0}', dispatchAgentTask: '에이전트 {0} 작업 배포', dispatchTask: '{0} 작업 배포', taskSubmitted: '{0} 작업이 전송되었습니다', allNodes: '모든 노드', targetVersion: '대상 버전', skillSource: 'Skill 소스', skillKeyword: 'Skill 키워드', clawHubSkillPlaceholder: '먼저 Skill을 검색하고 선택하세요', noAccountHint: '기존 모델 계정을 선택하거나 새로 추가하세요.', accountCount: '모델 계정 {0}개', syncAgents: '관련 에이전트 동기화', syncAgentsHelper: '이 모델 계정을 사용하는 에이전트의 openclaw.json 업데이트', appVersion: '앱 버전', webuiPort: 'WebUI 포트', tokenOrAuth: 'Token/인증', allowedOrigins: '접속 주소', allowedOriginsRequired: '접속 주소를 하나 이상 입력하세요', allowedOriginsInvalid: 'http(s)://host-or-ip[:port] 형식으로 입력하세요', provider: '모델 제공자', accountModelsHelper: '이 계정이 OpenClaw에 제공할 모델을 설정합니다. 모델 전환 및 설정에 사용됩니다.', accountModelsRequired: '모델을 하나 이상 설정하세요.', verifyModel: '검증 모델', verifyModelHelper: '이 계정으로 사용할 수 있는 모델을 선택하세요. 저장할 때 최소 요청을 보내 연결을 검증합니다.', verifyModelRequired: '검증 모델을 선택하세요', discoverModels: '모델 가져오기', automaticModelDiscovery: '자동 가져오기', manualModelConfiguration: '수동 설정', discoverModelsHelper: '공급자의 /v1/models API에서 모델을 가져와 모두 모델 풀에 추가합니다.', discoverModelsFailedFallback: '모델을 가져오지 못했습니다. 모델을 직접 설정하세요.', discoverModelsFailedUseDefaults: '모델을 가져오지 못했습니다. 기본 모델을 사용합니다.', accountModelsDuplicate: '카탈로그에 중복된 모델이 있습니다', modelPool: '모델 풀', fallbackModels: '폴백 모델', addFallbackModel: '폴백 모델 추가', fallbackModelsEmpty: '구성된 폴백 모델이 없습니다', modelInputTypes: '입력 유형', modelMetadata: '모델 기능 설정', modelMetadataHelper: '이 설정은 현재 OpenClaw에만 적용됩니다. 비워 두면 OpenClaw 또는 공급자의 기본값을 사용합니다.', inputModeAuto: '자동 감지', inputModeText: '텍스트만', inputModeImage: '텍스트 및 이미지', contextWindow: '컨텍스트 창', useModelDefault: '모델 기본값 사용', reasoning: '추론 모델', verified: '검증됨', verifySkipped: '검증 안 함', skillsTab: '기술', pluginsTab: '플러그인', pluginsInstalled: '설치됨', pluginsMarket: '플러그인 마켓', pluginsMarketHint: '키워드를 입력하여 플러그인을 검색하세요', pluginSearchPlaceholder: '플러그인 검색...', pluginOrigin: '출처', pluginOriginAll: '모든 출처', pluginOriginBundled: '내장', pluginOriginExternal: '외부', pluginStatusAll: '모든 상태', pluginEnabled: '활성화됨', pluginDisabled: '비활성화됨', pluginCategory: '분류', pluginVerification: '검증', pluginOfficial: '공식', pluginCommunity: '커뮤니티', pluginDownloads: '다운로드', pluginEnable: '활성화', pluginDisable: '비활성화', pluginListEmpty: '플러그인이 없습니다', pluginSearchEmpty: '일치하는 플러그인을 찾을 수 없습니다', pluginInstallConfirm: '플러그인 {0}을(를) 설치하시겠습니까?', pluginDisableConfirm: '플러그인 {0}을(를) 비활성화하시겠습니까?', pluginUninstallConfirm: '플러그인 {0}을(를) 제거하시겠습니까?', securityTab: '보안', otherTab: '기타', timeZone: '시간대', browserEnabled: '브라우저 활성화', npmRegistry: 'NPM 레지스트리', npmRegistryHelper: 'OpenClaw 플러그인 설치에 사용됩니다. 사전 설정된 레지스트리를 선택하거나 사용자 지정 레지스트리를 입력할 수 있습니다.', npmRegistryInvalid: 'http:// 또는 https:// 로 시작하는 올바른 NPM 레지스트리 URL을 입력하세요', pluginInstallNPMRegistryHelper: '설정 -> 기타에서 NPM 레지스트리를 설정하면 플러그인 설치 속도를 높일 수 있습니다', skillsSearchPlaceholder: '기술 검색...', skillsEmpty: '기술 없음', skillsMarket: '기술 마켓', skillsMarketHint: '소스를 선택하고 기술을 검색하세요', skillsMarketEmpty: '관련 기술을 찾을 수 없습니다', skillsMarketSourceClawhubGlobal: 'ClawHub (글로벌)', skillsMarketSourceClawhubChina: 'ClawHub (중국)', skillsMarketSourceSkillhub: 'SkillHub (Tencent)', skillsMarketSourceLocalHub: '로컬 Skill 스토어', skillsScore: '점수', skillsMarketSourceOfficial: '공식', versionUnsupportedTitle: '현재 버전에서는 이 기능을 지원하지 않습니다', versionUnsupportedHelper: 'OpenClaw 를 버전 {0} 이상으로 업그레이드하세요.', skillsGroupBuiltIn: '내장', skillsGroupExternal: '외부', skillsGroupWorkspace: '워크스페이스', switchModelSuccess: '모델이 성공적으로 전환되었습니다', channelsTab: '채널', agentRoleTab: '에이전트', agentRoleUnsupported: '역할 관리는 현재 OpenClaw 에서만 지원됩니다.', workspace: '워크스페이스 디렉터리', agentDir: '에이전트 디렉터리', roleMarkdownDescriptions: { 'AGENTS.md': [ '에이전트의 운영 지침과 메모리를 어떻게 사용할지에 대한 설명입니다.', '규칙, 우선순위, 동작 방식의 세부 내용을 적기에 좋습니다.', ], 'SOUL.md': ['페르소나, 말투, 경계.'], 'USER.md': ['사용자가 누구인지, 어떻게 호칭할지.'], 'IDENTITY.md': ['에이전트의 이름, 분위기, 이모지.'], 'TOOLS.md': ['로컬 도구와 사용 규약에 대한 메모입니다.'], 'HEARTBEAT.md': ['heartbeat 실행용 선택 체크리스트입니다.', '토큰 낭비를 막기 위해 짧게 유지하세요.'], 'BOOT.md': [ '내부 훅이 켜져 있을 때 gateway 재시작 시 실행되는 선택 시작 체크리스트입니다.', '짧게 유지하고, 외부 발신은 message 도구를 사용하세요.', ], 'BOOTSTRAP.md': [ '최초 실행 시 한 번만 수행되는 절차입니다.', '완전히 새로운 작업공간에서만 생성됩니다.', ], }, duplicateBinding: '채널과 계정 ID 조합은 중복될 수 없습니다', accountIdOptional: '계정 ID (선택 사항)', saveAllMd: '모두 저장', roleMarkdownRestartHelper: '현재 markdown 파일을 모두 저장하려면 적용을 위해 컨테이너를 재시작해야 합니다. 지금 재시작할지 나중에 재시작할지 선택하세요.', configFileRestartHelper: '설정 파일을 저장하려면 즉시 컨테이너를 재시작해야 적용됩니다.', overviewSnapshot: '개요', primaryModel: '주 모델', defaultModel: '기본 모델', channelCount: '설정된 채널 수', skillCount: '기술 수', jobCount: '예약 작업 수', sessionCount: '세션 수', hermesChatAction: '대화', hermesChatTitle: 'Hermes 대화', hermesChatDialogTitle: 'Hermes 대화 - {0}', hermesChatNewChat: '새 대화', hermesChatNoSessions: '세션이 없습니다', hermesChatMessageCount: '{0}개', hermesChatEmptyHint: '왼쪽 세션을 선택하거나 새 대화를 클릭하세요', hermesChatTitlePlaceholder: '세션 제목을 입력하세요', hermesChatRenameSuccess: '세션 제목이 업데이트되었습니다', hermesChatDeleteConfirm: '세션 {0}을(를) 삭제하시겠습니까?', hermesChatDeleteSuccess: '세션이 삭제되었습니다', weixin: 'Weixin', wecom: 'WeCom', dingtalk: 'DingTalk', feishu: 'Feishu', pluginNotInstalled: '플러그인이 설치되지 않았습니다. 먼저 설치해 주세요.', dmPolicy: 'DM 정책', threadSession: '스레드 세션', replyMode: '응답 모드', requireMention: '멘션 요구', requireMentionTrue: "{'@'} 필요", requireMentionFalse: "{'@'} 불필요", requireMentionOpen: '그룹 설정 따름', groupPolicy: '그룹 정책', policyAllowlist: '허용 목록', policyOpen: '열림', policyDisabled: '비활성화', bots: '봇', addBot: '봇 추가', accountId: '계정 ID', accountIdPlaceholder: '봇을 구분하는 고유 ID이며 저장 후 설정과 라우팅 식별에 사용됩니다.', setDefaultBot: '기본값으로 설정', botDuplicateField: '{field}이(가) 이미 존재합니다', botRequired: '봇을 하나 이상 추가하세요', botId: '봇 ID', allowFrom: 'DM 허용 목록', allowFromPlaceholder: '한 줄에 하나의 발신자 ID', allowlistPolicyHelper: '{0}. {1}이(가) 허용 목록일 때만 사용됩니다.', systemPrompt: '시스템 프롬프트', groupAllowFrom: '그룹 허용 목록', groupAllowFromPlaceholder: '한 줄에 하나의 그룹 ID', separateSessionByConversation: '대화별 세션 분리', groupSessionScope: '그룹 세션 범위', groupSessionScopeGroup: '그룹 공유', groupSessionScopeGroupSender: '발신자별', sharedMemoryAcrossConversations: '대화 간 메모리 공유', asyncMode: '비동기 모드', ackText: '확인 메시지', ackTextDefault: '작업을 받았습니다. 처리 중입니다...', streaming: '스트리밍', streamingOff: '끄기', streamingPartial: '부분 출력', streamingBlock: '블로킹 출력', streamingProgress: '진행 출력', allowFromRequired: '허용 목록 항목을 하나 이상 입력하세요', pairingCode: '페어링 코드', pairingCodePlaceholder: '페어링 코드를 입력하세요', approvePairing: '페어링 승인', saveSuccess: '저장되었습니다', successAndRestart: '{0}. 컨테이너를 자동으로 재시작하는 중입니다.', pairingApproveSuccess: '페어링이 승인되었습니다', scanConnect: '스캔하여 연결', scanConnectHelper: '클릭하여 QR 로그인 작업을 시작하세요. QR 코드는 작업 로그에 표시되며 스캔이 완료되면 컨테이너가 자동으로 재시작됩니다.', channelAutoRestartHelper: '저장하면 설정 적용을 위해 컨테이너가 자동으로 재시작됩니다.', dashboardAuthAutoRebuildHelper: '사용자 이름 또는 비밀번호를 저장하면 변경 사항 적용을 위해 컨테이너가 자동으로 재생성됩니다.', dashboardAuthImmediateHelper: '저장하면 컨테이너를 다시 시작하지 않고 QwenPaw 로그인 자격 증명이 즉시 업데이트됩니다.', channelDeleteConfirm: '{0} 채널 구성을 삭제하시겠습니까?', apiTypeBaseURLHelper: '이 유형은 최종적으로 {0}에 요청합니다. 권장 Base URL: {1}', customImageURLHelper: 'Custom 계정에는 전체 이미지 생성 엔드포인트 URL을 입력하세요. 경로는 자동으로 추가되지 않습니다. 예: {0}', apiTypeBaseURLMismatch: '현재 Base URL은 {0} 경로처럼 보이지만 {1}이 선택되었습니다. 권장 URL: {2}', validateAvailability: '계정 가용성 확인', validateAvailabilityHelper: '저장 전에 최소 메시지를 보내 API를 확인합니다', validateImageAvailabilityHelper: '저장 전에 최소 이미지 한 장을 생성하며 비용이 발생할 수 있습니다', }, model: { model: '모델', localModel: '로컬 모델', create_helper: '가져오기 "{0}"', ollama_doc: 'Ollama 공식 웹사이트를 방문하여 더 많은 모델을 검색하고 찾을 수 있습니다.', container_conn_helper: '컨테이너 간 접근 또는 연결에 이 주소를 사용', ollama_sync: 'Ollama 모델 동기화 중 다음 모델이 존재하지 않음을 발견했습니다. 삭제하시겠습니까?', from_remote: '이 모델은 1Panel을 통해 다운로드되지 않았으며 관련 풀 로그가 없습니다.', no_logs: '이 모델의 풀 로그가 삭제되어 관련 로그를 볼 수 없습니다.', vllmVersionHelper: 'FusionXpark GB 10 서버는 -cu130 버전을 선택하세요.', vllmDeployProfile: '배포 모델', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', vllmCommandPortHelper: '시작 명령은 {0} 포트를 사용해야 하며, 그렇지 않으면 서비스에 접근할 수 없습니다.', ascendVisibleDevices: 'Ascend 표시 장치 (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: '모델 계정에 동기화', modelAccountAddressHelper: '컨테이너 주소는 에이전트 컨테이너 호출에 적합합니다. 127.0.0.1, 시스템 IP 또는 사용자 지정 주소는 AI Gateway 또는 외부 서비스 호출에 적합합니다.', containerAddress: '컨테이너 주소', customAddress: '사용자 지정 주소', downloader: '다운로더', modelDir: '모델 디렉토리', manualDownload: '수동 다운로드', modelSource: '모델 소스', repoID: '저장소 ID', endpointLabel: '{0} 엔드포인트', acceleratedEndpointLabel: '{0} 가속 엔드포인트', tokenOptionalLabel: '{0} Token (선택 사항)', searchSource: '{0} 검색', hfEndpointHelper: 'HuggingFace 접속이 불안정할 때 가속 엔드포인트를 설정하세요. 검색, 상세 정보, 다운로드에 사용됩니다.', sortTrending: '인기 트렌드', sortLikes: '좋아요 많은 순', sortDownloads: '다운로드 많은 순', sortUpdated: '최근 업데이트', sortCreated: '최신 생성', downloadsCount: '다운로드 수', likes: '좋아요', taskQueue: '다운로드 대기열', progress: '진행률', localDownloaded: '다운로드됨', modelInfo: '모델 상세 정보', downloading: '다운로드 중', canceled: '취소됨', downloadQueued: '다운로드 대기열에 추가되었습니다', cancelTaskConfirm: '이 다운로드 작업을 취소하시겠습니까?', deleteLocalModelConfirm: '로컬 모델 {0}을(를) 삭제하시겠습니까?', }, proxy: { proxy: 'AI 게이트웨이 강화', proxyHelper1: '도메인을 바인딩하고 HTTPS를 활성화하여 전송 보안을 강화', proxyHelper2: 'IP 접근을 제한하여 공용 인터넷에서의 노출을 방지', proxyHelper3: '스트리밍을 활성화', proxyHelper4: '생성 후, 웹사이트 목록에서 이를 보고 관리할 수 있습니다', proxyHelper5: '활성화한 후, 앱 스토어 - 설치됨 - Ollama - 매개변수에서 포트 외부 접근을 비활성화하여 보안을 강화할 수 있습니다.', proxyHelper6: '프록시 구성을 비활성화하려면 웹사이트 목록에서 삭제할 수 있습니다.', whiteListHelper: '화이트리스트에 있는 IP만 접근 허용', }, aiProxy: { deploymentNoticeTitle: 'AI 게이트웨이 독립 배포 지원', deploymentNoticeDescription: 'AI 게이트웨이가 독립 배포를 지원합니다. 1Panel 내장 AI 게이트웨이는 더 이상 업데이트되지 않습니다. 앱 스토어에서 독립 버전을 설치하는 것을 권장합니다. 현재 버전을 계속 사용할 수도 있습니다.', deploymentNoticeContinue: '확인, 계속 사용', deploymentNoticeAppStore: '앱 스토어로 이동', deploymentNoticeNoAppPermission: '앱 스토어 접근 권한이 없습니다. 관리자에게 독립 버전 설치를 요청하세요.', title: 'AI 게이트웨이', apiReference: 'API 안내', notInstalled: '설치되지 않음', usage: '사용량', accountPool: '계정 풀', importModelAccount: '모델 계정 가져오기', editModelAccount: '모델 계정 편집', selectModelAccount: '기존 모델 계정 선택', upstreamApiAddress: '업스트림 API 주소', priority: '우선순위', healthStatus: '상태', failureCount: '실패 횟수', lastError: '최근 오류', modelMap: '모델 매핑', tokenLimit: 'Token 제한', tokenUsed: '사용한 Token', tokenRemaining: '남은 Token', resetToken: 'Token 재설정', resetTokenConfirm: '{0}의 Token 사용량을 재설정하시겠습니까?', unlimited: '무제한', unlimitedWithAuto: '무제한, auto 포함', lastUsedAt: '최근 사용 시간', validityPeriod: '유효 기간', keepCurrentValidity: '현재 유효 기간 유지', neverExpires: '만료 없음', validForDays: '{0}일 동안 유효', customDays: '사용자 지정 일수', enterValidityDays: '유효 일수를 입력하세요', currentExpiresAt: '현재 만료 시간: {0}', currentNeverExpires: '현재 만료되지 않음', expiresAt: '만료 시간', expired: '만료됨', reactivate: '다시 활성화', settingTitle: 'AI 게이트웨이 설정', basicSetting: '기본 설정', performanceSetting: '성능 설정', logSetting: '로그 설정', protocolConversion: '프로토콜 변환', protocolConversionDesc: 'Chat Completions, Responses 및 Anthropic Messages 간에 지원되는 직접 변환을 허용합니다. 네이티브 프로토콜이 항상 우선합니다.', protocolConversionRisk: '프로토콜 변환은 무손실을 보장하지 않습니다. 프로토콜 전용 필드, 도구 호출, 추론 또는 멀티모달 콘텐츠가 축소되거나 손실될 수 있으므로 위험을 고려한 후 사용하세요.', visionEnhancement: '비전 강화', visionEnhancementRisk: '비전 강화 시 이미지가 별도의 비전 모델 제공자에게 전송될 수 있습니다.', visionModelGroup: '비전 모델 그룹', visionModelGroupDesc: '이 텍스트 생성 그룹에서 이미지 이해 모델을 선택합니다. 한 요청의 모든 이미지는 같은 모델을 사용합니다.', visionTargetModelGroup: '대상 모델 그룹', visionTargetModelGroupDesc: '최종 요청 모델을 변경하지 않고 이 그룹의 요청 모델에만 비전 강화를 적용합니다.', visionEnhancementDesc: '이미지는 텍스트 증거로 변환되어 세부 정보가 손실될 수 있으며 지연과 비용이 증가합니다. 게이트웨이는 대상 모델의 기본 이미지 지원을 감지하지 않습니다. 저장하면 게이트웨이가 재시작되므로 위험을 고려한 후 사용하세요.', visionPreprocess: '비전 전처리', cacheHit: '캐시 적중', apiType: 'API 유형', maxConcurrency: '최대 동시성', accountMaxConcurrency: '계정 최대 동시성', groupMaxConcurrency: '사용자 그룹 최대 동시성', apiKeyMaxConcurrency: 'API Key별 최대 동시성', gatewayConcurrency: '현재 게이트웨이 동시성', waitingQueue: '현재 대기열', currentActiveUsers: '현재 활성 사용자', activeStreamingRequests: '활성 스트리밍 요청', modelAccountConcurrency: '모델 계정 동시성', accountAvailability: '모델 계정 가용성', capacityFull: '용량 가득 참', groupConcurrency: '사용자 그룹 동시성', apiKeyConcurrency: 'API Key 동시성', currentLimit: '현재 / 한도', utilization: '사용률', autoRefreshSeconds: '{0}초마다 자동 새로고침', zeroMeansUnlimited: '0으로 설정하면 제한이 없습니다.', groupMaxConcurrencyDesc: '그룹의 모든 API Key 활성 요청 수를 제한합니다. 0은 무제한입니다.', apiKeyMaxConcurrencyDesc: '그룹 내 각 API Key의 활성 요청 수를 제한합니다. 0은 무제한입니다.', schedulingReason: '스케줄링 이유', schedulingAffinity: '선호 계정', schedulingLeastUtilized: '최저 사용률', schedulingPriorityFallback: '우선순위 폴백', schedulingRetry: '재시도', queueSize: '대기열 크기', queueTimeoutSeconds: '대기열 대기 시간 초과(초)', requestTimeoutSeconds: '비스트리밍 요청 시간 초과(초)', streamIdleTimeoutSeconds: '스트리밍 유휴 시간 초과(초)', maxBodyMb: '최대 요청 본문(MB)', runtimeRefreshSeconds: 'Runtime 새로고침 간격(초)', logRetentionDays: 'AI 게이트웨이 로그 보관 일수', clearLogs: '로그 비우기', clearLogsConfirm: 'AI 게이트웨이 사용 통계, 콘텐츠 컴플라이언스 감사, 스마트 라우팅 결정, 요청 본문 로그 및 서비스 로그를 비웁니다. 계속하시겠습니까?', usageRetentionDays: '사용 통계 보관 일수', contentAuditRetentionDays: '콘텐츠 컴플라이언스 감사 로그 보관 일수', logCleanupIntervalHours: '로그 정리 간격(시간)', requestBodyLog: '요청 본문 로그', requestBodyLogDesc: '검색, 감사, 문제 해결을 위해 AI Gateway 요청 및 응답 본문을 Elasticsearch에 저장합니다.', requestBodyLogIndexPrefix: '인덱스 접두사', requestBodyLogRetentionDays: '요청 본문 로그 보관 일수', requestBodyLogMaxBodyKb: '최대 요청 본문 크기(KB)', requestBody: '요청 본문', requestBodySize: '요청 본문 크기', requestBodyTruncated: '잘림 여부', responseBody: '응답 본문', responseBodySize: '응답 본문 크기', responseBodyTruncated: '응답 본문 잘림 여부', readableContent: '읽기 쉬운 내용', rawResponse: '원본 응답', replyContent: '응답 내용', reasoningContent: '추론 내용', statusTitle: 'AI 게이트웨이 상태', serviceEnabled: '서비스 자동 시작', proxyEnabled: '게이트웨이 활성화', statusMessage: '상태 메시지', esLogDropped: '삭제된 ES 로그', esLogLastSuccessAt: '마지막 ES 쓰기', esLogCircuitOpen: '서킷 오픈', esLogCircuitUntil: 'ES 서킷 종료 시간', serviceOperateConfirm: 'AI 게이트웨이 서비스를 {0}하시겠습니까?', deleteTargetConfirm: '{0} {1}을(를) 삭제하시겠습니까?', deleteBackendTitle: '모델 계정 삭제', userFallback: '삭제된 사용자 (ID: {0})', requestModel: '요청 모델', upstreamModel: '업스트림 모델', upstreamDuration: '업스트림 시간', requestModelPlaceholder: '예: qwen2.5-coder', upstreamModelPlaceholder: '예: Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: '매핑 추가', overview: '개요', distribution: '분포', usageTrend: '사용 추세', distributionBy: '{0}별 분포', unmatched: '미일치', modelAccount: '모델 계정', serviceProvider: '제공자', tokenUsage: 'Token 사용량', percent: '비율', ranking: '순위', rank: '순위', promptToken: '입력 Token', completionToken: '출력 Token', totalToken: '총 Token', cachedToken: '캐시 Token', cacheHitRate: '캐시 적중률', activeUsers: '활성 사용자', activeModels: '활성 모델', failedRequests: '실패한 요청', averageTokenPerRequest: '평균 Token/요청', callLogs: '호출 로그', usageKeywordPlaceholder: 'Request ID / 모델 / 업스트림 모델 / 오류 메시지 검색', attemptChain: '시도 체인', attemptIndex: '호출 순서', clientProtocol: '클라이언트 API', upstreamProtocol: '업스트림 API', conversionPath: '변환 경로', noAttemptDetails: '호출 체인 기록이 없습니다', input: '입력', output: '출력', total: '합계', healthHealthy: '정상', healthCooldown: '쿨다운', healthUnhealthy: '비정상', healthDeleted: '삭제됨', healthUnknown: '알 수 없음', validationModelMapEmpty: '모델 매핑의 모델 이름은 비워 둘 수 없습니다', validationModelMapDuplicate: '요청 모델 {0}이(가) 중복되었습니다', modelGroup: '모델 그룹', modelCapability: '모델 기능', textGeneration: '텍스트 생성', imageGeneration: '이미지 생성', textModels: '텍스트 모델', textToImageModels: '텍스트-이미지 모델', embeddingModels: '임베딩 모델', unauthorized: '권한 없음', imageCount: '이미지 수', requestExample: '요청 예시', availableModels: '사용 가능한 모델', modelGroupModels: '요청 모델', modelGroupModelsPlaceholder: '요청 모델 이름을 선택하거나 입력하세요', modelGroupModelsHelper: '클라이언트가 AI 게이트웨이를 호출할 때 사용하는 요청 모델 이름을 입력하세요. 스마트 라우팅은 순서대로 모델을 우선 선택하며 모델 간 부하 분산은 하지 않습니다.', modelGroupGuide: '모델 그룹에는 AI 게이트웨이가 노출하는 요청 모델 이름을 설정합니다. 업스트림 모델은 계정 풀에서 설정하세요. 스마트 라우팅 모델 이름은 가상 이름이므로 모델 그룹에 추가하지 않습니다.', modelGroupModelCount: '{0}개 모델', contentCompliance: '콘텐츠 규정 준수', contentAction: '작업', actionBlock: '차단', actionAuditOnly: '감사만', actionDropHistory: '기록 삭제', severity: '심각도', severityHigh: '높음', severityMedium: '중간', severityLow: '낮음', sensitiveWord: '민감 단어', sensitiveGroup: '민감 단어 그룹', sensitiveWordCount: '단어 수', normalizedWord: '정규화된 단어', matchedWords: '일치한 단어', matchedGroups: '일치한 그룹', importResult: '가져오기 {0}건, 중복 {1}건, 유효하지 않음 {2}건', auditLogs: '감사 로그', smartRoute: '스마트 라우팅', autoModelName: '스마트 라우팅 모델 이름', autoModelNameHelper: '이 모델 이름을 사용하는 요청은 스마트 라우팅으로 처리됩니다. 실제 모델 이름과 중복되지 않게 하세요.', smartRouteGuideTitle: '클라이언트에서 model={0}를 사용해 스마트 라우팅에 진입합니다', smartRouteGuideReady: 'model={0}는 요청 복잡도에 따라 간단/복잡 모델 그룹에서 모델을 선택합니다. 다른 model은 일반 AI 게이트웨이로 전달됩니다.', smartRouteGuideNotReady: '먼저 설정에서 스마트 라우팅을 켜고 간단/복잡 모델 그룹을 설정하세요. 이후 클라이언트에서 model={0}를 사용합니다.', copyAutoModel: '모델 이름 복사', goSmartRouteSetting: '설정으로 이동', smartRoutePolicy: '라우팅 정책', routeConfig: '라우팅 설정', embeddingConfig: 'Embedding 설정', embeddingConfigDesc: '스마트 라우팅과 콘텐츠 컴플라이언스 의미 샘플 매칭에 사용됩니다. 권장: llama.cpp + Qwen3-Embedding-0.6B. 샘플 벡터를 재생성하기 전에 설정하세요.', decisionConfig: '판정 매개변수', simpleModelGroup: '간단 모델 그룹', complexModelGroup: '복잡 모델 그룹', embeddingEndpoint: '엔드포인트', embeddingModel: '모델', embeddingApiKey: 'API Key', routeThreshold: '라우팅 임계값', routeThresholdHelper: '스마트 라우팅용: 요청과 간단/복잡 샘플의 유사도가 이 값에 도달한 경우에만 샘플 매칭을 사용합니다.', auditThreshold: '감사 임계값', auditThresholdHelper: '콘텐츠 준수용: 요청과 감사 샘플의 유사도가 이 값에 도달한 경우에만 일치로 판단합니다.', topK: 'TopK', topKHelper: '매번 비교할 가장 유사한 샘플 수입니다.', members: '멤버', samples: '샘플', routeSamplesGuide: '샘플은 간단/복잡 요청 예시이며 Embedding 유사도 매칭에 사용됩니다. 실제 사용자 요청을 작성하고 추가 후 벡터를 생성하거나 재생성하세요.', rebuildVectors: '벡터 재생성', rebuildVectorsConfirm: '벡터를 재생성하면 Embedding 서비스가 스마트 라우팅 및 콘텐츠 컴플라이언스 샘플을 다시 처리합니다. 계속하시겠습니까?', createVectorOnImport: '가져온 후 벡터 생성', createVectorOnImportHelper: '기본 선택입니다. Embedding이 설정되어 있으면 백그라운드 작업으로 벡터를 생성하고, 없으면 샘플만 생성합니다.', route: '라우팅', audit: '감사', auditSamples: '감사 샘플', sampleText: '텍스트', sampleLabel: '라벨', vectorModel: '벡터 모델', vectorDim: '차원', threshold: '임계값', preview: '미리보기', previewGuide: '미리보기는 요청이 간단한지 복잡한지 테스트하며 업스트림 모델을 호출하지 않습니다. 소스는 샘플 매칭 또는 규칙 판단입니다.', previewPlaceholder: '요청 텍스트 입력', confidence: '신뢰도', bestSampleSimilarity: '최고 샘플 유사도', source: '소스', sourceHeuristic: '규칙 판단', sourceEmbedding: '샘플 매칭', sourceContext: '컨텍스트 상속', latency: '지연 시간', decisionLogs: '결정 로그', requestID: '요청 ID', simple: '간단', complex: '복잡', sampleLabelSafe: '안전', sampleLabelReview: '검토', sampleLabelBlock: '차단', latencyMs: '지연 시간(ms)', smartRouteSettingGuide: '활성화 후 model={0} 요청만 스마트 라우팅을 사용합니다. 간단 모델 그룹은 저비용 작업, 복잡 모델 그룹은 코드 분석, 아키텍처 설계, 장애 조사 등에 사용됩니다.', sampleLabelPlaceholder: '단순 / 복잡 / 높음', sampleImportPlaceholder: '한 줄에 샘플 하나', apiKeyCount: 'API 키 수', }, skillsHub: { title: 'Skills Hub', upload: 'Skill 업로드', importSkill: 'Skill 가져오기', repositoryAddress: '저장소 주소', repositoryGithubOnly: 'GitHub 저장소 주소만 지원됩니다', repositoryRef: '브랜치 또는 Tag', repositoryRefPlaceholder: '기본값은 main이며, 실패하면 master를 시도합니다', repositoryDownloadPreview: '대상 다운로드 URL:', packageURL: '패키지 URL', packageURLPlaceholder: '.zip 패키지 주소를 입력하세요', importSuccess: 'Skill을 성공적으로 가져왔으며 검토 대기 상태가 되었습니다.', source: '출처', applicableAgent: '적용 에이전트', overview: '개요', versionHistory: '버전 기록', publishedAt: '게시 시간', versionMarker: '표시', currentVersion: '현재 보기', latestVersion: '최신 버전', latestPublished: '최신 게시', riskLevel: '위험 수준', riskReferenceHint: '위험 수준은 Skill 패키지 내용을 기반으로 자동 감지되며 검토 참고용입니다.\n낮음: 명확한 위험 없음\n중간: 스크립트/의존성/외부 URL/환경 변수 포함\n높음: 원격 실행/민감 정보/위험 명령 포함', riskCheckResult: '보안 검사 결과', noRiskFound: '명확한 위험을 찾지 못했습니다.', riskFilePath: '파일 경로', riskKeyword: '일치한 키워드 또는 규칙', riskDescription: '위험 설명', publishHighRiskConfirm: '이 Skill에는 스크립트 실행, 외부 다운로드 또는 민감한 정보 접근이 포함될 수 있는 고위험 항목이 있습니다. 그래도 게시하시겠습니까?', approve: '승인', reject: '거부', publish: '게시', disable: '게시 해제', customTarget: '에이전트 Skill 디렉터리', installToTarget: '에이전트 Skill 디렉터리에 설치', hostSkillDir: 'Skill 디렉터리', hostSkillDirHelper: '노드의 Skill 디렉터리 경로를 입력하세요.', installMethod: '설치 방식', copy: '복사', extract: '압축 해제', postInstallCommand: '설치 후 명령', localSource: '로컬 업로드', uploadDragTitle: 'Skill 패키지를 여기에 끌어다 놓거나 클릭하여 업로드', uploadFormatLabel: '지원 형식:', uploadFormatValue: '.zip, .7z, .tar, .tar.gz', uploadSizeLabel: '파일 크기:', uploadSizeValue: '파일 하나당 5 MB 이하', uploadRequirementLabel: '패키지 요구 사항:', uploadRequirementPrefix: 'Skill 패키지에는 다음이 포함되어야 합니다', onlySupportedArchive: '.zip, .7z, .tar, .tar.gz 형식의 Skill 패키지만 업로드할 수 있습니다', uploadSizeExceeded: '단일 Skill 패키지는 5 MB를 초과할 수 없습니다', uploadSuccess: 'Skill이 성공적으로 업로드되었으며 검토 대기 상태가 되었습니다.', versionAutoFillPlaceholder: '가능하면 파일명에서 자동 감지됩니다. 확인하거나 수동으로 입력하세요', metadataOverwriteConfirm: 'Skill 패키지의 버전이 현재 입력과 다릅니다. 현재 입력값을 사용하시겠습니까?', metadataOverwriteConfirmWithVersions: 'Skill 패키지의 버전이 현재 입력과 다릅니다. 패키지 버전: {packageVersion}; 입력 버전: {inputVersion}. 현재 입력값을 사용하시겠습니까?', offlineNotice: '현재 환경은 오프라인입니다. 로컬 Skill 스토어에서만 Skill을 설치할 수 있습니다.', publishConfirm: '이 Skill을 게시하시겠습니까? 게시 후 로컬 Skill 스토어에서 설치할 수 있습니다.', disableConfirm: '이 Skill 게시를 해제하시겠습니까? 에이전트에 이미 설치된 Skill에는 영향이 없습니다.', deleteConfirm: '이 Skill을 삭제하시겠습니까? 삭제 후 복구할 수 없습니다. 에이전트에 이미 설치된 Skill에는 영향이 없습니다.', rejectConfirm: '이 Skill 검토를 거부하시겠습니까? 거부 후 Skill은 거부 상태가 됩니다.', downloadPublishedOnly: '게시된 Skill 패키지만 다운로드할 수 있습니다.', deleteTargetConfirm: '이 에이전트 Skill 디렉터리 설정을 삭제하시겠습니까? 삭제 후 사용자는 이 설치 디렉터리를 선택할 수 없습니다.', noInstallTarget: '사용 가능한 에이전트 Skill 디렉터리가 없습니다. 먼저 추가하세요.', postInstallConfirm: '이 대상에는 설치 후 명령이 구성되어 있습니다. 실행 전에 신뢰할 수 있는 명령인지 확인하세요.', status: { pending: '검토 대기', approved: '승인됨', published: '게시됨', disabled: '게시 해제됨', rejected: '거부됨', deleted: '삭제됨', }, agent: { common: '공통', }, risk: { low: '낮음', medium: '중간', high: '높음', }, riskType: { script_file: '스크립트 파일', dependency_manifest: '의존성 선언', external_url: '외부 URL', environment_variable: '환경 변수', dockerfile: 'Dockerfile', command_execution: '명령 실행', remote_script_execution: '원격 스크립트 실행', eval_execution: '동적 실행', base64_execution: 'Base64 디코딩 실행', privileged_command: '권한 상승 명령', dangerous_delete: '위험한 삭제', world_writable_permission: '고위험 권한', credential: '의심스러운 인증 정보', sensitive_path: '민감한 경로', suspicious_download_execute: '의심스러운 다운로드 실행', binary_content: '바이너리 콘텐츠', scan_truncated: '검사 내용 잘림', }, riskDescriptionText: { script_file: '로컬 명령을 실행할 수 있는 스크립트 파일이 포함되어 있습니다.', dependency_manifest: '설치 시 외부 의존성을 가져올 수 있는 의존성 선언 파일이 포함되어 있습니다.', external_url: '외부 URL이 포함되어 있습니다. 외부 연결 주소를 신뢰할 수 있는지 확인하세요.', environment_variable: '환경 변수를 선언합니다. 용도와 기본값을 확인하세요.', dockerfile: '이미지 빌드 또는 실행 로직을 정의할 수 있는 Dockerfile이 포함되어 있습니다.', command_execution: '명령 실행 관련 호출이 포함되어 있습니다. 실행 로직을 확인하세요.', remote_script_execution: '원격 스크립트를 다운로드한 뒤 직접 실행하는 로직이 포함되어 있습니다.', eval_execution: 'eval을 통한 동적 실행이 포함되어 있습니다.', base64_execution: 'Base64 디코딩 후 내용을 실행하는 로직이 포함되어 있습니다.', privileged_command: 'sudo 권한 상승 명령이 포함되어 있습니다.', dangerous_delete: '위험한 삭제 명령이 포함되어 있습니다.', world_writable_permission: 'chmod 777 권한 변경이 포함되어 있습니다.', credential: 'API Key, Token, Secret 또는 Password로 의심되는 정보가 포함되어 있습니다.', sensitive_path: '민감한 디렉터리 또는 파일에 접근하는 동작이 포함되어 있습니다.', suspicious_download_execute: '의심스러운 외부 다운로드 또는 다운로드 후 실행 로직이 포함되어 있습니다.', binary_content: '파일에 NUL 바이트가 포함되어 실행 가능 콘텐츠 또는 바이너리 콘텐츠를 숨길 수 있습니다.', scan_truncated: '파일이 검사 한도를 초과했습니다. 검사되지 않은 내용은 수동 확인이 필요합니다.', }, }, benchmark: { title: '벤치마크', launchCommand: '시작 명령', retest: '다시 테스트', statusRunning: '실행 중', statusWaiting: '대기 중', base: '기본 정보', backend: '백엔드', baseUrl: 'Base URL', endpoint: '엔드포인트', tokenizer: '토크나이저', tokenizerPlaceholder: '로컬 토크나이저 디렉터리를 선택하거나 입력하세요. 예: /opt/1panel/tokenizers/DeepSeek-V3', runConfig: '실행 구성', rawResult: '원시 결과', resultMetrics: '결과 지표', contextTokens: '컨텍스트 길이', contextTokensHelper: '이 벤치마크의 입력 Token 제한과 출력 Token 제한의 합계입니다.', outputThroughput: '출력 처리량', outputThroughputHelper: '초당 생성된 출력 Token 수입니다. 높을수록 생성 속도가 빠릅니다.', totalThroughput: '총 처리량', totalThroughputHelper: '초당 처리된 입력 및 출력 Token 수로 전체 처리 능력을 측정합니다.', firstTokenLatency: '첫 Token 지연 시간', firstTokenLatencyHelper: '요청 전송부터 첫 Token 수신까지의 시간입니다. 낮을수록 응답이 빠릅니다.', tokenValueHelper: '양의 정수 또는 k 값을 입력하세요. 예: 512, 1k, 32k', numPrompts: '프롬프트 수', concurrency: '동시성', mean: '평균값', median: '중앙값', requestRate: '요청 속도', requestRateUnlimited: '무제한(최대 처리량)', requestRateCustom: '사용자 지정 QPS', requestRateCustomPlaceholder: '초당 요청 수, 예: 2.5', successfulRequests: '성공한 요청', requestThroughput: '요청 처리량', timeout: '시간 초과(초)', image: 'vLLM 이미지', ignoreEos: 'EOS 무시', extraHeaders: '추가 헤더', }, vllmMonitor: { concurrency: '현재 동시 요청', sampleMoment: '샘플링 시점', sampleWindow: '집계 구간', requestUnit: '개 요청', processing: '처리 중', queued: '대기 중', requestTiming: '요청 소요 시간', completedRequests: '구간 내 완료 요청 수', tokensPerSecond: 'tokens/초', requestsPerSecond: '요청/초', finishReasonLabels: { stop: '정상 종료', length: '길이 제한 도달', abort: '중단', error: '오류', repetition: '반복 출력', }, requestAnalysis: '요청 분석', promptDistribution: '입력 토큰 길이 분포', generationDistribution: '출력 토큰 길이 분포', finishReasons: '요청 종료 사유', queueTime: '평균 대기 시간', averageGenerationTokens: '요청당 평균 출력 토큰 수', prefixCacheHitRate: '접두사 캐시 적중률', distributionHelper: '길이 분포는 요청 속도로 집계되며 평균/최댓값 선택의 영향을 받지 않습니다.', cleanHelper: '현재 vLLM 인스턴스의 모니터링 기록만 삭제하시겠습니까? 다른 인스턴스, 호스트 및 GPU 모니터링에는 영향을 주지 않습니다.', overview: '개요', latencyAnalysis: '지연 시간 분석', requests: '요청 수', tokenThroughput: '토큰 처리량', running: '실행 중인 요청', waiting: '대기 중인 요청', cacheUsage: 'KV 캐시 사용률', promptThroughput: '입력 토큰 처리량', generationThroughput: '출력 토큰 처리량', requestThroughput: '완료 요청 속도', timeToFirstToken: '평균 첫 토큰 지연', timePerOutputToken: '평균 토큰 간 지연', requestLatency: '평균 요청 지연', unavailable: '지표를 수집할 수 없습니다. 인스턴스 실행 상태와 /metrics 접근 가능 여부를 확인하세요.', loadFailed: '모니터링 데이터를 불러오지 못했습니다. 다시 시도하세요.', helper: '수집 활성화, 간격 및 보존 기간은 모니터링 설정에서 조정합니다.', cache: 'KV 캐시', throughput: '요청 처리량', phaseTime: '프리필 및 디코딩 시간', prefillTime: '평균 프리필 시간', decodeTime: '평균 디코딩 시간', requestLatencyChart: '종단 간 요청 지연', timeToFirstTokenChart: '첫 토큰 지연', timePerOutputTokenChart: '토큰 간 지연', }, gpu: { memoryActivity: '메모리 읽기/쓰기 활성률', hotspotTemperature: '핫스폿 온도', fanRPM: '팬 회전 속도 (RPM)', eccCorrectable: '수정 가능한 오류 수', eccUncorrectable: '수정 불가능한 오류 수', eccPending: '적용 대기 중인 ECC 모드', engineUtil: '엔진 사용률', cpuUtil: 'CPU · 사용률', aiCore: 'AICore · 사용률', aiCPUUtil: 'AICPU · 사용률', ctrlCPUUtil: 'CtrlCPU · 사용률', mediaFrequency: '미디어 · 주파수', encoderUtil: '인코더 · 사용률', decoderUtil: '디코더 · 사용률', jpegUtil: 'JPEG · 사용률', ofaUtil: 'OFA · 사용률', mediaUtil: '미디어 · 사용률', computeUtil: '컴퓨팅 · 사용률', copyUtil: '복사 · 사용률', ddrUsage: 'DDR · 용량', ddrUsed: 'DDR · 사용량', ddrTotal: 'DDR · 총량', ddrBandwidth: 'DDR · 대역폭 사용률', hbmUsage: 'HBM · 용량', hbmUsed: 'HBM · 사용량', hbmTotal: 'HBM · 총량', hbmBandwidth: 'HBM · 대역폭 사용률', hugepagesUsage: '대용량 페이지 · 수', hugepagesUsed: '대용량 페이지 · 사용량', hugepagesTotal: '대용량 페이지 · 총량', historyAverage: '평균', historyPeak: '최댓값', historyAggregated: '샘플 {count}개를 {seconds}초 간격으로 집계합니다. 프로세스는 개수만 표시합니다.', historyRaw: '원본 샘플 {count}개.', historyMetricEmpty: '선택한 기간에 이 지표의 데이터가 없습니다', historyLoadFailed: '기록을 불러오지 못했습니다. 다시 시도하세요.', collectedAt: '수집 시간', processUnavailable: '프로세스 정보를 사용할 수 없습니다', architecture: '아키텍처', memoryFrequency: '메모리 주파수', memoryTemperature: '메모리 온도', memoryReserved: '예약된 메모리', powerDefaultLimit: '기본 전력 제한', powerMaxLimit: '설정 가능한 최대 전력', clockEvents: '클럭 제한 이유', memoryBandwidth: '메모리 대역폭 사용률', legacyDevice: '이전 기록', legacyHistory: '이 기록에는 고정 장치 ID가 없어 장치 식별 및 누락 값을 확인할 수 없습니다.', pcieGeneration: 'PCIe 세대 (현재 / 최대)', pcieWidth: 'PCIe 너비 (현재 / 최대)', gpu: 'GPU 모니터링', gpuHelper: '지원되는 GPU/XPU/NPU 관리 명령을 감지하지 못했습니다. 확인하고 다시 시도하세요!', process: '프로세스 정보', type: '유형', typeG: '그래픽', typeC: '컴퓨팅', typeCG: '컴퓨팅+그래픽', processName: '프로세스 이름', shr: '공유 메모리', temperatureHelper: 'GPU 온도가 높으면 GPU 주파수가 감소할 수 있습니다', gpuUtil: 'GPU 사용률', temperature: '온도', performanceState: '성능 상태', powerUsage: '전력 소비', memoryUsage: '메모리 용량 사용률', fanSpeed: '팬 속도', power: '전력', powerCurrent: '현재 전력', powerLimit: '전력 제한', memory: '메모리', memoryUsed: '사용된 메모리', memoryTotal: '전체 메모리', frequency: '주파수', freeMemory: '사용 가능한 메모리', percent: '사용률', base: '기본 정보', driverVersion: '드라이버 버전', cudaVersion: 'CUDA 버전', processMemoryUsage: '메모리 사용량', performanceStateHelper: 'P0(최대 성능)부터 P12(최소 성능)까지', busID: '버스 주소', runtimeInfo: '실행 정보', deviceInfo: '장치 정보', persistenceMode: '지속성 모드', enabled: '활성화', disabled: '비활성화', persistenceModeHelper: '지속성 모드는 작업에 더 빠르게 응답하지만 대기 전력 소비도 그에 따라 증가합니다', displayActive: 'GPU 초기화', displayActiveT: '예', displayActiveF: '아니오', ecc: '오류 검사 및 수정 기술', computeMode: '계산 모드', default: '기본값', exclusiveProcess: '배타적 프로세스', exclusiveThread: '배타적 스레드', prohibited: '금지됨', defaultHelper: '기본값: 프로세스가 동시에 실행될 수 있음', exclusiveProcessHelper: '배타적 프로세스: 하나의 CUDA 컨텍스트만 GPU를 사용할 수 있지만 여러 스레드에서 공유 가능', exclusiveThreadHelper: '배타적 스레드: CUDA 컨텍스트의 하나의 스레드만 GPU를 사용할 수 있음', prohibitedHelper: '금지됨: 프로세스 동시 실행이 허용되지 않음', migModeHelper: 'MIG 인스턴스를 생성하는 데 사용되며 사용자 레이어에서 GPU의 물리적 격리를 구현합니다.', migModeNA: '지원되지 않음', current: '실시간 모니터링', history: '기록', notSupport: '현재 버전 또는 드라이버는 이 매개변수 표시를 지원하지 않습니다.', processCount: '프로세스 수', }, mcp: { server: 'MCP 서버', baseUrl: '외부 접근 경로', baseUrlHelper: '예: http://192.168.1.2:8000', ssePath: 'SSE 경로', ssePathHelper: '예: /sse, 다른 서버와 중복되지 않도록 주의하세요', environment: '환경 변수', envKey: '변수 이름', envValue: '변수 값', externalUrl: '외부 연결 주소', operatorHelper: '{0}에 {1} 작업을 수행합니다. 계속하시겠습니까?', domain: '기본 접근 주소', domainHelper: '예: 192.168.1.1 또는 example.com', bindDomain: '웹사이트 바인딩', commandPlaceHolder: '현재 npx 및 바이너리 시작 명령만 지원합니다', importMcpJson: 'MCP 서버 구성 가져오기', importMcpJsonError: 'mcpServers 구조가 올바르지 않습니다', bindDomainHelper: '웹사이트를 바인딩한 후, 설치된 모든 MCP 서버의 접근 주소를 수정하고 포트의 외부 접근을 닫습니다', outputTransport: '출력 유형', streamableHttpPath: '스트리밍 경로', streamableHttpPathHelper: '예: /mcp, 다른 서버와 중복되지 않도록 주의하세요', npxHelper: 'npx 또는 바이너리로 시작하는 mcp에 적합', uvxHelper: 'uvx로 시작하는 mcp에 적합', protocolVersion: '프로토콜 버전', protocolVersionHelper: '상태 비저장 Streamable HTTP에서 하위 stdio MCP Server를 자동 초기화할 때만 사용합니다', gatewayArgsHelper: '인수는 supergateway 시작 명령에 추가됩니다. 1Panel에서 관리하는 전송, 포트, 경로 및 프로토콜 인수는 변경할 수 없습니다', testConnection: '연결 테스트', connectionSuccess: '연결 성공', connectionFailed: '연결 실패', }, tensorRT: { llm: 'TensorRT LLM', modelDir: '모델 디렉토리', commandHelper: '외부 액세스가 필요한 경우 명령에서 포트를 애플리케이션 포트와 동일하게 설정하십시오', imageAlert: '이미지 크기가 크므로 설치 전에 서버에 이미지를 수동으로 다운로드하는 것이 좋습니다', modelSpeedup: '모델 가속 활성화', modelType: '모델 유형', }, }, container: { createByCommand: '명령으로 생성', importContainerBackupTip: '컨테이너 백업 파일 가져오기, .tar.gz 형식만 지원합니다', importComposeBackupTip: 'Compose 백업 파일 가져오기, .tar.gz 형식만 지원합니다', stopContainerBeforeBackup: '백업 전에 컨테이너 중지', stopComposeBeforeBackup: '백업 전에 Compose 중지', stopBeforeBackupHelper: '활성화하면 백업 전에 컨테이너 또는 Compose 서비스를 중지하고, 완료 후 자동으로 복구하여 데이터 일관성을 보장합니다.', commandInput: '명령 입력', commandRule: '컨테이너 생성을 위한 올바른 docker run 명령을 입력하세요.', commandHelper: '이 명령은 서버에서 실행되어 컨테이너를 생성합니다. 계속하시겠습니까?', updateHelper1: '이 컨테이너가 앱 스토어에서 왔음을 감지했습니다. 다음 두 가지 사항을 유의하십시오:', updateHelper2: '1. 현재 수정 사항은 앱 스토어에 설치된 애플리케이션에 동기화되지 않습니다.', updateHelper3: '2. 설치된 페이지에서 애플리케이션을 수정하면 현재 편집된 내용이 무효화됩니다.', updateHelper4: '컨테이너 편집에는 재빌드가 필요하며, 비지속적인 데이터는 손실됩니다. 계속하시겠습니까?', containerList: '컨테이너 목록', operatorHelper: '{0} 작업이 다음 컨테이너에서 수행됩니다. 계속하시겠습니까?', operatorAppHelper: '"{0}" 작업이 다음 컨테이너에서 수행되며, 실행 중인 서비스에 영향을 미칠 수 있습니다. 계속하시겠습니까?', containerDeleteHelper: "컨테이너가 앱 스토어에서 생성된 것으로 감지되었습니다. 컨테이너를 삭제해도 1Panel에서 완전히 제거되지 않습니다. 완전히 삭제하려면 앱 스토어 -> '설치됨' 또는 '런타임 환경' 메뉴로 이동하여 작업하십시오. 계속하시겠습니까?", start: '시작', stop: '중지', restart: '재시작', kill: '강제 종료', pause: '일시 정지', unpause: '재개', rename: '이름 변경', remove: '제거', removeAll: '모두 제거', containerPrune: '정리', containerPruneHelper1: '이 작업은 중지된 모든 컨테이너를 삭제합니다.', containerPruneHelper2: "앱 스토어에서 가져온 컨테이너는 정리 후 '앱 스토어 -> 설치됨' 페이지로 이동하여 '재빌드' 버튼을 클릭하여 재설치해야 합니다.", containerPruneHelper3: '이 작업은 취소할 수 없습니다. 계속하시겠습니까?', imagePrune: '정리', imagePruneSome: '라벨 없는 이미지 정리', imagePruneSomeEmpty: "라벨이 'none'인 이미지가 정리되지 않았습니다.", imagePruneSomeHelper: "컨테이너에서 사용되지 않는 'none' 태그가 붙은 이미지를 정리합니다.", imagePruneAll: '사용되지 않는 이미지 정리', imagePruneAllEmpty: '사용되지 않는 이미지가 정리되지 않았습니다.', imagePruneAllHelper: '사용되지 않는 이미지를 정리합니다.', networkPrune: '정리', networkPruneHelper: '사용되지 않는 네트워크를 모두 제거합니다. 계속하시겠습니까?', volumePrune: '정리', volumePruneHelper: '사용되지 않는 로컬 볼륨을 모두 제거합니다. 계속하시겠습니까?', cleanSuccess: '작업이 성공적으로 완료되었습니다. 이번 정리에서 {0}개의 항목이 정리되었습니다!', cleanSuccessWithSpace: '작업이 성공적으로 완료되었습니다. 이번 정리에서 {0}개의 디스크가 정리되었으며, 확보된 디스크 공간은 {1}입니다!', unExposedPort: '현재 포트 매핑 주소는 127.0.0.1로 외부 액세스를 활성화할 수 없습니다.', upTime: '업타임', fetch: '가져오기', lines: '라인', linesHelper: '올바른 로그 수를 입력하세요!', downloadLinesHelper: '다운로드할 로그 줄 수를 선택하거나 입력하세요.', lastDay: '지난 하루', last4Hour: '지난 4시간', lastHour: '지난 1시간', last10Min: '지난 10분', cleanLogscope: '정리 유형', cleanLog: '로그 정리', downLogHelper1: '이 작업은 컨테이너 {0}의 모든 로그를 다운로드합니다. 계속하시겠습니까?', downLogHelper2: '컨테이너 {0}의 최신 로그 {1}줄을 다운로드합니다. 계속하시겠습니까?', cleanLogHelper: '이 작업은 컨테이너를 재시작해야 하며 취소할 수 없습니다. 계속하시겠습니까?', newName: '새 이름', source: '리소스 사용', cpuUsage: 'CPU 사용', cpuTotal: '전체 CPU', core: '코어', memUsage: '메모리 사용', memTotal: '메모리 한도', memCache: '메모리 캐시', loadSize: '컨테이너 크기 가져오기', ip: 'IP 주소', cpuShare: 'CPU 공유', cpuShareHelper: '컨테이너 엔진은 기본값으로 1024를 사용합니다. 이를 늘리면 컨테이너에 더 많은 CPU 시간을 할당할 수 있습니다.', inputIpv4: '예시: 192.168.1.1', inputIpv6: '예시: 2001:0db8:85a3:0000:0000:8a2e:0370:7334', diskUsage: '디스크 사용량', localVolume: '로컬 스토리지 볼륨', buildCache: '빌드 캐시', usage: '사용됨: {0}, 해제 가능: {1}', clean: '해제', imageClean: '이미지 정리를 수행하면 사용되지 않은 모든 이미지가 삭제됩니다. 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?', containerClean: '컨테이너 정리를 수행하면 중지된 모든 컨테이너(앱 스토어의 중지된 앱 포함)가 삭제됩니다. 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?', sizeRw: '컨테이너 레이어 크기', sizeRwHelper: '컨테이너에 고유한 쓰기 가능 레이어 크기', sizeRootFs: '가상 크기', sizeRootFsHelper: '컨테이너가 의존하는 모든 이미지 레이어 + 컨테이너 레이어의 총 크기', containerFromAppHelper: '이 컨테이너가 앱 스토어에서 왔음을 감지했습니다. 앱 작업으로 현재 편집이 무효화될 수 있습니다.', containerFromAppHelper1: '설치된 애플리케이션 목록에서 [매개변수] 버튼을 클릭하여 편집 페이지로 이동하고 컨테이너 이름을 수정하세요.', command: '명령어', console: '컨테이너 상호작용', tty: '가상 TTY 할당 (-t)', openStdin: 'STDIN 을 열어둡니다. 연결되지 않더라도 계속 열려있습니다 (-i)', custom: '사용자 정의', emptyUser: '비워두면 기본값으로 로그인합니다.', privileged: '특권 모드', privilegedHelper: '컨테이너가 호스트에서 특정 특권 작업을 수행할 수 있도록 허용합니다. 이는 보안 위험을 초래할 수 있으므로 주의해서 사용하십시오.', upgradeHelper: '레포지토리 이름/이미지 이름: 이미지 버전', upgradeWarning2: '업그레이드 작업은 컨테이너를 재빌드해야 하며, 비지속적인 데이터가 손실됩니다. 계속하시겠습니까?', oldImage: '현재 이미지', sameImageContainer: '동일 이미지 컨테이너', sameImageHelper: '동일한 이미지를 사용하는 컨테이너는 선택 후 일괄 업그레이드 가능', targetImage: '대상 이미지', imageLoadErr: '컨테이너에 대한 이미지 이름이 감지되지 않았습니다.', imageUpdateTagEmpty: '업데이트 가능한 이미지 태그를 찾지 못했습니다.', appHelper: '이 컨테이너는 앱 스토어에서 왔으며 업그레이드 시 서비스가 중단될 수 있습니다.', input: '수동 입력', forcePull: '이미지 강제 풀', forcePullHelper: '이 작업은 서버에 있는 기존 이미지를 무시하고 레지스트리에서 최신 이미지를 강제로 가져옵니다.', imageUpdateHelper: '레지스트리의 동일 태그를 확인하고, 변경이 있으면 가져와 로컬 이미지를 업데이트합니다.', server: '호스트', serverExample: '80, 80-88, ip:80 또는 ip:80-88', containerExample: '80 또는 80-88', exposePort: '포트 노출', exposeAll: '모든 포트 노출', cmdHelper: '예시: nginx -g "daemon off;"', entrypointHelper: '예시: docker-entrypoint.sh', autoRemove: '자동 제거', cpuQuota: 'CPU 코어 수', memoryLimit: '메모리', limitHelper: '0으로 설정하면 제한이 없으며, 최대값은 {0}입니다.', mount: '마운트', volumeOption: '볼륨', hostOption: '호스트', serverPath: '서버 경로', containerDir: '컨테이너 경로', volumeHelper: '저장소 볼륨의 내용이 올바른지 확인하십시오.', networkEmptyHelper: '컨테이너 네트워크 선택이 올바른지 확인해 주세요', modeRW: '읽기/쓰기', modeR: '읽기 전용', sharedLabel: '전파 모드', private: '비공개', privateHelper: '컨테이너와 호스트의 마운트 변경 사항이 서로 영향을 주지 않음', rprivate: '재귀적 비공개', rprivateHelper: '컨테이너 내 모든 마운트가 호스트와 완전히 격리됨', shared: '공유', sharedHelper: '호스트와 컨테이너의 마운트 변경 사항이 서로 보임', rshared: '재귀적 공유', rsharedHelper: '호스트와 컨테이너의 모든 마운트 변경 사항이 서로 보임', slave: '슬레이브', slaveHelper: '컨테이너는 호스트 마운트 변경 사항을 볼 수 있지만, 자신의 변경 사항은 호스트에 영향을 주지 않음', rslave: '재귀적 슬레이브', rslaveHelper: '컨테이너 내 모든 마운트가 호스트 변경 사항을 볼 수 있지만 호스트에 영향을 주지 않음', mode: '모드', env: '환경', restartPolicy: '재시작 정책', always: '항상', unlessStopped: '중지되지 않는 한', onFailure: '실패 시 (기본 5회)', no: '절대', refreshTime: '새로 고침 간격', cache: '캐시', image: '이미지 | 이미지들', imagePull: '풀', imagePullHelper: '여러 이미지 선택 풀링을 지원하며, 각 이미지 입력 후 Enter 키를 눌러 계속합니다', imagePush: '푸시', imagePushHelper: '이 이미지에 여러 태그가 있는 것으로 감지되었습니다. 푸시 시 사용할 이미지 이름이 다음인지 확인하세요: {0}', imageDelete: '이미지 삭제', repoName: '컨테이너 저장소 이름', imageName: '이미지 이름', pull: '풀', path: '경로', imageUploadDrop: '이미지 파일을 여기로 끌어 놓거나 클릭하여 업로드하세요', imageUploadHelper: '파일 형식에는 제한이 없습니다. Docker가 내용을 검증합니다. 업로드한 파일은 보관되므로 가져오기를 다시 시도하거나 수동으로 삭제할 수 있습니다.', imageUploadEmpty: '빈 파일입니다. 유효한 이미지 파일을 선택하세요.', imageImportSubmitted: '이미지 가져오기 작업이 제출되었습니다. 작업 로그에서 결과를 확인하세요.', importImage: '가져오기', buildArgs: '빌드 인수', imageBuild: '이미지 빌드', pathSelect: '경로', label: '레이블', imageTag: '이미지 태그', imageTagHelper: '여러 이미지 태그 설정을 지원하며, 각 태그 입력 후 Enter 키를 눌러 계속합니다', push: '푸시', fileName: '파일 이름', export: '내보내기', exportImage: '이미지 내보내기', size: '크기', tag: '태그', tagHelper: '한 줄에 하나씩. 예시:\nkey1=value1\nkey2=value2', imageNameHelper: '이미지 이름과 태그, 예시: nginx:latest', cleanBuildCache: '빌드 캐시 정리', delBuildCacheHelper: '이 작업은 빌드 중 생성된 모든 캐시된 아티팩트를 삭제하며 되돌릴 수 없습니다. 계속 하시겠습니까?', urlWarning: 'URL 접두어에 http:// 또는 https://를 포함할 필요는 없습니다. 수정해 주세요.', network: '네트워크 | 네트워크들', networkHelper: '이로 인해 일부 애플리케이션과 실행 환경이 제대로 작동하지 않을 수 있습니다. 계속 하시겠습니까?', networkName: '이름', driver: '드라이버', option: '옵션', attachable: '연결 가능', parentNetworkCard: '부모 네트워크 카드', subnet: '서브넷', scope: 'IP 범위', gateway: '게이트웨이', auxAddress: '제외 IP', volume: '볼륨 | 볼륨들', volumeDir: '볼륨 디렉터리', nfsEnable: 'NFS 스토리지 사용', nfsAddress: '주소', mountpoint: '마운트 지점', mountpointNFSHelper: '예: /nfs, /nfs-share', options: '옵션', repo: '레지스트리', httpRepoHelper: 'HTTP 타입 저장소 작업 시 Docker 서비스 재시작이 필요합니다.', httpRepo: 'HTTP 프로토콜을 선택하면 Docker 서비스를 재시작하여 불안정한 레지스트리에 추가해야 합니다.', delInsecure: '신뢰할 수 없는 항목 삭제', delInsecureHelper: '이 작업은 Docker 서비스를 재시작하여 불안정한 레지스트리에서 제거합니다. 계속 하시겠습니까?', downloadUrl: '서버', imageRepo: '이미지 레포지토리', repoHelper: '거울 레포지토리/조직/프로젝트가 포함되어 있습니까?', auth: '인증 필요', mirrorHelper: '거울이 여러 개 있을 경우 각 줄에 하나씩 표시해야 합니다. 예시:\nhttp://xxxxxx.m.daocloud.io \nhttps://xxxxxx.mirror.aliyuncs.com', registrieHelper: '개인 레지스트리가 여러 개 있을 경우 각 줄에 하나씩 표시해야 합니다. 예시:\n172.16.10.111:8081 \n172.16.10.112:8081', compose: '컴포즈 | 컴포즈들', composeFile: '컴포즈 파일', fromChangeHelper: '소스를 변경하면 현재 편집한 내용이 삭제됩니다. 계속 하시겠습니까?', composePathHelper: 'Compose 파일 저장 경로: {0}. Docker Compose에 프로젝트 이름이 지정되어 있으면 해당 이름을 우선 사용하고, 지정되어 있지 않으면 {1}을(를) 사용합니다.', composeNamePriorityHelper: '프로젝트 이름 우선순위: Docker Compose 구성에 지정된 이름 > 파일의 상위 디렉터리 이름 > 여기에 입력한 이름.', composeHelper: '1Panel 에디터나 템플릿을 통해 생성된 컴포지션은 {0}/docker/compose 디렉토리에 저장됩니다.', deleteFile: '파일 삭제', deleteComposeHelper: '이 작업은 컴포즈와 관련된 모든 파일을 삭제합니다. 구성을 포함한 지속적인 파일도 포함됩니다. 신중히 진행해 주세요!', deleteCompose: '" 이 컴포즈를 삭제하시겠습니까?', composeDirectory: '디렉토리', template: '템플릿', composeTemplate: '컴포즈 템플릿 | 컴포즈 템플릿들', content: '내용', contentEmpty: '컴포즈 내용이 비어 있습니다. 입력 후 다시 시도해 주세요!', containerNumber: '컨테이너 수', containerStatus: '컨테이너 상태', exited: '종료됨', running: '실행 중 ( {0} / {1} )', composeDetailHelper: '이 컴포즈는 1Panel 외부에서 생성되었습니다. 시작 및 중지 작업은 지원되지 않습니다.', composeOperatorHelper: '{1} 작업이 {0}에서 수행됩니다. 계속 하시겠습니까?', composeDownHelper: '이 작업은 {0} 컴포즈 아래의 모든 컨테이너와 네트워크를 중지하고 제거합니다. 계속 하시겠습니까?', composeEnvHelper2: '이 오케스트레이션은 1Panel 앱 스토어에서 생성되었습니다. 설치된 애플리케이션에서 환경 변수를 수정하세요.', composeContentPlaceholder: '여기에 docker-compose 파일 내용을 작성하거나 붙여넣으세요', setting: '설정 | 설정들', restartHelper: '구성 변경 사항을 적용하려면 Docker 서비스를 재시작해야 합니다', operatorStatusHelper: '이 작업은 Docker 서비스를 "{0}" 합니다. 계속 하시겠습니까?', dockerStatus: 'Docker 서비스', daemonJsonPathHelper: '구성 경로가 docker.service 에 지정된 경로와 동일한지 확인하십시오.', mirrors: '레지스트리 미러들', mirrorsHelper: '이미지 작업에 레지스트리 미러 URL을 우선 사용합니다. 레지스트리 미러를 비활성화하려면 비워 두세요.', mirrorsHelper2: '자세한 내용은 공식 문서를 참조하십시오.', registries: '불안정한 레지스트리들', ipv6Helper: 'IPv6를 활성화하려면 IPv6 컨테이너 네트워크를 추가해야 합니다. 구체적인 구성 단계를 공식 문서에서 참조하십시오.', ipv6CidrHelper: '컨테이너를 위한 IPv6 주소 풀 범위', ipv6TablesHelper: 'ip6tables 규칙에 대해 Docker IPv6 을 자동 구성합니다.', experimentalHelper: 'ip6tables 를 활성화하려면 이 구성을 켜야 합니다. 그렇지 않으면 ip6tables가 무시됩니다.', cutLog: '로그 옵션', cutLogHelper1: '현재 구성은 새로 생성된 컨테이너에만 영향을 미칩니다.', cutLogHelper2: '기존 컨테이너는 재생성해야 구성이 적용됩니다.', cutLogHelper3: '컨테이너를 재생성하면 데이터 손실이 발생할 수 있습니다. 중요한 데이터가 포함된 컨테이너는 재구성 전 백업을 꼭 해주세요.', maxSize: '최대 크기', maxFile: '최대 파일', liveHelper: '기본적으로 Docker 데몬이 종료되면 실행 중인 컨테이너도 종료됩니다. 데몬이 비활성화된 상태에서 컨테이너를 계속 실행하려면 데몬을 설정할 수 있습니다. 이 기능은 라이브 복구라고 불리며, 데몬 충돌, 예정된 중단 또는 업그레이드로 인한 컨테이너 다운타임을 줄이는 데 도움을 줍니다.', liveWithSwarmHelper: 'live-restore 데몬 구성은 스웜 모드와 호환되지 않습니다.', iptablesDisable: 'iptables 비활성화', iptablesHelper1: 'Docker 에 대한 iptables 규칙을 자동으로 구성합니다.', iptablesHelper2: 'iptables 를 비활성화하면 컨테이너가 외부 네트워크와 통신할 수 없습니다.', daemonJsonPath: '구성 경로', serviceUnavailable: '현재 Docker 서비스가 시작되지 않았습니다.', startIn: '시작하려면', sockPath: '유닉스 도메인 소켓', sockPathHelper: 'Docker 데몬과 클라이언트 간의 통신 채널입니다.', sockPathHelper1: '기본 경로: /var/run/docker-x.sock', sockPathMsg: '소켓 경로 설정을 저장하면 Docker 서비스가 사용 불가능할 수 있습니다. 계속 하시겠습니까?', sockPathErr: '올바른 Docker 소켓 파일 경로를 선택하거나 입력해 주세요.', related: '관련', includeAppstore: '앱 스토어에서 컨테이너 표시', excludeAppstore: '앱스토어 컨테이너 숨기기', cleanDockerDiskZone: 'Docker 에서 사용하는 디스크 공간 정리', cleanImagesHelper: '(사용되지 않는 모든 이미지를 정리합니다.)', cleanContainersHelper: '(정지된 모든 컨테이너를 정리합니다.)', cleanVolumesHelper: '(사용되지 않는 모든 로컬 볼륨을 정리합니다.)', makeImage: '이미지 생성', newImageName: '새 이미지 이름', commitMessage: '커밋 메시지', author: '작성자', ifPause: '생성 중 컨테이너 일시 정지', ifMakeImageWithContainer: '이 컨테이너에서 새 이미지를 생성하시겠습니까?', finishTime: '마지막 중지 시간', workingDir: '작업 디렉토리', composeFileMissing: 'Compose 파일이 감지되지 않았습니다', resource: '리소스', macAddr: 'MAC 주소', exportHelper: '선택한 이미지를 하나의 tar 파일로 내보냅니다.', goSetting: '설정으로 이동', }, cronjob: { importHelper: '가져오기 시 동일한 이름의 예약 작업은 자동으로 건너뜁니다. 작업은 기본적으로 【비활성화】 상태로 설정되며, 데이터 연동 이상 시 【편집 대기】 상태로 설정됩니다.', changeStatus: '상태 변경', disableMsg: '이 작업은 예약된 작업이 자동으로 실행되지 않도록 멈춥니다. 계속하시겠습니까?', enableMsg: '이 작업은 예약된 작업이 자동으로 실행되도록 허용합니다. 계속하시겠습니까?', taskType: '작업 유형', record: '레코드', viewRecords: '레코드 보기', shell: '셸', stop: '수동 중지', stopHelper: '이 작업은 현재 작업 실행을 강제로 중지합니다. 계속하시겠습니까?', log: '백업 로그', logHelper: '시스템 백업 로그', logHelper2: '2. 서버 SSH 로그인 로그', logHelper3: '3. 모든 사이트 로그', containerCheckBox: '컨테이너 내 (컨테이너 명령어 입력 불필요)', containerName: '컨테이너 이름', ntp: '시간 동기화', ntp_helper: 'Toolbox 의 빠른 설정 페이지에서 NTP 서버를 구성할 수 있습니다.', app: '백업 앱', website: '백업 웹사이트', rulesHelper: '여러 개의 제외 규칙 지원, 영어 쉼표 , 로 구분. 예: *.log,*.sql', lastRecordTime: '마지막 실행 시간', all: '전체', failedRecord: '실패한 레코드', successRecord: '성공한 레코드', database: '백업 데이터베이스', backupArgs: '백업 인수', backupArgsHelper: '목록에 없는 백업 인수는 수동으로 입력하여 선택할 수 있습니다. 예: --no-data를 입력하고 드롭다운 목록의 첫 번째 옵션을 선택하세요.', singleTransaction: '단일 트랜잭션을 사용하여 InnoDB 테이블을 백업하며, 대용량 데이터 백업에 적합합니다', quick: '전체 테이블을 메모리에 로드하는 대신 데이터를 행별로 읽습니다. 대용량 데이터 및 저메모리 시스템 백업에 적합합니다', skipLockTables: '모든 테이블을 잠그지 않고 백업합니다. 높은 동시성 데이터베이스에 적합합니다', setGtidPurgedOff: '백업 시 GTID 정보를 내보내지 않으며 그룹 복제 환경에서 데이터베이스를 복구할 때 적합합니다', missBackupAccount: '백업 계정을 찾을 수 없습니다', syncDate: '동기화 시간', clean: '캐시 정리', curl: '접속 URL', taskName: '작업 이름', cronSpec: '트리거 주기', cronSpecDoc: '사용자 정의 실행 주기는 [분 시 일 월 요일] 형식만 지원합니다 (예: 0 0 * * *). 자세한 내용은 공식 문서를 참조하세요.', cronSpecHelper: '올바른 실행 주기를 입력해 주세요', cleanHelper: '이 작업은 모든 작업 실행 레코드, 백업 파일, 로그 파일을 기록합니다. 계속하시겠습니까?', directory: '백업 디렉토리', sourceDir: '백업 디렉토리', snapshot: '시스템 스냅샷', allOptionHelper: '현재 작업 계획은 모든 [{0}]을 백업하는 것입니다. 현재 직접 다운로드는 지원되지 않습니다. [{0}] 메뉴에서 백업 목록을 확인하실 수 있습니다.', exclusionRules: '배제 규칙', exclusionRulesHelper: '제외 규칙을 선택하거나 입력하고, 각 세트 입력 후 Enter 키를 눌러 계속합니다. 제외 규칙은 이 백업의 모든 압축 작업에 적용됩니다', default_download_path: '기본 다운로드 링크', saveLocal: '로컬 백업 보관 (클라우드 저장소 복사본 수와 동일)', url: 'URL 주소', urlHelper: '올바른 URL 주소를 입력해 주세요', targetHelper: '백업 계정은 패널 설정에서 관리됩니다.', withImageHelper: '앱 스토어 이미지를 백업하지만 스냅샷 파일 크기가 증가합니다.', ignoreApp: '앱 제외', withImage: '애플리케이션 이미지 백업', retainCopies: '기록 보관', retryTimes: '재시도 횟수', timeout: '타임아웃', ignoreErr: '오류 무시', ignoreErrHelper: '백업 과정에서 발생하는 오류를 무시하여 모든 백업 작업이 실행되도록 합니다', retryTimesHelper: '0은 실패 후 재시도 안 함을 의미합니다', retainCopiesHelper: '실행 기록과 로그에 대해 보관할 복사본 수', retainCopiesHelper1: '백업 파일에 대해 보관할 복사본 수', retainCopiesUnit: '개 (보기)', cronSpecRule: '라인 {0}의 실행 주기 형식이 잘못되었습니다. 확인 후 다시 시도해 주세요!', perMonthHelper: '매월 {0}일 {1}:{2}에 실행', perWeekHelper: '매주 {0}일 {1}:{2}에 실행', perDayHelper: '매일 {0}:{1}에 실행', perHourHelper: '매시간 {0}분에 실행', perNDayHelper: '매 {0}일마다 {1}:{2}에 실행', perNHourHelper: '매 {0}시간마다 {1}에 실행', perNMinuteHelper: '매 {0}분마다 실행', perNSecondHelper: '매 {0}초마다 실행', perMonth: '매월', perWeek: '매주', perHour: '매시간', perNDay: '매 N일', perDay: '매일', perNHour: '매 N시간', perNMinute: '매 N분', perNSecond: '매 N초', day: '일', monday: '월요일', tuesday: '화요일', wednesday: '수요일', thursday: '목요일', friday: '금요일', saturday: '토요일', sunday: '일요일', shellContent: '스크립트', errRecord: '잘못된 로깅', errHandle: '크론 작업 실행 실패', noRecord: '크론 작업을 트리거하고 나면 여기에 레코드가 표시됩니다.', cleanData: '데이터 정리', cleanRemoteData: '원격 데이터 삭제', cleanDataHelper: '이 작업에서 생성된 백업 파일을 삭제합니다.', noLogs: '작업 출력이 아직 없습니다...', errPath: '백업 경로 [{0}] 오류, 다운로드할 수 없습니다!', cutWebsiteLog: '웹사이트 로그 회전', cutWebsiteLogHelper: '회전된 로그 파일은 1Panel 의 백업 디렉토리로 백업됩니다.', syncIpGroup: 'WAF IP 그룹 동기화', syncIpGroupHelper: 'WAF 블랙/화이트리스트에서 사용하는 원격 IP 그룹을 동기화합니다', requestExpirationTime: '업로드 요청 만료 시간(시간)', unitHours: '단위: 시간', alertTitle: '예정된 작업 - {0} 「{1}」 작업 실패 경고', library: { script: '스크립트', syncNow: '지금 동기화', turnOnSync: '자동 동기화 켜기', turnOnSyncHelper: '자동 동기화를 켜면 매일 새벽 시간에 자동 동기화가 수행됩니다', turnOffSync: '자동 동기화 끄기', turnOffSyncHelper: '자동 동기화를 끄면 스크립트 동기화가 지연될 수 있습니다. 확인하시겠습니까?', isInteractive: '대화형', interactive: '대화형 스크립트', interactiveHelper: '실행 중 사용자 입력이 필요하며 예약 작업에서는 사용할 수 없습니다.', library: '스크립트 라이브러리', remoteLibrary: '원격 스크립트 라이브러리', create: '스크립트 추가', edit: '스크립트 수정', groupHelper: '스크립트 특성에 따라 다양한 그룹을 설정하여 스크립트 필터링 작업을 더 빠르게 수행할 수 있습니다.', handleHelper: '{0} 에서 {1} 스크립트를 실행합니다. 계속하시겠습니까?', noSuchApp: '{0} 서비스가 감지되지 않았습니다. 스크립트 라이브러리를 사용하여 먼저 빠르게 설치하세요!', syncHelper: '시스템 스크립트 라이브러리를 동기화합니다. 이 작업은 시스템 스크립트에만 적용됩니다. 계속하시겠습니까?', }, nextTime: '다음 5회 실행', logHelper1: '1. 1Panel 시스템 로그', backupContent: '백업 내용', cronSpecRule2: '실행 주기 형식이 올바르지 않습니다. 확인 후 다시 시도하세요.', executor: '실행자', cleanLog: '로그 자동 정리', cleanLogscope: '로그 보관 기간', }, monitor: { hostMonitor: '호스트 모니터링', gpuMonitor: 'GPU 모니터링', vllmMonitor: 'vLLM 모니터링', globalFilter: '전역 필터', enableMonitor: '모니터링 상태', storeDays: '보관 일수', defaultNetwork: '기본 네트워크 카드', defaultNetworkHelper: '모니터링 및 개요 인터페이스에 표시되는 기본 네트워크 카드 옵션', defaultIO: '기본 디스크', defaultIOHelper: '모니터링 및 개요 인터페이스에 표시되는 기본 디스크 옵션', cleanMonitor: '모니터링 기록 지우기', cleanHelper: '이 작업은 {0}의 모든 기록을 삭제합니다. 계속하시겠습니까?', avgLoad: '평균 부하', loadDetail: '부하 세부사항', resourceUsage: '자원 사용률', networkCard: '네트워크 인터페이스', read: '읽기', write: '쓰기', readWriteCount: 'I/O 작업', readWriteTime: 'I/O 지연 시간', today: '오늘', yesterday: '어제', lastNDay: '최근 {0}일', lastNMonth: '최근 {0}개월', lastHalfYear: '최근 반년', memory: '메모리', percent: '비율', cache: '캐시', disk: '디스크', network: '네트워크', up: '업', down: '다운', interval: '수집 간격', intervalHelper: '적절한 모니터링 수집 간격을 입력하세요 (10초 - 12시간)', runtimeDiagnostics: '런타임 진단', runtimeRSS: '프로세스 메모리 (RSS)', runtimeHeapAlloc: '힙 메모리', runtimeHeapObjects: '힙 객체', runtimeGoroutines: 'Goroutine 수', goroutineSnapshot: 'Goroutine 스냅샷', goroutineSummary: 'Goroutine {0}개를 호출 스택 {1}개로 그룹화', goroutineTruncated: '스냅샷이 너무 커서 일부 호출 스택만 표시됩니다.', captureSnapshot: '스냅샷 새로고침', count: '수량', topFunction: '최상위 함수', manualCapture: '수동 캡처', startCapture: '캡처 시작', capturing: '캡처 중', captureSuccess: '진단 파일이 생성되어 다운로드를 시작했습니다', profileCPU: 'CPU', profileHeap: '힙', profileGoroutine: 'Goroutine', profileMutex: '뮤텍스', profileBlock: '블록', runtimeRSSDesc: 'Go 힙, 스레드 스택 및 네이티브 메모리를 포함해 프로세스가 사용하는 실제 메모리입니다.', runtimeHeapAllocDesc: 'Go 힙에 할당되어 아직 해제되지 않은 메모리입니다. 지속적인 증가는 객체가 유지되고 있음을 나타낼 수 있습니다.', runtimeHeapObjectsDesc: 'Go 힙의 현재 활성 객체 수입니다. 지속적인 증가는 객체가 유지되고 있음을 나타낼 수 있습니다.', runtimeGoroutineDesc: '현재 경량 동시 작업 수입니다. 지속적으로 증가하면 Goroutine 누수를 확인해야 합니다.', profileCPUDesc: '선택한 시간 동안 CPU 호출 스택을 샘플링하여 CPU를 소비하는 함수를 찾습니다.', profileHeapDesc: '사용 중인 Go 힙 객체와 할당 스택을 기록하여 지속적인 메모리 증가를 조사합니다.', profileGoroutineDesc: '모든 Goroutine의 상태와 호출 스택을 저장하고 동일한 호출 경로를 그룹화합니다.', profileMutexDesc: 'Mutex 경합으로 인한 대기 시간을 측정하여 잠금 경합 지점을 찾습니다.', profileBlockDesc: 'Channel, Select 및 동기화 프리미티브의 차단 대기 시간을 측정합니다.', exportRange: '기간', exportMetrics: '보낼 지표', exportMetricsHelper: 'CPU, 메모리, 로드 지표는 하나의 테이블로 병합됩니다.', exportAllDevices: '장치별 (장치별 상세)', exportAllInterfaces: '인터페이스별 (인터페이스별 상세)', exportFormat: '보내기 형식', exportCsvHelper: '여러 지표를 선택하면 지표별 CSV 파일을 생성해 ZIP으로 묶습니다.', exportJsonHelper: '하나의 구조화된 JSON 파일로보냅니다.', exportXlsxHelper: '지표별로 개별 워크시트를 생성합니다.', exportTruncated: 'Excel 행 제한을 초과하여 다음 데이터셋이 잘렸습니다: {0}', exportEmptyTables: '선택한 기간에 데이터가 없는 지표: {0}', exportAggregate: '합계 (모든 장치 합산)', exportAllGPUs: '모델별 (모델별 상세)', exportOptionsFailed: '다음 지표의 장치 목록을 불러오지 못했습니다. 새로고침 후 다시 시도하세요: {0}', selectMetrics: '보낼 지표를 하나 이상 선택하세요', selectTimeRange: '보낼 기간을 선택하세요', }, terminal: { showTerminalButton: '터미널 바로가기', showTerminalButtonHelper: '활성화하면 페이지 오른쪽 하단에 터미널 바로가기 버튼이 표시됩니다.', local: '로컬', defaultConn: '기본 연결', defaultConnHelper: '이 작업은 【{0}】의 터미널을 연 후 자동으로 노드 터미널에 연결됩니다. 계속하시겠습니까?', withReset: '연결 정보 재설정', localConnJump: '기본 연결 정보는 [터미널 - 설정]에서 관리됩니다. 연결 실패 시 해당 위치에서 편집하세요!', nodeAdminLocalOnly: '노드 관리자는 로컬 터미널만 사용할 수 있습니다.', localHelper: '로컬 이름은 시스템 로컬 식별에만 사용됩니다.', connLocalErr: '자동 인증에 실패했습니다. 로컬 서버 로그인 정보를 입력해주세요.', testConn: '연결 테스트', saveAndConn: '저장 후 연결', connTestOk: '연결 정보가 유효합니다.', connTestFailed: '연결할 수 없습니다. 연결 정보를 확인해주세요.', host: '호스트 | 호스트들', createConn: '새 연결', noHost: '호스트 없음', groupChange: '그룹 변경', expand: '모두 확장', fold: '모두 축소', batchInput: '배치 처리', quickCommand: '빠른 명령 | 빠른 명령들', noSuchCommand: '가져온 CSV 파일에서 빠른 명령어 데이터를 찾을 수 없습니다. 확인 후 다시 시도하세요!', quickCommandHelper: '"터미널 -> 터미널" 하단에서 빠른 명령을 사용할 수 있습니다.', groupDeleteHelper: '그룹을 제거하면 해당 그룹의 모든 연결이 기본 그룹으로 이동됩니다. 계속하시겠습니까?', quickCommandBatchHelper: '한 줄에 하나의 빠른 명령을 이름---명령 형식으로 입력하세요. 예: 디스크 확인---df -h', command: '명령', quickCmd: '빠른 명령', addHost: '추가', localhost: '로컬호스트', ip: '주소', authMode: '인증 방식', passwordMode: '비밀번호', rememberPassword: '인증 정보 기억하기', keyMode: '개인 키', key: '개인 키', keyPassword: '개인 키 비밀번호', emptyTerminal: '현재 연결된 터미널이 없습니다.', sessionReconnecting: '연결이 끊어졌습니다. 다시 연결하는 중...', sessionExpired: '세션을 더 이상 사용할 수 없습니다. Enter 키를 누르거나 다시 연결을 클릭하여 새 세션을 여세요', sessionKicked: '이 세션은 다른 창에서 열렸습니다', sessionCount: '세션 {0}개', sessionRules: '터미널 세션 규칙', sessionRuleClose: '터미널을 닫으면 세션이 즉시 종료됩니다.', sessionRuleDisconnect: '새로고침, 브라우저 종료, 네트워크 끊김 후 30분 이내에 복구할 수 있습니다.', sessionRuleRevalidate: '로그인이 무효이거나 인증 시간이 초과되면 세션이 종료됩니다.', sessionRuleResources: '터미널이 많을수록 리소스 사용량이 늘어납니다. 사용하지 않는 터미널은 닫아 주세요.', sessionRuleDisableShortcut: '「터미널 - 설정」에서 터미널 바로가기를 비활성화할 수 있습니다.', minimize: '최소화', closeAllSessions: '모든 세션 닫기', closeAllConfirm: '모든 터미널 세션이 끊기며 복구할 수 없습니다. 계속하시겠습니까?', disableShortcutConfirm: '터미널 바로가기를 비활성화하면 해당 세션이 모두 연결 해제됩니다. 계속하시겠습니까?', lineHeight: '줄 높이', letterSpacing: '자간', fontSize: '글꼴 크기', fontFamily: '글꼴 세트', fontFamilySupportHelper: '글꼴을 선택하거나 직접 입력할 수 있습니다. 적용 여부는 브라우저가 실행 중인 시스템에 해당 글꼴이 설치되어 있는지에 따라 달라지며, 미설치 시 자동으로 폴백됩니다. 비어 있으면 기본 글꼴을 사용합니다.', backgroundColor: '배경색', foregroundColor: '전경색', cursorBlink: '커서 깜박임', cursorStyle: '커서 스타일', cursorUnderline: '밑줄', cursorBlock: '블록', cursorBar: '막대', scrollback: '스크롤백', scrollSensitivity: '스크롤 감도', aiAssistant: 'AI 도우미', aiAccountHelper: '선택한 모델 계정으로 명령을 생성하고 채웁니다. Ollama, vLLM 같은 로컬 모델은 사용자 지정 모델 계정을 사용하세요.', aiPrefix: '트리거 접두사', aiPrefixHelper: '"접두사 + 공백"을 입력하고 Enter를 누르면 AI 명령 생성이 시작됩니다. 예: {0} 디스크 정보를 조회해줘.', aiRiskCommands: '위험 명령 차단', aiRiskCommandsHelper: '차단할 위험 명령을 설정하세요(한 줄에 하나씩). 일치하면 생성이 차단되고 주석으로 다시 채워집니다.', aiSummary: '{0} 접두사로 시작하는 줄에서 Enter를 누르면 AI 명령 생성이 트리거됩니다.', aiPrefixAsciiVisible: 'ASCII 표시 가능 문자만 지원합니다. 공백, CJK 문자 및 전각 기호는 사용할 수 없습니다.', saveHelper: '현재 터미널 설정을 저장하시겠습니까?', }, toolbox: { common: { toolboxHelper: '일부 설치 및 사용 문제는 다음을 참고하세요', }, swap: { swap: '스왑 파티션', swapHelper1: '스왑 크기는 물리적 메모리의 1~2배로 설정해야 하며, 특정 요구 사항에 따라 조정 가능합니다.', swapHelper2: '스왑 파일을 생성하기 전에 시스템 디스크에 충분한 가용 공간이 있는지 확인하세요. 스왑 파일 크기만큼 디스크 공간이 점유됩니다.', swapHelper3: '스왑은 메모리 압력을 완화하는 데 도움이 될 수 있지만, 단지 대안일 뿐입니다. 스왑에 과도하게 의존하면 시스템 성능이 저하될 수 있으므로 메모리를 추가하거나 애플리케이션 메모리 사용을 최적화하는 것을 우선적으로 고려해야 합니다.', swapHelper4: '스왑 사용량을 정기적으로 모니터링하여 시스템이 정상적으로 작동하는지 확인하는 것이 좋습니다.', swapDeleteHelper: '이 작업은 스왑 파티션 {0}을 제거합니다. 시스템 보안상의 이유로 해당 파일은 자동으로 삭제되지 않습니다. 삭제가 필요한 경우 수동으로 진행하세요!', saveHelper: '현재 설정을 먼저 저장해주세요!', saveSwap: '현재 구성을 저장하면 스왑 파티션 {0}의 크기가 {1}(으)로 조정됩니다. 계속하시겠습니까?', swapMin: '최소 파티션 크기는 40 KB입니다. 수정 후 다시 시도해주세요!', swapMax: '파티션 크기의 최대값은 {0}입니다. 수정 후 다시 시도해주세요!', swapOff: '최소 파티션 크기는 40 KB입니다. 0으로 설정하면 스왑 파티션이 비활성화됩니다.', }, device: { dnsHelper: 'DNS 서버', dnsAlert: '/etc/resolv.conf 파일의 구성을 수정하면 시스템 재부팅 후 파일이 기본값으로 복원됩니다.', dnsHelper1: 'DNS 항목이 여러 개인 경우 각 항목을 새 줄에 표시해야 합니다. 예:\n114.114.114.114\n8.8.8.8', hostsHelper: '호스트 이름 해석', hosts: '도메인', hostAlert: '주석 처리된 기록은 숨겨져 있습니다. 모든 구성 버튼을 클릭하여 보거나 설정하세요.', toolbox: '빠른 설정', hostname: '호스트 이름', passwd: '시스템 비밀번호', passwdHelper: '입력 문자는 $ 및 &를 포함할 수 없습니다.', timeZone: '시간대', localTime: '서버 시간', timeZoneChangeHelper: '시스템 시간대를 변경하려면 서비스를 재시작해야 합니다. 계속하시겠습니까?', timeZoneHelper: '"timedatectl" 명령이 설치되지 않은 경우 시간대를 변경할 수 없습니다. 시스템은 시간대 변경에 이 명령을 사용합니다.', timeZoneCN: '베이징', timeZoneAM: '로스앤젤레스', timeZoneNY: '뉴욕', ntpALi: '알리바바', ntpGoogle: '구글', syncSite: 'NTP 서버', hostnameHelper: '호스트 이름 수정은 "hostnamectl" 명령에 따라 달라집니다. 명령이 설치되지 않은 경우 수정이 실패할 수 있습니다.', userHelper: '사용자 이름은 "whoami" 명령을 사용하여 검색됩니다. 명령이 설치되지 않은 경우 검색이 실패할 수 있습니다.', passwordHelper: '비밀번호 수정은 "chpasswd" 명령에 따라 달라집니다. 명령이 설치되지 않은 경우 수정이 실패할 수 있습니다.', hostHelper: '제공된 내용에 빈 값이 포함되어 있습니다. 확인 후 수정하여 다시 시도해주세요!', dnsCheck: '가용성 테스트', dnsOK: 'DNS 구성 정보가 유효합니다!', dnsTestFailed: 'DNS 구성 정보가 유효하지 않습니다.', syncSiteHelper: '{0}을(를) 기준으로 시스템 시간을 동기화하시겠습니까?', }, fail2ban: { sshPort: 'SSH 포트 청취', sshPortHelper: '현재 Fail2ban 은 호스트의 SSH 연결 포트를 청취합니다.', unActive: '현재 Fail2ban 서비스가 활성화되어 있지 않습니다.', operation: 'Fail2ban 서비스에서 "{0}" 작업을 수행합니다. 계속하시겠습니까?', fail2banChange: 'Fail2ban 구성 수정', ignoreHelper: '허용 목록에 있는 IP는 차단되지 않습니다. 계속하시겠습니까?', bannedHelper: '차단 목록에 있는 IP는 서버에 의해 차단됩니다. 계속하시겠습니까?', maxRetry: '최대 재시도 횟수', banTime: '차단 시간', banTimeHelper: '기본 차단 시간은 10분이며, -1은 영구 차단을 나타냅니다.', banTimeRule: '유효한 차단 시간 또는 -1을 입력하세요.', banAllTime: '영구 차단', findTime: '탐지 기간', banAction: '차단 작업', banActionOption: '{0}을(를) 사용하여 지정된 IP 주소 차단', allPorts: ' (모든 포트)', ignoreIP: 'IP 허용 목록', bannedIP: 'IP 차단 목록', logPath: '로그 경로', logPathHelper: '기본값은 /var/log/secure 또는 /var/log/auth.log입니다.', }, ftp: { ftp: 'FTP 계정 | FTP 계정들', notStart: 'FTP 서비스가 현재 실행 중이 아닙니다. 먼저 시작하세요!', initHelper: 'FTP 사용자 ID가 초기화되지 않았습니다. 먼저 상단 상태 표시줄에서 초기화를 클릭하세요.', operation: 'FTP 서비스에서 "{0}" 작업을 수행합니다. 계속하시겠습니까?', noPasswdMsg: '현재 FTP 계정의 비밀번호를 가져올 수 없습니다. 비밀번호를 설정한 후 다시 시도하세요!', enableHelper: '선택한 FTP 계정을 활성화하면 접근 권한이 복원됩니다. 계속하시겠습니까?', disableHelper: '선택한 FTP 계정을 비활성화하면 접근 권한이 취소됩니다. 계속하시겠습니까?', syncHelper: '서버와 데이터베이스 간의 FTP 계정 데이터를 동기화합니다. 계속하시겠습니까?', dirSystem: '이 디렉터리는 시스템 예약 디렉터리입니다. 수정 시 시스템 충돌이 발생할 수 있으니 수정 후 다시 시도하세요!', dirHelper: 'FTP 활성화를 위해 디렉터리 권한 변경이 필요합니다. 신중하게 선택하세요', dirMsg: 'FTP 활성화 시 {0} 디렉터리 전체의 권한이 변경됩니다. 계속하시겠습니까?', }, clam: { clam: '바이러스 검사', cron: '예약 스캔', cronHelper: '상용 버전에서 예약 스캔 기능을 지원합니다.', specErr: '실행 일정 형식 오류입니다. 확인 후 다시 시도하세요!', disableMsg: '예약 실행을 중지하면 이 스캔 작업이 자동으로 실행되지 않습니다. 계속하시겠습니까?', enableMsg: '예약 실행을 활성화하면 이 스캔 작업이 정기적으로 자동 실행됩니다. 계속하시겠습니까?', showFresh: '서명 업데이트 서비스 표시', hideFresh: '서명 업데이트 서비스 숨기기', clamHelper: 'ClamAV의 최소 권장 구성은 다음과 같습니다: RAM 3 GiB 이상, 2.0 GHz 이상의 단일 코어 CPU, 최소 5 GiB의 사용 가능한 하드 디스크 공간.', notStart: 'ClamAV 서비스가 현재 실행 중이 아닙니다. 먼저 시작하세요!', removeRecord: '보고서 파일 삭제', noRecords: '"Trigger" 버튼을 클릭하여 스캔을 시작하면 이곳에서 기록을 확인할 수 있습니다.', removeInfected: '바이러스 파일 삭제', removeInfectedHelper: '작업 중 감지된 바이러스 파일을 삭제하여 서버 보안 및 정상 작동을 보장합니다.', clamCreate: '스캔 규칙 생성', infectedStrategy: '감염 파일 처리 전략', removeHelper: '바이러스 파일을 삭제합니다. 신중히 선택하세요!', move: '이동', moveHelper: '바이러스 파일을 지정된 디렉토리로 이동합니다.', copyHelper: '바이러스 파일을 지정된 디렉토리로 복사합니다.', none: '조치 안 함', noneHelper: '바이러스 파일에 대해 아무 조치도 취하지 않습니다.', scanDir: '스캔 디렉토리', infectedDir: '감염 파일 디렉토리', scanDate: '스캔 날짜', scanResult: '스캔 로그 출력', tail: '라인', infectedFiles: '감염된 파일', log: '상세 내용', clamConf: 'Clam AV 데몬', clamLog: '@:toolbox.clam.clamConf 로그', freshClam: 'FreshClam', freshClamLog: '@:toolbox.clam.freshClam 로그', alertHelper: '상용 버전에서 예약 스캔 및 SMS 알림을 지원합니다.', alertTitle: '바이러스 스캔 작업 「{0}」에서 감염된 파일을 발견했습니다.', }, }, logs: { core: '패널 서비스', agent: '노드 모니터링', panelLog: '패널 로그', operation: '작업 로그', login: '로그인 로그', loginIP: '로그인 IP', loginAddress: '로그인 주소', loginAgent: '로그인 에이전트', loginStatus: '상태', system: '시스템 로그', hostSystem: '호스트 로그', previousPage: '이전 페이지', nextPage: '다음 페이지', filter: '메시지 필터', service: '서비스', priority: '우선순위', priorityEmergency: '긴급', priorityAlert: '경보', priorityCritical: '심각', priorityError: '오류', priorityWarning: '경고', priorityNotice: '알림', priorityInfo: '정보', priorityDebug: '디버그', message: '메시지', deleteLogs: '로그 정리', resource: '자원', detail: { dashboard: '개요', ai: 'AI', skills_hub: 'Skills Hub', ai_proxy: 'AI 프록시', ai_benchmark: '벤치마크', groups: '그룹', hosts: '호스트', apps: '애플리케이션', openresty: 'OpenResty', websites: '웹사이트', monitor: '웹사이트 모니터링', containers: '컨테이너', files: '파일 관리', runtimes: '실행 환경', process: '프로세스 관리', toolbox: '도구 상자', backups: '백업 / 복원', tampers: '변조 방지', xsetting: '인터페이스 설정', logs: '로그 감사', settings: '패널 설정', cronjobs: '예약 작업', waf: 'WAF', databases: '데이터베이스', licenses: '라이선스', nodes: '노드', commands: '빠른 명령', opsReport: '운영 보고서', ops_report: '운영 보고서', users: '사용자 관리', roles: '역할', auth: '로그인 인증', auth_sources: '인증 설정', alert: '경고 알림', sync: '리소스 동기화', exchange: '리소스 동기화', xapp: 'App', vms: '가상 머신 관리', }, websiteLog: '웹사이트 로그', runLog: '실행 로그', errLog: '에러 로그', task: '작업 로그', taskName: '작업 이름', taskRunning: '실행 중', }, file: { fileDirNum: '총 {0}개 디렉터리, {1}개 파일,', currentDir: '현재 디렉터리', dir: '폴더', fileName: '파일 이름', search: '검색', mode: '권한', editPermissions: '권한 편집', owner: '소유자', file: '파일', remoteFile: '원격에서 다운로드', share: '공유', sync: '데이터 동기화', size: '크기', updateTime: '수정됨', rename: '이름 바꾸기', role: '권한', info: '속성', linkFile: '소프트 링크', shareList: '공유 목록', fileTools: '파일 도구', aiSearchHitLines: '일치하는 줄', aiSearch: 'AI 검색', aiSearchTitle: 'AI 검색', aiSearchHint: '파일 내용을 줄 단위로 검색합니다. 검색창 오른쪽 버튼과 아래의 "고급 조건"에서 검색 방식을 바꿀 수 있습니다. AI 계정을 활성화하고 저장하면 Markdown 요약도 생성할 수 있습니다.', aiSearchAccountTitle: 'AI 계정', aiSearchAccountIntro: '요약 생성을 위한 대형 모델 계정을 선택하세요. 변경 후 저장을 눌러주세요.', aiSearchAccountEnable: '파일 AI 검색 활성화', aiSearchSaveAccount: '계정 설정 저장', aiSearchSectionQuery: '검색', aiSearchSectionConditions: '검색 조건', aiSearchResultsSection: '분석 결과', aiSearchContentLabel: '검색 내용', aiSearchDirLabel: '디렉터리', aiSearchExtLabel: '파일 확장자', aiSearchModifiedPreset: '수정 시간', aiSearchSizePresetLabel: '파일 크기', aiSearchTimeAny: '기간 없음', aiSearchTime3h: '최근 3시간', aiSearchTime1d: '최근 1일', aiSearchTime7d: '최근 7일', aiSearchTime30d: '최근 30일', aiSearchTimeCustom: '사용자 지정', aiSearchSizeAny: '크기 제한 없음', aiSearchSize0_10mb: '0 ~ 10 MB', aiSearchSize10_100mb: '10 MB ~ 100 MB', aiSearchSize100_1gb: '100 MB ~ 1 GB', aiSearchSizeGte1gb: '1 GB 이상', aiSearchSizeCustom: '사용자 지정(바이트)', aiSearchPlaceholder: '검색 내용을 입력하세요', aiSearchContainSub: '하위 폴더', aiSearchMaxItems: '검색 대상 경로/파일 수 상한(디렉터리 열람, 1–2000)', aiSearchRun: '분석 시작', aiSearchTruncated: '디렉터리 항목이 너무 많아 일부만 포함되었습니다. 결과가 완전하지 않을 수 있습니다.', aiSearchPreFiltered: '키워드로 상대 경로를 미리 필터링하여 모델에 보낼 항목 수를 줄였습니다.', aiSearchMeta: '분석 항목: {0} | 소요 시간 {1} | Token {2}', aiSearchQueryRequired: '검색 내용이나 키워드를 입력하세요', aiSearchContentHits: '내용 일치', aiSearchContentScanMeta: '내용 스캔: {0}개의 텍스트 파일을 읽었습니다(현재 검색 조건, 크기/개수 제한 적용).', aiSearchNoLineHits: '스캔한 텍스트 파일에서 일치하는 줄이 없습니다.', aiSearchHitsTruncated: '일부 파일은 스캔되지 않았거나, 상한으로 인해 일치 목록이 잘렸습니다.', aiSearchHitFiles: '일치한 파일', aiSearchOpenFile: '편집기에서 열기', aiSearchOpenAtLine: '이 줄로 열기', aiSearchGrepOnlyHint: '현재 파일 AI가 비활성화되어 있습니다. 결정적인 내용 검색만 수행되며 모델은 호출되지 않습니다. 위에서 AI 계정을 활성화하고 저장하면 요약을 사용할 수 있습니다. 검색 줄과 아래 옵션은 계속 적용됩니다.', aiSearchMatchCase: '대소문자 구분', aiSearchWholeWord: '단어 전체 일치(영문 단어 경계 \\b)', aiSearchUseRegex: '정규식(Go RE2 문법)', aiSearchExtensions: '파일 확장자(쉼표 구분, 예: go,ts,md)', aiSearchMinSize: '최소 파일 크기(바이트, 0은 제한 없음)', aiSearchMaxSize: '최대 파일 크기(바이트, 0은 제한 없음)', aiSearchSectionAdvanced: '고급 조건', aiSearchLimitMaxItems: '검색 총 파일 수', aiSearchLimitMaxScan: '내용 스캔 파일 수', aiSearchLimitMaxBytes: '단일 파일 읽기 상한', aiSearchLimitHitsPerFile: '단일 파일 일치 줄 수', aiSearchLimitTotalHits: '총 일치 줄 수', aiSearchLimitUnitEntries: '개', aiSearchLimitUnitFiles: '파일', aiSearchLimitUnitBytes: 'B', aiSearchLimitUnitLines: '줄', aiSearchMaxScanFiles: '내용 스캔 최대 파일 수', aiSearchMaxFileBytes: '내용 스캔 시 각 파일에서 읽는 최대 바이트 수입니다. 위의 "파일 크기"와는 다르며, 이는 파일을 열어 비교할 때 실제 읽는 양을 제한합니다.', aiSearchMaxHitsPerFile: '단일 파일 최대 일치 줄 수', aiSearchMaxTotalHits: '총 일치 줄 수 상한', aiSearchGrepMetaContent: '내용 스캔: 검색 총 항목 {0}, 읽은 텍스트 파일 {1}개(현재 조건, 크기/개수 제한 적용). 소요 시간 {2}', aiSearchAdvancedResetDefaults: '기본 상한으로 복원', zip: '압축됨', group: '그룹', path: '경로', public: '기타', setRole: '권한 설정', link: '파일 링크', rRole: '읽기', wRole: '쓰기', xRole: '실행 가능', name: '이름', compress: '압축', deCompress: '압축 해제', compressType: '압축 형식', compressDst: '압축 경로', replace: '기존 파일 덮어쓰기', compressSuccess: '압축 성공', deCompressSuccess: '압축 해제 성공', deCompressDst: '압축 해제 경로', linkType: '링크 유형', softLink: '소프트 링크', hardLink: '하드 링크', linkPath: '링크 경로', selectFile: '파일 선택', downloadUrl: '원격 URL', downloadStart: '다운로드 시작됨', wgetUrlInvalid: '유효한 http(s) 다운로드 주소를 입력하세요', moveSuccess: '이동 성공', copySuccess: '복사 성공', pasteMsg: '대상 디렉토리의 오른쪽 상단에 있는 [붙여넣기] 버튼을 클릭하세요', move: '이동', calculate: '계산', remark: '비고', setRemark: '비고 설정', remarkPrompt: '비고를 입력하세요', remarkPlaceholder: '비고', remarkToggle: '비고', remarkToggleTip: '파일 비고 로드', canNotDeCompress: '이 파일은 압축 해제할 수 없습니다', uploadSuccess: '업로드 성공', downloadProcess: '다운로드 진행률', downloading: '다운로드 중...', infoDetail: '파일 속성', root: '루트 디렉터리', list: '파일 목록', sub: '하위 폴더', downloadSuccess: '다운로드 성공', downloadFailed: '다운로드 실패', downloadFailureDetail: '다운로드 실패: {error}', theme: '테마', language: '언어', eol: '줄 끝', history: '버전 기록', historyTitle: '버전 기록', historyHint: '파일 변경 전 버전을 기록하여 파일 내용의 변경 이력을 확인하고 내용 수정 버전으로 되돌릴 수 있습니다.', historySettingTitle: '버전 정책', historyEnable: '버전 기록 활성화', historyMaxPerPath: '파일당 보관 개수', historyDiskQuota: '전체 디스크 할당량 (MB)', historyCurrentScope: '현재 파일', historyAllScope: '전체 파일', historyDeleteConfirm: '선택한 변경 기록을 삭제하시겠습니까?', historyNeedFile: '먼저 파일을 열어주세요', historyRestore: '이 버전으로 복원', historyOperationOnlyHint: '선택한 항목은 파일 작업이며 버전 복원을 지원하지 않습니다.', historyCurrentFile: '현재 파일', historyLatestVersion: '왼쪽에는 기록 버전의 내용, 오른쪽에는 선택한 파일의 최신 버전 내용을 표시합니다', historyCompareTarget: '비교 대상', historyCompareTargetPath: '비교 경로', historyRestoreConfirm: '이 버전을 현재 파일로 복원하시겠습니까?', historyRestoreDirtyConfirm: '현재 파일에 저장되지 않은 변경 사항이 있습니다. 복원하면 덮어씌워집니다. 계속하시겠습니까?', historyRestoreSuccess: '버전 복원이 완료되었습니다', historyDirtyHint: '현재 편집기에는 저장되지 않은 변경 사항이 있습니다. 버전을 복원하면 덮어씌워집니다.', historyDiffHintCurrent: '왼쪽은 기록 버전의 내용, 오른쪽은 현재 파일 내용을 표시합니다', historyDiffHintAll: '왼쪽은 기록 버전의 내용, 오른쪽은 선택한 파일의 최신 버전을 표시합니다', copyDir: '복사', shareFile: '파일 공유', shareExpire: '유효 기간', shareExpire1h: '1시간', shareExpire6h: '6시간', shareExpire24h: '24시간', shareExpire3d: '3일', shareExpire7d: '7일', sharePassword: '암호', sharePasswordPlaceholder: '비워 두면 암호 없음', shareMaxDownloads: '최대 다운로드 횟수', shareMaxDownloadsHint: '0은 무제한', shareGenerate: '링크 만들기', shareRegenerate: '다시 공유', shareClose: '닫기', shareCancel: '공유 취소', shareCancelConfirm: '이 파일 공유를 취소하시겠습니까?', shareDetail: '상세', shareCopyLink: '링크 복사', shareLinkLabel: '공유 링크', shareQrCode: 'QR 코드', shareQrDialogTitle: '공유 링크 QR 코드 이미지', shareQrDialogHelper: '모바일 기기로 QR 코드를 스캔하세요', shareSaveImage: '이미지 저장', shareOpenImage: '이미지 열기', shareExtractFile: '파일 받기', shareDownloadingHint: '파일을 준비하는 중입니다. 곧 다운로드가 시작됩니다.', shareInvalid: '유효하지 않거나 만료된 공유 링크입니다', shareDownloadFailed: '다운로드에 실패했습니다. 잠시 후 다시 시도해 주세요', sharePasswordRequired: '접근 비밀번호', sharePasswordRequiredInput: '접근 비밀번호를 입력해 주세요', sharePasswordLengthHint: '접근 비밀번호 길이는 4-256자여야 합니다', shareDownloadPasswordTip: '이 링크는 비밀번호로 보호되어 있습니다. 입력 후 다운로드하세요.', shareRiskAlert: '외부 공유 링크에는 일정한 보안 위험이 있습니다. 신뢰할 수 있는 사람에게만 공유하고 민감한 정보가 노출되지 않도록 주의하세요.', sharePasswordSeparate: '암호가 설정되었습니다. 안전하게 전달하세요. 수신자는 URL에 &password=...를 추가하거나 해당 매개변수를 지원하는 클라이언트를 사용해야 합니다.', shareExpiresAt: '만료 시각', paste: '붙여넣기', changeOwner: '사용자 및 그룹 수정', containSub: '권한 변경을 하위 폴더에 적용', ownerHelper: 'PHP 운영 환경의 기본 사용자: 사용자 그룹은 1000:1000 입니다. 컨테이너 내부 및 외부에서 표시되는 불일치는 정상입니다.', searchHelper: '* 등의 와일드카드를 지원합니다', uploadFailed: '[{0}] 파일 업로드 실패', fileUploadStart: '[{0}] 업로드 중...', uploadOverallProgress: '전체 진행률', uploadCurrentFileProgress: '현재 파일', currentSelect: '현재 선택: ', unsupportedType: '지원되지 않는 파일 유형', deleteHelper: '다음 파일을 삭제하시겠습니까? 기본적으로 삭제 후 휴지통으로 이동합니다.', fileHelper: '참고:\n1. 검색 결과는 정렬할 수 없습니다.\n2. 폴더는 크기로 정렬할 수 없습니다.', forceDeleteHelper: '파일을 영구적으로 삭제합니다(휴지통으로 이동하지 않고 바로 삭제).', recycleBin: '휴지통', sourcePath: '원래 경로', deleteTime: '삭제 시간', confirmReduce: '다음 파일을 복원하시겠습니까?', reduceSuccess: '복원 성공', reduce: '복원', reduceHelper: '원래 경로에 동일한 이름의 파일이나 디렉터리가 있으면 덮어씁니다. 계속하시겠습니까?', clearRecycleBin: '정리', clearRecycleBinHelper: '휴지통을 정리하시겠습니까?', favorite: '즐겨찾기', removeFavorite: '즐겨찾기에서 제거하시겠습니까?', addFavorite: '즐겨찾기 추가 / 제거', addFavoriteAction: '즐겨찾기에 추가', removeFavoriteAction: '즐겨찾기에서 제거', clearList: '목록 정리', deleteRecycleHelper: '다음 파일을 영구적으로 삭제하시겠습니까?', typeErrOrEmpty: '[{0}] 파일 유형이 잘못되었거나 빈 폴더입니다.', dropHelper: '업로드하려는 파일을 여기에 드래그하세요', fileRecycleBin: '휴지통 활성화', fileRecycleBinMsg: '{0} 휴지통', wordWrap: '자동 줄바꿈', deleteHelper2: '선택한 파일을 삭제하시겠습니까? 삭제 작업은 되돌릴 수 없습니다.', ignoreCertificate: '안전하지 않은 서버 연결 허용', ignoreCertificateHelper: '안전하지 않은 서버 연결을 허용하면 데이터 유출 또는 변조가 발생할 수 있습니다. 이 옵션은 다운로드 소스를 신뢰할 때만 사용하세요.', useProxy: '프록시로 다운로드', useProxyHelper: '패널 설정의 프록시 서버로 원격 다운로드 주소에 접근합니다', uploadOverLimit: '파일 수가 1000 개를 초과했습니다! 압축하여 업로드하세요.', clashDidNotSupport: '파일 이름에 .1panel_clash 를 포함할 수 없습니다.', clashDeleteAlert: '"휴지통" 폴더는 삭제할 수 없습니다.', clashOpenAlert: '휴지통 디렉터리를 열려면 "휴지통" 버튼을 클릭하세요.', right: '앞으로', back: '뒤로', top: '처음으로 돌아가기', up: '뒤로가기', openWithVscode: 'VS Code 로 열기', vscodeHelper: '인증 방식, 호스트, 포트, 사용자명을 확인하세요. 키 인증을 사용하려면 먼저 VS Code를 실행하는 로컬 컴퓨터에서 SSH 설정을 완료해야 합니다.', vscodeCopyConfig: '설정 스크립트 복사', vscodeKeyHelper: '개인 키 다운로드 파일명은 설정된 경로를 기준으로 생성됩니다. 파일을 해당 경로에 저장하면 설정 스크립트가 파일을 확인하고 권한을 적용합니다.', vscodeKeyPath: 'SSH 개인 키 경로', vscodeKeyPathPlaceholder: '예: ~/.ssh/id_ed25519', vscodeSelectKey: 'SSH 개인 키', vscodeScriptPreview: 'SSH 설정 스크립트', vscodePasswordHelper: '비밀번호 인증은 로컬 SSH 설정에 기록되지 않습니다. 원격 호스트에 연결할 때 VS Code에서 비밀번호를 입력해야 합니다.', vscodePasswordHint: '비밀번호 인증은 설정된 호스트, 포트, 사용자명으로 연결합니다. 설정 스크립트나 개인 키 파일은 필요하지 않습니다.', vscodeScriptPreviewHint: 'VS Code를 실행하는 로컬 컴퓨터에서 설정 스크립트를 실행하면 원격 연결용 SSH 별칭이 등록됩니다. 호스트, 포트, 사용자명, 개인 키 또는 키 경로가 변경되면 다시 실행하세요.', vscodePasswordModeTitle: '비밀번호 인증', vscodePasswordModeHint: '비밀번호 인증은 설정된 호스트, 포트, 사용자명으로 연결합니다. 설정 스크립트나 개인 키 파일은 필요하지 않습니다.', vscodePasswordStep1: '호스트, 포트, 사용자명을 확인하세요.', vscodePasswordStep2: 'VS Code를 열고 연결 시 비밀번호를 입력하세요.', vscodePasswordStep3: '개인 키 다운로드는 필요하지 않습니다.', saveContentAndClose: '파일이 수정되었습니다. 저장 후 닫으시겠습니까?', saveAndOpenNewFile: '파일이 수정되었습니다. 저장 후 새 파일을 열겠습니까?', noEdit: '파일이 수정되지 않았습니다. 이 작업은 필요하지 않습니다!', noNameFolder: '제목 없는 폴더', noNameFile: '제목 없는 파일', minimap: '코드 미니맵', fileCanNotRead: '파일을 읽을 수 없습니다.', previewTruncated: '파일이 너무 커서 마지막 부분만 표시됩니다', previewEmpty: '파일이 비어 있거나 텍스트 파일이 아닙니다', previewLargeFile: '미리보기', panelInstallDir: '1Panel 설치 디렉터리는 삭제할 수 없습니다.', wgetTask: '다운로드 작업', stopWgetConfirm: '이 다운로드 작업을 중지하시겠습니까?', useServerFilename: '서버에서 제공한 파일 이름 사용', downloadRecordsNotRemoved: '일부 기록을 제거하지 못했습니다. 새로 고침 후 다시 시도하세요.', existFileTitle: '동일한 이름의 파일 경고', existFileHelper: '업로드한 파일에 동일한 이름의 파일이 포함되어 있습니다. 덮어쓰시겠습니까?', existFileSize: '파일 크기 (새로운 -> 오래된)', existFileDirHelper: '선택한 파일/폴더에 동일한 이름이 이미 존재합니다. 신중하게 작업하세요!', coverDirHelper: '덮어쓸 폴더를 선택하면 대상 경로로 복사됩니다!', noSuchFile: '파일 또는 디렉터리를 찾을 수 없습니다. 확인 후 다시 시도하세요.', setting: '설정', showHide: '숨김 파일 표시', noShowHide: '숨김 파일 숨기기', cancelUpload: '업로드 취소', cancelUploadHelper: '업로드를 취소할지 여부, 취소 후 업로드 목록이 비워집니다.', keepOneTab: '최소한 하나의 탭을 유지하세요', notCanTab: '더 이상 탭을 추가할 수 없습니다', convert: '파일 형식 변환', converting: '로 변환 중', fileCanNotConvert: '이 파일은 형식 변환을 지원하지 않습니다', formatType: '형식 종류', sourceFormat: '원본 형식', sourceFile: '원본 파일', saveDir: '저장 디렉토리', deleteSourceFile: '원본 파일 삭제 여부', convertHelper: '선택한 파일을 다른 형식으로 변환합니다', convertHelper1: '변환할 파일을 선택하세요', execConvert: '변환을 시작합니다. 작업 센터에서 변환 로그를 확인할 수 있습니다', convertLogs: '변환 로그', formatConvert: '형식 변환', }, ssh: { autoStart: '자동 시작', enable: '자동 시작 활성화', disable: '자동 시작 비활성화', sshAlert: '목록 데이터는 로그인 날짜를 기준으로 정렬됩니다. 시간대 변경이나 다른 작업이 수행되면 로그인 로그의 날짜에 차이가 발생할 수 있습니다.', sshAlert2: '"Fail2ban"을 "도구 상자"에서 사용하여 무차별 대입 공격을 시도하는 IP 주소를 차단할 수 있으며, 이는 호스트의 보안을 강화하는 데 도움이 됩니다.', sshOperate: 'SSH 서비스에서 "{0}" 작업을 수행합니다. 계속하시겠습니까?', sshChange: 'SSH 설정', sshChangeHelper: '"{0}"을(를) "{1}"로 변경하였습니다. 계속하시겠습니까?', sshFileChangeHelper: '구성 파일을 수정하면 서비스 가용성에 영향을 미칠 수 있습니다. 이 작업을 수행할 때는 주의하십시오. 계속하시겠습니까?', port: '포트', portHelper: 'SSH 서비스가 수신하는 포트를 지정하십시오.', listenAddress: '수신 주소', allV4V6: '0.0.0.0:{0}(IPv4) 및 :::{0}(IPv6)', listenHelper: 'IPv4와 IPv6 설정을 모두 비워두면 "0.0.0.0:{0}(IPv4)"와 ":::{0}(IPv6)"에서 수신합니다.', addressHelper: 'SSH 서비스가 수신할 주소를 지정하십시오.', permitRootLogin: '루트 사용자 로그인 허용', rootSettingHelper: '루트 사용자의 기본 로그인 방법은 "SSH 로그인 허용"입니다.', rootHelper1: 'SSH 로그인 허용', rootHelper2: 'SSH 로그인 비허용', rootHelper3: '키 로그인만 허용', rootHelper4: '미리 정의된 명령만 실행할 수 있습니다. 다른 작업은 수행할 수 없습니다.', passwordAuthentication: '비밀번호 인증', pwdAuthHelper: '비밀번호 인증을 활성화할지 여부입니다. 기본적으로 이 매개변수는 활성화되어 있습니다.', pubkeyAuthentication: '키 인증', privateKey: '개인 키', publicKey: '공개 키', password: '비밀번호', existingPassPhrase: '기존 개인 키 암호', existingPassPhraseHelper: '개인 키가 암호화되어 있으면 원래 암호를 입력하고, 그렇지 않으면 비워 두세요. 이 작업은 암호를 변경하지 않습니다.', createMode: '생성 방식', generate: '자동 생성', unSyncPass: '키 비밀번호 동기화 불가', syncHelper: '동기화 작업으로 유효하지 않은 키를 정리하고 새로운 완전한 키 쌍을 동기화합니다. 계속하시겠습니까?', input: '수동 입력', import: '파일 업로드', authKeys: '인증 키', authKeysHelper: '현재 공개 키 정보를 저장하시겠습니까?', pubkey: '키 정보', encryptionMode: '암호화 모드', pubKeyHelper: '현재 키 정보는 사용자 {0}에게만 적용됩니다', passwordHelper: '6~10자리 숫자 및 영어 대소문자를 포함할 수 있습니다.', reGenerate: '키 재생성', keyAuthHelper: '키 인증을 활성화할지 여부입니다.', useDNS: 'useDNS', dnsHelper: 'SSH 서버에서 DNS 확인 기능을 활성화하여 연결의 신원을 확인할지 여부를 제어합니다.', confFileOrderHelper: '드롭다운으로 구성 파일을 전환해 바로 편집/저장하세요. 적용은 로드 순서 기준이며, 먼저 로드된 값이 우선합니다.', confFileOrderLabel: '{0} (로드 순서 #{1})', analysis: '통계 정보', denyHelper: "'거부' 작업을 다음 주소에서 수행합니다. 설정 후 해당 IP는 서버에 접근할 수 없습니다. 계속하시겠습니까?", acceptHelper: "'수락' 작업을 다음 주소에서 수행합니다. 설정 후 해당 IP는 정상적으로 접근할 수 있습니다. 계속하시겠습니까?", noAddrWarning: '현재 [{0}] 주소가 선택되지 않았습니다. 확인 후 다시 시도하십시오!', loginLogs: 'SSH 로그', loginMode: '모드', authenticating: '키', publickey: '키', belong: '소속', local: '로컬', session: '세션 | 세션들', loginTime: '로그인 시간', loginIP: '로그인 IP', stopSSHWarn: '이 SSH 연결을 끊으시겠습니까?', remote: '원격 SSH', }, setting: { panel: '패널', user: '패널 사용자', userChange: '패널 사용자 변경', userChangeHelper: '패널 사용자를 변경하면 로그아웃됩니다. 계속하시겠습니까?', passwd: '패널 비밀번호', emailHelper: '비밀번호 복구용', watermark: '워터마크 설정', watermarkContent: '워터마크 내용', contentHelper: '{0} 은 노드 이름, {1} 은 노드 주소를 나타냅니다. 변수를 사용하거나 사용자 정의 이름을 입력할 수 있습니다.', watermarkColor: '워터마크 색상', watermarkFont: '워터마크 글꼴 크기', watermarkHeight: '워터마크 높이', watermarkWidth: '워터마크 너비', watermarkRotate: '회전 각도', watermarkGap: '간격', watermarkCloseHelper: '시스템 워터마크 설정을 해제하시겠습니까?', watermarkOpenHelper: '현재 시스템 워터마크 설정을 저장하시겠습니까?', title: '패널 별칭', panelPort: '패널 포트', titleHelper: '영문자, 한자, 숫자, 공백, 일반 특수 문자를 포함하여 3~30자의 길이를 지원합니다.', portHelper: '권장 포트 범위는 8888에서 65535 사이입니다. 참고: 서버에 보안 그룹이 있는 경우, 보안 그룹에서 새로운 포트를 사전에 허용해야 합니다.', portChange: '포트 변경', portChangeHelper: '서비스 포트를 수정하고 서비스를 다시 시작합니다. 계속하시겠습니까?', theme: '테마', menuTabs: '메뉴 탭', menuTabsHelper: '활성화한 후 탭의 잠금 버튼을 클릭하면 페이지 세션을 유지할 수 있습니다.', menuAccordion: '메뉴 다중 펼침', menuAccordionHelper: '활성화하면 사이드바의 여러 메뉴 그룹을 동시에 펼쳐 둘 수 있습니다.', dark: '다크', darkGold: '다크 골드', light: '라이트', auto: '시스템 따라가기', language: '언어', runtimeEnv: '실행 환경', docSource: '문서 출처', withByRegion: '운영 지역 따름(기본값)', withByLang: '시스템 언어 따름', region: '운영 지역', cn: '중국 본토', intl: '글로벌', regionHelper: '실행 지역을 변경하면 다음 리소스 출처가 전환됩니다:', regionHelper1: '시스템 설치 패키지', regionHelper2: '앱 스토어 및 스크립트 라이브러리', regionHelper3: '사용자 매뉴얼 및 관련 문서', regionHelper4: '향후 다운로드 및 접근에 영향을 줄 수 있습니다. 주의하십시오.', regionTip: '운영 지역은 시스템 업데이트 소스와 설치 패키지 다운로드 주소에 영향을 미칩니다.', docSourceTip: '문서 출처는 문서와 업데이트 로그의 이동 언어를 결정합니다.', languageHelper: '기본적으로 브라우저 언어를 따릅니다. 이 설정은 현재 브라우저에서만 적용됩니다.', sessionTimeout: '세션 타임아웃', sessionTimeoutError: '최소 세션 타임아웃은 300초입니다.', sessionTimeoutHelper: '패널에서 {0}초 이상 조작이 없을 경우 자동으로 로그아웃됩니다.', systemIP: '기본 접근 주소', systemIPHelper: '애플리케이션 리다이렉트, 컨테이너 접근 등의 기능은 이 주소를 사용하여 라우팅됩니다. 각 노드마다 다른 주소를 설정할 수 있습니다.', proxy: '서버 프록시', proxyHelper: '프록시 서버를 설정한 후 다음 시나리오에서 적용됩니다:', proxyHelper1: '설치 패키지 다운로드 및 앱 스토어 동기화 (상용 버전 전용)', proxyHelper2: '시스템 업데이트 및 업데이트 정보 확인 (상용 버전 전용)', proxyHelper4: 'Docker 이미지 pull 같은 네트워크 요청은 프록시 서버를 통해 처리됩니다 (상용 버전 전용)', proxyHelper3: '시스템 라이선스 인증 및 동기화', proxyHelper5: '시스템 스크립트 라이브러리 통합 다운로드 및 동기화 (상용 버전 기능)', proxyHelper6: '인증서 신청 (상용 버전 기능)', proxyType: '프록시 유형', proxyUrl: '프록시 주소', proxyPort: '프록시 포트', proxyPasswdKeep: '비밀번호 기억', proxyDocker: 'Docker 프록시', proxyDockerHelper: '프록시 서버 구성을 Docker 에 동기화하여 오프라인 서버 이미지 가져오기 등의 작업을 지원합니다.', syncToNode: '자식 노드로 동기화', syncToNodeHelper: '다른 노드로 설정 동기화', nodes: '노드', selectNode: '노드 선택', selectNodeError: '노드를 선택해 주세요', apiInterface: 'API 활성화', apiInterfaceClose: '비활성화하면 API 인터페이스에 접근할 수 없습니다. 계속하시겠습니까?', apiInterfaceHelper: '서드파티 애플리케이션이 API 에 접근할 수 있도록 허용합니다.', apiInterfaceAlert1: '운영 환경에서는 활성화하지 마십시오. 서버 보안 위험이 증가할 수 있습니다.', apiInterfaceAlert2: '잠재적인 보안 위협을 방지하기 위해 서드파티 애플리케이션으로 API를 호출하지 마십시오.', apiInterfaceAlert3: 'API 문서', apiInterfaceAlert4: '사용 설명서', apiKey: 'API 키', apiKeyHelper: 'API 키는 서드파티 애플리케이션이 API 에 접근하는 데 사용됩니다.', ipWhiteList: 'IP 허용 목록', ipWhiteListEgs: '한 줄에 하나씩 입력하십시오. 예:\n172.161.10.111\n172.161.10.0/24', ipWhiteListHelper: '허용 목록에 있는 IP만 API 에 접근할 수 있습니다. 0.0.0.0/0(모든 IPv4), ::/0(모든 IPv6)', apiTrustedProxies: 'API 신뢰 프록시', apiTrustedProxiesEgs: '프록시 서버 IP 또는 CIDR을 한 줄에 하나씩 입력하십시오. 예:\n172.16.10.111\n172.16.10.0/24', apiTrustedProxiesHelper: '리버스 프록시를 사용하는 경우 해당 IP 또는 네트워크를 입력하세요. 비워 두면 어떤 프록시도 신뢰하지 않고 직접 연결된 출발지 IP를 사용합니다. 0.0.0.0/0 및 ::/0은 지원되지 않습니다.', apiKeyValidityTime: '인터페이스 키 유효 기간', apiKeyValidityTimeEgs: '인터페이스 키 유효 기간 (분 단위)', apiKeyValidityTimeHelper: '요청 타임스탬프부터 계산되는 요청 서명의 유효 기간이며, 단위는 분입니다. 0으로 설정하면 타임스탬프를 검사하지 않습니다.', apiKeyReset: '인터페이스 키 재설정', apiKeyResetHelper: '연관된 키 서비스가 무효화됩니다. 서비스에 새 키를 추가하십시오.', confDockerProxy: 'Docker 프록시 구성', restartNowHelper: 'Docker 프록시 구성을 위해 Docker 서비스를 재시작해야 합니다.', restartNow: '즉시 재시작', restartLater: '나중에 수동으로 재시작', systemIPWarning: '현재 노드에 기본 접근 주소가 설정되지 않았습니다. 패널 설정에서 설정해 주세요!', systemIPWarning1: '현재 서버 주소는 {0}으로 설정되어 있어 빠른 리디렉션이 불가능합니다!', syncTime: '서버 시간', timeZone: '시간대', timeZoneChangeHelper: '시간대를 변경하면 서비스를 재시작해야 합니다. 계속하시겠습니까?', timeZoneHelper: '시간대 변경은 시스템 timedatectl 서비스에 따라 작동하며, 1Panel 서비스 재시작 후 적용됩니다.', timeZoneCN: '베이징', timeZoneAM: '로스앤젤레스', timeZoneNY: '뉴욕', ntpALi: '알리바바', ntpGoogle: '구글', syncSite: 'NTP 서버', syncSiteHelper: '이 작업은 {0}을(를) 시스템 시간 동기화의 소스로 사용합니다. 계속하시겠습니까?', changePassword: '비밀번호 변경', oldPassword: '기존 비밀번호', newPassword: '새 비밀번호', retryPassword: '비밀번호 확인', passwordEmptyTip: '현재 비밀번호를 변경하지 않으려면 비워 두세요', noSpace: '입력 정보에 공백 문자를 포함할 수 없습니다.', duplicatePassword: '새 비밀번호는 기존 비밀번호와 동일할 수 없습니다. 다시 입력하십시오!', diskClean: '캐시 정리', developerMode: '미리보기 프로그램', developerModeHelper: '새로운 기능과 수정 사항을 정식 출시 전에 체험하고 초기 피드백을 제공할 수 있습니다.', thirdParty: '서드파티 계정', noTypeForCreate: '현재 생성된 백업 유형이 없습니다.', LOCAL: '서버 디스크', OSS: 'Ali OSS', S3: 'Amazon S3', mode: '모드', MINIO: 'MinIO', SFTP: 'SFTP', WebDAV: 'WebDAV', WebDAVAlist: 'Alist 에 WebDAV 를 연결하는 방법은 공식 문서를 참조하십시오.', OneDrive: 'Microsoft OneDrive', isCN: 'Century Internet', isNotCN: '국제 버전', client_id: '클라이언트 ID', client_secret: '클라이언트 시크릿', redirect_uri: '리디렉션 URL', onedrive_helper: '사용자 정의 구성은 공식 문서를 참조하십시오.', refreshTime: '토큰 갱신 시간', refreshStatus: '토큰 갱신 상태', backupDir: '백업 디렉터리', codeWarning: '현재 인증 코드 형식이 올바르지 않습니다. 다시 확인하십시오!', code: '인증 코드', codeHelper: '"획득" 버튼을 클릭한 다음 {0}에 로그인하여 리디렉션된 링크에서 "code" 이후의 내용을 복사하십시오. 이 입력 상자에 붙여넣으십시오. 자세한 지침은 공식 문서를 참조하십시오.', googleHelper: '먼저 Google 애플리케이션을 생성하고 클라이언트 정보를 획득한 후 양식을 작성하고 획득 버튼을 클릭하세요. 구체적인 작업은 공식 문서를 참조하십시오.', loadCode: '획득', COS: 'Tencent COS', ap_beijing_1: '베이징 지역 1', ap_beijing: '베이징', ap_nanjing: '난징', ap_shanghai: '상하이', ap_guangzhou: '광저우', ap_chengdu: '청두', ap_chongqing: '충칭', ap_shenzhen_fsi: '선전 금융', ap_shanghai_fsi: '상하이 금융', ap_beijing_fsi: '베이징 금융', ap_hongkong: '홍콩, 중국', ap_singapore: '싱가포르', ap_mumbai: '뭄바이', ap_jakarta: '자카르타', ap_seoul: '서울', ap_bangkok: '방콕', ap_tokyo: '도쿄', na_siliconvalley: '실리콘밸리 (미국 서부)', na_ashburn: '애쉬번 (미국 동부)', na_toronto: '토론토', sa_saopaulo: '상파울루', eu_frankfurt: '프랑크푸르트', KODO: 'Qiniu Kodo', scType: '스토리지 유형', typeStandard: '표준', typeStandard_IA: '저빈도 표준', typeArchive: '아카이브', typeDeep_Archive: '심층 아카이브', scLighthouse: '기본값: 경량 오브젝트 스토리지는 이 스토리지 유형만 지원합니다', scStandard: '표준 스토리지는 실시간 접근, 빈번한 데이터 상호작용이 필요한 핫 파일이 많은 비즈니스 시나리오에 적합합니다.', scStandard_IA: '저빈도 스토리지는 접근 빈도가 비교적 낮고 최소 30일 동안 데이터를 저장하는 비즈니스 시나리오에 적합합니다.', scArchive: '아카이브 스토리지는 접근 빈도가 극히 낮은 비즈니스 시나리오에 적합합니다.', scDeep_Archive: '내구성이 뛰어난 콜드 스토리지는 접근 빈도가 극히 낮은 비즈니스 시나리오에 적합합니다.', archiveHelper: '아카이브 스토리지 파일은 직접 다운로드할 수 없으며, 해당 클라우드 서비스 제공자의 웹사이트를 통해 복원해야 합니다. 신중히 사용하십시오!', backupAlert: 'S3 프로토콜을 지원하는 클라우드 공급자는 Amazon S3 를 사용하여 백업할 수 있습니다.', domain: '가속 도메인', backupAccount: '백업 계정 | 백업 계정', loadBucket: '버킷 가져오기', accountName: '계정 이름', accountKey: '계정 키', address: '주소', path: '경로', safe: '보안', passkey: '패스키', passkeyManage: '관리', passkeyKeyManagement: '키 관리', passkeyHelper: '빠른 로그인을 위해 최대 5개의 패스키를 등록할 수 있습니다', passkeyRequireSSL: '패스키는 도메인 바인딩과 HTTPS 접속이 필요합니다', passkeyTrustedProxies: '신뢰할 수 있는 프록시', passkeyTrustedProxiesHelper: '이 IP/CIDR 출처의 요청만 Forwarded와 X-Forwarded-Proto 헤더를 HTTPS 판단에 사용합니다', passkeyNotSupported: '브라우저/환경이 패스키를 지원하지 않습니다. 도메인과 HTTPS를 확인하세요', passkeyPrereqTitle: 'Passkey 사용을 위해 다음 전제 조건이 필요합니다', passkeyPrereqBindDomain: '1Panel 도메인 바인딩 구성됨', passkeyPrereqHttps: 'HTTPS를 통해 안전하게 접속됨', passkeyPrereqBrowser: '현재 환경이 Passkey를 지원합니다 (WebAuthn + 플랫폼 인증기)', passkeyPrereqBrowserDetailWebAuthnUnavailable: '시스템 브라우저로 접속하고, 바인딩된 도메인으로 HTTPS에서 패널을 열었는지 확인하세요.', passkeyPrereqBrowserDetailPlatformCapabilityUnavailable: '현재 환경에서는 기기 인증을 사용할 수 없습니다. 더 최신 OS의 시스템 브라우저에서 시도하세요.', passkeyPrereqBrowserDetailNoPlatformAuthenticator: '화면 잠금/지문/얼굴 인식/Windows Hello를 활성화한 뒤 다시 시도하세요.', passkeyPrereqBrowserDetailDetectFailed: '감지에 실패했습니다. 페이지를 새로고침 후 다시 시도하거나 시스템 브라우저로 전환하세요.', passkeyPrereqGoSetup: '설정', passkeyCount: '등록됨 {0}/{1}', passkeyName: '이름', passkeyNameHelper: '기기를 구분할 이름을 입력하세요', passkeyAdd: '패스키 추가', passkeyCreatedAt: '생성 시간', passkeyLastUsedAt: '최근 사용', passkeyDeleteConfirm: '삭제하면 이 패스키로 로그인할 수 없습니다. 계속하시겠습니까?', passkeyLimit: '최대 5개의 패스키를 등록할 수 있습니다', passkeyFailed: '패스키 등록에 실패했습니다. 패널 SSL 인증서가 신뢰할 수 있는지 확인하세요', bindInfo: '바인딩 정보', bindAll: '모두 수신', bindInfoHelper: '서비스 수신 주소나 프로토콜 변경은 서비스 불가 상태를 초래할 수 있습니다. 계속하시겠습니까?', ipv6: 'IPv6 수신', bindAddress: '수신 주소', entrance: '진입점', showEntrance: '"개요" 페이지에서 비활성화 경고 표시', entranceHelper: '보안 진입점을 활성화하면 지정된 보안 진입점을 통해서만 패널에 로그인할 수 있습니다.', entranceError: '5-116자의 안전한 로그인 진입점을 입력하십시오. 숫자나 문자만 지원됩니다.', entranceInputHelper: '공백으로 남기면 보안 진입점이 비활성화됩니다.', randomGenerate: '랜덤', expirationTime: '만료 날짜', unSetting: '미설정', noneSetting: '패널 비밀번호의 만료 시간을 설정합니다. 만료 후 비밀번호를 재설정해야 합니다.', expirationHelper: '비밀번호 만료 시간이 0일인 경우 비밀번호 만료 기능이 비활성화됩니다.', days: '비밀번호 만료 일수', expiredHelper: '현재 비밀번호가 만료되었습니다. 비밀번호를 다시 변경하십시오.', timeoutHelper: '패널 비밀번호가 {0}일 후 만료됩니다. 만료 후 비밀번호를 재설정해야 합니다.', complexity: '복잡성 검증', complexityHelper: '활성화하면 비밀번호는 8-30 자이며 영문, 숫자, 특수 문자 중 최소 두 가지를 포함해야 합니다.', bindDomain: '도메인 바인딩', unBindDomain: '도메인 바인딩 해제', panelSSL: '패널 SSL', unBindDomainHelper: '도메인 이름 바인딩 해제 작업은 시스템 보안에 영향을 미칠 수 있습니다. 계속하시겠습니까?', bindDomainHelper: '도메인을 바인딩한 후에는 해당 도메인을 통해서만 1Panel 서비스에 접근할 수 있습니다.', bindDomainHelper1: '공백으로 남기면 도메인 이름 바인딩이 비활성화됩니다.', bindDomainWarning: '도메인 바인딩 후 로그아웃되며 설정에 지정된 도메인 이름을 통해서만 1Panel 서비스에 접근할 수 있습니다. 계속하시겠습니까?', allowIPs: '허가된 IP', unAllowIPs: '허가되지 않은 IP', unAllowIPsWarning: '허가되지 않은 빈 IP를 설정하면 모든 IP가 시스템에 접근할 수 있어 시스템 보안에 영향을 미칠 수 있습니다. 계속하시겠습니까?', allowIPsHelper: '허가된 IP 주소 목록을 설정하면 목록에 있는 IP 주소만 패널 서비스에 접근할 수 있습니다.', allowIPsWarning: '허가된 IP 주소 목록을 설정하면 목록에 있는 IP 주소만 패널 서비스에 접근할 수 있습니다. 계속하시겠습니까?', allowIPsHelper1: '공백으로 남기면 IP 주소 제한이 비활성화됩니다.', allowIPsPrivateHelper: '사설 네트워크 주소도 제한됩니다. 로컬 접속에는 127.0.0.1 또는 ::1을 추가하고, 리버스 프록시에는 신뢰할 수 있는 프록시를 설정하세요.', allowIPEgs: '한 줄에 하나씩 입력하십시오. 예:\n172.16.10.111\n172.16.10.0/24', mfa: '2단계 인증', mfaClose: 'MFA를 비활성화하면 서비스 보안이 낮아집니다. 계속하시겠습니까?', secret: '비밀키', mfaInterval: '갱신 간격(초)', mfaTitleHelper: '제목은 다른 1Panel 호스트를 구별하는 데 사용됩니다. 제목을 수정한 후 다시 스캔하거나 비밀키를 수동으로 추가하세요.', mfaIntervalHelper: '갱신 간격을 변경한 후 다시 스캔하거나 비밀키를 수동으로 추가하세요.\n일부 인증 앱은 30초 간격만 지원합니다(예: Google/Microsoft Authenticator).', mfaAlert: '일회용 토큰은 현재 시간을 기반으로 생성된 동적 6자리 숫자입니다. 서버 시간이 동기화되어 있는지 확인하세요.', mfaHelper: '활성화 후 일회용 토큰 검증이 필요합니다.', mfaHelper1: '인증 앱을 다운로드하세요. 예를 들어,', mfaHelper2: '다음 QR 코드를 인증 앱으로 스캔하거나 비밀키를 복사하여 인증 앱에 입력하여 일회용 토큰을 획득하세요.', mfaHelper3: '앱에서 생성된 6자리 숫자를 입력하세요.', mfaCode: '일회용 토큰', sslChangeHelper: 'HTTPS 설정을 수정하고 서비스를 재시작합니다. 계속하시겠습니까?', sslDisable: '비활성화', sslDisableHelper: 'HTTPS 서비스를 비활성화하면 패널을 재시작해야 적용됩니다. 계속하시겠습니까?', noAuthSetting: '비인가 설정', noAuthSettingHelper: '지정된 보안 진입점을 사용하지 않거나, 지정된 IP 나 도메인에서 패널에 접근하지 않는 경우 이 응답은 패널 특성을 숨길 수 있습니다.', responseSetting: '응답 설정', help200: '도움말 페이지', error400: '잘못된 요청', error401: '권한 없음', error403: '접근 금지', error404: '페이지를 찾을 수 없음', error408: '요청 시간 초과', error416: '범위 불만족', error444: '연결 닫힘', error500: '서버 오류', https: '패널에 HTTPS를 설정하면 액세스 보안이 향상됩니다', strictHelper: '비 HTTPS 트래픽은 패널에 연결할 수 없습니다', muxHelper: '패널은 HTTP 및 HTTPS 프로토콜 모두를 수신하고 HTTP를 HTTPS로 리디렉션하지만 보안이 저하될 수 있습니다', certType: '인증서 유형', selfSigned: '자가 서명', selfSignedHelper: '자가 서명 인증서는 브라우저에서 신뢰하지 않을 수 있으며 보안 경고가 표시될 수 있습니다.', select: '선택', domainOrIP: '도메인 또는 IP:', timeOut: '시간 초과', rootCrtDownload: '루트 인증서 다운로드', primaryKey: '개인 키', certificate: '인증서', backupJump: '현재 백업 목록에 없는 파일입니다. 파일 디렉토리에서 다운로드하여 백업에 가져오기를 시도하세요.', snapshot: '스냅샷 | 스냅샷들', noAppData: '선택할 수 있는 시스템 앱이 없습니다', noBackupData: '선택할 수 있는 백업 데이터가 없습니다', stepBaseData: '기본 데이터', stepAppData: '시스템 앱', stepPanelData: '시스템 데이터', stepBackupData: '백업 데이터', stepOtherData: '기타 데이터', operationLog: '작업 로그 유지', loginLog: '접속 로그 유지', systemLog: '시스템 로그 유지', taskLog: '작업 로그 유지', monitorData: '모니터링 데이터 유지', dockerConf: 'Docker 설정', selectAllImage: '모든 앱 이미지를 백업', logLabel: '로그', agentLabel: '노드 설정', appDataLabel: '앱 데이터', appImage: '앱 이미지', appBackup: '앱 백업', backupLabel: '백업 디렉토리', confLabel: '설정 파일', dockerLabel: '컨테이너', taskLabel: '예약 작업', resourceLabel: '앱 리소스 디렉토리', runtimeLabel: '실행 환경', appLabel: '앱', databaseLabel: '데이터베이스', snapshotLabel: '스냅샷 파일', websiteLabel: '웹사이트', directoryLabel: '디렉토리', appStoreLabel: '앱 스토어', shellLabel: '스크립트', tmpLabel: '임시 디렉토리', sslLabel: '인증서 디렉토리', reCreate: '스냅샷 생성 실패', reRollback: '스냅샷 롤백 실패', deleteHelper: '타사 백업 계정에 포함된 스냅샷 파일을 포함하여 모든 스냅샷 파일이 삭제됩니다. 계속하시겠습니까?', status: '스냅샷 상태', ignoreRule: '무시 규칙', editIgnoreRule: '@:commons.button.edit @.lower:setting.ignoreRule', ignoreHelper: '이 규칙은 스냅샷을 생성할 때 1Panel 데이터 디렉토리를 압축하고 백업하는 데 사용됩니다. 기본적으로 소켓 파일은 무시됩니다.', ignoreHelper1: '한 줄에 하나씩 입력하세요. 예:\n*.log\n/opt/1panel/cache', panelInfo: '1Panel 기본 정보 쓰기', panelBin: '1Panel 시스템 파일 백업', daemonJson: 'Docker 구성 파일 백업', appData: '1Panel 에서 설치된 앱 백업', panelData: '1Panel 데이터 디렉토리 백업', backupData: '1Panel 의 로컬 백업 디렉토리 백업', compress: '스냅샷 파일 생성', upload: '스냅샷 파일 업로드', recoverDetail: '복구 세부정보', importHelper: '스냅샷 디렉토리: ', lastRecoverAt: '마지막 복구 시간', lastRollbackAt: '마지막 롤백 시간', reDownload: '백업 파일 다시 다운로드', recoverErrArch: '서버 아키텍처가 다른 스냅샷 복구는 지원되지 않습니다!', recoverErrSize: '디스크 공간이 부족합니다. 확인하거나 정리 후 다시 시도하세요!', recoverHelper: '스냅샷 {0} 에서 복구를 시작합니다. 계속하기 전에 다음 정보를 확인하세요:', recoverHelper1: '복구에는 Docker 및 1Panel 서비스를 재시작해야 합니다.', recoverHelper2: '서버에 충분한 디스크 공간이 있는지 확인하세요. (스냅샷 파일 크기: {0}, 사용 가능한 공간: {1})', recoverHelper3: '서버 아키텍처가 스냅샷이 생성된 서버의 아키텍처와 일치하는지 확인하세요. (현재 서버 아키텍처: {0})', recoverHelper4: '이 작업은 기본 노드만 롤백합니다. 업그레이드된 하위 노드가 있다면 먼저 하위 노드를 롤백한 후 계속 진행하세요.', rollback: '롤백', rollbackHelper: '이 복구를 롤백하면 해당 복구의 모든 파일이 대체되며 Docker 및 1Panel 서비스를 재시작해야 할 수 있습니다. 계속하시겠습니까?', upgradeHelper: '업그레이드에는 1Panel 서비스를 재시작해야 합니다. 계속하시겠습니까?', rollbackLocalHelper: '마스터 노드는 직접 롤백을 지원하지 않습니다. 수동으로 [1pctl restore] 명령어를 실행하여 롤백하세요!', noUpgrade: '현재 최신 버전입니다', upgradeNotes: '릴리스 노트', upgradeNow: '지금 업그레이드', source: '다운로드 소스', versionNotSame: '노드 버전이 메인 노드와 일치하지 않습니다. 노드 관리에서 업그레이드한 후 다시 시도해 주세요.', currentNodeVersionNotSame: '현재 노드 버전이 메인 노드와 일치하지 않습니다. 관리자에게 문의하여 현재 노드를 업그레이드하세요.', versionCompare: '노드 {0}이(가) 이미 업그레이드 가능한 최신 버전입니다. 마스터 노드 버전을 확인 후 다시 시도하세요!', about: '정보', versionItem: '현재 버전', backupCopies: '백업 수', backupCopiesHelper: '버전 롤백을 위해 보관할 업그레이드 백업 복사본 수를 설정합니다. 0은 모두 보관을 의미합니다.', release: '버전 업데이트 로그', releaseHelper: '현재 환경의 업데이트 로그를 가져오는 중 오류가 발생했습니다. 공식 문서에서 수동으로 확인하실 수 있습니다.', project: 'GitHub', issue: '이슈', doc: '공식 문서', star: '별', description: '리눅스 서버 패널', forum: '토론', doc2: '문서', currentVersion: '버전', license: '라이선스', bindNode: '노드 바인딩', menuSetting: '메뉴 설정', menuHide: '메뉴 숨김', menuSettingHelper: '하위 메뉴가 1개만 존재할 경우, 메뉴 바에는 해당 하위 메뉴만 표시됩니다', showAll: '모두 표시', hideALL: '모두 숨기기', ifShow: '표시 여부', menu: '메뉴', confirmMessage: '고급 메뉴 목록을 업데이트하려면 페이지가 새로 고쳐집니다. 계속하시겠습니까?', recoverMessage: '페이지가 새로고침되어 메뉴 목록이 초기 상태로 복원됩니다. 계속하시겠습니까?', compressPassword: '압축 비밀번호', backupRecoverMessage: '압축 또는 압축 해제 비밀번호를 입력하세요 (설정하지 않으려면 비워 두세요)', componentSize: '컴포넌트 크기', scope: '범위', public: '공개', publicHelper: '공개 타입 백업 계정은 각 하위 노드로 동기화되어 함께 사용할 수 있습니다', private: '비공개', privateHelper: '비공개 타입 백업 계정은 현재 노드에서만 생성되며 현재 노드에서만 사용됩니다', UPYUN: 'UPYUN', ALIYUN: 'Aliyun Drive', ALIYUNHelper: 'Aliyun Drive의 비클라이언트 다운로드 최대 용량은 100MB입니다. 초과 시 클라이언트로 다운로드하세요.', ALIYUNRecover: 'Aliyun Drive의 비클라이언트 다운로드 최대 용량은 100MB입니다. 초과 시 클라이언트로 로컬 다운로드 후 스냅샷을 동기화해 복원하세요.', GoogleDrive: 'Google Drive', analysis: '분석', analysisHelper: '전체 토큰 내용을 붙여넣으면 필요한 항목을 자동으로 파싱합니다. 자세한 내용은 공식 문서를 참고하세요.', serviceName: '서비스 이름', operator: '운영자', clickToRefresh: '클릭하여 새로고침', recoverFailed: '스냅샷 복원 실패', upgradeRecord: '업그레이드 기록', upgrading: '업그레이드 중, 잠시만 기다려 주세요...', versionHelper: '명명 규칙: [메이저].[기능].[버그 수정], 예시:', upgradeCheck: '업데이트 확인', }, license: { offLine: '오프라인 버전', community: 'OSS', oss: '오픈 소스 소프트웨어', ee: '엔터프라이즈 에디션', pro: 'Pro', trial: '체험판', add: '커뮤니티 에디션 추가', licenseBindHelper: '라이선스가 노드에 바인딩된 경우에만 무료 노드 할당량을 사용할 수 있습니다', licenseAlert: '라이선스가 노드에 정상적으로 바인딩된 경우에만 커뮤니티 에디션 노드를 추가할 수 있습니다. 라이선스에 정상적으로 바인딩된 노드만 전환이 지원됩니다.', licenseUnbindHelper: '이 라이선스에 커뮤니티 에디션 노드가 존재합니다. 바인딩 해제 후 다시 시도하세요!', subscription: '구독', perpetual: '영구 라이선스', product: '제품', versionConstraint: '{0} 버전 일시불 구매', forceUnbind: '강제 바인딩 해제', forceUnbindHelper: '강제 바인딩 해제를 수행하면 해제 과정에서 발생하는 오류를 무시하고 궁극적으로 라이센스 바인딩을 해제합니다.', updateForce: '강제 업데이트 (바인딩 해제 과정의 모든 오류를 무시하고 최종 작업 성공을 보장합니다)', trialInfo: '버전', authorizationId: '구독 ID', authorizedUser: '인증된 사용자', lostHelper: '라이센스가 최대 재시도 횟수를 초과했습니다. 상용 버전 기능이 제대로 작동하는지 확인하려면 동기화 버튼을 수동으로 클릭하세요.', quickUpdate: '빠른 업데이트', power: '권한 부여', unbindHelper: '연결 해제 후 모든 상용 버전 관련 설정이 초기화됩니다. 계속하시겠습니까?', importLicense: '라이센스', import: '가져오기', securityWarningTitle: '크랙 버전 또는 출처를 알 수 없는 라이선스를 사용하지 마세요.', securityWarningContent: '1Panel은 시스템 관리 권한을 가진 사용자로 실행해야 합니다. 비공식 라이선스 또는 변조된 버전은 서버 제어 상실, 데이터 유출 등 심각한 보안 위험을 초래할 수 있습니다. 라이선스와 설치 패키지는 FIT2CLOUD 공식 채널을 통해 받으세요.', importHelper: '라이센스 파일을 여기에 클릭하거나 드래그하세요', licenseRequiredTip: '아직 라이선스를 가져오지 않았습니다. 장치 ID를 복사해 라이선스를 받은 뒤 가져와야 로그인할 수 있습니다.', licenseRequiredShortTip: '먼저 장치 ID를 복사해 라이선스를 받은 뒤, 라이선스를 가져오면 로그인할 수 있습니다.', licenseRequiredUserTip: 'Enterprise Edition 라이선스가 바인딩되지 않았습니다. 슈퍼 관리자에게 라이선스 가져오기를 요청하세요.', restoreCommunity: '커뮤니티 버전 복원', restoreCommunityOnline: '온라인 복원', restoreCommunityOffline: '오프라인 복원', restoreCommunityPackageFound: '설치 패키지 준비 완료', restoreCommunityPackageMissing: '설치 패키지 배치 대기 중', restoreCommunityPackageChecking: '설치 패키지 확인 중', restoreCommunityPackageReadyHelper: '오프라인 복원을 바로 실행할 수 있습니다.', restoreCommunityOnlineHelper: '현재 버전의 커뮤니티 버전 패키지를 자동으로 다운로드하고 Enterprise 전용 데이터를 정리합니다.', restoreCommunityOfflineHelper: '현재 Enterprise 버전 이상인 공식 패키지를 {path}에 저장하세요. 사용 가능한 패키지가 감지되면 전환이 활성화됩니다.', restoreCommunityCopyDownloadLink: '다운로드 링크 복사', restoreCommunityConfirm: '버전 전환 후 현재 Enterprise 슈퍼 관리자 계정으로 커뮤니티 버전에 로그인할 수 있습니다. 전환 과정에서 Enterprise 전용 데이터가 삭제되므로 신중하게 진행하세요.', restoreCommunityStarting: '커뮤니티 버전을 준비 중입니다. 완료되면 패널이 자동으로 다시 시작됩니다.', technicalAdvice: '기술 상담', advice: '상담', levelUpPro: '상용 버전으로 업그레이드', licenseSync: '라이센스 동기화', knowMorePro: '더 알아보기', closeAlert: '현재 페이지는 패널 설정에서 닫을 수 있습니다.', introduce: '기능 소개', deviceID: '장치 ID', corporation: '라이선스 회사', expired: '만료 시간', edition: '에디션', standard: '스탠다드', enterprise: '엔터프라이즈', count: '허가 수량', serialNo: '시리얼 번호', remark: '비고', waf: '상용 버전으로 업그레이드하면 차단 맵, 로그, 차단 기록, 지역 차단, 사용자 정의 규칙, 사용자 정의 차단 페이지 등을 사용할 수 있습니다.', tamper: '상용 버전으로 업그레이드하면 웹사이트를 무단 수정이나 변조로부터 보호할 수 있습니다.', setting: '상용 버전으로 업그레이드하면 패널 로고, 환영 메시지 등 정보를 사용자 정의할 수 있습니다.', monitor: '상용 버전으로 업그레이드하면 웹사이트의 실시간 상태, 방문자 추세, 유입 경로, 요청 로그 등을 확인할 수 있습니다.', alert: '상용 버전으로 업그레이드하면 SMS 알림을 받고 알림 로그를 확인할 수 있습니다.', vm: '상용 버전으로 업그레이드하면 1Panel에서 가상 머신, 이미지와 템플릿, 가상 네트워크 및 스토리지 리소스를 통합 관리할 수 있습니다.', node: '상용 버전으로 업그레이드하면 1Panel에서 여러 Linux 서버를 관리할 수 있습니다.', nodeApp: '상용 버전으로 업그레이드하면 노드를 수동으로 전환하지 않고도 다중 노드 애플리케이션 버전을 일괄 업그레이드할 수 있습니다.', nodeDashboard: '상용 버전으로 업그레이드하면 다중 노드 애플리케이션, 웹사이트, 데이터베이스, 예약 작업을 중앙에서 관리할 수 있습니다.', fileExchange: '상용 버전으로 업그레이드하면 여러 서버 간에 파일을 빠르게 전송할 수 있습니다.', app: '상용 버전으로 업그레이드하면 모바일 앱에서 서비스 정보와 이상 모니터링을 확인할 수 있습니다.', cluster: '상용 버전으로 업그레이드하면 MySQL/Postgres/Redis 기본-복제 클러스터를 관리할 수 있습니다.', vllm: '상용 버전으로 업그레이드하면 1Panel에서 vLLM 서비스의 배포, 구성, 수명 주기 작업 및 작업 추적을 중앙에서 관리할 수 있습니다.', 'model-downloader': '상용 버전으로 업그레이드하면 HuggingFace, ModelScope 또는 호환 미러에서 로컬 모델 파일을 검색, 다운로드 및 관리하고 모델 디렉터리와 다운로드 작업을 통합 관리할 수 있습니다.', exceptionalHelper: '라이선스 동기화 검증이 비정상입니다. 수동으로 동기화해 상용 버전 기능이 정상적으로 동작하는지 확인하세요. 상세: ', tamperHelper: '작업 실패, 파일/폴더에 변조 방지가 활성화되어 있습니다. 확인 후 다시 시도하세요!', }, clean: { scan: '스캔 시작', scanHelper: '1Panel 실행 중에 생성된 불필요한 파일을 쉽게 정리합니다.', clean: '지금 정리', reScan: '다시 스캔', cleanHelper: '선택된 파일 및 디렉터리는 정리 후 롤백할 수 없습니다. 계속하시겠습니까?', statusSuggest: '(권장 정리)', statusClean: '(매우 깨끗함)', statusEmpty: '매우 깨끗합니다. 정리가 필요하지 않습니다!', statusWarning: '(주의하여 진행)', lastCleanTime: '마지막 정리 시간: {0}', lastCleanHelper: '정리된 파일 및 디렉터리: {0}, 총 정리된 크기: {1}', cleanSuccessful: '정리 성공', currentCleanHelper: '이번 세션에서 정리된 파일 및 디렉터리: {0}, 총 정리된 크기: {1}', suggest: '(권장)', totalScan: '정리해야 할 총 불필요 파일: ', selectScan: '선택된 불필요 파일 총합: ', system: '시스템 불필요 파일', systemHelper: '스냅샷, 업그레이드 및 기타 프로세스 중에 생성된 임시 파일', panelOriginal: '시스템 스냅샷 복원 전 백업 파일', upgrade: '시스템 업그레이드 백업 파일', agentPackages: '이전 버전 자식 노드 업그레이드/설치 패키지', upgradeHelper: '(시스템 롤백을 위해 최신 업그레이드 백업을 유지하는 것이 좋습니다)', rollback: '복구 전 백업 파일', backup: '시스템 백업', backupHelper: '로컬 백업 계정에 연결되지 않은 백업 파일', unknownBackup: '시스템 백업', tmpBackup: '임시 백업', unknownApp: '연결되지 않은 앱 백업', unknownDatabase: '연결되지 않은 데이터베이스 백업', unknownWebsite: '연결되지 않은 웹사이트 백업', unknownSnapshot: '연결되지 않은 스냅샷 백업', upload: '임시 업로드 파일', uploadHelper: '시스템 백업 리스트에서 업로드된 임시 파일', download: '임시 다운로드 파일', downloadHelper: '시스템에서 제3자 백업 계정으로 다운로드된 임시 파일', directory: '디렉터리', systemLog: '로그 파일', systemLogHelper: '시스템 로그, 작업 로그, 웹사이트 로그 파일', dockerLog: '컨테이너 작업 로그 파일', taskLog: '예약 작업 실행 로그 파일', shell: '셸 스크립트 예약 작업', containerShell: '컨테이너 내에서 실행하는 셸 스크립트 예약 작업', curl: 'CURL 예약 작업', docker: '컨테이너 쓰레기', dockerHelper: '컨테이너, 이미지, 볼륨, 빌드 캐시 등의 파일', volumes: '볼륨', buildCache: '컨테이너 빌드 캐시', appTmpDownload: '앱 임시 다운로드 파일', unknownWebsiteLog: '연결되지 않은 웹사이트 로그 백업 파일', snapshot: '시스템 스냅샷 임시 파일', }, app: { app: '애플리케이션 | 애플리케이션들', installName: '이름', installed: '설치됨', all: '모두', version: '버전', detail: '세부사항', params: '편집', author: '저자', source: '출처', appName: '애플리케이션 이름', deleteWarn: '삭제 작업은 모든 데이터와 백업을 함께 삭제합니다. 이 작업은 되돌릴 수 없습니다. 계속 하시겠습니까?', syncSuccess: '동기화 성공', canUpgrade: '업데이트', backupName: '파일 이름', backupPath: '파일 경로', backupdate: '백업 시간', versionSelect: '버전을 선택하세요', operatorHelper: '선택한 애플리케이션에 대해 {0} 작업이 수행됩니다. 계속 하시겠습니까?', startOperatorHelper: '애플리케이션이 시작됩니다. 계속 하시겠습니까?', stopOperatorHelper: '애플리케이션이 중지됩니다. 계속 하시겠습니까?', restartOperatorHelper: '애플리케이션이 재시작됩니다. 계속 하시겠습니까?', reloadOperatorHelper: '애플리케이션이 다시 로드됩니다. 계속 하시겠습니까?', checkInstalledWarn: '"{0}"이(가) 감지되지 않았습니다. "앱 스토어"로 가서 설치하세요.', limitHelper: '애플리케이션은 이미 설치되었습니다.', deleteHelper: '"{0}"은(는) 다음 리소스와 연결되어 있습니다. 확인 후 다시 시도하세요!', checkTitle: '힌트', defaultConfig: '기본 설정', defaultConfigHelper: '기본 설정으로 복원되었습니다. 저장 후 적용됩니다.', forceDelete: '강제 삭제', forceDeleteHelper: '강제 삭제는 삭제 과정 중 오류를 무시하고 메타데이터를 삭제합니다.', deleteBackup: '백업 삭제', deleteBackupHelper: '애플리케이션 백업도 삭제됩니다.', deleteDB: '데이터베이스 삭제', deleteDBHelper: '데이터베이스도 삭제됩니다.', noService: '{0} 없음', toInstall: '설치하러 가기', param: '파라미터', alreadyRun: '설치됨', syncAppList: '동기화', less1Minute: '1분 미만', appOfficeWebsite: '공식 웹사이트', github: 'GitHub', document: '문서', updatePrompt: '업데이트가 없습니다.', installPrompt: '아직 설치된 앱이 없습니다.', updateHelper: '파라미터를 수정하면 애플리케이션이 시작되지 않을 수 있습니다. 주의하세요.', updateWarn: '업데이트 파라미터는 애플리케이션을 재빌드해야 합니다. 계속 하시겠습니까?', busPort: '포트', syncStart: '동기화 시작! 나중에 앱 스토어를 새로고침 해주세요.', advanced: '고급 설정', cpuCore: '코어', containerName: '컨테이너 이름', containerNameHelper: '설정되지 않으면 컨테이너 이름이 자동으로 생성됩니다.', allowPort: '외부 접근 허용', allowPortHelper: '외부 포트 접근을 허용하면 방화벽 포트가 열립니다.', appInstallWarn: '애플리케이션은 기본적으로 외부 접근 포트를 노출하지 않습니다. "고급 설정"을 클릭하여 노출할 수 있습니다.', upgradeStart: '업그레이드 시작! 나중에 페이지를 새로고침 해주세요.', toFolder: '설치 디렉터리 열기', editCompose: 'Compose 파일 편집', editComposeHelper: 'Compose 파일을 편집하면 소프트웨어 설치가 실패할 수 있습니다.', composeNullErr: 'Compose는 비어 있을 수 없습니다.', takeDown: '지원 종료', allReadyInstalled: '설치됨', installHelper: '이미지 풀 문제 시 이미지 가속을 구성하세요.', sortMode: '정렬', installWarn: '외부 접근이 활성화되지 않아 애플리케이션이 외부 네트워크에서 접근할 수 없습니다. 계속 하시겠습니까?', showIgnore: '무시된 애플리케이션 보기', cancelIgnore: '무시 취소', ignoreList: '무시된 애플리케이션', appHelper: '특수 애플리케이션 설치 지침을 보려면 애플리케이션 상세 페이지로 이동하세요.', backupApp: '업그레이드 전 애플리케이션 백업', backupAppHelper: '업그레이드 실패 시 백업이 자동으로 롤백됩니다. 로그 감사 시스템 로그에서 실패 원인을 확인하세요. 백업은 기본적으로 최신 3개 복사본을 유지합니다.', openrestyDeleteHelper: 'OpenResty 강제 삭제는 모든 웹사이트를 삭제합니다. 계속 하시겠습니까?', downloadLogHelper1: '{0} 애플리케이션의 모든 로그가 다운로드됩니다. 계속 하시겠습니까?', downloadLogHelper2: '{0} 애플리케이션의 최신 {1} 로그가 다운로드됩니다. 계속 하시겠습니까?', syncAllAppHelper: '모든 애플리케이션이 동기화됩니다. 계속 하시겠습니까?', hostModeHelper: '현재 애플리케이션 네트워크 모드는 호스트 모드입니다. 포트를 열어야 할 경우 방화벽 페이지에서 수동으로 열어주세요.', showLocal: '로컬 애플리케이션 보기', reload: '새로고침', upgradeWarn: '애플리케이션 업그레이드는 docker-compose.yml 파일을 교체합니다. 변경 사항이 있으면 파일 비교를 클릭하여 확인할 수 있습니다.', openclawHttpsUpgradeNoticeTitle: '참고: 다음 안내는 OpenClaw를 2026.3.13~2026.3.22 버전에서 2026.3.23 이상으로 업그레이드하는 경우에만 적용됩니다.', openclawHttpsUpgradeNoticeItem1: '업그레이드 후 에이전트 접속이 다시 HTTP로 전환됩니다. 설정 -> 보안에서 접속 주소를 확인하세요.', openclawHttpsUpgradeNoticeItem2: '이전에 리버스 프록시 웹사이트를 사용했다면 프록시 대상 주소를 http://IP:Port 로 변경하세요.', newVersion: '새 버전', oldVersion: '현재 버전', composeDiff: '파일 비교', showDiff: '비교 보기', useNew: '사용자 정의 버전 사용', useDefault: '기본 버전 사용', useCustom: '사용자 정의 docker-compose.yml 사용', useCustomHelper: '사용자 정의 docker-compose.yml 파일을 사용하면 애플리케이션 업그레이드가 실패할 수 있습니다. 필요하지 않으면 체크하지 마세요.', diffHelper: '왼쪽은 이전 버전, 오른쪽은 새 버전입니다. 편집 후 사용자 정의 버전을 저장하려면 클릭하세요.', pullImage: '이미지 풀', pullImageHelper: '애플리케이션 시작 전에 docker pull 을 실행하여 이미지를 다운로드하세요.', deleteImage: '이미지 삭제', deleteImageHelper: '애플리케이션 관련 이미지를 삭제합니다. 삭제에 실패하더라도 작업은 종료되지 않습니다.', requireMemory: '메모리 요구사항', supportedArchitectures: '지원 아키텍처', link: '링크', showCurrentArch: '현재 서버 아키텍처 애플리케이션', syncLocalApp: '로컬 애플리케이션 동기화', memoryRequiredHelper: '현재 애플리케이션은 {0} 메모리가 필요합니다', gpuConfig: 'GPU 지원 활성화', gpuConfigHelper: 'NVIDIA GPU가 장착되어 있으며 NVIDIA 드라이버와 NVIDIA Docker Container Toolkit이 설치되어 있는지 확인하세요', webUI: '웹 접속 주소', webUIPlaceholder: '예: example.com:8080/login', defaultWebDomain: '기본 접속 주소', defaultWebDomainHepler: '애플리케이션 포트가 8080인 경우 접속 주소는 http(s)://기본 접속 주소:8080입니다', webUIConfig: '현재 노드에 기본 접근 주소가 설정되지 않았습니다. 애플리케이션 매개변수에서 설정하거나 패널 설정으로 이동하여 설정하세요!', toLink: '이동', customAppHelper: '사용자 정의 앱 스토어 패키지를 설치하기 전에 설치된 앱이 없는지 확인하십시오.', forceUninstall: '강제 제거', syncCustomApp: '사용자 정의 앱 동기화', ignoreAll: '후속 모든 버전 무시', ignoreVersion: '지정된 버전 무시', specifyIP: '호스트 IP 바인딩', specifyIPHelper: '포트 바인딩을 위한 호스트 주소/네트워크 인터페이스를 설정합니다 (이 기능을 잘 모를 경우, 입력하지 마십시오)', uninstallDeleteBackup: '앱 제거 - 백업 삭제', uninstallDeleteImage: '앱 제거 - 이미지 삭제', upgradeBackup: '앱 업그레이드 전 앱 백업', upgradeDeleteImage: '앱 업그레이드 - 이전 이미지 삭제', installAllowPort: '앱 설치 시 기본으로 외부 포트 접근 허용', noAppHelper: '애플리케이션이 감지되지 않았습니다. 작업 센터에서 앱 스토어 동기화 로그를 확인해 주세요', isEdirWarn: 'docker-compose.yml 파일 변경이 감지되었습니다. 차이점을 확인해 주세요.', }, website: { primaryDomain: '기본 도메인', otherDomains: '기타 도메인', static: '정적', deployment: '배포', supportUpType: '.tar.gz 파일 형식만 지원되며, 압축 패키지에는 {0}.json 파일이 포함되어야 합니다', proxy: '리버스 프록시', alias: '별칭', ftpUser: 'FTP 계정', ftpPassword: 'FTP 비밀번호', ftpHelper: '웹사이트를 생성하면 해당 FTP 계정이 생성되고 FTP 디렉터리는 웹사이트 디렉터리와 연결됩니다.', remark: '비고', groupSetting: '그룹 설정', createGroup: '그룹 생성', appNew: '새로운 애플리케이션', appInstalled: '설치된 애플리케이션', delete: '웹사이트 삭제', deleteApp: '애플리케이션 삭제', deleteBackup: '백업 삭제', domain: '도메인', domainHelper: "한 줄에 하나의 도메인.\n와일드카드 '*'와 IP 주소를 지원합니다.\n포트 추가를 지원합니다.", addDomain: '추가', domainConfig: '도메인 설정', defaultDoc: '기본 문서', perserver: '동시 연결', perserverHelper: '현재 사이트의 최대 동시 연결 수를 제한합니다.', perip: '단일 IP', peripHelper: '단일 IP의 최대 동시 접속 수를 제한합니다.', rate: '트래픽 제한', rateLimit: '요청당 속도 제한', rateHelper: '요청당 트래픽을 제한합니다 (단위: KB)', rateLimitHelper: '각 요청의 전송 속도를 제한합니다 (단위: KB/s)', limitHelper: '트래픽 제어 활성화', other: '기타', currentSSL: '현재 인증서', dnsAccount: 'DNS 계정', applySSL: '인증서 신청', SSLList: '인증서 목록', createDnsAccount: 'DNS 계정 생성', aliyun: '알리윤', aliEsa: '알리윤 ESA', awsRoute53: 'Amazon Route 53', manual: '수동 설정', key: '키', check: '보기', acmeAccountManage: 'ACME 계정 관리', email: '이메일', acmeAccount: 'ACME 계정', provider: '검증 방법', dnsManual: '수동 설정', expireDate: '만료일', brand: '기관', deploySSL: '배포', deploySSLHelper: '인증서를 배포하시겠습니까?', ssl: '인증서 | 인증서들', dnsAccountManage: 'DNS 제공자 관리', renewSSL: '갱신', renewHelper: '인증서를 갱신하시겠습니까?', renewSuccess: '인증서 갱신 성공', enableHTTPS: 'HTTPS 활성화', aliasHelper: '별칭은 웹사이트의 디렉터리 이름입니다.', lastBackupAt: '마지막 백업 시간', null: '없음', nginxConfig: 'Nginx 설정', websiteConfig: '웹사이트 설정', proxySettings: '프록시 설정', advancedSettings: '고급 설정', cacheSettings: '캐시 설정', sniSettings: 'SNI 설정', basic: '기본', source: '구성', security: '보안', nginxPer: '성능 튜닝', neverExpire: '만료 없음', setDefault: '기본값으로 설정', deleteHelper: '관련 애플리케이션 상태가 비정상입니다. 확인해 주세요.', toApp: '설치된 목록으로 이동', cycle: '주기', frequency: '빈도', ccHelper: '{0}초 내에 동일한 URL을 {1}회 이상 누적 요청하면 CC 방어가 발동되며, 해당 IP가 차단됩니다.', mustSave: '변경 사항은 저장해야 적용됩니다.', fileExt: '파일 확장자', fileExtBlock: '파일 확장자 차단 목록', value: '값', enable: '활성화', proxyAddress: '프록시 주소', proxyHelper: '예: 127.0.0.1:8080', forceDelete: '강제 삭제', forceDeleteHelper: '강제 삭제는 삭제 과정에서 발생하는 오류를 무시하고 최종적으로 메타데이터를 삭제합니다.', deleteAppHelper: '관련 애플리케이션 및 애플리케이션 백업을 동시에 삭제합니다.', deleteBackupHelper: '웹사이트 백업도 삭제합니다.', deleteDatabaseHelper: '웹사이트와 연결된 데이터베이스도 삭제합니다', deleteConfirmHelper: '삭제 작업은 되돌릴 수 없습니다. 확인하려면 "{0}"을(를) 입력하세요.', staticPath: '해당 주요 디렉터리는 ', limit: '제한', blog: '포럼/블로그', imageSite: '이미지 사이트', downloadSite: '다운로드 사이트', shopSite: '쇼핑몰', doorSite: '포털', qiteSite: '기업', videoSite: '비디오', errLog: '오류 로그', stopHelper: '사이트를 중지하면 정상적으로 액세스할 수 없으며, 사용자가 해당 사이트의 중지 페이지를 보게 됩니다. 계속하시겠습니까?', startHelper: '사이트를 활성화하면 사용자가 정상적으로 사이트 내용을 액세스할 수 있습니다. 계속하시겠습니까?', sitePath: '디렉터리', siteAlias: '사이트 별칭', primaryPath: '루트 디렉터리', folderTitle: '웹사이트는 다음과 같은 폴더를 포함합니다.', wafFolder: '방화벽 규칙', indexFolder: '웹사이트 루트 디렉터리', sslFolder: '웹사이트 인증서', enableOrNot: '활성화 여부', oldSSL: '기존 인증서', manualSSL: '인증서 가져오기', select: '선택', selectSSL: '인증서 선택', privateKey: '키(KEY)', certificate: '인증서(PEM 형식)', HTTPConfig: 'HTTP 옵션', HTTPSOnly: 'HTTP 요청 차단', HTTPToHTTPS: 'HTTPS로 리디렉션', HTTPAlso: 'HTTP 요청 허용', sslConfig: 'SSL 옵션', disableHTTPS: 'HTTPS 비활성화', disableHTTPSHelper: 'HTTPS 비활성화는 인증서 관련 구성을 삭제합니다. 계속하시겠습니까?', SSLHelper: '주의: 불법 웹사이트에는 SSL 인증서를 사용하지 마세요.\nHTTPS 액세스가 안 되는 경우 보안 그룹에서 443 포트를 올바르게 해제했는지 확인하세요.', SSLConfig: '인증서 설정', SSLProConfig: '프로토콜 설정', supportProtocol: '프로토콜 버전', encryptionAlgorithm: '암호화 알고리즘', notSecurity: '(안전하지 않음)', encryptHelper: "Let's Encrypt 는 인증서 발급에 빈도 제한이 있지만 일반적인 요구 사항을 충족하기에 충분합니다. 너무 자주 작업하면 발급 실패가 발생할 수 있습니다. 자세한 제한 사항은 공식 문서를 참조하세요.", ipValue: '값', ext: '파일 확장자', wafInputHelper: '줄 단위로 데이터 입력, 한 줄에 하나씩', data: '데이터', ever: '영구', nextYear: '1년 후', noLog: '로그를 찾을 수 없습니다.', defaultServer: '기본 사이트', noDefaultServer: '설정되지 않음', defaultServerHelper: '기본 사이트를 설정한 후, 바인딩되지 않은 모든 도메인 이름과 IP는 기본 사이트로 리디렉션됩니다\n이는 악의적인 해석을 효과적으로 방지할 수 있습니다\n하지만 WAF의 무단 도메인 차단이 실패할 수도 있습니다', restoreHelper: '이 백업을 사용하여 복원하시겠습니까?', websiteDeploymentHelper: '설치된 애플리케이션을 사용하거나 새 애플리케이션을 생성하여 웹사이트를 만드세요.', websiteStatictHelper: '호스트에 웹사이트 디렉터리를 생성합니다.', websiteProxyHelper: '리버스 프록시를 사용하여 기존 서비스를 프록시합니다. 예를 들어, 포트 8080 에서 실행 중인 서비스를 프록시하려면 프록시 주소는 "http://127.0.0.1:8080"이 됩니다.', runtimeProxyHelper: '웹사이트 런타임을 사용하여 웹사이트를 만드세요.', runtime: '런타임', deleteRuntimeHelper: '런타임 애플리케이션은 웹사이트와 함께 삭제해야 하므로 신중하게 처리하세요.', proxyType: '네트워크 유형', unix: '유닉스 네트워크', tcp: 'TCP/IP 네트워크', phpFPM: 'FPM 구성', phpConfig: 'PHP 구성', updateConfig: '구성 업데이트', isOn: '켜짐', isOff: '꺼짐', rewrite: '의사 정적', rewriteMode: '방식', current: '현재', rewriteHelper: '의사 정적 설정으로 인해 웹사이트에 접근할 수 없게 되면 기본 설정으로 되돌려보세요.', runDir: '실행 디렉터리', runUserHelper: 'PHP 컨테이너 런타임 환경에서 배포된 웹사이트의 경우, 인덱스 및 하위 디렉터리 아래의 모든 파일 및 폴더의 소유자와 사용자 그룹을 1000으로 설정해야 합니다. 로컬 PHP 환경의 경우, 로컬 PHP-FPM 사용자 및 사용자 그룹 설정을 참조하세요.', userGroup: '사용자/그룹', uGroup: '그룹', proxyPath: '프록시 경로', proxyPass: '대상 URL', cache: '캐시', cacheTime: '캐시 지속 시간', enableCache: '캐시 활성화', proxyHost: '프록시 호스트', disabled: '중지됨', startProxy: '리버스 프록시를 시작합니다. 계속하시겠습니까?', stopProxy: '리버스 프록시를 중지합니다. 계속하시겠습니까?', sourceFile: '소스', proxyHelper1: '이 디렉터리에 접근할 때 대상 URL 의 내용이 반환되고 표시됩니다.', proxyPassHelper: '대상 URL 은 유효하고 접근 가능해야 합니다.', proxyHostHelper: '요청 헤더에 있는 도메인 이름을 프록시 서버로 전달합니다.', modifier: '매칭 규칙', modifierHelper: '예: = 는 정확히 일치, ~ 는 정규식 일치, ^~ 는 경로 시작 부분 일치 등을 나타냅니다.', replace: '텍스트 교체', replaceHelper: 'nginx 텍스트 교체 기능은 리버스 프록시 중 응답 내용의 문자열을 대체할 수 있습니다. 백엔드에서 반환된 HTML, CSS, JavaScript 및 기타 파일의 링크, API 주소 등을 수정하는 데 일반적으로 사용됩니다. 복잡한 콘텐츠 교체 요구 사항에 대해 정규식 일치를 지원합니다.', addReplace: '추가', replaced: '검색 문자열 (비울 수 없음)', replaceText: '교체할 문자열', replacedErr: '검색 문자열은 비워둘 수 없습니다', replacedErr2: '검색 문자열은 중복될 수 없습니다', replacedListEmpty: '텍스트 교체 규칙 없음', proxySslName: '프록시 SNI 이름', basicAuth: '기본 인증', editBasicAuthHelper: '비밀번호는 비대칭으로 암호화되어 표시할 수 없습니다. 수정하려면 비밀번호를 재설정해야 합니다.', antiLeech: '링크 차단', extends: '확장', browserCache: '캐시', noModify: '수정 안 함', serverCache: '서버 캐시', leechLog: '링크 차단 로그 기록', accessDomain: '허용된 도메인', leechReturn: '응답 리소스', noneRef: '빈 참조 허용', disable: '비활성화', disableLeechHelper: '링크 차단을 비활성화할지 여부', disableLeech: '링크 차단 비활성화', ipv6: 'IPv6 수신 대기', leechReturnError: 'HTTP 상태 코드를 입력하세요', blockedRef: '비표준 참조 허용', accessControl: '링크 차단 제어', leechcacheControl: '캐시 제어', logEnableControl: '정적 리소스 요청 로그 기록', leechSpecialValidHelper: "'빈 참조 허용'을 활성화하면 리퍼러가 없는 요청(직접 접근 등)은 차단되지 않습니다. '비표준 참조 허용'을 활성화하면 http/https로 시작하지 않는 모든 리퍼러 요청(클라이언트 요청 등)을 허용합니다.", leechInvalidReturnHelper: '차단된 요청에 대해 반환할 HTTP 상태 코드', leechlogControlHelper: '정적 리소스 요청을 기록합니다. 운영 환경에서는 과도하고 불필요한 로그를 피하기 위해 보통 비활성화합니다', selectAcme: 'Acme 계정 선택', imported: '수동으로 생성됨', importType: '가져오기 유형', pasteSSL: '코드 붙여넣기', localSSL: '서버 파일 선택', privateKeyPath: '개인 키 파일', certificatePath: '인증서 파일', ipWhiteListHelper: 'IP 허용 목록의 역할: 모든 규칙이 IP 허용 목록에 대해 무효화됩니다.', redirect: '리디렉션', sourceDomain: '소스 도메인', targetURL: '대상 URL 주소', keepPath: 'URI 매개변수', path: '경로', redirectType: '리디렉션 유형', redirectWay: '방식', keep: '유지', notKeep: '유지하지 않음', redirectRoot: '홈페이지로 리디렉션', redirectHelper: '301 영구 리디렉션, 302 임시 리디렉션', changePHPVersionWarn: 'PHP 버전을 변경하면 기존 PHP 컨테이너가 삭제됩니다 (마운트된 웹사이트 코드는 손실되지 않습니다). 계속하시겠습니까?', changeVersion: '버전 전환', retainConfig: 'php-fpm.conf 및 php.ini 파일을 유지할지 여부', runDirHelper2: '보조 실행 디렉터리가 인덱스 디렉터리 아래에 있는지 확인하세요.', openrestyHelper: 'OpenResty 기본 HTTP 포트: {0}, HTTPS 포트: {1}, 이는 웹사이트 도메인 접속 및 HTTPS 강제 리디렉션에 영향을 미칠 수 있습니다.', primaryDomainHelper: '예: example.com 또는 example.com:8080', acmeAccountType: '계정 유형', keyType: '키 알고리즘', tencentCloud: '텐센트 클라우드', containWarn: '도메인 이름에 메인 도메인이 포함되어 있습니다. 다시 입력하세요.', rewriteHelper2: '앱 스토어에서 설치된 WordPress 와 같은 응용 프로그램은 일반적으로 사전 설정된 가상 정적 구성이 포함됩니다. 이를 재구성하면 오류가 발생할 수 있습니다.', websiteBackupWarn: '로컬 백업 가져오기만 지원합니다. 다른 기기에서 가져온 백업은 복구 실패를 초래할 수 있습니다.', ipWebsiteWarn: 'IP를 도메인 이름으로 사용하는 웹사이트는 정상적으로 접속되기 위해 기본 사이트로 설정해야 합니다.', hstsHelper: 'HSTS 를 활성화하면 웹사이트 보안을 강화할 수 있습니다.', includeSubDomains: '서브도메인', hstsIncludeSubDomainsHelper: '활성화하면 HSTS 정책이 현재 도메인의 모든 서브도메인에 적용됩니다.', defaultHtml: '기본 페이지', website404: '웹사이트 404 오류 페이지', domain404: '웹사이트 도메인이 존재하지 않습니다.', indexHtml: '정적 웹사이트 인덱스', stopHtml: '중지된 웹사이트', indexPHP: 'PHP 웹사이트 인덱스', sslExpireDate: '인증서 만료 날짜', website404Helper: '웹사이트 404 오류 페이지는 PHP 실행 환경 웹사이트 및 정적 웹사이트만 지원합니다.', sni: '원본 SNI', sniHelper: '역방향 프록시 백엔드가 HTTPS 인 경우 원본 SNI 를 설정해야 할 수 있습니다. 자세한 내용은 CDN 서비스 제공자의 문서를 참조하세요.', proxySslVerify: '백엔드 SSL 인증서 검증', proxySslVerifyHelper: '활성화하면 프록시가 업스트림 SSL 인증서를 엄격하게 검증합니다(기본값은 비활성화).', huaweicloud: '화웨이 클라우드', createDb: '데이터베이스 생성', enableSSLHelper: 'SSL 활성화 실패는 웹사이트 생성에 영향을 미치지 않습니다.', batchAdd: '도메인 일괄 추가', batchInput: '일괄 입력', domainNotFQDN: '이 도메인은 공용 네트워크에서 액세스할 수 없을 수 있습니다', domainInvalid: '도메인 형식이 올바르지 않습니다', domainBatchHelper: '한 줄에 하나의 도메인, 형식: domain:port@ssl\n예: example.com:443@ssl 또는 example.com', generateDomain: '생성', global: '글로벌', subsite: '하위 사이트', subsiteHelper: '하위 사이트는 기존 PHP 또는 정적 웹사이트의 디렉토리를 루트 디렉토리로 선택할 수 있습니다.', deleteSubsite: '현재 웹사이트를 삭제하려면 먼저 하위 사이트 {0}를 삭제해야 합니다.', loadBalance: '로드 밸런싱', server: '노드', algorithm: '알고리즘', ipHash: 'IP 해시', ipHashHelper: '클라이언트 IP 주소를 기반으로 요청을 특정 서버에 분배하여 특정 클라이언트가 항상 동일한 서버로 라우팅되도록 합니다.', leastConn: '최소 연결', leastConnHelper: '활성 연결 수가 가장 적은 서버로 요청을 보냅니다.', leastTime: '최소 시간', leastTimeHelper: '활성 연결 시간이 가장 짧은 서버로 요청을 보냅니다.', defaultHelper: '기본 방법으로, 요청은 각 서버에 균등하게 분배됩니다. 서버에 가중치 설정이 있는 경우 지정된 가중치에 따라 요청이 분배됩니다. 가중치가 높은 서버는 더 많은 요청을 받습니다.', weight: '가중치', maxFails: '최대 실패 횟수', maxConns: '최대 연결 수', strategy: '전략', strategyDown: '비활성화', strategyBackup: '백업', ipHashBackupErr: 'IP 해시는 백업 노드를 지원하지 않습니다', failTimeout: '장애 시간 초과', failTimeoutHelper: '서버 상태 점검 시간 창 길이. 이 기간 동안 누적 실패 횟수가 임계값에 도달하면 서버가 일시적으로 제거되고 동일한 시간 후에 재시도됩니다. 기본값 10초', staticChangePHPHelper: '현재 정적 웹사이트이며 PHP 웹사이트로 전환할 수 있습니다.', proxyCache: '리버스 프록시 캐시', cacheLimit: '캐시 공간 제한', shareCache: '캐시 카운트 메모리 크기', cacheExpire: '캐시 만료 시간', shareCacheHelper: '1M 메모리로 약 8000개의 캐시 객체를 저장할 수 있습니다.', cacheLimitHelper: '제한을 초과하면 이전 캐시가 자동으로 삭제됩니다.', realIP: '실제 IP', ipFrom: 'IP 소스', ipFromHelper: '신뢰할 수 있는 IP 소스를 구성함으로써 OpenResty는 HTTP 헤더의 IP 정보를 분석하여 방문자의 실제 IP 주소를 정확하게 식별하고 기록합니다(액세스 로그 포함).', ipFromExample1: '프론트엔드가 Frp와 같은 도구인 경우 Frp의 IP 주소(예: 127.0.0.1)를 입력할 수 있습니다.', ipFromExample2: '프론트엔드가 CDN인 경우 CDN의 IP 범위를 입력할 수 있습니다.', ipFromExample3: '확실하지 않은 경우 0.0.0.0/0 (IPv4) 또는 ::/0 (IPv6)를 입력할 수 있습니다. [주의: 모든 소스 IP를 허용하는 것은 안전하지 않습니다.]', http3Helper: 'HTTP/3는 HTTP/2의 업그레이드 버전으로, 더 빠른 연결 속도와 더 나은 성능을 제공합니다. 그러나 모든 브라우저가 HTTP/3를 지원하는 것은 아니며, 활성화하면 일부 브라우저가 사이트에 접근하지 못할 수 있습니다.', cors: '교차 출처 리소스 공유(CORS)', enableCors: 'CORS 활성화', allowOrigins: '허용된 도메인', allowMethods: '허용된 요청 메서드', allowHeaders: '허용된 요청 헤더', allowCredentials: '쿠키 전송 허용', preflight: '프리플라이트 요청 빠른 응답', preflightHleper: '활성화하면 브라우저가 교차 출처 프리플라이트 요청(OPTIONS 요청)을 보낼 때 시스템이 자동으로 204 상태 코드를 반환하고 필요한 교차 출처 응답 헤더를 설정합니다', changeDatabase: '데이터베이스 전환', changeDatabaseHelper1: '데이터베이스 연관은 웹사이트 백업 및 복원에 사용됩니다.', changeDatabaseHelper2: '다른 데이터베이스로 전환하면 이전 백업을 복원할 수 없게 될 수 있습니다.', saveCustom: '템플릿으로 저장', rainyun: 'Rainyun', volcengine: 'volcengine', runtimePortHelper: '현재 실행 환경에 여러 포트가 있습니다. 프록시 포트를 선택하세요.', runtimePortWarn: '현재 실행 환경에 포트가 없습니다. 프록시할 수 없습니다', cacheWarn: '먼저 리버스 프록시의 캐시 스위치를 끄십시오', loadBalanceHelper: '로드 밸런싱을 생성한 후, "리버스 프록시"로 이동하여 프록시를 추가하고 백엔드 주소를 다음으로 설정하세요: http://<로드 밸런싱 이름>.', useProxy: '프록시 사용', useProxyHelper: '패널 설정의 프록시 서버 주소 사용', westCN: '서부 디지털', openBaseDir: '사이트 간 공격 방지', openBaseDirHelper: 'open_basedir는 PHP 파일 액세스 경로를 제한하여 사이트 간 액세스를 방지하고 보안을 향상시키는 데 사용됩니다', serverCacheTime: '서버 캐시 시간', serverCacheTimeHelper: '요청이 서버에서 캐시되는 시간. 이 기간 동안 동일한 요청은 원본 서버에 요청하지 않고 캐시된 결과를 직접 반환합니다.', browserCacheTime: '브라우저 캐시 시간', browserCacheTimeHelper: '정적 리소스가 브라우저 로컬에 캐시되는 시간, 중복 요청을 줄입니다. 유효기간 전에 사용자가 페이지를 새로 고치면 로컬 캐시가 직접 사용됩니다.', donotLinkeDB: '데이터베이스 연결하지 않기', toWebsiteDir: '웹사이트 디렉토리로 이동', execParameters: '실행 매개변수', extCommand: '추가 명령', mirror: '미러 소스', execUser: '실행 사용자', execDir: '실행 디렉토리', packagist: '중국 전체 미러', batchOperate: '일괄 작업', batchOperateHelper: '웹사이트를 일괄 {0}, 계속 작업하시겠습니까?', stream: 'TCP/UDP 프록시', streamPorts: '수신 포트', streamPortsHelper: '외부 수신 포트 번호를 설정합니다. 클라이언트는 이 포트를 통해 서비스에 액세스합니다. 쉼표로 구분하세요. 예: 5222,5223', streamHelper: 'TCP/UDP 포트 포워딩 및 로드 밸런싱', udp: 'UDP 활성화', syncHtmlHelper: 'PHP 및 정적 웹사이트에 동기화', wafValueHelper: '값', parentWbeiste: '상위 웹사이트', cacheExpireJHelper: '만료 후 미적중 시 캐시가 삭제됩니다', }, php: { short_open_tag: '짧은 태그 지원', max_execution_time: '최대 스크립트 실행 시간', max_input_time: '최대 입력 시간', memory_limit: '스크립트 메모리 제한', post_max_size: 'POST 데이터 최대 크기', file_uploads: '파일 업로드 허용 여부', upload_max_filesize: '업로드 가능한 파일의 최대 크기', max_file_uploads: '한 번에 업로드 가능한 파일의 최대 개수', default_socket_timeout: '소켓 타임아웃', error_reporting: '에러 수준', display_errors: '상세한 에러 정보 출력 여부', cgi_fix_pathinfo: 'pathinfo 활성화 여부', date_timezone: '시간대', disableFunction: '비활성화 함수', disableFunctionHelper: '비활성화할 함수를 입력하세요. 예: exec, 여러 항목은 쉼표로 구분', uploadMaxSize: '업로드 제한', indexHelper: 'PHP 웹사이트의 정상 작동을 위해 코드를 인덱스 디렉터리에 배치하고 이름 변경을 피하세요.', extensions: '확장 템플릿', extension: '확장', extensionHelper: '여러 확장은 쉼표로 구분하여 입력하세요.', toExtensionsList: '확장 목록 보기', containerConfig: '컨테이너 구성', containerConfigHelper: '환경 변수 및 기타 정보는 생성 후 구성 - 컨테이너 구성에서 수정할 수 있습니다', dateTimezoneHelper: '예: TZ=Asia/Shanghai(필요에 따라 추가하세요)', extensionsHelper: '여러 확장은 쉼표로 구분하세요', }, nginx: { serverNamesHashBucketSizeHelper: '서버 이름의 해시 테이블 크기', clientHeaderBufferSizeHelper: '클라이언트가 요청한 헤더 버퍼 크기', clientMaxBodySizeHelper: '최대 업로드 파일 크기', keepaliveTimeoutHelper: '연결 시간 초과', gzipMinLengthHelper: '최소 압축 파일 크기', gzipCompLevelHelper: '압축률', gzipHelper: '전송을 위한 압축 활성화', brotliHelper: 'brotli 압축 활성화, 일반적으로 gzip보다 작습니다', brotliCompLevelHelper: 'brotli 압축률, 0에서 11까지', brotliManagedExternallyHelper: 'brotli가 nginx.conf에 수동으로 구성되어 있습니다. 패널은 적용 중인 값만 표시하며 덮어쓰지 않습니다.', brotliManagedUnavailableHelper: '패널이 관리되는 brotli 구성을 nginx.conf에 자동으로 추가할 수 없습니다. 아래 설정은 적용되지 않습니다.', brotliMinLengthHelper: 'brotli로 압축할 최소 응답 크기', brotliSaveFailed: 'brotli 설정 저장에 실패했습니다. 위의 gzip 설정은 적용되었습니다', connections: '활성 연결', accepts: '수락', handled: '처리됨', requests: '요청', reading: '읽기 중', writing: '쓰기 중', waiting: '대기 중', status: '현재 상태', configResource: '구성', saveAndReload: '저장 및 다시 로드', clearProxyCache: '리버스 프록시 캐시 삭제', clearProxyCacheWarn: '캐시가 구성된 모든 웹사이트에 영향을 미치며 OpenResty 가 다시 시작됩니다. 계속하시겠습니까?', create: '모듈 추가', update: '모듈 편집', params: '매개변수', packages: '패키지', script: '스크립트', module: '모듈', build: '빌드', buildWarn: '로컬 모듈 빌드는 CPU와 메모리를 사용합니다. 정적 모듈은 OpenResty를 다시 빌드하고 재시작합니다. 계속하시겠습니까?', buildPurposeHint: '동적 모듈은 빌드 후 핫 리로드로 적용됩니다(컨테이너 재시작 없음). 정적 모듈이 포함되면 이미지 전체가 재빌드되고 컨테이너가 재생성됩니다', buildMode: '빌드 방식', buildModeDynamic: '동적', buildModeStatic: '정적', buildStatus: '빌드 상태', loadOrder: '로드 순서', modulesToBuild: '동적 모듈 (빌드 후 핫 리로드, 컨테이너 재시작 없음)', staticModules: '정적 모듈', staticModulesHelper: '빌드 시 모든 모듈이 재빌드되고 OpenResty가 재시작됩니다', forceBuild: '캐시 없이 다시 빌드', buildFailed: '마지막 빌드 실패', pending: '대기 중', ready: '준비됨', failed: '실패', dynamicUnsupported: '현재 OpenResty 버전에서는 동적 빌드를 지원하지 않습니다', moduleDynamicUnsupported: '이 모듈의 파라미터는 동적 빌드를 지원하지 않습니다', mirrorUrl: '소프트웨어 소스', paramsHelper: '예: --add-module=/tmp/ngx_brotli; 동적 모드에서는 자동으로 변환됩니다', packagesHelper: '예: git,curl 쉼표로 구분', scriptHelper: '컴파일 전에 실행할 스크립트, 일반적으로 모듈 소스 코드 다운로드, 종속성 설치 등', buildHelper: '동적 모듈은 빌드 후 설정을 통해 로드되며, 정적 모듈은 여전히 OpenResty를 다시 빌드합니다.', defaultHttps: 'HTTPS 변조 방지', defaultHttpsHelper1: '이를 활성화하면 HTTPS 변조 문제를 해결할 수 있습니다.', sslRejectHandshake: '기본 SSL 핸드셰이크 거부', sslRejectHandshakeHelper: '활성화하면 인증서 누출을 방지할 수 있지만, 기본 웹사이트를 설정하면 이 설정이 무효화됩니다', }, ssl: { deleteConfirm: '다음 인증서를 삭제합니다. ACME 인증서는 자동으로 폐기됩니다. 계속하시겠습니까?', deleteAndRevoke: '삭제 및 폐기', create: '요청', provider: '유형', manualCreate: '수동 생성됨', acmeAccount: 'ACME 계정', resolveDomain: '도메인 이름 확인', err: '오류', value: '레코드 값', dnsResolveHelper: 'DNS 해석 서비스 제공업체에서 다음 해석 레코드를 추가하세요:', detail: '세부 정보', msg: '정보', ssl: '인증서', key: '개인 키', startDate: '유효 시작 시간', organization: '발급 기관', renewConfirm: '도메인 이름 {0}에 대해 새 인증서를 갱신합니다. 계속하시겠습니까?', autoRenew: '자동 갱신', autoRenewHelper: '만료 30일 전에 자동으로 갱신', renewSuccess: '갱신 성공', renewWebsite: '이 인증서는 다음 웹사이트에 연결되었으며, 적용은 이러한 웹사이트에 동시에 적용됩니다.', createAcme: '계정 생성', acmeHelper: 'Acme 계정은 무료 인증서를 신청하는 데 사용됩니다.', upload: '가져오기', applyType: '유형', apply: '갱신', applyStart: '인증서 신청 시작', getDnsResolve: 'DNS 해석 값을 가져오는 중입니다. 잠시 기다려주세요...', selfSigned: '자체 서명된 CA', ca: '인증 기관', commonName: '공통 이름', caName: '인증 기관 이름', company: '기관 이름', department: '조직 단위 이름', city: '지역 이름', province: '주 또는 지방 이름', country: '국가 이름 (2자리 코드)', commonNameHelper: '예를 들어, ', selfSign: '인증서 발급', days: '유효 기간', domainHelper: '줄당 하나의 도메인 이름, * 및 IP 주소 지원', pushDir: '로컬 디렉토리로 인증서 푸시', dir: '디렉토리', pushDirHelper: '인증서 파일 "fullchain.pem" 및 키 파일 "privkey.pem"이 이 디렉토리에 생성됩니다.', organizationDetail: '조직 세부 정보', fromWebsite: '웹사이트에서 가져오기', dnsMauanlHelper: '수동 해석 모드에서는 생성 후 신청 버튼을 클릭하여 DNS 해석 값을 얻어야 합니다.', httpHelper: 'HTTP 모드를 사용하려면 OpenResty를 설치해야 하며, 와일드카드 도메인 인증서 신청을 지원하지 않습니다.', buypassHelper: 'Buypass 는 중국 본토에서 접근할 수 없습니다.', googleHelper: 'EAB HmacKey 및 EAB kid 를 얻는 방법', googleCloudHelper: 'Google Cloud API 는 중국 본토 대부분에서 접근할 수 없습니다.', skipDNSCheck: 'DNS 확인 건너뛰기', skipDNSCheckHelper: '인증 요청 중 타임아웃 문제가 발생할 경우에만 선택하세요.', cfHelper: 'Global API Key 를 사용하지 마세요.', deprecated: '더 이상 지원되지 않습니다.', deprecatedHelper: '유지 관리가 중단되었으며 향후 버전에서 제외될 수 있습니다. Tencent Cloud 방법을 사용하여 분석하세요.', dnsPodRemoved: '제거됨', dnsPodRemovedTip: 'DnsPod는 lego v5에서 제거되었습니다. 이 계정은 인증서 신청/갱신에 사용할 수 없습니다. Tencent Cloud DNS 계정으로 전환해 주세요.', dnsPodRemovedSSLTip: '이 인증서에 연결된 DnsPod 계정은 lego v5에서 사용할 수 없습니다. 자동 갱신이 실패합니다. DNS 계정을 Tencent Cloud로 전환해 주세요.', disableCNAME: 'CNAME 비활성화', disableCNAMEHelper: '도메인 이름에 CNAME 레코드가 있고 요청이 실패할 경우 선택하세요.', nameserver: 'DNS 서버', nameserverHelper: '사용자 지정 DNS 서버를 사용하여 도메인 이름을 확인합니다.', edit: '인증서 편집', execShell: '인증 요청 후 스크립트 실행', shell: '스크립트 내용', shellHelper: '스크립트의 기본 실행 디렉토리는 1Panel 설치 디렉토리입니다. 인증서가 로컬 디렉토리에 푸시되는 경우 실행 디렉토리는 인증서 푸시 디렉토리가 됩니다. 기본 실행 제한 시간은 30분입니다.', customAcme: '사용자 정의 ACME 서비스', customAcmeURL: 'ACME 서비스 URL', baiduCloud: '바이두 클라우드', pushNode: '다른 노드에 동기화', pushNodeHelper: '신청/갱신 후 선택한 노드로 푸시', fromMaster: '마스터 노드에서 푸시', hostedZoneID: 'Hosted Zone ID', isIP: 'IP 인증서', useEAB: 'EAB 인증 사용', }, firewall: { ipv6Support: 'IPv6 지원', ipv6SupportHelper: 'IPv6 방화벽 규칙의 관리 및 적용을 제어하며 서버의 IPv6 네트워크 기능에는 영향을 주지 않습니다.', ipv6DisableContainerHelper: '컨테이너의 IPv6 포트 정보를 숨깁니다.', ipv6DisableWhitelistHelper: '허용 목록의 IPv6 규칙을 제거하고 나머지 기존 IPv6 규칙은 유지합니다.', ipv6DisableRulesHelper: '1Panel이 관리하는 iptables 및 nftables의 IPv6 규칙을 비활성화합니다.', ipv6DisableNetworkHelper: '서버의 IPv6 네트워크 기능은 비활성화되지 않습니다.', ipv6DisableEffectHelper: '해당 IPv6 접근 제한과 포트 포워딩은 더 이상 적용되지 않습니다.', ipv6Disabled: 'IPv6 지원이 비활성화되어 있습니다. 먼저 방화벽 설정에서 활성화하세요.', familyRepair: '복구', familyIncomplete: '{0} 체인이 불완전합니다', resetWithBackup: '규칙 백업 후 초기화', resetOnly: '초기화만 수행', resetWithBackupHelper: '현재 모듈의 규칙을 JSON으로 저장하여 초기화 또는 시작 시 복원할 수 있습니다.', resetOnlyHelper: '새 백업 없이 현재 규칙을 삭제합니다. 기존 백업은 유지됩니다.', backupDirectoryHelper: '{0}의 유효한 규칙 백업을 표시합니다. 기본적으로 최신 파일이 선택됩니다.', startOnly: '시작만', startAndRestore: '시작 및 백업에서 복원', startWithBackupHelper: '방화벽을 일반적으로 시작하거나 기존 JSON 백업을 선택하여 시작하고 규칙을 복원합니다.', restoreAllRules: '초기화 및 규칙 복원', importRuleBackup: '백업에서 가져오기', initializeOnly: '초기화만 수행', backupRuleCount: '규칙 수', noRuleBackup: '복원할 수 있는 규칙 백업이 없습니다', ruleBackupLoadFailed: '규칙 백업을 불러오지 못했습니다. 다시 시도하거나 백업을 복원하지 않고 초기화하세요.', create: '규칙 만들기', edit: '규칙 수정', quickJump: '빠른 이동', used: '사용됨', unUsed: '사용 안 함', whitelist: '허용 목록', builtinRuleProtected: '시스템 기본 보호 규칙입니다. 편집하거나 삭제할 수 없습니다.', whitelistRuleProtected: '허용 목록 규칙은 순서와 설명만 변경할 수 있습니다. 다른 변경은 설정 → 포트 허용 목록에서 진행하세요.', ruleTargetRequired: 'IP 주소 또는 포트를 하나 이상 입력하세요', largeRuleSet: '방화벽 규칙이 너무 많으면 작업이 느려질 수 있습니다. iptables 또는 nftables 사용을 권장합니다.', scopeMissing: '관리 범위 {0}이(가) 없으며 첫 규칙을 적용할 때 안전하게 생성됩니다.', dockerRestart: '방화벽 작업에는 Docker 서비스 재시작이 필요합니다', firewallHelper: '{0} 시스템 방화벽', firewallNotStart: '현재 시스템 방화벽이 활성화되지 않았습니다. 먼저 활성화하세요.', restartFirewallHelper: '이 작업은 현재 방화벽을 재시작합니다. 계속하시겠습니까?', stopFirewallHelper: '이 작업은 서버 보안을 잃게 만듭니다. 계속하시겠습니까?', startFirewallHelper: '방화벽이 활성화되면 서버 보안이 강화됩니다. 계속하시겠습니까?', noPing: 'Ping 비활성화', enableBanPing: 'Ping 차단', disableBanPing: 'Ping 차단 해제', stop: '정지', portFormatError: '이 필드는 유효한 포트이어야 합니다.', accept: '허용', drop: '차단', anyWhere: '어디든지', allow: '허용', deny: '거부', addressFormatError: '이 필드는 유효한 IP 주소여야 합니다.', forwardRule: '포트 전달 규칙 | 포트 전달 규칙들', dockerGuard: '컨테이너 포트 보호', systemFirewall: '호스트 방화벽', systemFirewallHelper: '호스트 포트 접근과 인바운드 규칙을 관리합니다.', forwardingHelper: '포트 포워딩 규칙을 관리합니다.', dockerFirewallHelper: '1Panel 컨테이너 포트 보호 관리 방식을 선택합니다.', dockerNftablesRequirement: 'Docker ≥ 29.0.0, 실험적', backendRecommendation: 'iptables 또는 nftables 사용을 권장합니다.', configuredRules: '{0}개 규칙 설정됨', addressFamily: 'IP 버전', portOrRange: '포트 / 범위', batchLimit: '한 번에 생성하거나 가져올 수 있는 규칙은 확장 후 기준으로 최대 {0}개입니다.', importDuplicatesRemoved: '파일 내 중복 및 이미 존재하는 규칙을 포함하여 중복 규칙 {0}개를 제거했습니다.', importLimit: '최대 {0}개의 규칙(확장 후 기준)을 가져올 수 있으며, 파일 크기는 {1} KB를 초과할 수 없습니다.', ruleSyncTitle: '규칙 동기화', ruleSyncAction: '규칙 동기화', ruleSyncDatabase: '1Panel 데이터베이스', ruleSyncDatabaseHelper: '1Panel 데이터베이스 규칙을 기준으로 현재 방화벽의 관리 규칙을 동기화하고 조정합니다. 누락된 규칙은 추가되고 불필요한 규칙은 삭제됩니다.', ruleSyncDatabaseTotal: '데이터베이스 규칙', ruleSyncDatabaseConfirm: '데이터베이스 규칙 {0}개와 정확히 일치하도록 {1}을 동기화하시겠습니까? 대상 규칙 {2}개가 삭제되고 누락된 규칙이 추가됩니다.', ruleSyncSource: '구성 소스', ruleSyncTarget: '현재 백엔드', ruleSyncReady: '동기화 가능', ruleSyncExisting: '이미 존재', ruleSyncRemove: '삭제 예정', ruleSyncBlocked: '동기화 불가', ruleSyncReason: '검사 결과', ruleSyncReasonDetail: { missingFromTarget: '대상 방화벽에 이 규칙이 없습니다.', alreadyExistsInTarget: '대상 방화벽에 이 규칙이 이미 존재합니다.', onlyInTarget: '이 규칙은 대상 방화벽에만 존재합니다.', }, ruleSyncPartial: '동기화 완료: 성공 {0}개, 이미 존재 {1}개, 실패 {2}개.', ruleSyncSuccess: '동기화 완료: 성공 {0}개, 이미 존재 {1}개, 삭제 {2}개.', ruleSyncStatus: { ready: '동기화 가능', existing: '이미 존재', remove: '삭제 예정', blocked: '동기화 불가', }, initializeFromFile: '파일에서 초기화', downloadRuleBackup: '규칙 백업 다운로드', importFileHelper: '최대 64 MB의 JSON 파일을 파일 순서대로 나누어 가져옵니다. 변환할 수 없는 규칙은 오류로 보고됩니다.', resetDirectRulesHelper: '{0}의 모든 1Panel 호스트 방화벽 체인, 실행 중인 규칙 및 영구 저장 파일을 삭제합니다.', resetWhitelistRulesHelper: '{0}의 사용자 설정을 초기화하고 기본 상태로 복원한 후 비활성화합니다.', cleanupForwardingBackendHelper: '{0}의 모든 1Panel 전달 규칙, 체인 및 자동 복구 파일을 삭제합니다. 기존 JSON 백업은 유지됩니다.', cleanupDockerBackendHelper: '{0}의 모든 1Panel Docker 보호 규칙, 체인 및 자동 복구 파일을 삭제합니다. 기존 JSON 백업은 유지됩니다.', cleanupBeforeBackendSwitch: '{1}(으)로 전환하기 전에 현재 {0}을(를) 초기화하고 규칙 복원 방법을 확인하세요.', backendSwitchNotice: '하나의 방화벽 관리 방식만 활성화하는 것이 좋습니다. 여러 방화벽을 동시에 실행하면 규칙 충돌, 상태 불일치 또는 컨테이너 포트 접근 오류가 발생할 수 있습니다.', switchBackendHelper: '{0}(으)로 전환하시겠습니까?', switchDockerBackendHelper: '{0}(으)로 전환하시겠습니까? Docker 설정을 업데이트하고 Docker를 재시작합니다.', uninstalledStatus: '설치되지 않음', selectedBackendNotInstalled: '{backend} 서비스를 감지하지 못했습니다. {library}에서 수동으로 설치하거나 {settings}에서 방화벽 백엔드를 전환하세요.', initializedStatus: '초기화됨', partiallyInitialized: '일부 초기화됨', dockerGuardHelper: 'Docker 컨테이너가 호스트에 게시한 포트의 접근 제한을 설정합니다. 보호되지 않은 포트는 Docker 기본 접근 방식을 유지합니다.', dockerTrafficPathMixed: '선택한 포트가 서로 다른 접근 경로를 사용합니다. 각각 설정하세요.', dockerTrafficPathUnknown: '이 포트의 접근 경로를 확인할 수 없습니다. Docker 네트워크 설정을 확인한 후 다시 시도하세요.', dockerTrafficPathReason: { nat_inspect_failed: 'Docker NAT 규칙을 읽을 수 없습니다. 방화벽 명령과 실행 권한을 확인한 후 새로 고침하세요.', proxy_inspect_failed: 'docker-proxy 프로세스를 확인할 수 없습니다. 시스템 프로세스 정보에 대한 접근 권한을 확인한 후 새로 고침하세요.', nat_chain_unreachable: '이 포트의 Docker 전달 규칙은 있지만 NAT 진입 체인이 활성화되지 않았습니다. Docker 방화벽 규칙을 확인하거나 Docker를 다시 시작한 후 새로 고침하세요.', no_matching_path: '이 포트에 활성 Docker 전달 규칙이나 프록시 프로세스가 없습니다. 해당 컨테이너를 시작하거나 다시 시작한 후 새로 고침하세요. 문제가 계속되면 Docker 네트워크 설정을 확인하세요.', }, dockerInputPolicyNotEffective: '이 포트는 호스트가 직접 수신하므로 기존 컨테이너 포트 보호 규칙이 적용되지 않습니다. 호스트 방화벽에서 설정하세요.', dockerInputUseHostFirewall: '이 포트의 접근 규칙은 호스트 방화벽에서 설정하세요.', dockerInputNotProtected: '호스트 INPUT 규칙은 이 Docker 게시 포트를 직접 보호하지 않습니다. 클릭하여 컨테이너 포트 보호를 여세요.', notInitialized: '초기화되지 않음', ipv6RARisk: '네트워크 연결이 끊길 위험이 있어 IPv6 전달 활성화를 차단했습니다. 문서와 시스템 로그를 확인하세요.', ipv6RACheckFailed: '네트워크 구성을 확인할 수 없어 IPv6 전달 활성화를 차단했습니다. 자세한 내용은 시스템 로그를 확인하세요.', ipv6ForwardingOnDemand: 'IPv6 전달이 활성화되지 않았습니다. IPv6 규칙을 추가하거나 복원할 때 확인 후 활성화됩니다.', familyUnsupported: '시스템에서 {0}을 지원하지 않습니다', familyChainIssue: '{0} · {1} 체인 · {2}', dockerGuardUnbindConfirm: '바인딩을 해제하면 모든 컨테이너 포트가 일시적으로 Docker 기본 접근 방식으로 돌아갑니다. 기존 보호 설정은 유지됩니다. 계속하시겠습니까?', deleteDockerGuardPolicyConfirm: '이 엔드포인트가 Docker 기본 접근 방식으로 돌아갑니다. 계속하시겠습니까?', clearDockerGuardPoliciesConfirm: '선택한 엔드포인트가 Docker 기본 접근 방식으로 돌아갑니다. 계속하시겠습니까?', protection: '보호', portDetails: '포트 상세 정보', orphanEndpoints: '연결되지 않은 엔드포인트', orphanPolicies: '연결되지 않은 규칙', orphanPoliciesHelper: '이 시스템 규칙 {0}개와 일치하는 Docker 게시 포트가 없습니다.', composeOrApp: 'Compose / 앱', sources: '소스', deniedSources: '거부된 소스', allowedSources: '허용된 소스', dockerGuardPolicy: '컨테이너 포트 보호 정책', protectionMode: '보호 모드', denySources: '지정한 소스 거부', allowSources: '지정한 소스만 허용', acceptSources: '지정된 소스를 직접 허용', acceptAll: '모든 트래픽을 직접 허용', denyAll: '모든 접근 거부', dockerGuardMixedFamilyHelper: 'IPv4와 IPv6가 모두 선택되었습니다. 출발지 지정 정책은 각각 설정해야 하며, 모든 접근 거부는 바로 적용할 수 있습니다.', dockerGuardInconsistentConfigHelper: '선택한 규칙의 설정이 서로 다릅니다. 다시 설정하면 모두 동일하게 덮어쓰며, 설명이 비어 있으면 모든 설명을 지웁니다.', effective: '적용됨', forwardUnsynced: '미동기화', notEffective: '적용되지 않음', dockerGuardStatusReason: { command_missing: '{0} 방화벽 구성 요소를 사용할 수 없어 해당 보호를 활성화할 수 없습니다. 시스템 방화벽 환경을 확인하세요', docker_chain_missing: 'Docker의 {0} 컨테이너 네트워크가 활성화되지 않아 해당 보호가 필요하지 않습니다. 필요한 경우 Docker에서 {0}을 먼저 활성화하세요', guard_chain_missing: '{0} 포트 보호 초기화가 완료되지 않았습니다. 다시 초기화하세요', jump_missing: '{0} 포트 보호가 바인딩되지 않아 현재 비활성 상태입니다. 다시 바인딩하세요', jump_not_first: '{0} 포트 보호 구성이 올바르지 않아 완전히 작동하지 않을 수 있습니다. 바인딩을 해제한 후 다시 바인딩하세요', jump_duplicate: '{0} 포트 보호 구성이 중복되었습니다. 바인딩을 해제한 후 다시 바인딩하세요', inspect_failed: '{0} 포트 보호 상태를 가져올 수 없습니다. 새로 고치거나 시스템 방화벽을 확인하세요', }, dockerGuardUnprotected: '보호되지 않음', sourcePort: '소스 포트', targetIP: '대상 IP', targetPort: '대상 포트', forwardHelper1: "로컬 포트로 전달하려면, 대상 IP 를 '127.0.0.1'로 설정해야 합니다.", forwardHelper2: '대상 IP 를 비워두면 로컬 포트로 전달됩니다.', forwardPortHelper: '포트 범위를 지원합니다, 예: 8080-8089', forwardInboundInterface: '포워딩 인바운드 네트워크 인터페이스', exportHelper: '{0}개의 방화벽 규칙을 내보내려고 합니다. 계속하시겠습니까?', basicStatus: '현재 방화벽이 바인딩되지 않았습니다. 먼저 바인딩하세요!', initMsg: '{0}을(를) 초기화하려고 합니다. 계속하시겠습니까?', initDirectBackendConflictMsg: '{1}이(가) 아직 바인딩되어 있습니다. {0}을(를) 초기화하면 두 방화벽 규칙 세트가 모두 적용되어 예기치 않게 접근이 차단될 수 있습니다. 계속하시겠습니까?', directBackendConflictWarning: '{0}과(와) {1}이(가) 모두 바인딩되어 두 규칙 세트가 함께 적용됩니다. 서로 차단하지 않는지 확인한 후 사용하지 않는 방화벽을 수동으로 바인딩 해제하세요.', initHelper: '{0}이(가) 초기화되지 않았습니다. 상단 상태 표시줄의 초기화 버튼을 클릭하여 구성하세요!', bindHelper: '바인딩 - 방화벽 규칙은 상태가 바인딩된 경우에만 효과가 있습니다. 확인하시겠습니까?', unbindHelper: '바인딩 해제 - 바인딩 해제 시 추가된 모든 방화벽 규칙이 무효화됩니다. 주의하여 진행하세요. 확인하시겠습니까?', portWhiteList: '포트 화이트리스트', whitelistConfigHelper: '허용 목록을 저장하면 누락된 허용 규칙을 추가하고 일치하는 규칙을 보호합니다. 허용 목록 항목을 수정하거나 삭제해도 기존 규칙은 삭제되지 않습니다.', whitelistDeleteConfirm: '이 화이트리스트 항목만 삭제됩니다. 기존 방화벽 규칙은 유지됩니다. 계속하시겠습니까?', portWhiteListHelper: '단일 포트(예: 80) 또는 포트 범위(예: 8000-8100)를 입력하세요. 포트 번호는 1~65535여야 합니다.', chain: '체인', sourceIP: '소스 IP', destIP: '대상 IP', destPort: '대상 포트', action: '동작', priority: '우선순위', reject: '거부', allPorts: '모든 포트', allProtocolHelper: '모든 프로토콜 및 포트', sourceAddressPlaceholder: '예: 172.16.10.11, 172.16.0.0/24, 2001:db8::1 또는 2001:db8::/64', whitelistServicePortsHelper: '포트 하나를 입력하세요(1-65535). 서비스의 수신 포트는 변경되지 않습니다. 서비스 설정에서 포트를 변경하면 이 화이트리스트 항목도 업데이트됩니다.', whitelistSourcesHelper: 'IP 주소 또는 CIDR 대역을 쉼표나 줄바꿈으로 구분하세요. 비워 두면 {0}을(를) 허용합니다.', destinationPortPlaceholder: '예: 80, 80,443 또는 8080-8089', deleteRuleConfirm: '{0}개의 규칙을 삭제합니다. 계속하시겠습니까?', deleteUsedRuleConfirm: '이 규칙은 {0}이(가) 제공하는 대기 중인 서비스에 적용됩니다. 삭제하면 해당 서비스에 접근하지 못할 수 있습니다. 계속하시겠습니까?', deleteWildcardRuleConfirm: '이 규칙은 {0}에서 {1}에 접근하도록 허용합니다. 삭제하면 여러 서비스에 대한 접근에 영향을 줄 수 있습니다. 계속하시겠습니까?', deleteRiskRulesConfirm: '{0}개의 규칙을 삭제합니다. 그중 {1}개의 허용 규칙이 서비스 접근에 영향을 줄 수 있습니다. 계속하시겠습니까?', editRuleConfirm: '이 규칙을 수정하시겠습니까?', }, runtime: { importEnv: '환경 변수 가져오기', envImportError: '{0}행: {1}', envInvalidAssignment: '유효한 NAME=value 형식이 필요합니다', envUnclosedQuote: '따옴표가 닫히지 않았습니다', envUnexpectedText: '닫는 따옴표 뒤에 불필요한 텍스트가 있습니다', runtime: '실행 환경', workDir: '작업 디렉토리', localHelper: '로컬 환경 설치 및 오프라인 환경 사용 관련 문제는 다음을 참조하세요 ', versionHelper: 'PHP 버전, 예: v8.0', buildHelper: '확장 기능이 많을수록 이미지 생성 시 CPU 사용량이 증가합니다. 환경 생성 후 확장 기능을 설치하는 것도 가능합니다.', openrestyWarn: 'PHP는 OpenResty 버전 1.21.4.1 이상으로 업그레이드해야 사용 가능합니다.', toupgrade: '업그레이드하기', edit: '실행 환경 수정', extendHelper: '목록에 없는 확장 프로그램은 수동으로 입력하고 선택할 수 있습니다. 예를 들어 "sockets"를 입력한 후 드롭다운 목록에서 첫 번째 옵션을 선택하여 확장 목록을 확인하세요.', rebuildHelper: '확장 기능을 수정한 후에는 PHP 애플리케이션을 재빌드해야 적용됩니다.', rebuild: 'PHP 애플리케이션 재빌드', source: 'PHP 확장 소스', ustc: '중국과학기술대학', netease: '네티이즈', aliyun: '알리바바 클라우드', default: '기본', tsinghua: '칭화대학교', xtomhk: 'XTOM 미러 사이트 (홍콩)', xtom: 'XTOM 미러 사이트 (전 세계)', phpsourceHelper: '네트워크 환경에 맞는 적절한 소스를 선택하세요.', appPort: '앱 포트', externalPort: '외부 포트', packageManager: '패키지 관리자', codeDir: '코드 디렉터리', appPortHelper: '애플리케이션이 사용하는 포트.', externalPortHelper: '외부에 노출된 포트.', runScript: '실행 스크립트', runScriptHelper: '시작 명령 목록은 소스 디렉터리의 package.json 파일에서 분석됩니다.', open: '열기', operatorHelper: '{0} 작업이 선택된 운영 환경에서 수행됩니다. 계속하시겠습니까?', taobao: '타오바오', tencent: '텐센트', imageSource: '이미지 소스', moduleManager: '모듈 관리', module: '모듈', nodeOperatorHelper: '{0} {1} 모듈인가요? 이 작업은 운영 환경에 비정상을 일으킬 수 있으므로 진행 전에 확인해 주세요.', customScript: '사용자 정의 시작 명령', customScriptHelper: '전체 시작 명령어를 입력해 주세요. 예: npm run start. PM2 시작 명령어는 pm2-runtime로 변경해 주세요. 그렇지 않으면 시작에 실패합니다.', portError: '포트를 중복 사용하지 마세요.', systemRestartHelper: '상태 설명: 중단 - 시스템 재시작으로 인해 상태 가져오기가 실패했습니다.', javaScriptHelper: '전체 시작 명령을 제공하세요. 예: "java -jar halo.jar -Xmx1024M -Xms256M".', javaDirHelper: '디렉터리는 jar 파일을 포함해야 하며, 하위 디렉터리도 허용됩니다.', goHelper: '전체 시작 명령을 제공하세요. 예: "go run main.go" 또는 "./main".', goDirHelper: '디렉터리 또는 하위 디렉터리는 Go 또는 바이너리 파일을 포함해야 합니다.', pythonHelper: '전체 시작 명령을 제공하세요. 예: "pip install -r requirements.txt && python manage.py runserver 0.0.0.0:5000".', dotnetHelper: '완전한 시작 명령을 입력하세요. 예: dotnet MyWebApp.dll', dirHelper: '주의: 컨테이너 내의 디렉토리 경로를 입력하세요', concurrency: '동시성 체계', loadStatus: '부하 상태', extraHosts: '호스트 매핑', extension: '확장', installExtension: '확장 {0} 설치를 확인하시겠습니까', loadedExtension: '로드된 확장', popularExtension: '인기 확장', uninstallExtension: '확장 {0}을(를) 제거하시겠습니까', phpConfigHelper: '설정 변경 후 운영 환경 재시작이 필요합니다. 계속하시겠습니까', operateMode: '운영 모드', dynamic: '동적', static: '고정', ondemand: '온디맨드', dynamicHelper: '프로세스 수를 동적으로 조정합니다. 트래픽 변동이 크거나 메모리가 적은 사이트에 적합합니다', staticHelper: '프로세스 수를 고정합니다. 고동시성·안정 트래픽 사이트에 적합하지만 자원 소모가 큽니다', ondemandHelper: '필요 시 프로세스를 시작/종료합니다. 자원 효율은 좋지만 초기 응답이 느릴 수 있습니다', max_children: '생성 가능한 최대 프로세스 수', start_servers: '시작 시 생성되는 프로세스 수', min_spare_servers: '최소 유휴 프로세스 수', max_spare_servers: '최대 유휴 프로세스 수', envKey: '이름', envValue: '값', environment: '환경 변수', }, process: { pid: '프로세스 ID', ppid: '부모 PID', numThreads: '스레드', memory: '메모리', diskRead: '디스크 읽기', diskWrite: '디스크 쓰기', netSent: '업링크', netRecv: '다운스트림', numConnections: '연결', startTime: '시작 시간', running: '실행 중', sleep: '대기 중', stop: '중지', idle: '유휴', zombie: '좀비 프로세스', wait: '대기', lock: '잠금', blocked: '차단됨', cmdLine: '시작 명령', basic: '기본', mem: '메모리', openFiles: '열린 파일', env: '환경 변수', noenv: '없음', net: '네트워크 연결', laddr: '출발지 주소/포트', raddr: '목적지 주소/포트', stopProcess: '종료', viewDetails: '세부 사항', stopProcessWarn: '이 프로세스(PID:{0})를 종료하시겠습니까?', kill: '프로세스 종료', killNow: '즉시 종료', killHelper: '프로세스 {0}을(를) 종료하면 일부 프로그램이 정상적으로 작동하지 않을 수 있습니다. 계속하시겠습니까?', processName: '프로세스 이름', }, tool: { supervisor: { loadStatusErr: '프로세스 상태를 가져오지 못했습니다. supervisor 서비스의 상태를 확인하세요.', notSupport: 'Supervisor 서비스를 감지하지 못했습니다. 스크립트 라이브러리 페이지에서 수동으로 설치하세요', list: '데몬 프로세스 | 데몬 프로세스들', config: 'Supervisor 설정', primaryConfig: '주 설정 파일 위치', notSupportCtl: 'supervisorctl 이 감지되지 않았습니다. 스크립트 라이브러리 페이지에서 수동으로 설치하세요.', user: '사용자', command: '명령어', dir: '디렉토리', numprocs: '프로세스 수', initWarn: '이 작업은 주 설정 파일의 "[include]" 섹션에 있는 "files" 값을 수정합니다. 다른 설정 파일의 디렉토리는 "{1Panel 설치 디렉토리}/1panel/tools/supervisord/supervisor.d/"입니다.', operatorHelper: '{1} 작업을 {0}에서 수행합니다. 계속하시겠습니까?', uptime: '운영 시간', notStartWarn: 'Supervisor 가 시작되지 않았습니다. 먼저 시작하세요.', serviceName: '서비스 이름', initHelper: 'Supervisor 서비스가 감지되었지만 초기화되지 않았습니다. 상단 상태 표시줄의 초기화 버튼을 클릭하여 구성하세요.', serviceNameHelper: 'systemctl 로 관리되는 Supervisor 서비스 이름, 보통 supervisor 또는 supervisord입니다.', restartHelper: '이 작업은 초기화 후 서비스를 재시작합니다. 이로 인해 기존의 모든 데몬 프로세스가 중지됩니다.', RUNNING: '실행 중', STOPPED: '중지됨', STOPPING: '중지 중', STARTING: '시작 중', FATAL: '시작 실패', BACKOFF: '시작 예외', ERROR: '오류', statusCode: '상태 코드', manage: '관리', autoRestart: '자동 재시작', EXITED: '종료됨', autoRestartHelper: '프로그램이 비정상적으로 종료된 후 자동으로 재시작할지 여부', autoStart: '자동 시작', autoStartHelper: 'Supervisor 시작 후 서비스를 자동으로 시작할지 여부', }, }, disk: { management: '디스크 관리', partition: '파티션', unmount: '마운트 해제', unmountHelper: '파티션 {0} 을(를) 마운트 해제하시겠습니까?', mount: '마운트', partitionAlert: '디스크 파티션 작업은 디스크 포맷이 필요하며, 기존 데이터는 삭제됩니다. 데이터를 미리 저장하거나 스냅샷을 찍어주세요.', mountPoint: '마운트 디렉토리', systemDisk: '시스템 디스크', unpartitionedDisk: '미파티션 디스크', handlePartition: '지금 파티션', filesystem: '파일 시스템', unmounted: '마운트 해제됨', cannotOperate: '작업 불가', systemDiskHelper: '힌트: 현재 디스크는 시스템 디스크입니다. 작업할 수 없습니다.', autoMount: '자동 마운트', model: '장치 모델', diskType: '디스크 유형', serial: '시리얼 번호', noFail: '마운트 실패는 시스템 시작에 영향을 미치지 않습니다', }, xpack: { ldap: { source: '소스', directoryMissing: 'LDAP에 없음', localCredentialsManaged: '이 사용자의 사용자 이름과 비밀번호는 LDAP에서 관리되므로 로컬에서 변경할 수 없습니다.', sources: { local: '로컬', ldap: 'LDAP', }, importUsers: 'AD/LDAP 사용자 가져오기', searchUsersPlaceholder: '사용자 이름 검색', readFromLDAP: 'LDAP에서 읽기', selectedUsers: '{0} 선택됨', queriedAt: '읽기 시간', cachedResult: '캐시된 결과', roleForNewUsers: '신규 사용자의 역할', selectRole: '역할 선택', roleOnlyForNewUsers: '가져오기를 통해 사용자가 생성되는 경우에만 역할이 필요합니다.', roleRequiredForNewUsers: '새로운 LDAP 사용자의 역할을 선택합니다.', changedFields: '변경된 필드', importSelected: '선택 항목 가져오기', importAll: '모두 가져오기', importPreview: 'AD/LDAP 가져오기 미리보기', importCompleted: 'AD/LDAP 가져오기 완료', incompletePreview: 'LDAP 디렉터리 읽기가 완료되지 않았습니다. LDAP에서 다시 읽어보세요.', missingUsersWarning: 'LDAP에서 누락된 사용자는 엄격한 동기화로 인해 비활성화됩니다.', missingUsersWarningDetail: '{0} 로컬 LDAP 사용자는 더 이상 로그인할 수 없습니다.', action: '액션', reason: '이유', noImportChanges: '가져오기 변경사항 없음', confirmImport: '가져오기 확인', created: '만들기', updated: '업데이트', reactivated: '재활성화', unchanged: '변경되지 않음', conflicts: '충돌', missing: '누락', missingUsersConfirm: 'LDAP에서 누락된 {0}명의 사용자를 비활성화하고 로그아웃합니다. 계속하시겠습니까?', strictSyncConfirm: '엄격한 동기화 확인', status: { importable: '신규 사용자', update_available: '업데이트 가능', up_to_date: '최신', conflict: '충돌', }, fields: { name: '사용자 이름', externalDN: '디렉토리 DN', externalID: '외부 ID', authSourceStatus: '인증 상태', }, actions: { created: '만들기', updated: '업데이트', reactivated: '재활성화', unchanged: '변경되지 않음', skipped: '건너뛰었습니다.', conflicts: '충돌', conflict: '충돌', missing: '비활성화', errors: '오류', error: '오류', }, }, expiresEnterpriseAlert: '친절한 알림: 귀하의 Enterprise Edition 라이선스가 {0}일 후 만료되며, 모든 Enterprise Edition 기능에 더 이상 접근할 수 없습니다. 지속적인 사용을 위해 신속하게 갱신하시기 바랍니다.', expiresProAlert: '친절한 알림: 귀하의 Pro Edition 라이선스가 {0}일 후 만료되며, 모든 Pro Edition 기능에 더 이상 접근할 수 없습니다. 지속적인 사용을 위해 신속하게 갱신하시기 바랍니다.', menu: 'Pro', upage: 'AI 웹사이트 빌더', proAlert: '이 기능을 사용하려면 상용 버전으로 업그레이드하세요', opsReport: { name: '운영 보고서', overview: '개요', system: '호스트 실행', login: '로그인 및 보안', website: '웹사이트 보호', resource: '실행 리소스', cronjob: '예약 작업', alert: '알림 통보', history: '내보내기 기록', setting: '설정', page: { enterprise: '엔터프라이즈', reportNode: '보고서 노드', selectReportNode: '보고서 노드 선택', currentNode: '현재 노드', scoreMeta: '감점 {0}점 · 위험 {1}건', hostAddress: '호스트 주소', panelVersion: '패널 버전', cpuCores: '물리 코어', coreUnit: '{0}코어', memoryTotal: '메모리 총량', reportDate: '보고서 날짜', serverSecurityOverview: '서버 보안 운영 개요', securityScore: '보안 점수', overviewSummary: '현재 보안 등급: {0}. 총 감점 {1}점, {2}개 위험 항목 발견, {3}개 검사 대상 포함.', riskDistribution: '위험 분포', totalDeducted: '총 감점', noRiskDeducted: '미감점', scoreTrend: '점수 추이', scoreLevelSafe: '안전', scoreLevelAttention: '주의 필요', scoreLevelMediumRisk: '중위험', scoreLevelHighRisk: '고위험', scoreCategoryHost: '호스트 리소스', scoreCategoryLogin: '로그인 보안', scoreCategoryWebsite: '웹사이트 및 인증서', scoreCategoryCronjob: '예약 작업', scoreCategoryResource: '런타임 리소스', scoreDiskHigh: '디스크 {0} 사용률 {1}%', scoreDiskMedium: '디스크 {0} 사용률 {1}%', scoreResourceHigh: '{0} 현재 사용률 {1}%', scoreResourceMedium: '{0} 현재 사용률 {1}%', scoreLoadMedium: '현재 부하 {0}', scoreMonitorDisabled: '호스트 모니터링 미활성화', scorePanelLoginFailedHigh: '패널 로그인 실패 {0}회', scorePanelLoginFailedMedium: '패널 로그인 실패 {0}회', scoreSSHLoginFailedHigh: 'SSH 로그인 실패 {0}회', scoreSSHLoginFailedMedium: 'SSH 로그인 실패 {0}회', scoreMFADisabled: 'MFA 미활성화', scoreAllowIPsOpen: '허용 IP 및 바인딩 도메인이 미구성되었거나 접근 제한이 설정되지 않음', scorePanelHTTPSDisabled: '패널 HTTPS 미활성화', scoreSSHRootLogin: 'SSH Root 로그인 허용됨', scoreSSHPasswordAuth: 'SSH 비밀번호 인증 활성화, 키 인증 미활성화', scoreSSLExpired: '{0} 인증서가 만료되었습니다', scoreSSLHigh: '{0} 인증서 만료까지 {1}일 남음', scoreSSLMedium: '{0} 인증서 만료까지 {1}일 남음', scoreWebsiteExpired: '{0} 웹사이트가 만료되었습니다', scoreWebsiteExpire: '{0} 웹사이트 만료까지 {1}일 남음', scoreWebsiteHTTP: '{0} HTTPS 미사용', scoreWebsiteStopped: '{0} 상태 비정상', scoreWebsiteMonitorUnavailable: '웹사이트 모니터링에서 사용 불가 사이트 감지', scoreWebsiteMonitorAvailability: '웹사이트 모니터링 요청 가용률 {0}%가 임계값 미달', scoreWebsiteMonitorStatusAbnormal: '웹사이트 모니터링이 활성화되었지만 초기화되지 않았거나 비정상 상태입니다', scoreWafDisabled: 'WAF 미활성화, 웹사이트 보호 미적용', scoreWafHighRiskHit: 'WAF 보고 기간 내 {0}개 위험 규칙 매칭', scoreCronjobFailed: '최근 7일간 {0}건의 예약 작업 실패 기록', scoreAppFailed: '{0} 애플리케이션 비정상', scoreAppStopped: '{0} 애플리케이션 중지됨', scoreContainerHigh: '{0} 컨테이너 상태 비정상', scoreContainerExited: '{0} 컨테이너 중지됨', scoreContainerResource: '{0} 컨테이너 리소스 사용량 과다', scoreContainerPublicPort: '{0} 컨테이너에 공개 포트가 있습니다', attentionItems: '주의 필요 항목', attentionAssets: '주의 필요 자산', riskItems: '위험 항목', object: '대상', description: '설명', itemUnit: '건', recordUnit: '건', certUnit: '매', containerUnit: '개', loginFailed: '로그인 실패', sslExpire: '인증서 만료', abnormalContainer: '비정상 컨테이너', statAttentionDesc: '현재 총 감점 {0}점', statLoginDesc: '패널 {0}건 · SSH {1}건', statSslDesc: '총 {0}매 인증서 검사', statContainerDesc: '총 {0}개 컨테이너 검사', assetHostDesc: '디스크 최대 사용률 {0}%', assetWebsiteDesc: '{0}매 인증서 만료 임박, {1}개 웹사이트 상태 비정상', assetResourceDesc: '{0}개 앱 비정상, {1}개 컨테이너 비정상', assetCronjobDesc: '최근 7일간 {0}건 실패 기록, {1}개 작업 미활성화', app: '애플리케이션', website: '웹사이트', websiteSsl: '웹사이트 / 인증서', cronjob: '예약 작업', container: '컨테이너', sslCertificate: 'SSL 인증서', loginSecurity: '로그인 보안', panelLogin: '패널 로그인', sshLogin: 'SSH 로그인', failedRecord: '실패 기록', expired: '만료됨', expiredDays: '{0}일 전 만료', remainingDays: '{0} · {1}일 남음', enabled: '활성화', disabled: '비활성화', exportRecordFailed: '내보내기 기록 저장 실패', hostInfo: '호스트 정보', hostname: '호스트명', osVersion: '시스템 버전', kernelVersion: '커널 버전', arch: '아키텍처', uptime: '가동 시간', diskUsage: '디스크 사용량', mountPoint: '마운트 포인트', device: '장치', capacity: '용량', used: '사용량', usageRate: '사용률', memory: '메모리', load: '부하', maxDiskUsage: '디스크 최대 사용률', panelLoginSecurity: '패널 로그인 보안 설정', sshSecurity: 'Linux 서버 SSH 보안 설정', panelFailedRecords: '패널 로그인 실패 기록', sshFailedRecords: 'SSH 로그인 실패 기록', location: '소재지', configItem: '설정 항목', currentValue: '현재 값', securityEntrance: '보안 입구', configured: '구성됨', notConfigured: '미구성', normal: '정상', needAttention: '주의 필요', allowIPs: '허용 IP', restricted: '제한됨', unrestricted: '미제한', bindDomain: '바인딩 도메인', accessRestriction: '접근 제한', panelHTTPS: '패널 HTTPS', passwordComplexity: '비밀번호 복잡도', sshService: 'SSH 서비스', running: '실행 중', notRunning: '미실행', listenPort: '리스닝 포트', read: '읽기 완료', rootLogin: 'Root 로그인', passwordAuth: '비밀번호 인증', keyAuth: '키 인증', panelLoginFailed: '패널 로그인 실패', sshLoginFailed: 'SSH 로그인 실패', panelSecurityItems: '패널 보안 항목', sshSecurityItems: 'SSH 보안 항목', loginSecurityHealthStatus: '로그인 보안 상태', adjustSSHSecurity: 'SSH 보안 조정', viewLoginLogs: '로그인 로그 보기', riskLevel: '위험 등급', goConfig: '설정하기', viewMore: '더 보기', involvedIPs: '{0}개 IP 관련', sessionTimeout: '세션 타임아웃', countUnit: '회', recent24Hours: '최근 24시간', currentService: '현재 서비스', riskItemsExist: '{0}개 위험 항목 존재', loginHealthRiskDesc: '{0}개의 위험 설정이 감지되었습니다. 로그인 보안을 강화하여 침입 위험을 낮추세요.', loginHealthNormalDesc: '현재 로그인 및 SSH 보안 설정이 정상 상태입니다', loginHealthNormalReason: '로그인 보안 설정 정상', securityEntranceConfiguredDesc: '보안 입구가 구성되어 기본 입구 노출 위험이 감소됩니다', securityEntranceRiskDesc: '보안 입구 미개방, 기본 로그인 입구를 숨기는 것을 권장합니다', allowIPsRestrictedDesc: '패널 접근 허용 IP가 제한되어 있습니다', allowIPsRiskDesc: '접근 IP가 제한되지 않았습니다. 공인 환경에서는 허용 IP 구성을 권장합니다', bindDomainRestrictedDesc: '접근 도메인이 바인딩되어 있습니다', bindDomainRiskDesc: '접근 도메인이 바인딩되지 않았습니다. 고정 도메인 접근 제한을 권장합니다', accessRestrictionValue: '허용 IP: {0} / 바인딩 도메인: {1}', accessRestrictionNormalDesc: '허용 IP 또는 바인딩 도메인이 구성되어 패널 접근 경로가 제한됩니다', accessRestrictionRiskDesc: '허용 IP와 바인딩 도메인이 모두 미구성되었거나 접근 제한이 없습니다. 최소 하나의 설정을 권장합니다', panelHTTPSNormalDesc: '패널 HTTPS가 활성화되어 있습니다', panelHTTPSRiskDesc: '패널 HTTPS가 비활성화되어 있습니다. 로그인 구간의 평문 노출 위험이 있습니다', passwordComplexityNormalDesc: '비밀번호 복잡도 검증이 활성화되어 있습니다', passwordComplexityRiskDesc: '비밀번호 복잡도 검증이 비활성화되어 있습니다. 약한 비밀번호 위험이 높습니다', mfa: 'MFA 인증', mfaNormalDesc: 'MFA 인증이 활성화되어 로그인 보안이 강화됩니다', mfaRiskDesc: 'MFA 인증이 비활성화되어 있습니다. 다중 인증 활성화를 권장합니다', sessionTimeoutNormalDesc: '세션 타임아웃이 안전한 범위 내에 있습니다', sessionTimeoutRiskDesc: '세션 타임아웃이 깁니다. 유휴 세션 유효기간을 제한하는 것을 권장합니다', sshServiceNormalDesc: 'SSH 서비스가 정상 실행 중입니다', sshServiceRiskDesc: 'SSH 서비스가 실행되지 않거나 상태가 비정상입니다', sshPortNormalDesc: 'SSH 포트가 기본 포트에서 변경되었습니다', sshPortRiskDesc: '기본 22 포트를 사용 중입니다. 필요에 따라 변경을 권장합니다', rootLoginNormalDesc: 'Root 사용자가 직접 로그인할 수 없습니다', rootLoginRiskDesc: 'Root 사용자가 직접 로그인할 수 있습니다. 비활성화를 권장합니다', passwordAuthNormalDesc: 'SSH 비밀번호 로그인이 비활성화되어 있습니다', passwordAuthRiskDesc: '비밀번호 로그인이 허용되어 있습니다. 무차별 대입 공격 위험이 높습니다', keyAuthNormalDesc: 'SSH 키 인증이 활성화되어 있습니다', keyAuthRiskDesc: '키 인증이 비활성화되어 있습니다. 키 기반 로그인을 권장합니다', websiteOverview: '웹사이트 개요', primaryDomain: '주 도메인', expireTime: '만료 시간', domain: '도메인', issuer: '발급 기관', autoRenew: '자동 갱신', websiteCount: '웹사이트 수', httpsWebsite: 'HTTPS 웹사이트', certCount: '인증서 수', websiteExpire: '웹사이트 만료', database: '데이터베이스', remoteDatabase: '원격 데이터베이스', address: '주소', containerResourceUsage: '컨테이너 리소스 사용량', spaceUsage: '사용 공간', reclaimable: '회수 가능', containerReclaimable: '컨테이너 회수 가능', image: '이미지', volume: '데이터 볼륨', buildCache: '빌드 캐시', alert: '알림', alertConfigured: '알림 구성됨', alertOperations: '알림 통보', alertTaskCount: '알림 작업', enabledAlertTask: '활성 작업', disabledAlertTask: '중지 작업', alertChannels: '통보 채널', alertLogCount: '알림 로그', alertSuccessRate: '알림 성공률', alertFailedLogs: '실패 알림 로그', alertPendingLogs: '동기화 대기 로그', alertPending: '동기화 대기', alertTaskStats: '알림 작업 통계', alertTaskType: '알림 유형', alertLogStatusStats: '알림 실행 상태', alertHealthNormal: '정상', alertHealthAttention: '주의 필요', alertHealthRisk: '고위험', alertHealthSummary: '알림 건강 상태', alertHealthNormalReason: '알림 작업, 통보 채널, 실행 로그가 모두 정상 상태입니다', alertNoChannelReason: '활성화된 통보 채널이 없습니다', alertFailedLogReason: '{0}건의 실패 로그가 존재합니다', alertPendingReason: '{0}건의 알림 로그가 동기화 대기 중입니다', alertDisabledTaskReason: '{0}개의 알림 작업이 중지되었습니다', alertNoTaskReason: '구성된 알림 작업이 없습니다', goAlertConfig: '알림 설정', goAlertLogs: '알림 로그', configureAlertChannel: '통보 채널 설정', createAlertTask: '알림 작업 생성', viewAlertTasks: '알림 작업 보기', viewFailedAlertLogs: '실패 로그 보기', viewAlertLogs: '알림 로그 보기', alertChannelSummary: '{0} / {1}개 채널 활성화', alertTaskEnabledDesc: '{0}개 작업 활성화', alertTaskSummary: '활성 {0}개, 중지 {1}개', alertLogSummary: '성공 {0}건, 실패 {1}건', alertPendingDesc: '{0}건의 로그 동기화 대기 중', alertLogSuccessDesc: '통보 완료', alertLogFailedDesc: '채널 설정 또는 전송 경로를 확인하세요', alertLogPendingDesc: '오프라인 또는 동기화 경로 대기 중', failedAlertLogs: '실패 알림 로그', disabledAlertTasks: '중지된 알림 작업', alertTableDisplayDesc: '현재 {0}건 표시, 총 {1}건', alertMsg: '알림 내용', alertMethod: '알림 방식', alertRule: '알림 규칙', noAlertTask: '알림 작업이 없습니다', noFailedAlertLog: '실패 알림 로그가 없습니다', noDisabledAlertTask: '중지된 알림 작업이 없습니다', alertCronjobType: '예약 작업: {0}', alertAllTargets: '전체 대상', alertAllDisks: '전체 디스크', alertAllCertificates: '전체 인증서', alertAllWebsites: '전체 웹사이트', alertDiskRuleShort: '{0} {1}{2} 초과, 매일 {3}회', alertAverageRuleShort: '{0}분 평균 {1}% 초과, 매일 {2}회', alertTimeRuleShort: '{0}일 이내 트리거, {1}회 전송', alertSendCountRuleShort: '매일 {0}회 전송', alertConfigInvalid: '설정 비정상', scoreCategoryAlert: '알림 통보', scoreAlertNoTask: '구성된 알림 작업이 없습니다', scoreAlertNoEnabledTask: '모든 알림 작업이 비활성화되었습니다', scoreAlertDisabledTask: '{0}개의 알림 작업이 중지되었습니다', scoreAlertNoChannel: '활성화된 알림 통보 채널이 없습니다', scoreAlertFailedHigh: '{0}건의 알림 실패 로그가 존재합니다', scoreAlertFailedMedium: '{0}건의 알림 실패 로그가 존재합니다', scoreAlertPending: '{0}건의 알림 로그가 동기화 대기 중입니다', statAlertDesc: '활성 작업 {0}개 · 채널 {1}개', assetAlertDesc: '실패 로그 {0}건, 동기화 대기 {1}건', failedExecutionRecords: '실패 실행 기록', taskID: '작업 ID', executeTime: '실행 시간', backupTasks: '백업 작업', systemMetrics: '실행 지표', cpu: 'CPU', thresholdPercent: '임계값 {0}%', recent24HourPeakPercent: '최근 24시간 피크 {0}', loadAverage: '1 / 5 / 15분 부하: {0} / {1} / {2}', sourceMount: '마운트 포인트 {0}', storageUsage: '저장 공간 사용량', localDisk: '로컬 디스크', highUsagePeriods: '고부하 시간대', timeRange: '시간 범위', threshold: '임계값', duration: '지속 시간', peak: '피크', scoring: '점수 산정', counted: '산정됨', notCounted: '미산정', dataSource: '데이터 소스', noHighUsagePeriod: '고부하 시간대가 없습니다', monitorDisabledOrNoData: '호스트 모니터링이 미활성화되었거나 모니터 데이터가 없습니다', systemHealthStatus: '최근 24시간 호스트 실행 위험 상태', mainReasons: '주요 원인', viewHostMonitor: '호스트 모니터 보기', systemHealthAttentionDesc: '최근 24시간 동안 {0}개의 위험 항목이 감지되었습니다. 리소스 피크와 디스크 사용률을 우선 확인하세요.', systemHealthNormalDesc: '최근 24시간 호스트 실행 지표가 정상 상태입니다', monitorEnabled: '모니터링 활성화됨', cpuCoreUsage: '{0} / {1}코어', load1Minute: '1분 부하', diskSpaceUsage: '디스크 공간 사용량', usedCapacity: '사용량 / 총 용량', fileSystem: '파일 시스템', resourceTrendSummary: '리소스 추이 요약', last24Hours: '최근 24시간', granularityHour: '단위: 1시간', current: '현재', average: '평균', totalItems: '총 {0}건', to: '~', hoursShort: '{0}시간', minutesShort: '{0}분', websiteStatus: '웹사이트 상태', websiteHealthStatus: '웹사이트 보호 건강 상태', websiteHealthNormalReason: '웹사이트, 인증서, WAF, 웹사이트 모니터링이 모두 정상입니다', websiteHealthAttentionDesc: '{0}개의 위험 항목이 감지되었습니다. 웹사이트 보안과 가용성을 위해 신속히 처리하세요.', websiteHealthNormalDesc: '현재 웹사이트 보호 지표가 정상 상태입니다', handleSslRisk: '인증서 위험 처리', viewWaf: 'WAF 보기', priority: '우선순위', riskDescription: '위험 설명', deductScore: '감점 점수', remaining: '잔여', wafSourceIpTop: 'WAF 차단 출처 IP TOP5', wafAffectedSiteTop: '영향받은 사이트 TOP5', sslRisk: '인증서 위험', sslExpiring: '인증서 만료 임박', includedInReport: '보고서 포함', needRenewal: '갱신 권장', fromExpireInfo: '만료 정보 기반', runningWebsite: '실행 중 웹사이트', fromWebsiteStatus: '웹사이트 목록 상태 기반', stoppedWebsite: '중지된 웹사이트', confirmStoppedWebsite: '예상된 상태인지 확인하세요', expiringWebsite: '만료 임박 웹사이트', expiringSoon: '만료 임박', none: '없음', noSslRisk: '처리할 인증서가 없습니다', websiteProtection: 'WAF 및 웹사이트 모니터링', websiteMonitor: '웹사이트 모니터링', waf: 'WAF', siteAvailability: '요청 가용률', monitoredSites: '모니터링 사이트', requestCount: '요청 수', abnormalSites: '비정상 사이트', count5xxSource: '5xx 요청 기준 집계', wafIntercept: 'WAF 차단', websiteMonitorDisabledOrNoData: '웹사이트 모니터링이 미활성화되었거나 모니터 데이터가 없습니다', wafDisabledOrNoData: 'WAF가 미활성화되었거나 차단 데이터가 없습니다', serviceEnabledButAbnormal: '활성화되었지만 비정상 상태입니다', noWafData: 'WAF 차단 데이터가 없습니다', sourceIP: '출처 IP', hitCount: '매칭 횟수', level: '등급', attackType: '공격 유형', requestRatio: '요청 비율', installed: '설치됨', normalRunning: '정상 실행', failedStart: '시작 실패', manualStopped: '수동 중지', failed: '실패', success: '성공', canUpdate: '업그레이드 가능', listSeparator: '、', containerCount: '컨테이너 수', stopped: '중지', abnormal: '비정상', abnormalContainers: '비정상 컨테이너', resourceUsage: '리소스 사용량', exposedContainerPorts: '노출 포트', portMapping: '포트 매핑', risk: '위험', noAbnormalContainer: '비정상 컨테이너가 없습니다', noExposedContainer: '노출 포트가 감지되지 않았습니다', publicExpose: '공인 노출', privateExpose: '내부 매핑', resourceHealth: '런타임 리소스 상태', checkTime: '점검 시간', resourceHealthNormalDesc: '현재 애플리케이션, 데이터베이스, 컨테이너 리소스가 정상입니다', resourceHealthAttentionDesc: '{0}개의 주의 항목이 감지되었습니다. 중지된 리소스와 공개 포트를 우선 확인하세요.', resourceHealthRiskDesc: '{0}개의 고위험 항목이 감지되었습니다. 비정상 컨테이너 또는 시작 실패 애플리케이션을 우선 처리하세요.', resourceThresholdContainers: 'CPU / 메모리 임계치 초과 컨테이너', noThresholdExceededContainer: '임계치를 초과한 컨테이너가 없습니다', triggerMetric: '트리거 항목', resourceReasonAppFailed: '애플리케이션 {0}개 시작 실패', resourceReasonAppStopped: '애플리케이션 {0}개 중지됨', resourceReasonContainerAbnormal: '컨테이너 {0}개 상태 비정상', resourceReasonContainerStopped: '컨테이너 {0}개 중지됨', resourceReasonPublicPorts: '공개 포트 {0}개', resourceReasonNormal: '애플리케이션, 데이터베이스, 컨테이너 상태가 정상입니다', viewAbnormalContainers: '비정상 컨테이너 보기', viewExposedPorts: '노출 포트 보기', viewAppResources: '앱 리소스 보기', viewRuntimeResources: '런타임 리소스 보기', viewContainerResources: '컨테이너 리소스 보기', configuredServices: '구성된 서비스', publicPrivatePorts: '공개 {0}개 / 내부 매핑 {1}개', currentDisplayTotal: '총 {1}개 중 {0}개 표시', reclaimableSpace: '회수 가능 공간', estimatedReclaimable: '예상 회수 가능', unusedImageSpace: '사용하지 않는 이미지 공간', stoppedContainerSpace: '중지된 컨테이너 공간', unusedVolumeSpace: '사용하지 않는 볼륨 공간', buildCacheSpace: 'Docker 빌드 캐시 공간', executionRecords: '실행 기록', successRate: '성공률', failedJobs: '실패 작업', recentRecoveryPoint: '최근 복구 지점', disabledCronjobTasks: '비활성화된 예약 작업', remoteCoverage: '원격 포함', recent7Days: '최근 7일', taskTypeStats: '작업 유형 통계', total: '합계', taskTypeDesc: '활성 {0}개, 미활성 {1}개', failedOrAttentionTasks: '실패 또는 주의 필요 작업', execution: '실행 현황', latestExecution: '최근 실행', remoteBackup: '원격 백업', localOnly: '로컬만', covered: '포함됨', noAttentionCronjob: '실패 또는 주의 필요한 예약 작업이 없습니다', cronjobHealth: '예약 작업 상태', cronjobHealthNormalDesc: '예약 작업 실행과 백업 구성이 정상입니다', cronjobHealthAttentionDesc: '{0}개의 위험 항목이 감지되었습니다. 비활성 작업과 백업 범위를 우선 확인하세요.', cronjobHealthRiskDesc: '{0}개의 위험 항목이 감지되었습니다. 실패 작업과 비활성 작업을 우선 처리하세요.', cronjobReasonFailed: '실패 기록 {0}건', cronjobReasonDisabled: '{0}개 작업 비활성화', cronjobReasonLocalOnlyBackup: '로컬 전용 백업 {0}개', cronjobReasonNormal: '예약 작업 실행과 백업 범위가 정상입니다', riskLow: '낮은 위험', viewFailedRecords: '실패 작업 보기', viewCronjobTasks: '예약 작업 보기', checkBackupTasks: '백업 작업 확인', generationRule: '생성 규칙', scheduleDaily: '매일', scheduleDailyDesc: '매일 09:00에 최근 24시간 보고서 생성', scheduleWeekly: '매주', scheduleWeeklyDesc: '매주 월요일 09:00에 최근 7일 보고서 생성', scheduleMonthly: '매월', scheduleMonthlyDesc: '매월 1일 09:00에 전월 보고서 생성', scheduleCurrentDaily: '매일 09:00에 최근 24시간 보고서 생성 · 다음 {0}', scheduleCurrentWeekly: '매주 월요일 09:00에 최근 7일 보고서 생성 · 다음 {0}', scheduleCurrentMonthly: '매월 1일 09:00에 전월 보고서 생성 · 다음 {0}', notificationMethod: '통보 방식', channel: '채널', receiver: '수신 대상', systemThreshold: '시스템 임계값', metric: '지표', currentRule: '현재 규칙', hostMonitor: '호스트 모니터링', monitorInterval: '모니터링 간격', exportSettings: '내보내기 설정', lastExportReport: '최근 생성 결과', noLastExportReport: '내보내기 보고서 기록이 없습니다', lastExportStatus: '마지막 내보내기 상태', exportFile: '내보내기 파일', generateTime: '생성 시간', fileSize: '파일 크기', viewExportHistory: '내보내기 기록 보기', defaultFormat: '기본 형식', savePath: '저장 경로', savePathRequired: '보고서 저장 경로를 설정하세요', autoExport: '자동 내보내기 활성화', autoExportDesc: '활성화 시 매일 09:00에 자동으로 운영 보고서를 생성합니다', autoExportEnabled: '자동 내보내기 활성화됨', autoExportDisabled: '자동 내보내기 비활성화됨', readOnlyPermissionTip: '현재 계정은 운영 보고서 설정을 볼 수만 있습니다. 수정이 필요하면 관리자에게 문의하세요.', refreshing: '새로고침 중', exporting: '내보내기 중', exportFailed: '보고서 내보내기 실패', generating: '생성 중', saved: '저장됨', saveFailed: '설정 저장 실패', generateNow: '즉시 생성', generateSuccess: '보고서 파일 생성됨: {0}', generateFailed: '보고서 생성 실패', enabledStatus: '활성화', disabledStatus: '비활성화', thresholdRule: '임계값 {0}, 연속 {1}회 트리거', hours: '{0}시간', minutes: '{0}분', seconds: '{0}초', totalExports: '총 내보내기 수', successExports: '성공 내보내기', failedExports: '실패 내보내기', reportName: '보고서 이름', exportFormat: '내보내기 형식', operator: '운영자', triggerType: '트리거 방식', filePath: '파일 경로', manualExport: '수동', scheduledExport: '예약', exportResult: '내보내기 결과', exportDetail: '내보내기 설명', }, }, user: { user: '사용자', userInfo: '사용자 정보', userManage: '사용자 관리', superAdmin: '최고 관리자', superAdminDesc: '시스템 전체 관리 권한을 보유하며 모든 리소스와 설정을 관리할 수 있습니다.', nodeAdmin: '노드 관리자', nodeAdminDesc: '지정된 노드의 관리 권한을 보유하며 노드 내 리소스와 설정을 관리할 수 있습니다.', readOnly: '읽기 전용', readOnlyDesc: '시스템의 모든 읽기 전용 권한을 보유하며 모든 리소스와 설정을 볼 수 있습니다.', bindNode: '노드 연결', boundUsers: '바인딩된 사용자', role: '역할', roleName: '이름', permission: '권한', permissionDuplicate: '각 노드에는 하나의 역할만 지정할 수 있습니다', nodeAdminMasterConfirm: '마스터 노드의 노드 관리자 권한은 높은 수준이므로 실제 관리 필요에 따라 신중하게 할당하세요.', permissionLinkageTip: '의존 관계가 있으면 관련 권한이 자동 선택되며, 수동으로 해제하면 일부 기능에서 "현재 사용자에게 권한이 없습니다"가 표시될 수 있습니다.', allViewPermissionHelper: 'AI 게이트웨이의 모든 보기 권한을 부여합니다.', apiKeyViewPermissionHelper: 'AI 게이트웨이 API Key만 볼 수 있습니다.', masterOnlyPermission: '마스터 노드 권한', masterOnlyPermissionHelper: '이 권한은 마스터 노드에서만 적용됩니다.', view: '보기', manage: '관리', authManage: '인증 관리', auth: { providerNavigation: '인증 공급자', defaultNode: '기본 노드', defaultNodePlaceholder: '노드를 선택하세요', defaultNodeHelper: '새 사용자에게만 사용됩니다.', defaultNodeRequired: '유효한 기본 노드를 선택하세요.', nodesLoadFailed: '노드를 불러오지 못했습니다. 기본 노드를 선택하기 전에 다시 시도하세요.', nodeHandling: '노드 처리', assignDefaultNode: '기본 노드 할당: {node}', keepExistingNode: '기존 노드 권한 유지', providers: { ldap: 'AD/LDAP', passkey: 'Passkey', radius: 'Radius', oidc: 'OIDC', saml2: 'SAML2', cas: 'CAS', oauth2: 'OAuth2', dingtalk: 'DingTalk', feishu: 'Feishu', wecom: 'WeCom', }, providerDescriptions: { ldap: 'Active Directory, OpenLDAP 및 기타 LDAP 서비스와 호환 가능', passkey: '비밀번호 없는 로그인을 위해 장치 자격 증명 사용', radius: 'Radius 서비스를 통해 네트워크 액세스 인증', oidc: 'OpenID Connect로 엔터프라이즈 Single Sign-On 연결', saml2: '기업 ID 연동을 위해 SAML2 사용', cas: 'Single Sign-On을 위한 중앙 집중식 인증 서비스 연결', oauth2: '호환 가능한 OAuth2 ID 서비스 연결', dingtalk: 'DingTalk 조직 ID 및 QR 로그인 사용', feishu: 'Feishu 조직 ID 및 계정 동기화 사용', wecom: 'WeCom 회원 본인 인증', }, planned: '예정', plannedTitle: '{0} 인증 설정', plannedDesc: '이 인증 공급자는 계획되어 있으며 아직 사용할 수 없습니다.', oidc: { accessMode: '연결 모드', accessModeDesc: 'ID 공급자가 지원할 때마다 표준 Discovery를 사용하세요.', actionCreate: '사용자 만들기', actionKeepName: '현재 이름 유지', actionPending: '결과를 기다리는 중', actionReject: '로그인 거부', actionUpdate: '신원 정보 업데이트', advanced: '고급 설정', advancedDesc: '공급자가 호환성 옵션을 요구하지 않는 한 안전한 기본값을 유지하세요.', assignDefaultRole: '기본 역할 할당: {role}', authorizationEndpoint: 'Authorization Endpoint', authorizationEndpointInvalid: '유효한 Authorization Endpoint를 입력하세요.', authorizationFlow: '인가 흐름', automatic: '자동', automaticPolicy: '자동 처리 정책', automaticPolicyDesc: '이 규칙은 백엔드에 의해 시행되며 관리자 스위치가 아닙니다.', basic: '기본 설정', basicDesc: '공급자 모드를 선택한 다음 클라이언트와 콜백을 구성합니다.', browserTest: '브라우저 테스트 로그인', browserTestConflict: '신원은 확인되었지만 사용자 이름이 충돌합니다', browserTestConflictHelper: '매핑된 사용자 이름은 다른 신원에 속하므로 자동으로 연결하지 않습니다.', browserTestExpired: '브라우저 테스트가 만료되었습니다.', browserTestExpiredHelper: '만료되기 전에 새 브라우저 테스트를 시작하고 인증을 완료하세요.', browserTestFailed: '브라우저 테스트 실패', browserTestFailedHelper: '신원 미리보기를 완료할 수 없습니다. 현지화된 백엔드 오류를 검토하세요.', browserTestIsolation: '실제 인증 왕복을 수행하지만 사용자를 생성하거나 업데이트하지 않고, 역할을 할당하거나 인증된 패널 세션을 생성하지 않습니다.', browserTestPopupBlocked: '이 사이트에 대한 팝업을 허용한 다음 브라우저 테스트를 다시 시작하세요.', browserTestPopupClosed: '테스트가 완료되기 전에 인증 창이 닫혔습니다.', browserTestSuccess: '공급자 확인 성공', browserTestSuccessHelper: '사용자 또는 세션을 변경하지 않고 ID 매핑을 미리 보았습니다.', browserTestTitle: 'OIDC 브라우저 테스트 로그인', browserTestWaiting: '공급자 인증 대기 중', browserTestWaitingHelper: '새 브라우저 창에서 로그인을 완료하세요. 이 페이지는 자동으로 업데이트됩니다.', callbackCopied: 'OIDC 콜백 URL이 복사되었습니다.', callbackURL: '콜백 URL', callbackURLHelper: '이 URL을 ID 공급자 클라이언트의 허용된 콜백 URL에 추가하세요.', cancelClearSecret: '삭제 취소', clearSecret: 'Client Secret 지우기', clearSecretConfirm: 'Client Secret은 저장한 후에만 제거됩니다. 계속하시겠습니까?', clientAuthMethod: '클라이언트 인증 방법', clientAuthMethodHelper: 'ID 공급자에서 이 클라이언트에 설정한 인증 방식을 선택하세요.', clientAuthMethodRequired: '클라이언트 인증 방법을 선택하세요.', clientID: 'Client ID', clientIDRequired: 'Client ID를 입력하세요.', clientSecret: 'Client Secret', clockSkew: '토큰 시간 오차 허용', clockSkewHelper: 'ID 공급자와 1Panel 사이의 약간의 시간 차이를 허용합니다. 기본값인 60초를 유지하세요.', clockSkewRequired: '토큰 시간 오차 허용 값을 입력하세요.', compatibilityMode: '호환 모드', compatibilityModeHelper: '불완전한 Discovery 또는 다시 작성된 엔드포인트에만 사용하세요. 코어 OIDC 검증은 활성화된 상태로 유지됩니다.', configurationFailedHelper: '테스트에 실패했습니다. 페이지에 현지화된 백엔드 오류만 표시됩니다.', configurationFailedTag: '테스트 실패', configurationHighRiskPassed: '구성이 통과되었지만 고위험 호환성 옵션이 포함되어 있습니다.', configurationHighRiskTag: '고위험 구성이 통과되었습니다.', configurationNotTested: '현재 구성은 테스트되지 않았습니다.', configurationNotTestedTag: '테스트되지 않음', configurationPassed: '현재 구성이 보안 및 기능 검사를 통과했습니다.', configurationPassedTag: '테스트 통과', configurationStaleHelper: '구성이 변경되었습니다. 저장하기 전에 다시 테스트하세요.', configurationStaleTag: '결과가 만료되었습니다.', configurationTestMeta: '{time}에 테스트했으며 {duration}ms 만에 완료했습니다. 공급자의 원시 응답은 저장하지 않습니다.', configurationTestResult: '구성 테스트 결과', configurationTestResultDesc: '이것은 Discovery 및 기능만 확인합니다. 인증 코드를 교환하거나 Client Secret를 증명하지 않습니다. 엔드투엔드 확인을 위해 브라우저 테스트 로그인을 사용하세요.', configurationTestSuccess: 'OIDC 구성 테스트에 성공했습니다.', configurationTesting: '현재 OIDC 구성 테스트 중...', configurationTestingTag: '테스트 중', configureSecret: 'Client Secret 설정', conflictExistingRename: '바인딩된 subject가 이미 사용 중인 새 사용자 이름을 반환합니다', conflictExistingRenameResult: '기존 User.Name를 유지하고 바인딩된 사용자가 로그인하도록 허용', conflictLDAP: 'LDAP 사용자', conflictLocal: '로컬 사용자', conflictNewAvailable: '새 subject와 매핑된 사용자 이름을 사용할 수 있습니다', conflictNewAvailableResult: '엔터프라이즈 사용자를 생성하고 기본 역할 할당', conflictNone: '충돌 없음', conflictOIDC: '다른 OIDC ID', conflictOccupied: '매핑된 사용자 이름은 로컬 사용자, LDAP 사용자 또는 다른 OIDC 신원에 속합니다.', conflictOccupiedResult: '새 ID를 거부합니다. 자동으로 바인딩하거나 병합하지 않음', conflictType: '충돌 유형', connectionSecurity: '연결 보안', connectionSecurityDesc: 'TLS 정책은 Discovery, Token, JWKS 및 UserInfo 요청에 적용됩니다.', connectionTest: '연결 및 구성 테스트', connectionTestCompatibilityDesc: '사용자 지정 엔드포인트 및 프로토콜 보안 정책을 검증합니다.', connectionTestStandardDesc: '엔드포인트와 기능은 Issuer에서 자동으로 검색됩니다.', connectionTestTab: '연결 테스트', customCA: '사용자 지정 CA', customCAHelper: '이 인증 소스에만 적용되고 로그에는 기록되지 않습니다.', customCARequired: '사용자 지정 CA 인증서를 입력하세요.', defaultRole: '기본 역할', defaultRoleHelper: '사용자를 처음 생성할 때만 할당하며, 이후 로그인에서는 역할을 변경하지 않습니다.', defaultRolePlaceholder: '역할 선택', defaultRoleRequired: '유효한 기본 역할을 선택하세요.', disableAfterSave: 'OIDC는 저장 후 비활성화됩니다.', disableConfirm: 'OIDC를 비활성화하면 이 인증 소스 사용자의 접근 권한이 즉시 무효화됩니다. 계속하시겠습니까?', disableDiscardConfirm: 'OIDC를 비활성화하는 것은 긴급 조치입니다. 로그인 항목만 닫히고 이 소스 사용자의 액세스가 즉시 무효화됩니다. Client Secret 변경사항을 포함하여 이 페이지에서 저장되지 않은 다른 변경사항은 삭제됩니다. 계속하시겠습니까?', disableTitle: 'OIDC 비활성화', disabled: '비활성화됨', discoveryAllowlist: 'Discovery 보안 허용 목록', enable: '활성화', enableAfterSave: 'OIDC는 성공적으로 저장되면 활성화됩니다.', enabled: '활성화됨', endSessionEndpoint: 'End Session Endpoint', endSessionEndpointHelper: '향후 사용을 위해 저장합니다. 공급자 시작 로그아웃은 이번 버전에 포함되지 않습니다.', endSessionEndpointInvalid: '유효한 End Session Endpoint를 입력하세요.', endpointDiscoveryPlaceholder: '연결 테스트 후 표시됩니다', firstLogin: '첫 번째 로그인', firstLoginPolicy: '로컬 기업 사용자를 생성하고 구성된 기본 역할을 할당하세요.', fixedAuthorizationCode: 'Authorization Code Flow', fixedNoTokenPersistence: 'Token, Claims 및 verifier를 저장하지 않음', fixedSecurityPolicy: '항상 시행됩니다. 구성 필요 없음', fixedStateNonce: '일회성 state 및 nonce', fixedTokenValidation: 'ID Token 서명 및 Claims 검증', highRiskSaveConfirm: '이 활성화된 구성에는 고위험 호환성 옵션이 포함되어 있습니다. 격리된 환경에 필요한지 확인하세요.', highRiskTitle: '고위험 OIDC 구성', hs256Compatibility: 'HS256(호환성)', hs256KeyHelper: 'HS256은 항상 이 인증 소스의 Client Secret을 사용하며 별도의 서명 키를 허용하지 않습니다.', hs256Warning: 'HS256은 ID Token 서명에 공유 대칭 비밀을 사용합니다. 공급자가 비대칭 알고리즘을 사용할 수 없는 경우에만 사용하세요.', identityBindingPolicy: '신원은 AuthSourceID + issuer + subject로 고정됩니다. 사용자 이름이 같더라도 다른 계정을 자동으로 연결하지 않습니다.', identityMissing: 'ID 비활성', issuer: 'Issuer URL', issuerHelper: 'ID Token iss 값과 Discovery issuer는 이 값과 정확히 일치해야 합니다.', issuerInvalid: '쿼리나 프래그먼트가 없는 유효한 HTTP 또는 HTTPS Issuer URL을 입력하세요.', issuerRequired: 'Issuer URL을 입력하세요.', jwksRotation: '자동 JWKS 회전', jwksURI: 'JWKS URI', jwksURIHelper: '키 소스가 JWKS인 경우 비대칭 서명에 필요합니다.', jwksURIInvalid: '선택한 서명 키 소스에 유효한 JWKS URI를 입력하세요.', keepExistingRole: '기존 역할 및 로컬 권한 유지', localSecurityData: '로컬 보안 데이터', localSecurityDataPolicy: '역할, MFA, API Keys, Passkeys 또는 로컬 권한을 덮어쓰지 마십시오.', localCredentialsManaged: '사용자 이름과 로컬 비밀번호는 OIDC에서 관리하므로 여기에서 편집할 수 없습니다. 역할, 권한, MFA, API Keys 및 Passkeys는 로컬에 유지됩니다.', localUserFields: '로컬 사용자 필드', localUserFieldsDesc: '첫 번째 릴리스에서는 User.Name만 매핑하고 JSON 매핑 표현식을 사용하지 않습니다.', loginWith: '{provider}(으)로 로그인', manualEndpoints: '사용자 지정 엔드포인트', manualEndpointsDesc: 'Discovery가 불완전하거나 업스트림 게이트웨이가 엔드포인트를 다시 쓰는 경우에만 사용하십시오.', mappingResult: '매핑 결과', mode: '연결 모드', modeRequired: '연결 모드를 선택하세요.', nameClaim: '사용자 이름 Claim', nameClaimHelper: '사용자 이름이 포함된 필드 이름을 입력하세요. 예: preferred_username', nameClaimRequired: '사용자 이름 Claim을 입력하세요.', nameConflict: '이름 충돌 정책', panelURL: '1Panel 공개 URL', panelURLHTTPWarning: 'HTTP는 인가 응답을 보호하지 않습니다. 공급자가 허용한 격리된 사설 환경에서만 사용하세요.', panelURLHelper: '사용자가 1Panel에 접속하는 주소를 입력하세요. 콜백 URL 생성에 사용됩니다.', panelURLInvalid: '구성표, 호스트 및 선택적 포트만 포함하는 원본을 입력하세요.', panelURLRequired: '1Panel 공개 URL을 입력하세요.', pkceDisabled: '비활성화됨(호환성만 해당)', pkceDisabledWarning: 'PKCE를 비활성화하면 인증 코드 가로채기에 대한 보호가 줄어듭니다.', pkceHelper: 'S256를 선호하세요. plain 챌린지 방법은 절대 제공되지 않습니다.', pkceS256: 'S256(권장)', plannedHandling: '계획된 처리', privateNetworkIdP: '개인 네트워크 IdP', privateNetworkIdPHelper: '개인 주소를 명시적으로 허용합니다. 메타데이터, 루프백, 링크-로컬, 리디렉션 및 DNS 리바인딩은 차단된 상태로 유지됩니다.', privateNetworkWarning: '이 인증 소스에 대해 개인 네트워크 액세스가 활성화되어 있습니다.', protocolCompatibility: '프로토콜 호환성', protocolCompatibilityDesc: 'ID Token 서명 검증은 비활성화할 수 없습니다.', providerAndClient: '공급자 및 클라이언트', providerAndClientDesc: 'Client Secret은 교체하거나 지울 수만 있으며 페이지에서 다시 표시하지 않습니다.', providerCapabilities: '공급자 기능', recentTestSuccess: '마지막 테스트 성공: {0}', recommended: '권장', rejectPlain: 'plain 거부됨', replaceSecret: 'Client Secret 교체', requestAndClaims: '요청 및 속성', requestAndClaimsDesc: '권한 부여 범위, 사용자 정보 보완 및 요청 매개변수를 구성합니다.', requestTimeout: '요청 시간 초과', requestTimeoutRequired: '요청 시간 제한을 입력하세요.', restore: '복원', restored: '마지막으로 저장한 OIDC 설정을 복원했습니다.', result: '결과', rolesLoadFailed: '역할을 로드할 수 없습니다. 기본 역할을 선택하기 전에 다시 시도하세요.', roleHandling: '역할 처리', scenario: '시나리오', scopes: '권한 부여 범위', scopesHelper: 'openid를 포함해야 합니다. 여러 범위는 공백으로 구분하세요.', scopesRequired: 'Scopes에는 openid가 포함되어야 합니다.', seconds: '초', secretClearHelper: '지운 후 OIDC를 다시 활성화하려면 새 Client Secret이 필요합니다.', secretConfigured: '구성됨', secretNotConfigured: '구성되지 않음', secretPlaceholder: '새 Client Secret을 입력하세요', secretReplaceHelper: '저장하면 새 비밀 값으로 교체됩니다. OIDC Provider의 Client Secret도 함께 업데이트하세요.', secretRequiredHelper: 'OIDC를 활성화하기 전에 Client Secret를 구성하세요.', secretRequiredToEnable: 'OIDC를 활성화하기 전에 Client Secret를 구성하세요.', secretSavedHelper: '암호화되어 저장됩니다. 비워 두면 현재 시크릿을 유지합니다.', secretWaiting: '입력 대기 중', secretWillClear: '삭제됩니다', secretWillReplace: '대체됩니다', signingAlgorithm: 'ID Token 서명 알고리즘', signingAlgorithmHelper: '백엔드 보안 허용 목록에 있는 알고리즘만 사용할 수 있습니다.', signingKey: '서명 키', signingKeyClientSecret: 'Client Secret(HS256 전용)', signingKeyJWKS: '자동 회전이 포함된 JWKS URI', signingKeySource: '서명 키 소스', signingKeySourceHelper: 'JWKS를 선호합니다. 정적 공개 키는 자동으로 순환될 수 없습니다.', signingKeyStatic: '정적 JWK 또는 PEM 공개 키', standardDiscovery: '표준 OIDC Discovery', standardDiscoveryDesc: '1Panel은 엔드포인트와 기능을 검색하지만 원시 문서는 저장하지 않습니다.', standardMode: '표준 모드', standardModeHelper: 'Issuer의 엔드포인트, 서명 기능 및 PKCE 지원을 알아보세요.', standardProtocolPolicy: '표준 프로토콜 정책', standardProtocolPolicyDesc: '서명 기능은 자동으로 협상됩니다. 여기에는 서명 키가 입력되지 않습니다.', staticSigningKey: '정적 서명 공개 키', staticSigningKeyHelper: '공개 키 자료만 허용됩니다. 공급자 키가 변경되면 수동으로 교체하세요.', staticSigningKeyPlaceholder: 'JWK, JWKS JSON 또는 PEM 공개 키를 붙여넣으세요.', staticSigningKeyRequired: '정적 서명 공개 키를 제공하세요.', staticSigningKeyWarning: '정적 서명 키는 자동으로 회전할 수 없습니다. 공급자가 키를 회전하기 전에 업데이트하세요.', settingLoadFailed: 'OIDC 설정을 로드할 수 없습니다', settingLoadFailedHelper: '현재 설정 위에 빈 기본 구성이 저장되지 않도록 양식이 잠겨 있습니다. 연결이 복구된 후 다시 시도하세요.', subsequentLogin: '다음 로그인', subsequentLoginPolicy: 'subject로 바인딩을 찾고 새 사용자 이름을 사용할 수 있는 경우에만 User.Name을 업데이트합니다.', testBeforeBrowserTest: '브라우저 테스트 로그인을 시작하기 전에 현재 구성을 테스트하세요.', testBeforeEnable: '구성 변경 사항을 저장하기 전에 현재 구성을 테스트하세요.', testConfiguration: '구성 테스트', testDiscovery: 'Discovery 테스트', tlsCustomCA: 'HTTPS · 사용자 지정 CA 인증서', tlsPrivateHTTP: 'HTTP · 개인 네트워크만 해당(위험)', tlsPrivateHTTPWarning: 'HTTP는 전송 암호화를 제공하지 않으며 명시적으로 허용된 개인 대상으로 제한됩니다.', tlsSkipVerify: 'HTTPS · 인증서 확인 건너뛰기(위험)', tlsSystem: 'HTTPS · 시스템 인증서 확인(권장)', tokenEndpoint: 'Token Endpoint', tokenEndpointInvalid: '유효한 Token Endpoint를 입력하세요.', transportSecurity: '전송 보안', transportSecurityHelper: 'HTTPS 사용을 권장합니다. 사설 HTTP를 사용하려면 사설 네트워크 접근도 명시적으로 허용해야 합니다.', unsavedChanges: '저장되지 않은 OIDC 설정이 있습니다.', usedClaim: 'Claim 사용됨', userInfoEndpoint: 'UserInfo Endpoint', userInfoEndpointHelper: '사용자 이름 필드가 없으면 이 엔드포인트에서 보완합니다. 보완하지 않으려면 비워 두세요.', userInfoEndpointInvalid: '유효한 UserInfo Endpoint를 입력하세요.', userMapping: '사용자 설정', userMappingDesc: 'OIDC 사용자 이름 매핑과 첫 로그인 시 사용자 생성에 사용할 기본 노드 및 역할을 설정합니다.', }, saml2: { actionCreate: '사용자 만들기', actionPending: '결과를 기다리는 중', actionReject: '로그인 거부', actionReuse: '연결된 사용자 사용', assignDefaultRole: '기본 역할 할당: {role}', basic: '기본 설정', basicDesc: '대부분의 표준 SAML2 IdP에 필요한 일반 설정을 구성합니다.', browserTest: '로그인 테스트', browserTestConflict: '신원은 확인되었지만 사용자 이름이 충돌합니다', browserTestConflictHelper: '매핑된 사용자 이름은 다른 신원에 속하므로 자동으로 연결하지 않습니다.', browserTestExpired: '브라우저 테스트가 만료되었습니다.', browserTestExpiredHelper: '만료되기 전에 새 브라우저 테스트를 시작하고 인증을 완료하세요.', browserTestFailed: '브라우저 테스트 실패', browserTestFailedHelper: '신원 미리보기를 완료할 수 없습니다. 현지화된 백엔드 오류를 검토하세요.', browserTestIsolation: '실제 인증 왕복을 수행하지만 사용자를 생성하거나 업데이트하지 않고, 역할을 할당하거나 인증된 패널 세션을 생성하지 않습니다.', browserTestPopupBlocked: '이 사이트에 대한 팝업을 허용한 다음 브라우저 테스트를 다시 시작하세요.', browserTestPopupClosed: '테스트가 완료되기 전에 인증 창이 닫혔습니다.', browserTestSuccess: '공급자 확인 성공', browserTestSuccessHelper: '사용자 또는 세션을 변경하지 않고 ID 매핑을 미리 보았습니다.', browserTestTitle: 'SAML2 브라우저 테스트 로그인', browserTestWaiting: '공급자 인증 대기 중', browserTestWaitingHelper: '새 브라우저 창에서 로그인을 완료하세요. 이 페이지는 자동으로 업데이트됩니다.', certificateFileInvalid: '유효한 PEM, CRT 또는 CER 인증서 파일을 선택하세요.', configured: '구성됨', configurationFailedHelper: '테스트에 실패했습니다. 페이지에 현지화된 백엔드 오류만 표시됩니다.', configurationNotTested: '현재 구성은 테스트되지 않았습니다.', configurationPassed: '현재 구성이 보안 및 기능 검사를 통과했습니다.', configurationStaleHelper: '인증에 민감한 설정이 변경되었습니다. 현재 초안을 다시 테스트하세요.', configurationTestSuccess: 'SAML2 구성 테스트에 성공했습니다.', configurationTesting: '현재 SAML2 구성 테스트 중...', conflictLDAP: 'LDAP 사용자', conflictLocal: '로컬 사용자', conflictNone: '충돌 없음', conflictOIDC: '다른 OIDC ID', conflictSAML2: '다른 SAML2 ID', conflictType: '충돌 유형', credentialFileReadFailed: '자격 증명 파일을 읽을 수 없습니다.', credentialFileTooLarge: '자격 증명 파일은 256 KiB를 초과할 수 없습니다.', credentialsRequired: 'SP 개인 키와 인증서를 모두 구성하세요.', defaultRole: '새 사용자 역할', defaultRoleHelper: '최초 생성 시에만 지정하며 이후 로그인에서는 로컬 역할, MFA 및 권한을 유지합니다.', defaultRolePlaceholder: '역할 선택', defaultRoleRequired: '유효한 기본 역할을 선택하세요.', disableConfirm: 'SAML2를 비활성화하면 새 로그인이 즉시 거부되고 해당 사용자 세션이 무효화됩니다. 계속하시겠습니까?', disableDiscardConfirm: 'SAML2를 비활성화하면 이 페이지의 저장되지 않은 다른 변경사항이 삭제되고 사용자 세션이 즉시 무효화됩니다. 계속하시겠습니까?', disableTitle: 'SAML2 비활성화', disabled: '비활성화', enable: '활성화', enabled: '활성화됨', idpMetadata: 'IdP 메타데이터', idpMetadataDesc: 'URL 또는 XML 중 하나를 입력합니다. 둘 다 있으면 URL이 우선합니다.', keepExistingRole: '기존 역할 및 로컬 권한 유지', loginWith: '{provider}(으)로 로그인', mappingResult: '매핑 결과', metadataRequired: 'IdP Metadata URL 또는 XML을 입력하세요.', metadataURLHelper: '백엔드는 테스트 및 저장 중에 메타데이터를 다운로드하고 검증합니다.', metadataURLInvalid: '자격 증명이나 프래그먼트가 없는 유효한 HTTPS 메타데이터 URL을 입력하세요.', metadataURLRecommended: '메타데이터 URL(권장)', metadataXML: '메타데이터 XML', metadataXMLHelper: 'IdP가 접근 가능한 메타데이터 URL을 제공하지 않을 때 사용하세요.', metadataXMLInvalid: '유효한 EntityDescriptor 메타데이터 XML을 입력하세요.', metadataXMLPlaceholder: '... 붙여넣기', nameAttribute: '사용자 이름 속성', nameAttributeHelper: '검증된 SAML Assertion에서 이 속성을 읽어 1Panel 사용자 이름에 매핑합니다.', nameAttributePlaceholder: '예: uid, username 또는 account', nameAttributeRequired: '사용자 이름 속성을 입력하세요.', notConfigured: '구성되지 않음', or: '또는', pageDesc: 'IdP Metadata로 기업 SSO를 연결하고 일반 설정을 한 페이지에서 완료합니다.', plannedHandling: '계획된 처리', privateKeyFileInvalid: '유효한 PEM 개인 키 파일을 선택하세요.', recentTestSuccess: '마지막 테스트 성공: {0}', restore: '복원', restored: '마지막으로 저장한 SAML2 설정을 복원했습니다.', roleHandling: '역할 처리', rolesLoadFailed: '역할을 로드할 수 없습니다. 기본 역할을 선택하기 전에 다시 시도하세요.', selectFile: '파일 선택', serviceStatus: '서비스 상태', serviceStatusDesc: 'SAML2를 활성화하려면 현재 구성이 테스트를 통과해야 합니다.', settingLoadFailed: 'SAML2 설정을 로드할 수 없습니다', settingLoadFailedHelper: '현재 설정 위에 빈 기본 구성이 저장되지 않도록 양식이 잠겨 있습니다. 연결이 복구된 후 다시 시도하세요.', spCertificate: 'SP 인증서', spCertificateHelper: 'IdP가 로그인 및 로그아웃 요청을 검증할 수 있도록 SP 메타데이터에 게시됩니다.', spCredentials: 'SP 개인 키 및 인증서', spCredentialsDesc: '로그인 및 로그아웃 메시지 서명에 사용됩니다. 서명 및 검증 정책은 백엔드에서 고정됩니다.', spEntityID: 'SP Entity ID', spEntityIDHelper: 'SP의 고유 식별자입니다. IdP에 설정된 엔터티 ID 또는 대상(Audience)과 일치해야 하며 SP 메타데이터 URL로도 사용됩니다.', acsURL: 'ACS URL', sloURL: 'SLO URL', spPrivateKey: 'SP 개인 키', spPrivateKeyHelper: 'AuthnRequest 및 로그아웃 메시지 서명에 사용됩니다. 저장 시 암호화되며 표시되지 않습니다.', syncLogout: '동기화 로그아웃', syncLogoutHelper: '1Panel 또는 IdP에서 로그아웃하면 다른 쪽에서도 함께 로그아웃됩니다.', testBeforeBrowserTest: '브라우저 테스트 로그인을 시작하기 전에 현재 구성을 테스트하세요.', testBeforeEnable: '민감한 변경 사항을 활성화하거나 저장하기 전에 현재 구성을 테스트하세요.', testConfiguration: '구성 테스트', unsavedChanges: '저장되지 않은 SAML2 설정이 있습니다.', usedAttribute: '사용자 이름 매핑', usersAndRoles: '사용자 및 역할', usersAndRolesDesc: '패널 사용자 이름 매핑과 첫 로그인 시 사용자 생성에 사용할 기본 노드 및 역할을 설정합니다.', }, ldap: { basic: '기본 설정', loginTitle: 'LDAP 로그인', loginWith: 'LDAP로 로그인', backToLocalLogin: '패널 로그인으로 돌아가기', enable: '활성화', enabled: '활성화됨', disabled: '비활성화됨', connection: '기본 연결', connectionDesc: '사용자 검색에 사용되는 디렉터리 서비스와 바인딩 계정을 구성합니다.', serverURL: '서버 URL', serverURLHelper: 'ldap:// 및 ldaps:// URL을 지원합니다.', userBaseDN: '사용자 Base DN', userBaseDNHelper: 'LDAP 사용자 검색을 위해 DN 시작 OU, CN 또는 도메인 루트 DN일 수 있습니다.', bindDN: 'DN 바인딩', bindPassword: '비밀번호', passwordSaved: '저장된 비밀번호를 유지하려면 비워두세요.', userSearch: '사용자 검색', userSearchDesc: '사용자 검색 기반 및 필터를 설정한 다음 1Panel name로 사용되는 LDAP 속성을 매핑합니다.', userFilter: '사용자 필터', userFilterTooltip: '%(user)s를 이스케이프된 사용자 이름으로 바꾸거나 전체 디렉터리 읽기를 위해 *로 바꿉니다.', userFilterHelper: '사용자 이름은 LDAP 필터에 삽입되기 전에 이스케이프됩니다.', attributeMap: '속성 매핑', attributeMapTooltip: '1Panel name 필드에서 LDAP 속성으로 매핑되는 JSON.', attributeMapHelper: '1Panel name 필드에 매핑된 LDAP 속성을 설정합니다.', advanced: '고급 설정', advancedDesc: 'TLS 및 LDAP 쿼리 페이징을 구성합니다.', strictSync: '엄격한 동기화', strictSyncTooltip: "완전한 전체 처리 후 이 LDAP 소스에서 누락된 사용자의 인증 상태가 'LDAP에 없음'으로 표시되지만 사용자는 삭제되지 않습니다.", strictSyncHelper: '완전히 성공한 전체 처리에만 적용됩니다. 선택한 사용자를 가져와도 다른 사용자의 인증 상태는 변경되지 않습니다.', skipTLSVerify: 'TLS 확인 건너뛰기', skipTLSVerifyTooltip: 'LDAPS 연결에 대한 인증서 확인을 비활성화합니다.', connectTimeout: '연결 시간 초과(초)', searchPageSize: 'LDAP 쿼리 페이지 크기', restore: '복원', testConnection: '연결 테스트', testLogin: '로그인 테스트', userImport: '사용자 가져오기', saveBeforeImport: '사용자를 가져오기 전에 현재 AD/LDAP 설정을 저장하십시오.', format: '형식', restoreExample: '복원 예시', mappingValid: '유효한 JSON; name가 구성되었습니다.', mappingInvalid: '유효한 JSON를 입력하세요.', mappingObject: '속성 매핑은 JSON 개체여야 합니다.', mappingOnlyName: 'name 매핑만 지원됩니다.', mappingStringValues: '매핑된 모든 속성은 문자열이어야 합니다.', mappingNameRequired: 'name는 비어 있지 않은 문자열이어야 합니다.', restored: '마지막으로 저장된 설정이 복원되었습니다.', connectionTestSuccess: 'LDAP 연결 테스트에 성공했습니다.', recentTestSuccess: '마지막 테스트 성공: {0}', recentTestFailed: '마지막 테스트 실패: {0}', serverURLRequired: 'LDAP 서버 URL을 입력하세요.', serverURLInvalid: '유효한 ldap:// 또는 ldaps:// URL을 사용하세요.', userBaseDNRequired: '사용자 Base DN를 입력합니다.', bindDNRequired: '바인딩 DN를 입력합니다.', passwordRequired: '비밀번호를 입력하세요.', userFilterRequired: '사용자 필터를 입력하세요.', connectTimeoutRequired: '연결 시간 초과를 입력합니다.', searchPageSizeRequired: 'LDAP 쿼리 페이지 크기를 입력합니다.', sync: { title: '예약된 동기화', description: '일정에 따라 전체 LDAP 디렉터리를 읽고 가져온 LDAP 사용자를 1Panel에 유지합니다.', enable: '일정 활성화', enableHelper: '비활성화되면 자동 실행이 중지됩니다. 수동 동기화는 계속 사용할 수 있습니다.', schedule: '일정', daily: '매일', weekly: '주간', customCron: '커스텀 Cron', preview: '미리보기', previewTitle: '다음 5회 실행', previewEmpty: '사용 가능한 실행 시간이 없습니다.', cronHelper: '표준 5개 필드 Cron 표현식(분, 시, 일, 월, 요일)을 사용합니다.', autoImport: '새 사용자 가져오기', autoImportHelper: '비활성화되면 가져온 LDAP 사용자에 대해 디렉터리 식별자와 상태만 유지됩니다. 새로운 사용자가 생성되지 않습니다.', defaultRole: '새로운 사용자 역할', defaultRolePlaceholder: '역할 선택', defaultRoleHelper: '예약된 동기화로 생성된 사용자에게만 적용됩니다.', defaultRoleRequired: '새로운 LDAP 사용자의 역할을 선택합니다.', strictSyncHelper: "전체 동기화가 완료되면 LDAP에서 누락된 사용자를 'LDAP에 없음'으로 표시하고 세션을 종료하며 사용자, 역할 또는 권한은 삭제하지 않습니다.", runNow: '지금 동기화', lastRunSuccess: '마지막 동기화 성공: {0}', lastRunFailed: '마지막 동기화 실패: {0}', lastRunRunning: '동기화 시작됨: {0}', sourceDisabled: '동기화를 실행하기 전에 AD/LDAP를 활성화하고 저장하세요.', cronRequired: 'Cron 표현식을 입력하세요.', saveBeforeRun: '작업을 실행하기 전에 동기화 설정을 저장하십시오.', runConfirmTitle: '엄격한 동기화 실행', runConfirmDescription: "완전한 전체 쿼리에서 누락된 LDAP 사용자의 인증 상태를 'LDAP에 없음'으로 표시하고 활성 세션을 종료합니다. 계속하시겠습니까?", runSuccess: 'LDAP 동기화가 완료되었습니다.', weekdays: { 0: '일요일', 1: '월요일', 2: '화요일', 3: '수요일', 4: '목요일', 5: '금요일', 6: '토요일', }, }, syncLogs: { title: '동기화 로그', description: '예약된 및 수동 LDAP 동기화 결과를 검토합니다.', startedAt: '시작 시간', trigger: '실행 방식', manual: '수동', scheduled: '예정됨', success: '성공', failed: '실패', running: '실행 중', result: '결과', resultSummary: '{0} 생성, {1} 업데이트, {2} 누락', duration: '기간', action: '액션', }, testLoginTitle: 'AD/LDAP 로그인 테스트', testLoginDesc: '인증을 테스트하기 위해 AD/LDAP 사용자 자격 증명으로 바인딩합니다. 1Panel 세션이 생성되지 않습니다.', ldapUsername: 'LDAP 사용자 이름', usernameRequired: 'LDAP 사용자 이름을 입력하세요.', startTest: '테스트 시작', testLoginSuccess: '인증에 성공했습니다.', testLoginSuccessWithDN: '인증에 성공했습니다. 사용자 DN: {0}', import: { title: 'AD/LDAP 사용자 가져오기', source: '데이터 소스: AD/LDAP 디렉토리', lastRead: '마지막으로 읽은 날짜: {0}', cacheHit: '캐시된 결과', keywordPlaceholder: '사용자 이름 검색', search: '검색', refresh: 'LDAP에서 읽기', refreshTip: '단기 캐시를 무시하고 LDAP 디렉토리를 다시 읽으십시오.', loadFailed: 'LDAP 디렉터리를 읽지 못했습니다.', retry: '재시도', noData: '디렉터리 사용자를 찾을 수 없습니다.', username: '사용자 이름', status: '상태', changes: '변경 사항', noChanges: '변경사항 없음', importable: '가져올 준비가 되었습니다.', updateAvailable: '업데이트 가능', upToDate: '최신', conflict: '이름 충돌', selectedCount: '{0} 선택됨', totalCount: '{0}명', newUserRole: '새로운 사용자 역할', newUserRoleRequired: '새 사용자의 역할을 선택합니다.', noNewUsers: '이 작업에는 새로운 사용자가 없습니다.', roleOnlyForNewUsers: '선택한 역할은 새로 생성된 사용자에게만 적용됩니다.', strictOff: '엄격한 동기화가 비활성화되었습니다. 전체 가져오기는 사용자를 비활성화하지 않습니다.', importSelected: '가져오기/업데이트 선택됨({0})', importAll: '모두 가져오기/업데이트({0})', previewTitle: '전체 가져오기 확인', previewDesc: '전체 LDAP 디렉토리를 읽었습니다. 검색 키워드는 이 작업을 제한하지 않습니다.', created: '만들기', updated: '업데이트', unchanged: '변경되지 않음', conflicts: '충돌', missing: '비활성화', reactivated: '재활성화', strictWarning: '엄격한 동기화가 활성화되었습니다. LDAP에서 누락된 사용자는 로그인할 수 없지만 해당 기록, 역할 및 권한은 유지됩니다.', missingUsers: 'LDAP에서 누락된 사용자', missingScope: '이 LDAP 소스만 영향을 받습니다.', willDisable: '비활성화됩니다', confirmAll: '가져오기 확인', confirmAllWithMissing: '가져오기를 확인하고 {0}명의 사용자 비활성화', executeSuccess: 'LDAP 사용자가 성공적으로 처리되었습니다.', queryExpired: '디렉터리 결과가 만료되었습니다. LDAP에서 다시 읽어보세요.', planIncomplete: '전체 디렉터리 읽기가 불완전하여 실행할 수 없습니다.', }, }, }, }, app: { app: 'APP', title: '패널 별칭', titleHelper: '패널 별칭은 APP 에서 표시되는 데 사용됩니다(기본 패널 별칭)', qrCode: 'QR 코드', apiStatusHelper: '패널 APP 는 API 인터페이스 기능을 활성화해야 합니다', apiInterfaceHelper: '패널 API 인터페이스 액세스를 지원합니다(패널 앱에서 이 기능을 활성화해야 합니다)', apiInterfaceHelper1: '패널 앱의 액세스에는 방문자를 화이트리스트에 추가해야 하며, 고정 IP가 아닌 경우 0.0.0.0/0(모든 IPv4), ::/0(모든 IPv6) 을 추가하는 것이 좋습니다', qrCodeExpired: '새로 고침 시간', apiLeakageHelper: 'QR 코드를 누출하지 마십시오. 신뢰할 수 있는 환경에서만 사용하십시오.', }, logExport: { title: '로그 내보내기', records: '내보내기 기록', retentionDays: '내보내기 기록 보관 일수', timeRange: '시간 범위', timeRequired: '내보낼 시간 범위를 선택하세요', websiteRequired: '웹사이트를 선택하세요', blackStatus: '차단 목록 상태', black: '차단됨', notBlack: '차단되지 않음', fuzzy: '부분 일치', regex: '정규식', invalidRegex: '256자 이하의 올바른 RE2 정규식을 입력하세요', created: '내보내기 작업이 생성되었습니다', fileName: '파일 이름', fileSize: '파일 크기', expiresAt: '만료 시간', cancelConfirm: '이 내보내기 작업을 취소하시겠습니까?', deleteConfirm: '이 내보내기 기록과 파일을 삭제하시겠습니까?', }, waf: { WAF: 'WAF', blackWhite: '블랙 및 화이트 목록', globalSetting: '전역 설정', websiteSetting: '웹사이트 설정', blockRecords: '차단된 기록', world: '전 세계', china: '중국', intercept: '차단', request: '요청', count4xx: '4xx 수량', count5xx: '5xx 수량', todayStatus: '오늘의 상태', reqMap: '공격 맵 (최근 30일)', resource: '출처', count: '수량', hight: '높음', low: '낮음', reqCount: '요청 수', interceptCount: '차단 수', requestTrends: '요청 트렌드 (최근 7일)', interceptTrends: '차단 트렌드 (최근 7일)', whiteList: '화이트 목록', blackList: '블랙 목록', ipBlackListHelper: '블랙 목록에 있는 IP 주소는 웹사이트에 접근할 수 없습니다.', ipWhiteListHelper: '화이트 목록에 있는 IP 주소는 모든 제한을 우회합니다.', uaBlackListHelper: '블랙 목록에 있는 User-Agent 값의 요청은 차단됩니다.', uaWhiteListHelper: '화이트 목록에 있는 User-Agent 값의 요청은 모든 제한을 우회합니다.', urlBlackListHelper: '블랙 목록에 있는 URL 로의 요청은 차단됩니다.', urlWhiteListHelper: '화이트 목록에 있는 URL 로의 요청은 모든 제한을 우회합니다.', ccHelper: '같은 IP 에서 {0}초 이내에 {1}회 이상 요청을 받으면 해당 IP 는 {2}동안 차단됩니다.', blockTime: '차단 기간', attackHelper: '누적 차단이 {0}초 이내에 {1}회를 초과하면 해당 IP 는 {2}동안 차단됩니다.', notFoundHelper: '누적된 요청이 {0}초 이내에 404 오류를 {1}번 이상 반환하면 해당 IP 는 {2}동안 차단됩니다.', frequencyLimit: '접속 빈도 제한', regionLimit: '지역 제한', defaultRule: '기본 규칙', accessFrequencyLimit: '접속 빈도 제한', attackLimit: '공격 빈도 제한', notFoundLimit: '404 빈도 제한', urlLimit: 'URL 빈도 제한', urlLimitHelper: '단일 URL 의 접속 빈도를 설정합니다.', sqliDefense: 'SQL 인젝션 보호', sqliHelper: '요청에서 SQL 인젝션을 감지하여 차단합니다.', xssHelper: '요청에서 XSS 를 감지하여 차단합니다.', xssDefense: 'XSS 보호', uaDefense: '악성 User-Agent 규칙', uaHelper: '일반적인 악성 봇을 식별하는 규칙이 포함되어 있습니다.', argsDefense: '악성 파라미터 규칙', argsHelper: '악성 파라미터를 포함한 요청을 차단합니다.', cookieDefense: '악성 쿠키 규칙', cookieHelper: '악성 쿠키가 요청에 포함되지 않도록 차단합니다.', headerDefense: '악성 헤더 규칙', headerHelper: '악성 헤더가 포함된 요청을 차단합니다.', httpRule: 'HTTP 요청 방법 규칙', httpHelper: '허용된 접근 방식 유형을 설정합니다. 특정 접근 방식을 제한하려면 해당 유형의 버튼을 끄십시오. 예를 들어: GET 방식만 허용하려면 GET 을 제외한 다른 방식의 버튼을 끄세요.', geoRule: '지역별 접근 제한', geoHelper: '하나의 스위치로 지역 및 성 정책을 결합합니다. 지역 규칙을 먼저 적용한 다음 성 규칙을 적용합니다.', regionPolicy: '지역 정책', provincePolicy: '성 정책', provinceRuleLabel: '성', openRestyFeatureVersionAlert: '{0}을(를) 적용하려면 OpenResty 버전이 1.31.1.1-0보다 높아야 합니다.', ipLocation: 'IP 위치', ipLocationSearchHelper: 'IP 위치를 입력하세요. 부분 검색을 지원합니다', action: '동작', ruleType: '공격 유형', ipHelper: 'IP 주소를 입력하세요', attackLog: '공격 로그', rule: '규칙', ipArr: 'IPV4 범위', ipStart: '시작 IP', ipEnd: '끝 IP', ipv4: 'IPv4', ipv6: 'IPv6', urlDefense: 'URL 규칙', urlHelper: '금지된 URL', dirFilter: '디렉터리 필터', sqlInject: 'SQL 인젝션', xss: 'XSS', webshell: 'WebShell', phpExec: 'PHP 스크립트 실행', oneWordTrojan: '단어 트로이', appFilter: '위험한 디렉터리 필터링', webShell: '웹쉘', args: '악성 파라미터', protocolFilter: '프로토콜 필터', javaFilter: '자바 위험 파일 필터링', scannerFilter: '스캐너 필터', escapeFilter: '이스케이프 필터', customRule: '사용자 정의 규칙', httpMethod: 'HTTP 메소드 필터', fileExt: '파일 업로드 제한', fileExtHelper: '업로드 제한 파일 확장자', deny: '금지', allow: '허용', allowOnly: '선택 항목만 허용', field: '객체', pattern: '조건', ruleContent: '내용', contain: '포함', equal: '같음', regex: '정규 표현식', notEqual: '같지 않음', customRuleHelper: '지정된 조건에 따라 동작을 수행합니다.', actionAllow: '허용', blockIP: 'IP 차단', code: '상태 코드 반환', noRes: '연결 끊기 (444)', badReq: '잘못된 매개변수 (400)', forbidden: '접근 금지 (403)', serverErr: '서버 오류 (500)', resHtml: '응답 페이지', allowHelper: '허용된 접근은 후속 WAF 규칙을 건너뛰게 하므로 주의해서 사용하세요.', captcha: '사람-컴퓨터 검증', fiveSeconds: '5초 검증', location: '지역', redisConfig: 'Redis 설정', redisHelper: 'Redis 를 활성화하여 일시적으로 차단된 IP를 유지합니다.', wafHelper: 'WAF 를 종료하면 모든 웹사이트 보호가 해제됩니다.', websiteWafHelper: 'WAF 를 종료하면 이 웹사이트 보호가 해제됩니다.', attackIP: '공격 IP', attackParam: '공격 세부사항', execRule: '적용된 규칙', acl: 'ACL', sql: 'SQL 인젝션', cc: '접속 빈도 제한', isBlocking: '차단됨', isFree: '차단 해제됨', unLock: '차단 해제', unLockHelper: 'IP: {0}의 차단을 해제하시겠습니까?', saveDefault: '기본값 저장', saveToWebsite: '웹사이트에 적용', saveToWebsiteHelper: '현재 설정을 모든 웹사이트에 적용하시겠습니까?', websiteHelper: '웹사이트를 생성할 때의 기본 설정입니다. 수정 사항은 웹사이트에 적용해야 효력이 있습니다.', websiteHelper2: '웹사이트 생성 시 기본 설정이 제공됩니다. 웹사이트에서 해당 설정을 수정해 주세요.', ipGroup: 'IP 그룹', ipGroupHelper: '한 줄에 하나의 IP 또는 IP 범위를 입력하세요, IPv4 및 IPv6 을 지원합니다. 예: 192.168.1.1 또는 192.168.1.0/24', ipBlack: 'IP 블랙리스트', openRestyAlert: 'OpenResty 버전은 {0} 이상이어야 합니다.', initAlert: '처음 사용 시 초기화가 필요하며, 웹사이트 설정 파일이 수정됩니다. 기존 WAF 설정은 손실될 수 있습니다. 미리 백업해 주세요.', initHelper: '초기화 작업은 기존 WAF 설정을 삭제합니다. 초기화하시겠습니까?', mainSwitch: '메인 스위치', websiteSwitch: '스위치', websiteAlert: '먼저 웹사이트를 생성해 주세요.', defaultUrlBlack: 'URL 규칙', htmlRes: '차단 페이지', urlSearchHelper: 'URL 을 입력하여 유사 검색을 지원합니다.', hostSearchHelper: 'Host를 입력하여 유사 검색을 지원합니다.', toCreate: '생성', closeWaf: 'WAF 종료', closeWafHelper: 'WAF 를 종료하면 웹사이트 보호가 해제됩니다. 계속하시겠습니까?', addblack: '블랙 추가', addwhite: '화이트 추가', addblackHelper: 'IP: {0}를 기본 블랙리스트에 추가하시겠습니까?', addwhiteHelper: 'IP: {0}를 기본 화이트리스트에 추가하시겠습니까?', defaultUaBlack: 'User-Agent 규칙', defaultIpBlack: '악성 IP 그룹', cookie: '쿠키 규칙', urlBlack: 'URL 블랙리스트', uaBlack: 'User-Agent 블랙리스트', attackCount: '공격 빈도 제한', fileExtCheck: '파일 업로드 제한', geoRestrict: '지역 접근 제한', originProtect: 'CDN 원본 서버 보호', attacklog: '차단 기록', unknownWebsite: '허가되지 않은 도메인 접근', geoRuleEmpty: '지역 또는 성을 하나 이상 선택하세요.', unknown: '웹사이트 없음', geo: '지역 제한', revertHtml: '{0}을 기본 페이지로 복원하시겠습니까?', five_seconds: '5초 검증', header: '헤더 규칙', methodWhite: 'HTTP 규칙', expiryDate: '만료 날짜', expiryDateHelper: '검증을 통과한 후 유효 기간 내에는 더 이상 검증하지 않습니다.', defaultIpBlackHelper: '인터넷에서 수집된 일부 악성 IP로 접근을 차단합니다.', notFoundCount: '404 빈도 제한', matchValue: '매칭 값', headerName: '이 필드는 특수 문자로 시작할 수 없으며,영어, 숫자, -, 길이 3-30 지원', cdnHelper: 'CDN 을 사용하는 웹사이트는 여기서 원본 IP를 확인할 수 있습니다.', clearLogWarn: '로그를 삭제하면 복구할 수 없습니다. 계속하시겠습니까?', commonRuleHelper: '규칙은 유사 매칭 방식입니다.', blockIPHelper: '차단된 IP는 OpenResty 에 일시적으로 저장되며, OpenResty 재시작 시 차단이 해제됩니다. 차단 기능을 통해 영구적으로 차단할 수 있습니다.', addWhiteUrlHelper: 'URL {0}를 화이트리스트에 추가하시겠습니까?', dashHelper: '커뮤니티 버전은 전역 설정 및 웹사이트 설정에서 기능을 사용할 수 있습니다.', wafStatusHelper: '방화벽이 활성화되지 않아 웹사이트 보안 보호가 일시 중지되었습니다. 가능한 한 빨리 활성화하세요.', enableProtection: '보호 활성화', ccMode: '모드', global: '전역 모드', uriMode: 'URL 모드', globalHelper: '전역 모드: 특정 시간 내에 모든 URL에 대한 요청 수가 임계값을 초과하면 트리거됩니다.', uriModeHelper: 'URL 모드: 특정 시간 내에 개별 URL에 대한 요청 수가 임계값을 초과하면 트리거됩니다.', ip: 'IP 블랙리스트', globalSettingHelper: '[웹사이트] 태그가 있는 설정은 [웹사이트 설정]에서 활성화해야 하며, 전역 설정은 새로 생성된 웹사이트의 기본 설정입니다.', globalSettingHelper2: '[전역 설정]과 [웹사이트 설정]에서 모두 활성화해야 설정이 적용됩니다.', urlCCHelper: '{0} 초 이내에 이 URL에 대해 {1} 회를 초과하는 요청이 있어 이 IP를 차단합니다 {2}', urlCCHelper2: 'URL에 매개변수를 포함할 수 없습니다', notContain: '포함하지 않음', urlcc: 'URL 빈도 제한', method: '요청 유형', addIpsToBlock: 'IP 일괄 차단', addIpSegmentToBlock: 'IP 대역 차단', addIpSegmentsToBlock: 'IP 대역 일괄 차단', addUrlsToWhite: 'URL을 일괄 허용 목록에 추가', noBlackIp: 'IP가 이미 차단되어 있으므로 다시 차단할 필요가 없습니다', noWhiteUrl: 'URL이 이미 허용 목록에 포함되어 있으므로 다시 추가할 필요가 없습니다', spiderIpHelper: '활성화하면 선택한 크롤러만 허용하고, 비활성화하면 모든 크롤러 접근을 차단합니다.', spiderIp: '스파이더 IP 풀', spider: '스파이더', spiderAllowlist: '허용할 크롤러', spiderAllowlistEmpty: '선택한 크롤러가 없습니다. 저장하면 모든 크롤러 접근이 차단됩니다.', geoIp: 'IP 주소 라이브러리', geoIpHelper: 'IP의 지리적 위치를 확인하는 데 사용됩니다', stat: '공격 보고서', statTitle: '보고서', attackIp: '공격 IP', attackCountNum: '공격 횟수', percent: '비율', addblackUrlHelper: 'URL: {0}을(를) 기본 블랙리스트에 추가할까요?', rce: '원격 코드 실행', software: '소프트웨어', cveHelper: '일반적인 소프트웨어 및 프레임워크의 취약점을 포함', vulnCheck: '보충 규칙', ssrf: 'SSRF 취약점', afr: '임의 파일 읽기', ua: '무단 액세스', id: '정보 누출', aa: '인증 우회', dr: '디렉토리 순회', xxe: 'XXE 취약점', suid: '직렬화 취약점', dos: '서비스 거부 취약점', afd: '임의 파일 다운로드', sqlInjection: 'SQL 인젝션', afw: '임의 파일 쓰기', il: '정보 유출', clearAllLog: '모든 로그 삭제', exportLog: '로그 내보내기', appRule: '애플리케이션 규칙', appRuleHelper: '일반적인 애플리케이션 규칙. 활성화하면 오탐지를 줄일 수 있습니다. 하나의 웹사이트는 하나의 규칙만 사용할 수 있습니다', logExternal: '기록 유형 제외', ipWhite: 'IP 허용 목록', urlWhite: 'URL 허용 목록', uaWhite: '사용자 에이전트 허용 목록', logExternalHelper: '제외된 기록 유형은 로그에 기록되지 않습니다. 블랙리스트/허용 목록, 지역 액세스 제한, 사용자 정의 규칙은 많은 로그를 생성합니다. 제외를 권장합니다', ssti: 'SSTI 공격', crlf: 'CRLF 인젝션', strict: '엄격 모드', strictHelper: '더 엄격한 규칙을 사용하여 요청을 검증합니다', executionStrategy: '실행 정책', detectionStrength: '탐지 강도', protectionMode: '보호 모드', observationMode: '관찰 모드', standardMode: '표준 모드', observationModeHelper: '요청을 차단하지 않고 탐지 및 로그만 기록합니다', observationModeConfirm: '관찰 모드에서는 모든 WAF 탐지를 기록하지만 요청을 차단하지 않습니다. 계속하시겠습니까?', globalStrictRequired: '먼저 전역 설정에서 엄격 모드를 활성화하세요', websiteSearchHelper: '웹사이트 도메인, 별칭 또는 비고를 입력하세요', configReadFailed: '설정을 불러오지 못했습니다', detailSetting: '상세 설정', observe: '관찰', saveLog: '로그 저장', remoteURLHelper: '원격 URL은 한 줄에 하나의 IP만 포함하고 다른 문자는 포함하지 않아야 합니다', notFound: 'Not Found (404)', serviceUnavailable: '서비스 불가 (503)', gatewayTimeout: '게이트웨이 시간 초과 (504)', belongToIpGroup: 'IP 그룹에 속함', notBelongToIpGroup: 'IP 그룹에 속하지 않음', unknownWebsiteKey: '알 수 없는 도메인', special: '특수 문자', fileToLarge: '파일이 1MB를 초과하여 업로드할 수 없습니다', uploadOverLimit: '업로드된 파일 수가 제한을 초과했습니다, 최대 1개', importRuleHelper: '한 줄에 하나의 규칙', name: 'WAF 이름', }, monitor: { '360': '360 검색', name: '웹사이트 모니터링', pv: '페이지 조회수', uv: '고유 방문자 수', flow: '트래픽 흐름', ip: 'IP', spider: '스파이더', visitors: '방문자 추세', today: '오늘', last7days: '지난 7일', last30days: '지난 30일', uvMap: '방문자 지도 (30일)', qps: '실시간 요청 (분당)', flowSec: '실시간 트래픽 (분당)', excludeCode: '상태 코드 제외', excludeUrl: 'URL 제외', excludeExt: '확장자 제외', cdnHelper: 'CDN 제공 헤더에서 실제 IP 가져오기', reqRank: '방문 순위', refererDomain: '참조 도메인', os: '운영 체제', browser: '브라우저/클라이언트', device: '장치', showMore: '더보기', unknown: '기타', pc: '컴퓨터', mobile: '모바일 장치', wechat: '위챗', machine: '머신', tencent: '텐센트 브라우저', ucweb: 'UC 브라우저', '2345explorer': '2345 브라우저', huaweibrowser: '화웨이 브라우저', log: '요청 로그', statusCode: '상태 코드', requestTime: '응답 시간', flowRes: '응답 트래픽', method: '요청 메서드', statusCodeHelper: '상태 코드를 입력하세요', statusCodeError: '유효하지 않은 상태 코드 유형', methodHelper: '요청 메서드를 입력하세요', all: '전체', baidu: '바이두', google: '구글', bing: '빙', bytes: '오늘의 헤드라인', sogou: '소구', failed: '오류', ipCount: 'IP 수', spiderCount: '스파이더 요청', averageReqTime: '평균 응답 시간', totalFlow: '총 트래픽', logSize: '로그 파일 크기', realIPType: '실제 IP 가져오기 방법', realIPRecognition: '실제 IP 식별', fromHeader: 'HTTP 헤더에서 가져오기', fromHeaders: '헤더 목록에서 가져오기', header: 'HTTP 헤더', cdnConfig: 'CDN 구성', xff1: 'X-Forwarded-For 의 1단계 프록시', xff2: 'X-Forwarded-For 의 2단계 프록시', xff3: 'X-Forwarded-For 의 3단계 프록시', xffHelper: '예: X-Forwarded-For: ,,,. 최상위 프록시는 마지막 IP 를 가져옵니다', headersHelper: '일반적으로 사용되는 CDN HTTP 헤더에서 실제 IP를 가져오며, 사용 가능한 첫 번째 값을 선택합니다', monitorCDNHelper: '웹사이트 모니터링을 위한 CDN 구성을 수정하면 WAF CDN 설정도 업데이트됩니다', wafCDNHelper: 'WAF CDN 구성을 수정하면 웹사이트 모니터링 CDN 설정도 업데이트됩니다', originProtection: '원본 서버 보호', originProtectionHelper: '선택한 IP 그룹의 CDN 노드만 원본 서버에 연결할 수 있습니다. 방문자 실제 IP 식별은 별도 스위치를 사용합니다.', originProtectionIPGroups: 'CDN 원본 IP 그룹', originProtectionIPGroupsPlaceholder: '신뢰할 CDN 원본 IP 그룹을 선택하세요', originProtectionWarning: '잘못 설정하면 웹사이트에 접속할 수 없습니다. 모든 CDN 원본 주소가 포함되었는지 확인하세요.', originProtectionEnableConfirm: '선택한 IP 그룹 외의 연결은 원본 서버 직접 접근으로 간주되어 차단됩니다. 계속하시겠습니까?', statusErr: '잘못된 상태 코드 형식', shenma: '션마 검색', duckduckgo: '덕덕고', yandex: 'Yandex', gptbot: 'GPTBot', excludeUri: 'URI 제외', top100Helper: '상위 100 개의 데이터를 표시합니다', logSaveDay: '로그 보관 기간 (일)', cros: '크롬 OS', theworld: '더월드 브라우저', edge: '마이크로소프트 엣지', maxthon: '맥스톤 브라우저', monitorStatusHelper: '현재 웹사이트 모니터링이 비활성화되어 있습니다. 지금 활성화하세요', excludeIp: 'IP 주소 제외', excludeUa: '사용자 에이전트 제외', remotePort: '원격 포트', unknown_browser: '알 수 없음', unknown_os: '알 수 없음', unknown_device: '알 수 없음', logSaveSize: '최대 로그 저장 크기', logSaveSizeHelper: '이것은 단일 웹사이트의 로그 저장 크기입니다', '360se': '360 보안 브라우저', websites: '웹사이트 목록', trend: '추세 통계', reqCount: '요청 수', uriHelper: '/test/* 또는 /*/index.php를 사용하여 Uri를 제외할 수 있습니다', }, tamper: { tamper: '웹사이트 변조 방지', tamperCreateHint: '현재 디렉터리는 변조 방지 또는 파일 속성의 영향을 받아 생성에 실패할 수 있습니다.', ignoreTemplate: '제외 템플릿', protectTemplate: '보호 템플릿', ignoreTemplateHelper: '제외 내용을 입력하세요, Enter 또는 공백으로 구분합니다. (특정 디렉토리 ./log 또는 디렉토리 이름 tmp, 파일을 제외하려면 특정 파일 ./data/test.html을 입력해야 합니다)', protectTemplateHelper: '보호 내용을 입력하세요, Enter 또는 공백으로 구분합니다. (특정 파일 ./index.html, 파일 확장자 .html, 파일 유형 js, 디렉토리를 보호하려면 특정 디렉토리 ./log을 입력해야 합니다)', templateContent: '템플릿 내용', template: '템플릿', saveTemplate: '템플릿으로 저장', tamperHelper1: '원클릭 배포 유형의 웹사이트의 경우 애플리케이션 디렉토리 변조 방지 기능을 활성화하는 것이 좋습니다. 웹사이트가 정상적으로 사용되지 않거나 백업/복원이 실패하는 경우 먼저 변조 방지 기능을 비활성화하세요.', tamperHelper2: '제외되지 않은 디렉토리에서 보호된 파일에 대한 읽기/쓰기, 삭제, 권한 및 소유자 수정 작업을 제한합니다', tamperPath: '보호 디렉토리', tamperPathEdit: '경로 수정', log: '차단 로그', totalProtect: '총 보호', todayProtect: '오늘 보호', templateRule: '길이 1-512, 이름에 {0} 등의 기호를 포함할 수 없습니다', ignore: '제외', ignoreHelper: '제외 내용을 선택하거나 입력하세요, Enter 또는 공백으로 구분합니다. (특정 디렉토리 ./log 또는 디렉토리 이름 tmp, 파일을 제외하려면 특정 파일 ./data/test.html을 입력하거나 선택해야 합니다)', protect: '보호', protectHelper: '보호 내용을 선택하거나 입력하세요, Enter 또는 공백으로 구분합니다. (특정 파일 ./index.html, 파일 확장자 .html, 파일 유형 js, 디렉토리를 보호하려면 특정 디렉토리 ./log을 입력하거나 선택해야 합니다)', tamperHelper00: '제외와 보호는 상대 경로만 입력 가능합니다.', tamperHelper01: '변조 방지를 활성화한 후 시스템은 제외되지 않은 디렉토리에서 보호된 파일의 생성, 편집 및 삭제 작업을 제한합니다.', tamperHelper02: '우선순위: 특정 경로 보호 > 특정 경로 제외 > 보호 > 제외', tamperHelper03: '모니터링 작업은 제외되지 않은 디렉토리만 대상으로 하며, 이러한 디렉토리에서 비보호 파일의 생성을 모니터링합니다.', disableHelper: '다음 웹사이트의 변조 방지 기능을 비활성화하려고 합니다. 계속하시겠습니까?', appendOnly: '추가 전용', appendOnlyHelper: '이 디렉토리 내 파일의 삭제 작업을 제한하며, 제외 디렉토리 또는 비보호 파일 추가만 허용합니다', immutable: '불변', immutableHelper: '이 파일의 편집, 삭제, 권한 및 소유자 수정 작업을 제한합니다', onWatch: '감시', onWatchHelper: '이 디렉토리 내 보호 파일 또는 비제외 디렉토리 생성에 대한 감시 및 가로채기를 수행합니다', forceStop: '강제 종료', forceStopHelper: '이 웹사이트 디렉토리의 변조 방지 기능을 강제로 비활성화하려고 합니다. 계속하시겠습니까?', }, setting: { setting: '패널 설정', title: '패널 설명', titleHelper: '사용자 로그인 페이지에 표시됩니다 (예: Linux 서버 운영 및 유지 관리 패널, 권장 길이: 8-15자)', logo: '로고 (텍스트 없음)', logoHelper: '메뉴가 축소되었을 때 관리 페이지의 왼쪽 상단에 표시됩니다 (권장 이미지 크기: 82px*82px)', logoWithText: '로고 (텍스트 포함)', logoWithTextHelper: '메뉴가 확장되었을 때 관리 페이지의 왼쪽 상단에 표시됩니다 (권장 이미지 크기: 185px*55px)', favicon: '웹사이트 아이콘', faviconHelper: '웹사이트 아이콘 (권장 이미지 크기: 16px*16px)', setDefault: '기본값 복원', setHelper: '현재 설정이 저장됩니다. 계속하시겠습니까?', setDefaultHelper: '모든 패널 설정이 기본값으로 복원됩니다. 계속하시겠습니까?', logoGroup: '로고', imageGroup: '이미지', loginImage: '이미지', loginImageHelper: '로그인 페이지에 표시됩니다 (권장 크기: 500*416px)', loginBgType: '배경 유형', loginBgImage: '배경 이미지', loginBgImageHelper: '로그인 페이지의 배경 이미지로 표시됩니다 (권장 크기: 1920*1080px)', loginBgColor: '배경 색상', loginBgColorHelper: '로그인 페이지의 배경 색상으로 표시됩니다', image: '이미지', bgColor: '배경 색상', loginGroup: '로그인 페이지', loginBtnLinkColor: '버튼/링크 색상', loginBtnLinkColorHelper: '로그인 페이지의 버튼/링크 색상으로 표시됩니다', footerNavigation: '바닥글 탐색', footerLoadFailed: '바닥글 탐색 설정을 불러오지 못했습니다. 다시 시도해 주세요.', showLearnMore: '상용 버전 정보 표시', showForum: '포럼 도움말 표시', showDocumentation: '사용 설명서 표시', showProject: '프로젝트 주소 표시', footerSaveHelper: '바닥글 탐색 설정을 저장합니다. 계속하시겠습니까?', footerResetHelper: '바닥글 탐색 설정을 기본값으로 복원합니다. 계속하시겠습니까?', }, helper: { wafTitle1: '차단 지도', wafContent1: '지난 30일 동안의 차단 지역 분포를 표시합니다.', wafTitle2: '지역별 접근 제한', wafContent2: '지리적 위치에 따라 웹사이트 접근 소스를 제한합니다.', wafTitle3: '사용자 지정 차단 페이지', wafContent3: '요청이 차단된 후 표시할 사용자 지정 페이지를 생성합니다.', wafTitle4: '사용자 지정 규칙 (ACL)', wafContent4: '사용자 지정 규칙에 따라 요청을 차단합니다.', tamperTitle1: '파일 무결성 모니터링', tamperContent1: '핵심 파일, 스크립트 파일, 구성 파일을 포함한 웹사이트 파일의 무결성을 모니터링합니다.', tamperTitle2: '실시간 스캔 및 감지', tamperContent2: '웹사이트 파일 시스템을 실시간으로 스캔하여 비정상적이거나 변조된 파일을 감지합니다.', tamperTitle3: '보안 권한 설정', tamperContent3: '적절한 권한 설정과 접근 제어 정책을 통해 웹사이트 파일 접근을 제한하여 잠재적 공격 면적을 줄입니다.', tamperTitle4: '로그 기록 및 분석', tamperContent4: '파일 접근 및 작업 로그를 기록하여 관리자가 감사 및 분석을 수행할 수 있도록 하고, 잠재적 보안 위협을 식별합니다.', settingTitle1: '사용자 정의 환영 메시지', settingContent1: '1Panel 로그인 페이지에 사용자 정의 환영 메시지를 설정합니다.', settingTitle2: '사용자 정의 로고', settingContent2: '브랜드명이나 텍스트가 포함된 로고 이미지를 업로드할 수 있습니다.', settingTitle3: '사용자 정의 웹사이트 아이콘', settingContent3: '브라우저 기본 아이콘을 대체할 사용자 정의 아이콘을 업로드하여 사용자 경험을 개선합니다.', monitorTitle1: '방문자 추세', monitorContent1: '웹사이트 방문자 추세를 통계적으로 표시합니다.', monitorTitle2: '방문자 지도', monitorContent2: '웹사이트 방문자의 지리적 분포를 통계적으로 표시합니다.', monitorTitle3: '접속 통계', monitorContent3: '웹사이트 요청 정보(스파이더, 접속 장치, 요청 상태 등)에 대한 통계를 제공합니다.', monitorTitle4: '실시간 모니터링', monitorContent4: '웹사이트 요청 정보(요청 수, 트래픽 등)를 실시간으로 모니터링합니다.', alertTitle1: 'SMS 알림', alertContent1: '서버 리소스 사용량 이상, 웹사이트 및 인증서 만료, 새로운 버전 업데이트, 비밀번호 만료 등의 문제가 발생하면 SMS 알림을 통해 사용자가 신속히 처리할 수 있도록 합니다.', alertTitle2: '알림 로그', alertContent2: '사용자에게 알림 로그를 조회할 수 있는 기능을 제공하여 과거 알림 이벤트를 추적하고 분석할 수 있도록 합니다.', alertTitle3: '알림 설정', alertContent3: '사용자에게 전화번호, 일일 푸시 빈도, 일일 푸시 시간 등을 사용자 정의할 수 있는 설정을 제공하여 보다 합리적인 푸시 알림을 설정할 수 있도록 합니다.', nodeDashTitle1: '애플리케이션 관리', nodeDashContent1: '다중 노드 애플리케이션의 통합 관리, 상태 모니터링, 빠른 시작/중지, 터미널 연결 및 백업 지원', nodeDashTitle2: '웹사이트 관리', nodeDashContent2: '다중 노드 웹사이트의 통합 관리, 실시간 상태 모니터링, 일괄 시작/중지 및 빠른 백업 지원', nodeDashTitle3: '데이터베이스 관리', nodeDashContent3: '다중 노드 데이터베이스의 통합 관리, 주요 상태 한눈에 확인, 원클릭 백업 지원', nodeDashTitle4: '예약 작업 관리', nodeDashContent4: '다중 노드 예약 작업의 통합 관리, 상태 모니터링, 빠른 시작/중지 및 수동 트리거 실행 지원', vmTitle1: '가상 머신 관리', vmContent1: '가상 머신을 생성하고 관리하며 실행 상태를 확인하고 리소스 할당을 조정합니다.', vmTitle2: '이미지 및 템플릿', vmContent2: 'ISO 이미지와 가상 머신 템플릿을 관리하여 가상 머신을 간편하게 생성합니다.', vmTitle3: '가상 네트워크', vmContent3: '가상 네트워크를 통합 관리하고 가상 머신의 네트워크 연결을 구성합니다.', vmTitle4: '스토리지 풀', vmContent4: '스토리지 풀을 관리하고 가상 머신에 스토리지 리소스를 할당합니다.', nodeTitle1: '원클릭 노드 추가', nodeContent1: '여러 서버 노드를 빠르게 통합', nodeTitle2: '일괄 업그레이드', nodeContent2: '한 번의 작업으로 모든 노드를 동기화 및 업그레이드', nodeTitle3: '노드 상태 모니터링', nodeContent3: '각 노드의 운영 상태를 실시간으로 파악', nodeTitle4: '빠른 원격 연결', nodeContent4: '원클릭으로 노드 원격 터미널에 직접 연결', fileExchangeTitle1: '키 인증 전송', fileExchangeContent1: 'SSH 키를 통해 인증하여 전송 보안을 보장합니다.', fileExchangeTitle2: '효율적인 파일 동기화', fileExchangeContent2: '변경된 내용만 동기화하여 전송 속도와 안정성을 크게 향상시킵니다.', fileExchangeTitle3: '다중 노드 상호 통신 지원', fileExchangeContent3: '다른 노드 간에 프로젝트 파일을 쉽게 전송하고, 여러 서버를 유연하게 관리합니다.', nodeAppTitle1: '애플리케이션 업그레이드 관리', nodeAppContent1: '다중 노드 애플리케이션 업데이트 통합 모니터링, 원클릭 업그레이드 지원', appTitle1: '유연한 패널 관리', appContent1: '언제 어디서나 1Panel 서버를 쉽게 관리하세요.', appTitle2: '종합적인 서비스 정보', appContent2: '모바일 앱에서 애플리케이션, 웹사이트, Docker, 데이터베이스 등의 기본 관리를 하고, 애플리케이션과 웹사이트의 빠른 생성을 지원합니다.', appTitle3: '실시간 이상 모니터링', appContent3: '모바일 앱에서 서버 상태, WAF 보안 모니터링, 웹사이트 방문 통계 및 프로세스 건강 상태를 실시간으로 확인하세요.', clusterTitle1: '마스터-슬레이브 배포', clusterContent1: '다른 노드에서 MySQL/Postgres/Redis 마스터-슬레이브 인스턴스를 생성하는 것을 지원하며, 자동으로 마스터-슬레이브 연결 및 초기화를 완료합니다', clusterTitle2: '마스터-슬레이브 관리', clusterContent2: '통합 페이지에서 여러 마스터-슬레이브 노드를 중앙에서 관리하고, 역할, 실행 상태 등을 확인합니다', clusterTitle3: '복제 상태', clusterContent3: '마스터-슬레이브 복제 상태 및 지연 정보를 표시하여 동기화 문제를 해결하는 데 도움을 줍니다', modelDownloaderTitle1: '모델 탐색', modelDownloaderContent1: 'HuggingFace 모델 저장소를 직접 검색하고 다운로드 수, 좋아요, 모델 상세 정보, 파일 목록을 확인합니다.', modelDownloaderTitle2: '가속 다운로드', modelDownloaderContent2: 'HuggingFace 가속 엔드포인트와 HF Token을 설정하여 공식 사이트, 미러, 비공개 모델에 대응합니다.', modelDownloaderTitle3: '작업 추적', modelDownloaderContent3: '다운로드 대기열, 작업 상태, 진행률, 오류를 한곳에서 확인하고 취소, 재시도, 기록 정리를 지원합니다.', modelDownloaderTitle4: '로컬 관리', modelDownloaderContent4: '로컬 모델 디렉토리를 중앙에서 관리하고 경로, 크기, 시간을 확인하며 불필요한 모델 파일을 삭제합니다.', vllmTitle1: '통합 관리', vllmContent1: '분산된 vLLM 서비스를 1Panel에 통합하여 인스턴스、버전、상태、실행 디렉토리를 집중 조회할 수 있습니다.', vllmTitle2: '빠른 배포', vllmContent2: '시각적 양식으로 버전 선택、모델 디렉토리 마운트、시작 매개변수 설정을 완료하여 수동 구성 비용을 줄입니다.', vllmTitle3: '운영 효율성', vllmContent3: '같은 페이지에서 생성、편집、시작、중지、재시작、삭제、작업 추적을 완료하여 로컬 모델 서비스 유지보수 효율을 향상시킵니다.', vllmTitle4: '구성 제어', vllmContent4: '고급 설정으로 포트、컨테이너、시작 명령、Compose 구성을 통합 관리하여 표준화된 배포와 후속 조정을 용이하게 합니다.', }, node: { master: '주 노드', masterBackup: '마스터 노드 백업', backupNode: '백업 노드', backupFrequency: '백업 주기(시간)', backupCopies: '백업 수', noBackupNode: '현재 백업 노드가 비어 있습니다. 저장할 백업 노드를 선택한 후 다시 시도하십시오!', masterBackupAlert: '현재 마스터 노드 백업이 구성되지 않았습니다. 데이터 보안을 위해 장애 시 새로운 마스터 노드로 수동 전환이 가능하도록 가능한 빨리 백업 노드를 설정하십시오.', node: '노드', addr: '주소', nodeUpgrade: '업데이트 설정', nodeUpgradeHelper: '선택된 노드는 마스터 노드 업그레이드 완료 후 자동으로 업그레이드를 시작하며 수동 작업이 필요하지 않습니다.', nodeUpgradePackageManage: '설치 패키지 관리', nodeUpgradePackageClean: '정리', nodeUpgradePackageFormatHelper: '`1panel-agent_v*_*` 또는 `1panel-v*-linux-*` 설치 패키지만 지원됩니다', nodeUpgradePackageHostConfirm: '서버 파일 {0}을(를) 선택합니다. 계속하시겠습니까?', nodeUpgradePackageCleanHelper: '모든 낮은 버전의 업데이트 패키지를 정리합니다. 계속하시겠습니까?', nodeUpgradeOfflinePackageHelper: '오프라인 환경에서는 다른 아키텍처의 노드를 업데이트하기 전에 해당 업데이트 패키지를 먼저 업로드해야 합니다.', healthCheck: '상태 확인', healthCheckFrequency: '자동 확인 주기', healthCheckFrequencyHelper: '설정된 주기로 노드 상태를 자동 확인합니다. 자동 확인을 비활성화하려면 0을 입력하세요.', healthCheckFrequencyLimit: '확인 주기는 하루를 초과할 수 없으며 음수가 아닌 정수여야 합니다.', autoCheckFailedNodes: '실패 노드 자동 확인', autoCheckFailedNodesHelper: '자동 확인 시 실패 또는 비정상 상태의 노드도 확인합니다. 확인 주기가 0이 아닐 때만 적용됩니다.', loadFailedNodeResources: '실패 노드 리소스 새로 고침', loadFailedNodeResourcesHelper: '노드 목록을 새로 고칠 때 실패 또는 비정상 상태의 노드 리소스 정보도 조회합니다.', nodeUnhealthy: '노드 상태 이상', deletedNode: '삭제된 노드 {0}은(는) 현재 업그레이드 작업을 지원하지 않습니다!', nodeUnhealthyHelper: '노드 상태 이상이 감지되었습니다. [노드 관리]에서 확인 후 다시 시도하세요!', nodeUnbind: '노드가 라이선스에 바인딩되지 않음', nodeUnbindHelper: '이 노드가 라이선스에 바인딩되지 않은 것으로 감지되었습니다. [패널 설정 - 라이선스] 메뉴에서 바인딩 후 다시 시도하세요!', memTotal: '총 메모리', nodeManagement: '다중 머신 관리', multiOverview: '다중 머신', commonNodes: '자주 사용하는 노드', searchNodePlaceholder: '노드 이름, 그룹 또는 주소 검색', nodeItem: '노드 관리', panelItem: '패널 관리', addPanel: '패널 추가', addPanelHelper: '패널을 추가한 후 [개요 - 패널]에서 대상 패널에 빠르게 접근할 수 있습니다.', panel: '1Panel 패널', others: '기타 패널', addNode: '노드 추가', connInfo: '연결 정보', nodeInfo: '노드 정보', withProxy: '프록시 액세스 활성화', withoutProxy: '프록시 액세스 비활성화', withProxyHelper: '패널 설정에서 유지 관리되는 시스템 프록시 {0}을(를) 사용하여 자식 노드에 액세스합니다. 계속하시겠습니까?', withoutProxyHelper: '패널 설정에서 유지 관리되는 시스템 프록시를 사용하여 자식 노드에 액세스하는 것을 중지합니다. 계속하시겠습니까?', syncInfo: '데이터 동기화,', syncHelper: '마스터 노드 데이터가 변경되면, 이 자식 노드에 실시간으로 동기화됩니다,', syncBackupAccount: '백업 계정 설정', syncWithMaster: '상용 버전으로 업그레이드 후 모든 데이터가 기본적으로 동기화됩니다. 노드 관리에서 동기화 정책을 수동으로 조정할 수 있습니다.', syncProxy: '시스템 프록시 설정', syncProxyHelper: '시스템 프록시 설정 동기화에는 Docker 재시작이 필요합니다', syncProxyHelper1: 'Docker 재시작은 현재 실행 중인 컨테이너 서비스에 영향을 줄 수 있습니다.', syncProxyHelper2: '컨테이너 - 설정 페이지에서 수동으로 재시작할 수 있습니다.', syncProxyHelper3: '시스템 프록시 설정 동기화에는 Docker 재시작이 필요하며, 현재 실행 중인 컨테이너 서비스에 영향을 줄 수 있습니다', syncProxyHelper4: '시스템 프록시 설정 동기화에는 Docker 재시작이 필요합니다. 나중에 컨테이너 - 설정 페이지에서 수동으로 재시작할 수 있습니다.', syncCustomApp: '사용자 정의 앱 저장소 동기화', syncAlertSetting: '시스템 경고 설정', syncNodeInfo: '노드 기본 데이터,', nodeSyncHelper: '노드 정보 동기화는 다음 정보를 동기화합니다:', nodeSyncHelper1: '1. 공용 백업 계정 정보', nodeSyncHelper2: '2. 주 노드와 하위 노드 간의 연결 정보', nodeCheck: '가용성 확인', checkSSH: '노드 SSH 연결 확인', checkUserPermission: '노드 사용자 권한 확인', isNotRoot: '이 노드에서 비밀번호 없이 sudo를 사용할 수 없으며 현재 사용자가 root가 아닌 것으로 감지되었습니다', checkLicense: '노드 라이선스 상태 확인', checkService: '노드의 기존 서비스 정보 확인', checkPort: '노드 포트 접근 가능 여부 확인', panelExist: '이 노드에서 1Panel V1 서비스가 실행 중인 것으로 감지되었습니다. 추가 전에 마이그레이션 스크립트로 V2로 업그레이드하십시오.', coreExist: '현재 노드가 마스터 노드로 활성화되어 있어 슬레이브 노드로 직접 추가할 수 없습니다. 추가하기 전에 먼저 슬레이브 노드로 다운그레이드하십시오. 자세한 내용은 문서를 참조하십시오.', agentExist: '이 노드에 1panel-agent가 이미 설치되어 있는 것으로 감지되었습니다. 계속하면 기존 데이터를 유지하고 1panel-agent 서비스만 교체됩니다.', agentNotExist: '이 노드에 1panel-agent가 설치되지 않아 노드 정보를 직접 편집할 수 없습니다. 삭제 후 다시 추가해 주세요.', oldDataExist: '이 노드에서 1Panel V2 기록 데이터가 감지되었습니다. 다음 정보를 사용하여 현재 설정을 덮어씁니다:', errLicense: '이 노드에 바인딩된 라이선스를 사용할 수 없습니다. 확인 후 다시 시도하십시오!', errNodePort: '노드 포트 [ {0} ]에 접근할 수 없는 것으로 감지되었습니다. 방화벽 또는 보안 그룹에서 해당 포트가 허용되었는지 확인하십시오.', reinstallHelper: '노드 {0}를 재설치합니다. 계속하시겠습니까?', unhealthyCheck: '비정상 체크', fixOperation: '수정 작업', checkName: '체크 항목', checkSSHConn: 'SSH 연결 가능성 확인', fixSSHConn: '노드를 수동으로 편집하여 연결 정보를 확인합니다', checkConnInfo: '에이전트 연결 정보 확인', checkStatus: '노드 서비스 가용성 확인', fixStatus: '"systemctl status 1panel-agent.service"를 실행하여 서비스가 실행 중인지 확인합니다.', checkAPI: '노드 API 가용성 확인', fixAPI: '노드 로그를 확인하고 방화벽 포트가 정상적으로 열려 있는지 확인합니다.', forceDelete: '강제 삭제', operateHelper: '다음 노드에 대해 {0} 작업을 수행합니다. 계속하시겠습니까?', operatePanelHelper: '다음 패널에 대해 {0} 작업을 수행합니다. 계속하시겠습니까?', forceDeleteHelper: '강제 삭제는 노드 삭제 오류를 무시하고 데이터베이스 메타데이터를 삭제합니다', uninstall: '노드 데이터 삭제', uninstallHelper: '이 작업은 노드의 모든 1Panel 관련 데이터를 삭제합니다. 신중하게 선택하세요!', baseDir: '설치 디렉토리', baseDirHelper: '설치 디렉토리가 비어 있으면 기본적으로 /opt 디렉토리에 설치됩니다', nodePort: '노드 포트', offline: '오프라인 모드', freeCount: '무료 할당량 [{0}]', offlineHelper: '노드가 오프라인 환경일 때 사용', appUpgrade: '앱 업그레이드', appUpgradeHelper: '업그레이드가 필요한 앱이 {0}개 있습니다', dashboardSetting: '개요 설정', keepOneDashboardComponent: '개요 섹션을 하나 이상 유지하세요', }, customApp: { name: '사용자 정의 앱 저장소', appStoreType: '앱 스토어 패키지 소스', appStoreUrl: '저장소 URL', local: '로컬 경로', remote: '원격 링크', imagePrefix: '이미지 접두사', imagePrefixHelper: '기능: 이미지 접두사를 사용자 정의하고 compose 파일의 이미지 필드를 수정합니다. 예를 들어 이미지 접두사를 1panel/custom으로 설정하면 MaxKB의 이미지 필드는 1panel/custom/maxkb:v1.10.0으로 변경됩니다', closeHelper: '사용자 정의 앱 저장소 사용 취소', appStoreUrlHelper: '.tar.gz 형식만 지원합니다', postNode: '서브 노드로 동기화', postNodeHelper: '사용자 정의 스토어 패키지를 하위 노드의 설치 디렉토리에 있는 tmp/customApp/apps.tar.gz로 동기화합니다', nodes: '노드 선택', selectNode: '노드 선택', selectNodeError: '노드를 선택하세요', licenseHelper: '상용 버전은 사용자 정의 애플리케이션 저장소 기능을 지원합니다', databaseHelper: '애플리케이션 관련 데이터베이스, 대상 노드 데이터베이스를 선택하세요', nodeHelper: '현재 노드는 선택할 수 없습니다', migrateHelper: '현재 단일 애플리케이션과 MySQL, MariaDB, PostgreSQL 데이터베이스만 연결된 애플리케이션의 마이그레이션만 지원합니다', opensslHelper: '암호화된 백업을 사용하는 경우 두 노드 간의 OpenSSL 버전이 일치해야 합니다. 그렇지 않으면 마이그레이션이 실패할 수 있습니다.', installApp: '일괄 설치', installAppHelper: '선택한 노드에 앱 일괄 설치', }, alert: { isAlert: '알림', alertCount: '알림 횟수', clamHelper: '감염된 파일을 스캔할 때 알림 트리거', cronJobHelper: '작업 실행 실패 시 알림 트리거', licenseHelper: '상용 버전에서는 알림을 지원합니다.', alertCountHelper: '최대 일일 알림 빈도', alert: 'SMS 알림', logs: '알림 로그', list: '알림 목록', addTask: '알림 생성', editTask: '알림 수정', alertMethod: '알림 방법', alertMsg: '알림 메시지', alertRule: '알림 규칙', titleSearchHelper: '알림 제목을 입력하여 검색하세요', taskType: '유형', ssl: 'SSL 인증서 만료', siteEndTime: '웹사이트 만료', panelPwdEndTime: '패널 비밀번호 만료', panelUpdate: '새 패널 버전 사용 가능', cpu: '서버 CPU 알림', memory: '서버 메모리 알림', load: '서버 부하 알림', disk: '서버 디스크 알림', website: '웹사이트', certificate: 'SSL 인증서', remainingDays: '남은 일수', sendCount: '발송 횟수', recipientPlaceholder: '이메일 주소를 입력하세요', addRecipient: '수신자 추가', webhookItem: 'Webhook 링크', addWebhook: 'Webhook 추가', selectAlertType: '알림 유형 선택', configDetail: '세부 설정', webhookCount: 'Webhook 수', sms: 'SMS', wechat: '위챗', dingTalk: '딩톡', feiShu: '페이슈', mail: '이메일', email: '이메일 알림', weCom: 'WeCom', bark: 'Bark', sendCountRulesHelper: '만료 전 발송된 총 알림 수 (하루 1회)', panelUpdateRulesHelper: '새 패널 버전에 대한 총 알림 수 (하루 1회)', oneDaySendCountRulesHelper: '하루 최대 발송 가능한 알림 수', siteEndTimeRulesHelper: '만료되지 않는 웹사이트는 알림이 발생하지 않습니다', autoRenewRulesHelper: '자동 갱신이 설정된 인증서의 남은 일수가 31일 미만이면 알림이 발생하지 않습니다', panelPwdEndTimeRulesHelper: '만료가 설정되지 않은 경우 패널 비밀번호 만료 알림이 비활성화됩니다', sslRulesHelper: '모든 SSL 인증서', diskInfo: '디스크', monitoringType: '모니터링 유형', autoRenew: '자동 갱신', useDisk: '디스크 사용량', usePercentage: '사용 비율', changeStatus: '상태 변경', disableMsg: '알림 작업을 중지하면 알림 메시지가 전송되지 않습니다. 계속하시겠습니까?', enableMsg: '알림 작업을 활성화하면 알림 메시지가 전송됩니다. 계속하시겠습니까?', useExceed: '사용량 초과', useExceedRulesHelper: '사용량이 설정 값을 초과하면 알림을 트리거합니다', cpuUseExceedAvg: '평균 CPU 사용량이 지정된 값을 초과함', memoryUseExceedAvg: '평균 메모리 사용량이 지정된 값을 초과함', loadUseExceedAvg: '평균 부하 사용량이 지정된 값을 초과함', cpuUseExceedAvgHelper: '지정된 시간 내의 평균 CPU 사용량이 지정된 값을 초과함', memoryUseExceedAvgHelper: '지정된 시간 내의 평균 메모리 사용량이 지정된 값을 초과함', loadUseExceedAvgHelper: '지정된 시간 내의 평균 부하 사용량이 지정된 값을 초과함', resourceAlertRulesHelper: '참고: 30분 내에 연속적인 알림은 한 번만 발송됩니다', specifiedTime: '지정된 시간', deleteTitle: '알림 삭제', deleteMsg: '알림 작업을 삭제하시겠습니까?', allSslTitle: '모든 웹사이트 SSL 인증서 만료 알림', sslTitle: '웹사이트 {0}의 SSL 인증서 만료 알림', allSiteEndTimeTitle: '모든 웹사이트 만료 알림', siteEndTimeTitle: '웹사이트 {0} 만료 알림', panelPwdEndTimeTitle: '패널 비밀번호 만료 알림', panelUpdateTitle: '새 패널 버전 알림', cpuTitle: '고 CPU 사용량 알림', memoryTitle: '고 메모리 사용량 알림', loadTitle: '고 부하 알림', diskTitle: '디스크 사용량 초과 알림 {0}', allDiskTitle: '고 디스크 사용량 알림', timeRule: '{0}일 이하 남은 시간 (처리되지 않으면 다음 날 다시 전송)', panelUpdateRule: '새 패널 버전이 감지되면 한 번 알림을 전송 (처리되지 않으면 다음 날 다시 전송)', avgRule: '{0}분 내 평균 {1} 사용량이 {2}% 초과 시 알림을 트리거하며 하루에 {3}번 발송', diskRule: '디스크 사용량이 마운트 디렉토리 {0}에서 {1}{2}를 초과하면 알림을 트리거하고 하루에 {3}번 발송', allDiskRule: '디스크 사용량이 {0}{1}을 초과하면 알림을 트리거하고 하루에 {2}번 발송', cpuName: ' CPU ', memoryName: '메모리', loadName: '부하', diskName: '디스크', syncAlertInfo: '수동 푸시', syncAlertInfoMsg: '알림 작업을 수동으로 푸시하시겠습니까?', pushError: '푸시 실패', pushSuccess: '푸시 성공', syncError: '동기화 실패', success: '알림 성공', pushing: '푸시 중...', error: '알림 실패', cleanLog: '로그 정리', cleanAlertLogs: '알림 로그 정리', daily: '일일 알림 수: {0}', cumulative: '누적 알림 수: {0}', clams: '바이러스 검사', taskName: '작업 이름', cronJobType: '작업 유형', clamPath: '검사 디렉토리', cronjob: '예약 작업 실행 {0} 중 오류가 발생했습니다', app: '백업 애플리케이션', web: '백업 웹사이트', database: '백업 데이터베이스', directory: '백업 디렉토리', log: '백업 로그', snapshot: '시스템 스냅샷', clamsRulesHelper: '알림이 필요한 바이러스 검사 작업', cronJobRulesHelper: '이 유형의 예약된 작업은 구성해야 합니다', alertTriggerMode: '알림 조건', alertTriggerFailed: '실패 시에만', alertTriggerSuccess: '성공 시에만', alertTriggerBoth: '성공 또는 실패 시', alertNotificationHelper: '재시도 중이 아닌 최종 실행 결과에 따라 알립니다. 성공 및 실패 알림은 일일 한도와 전송 시간대를 공유합니다.', notificationTitle: '예약 작업 - {0} 「{1}」 실행 알림', notificationSuccessTitle: '예약 작업 - {0} 「{1}」 실행 성공', notificationRule: '{0}: {1}, 하루 최대 {2}회 알림', clamsTitle: '바이러스 검사 작업 「 {0} 」 감염된 파일 알림', cronJobAppTitle: '크론 작업 - 백업 애플리케이션 「 {0} 」 작업 실패 알림', cronJobWebsiteTitle: '크론 작업 - 백업 웹사이트「 {0} 」작업 실패 알림', cronJobDatabaseTitle: '크론 작업 - 백업 데이터베이스「 {0} 」작업 실패 알림', cronJobDirectoryTitle: '크론 작업 - 백업 디렉토리「 {0} 」작업 실패 알림', cronJobLogTitle: '크론 작업 - 백업 로그「 {0} 」작업 실패 알림', cronJobSnapshotTitle: '크론 작업 - 백업 스냅샷「 {0} 」작업 실패 알림', cronJobShellTitle: '크론 작업 - 셸 스크립트 「 {0} 」작업 실패 알림', cronJobCurlTitle: '크론 작업 - URL 접근「 {0} 」작업 실패 알림', cronJobCutWebsiteLogTitle: '크론 작업 - 웹사이트 로그 자르기「 {0} 」작업 실패 알림', cronJobCleanTitle: '크론 작업 - 캐시 정리「 {0} 」작업 실패 알림', cronJobNtpTitle: '크론 작업 - 서버 시간 동기화「 {0} 」작업 실패 알림', clamsRule: '바이러스 검사로 감염된 파일 알림, 하루에 {0}번 발송', cronJobAppRule: '백업 애플리케이션 작업 실패 알림, 하루에 {0}번 발송', cronJobWebsiteRule: '백업 웹사이트 작업 실패 알림, 하루에 {0}번 발송', cronJobDatabaseRule: '백업 데이터베이스 작업 실패 알림, 하루에 {0}번 발송', cronJobDirectoryRule: '백업 디렉토리 작업 실패 알림, 하루에 {0}번 발송', cronJobLogRule: '백업 로그 작업 실패 알림, 하루에 {0}번 발송', cronJobSnapshotRule: '백업 스냅샷 작업 실패 알림, 하루에 {0}번 발송', cronJobShellRule: '셸 스크립트 작업 실패 알림, 하루에 {0}번 발송', cronJobCurlRule: 'URL 접근 작업 실패 알림, 하루에 {0}번 발송', cronJobCutWebsiteLogRule: '웹사이트 로그 자르기 작업 실패 알림, 하루에 {0}번 발송', cronJobCleanRule: '캐시 정리 작업 실패 알림, 하루에 {0}번 발송', cronJobNtpRule: '서버 시간 동기화 작업 실패 알림, 하루에 {0}번 발송', alertSmsHelper: 'SMS 한도: 총 {0}개의 메시지, {1}개 사용됨', goBuy: '추가 구매', phone: '전화', phoneHelper: '알림 메시지를 위한 실제 전화번호를 제공하세요', dailyAlertNum: '일일 알림 한도', dailyAlertNumHelper: '하루에 보낼 수 있는 최대 알림 수 (최대 100개)', timeRange: '시간 범위', sendTimeRange: '발송 시간 범위', sendTimeRangeHelper: '{0} 시간 범위를 푸시할 수 있습니다', to: '부터', startTime: '시작 시간', endTime: '종료 시간', defaultPhone: '기본적으로 라이선스에 묶인 계정의 전화번호 사용', noticeAlert: '공지 알림', resourceAlert: '리소스 알림', agentOfflineAlertHelper: '노드에서 오프라인 알림이 활성화되면, 메인 노드가 30분마다 스캔하여 알림 작업을 수행합니다.', offline: '오프라인 알림', offlineHelper: '오프라인 알림으로 설정하면, 메인 노드가 30분마다 스캔하여 알림 작업을 수행합니다.', offlineOff: '오프라인 알림 활성화', offlineOffHelper: '오프라인 알림을 활성화하면, 메인 노드가 30분마다 스캔하여 알림 작업을 수행합니다.', offlineClose: '오프라인 알림 비활성화', offlineCloseHelper: '오프라인 알림을 비활성화하면, 하위 노드가 알림을 직접 처리해야 합니다. 알림 실패를 방지하려면 네트워크 연결이 원활한지 확인하세요.', alertNotice: '알림 통지', methodConfig: '알림 방법 설정', createMethod: '알림 방법 생성', methodInvalid: '유효하지 않은 설정 {0}', commonConfig: '전역 설정', smsConfig: 'SMS', smsConfigHelper: 'SMS 알림을 받을 전화번호를 설정합니다', emailConfig: '이메일', emailConfigHelper: 'SMTP 이메일 발송 서비스를 설정합니다', deleteConfigTitle: '알림 설정 삭제', deleteConfigMsg: '알림 설정을 삭제하시겠습니까?', test: '테스트', alertTestOk: '테스트 알림 성공', alertTestFailed: '테스트 알림 실패', displayName: '표시 이름', sender: '발신 주소', password: '비밀번호', host: 'SMTP 서버', port: '포트 번호', encryption: '암호화 방식', recipient: '수신자', licenseTime: '라이선스 만료 알림', licenseTimeTitle: '라이선스 만료 알림', displayNameHelper: '이메일 발신자 표시 이름', senderHelper: '이메일 발송에 사용되는 주소', passwordHelper: '메일 서비스의 인증 코드', hostHelper: 'SMTP 서버 주소, 예: smtp.qq.com', portHelper: 'SSL 은 일반적으로 465, TLS 는 587', sslHelper: 'SMTP 포트가 465 이면 일반적으로 SSL 이 필요합니다', tlsHelper: 'SMTP 포트가 587 이면 일반적으로 TLS 가 필요합니다', triggerCondition: '트리거 조건', loginFail: ' 이내 로그인 실패', nodeException: '노드 이상 알림', licenseException: '라이선스 이상 알림', panelLogin: '패널 로그인 이상 알림', sshLogin: 'SSH 로그인 이상 알림', panelIpLogin: '패널 로그인 IP 이상 알림', sshIpLogin: 'SSH 로그인 IP 이상 알림', ipWhiteListHelper: '화이트리스트에 있는 IP는 규칙의 제한을 받지 않으며, 로그인에 성공해도 알림이 발생하지 않습니다', nodeExceptionRule: '노드 이상 알림은 하루 {0}회 전송', licenseExceptionRule: '라이선스 이상 알림은 하루 {0}회 전송', panelLoginRule: '패널 로그인 알림은 하루 {0}회 전송', sshLoginRule: 'SSH 로그인 알림은 하루 {0}회 전송', userNameHelper: '사용자 이름이 비어 있으면 기본적으로 발신자 주소가 사용됩니다', alertConfigHelper: '패널 메시지 푸시를 수신하기 위한 알림 채널 구성', weComConfigHelper: 'WeCom 알림 구성', wechatConfigHelper: 'WeChat 공식 계정 알림 구성', dingTalkConfigHelper: 'DingTalk 알림 구성', feiShuConfigHelper: 'Feishu 알림 구성', barkConfigHelper: 'Bark 알림 구성', webhookName: '봇 이름', webhookUrl: 'Webhook URL', custom: 'Webhook', webhookPreset: '프리셋', genericJsonPreset: '일반 JSON', customPreset: '사용자 지정', webhookPublicAddressHelper: '공개 네트워크에서 접근 가능한 HTTP/HTTPS 주소만 지원하며 로컬, 사설 및 예약 주소는 차단됩니다', customWebhookRecoveryRequired: '저장된 Webhook 설정을 읽을 수 없습니다. URL과 필요한 민감한 헤더를 다시 입력하고 테스트에 성공한 후 저장하세요.', clearSecret: '지우기', keepSecret: '저장된 값 복원', bodyType: 'Body 유형', bodyTemplate: 'Body 템플릿', formatJson: '서식 정리', jsonFormatTooLarge: '서식을 정리한 내용이 크기 제한을 초과하여 원본 내용을 유지했습니다.', formFieldName: '필드 이름', formFieldValue: '필드 값', addFormField: '필드 추가', webhookAdvanced: '고급 설정', headers: 'Headers', headerName: 'Header 이름', headerValue: 'Header 값', secretValue: '비밀 값', addHeader: 'Header 추가', templateVariables: '템플릿 변수', templateVariableTitle: '알림 제목', templateVariableMessage: '알림 내용', templateVariableType: '알림 유형', templateVariableNodeName: '노드 이름', templateVariableTimestamp: '발생 시간', templateVariablesHelper: 'title=알림 제목, message=알림 내용, type=알림 유형, nodeName=노드 이름, timestamp=발생 시간. 변수를 클릭하면 Body에 삽입됩니다.', testResultStale: '설정이 변경되어 이전 테스트 결과가 더 이상 유효하지 않습니다', alertConfigChanged: '구성이 업데이트되었습니다. 새로 고친 후 다시 시도하세요.', presetOverwriteHelper: '프리셋을 전환하면 현재 Body 설정을 덮어씁니다. 계속하시겠습니까?', customWebhookValidation: { displayNameRequired: '표시 이름을 입력하세요', urlRequired: 'Webhook URL을 입력하세요', urlInvalid: 'Webhook URL은 유효한 HTTP 또는 HTTPS URL이어야 합니다', bodyRequired: '요청 Body를 설정하세요', jsonInvalid: 'JSON Body 템플릿이 올바르지 않습니다', formFieldRequired: 'Form 필드 이름은 필수입니다', formFieldDuplicate: 'Form 필드 이름은 중복될 수 없습니다', headerRequired: 'Header 이름은 필수입니다', headerInvalid: 'Header 이름이 올바르지 않습니다', headerDuplicate: 'Header 이름은 중복될 수 없습니다', headerReserved: '이 Header는 시스템에서 관리하므로 사용자 지정할 수 없습니다', headerMustBeSecret: '인증 또는 자격 증명 Header는 비밀 값으로 설정해야 합니다', templateVariableInvalid: 'Body에 지원되지 않는 템플릿 변수가 있습니다', secretRequired: '비밀 값을 입력하거나 변경하지 않음/지우기를 선택하세요', }, alertConfigProHelper: '상용 버전에서는 더 많은 알림 채널을 지원합니다.', }, theme: { lingXiaGold: 'LXware Gold', classicBlue: '클래식 블루', freshGreen: '프레시 그린', customColor: '사용자 정의 색상', setDefault: '기본값', setDefaultHelper: '테마 색상 스킴이 초기 상태로 복원됩니다. 계속하시겠습니까?', setHelper: '현재 선택한 테마 색상 스킴이 저장됩니다. 계속하시겠습니까?', }, sync: { menu: '리소스 동기화', file: '파일 전송', fileSyncConfirm: '{0} 노드의 파일/폴더 {1}을(를) {2} 노드의 디렉터리 {3}(으)로 전송하시겠습니까?', image: '이미지 전송', imageBatchDesc: '먼저 원본 노드와 원본 이미지를 선택한 후 대상 노드를 선택하여 전달합니다.', imageBatchConfirmPrefix: '{0}개의 이미지를 {1}개 노드로 전달합니다. 총 {2}개의 작업이 생성됩니다.', ssl: '인증서 동기화', sslBatchDesc: '원본 노드를 선택한 후 지정된 인증서를 현재 패널 환경으로 동기화할 수 있습니다.', sslBatchConfirmPrefix: '{0}개의 인증서를 {1}개 노드로 동기화합니다. 총 {2}개의 작업이 생성됩니다.', app: '애플리케이션 전송', appBatchDesc: '원본 노드, 애플리케이션 및 대상 노드를 선택한 후 리소스 종속성을 확인하고 애플리케이션 전송 작업을 실행합니다.', appSelectedApp: '선택한 애플리케이션:', appPreviewTitle: '전송 미리보기', appPreviewDesc: '대상 노드와 종속 리소스를 확인한 후 애플리케이션 전송을 실행하세요.', appDatabaseDependency: '데이터베이스 종속성', appResourceRequired: '필수 연관 리소스를 모두 먼저 선택하세요.', appUnsupportedMultipleResources: '현재 최대 하나의 리소스만 연결된 애플리케이션만 마이그레이션할 수 있습니다.', appUnsupportedResourceType: '현재 리소스 종속성이 없거나 MySQL, MariaDB, PostgreSQL에만 의존하는 애플리케이션만 마이그레이션할 수 있습니다.', targetTitle: '대상 노드', targetDesc: '원본 노드는 자동으로 제외됩니다. 하나 이상의 대상 노드를 선택할 수 있습니다.', targetSearchPlaceholder: '노드 이름 또는 주소 검색', noTargetNodes: '선택 가능한 대상 노드가 없습니다', noSourceNode: '먼저 원본 노드를 선택하세요', reviewTargets: '대상 노드', reviewEmpty: '먼저 리소스와 대상 노드를 선택하세요', selectSourceFirst: '먼저 원본 노드를 선택하세요.', selectResourceFirst: '먼저 동기화할 리소스를 선택하세요.', selectTargetFirst: '최소 하나의 대상 노드를 선택하세요.', submitSuccess: '동기화 작업이 제출되었습니다.', }, vm: { countLimitHelper: 'Professional 버전에서는 가상 머신을 최대 {0}대까지 생성할 수 있습니다. Enterprise 버전은 대수 제한이 없습니다.', vm: '가상 머신', title: '가상 머신 관리', healthCheck: '상태 점검', healthCheckResult: { pass: '정상', info: '정보', warn: '경고', fail: '실패', normal: '정상', fixCommand: '수정 명령어', technicalDetail: '기술 세부 정보', check: { vmName: '가상 머신 이름', libvirtConnection: 'Libvirt 연결', vmDefinition: '가상 머신 정의', domainXML: '가상 머신 XML', architecture: '아키텍처', virtualizationType: '가상화 유형', machineType: '머신 유형', efiCapability: 'EFI 기능', qemuEmulator: 'QEMU 에뮬레이터', bootOrder: '부팅 순서', arm64Firmware: 'ARM64 펌웨어', arm64Features: 'ARM64 기능', arm64Video: 'ARM64 디스플레이', arm64FirmwareFile: 'ARM64 펌웨어 파일', arm64CDROM: 'ARM64 CD-ROM', blockDevice: '블록 장치', isoArchitecture: 'ISO 아키텍처', network: '네트워크', qemuLog: 'QEMU 로그', arm64RuntimeFirmware: 'ARM64 런타임 펌웨어', }, reason: { invalidName: '가상 머신 이름이 올바르지 않습니다.', connectionFailed: '{uri}에 연결할 수 없습니다.', vmNotFound: '가상 머신 {name}을(를) 찾을 수 없습니다.', xmlReadFailed: '가상 머신 XML을 읽지 못했습니다.', liveXMLFallback: '영구 설정을 읽을 수 없어 현재 실행 설정을 사용합니다.', xmlParseFailed: '가상 머신 XML을 분석하지 못했습니다.', stateReadFailed: '가상 머신 상태를 확인할 수 없어 런타임 펌웨어 검사를 건너뛰었습니다.', guestArchMissing: 'XML에 게스트 아키텍처가 없습니다.', archMismatch: '호스트 아키텍처는 {hostArch}, 게스트 아키텍처는 {guestArch}입니다. 교차 아키텍처 실행은 지원되지 않습니다.', nonKVMType: '가상화 유형이 {type}이며 기본 KVM 유형이 아닙니다.', archOrMachineMissing: 'XML에 아키텍처 또는 머신 유형이 없습니다.', machineUnsupported: '호스트가 {arch}/{machine}을(를) 지원하지 않습니다.', emulatorNotSpecified: 'XML에 에뮬레이터가 지정되지 않아 Libvirt가 선택합니다.', fileNotFound: '파일을 찾을 수 없습니다: {path}', fileNotExecutable: '파일을 실행할 수 없습니다: {path}', bootDeviceMissing: 'XML에 부팅 장치가 정의되어 있지 않습니다.', diskNotFirst: '디스크가 첫 번째 부팅 장치가 아닙니다. 현재 순서: {order}', cdromNotInBootOrder: 'CD-ROM이 연결되어 있지만 부팅 순서에 포함되어 있지 않습니다.', firmwareNotConfigured: 'EFI 또는 Loader가 설정되지 않아 게스트의 디스플레이 초기화나 부팅이 실패할 수 있습니다.', acpiCustom: 'ACPI가 설정되어 있습니다. 게스트에 필요한 사용자 지정 설정인지 확인하세요.', acpiRequiresUEFI: 'UEFI 없이 ACPI가 설정되어 ACPI requires UEFI 오류가 발생합니다.', apicUnsupported: 'x86 APIC가 설정되어 있지만 ARM64에서는 사용할 수 없습니다.', gicNotDeclared: '영구 XML에 GIC가 없습니다. Libvirt가 런타임에 추가할 수 있습니다.', videoNotConfigured: 'XML에 디스플레이 장치가 설정되어 있지 않습니다.', videoNotVirtio: '디스플레이 장치 유형은 {type}입니다. Virtio 사용을 권장합니다.', firmwareFileMissing: '펌웨어 파일이 없거나 일반 파일이 아닙니다: {path}', firmwareNotAvailable: 'Libvirt에서 EFI 기능을 보고하지 않았으며 ARM64 UEFI 펌웨어도 없습니다.', cdromBusNotSCSI: 'CD-ROM이 {bus} 버스를 사용합니다. ARM64에는 SCSI가 필요합니다.', cdromNotOnVirtioSCSI: 'CD-ROM이 Virtio SCSI 컨트롤러에 연결되어 있지 않습니다.', diskSourceMissing: '{device} {target}에 소스 파일이 설정되어 있지 않습니다.', sourceNotFound: '{device} {target}의 소스 파일이 없습니다: {path}', sourceIsDirectory: '{device} {target}의 소스 경로가 디렉터리입니다: {path}', systemDiskNotFound: '시스템 디스크를 찾지 못했습니다.', isoArchMismatch: '{guestArch} 게스트에 {imageArch}용으로 보이는 이미지가 연결되어 있습니다: {path}', networkReadFailed: '네트워크 {name}을(를) 읽을 수 없습니다.', networkStateReadFailed: '네트워크 {name}의 상태를 읽을 수 없습니다.', networkInactive: '네트워크 {name}이(가) 존재하지만 활성화되지 않았습니다.', logUnavailable: '분석할 수 있는 시작 로그가 없습니다.', logErrorsFound: '최근 시작 기록에서 일반적인 오류가 발견되었습니다.', vmNotRunning: '가상 머신이 실행 중이 아니므로 QEMU 런타임 인수 검사를 건너뛰었습니다.', runtimeFirmwareMissing: 'QEMU 로그에서 pflash, AAVMF 또는 QEMU_EFI 항목을 찾지 못했습니다.', }, }, dependencies: '종속성', architectureUnsupported: '현재 시스템 아키텍처 {0}은(는) 지원되지 않습니다. VM 기능은 현재 AMD64 및 ARM64만 지원합니다.', dependencyPurpose: '용도', dependencyPurposeMap: { libvirt: '가상 머신 관리 서비스를 제공하며 수명 주기와 리소스 스케줄링을 담당합니다.', storage: '가상 머신 디스크 파일을 저장하기 위한 기본 저장소 디렉터리 또는 스토리지 풀을 제공합니다.', }, dependencyNotReady: '가상 머신 종속성 검사를 통과하지 못했습니다. 종속성을 처리한 후 사용하세요.', helperUnavailable: '가상 머신 기능 초기화에 실패했습니다. Core 로그를 확인하거나 다시 업그레이드한 후 사용하세요.', cpu: 'CPU', memory: '메모리', disk: '디스크', overview: '개요', kvmUnavailable: '사용 가능한 KVM 하드웨어 가상화 기능을 찾지 못했습니다.', kvmCheckCpu: '호스트 CPU가 Intel VT-x 또는 AMD-V 가상화를 지원하는지 확인하세요.', kvmCheckBios: 'BIOS/UEFI에서 가상화 옵션을 활성화하세요.', kvmCheckModule: 'kvm, kvm_intel 또는 kvm_amd 커널 모듈이 올바르게 로드되었는지 확인하세요.', kvmCheckDevice: '/dev/kvm이 존재하며 현재 환경이 KVM을 지원하지 않는 컨테이너 또는 클라우드 호스트가 아닌지 확인하세요.', abnormal: '비정상', resourceOverview: '리소스 개요', cpuAllocated: '할당된 CPU', memoryAllocated: '할당된 메모리', storageUsed: '사용한 스토리지', riskReminder: '위험 알림', noRisk: '위험 없음', runtimeHealth: '실행 환경 상태', runtimeAbnormal: 'VM 실행 환경이 비정상입니다', noDependency: '종속성 검사 데이터가 없습니다', storageOverview: '스토리지 개요', totalAllocated: '전체 VM 구성 기준으로 계산', runningAllocated: '실행 중 할당량: {0}', storageAvailable: '사용 가능: {0}', inProgress: '진행 중', needAttention: '확인 필요', normal: '정상', environmentRisk: 'VM 실행 환경이 준비되지 않았습니다. 종속성 또는 가상화 서비스를 수정하세요.', storageRisk: '스토리지 풀 {0} 사용률이 {1}%에 도달했습니다.', abnormalRisk: '{0}개의 VM이 비정상 상태입니다.', pausedRisk: '{0}개의 VM이 일시 중지되었습니다.', memoryRisk: 'VM 메모리 할당률이 {0}%에 도달했습니다.', cpuLimitHelper: '현재 사용 가능한 CPU: {0} 코어', cpuLimitExceeded: 'CPU가 제한을 초과했습니다. 현재 최대 사용 가능: {0} 코어.', memoryLimitHelper: '현재 할당 가능한 메모리: {0} (호스트는 {1} 메모리를 예약해야 함)', memoryLimitExceeded: '메모리가 제한을 초과했습니다. 현재 최대 할당 가능: {0}.', storageLimitHelper: '대상 스토리지 풀의 현재 사용 가능 공간: {0}', storageLimitExceeded: '디스크 용량이 제한을 초과했습니다. 현재 최대 사용 가능: {0}.', iso: 'ISO', createFromTemplate: '템플릿에서 생성', template: '템플릿', templateName: '템플릿 이름', convertToTemplate: '템플릿으로 변환', sourceVM: '원본 VM', templateSize: '템플릿 크기', deleteTemplateConfirm: '템플릿 {0}을(를) 삭제합니다. 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?', orphanClean: '고아 데이터 정리', orphanScan: '다시 검색', orphanCleanHelper: '가상 머신, 스냅샷 또는 등록된 템플릿에서 참조되지 않는 후보 파일만 표시됩니다. 정리하기 전에 더 이상 사용되지 않는지 확인하세요. 이 작업은 되돌릴 수 없습니다.', orphanSelected: '{0}개 파일 선택됨, 총 {1}', orphanSize: '크기', orphanCleanConfirm: '선택한 {0}개 파일({1})을 정리하시겠습니까? 이 작업은 되돌릴 수 없습니다.', orphanCleanSuccess: '{0}개 파일을 정리하여 {1}을(를) 확보했습니다.', orphanType: { orphan_domain_disk: '고아 디스크', orphan_snapshot: '고아 스냅샷', partial_file: '미완료 파일', }, disks: '디스크 관리', resizeDisk: '확장', diskTarget: '장치', diskCapacityAfterResize: '확장 후 전체 용량', diskResizeHelper: '확장은 가상 디스크 용량만 늘립니다. 완료 후 가상 머신 내에서 파티션과 파일 시스템을 확장해야 합니다.', diskResizeLimit: '가상 머신이 종료된 상태에서 스냅샷이나 백킹 체인이 없는 독립적인 쓰기 가능한 qcow2 디스크만 확장할 수 있습니다. 축소는 지원하지 않습니다.', diskResizeReason: { referenceCheck: '가상 디스크 참조를 확인할 수 없어 확장할 수 없습니다. 다른 가상 머신의 디스크 상태를 확인하세요.', referenced: '다른 가상 머신 또는 장치가 이 가상 디스크를 사용 중이므로 현재 확장할 수 없습니다.', running: '가상 머신을 종료한 후 디스크를 확장하세요.', saved: '가상 머신을 재개하고 정상 종료한 후 확장하세요.', snapshots: '스냅샷 복원에 영향을 줄 수 있어 스냅샷이 있으면 확장할 수 없습니다.', backing: '다른 이미지에 의존하는 디스크는 아직 확장을 지원하지 않습니다.', shared: '공유로 설정된 디스크는 다른 사용자에게 영향을 줄 수 있어 확장할 수 없습니다.', unsupported: '디스크 형식, 위치 또는 접근 권한이 확장을 지원하지 않습니다.', unavailable: '디스크 상태를 확인할 수 없습니다. 확인 후 새로 고치세요.', }, diskSize: '디스크 용량', isoHelper: '여러 ISO를 연결할 수 있습니다. 운영 체제 설치 이미지를 먼저 선택한 다음 VirtIO 등의 드라이버 이미지를 선택하세요. 각 이미지는 별도의 CD-ROM 드라이브를 사용합니다.', windowsDriverHelper: 'Windows 이미지에 VirtIO 네트워크 드라이버(NetKVM)가 포함되어 있지 않을 수 있습니다. VirtIO 드라이버 ISO도 마운트하고 Windows에서 드라이버를 설치하세요. 이미 포함된 경우에는 무시해도 됩니다.', windowsDiskDriverHelper: 'VirtIO 디스크를 사용하면 디스크 드라이버(viostor)도 로드해야 할 수 있습니다. 그렇지 않으면 Windows 설치 프로그램이 디스크를 인식하지 못할 수 있습니다.', osType: '운영 체제 유형', osOther: '기타', diskBus: '디스크 버스', diskPath: '디스크 경로', isoPath: 'ISO 경로', storagePool: '스토리지 풀', networkHelper: '네트워크는 가상 머신에 네트워크 연결을 제공합니다.', storagePoolHelper: '스토리지 풀은 가상 머신 디스크와 ISO 파일을 저장합니다.', network: '네트워크', bridgeName: '브리지 이름', sourceInterface: '호스트 네트워크 인터페이스', macvtapNetworkHelper: 'VM을 LAN의 독립된 컴퓨터처럼 사용할 수 있습니다. 호스트의 기존 IP 설정을 바꾸지 않고 다른 장치에서 VM의 IP로 직접 접근할 수 있습니다. 참고: 기본적으로 이 연결을 통해 호스트와 VM은 직접 통신할 수 없습니다.', macvtapInterfaceHelper: '대상 LAN에 연결된 유선 인터페이스를 선택하세요. 호스트와 공유할 수 있습니다. VM의 IP는 LAN에서 할당하거나 VM 내부에서 직접 설정합니다. 네트워크에서 이 인터페이스를 통한 여러 장치의 연결(여러 MAC 주소)을 허용해야 합니다.', natNetworkHelper: '인터넷 접속만 필요하거나 소수의 서비스를 공개하는 VM에 적합합니다. VM은 호스트를 통해 인터넷에 연결됩니다. 다른 장치에서 VM 서비스에 접근하려면 일반적으로 포트 전달을 별도로 설정해야 합니다.', bridgeNetworkHelper: 'VM을 네트워크 스위치에 연결된 독립된 컴퓨터처럼 사용할 수 있습니다. 호스트와 LAN의 다른 장치에서 직접 접근할 수 있습니다. 먼저 호스트에 브리지를 설정해야 합니다.', bridgeNameHelper: '설정된 브리지(예: br0)를 선택하세요. 선택 항목이 없으면 먼저 호스트에 브리지를 만드세요. 물리 인터페이스와 Docker/libvirt가 관리하는 브리지는 선택할 수 없습니다.', natCIDRHelper: 'CIDR, 게이트웨이, DHCP 주소 범위는 새 NAT 가상 네트워크에 사용됩니다.', networkCIDR: '네트워크 CIDR', gateway: '게이트웨이', dhcpStart: 'DHCP 시작 주소', dhcpEnd: 'DHCP 종료 주소', bootOrder: '부팅 순서', bootDiskFirst: '디스크 우선 (HD → CD-ROM)', bootIsoFirst: 'ISO 우선 (CD-ROM → HD)', bootOrderConfirm: '부팅 순서를 {0}(으)로 변경하시겠습니까? 다음 시작 시 가상 머신은 현재 연결된 부팅 가능한 장치를 이 순서대로 시도합니다.', startAfterCreate: '생성 후 시작', autoStart: '자동 시작', resourceAutoStart: '자동 시작', capacity: '용량', available: '사용 가능', vmCount: '연결된 VM', usedIPs: '사용된 IP', usedIPsUnavailable: '아직 조회를 지원하지 않음', monitor: '모니터링', monitorNotReady: '가상 머신이 실행 중이 아니어서 모니터링 데이터를 사용할 수 없습니다.', monitorLoadFailed: 'VM 모니터링 데이터를 가져오지 못했습니다.', monitorLoadFailedWithReason: 'VM 모니터링 데이터를 가져오지 못했습니다: {0}', rename: '이름 변경', newName: '새 이름', renameHelper: '새 VM 이름을 입력하세요. 이름을 변경하기 전에 VM을 종료해야 합니다.', renameConfirm: '가상 머신 [{0}]의 이름을 [{1}](으)로 변경하시겠습니까?', renameRunningHelper: '이름을 변경하기 전에 가상 머신을 종료하세요.', cpuUsage: 'CPU 사용률', memoryUsage: '메모리 사용률', diskIO: '디스크 I/O', networkIO: '네트워크 I/O', diskReadWrite: '디스크 읽기/쓰기', networkRxTx: '네트워크 수신/송신', rx: 'RX', tx: 'TX', console: '콘솔', consoleShortcutKeys: '단축키', consoleCustomKeys: '사용자 지정 키 조합', consoleMainKey: '기본 키 선택', consoleSendKeys: '전송', consoleNotReady: 'VNC 콘솔을 사용할 수 없습니다. VM을 시작하고 VNC 그래픽 구성을 확인하세요.', consoleDisconnected: 'VNC 콘솔 연결이 끊어졌습니다.', consoleConnectFailed: 'VNC 콘솔 연결에 실패했습니다. 콘솔 프록시 서비스를 확인하세요.', consoleCredentialsRequired: 'VNC 콘솔에 인증 정보가 필요합니다. 백엔드 프록시 구성을 확인하세요.', snapshot: '스냅샷', createSnapshot: '스냅샷 생성', recoverSnapshot: '스냅샷 복구', snapshotSize: '사용량', currentSnapshot: '현재', snapshotEmpty: '스냅샷 없음', snapshotHelper: '스냅샷은 현재 VM 상태를 복원 지점으로 저장합니다. 이후 데이터 변경은 원본 디스크를 변경하지 않고 델타 파일에 기록됩니다. 스냅샷을 복구하면 VM이 해당 시점의 상태로 돌아갑니다.', snapshotOperationHelper: '현재 스냅샷은 삭제할 수 없습니다. 가상 머신이 종료된 경우에만 스냅샷을 복구할 수 있습니다.', snapshotRecoverConfirm: '가상 머신 [{1}]을(를) 스냅샷 [{0}](으)로 복구하시겠습니까? VM 디스크가 스냅샷 시점의 상태로 복원됩니다.', interface: '네트워크 인터페이스', device: '장치', path: '경로', start: '시작', shutdown: '종료', reboot: '재부팅', destroy: '강제 중지', suspend: '일시 중지', resume: '재개', operateConfirm: '{0} 가상 머신 [{1}]을(를) 실행하시겠습니까?', forceDelete: '강제 삭제', forceDeleteHelper: '강제 삭제는 VM 삭제 오류를 무시하고 패널 메타데이터를 삭제하며 리소스 사용을 해제합니다.', deleteNameHelper: '" 입력 시 이 가상 머신 삭제', isoSource: 'ISO 출처', downloadFromServer: '원격 다운로드', isoTargetDir: 'ISO 대상 경로', isoTargetDirHelper: '로컬 업로드 또는 서버 다운로드 ISO가 이 디렉터리에 저장됩니다.', addingIsoRecord: 'ISO 레코드를 추가하는 중', transferInProgress: 'ISO 전송이 진행 중입니다. 이 패널이나 페이지를 닫지 마세요.', isoSize: 'ISO 크기', deleteIsoConfirm: '이 삭제 작업은 되돌릴 수 없습니다. 계속하시겠습니까?', deleteSourceFile: '원본 파일 삭제', deleteSourceFileHelper: '선택하면 이 ISO 레코드가 참조하는 원본 파일도 삭제되며 복구할 수 없습니다.', dir: '로컬 디렉터리', }, cluster: { cluster: '애플리케이션 고가용성', name: '클러스터 이름', addCluster: '클러스터 추가', installNode: '노드 설치', master: '마스터 노드', slave: '슬레이브 노드', replicaStatus: '마스터-슬레이브 상태', unhealthyDeleteError: '설치 노드 상태가 비정상입니다. 노드 목록을 확인한 후 다시 시도하세요!', replicaStatusError: '상태 획득이 비정상입니다. 마스터 노드를 확인하세요.', masterHostError: '마스터 노드의 IP는 127.0.0.1이 될 수 없습니다', }, }, template: { create: '템플릿 생성', edit: '템플릿 편집', name: '템플릿 이름', type: '템플릿 유형', single: '단일 파일', multi: '다중 파일(zip)', content: '템플릿 내용', variables: '변수 정의', remark: '비고', filePath: '파일 경로', upload: 'zip 업로드', preview: '미리보기', previewEmpty: '템플릿을 선택하면 실시간으로 미리볼 수 있습니다', generate: '산출물 생성', outputName: '산출물 이름', outputList: '산출물 목록', outputCreate: '산출물 생성', confirmDelete: '이 템플릿을 삭제하시겠습니까? 연관된 산출물도 함께 삭제됩니다', confirmDeleteOutput: '이 산출물을 삭제하시겠습니까?', variableKey: '변수명', variableLabel: '레이블', variableType: '유형', variableDefault: '기본값', variableOptions: '옵션(쉼표로 구분)', variableRequired: '필수', varTypeText: '한 줄 텍스트', varTypeTextHelper: '일반 텍스트 입력란', varTypeTextarea: '여러 줄 텍스트', varTypeTextareaHelper: '문단이나 긴 텍스트에 적합', varTypeNumber: '숫자', varTypeNumberHelper: '숫자만 입력 가능', varTypeSelect: '드롭다운 선택', varTypeSelectHelper: '사전 설정된 옵션에서 선택, 옵션 입력 필요', varTypeColor: '색상', varTypeColorHelper: '색상 선택기', autoDetectHelper: '내용에서 이중 중괄호로 감싸진 변수를 자동 인식하여 변수 정의 테이블에 추가합니다', selectTemplate: '템플릿 선택', fillVariables: '변수 입력', noVariables: '이 템플릿에는 정의된 변수가 없습니다', outputSuccess: '산출물이 성공적으로 생성되었습니다', importButton: '템플릿에서 가져오기', }, }; export default { ...getFuLocaleMessage('ko'), ...message, };