# 기본 오류
ErrInvalidParams: '잘못된 요청: {{ .detail }}'
ErrTokenParse: '토큰 오류: {{ .detail }}'
ErrInitialPassword: '원래 비밀번호가 틀립니다'
ErrInternalServer: '서버 오류: {{ .detail }}'
ErrInternalServerKey: "서버 내부 오류:"
ErrRecordExist: '레코드가 이미 있습니다'
ErrRecordNotFound: '레코드를 찾을 수 없습니다'
ErrStructTransform: '형 변환 실패: {{ .detail }}'
ErrNotSupportType: '지원하지 않는 타입: {{ .name }}'
ErrDemoEnvironment: '데모 환경에서는 불가'
ErrCmdTimeout: '명령이 시간 초과했습니다'
ErrPortInUsed: "{{ .name }} 포트가 이미 사용 중입니다"
ErrFileNotFound: "{{ .name }} 파일이 존재하지 않습니다"
ErrReqFailed: "{{.name}} 요청 실패: {{ .err }}"

# 요청 및 보안 입구
ErrNoSuchHost: "요청한 서버를 찾을 수 없습니다 {{ .err }}"
ErrHttpReqNotFound: "요청한 리소스를 찾을 수 없습니다 {{ .err }}"
ErrHttpReqFailed: "요청 실패 {{ .err }}"
ErrHttpReqTimeOut: "요청 시간이 초과되었습니다 {{ .err }}"
ErrCreateHttpClient: "요청 생성 실패 {{ .err }}"
ErrProxy: '요청 실패: {{ .detail }}'
ErrProxySetting: "프록시 서버 정보를 사용할 수 없음 {{ .err }}, 확인 후 다시 시도하세요"
ErrEntrance: "보안 정보 오류입니다. 확인 후 다시 시도하십시오"
ErrEntranceFormat: "보안 입구 {{ .name }}은(는) 현재 지원되지 않습니다. 확인 후 다시 시도해 주세요"

# 로그인 및 보안
ErrNotLogin: '로그인하지 않음: {{ .detail }}'
ErrSessionDataNotFound: "현재 세션이 만료되었습니다"
ErrSessionDataFormat: "현재 세션 데이터 형식이 비정상입니다"
ErrPasswordExpired: '비밀번호 만료: {{ .detail }}'
ErrLoginLocked: "실패한 시도가 너무 많습니다. 로그인이 5분 동안 일시적으로 잠겼습니다."
ErrApiConfigStatusInvalid: 'API 사용 중지: {{ .detail }}'
ErrApiConfigKeyInvalid: 'API 키가 잘못됨: {{ .detail }}'
ErrApiConfigIPInvalid: 'IP 허용되지 않음: {{ .detail }}'
ErrApiConfigDisable: 'API 접근 금지: {{ .detail }}'
ErrApiConfigKeyTimeInvalid: '타임스탬프 오류: {{ .detail }}'
ErrPasskeyDisabled: "Passkey를 사용하려면 HTTPS를 활성화해야 합니다"
ErrPasskeyNotConfigured: "Passkey가 구성되지 않았습니다"
ErrPasskeyLimit: "Passkey 개수가 한도에 도달했습니다(최대 5개)"
ErrPasskeySession: "Passkey 세션이 만료되었거나 유효하지 않습니다"
ErrPasskeyDuplicate: "Passkey가 이미 존재합니다"
ErrPasskeyVerify: "Passkey 검증에 실패했습니다"
ErrOIDCNotEnabled: "OIDC 인증이 활성화되지 않았습니다"
ErrOIDCConfigInvalid: "OIDC 설정이 올바르지 않습니다"
ErrOIDCConfigChanged: "OIDC 설정이 변경되었습니다. 인증을 다시 시작하세요"
ErrOIDCDiscoveryFailed: "OIDC Provider 설정을 검색하지 못했습니다"
ErrOIDCIssuerMismatch: "OIDC Issuer가 설정된 Issuer와 일치하지 않습니다"
ErrOIDCUnsupportedPKCE: "OIDC Provider가 필요한 PKCE 방식을 지원하지 않습니다"
ErrOIDCUnsupportedSigningAlgorithm: "OIDC 서명 알고리즘이 지원되지 않습니다"
ErrOIDCInvalidState: "OIDC 로그인 상태가 올바르지 않거나 이미 사용되었습니다"
ErrOIDCLoginExpired: "OIDC 로그인 요청이 만료되었습니다. 다시 시도하세요"
ErrOIDCTokenExchange: "OIDC 인증 코드 교환에 실패했습니다"
ErrOIDCTokenValidation: "OIDC Token 검증에 실패했습니다"
ErrOIDCUserInfoValidation: "OIDC 사용자 정보 검증에 실패했습니다"
ErrOIDCNameClaimMissing: "설정된 OIDC 사용자 이름 Claim이 없거나 올바르지 않습니다"
ErrOIDCNameConflictLocal: "OIDC 사용자 이름이 로컬 사용자와 충돌합니다"
ErrOIDCNameConflictLDAP: "OIDC 사용자 이름이 LDAP 사용자와 충돌합니다"
ErrOIDCNameConflictOIDC: "OIDC 사용자 이름이 다른 OIDC ID와 충돌합니다"
ErrOIDCDefaultRoleInvalid: "OIDC에 설정된 기본 역할을 사용할 수 없습니다"
ErrOIDCPrivateAddressDenied: "OIDC Endpoint 주소가 네트워크 보안 정책에서 허용되지 않습니다"
ErrOIDCTLSValidation: "OIDC TLS 인증서 검증에 실패했습니다"
ErrOIDCTestExpired: "OIDC 브라우저 테스트가 만료되었습니다. 다시 실행하세요"
ErrOIDCLocalCredentialsReadonly: "OIDC 사용자 이름과 비밀번호는 ID Provider에서 관리하므로 로컬에서 변경할 수 없습니다."
ErrOIDCPasswordExpirationUnsupported: "OIDC 사용자는 로컬 비밀번호 만료 정책을 사용하지 않습니다."
ErrOIDCInternal: "OIDC 인증 중 내부 오류가 발생했습니다. 잠시 후 다시 시도하세요."

# 사용자 및 권한
ErrNoSuchUser: "사용자 정보를 찾을 수 없습니다. 확인 후 다시 시도하세요"
ErrToMaster: "이 사용자는 마스터 노드에서 이 작업을 수행할 권한이 없습니다. 확인 후 다시 시도하세요"
ErrToNode: "이 사용자는 이 노드에서 이 작업을 수행할 권한이 없습니다. 확인 후 다시 시도하세요"
ErrRBAC: "사용자 권한이 부족하여 이 작업을 수행할 수 없습니다. 확인 후 다시 시도하세요"
ErrNoneNode: "이 사용자에게는 노드 권한이 없습니다. 관리자에게 문의하거나 확인 후 다시 시도하세요"
ErrOnlySuperAdmin: "슈퍼 관리자만 이 기능을 사용할 수 있습니다"
ErrRolePresetCannotDelete: "시스템 기본 역할은 삭제할 수 없습니다"
ErrRolePresetCannotUpdate: "시스템 기본 역할은 수정할 수 없습니다"
ErrRoleBoundToUser: "이 역할은 이미 사용자에게 연결되어 있어 삭제할 수 없습니다"
ErrRolePresetCannotBind: "시스템 기본 역할은 사용자에게 할당할 수 없습니다"
ErrNodeAdminMasterForbidden: "마스터 노드에는 노드 관리자 권한을 추가할 수 없습니다"
ErrSuperAdminCannotDelete: "슈퍼 관리자 사용자는 삭제할 수 없습니다"
ErrGroupIsDefault: "기본 그룹은 삭제할 수 없습니다"
ErrGroupIsInUse: "그룹이 사용 중이므로 삭제할 수 없습니다."

# 라이선스
LicenseCheck: '라이선스 사용 가능 여부 확인'
ErrLicenseInUsed: '해당 라이선스가 이미 연결되었습니다. 확인 후 다시 시도하세요'
ErrLicenseExpired: '해당 라이선스가 만료되었습니다. 확인 후 다시 시도하세요'
ErrLicense: "라이선스 형식이 잘못되었습니다. 다시 확인하고 시도해 주세요"
ErrLicenseCheck: "라이선스 검증 실패. 다시 확인하고 시도해 주세요"
ErrXpackVersion: "라이선스 검증 실패, 이 라이선스는 버전 제한이 있습니다. 성공적으로 가져올 수 없습니다. 다시 확인하고 시도해 주세요"
ErrLicenseSave: "라이선스 정보 저장 실패, 오류 {{ .err }}, 다시 시도해 주세요"
ErrLicenseSync: "라이선스 정보 동기화 실패, 데이터베이스에서 라이선스 정보를 찾을 수 없습니다"
ErrLicenseExist: "해당 라이선스 기록이 이미 존재합니다. 라이선스 페이지에서 직접 노드 바인딩이 가능합니다."
ErrXpackNotFound: "이 기능은 Business Edition에서 사용할 수 있습니다. 패널 설정 > 라이선스에서 라이선스를 가져오세요"
ErrXpackExceptional: "이 기능은 Business Edition에서 사용할 수 있습니다. 패널 설정 > 라이선스에서 라이선스 상태를 동기화하세요"
ErrXpackLost: "라이선스 재시도 한도에 도달했습니다. 패널 설정 > 라이선스에서 수동 동기화를 실행하세요"
ErrEnterpriseLicenseRequired: "Enterprise Edition 라이선스를 가져오지 않았습니다. 먼저 라이선스를 가져오세요"
ErrDeviceLost: "라이센스 검증에 필요한 파일이 누락되었습니다. 확인 후 다시 시도해 주세요"
ErrDeviceErr: "현재 환경이 라이선스 가져오기 환경과 일치하지 않습니다. 라이선스를 편집하고 다시 가져오십시오"
ErrXpackTimeout: "요청 시간 초과, 네트워크 연결이 불안정할 수 있습니다. 나중에 다시 시도해 주세요"
ErrUnbindMaster: "노드 관리 내에 노드가 존재함을 감지하였습니다. 현재 라이선스를 해제할 수 없습니다. 먼저 제거 후 다시 시도해 주세요"
ErrFreeNodeLimit: "추가할 수 있는 노드 수가 한도에 도달했습니다. 구매 후 다시 시도해 주세요."
ErrNodeBound: "이 라이선스는 다른 노드에 바인딩되어 있습니다. 다시 확인하고 시도해 주세요"
ErrNodeBoundDelete: "이 라이센스는 바인딩되어 있으며 삭제 작업을 지원하지 않습니다. 확인 후 다시 시도해 주세요"
ErrNodeBoundLimit: "현재 무료 노드가 한도에 도달했습니다. 확인 후 다시 시도해 주세요"
ErrLicenseFree: "라이선스가 노드에 정상적으로 바인딩된 경우에만 무료 노드를 사용할 수 있습니다. 확인 후 다시 시도하세요"
ErrLicenseUnbind: "이 라이선스에는 아직 커뮤니티 에디션 노드가 연결되어 있습니다. 패널 설정 > 라이선스에서 연결을 해제한 뒤 다시 시도해 주세요"
ErrLicenseBindCount: "새 라이선스의 무료 노드 수가 현재 연결된 커뮤니티 에디션 노드 수보다 적습니다. 확인 후 다시 시도해 주세요"
ErrNoSuchNode: "노드 정보를 찾을 수 없습니다. 다시 확인하고 시도해 주세요"
ErrNodeUnbind: "이 노드가 라이선스 바인딩 범위에 있지 않음을 감지하였습니다. 다시 확인하고 시도해 주세요"
ErrNodeBind: "이 노드가 이미 라이선스에 바인딩되어 있음을 감지하였습니다. 다시 확인하고 시도해 주세요"
ErrNodeLocalRollback: "마스터 노드는 직접 롤백을 지원하지 않습니다. '1pctl restore'를 수동으로 실행해 롤백하세요"
ErrIntlLicense: "현재 버전에서는 국제판 라이선스 가져오기를 아직 지원하지 않습니다. 곧 제공될 예정입니다"
InvalidRequestBodyType: "요청 본문 형식이 잘못되었습니다. 내용이 형식 요구 사항을 충족하는지 확인한 후 다시 시도하세요"
InvalidLicenseCodeType: "제공된 라이선스 코드 형식이 잘못되었습니다. 확인 후 다시 시도하세요"
LicenseNotFoundType: "라이선스가 존재하지 않습니다. 시스템에서 제공된 라이선스와 일치하는 기록을 찾을 수 없습니다. 확인 후 다시 시도하세요"
LicenseRevokedType: "요청한 라이선스는 폐기되어 사용할 수 없습니다. 확인 후 다시 시도하세요"
LicenseExpiredType: "라이선스가 만료되었습니다. 갱신하거나 패널 설정 - 라이선스에서 다시 가져온 후 시도하세요"
LicenseProductMismatchType: "라이선스가 요청한 제품 또는 서비스와 일치하지 않습니다"
InvalidAssigneeType: "라이선스 할당 대상 사용자 또는 장치 정보가 유효하지 않습니다. 확인 후 다시 시도하세요"
LicenseUsageNotFoundType: "사용 기록이 없습니다. 이 라이선스는 아직 활성화되거나 사용되지 않았습니다. 확인 후 다시 시도하세요"
LicenseUsageLimitExceededType: "이 라이선스는 이미 다른 노드에 연결되었습니다. 확인 후 다시 시도하세요"

# 노드 및 클러스터
MasterNode: "마스터 노드"
Node: "노드"
ErrLocalDelete: "로컬 노드는 삭제할 수 없습니다"
ErrMasterDelete: "마스터 노드를 삭제할 수 없습니다. 슬레이브 노드를 먼저 삭제하세요."
ClusterNameIsExist: "클러스터 이름이 이미 존재합니다."
AppStatusUnHealthy: "애플리케이션 상태 획득이 비정상입니다. 노드 목록에서 설치 노드 상태를 확인하세요."
MasterNodePortNotAvailable: "노드 {{ .name }} 포트 {{ .port }} 연결성 검증에 실패했습니다. 방화벽/보안 그룹 설정 및 마스터 노드 상태를 확인하세요."
ClusterMasterNotExist: "클러스터의 마스터 노드가 연결이 끊어졌습니다. 자식 노드를 삭제하세요."

# 가상 머신
ErrVMNotFound: "가상 머신이 존재하지 않습니다"
ErrVMAlreadyExists: "가상 머신이 이미 존재합니다"
ErrVMImageAlreadyExists: "가상 머신 이미지 파일이 이미 존재합니다: {{ .detail }}"
ErrVMStoragePathInUse: "스토리지 풀 경로가 이미 [{{ .name }}]에서 사용 중입니다"
ErrVMHelperNotFound: "1panel-kvm을 찾을 수 없습니다"
ErrVMBridgeManaged: "브리지 이름이 이미 libvirt 또는 Docker에서 관리되고 있습니다"
ErrVMNetworkInUse: "네트워크가 사용 중이므로 삭제할 수 없습니다"
ErrVMStorageInUse: "스토리지 풀이 사용 중이므로 삭제할 수 없습니다"
ErrVMStorageNameCannotChange: "스토리지 풀 이름은 변경할 수 없습니다"
ErrVMStoragePathCannotChange: "스토리지 풀 경로는 변경할 수 없습니다"
ErrVMRunning: "가상 머신이 실행 중입니다"
ErrVMLibvirtConnect: "libvirt 연결 실패: {{ .detail }}"
ErrVMPermission: "가상 머신 작업 권한이 없습니다: {{ .detail }}"
ErrVMNetworkNotFound: "가상 머신 네트워크가 존재하지 않습니다: {{ .detail }}"
ErrVMInvalidPath: "가상 머신 경로가 유효하지 않습니다: {{ .detail }}"
ErrVMInvalidInput: "가상 머신 매개변수가 유효하지 않습니다: {{ .detail }}"
ErrVMCommandFailed: "가상 머신 명령 실행 실패: {{ .err }}"
VMCreateTask: "가상 머신 [{{ .name }}] 생성"
VMCreateFromTemplateTask: "템플릿에서 가상 머신 [{{ .name }}] 생성"
VMUpdateTask: "가상 머신 [{{ .name }}] 업데이트"
VMRenameTask: "가상 머신 [{{ .name }}]을(를) [{{ .newName }}](으)로 이름 변경"
VMDeleteTask: "가상 머신 [{{ .name }}] 삭제"
VMTemplateCreateTask: "가상 머신 [{{ .name }}]을(를) 템플릿 [{{ .template }}](으)로 저장"
VMTemplateDeleteTask: "가상 머신 템플릿 [{{ .name }}] 삭제"
VMForceDeleteMetadataOnly: "1panel-kvm을 찾을 수 없어 가상 머신 [{{ .name }}] 메타데이터만 강제 삭제합니다"
VMForceDeleteMetadataAfterLibvirtFailed: "libvirt에서 가상 머신 [{{ .name }}] 삭제 실패, 메타데이터 강제 삭제: {{ .err }}"
VMForceDeleteDiskFailed: "가상 머신 디스크 파일 [{{ .path }}] 강제 삭제 실패: {{ .err }}"
VMForceDeleteDiskSuccess: "가상 머신 디스크 파일 [{{ .path }}]을(를) 강제 삭제했습니다"
VMSnapshotCreateTask: "가상 머신 [{{ .vm }}] 스냅샷 [{{ .snapshot }}] 생성"
VMSnapshotCreateStep: "가상 머신 스냅샷 [{{ .snapshot }}] 생성"
VMSnapshotRecoverTask: "가상 머신 [{{ .vm }}] 스냅샷 [{{ .snapshot }}] 복구"
VMSnapshotRecoverStep: "가상 머신 스냅샷 [{{ .snapshot }}] 복구"
VMSnapshotDeleteTask: "가상 머신 [{{ .vm }}] 스냅샷 [{{ .snapshot }}] 삭제"
VMSnapshotDeleteStep: "가상 머신 스냅샷 [{{ .snapshot }}] 삭제"

# 앱
CustomAppStoreFileValid: "앱 스토어 패키지는 .tar.gz 형식이어야 합니다"
AppBackup: '애플리케이션 백업'
AppBackupPush: '애플리케이션 백업 파일 {{.file}}을(를) 노드 {{ .name }}(으)로 전송'
ErrSourceTargetSame: '소스 노드와 대상 노드는 동일할 수 없습니다'
AppInstall: '노드 {{ .targetNode }}에 애플리케이션 {{ .name }} 설치'
AppInstallCheck: '애플리케이션 설치 환경 확인'

# 백업
ErrBackupInUsed: '백업 계정이 예약에 사용 중'
ErrBackupCheck: '연결 테스트 실패: {{ .err }}'
ErrBackupLocal: "로컬 서버 백업 계정은 이 작업을 지원하지 않습니다"
ErrBackupPublic: "이 백업 계정이 공개된 것으로 감지되지 않았습니다. 다시 확인하십시오"
ErrOSSConn: "최신 버전을 가져올 수 없습니다. 외부 네트워크 연결을 확인하십시오."
MvBackup: "데이터를 백업 디렉터리로 이동"

# 알림
ErrAlertSync: "경고 정보 동기화 오류, 다시 확인하고 시도해 주세요"

# AI 게이트웨이
ErrAIProxyUserGroupIsDefault: "기본 사용자 그룹은 삭제할 수 없습니다"
ErrAIProxyUserGroupInUse: "사용자 그룹이 사용 중이므로 삭제할 수 없습니다."
ErrAIProxyUserGroupExists: "사용자 그룹 이름이 이미 존재합니다."
ErrAIProxyBackendAccountExists: "이 모델 계정은 이미 AI 게이트웨이 계정 풀에 가져왔습니다."
ErrAIProxyModelGroupInUse: "모델 그룹이 사용 중이므로 삭제할 수 없습니다."
ErrAIProxyModelGroupExists: "모델 그룹 이름이 이미 존재합니다."
ErrAIProxySensitiveGroupInUse: "민감 단어 그룹이 사용 중이므로 삭제할 수 없습니다."
ErrAIProxySensitiveGroupExists: "민감 단어 그룹 이름이 이미 존재합니다."
AIProxyContentPolicyViolation: "죄송하지만 이 요청은 처리할 수 없습니다. 콘텐츠 정책을 준수하지 않을 수 있으므로 내용을 수정한 후 다시 시도해 주세요."
AIBenchmarkRun: "AI 벤치마크 실행"

# 작업
TaskStart: "{{ .name }} 작업 시작 [START]"
TaskEnd: "{{ .name }} 작업 종료 [COMPLETED]"
TaskFailed: "{{ .name }} 작업 실패"
TaskTimeout: "{{ .name }} 시간 초과"
TaskSuccess: "{{ .name }} 작업 성공"
TaskRetry: "제 {{ .name }} 차 재시도 시작"
SubTaskSuccess: "{{ .name }} 성공"
SubTaskFailed: "{{ .name }} 실패: {{ .err }}"
TaskInstall: "설치"
TaskUpgrade: "업그레이드"
TaskSync: '동기화'
TaskSyncForNode: "노드 데이터 동기화"
TaskBackup: "백업"
TaskPush: "전송"
TaskRsync: "동기화"
SuccessStatus: "{{ .name }} 성공"
FailedStatus: "{{ .name }} 실패 {{ .err }}"
Start: "시작"
SubTask: "서브 작업"
Skip: "오류 무시하고 계속..."
Success: "성공"

# AI 게이트웨이 스마트 라우팅 작업
AIProxySmartRouteCreateTask: "AI 게이트웨이 스마트 라우팅 샘플 생성"
AIProxySmartRouteCreateSubTask: "샘플 생성 및 벡터 생성"
AIProxySmartRouteCreateStart: "샘플 생성을 시작합니다. 총 {{ .total }}개"
AIProxySmartRouteCreateFailed: "[{{ .current }}/{{ .total }}] 생성 실패: type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteCreateSuccess: "[{{ .current }}/{{ .total }}] 생성 성공: sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteCreateComplete: "생성 완료: 성공 {{ .success }}개, 실패 {{ .failed }}개"
AIProxySmartRouteCreateError: "샘플 생성 실패: {{ .failed }}개 실패, 마지막 오류"
AIProxySmartRouteRebuildTask: "AI 게이트웨이 스마트 라우팅 샘플 벡터 재구성"
AIProxySmartRouteRebuildSubTask: "샘플 벡터 재구성"
AIProxySmartRouteEmbeddingRequired: "Embedding 엔드포인트와 모델은 필수입니다"
AIProxySmartRouteRebuildStart: "샘플 벡터 재구성을 시작합니다. 총 {{ .total }}개"
AIProxySmartRouteRebuildFailed: "[{{ .current }}/{{ .total }}] 재구성 실패: sampleID={{ .id }} type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteRebuildSuccess: "[{{ .current }}/{{ .total }}] 재구성 성공: sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteRebuildComplete: "재구성 완료: 성공 {{ .success }}개, 실패 {{ .failed }}개"
AIProxySmartRouteRebuildError: "샘플 벡터 재구성 실패: {{ .failed }}개 실패, 마지막 오류"

# 에이전트 일괄 작업
BatchInstallAgent: "에이전트 일괄 설치"
DispatchAgentInstallTasks: "에이전트 설치 작업 배포"
BatchUpgradeAgent: "에이전트 일괄 업그레이드"
DispatchAgentUpgradeTasks: "에이전트 업그레이드 작업 배포"
BatchAgentInstallDispatchFailed: "{{ .node }} 노드에서 {{ .agentType }} 설치 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentInstallSubmitted: "{{ .node }} 노드에서 {{ .agentType }} 설치 작업을 배포했습니다!"
BatchAgentUpgradeDispatchFailed: "{{ .node }} 노드에서 {{ .agentType }} 업그레이드 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "{{ .node }} 노드 {{ .agent }}은(는) 이미 대상 버전이라 건너뜁니다"
BatchAgentUpgradeSubmitted: "{{ .node }} 노드에서 {{ .agent }} 업그레이드 작업을 배포했습니다!"
BatchAgentUpgradeFailed: "{{ .node }} 노드에서 {{ .agent }} 업그레이드 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchInstallAgentSkill: "Skill 일괄 배포"
DispatchAgentSkillInstallTasks: "Skill 설치 작업 배포"
BatchAgentSkillDispatchFailed: "{{ .node }} 노드에서 {{ .skill }}을(를) {{ .target }}에 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentNoAgentsFound: "{{ .node }} 노드에서 {{ .agentType }} 에이전트를 찾지 못해 건너뜁니다"
BatchAgentSkillSkipped: "{{ .node }} 노드 {{ .agent }} 건너뜀 Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "{{ .node }} 노드에서 {{ .skill }} 설치 작업을 {{ .agent }}에 배포했습니다!"
BatchAgentSkillInstallFailed: "{{ .node }} 노드에서 {{ .skill }} 설치 작업을 {{ .agent }}에 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "{{ .node }} 노드에서 {{ .agentType }} {{ .operate }} 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentOperateSkipped: "{{ .node }} 노드 {{ .agent }} 건너뜀 Message: {{ .msg }}"
BatchAgentOperateSubmitted: "{{ .node }} 노드에서 {{ .agent }} {{ .operate }} 작업을 배포했습니다!"
BatchAgentOperateFailed: "{{ .node }} 노드에서 {{ .agent }} {{ .operate }} 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchStartAgent: "에이전트 일괄 시작"
DispatchAgentStartTasks: "에이전트 시작 작업 배포"
BatchStopAgent: "에이전트 일괄 중지"
DispatchAgentStopTasks: "에이전트 중지 작업 배포"
BatchRestartAgent: "에이전트 일괄 재시작"
DispatchAgentRestartTasks: "에이전트 재시작 작업 배포"
BatchDeleteAgent: "에이전트 일괄 삭제"
DispatchAgentDeleteTasks: "에이전트 삭제 작업 배포"
AgentOperateStart: "시작"
AgentOperateStop: "중지"
AgentOperateRestart: "재시작"
AgentOperateDelete: "삭제"

# 앱 및 스킬 작업
PushAppInstallTaskToNode: "노드 [{{ .name }}]로 앱 설치 작업 전송"
AppInstallTask: "앱 설치 작업"
PushAppFailed: "앱 설치 작업 전송 실패"
SkillHubInstallTask: "스킬 설치 [{{ .name }}]"
SkillHubInstallToTarget: "스킬 [{{ .name }}]을 대상 [{{ .target }}]에 설치"

# 스크립트 라이브러리
ScriptLibrary: "스크립트 라이브러리"
RemoteScriptLibrary: "원격 스크립트 라이브러리"
ScriptSyncSkip: "현재 스크립트 라이브러리가 이미 최신 버전입니다"
DownloadData: "스크립트 라이브러리 파일 data.yaml 다운로드 중"
DownloadPackage: "스크립트 라이브러리 패키지 다운로드 중"
AnalyticCompletion: "분석 완료, 데이터베이스에 동기화 중..."

# 노드 동기화
SyncNode: "데이터를 노드 {{ .name }}(으)로 동기화"
LocalName: "'local' 이름은 시스템 로컬 식별 전용으로 사용됩니다"
SyncPackageData: "동기화 데이터 패키징"
SyncPackageEncrypt: "데이터 패키지 암호화"
SyncRequest: "노드 동기화 API 요청"
SyncFailedRetry: "노드 데이터 동기화 시간 초과 ({{ .index }}번째 시도), 재시도 중..."
SyncFailed: "동기화 실패, 노드 목록에서 수동 동기화를 실행하세요"
SyncSystemProxy: "시스템 프록시 설정"
SyncScripts: "스크립트 라이브러리"
SyncBackupAccounts: "백업 계정"
SyncAlertSetting: "알림 설정"
SyncCustomApp: "사용자 정의 앱"
SyncLanguage: "시스템 언어"
SyncEdition: "운영 지역"

# 노드 업그레이드
NodeUpgrade: "{{ .name }} 노드 업그레이드"
UpgradeCheck: "노드 업데이트 확인"
UpgradeCheckLocal: "로컬 노드는 일괄 업그레이드를 지원하지 않으므로 건너뜁니다..."
UpgradeCheckLatest: "이 노드는 이미 최신 버전입니다. 건너뜁니다..."
NewSSHClient: "SSH 연결 초기화"
BackupBeforeUpgrade: "업그레이드 전 데이터 백업"
UploadUpgradeFile: "업그레이드에 필요한 파일 전송"
RestartAfterUpgrade: "업그레이드 후 서비스 시작"
LoadAutoUpgradeNodesFailed: "자동 업그레이드 노드 로드 실패, 오류: {{ .err }}"
AutoUpgradeNodes: "자동 업그레이드 노드: {{ .nodes }}"
UpdateAutoUpgradeNodesStatusFailed: "자동 업그레이드 노드 상태 업데이트 실패, 오류: {{ .err }}"

# 노드 추가
MasterData: "마스터 노드 데이터"
LoadSftpClient: "SFTP 클라이언트 가져오기"
PackageMasterData: "마스터 노드 백업 패키지 생성"
UploadBackup: "백업 데이터 업로드"
TaskAddNode: "노드 추가"
LoadNodeArch: "노드 아키텍처 정보 가져오기"
LoadNodeArchDetail: "감지된 마스터 노드 아키텍처: {{ .local }}, 자식 노드 아키텍처: {{ .node }}"
LoadNodeUpgradeDetail: "v1 버전 기록 설치 디렉토리 사용: {{ .baseDir }}, 서비스 수신 포트: {{ .port }}"
SyncAgentBaseInfo: "노드 기본 데이터 동기화"
GenerateSSLInfo: "노드 SSL 정보 생성"
ConnInfoNotMatch: "연결 정보가 일치하지 않음"
MakeAgentPackage: "노드 설치 패키지 생성"
SendAgent: "노드 설치 패키지 배포"
StartService: "서비스 시작"
NoBackupNode: "현재 백업 노드가 비어 있습니다. 저장할 백업 노드를 선택한 후 다시 시도하십시오"

# 노드 파일 및 이미지 동기화
LocalNodeIpFailed: "마스터 노드 IP를 가져오지 못했습니다. 마스터 노드를 편집하여 IP 주소와 SSH 인증 정보를 추가하세요."
HandlePrivateKey: "노드 개인 키 처리"
HandlePublicKey: "노드 공개 키 처리"
ExchangeFile: "노드 {{ .source }}의 {{ .sourcePath }}에서 노드 {{ .dest }}:{{ .destPath }}(으)로 동기화 시작"
NodeFile: "노드 파일"
ImageSyncTaskName: "이미지 {{ .count }}개 동기화"
SSLSyncTaskName: "인증서 {{ .count }}개 동기화"
AppSyncTaskName: "애플리케이션 {{ .name }} 동기화"
SSLSyncToNode: "인증서 [{{ .cert }}]을(를) 노드 [{{ .node }}]에 전송"
ImageSyncSave: "이미지 {{ .image }} 저장"
ImageSyncSaveTags: "이미지 태그 {{ .tags }} 저장"
ImageSyncToNode: "이미지 {{ .image }}을(를) 노드 {{ .node }}에 동기화"
ImageSyncLoad: "이미지 {{ .image }}을(를) 노드 {{ .node }}에 로드"
ImageSyncClean: "이미지 {{ .image }}의 임시 파일 정리"
ImageSyncNoTag: "이미지 {{ .image }}에 태그가 없어 이미지 ID로 저장합니다"
ImageSyncFrontendTagsIgnored: "소스 노드의 이미지 {{ .image }}에서 태그를 찾지 못해 프론트엔드 태그를 무시했습니다."
ImageSyncHandlePrivateKey: "이미지 동기화 노드 개인 키 처리"
ImageSyncHandlePublicKey: "이미지 동기화 노드 공개 키 처리"
ImageSyncTransfer: "이미지 임시 파일 전송 시작: {{ .source }}:{{ .sourcePath }} -> {{ .dest }}:{{ .destPath }}"

# 명령줄
SudoHelper: "{{ .cmd }} 명령을 사용하거나 root 사용자로 전환하세요."
UsernameNeed: "Enterprise 버전은 --username을 지정해야 합니다"
DBConnErr: "오류: 데이터베이스 연결 초기화 실패 {{ .err }}"
SystemVersion: "버전: "
SystemMode: "모드: "

# 명령줄 - 앱
AppVersion: "앱 버전"
AppCommands: "앱 관련 명령어"
AppInit: "앱 초기화"
AppKeyVal: "앱 키 (영어만 지원)"
AppCreateFileErr: "파일 {{ .name }} 생성 실패 {{ .err }}"
AppCreateDirErr: "폴더 {{ .name }} 생성 실패 {{ .err }}"
AppMissKey: "앱 키가 없습니다. -k 옵션으로 지정하세요."
AppMissVersion: "앱 버전이 없습니다. -v 옵션으로 지정하세요."
AppVersionExist: "버전이 이미 존재합니다"
AppCreateSuccessful: "생성 성공"
AppWriteErr: "파일 {{ .name }} 쓰기 실패 {{ .err }}"

# 명령줄 - 수신 IP
ListenIPCommands: "IP 변경"
ListenIPv4: "IPv4 에서 수신 대기"
ListenIPv6: "IPv6 에서 수신 대기"
ListenChangeSuccessful: "변경 성공 현재 {{ .value }}에서 수신 대기 중입니다."

# 명령줄 - 재설정
ResetCommands: "시스템 정보 초기화"
ResetMFA: "1Panel 이중 인증 취소"
ResetHttps: "1Panel HTTPS 로그인 취소"
ResetEntrance: "1Panel 보안 입구 취소"
ResetIPs: "1Panel 허용 IP 제한 취소"
ResetDomain: "1Panel 도메인 바인딩 취소"
ResetPasskey: "1Panel 패스키 초기화"

# 명령줄 - 사용자
UserList: "1Panel 사용자 목록 가져오기"
UserTableName: "이름"
UserTableMFAStatus: "MFA 상태"
UserTableSuperAdmin: "슈퍼 관리자"
UserTableCreatedAt: "생성일"
UserEmptyList: "사용자를 찾을 수 없습니다"
UserInfo: "패널 정보 가져오기"
UserInfoAddr: "패널 주소: "
UserInfoPassHelp: "팁: 비밀번호를 변경하려면 다음 명령어를 실행할 수 있습니다: "

# 명령줄 - 복원
RestoreCommands: "1Panel 서비스와 데이터를 롤백"
RestoreNoSuchFile: "롤백 파일을 찾을 수 없습니다"
RestoreStep1: "(1/5) {{ .name }} 디렉터리에서 1Panel 서비스와 데이터의 롤백을 시작합니다..."
RestoreStep2: "(2/5) 1Panel 바이너리 롤백 완료"
RestoreStep3: "(3/5) 1Panel 스크립트 롤백 완료"
RestoreStep4: "(4/5) 1Panel 서비스 롤백 완료"
RestoreStep5: "(5/5) 1Panel 데이터 롤백 완료"
RestoreSuccessful: "롤백이 완료되었습니다. {{ .version }}(으)로 되돌리고 서비스를 다시 시작합니다..."

# 명령줄 - 업데이트
UpdateCommands: "패널 정보 업데이트"
UpdateUser: "사용자 정보 업데이트"
UpdatePassword: "사용자 비밀번호 업데이트"
UpdatePort: "패널 포트 업데이트"
UpdateUserNull: "오류: 사용자가 비어 있습니다"
UpdateUserBlank: "오류: 사용자에 공백이 포함되어 있습니다"
UpdateUserFormat: "오류: 잘못된 사용자 형식 영어, 중국어, 숫자, _만 지원하며 길이는 3~30자입니다."
UpdateUserErr: "오류: 사용자 업데이트 실패 {{ .err }}"
UpdateSuccessful: "업데이트 성공"
UpdateUserResult: "사용자: {{ .name }}"
UpdatePasswordRead: "오류: 사용자 비밀번호 정보 읽기 실패 {{ .err }}"
UpdatePasswordNull: "오류: 사용자 비밀번호가 비어 있습니다"
UpdateUPasswordBlank: "오류: 사용자 비밀번호에 공백이 포함되어 있습니다"
UpdatePasswordFormat: "오류: 사용자 비밀번호는 문자, 숫자, 특수문자(@#$%*_,.?)만 지원하며 길이는 8~30자입니다."
UpdatePasswordLen: "오류: 6자 이상의 비밀번호를 입력하세요"
UpdatePasswordRe: "비밀번호 확인:"
UpdatePasswordErr: "오류: 사용자 비밀번호 업데이트 실패 {{ .err }}"
UpdatePasswordSame: "오류: 두 비밀번호가 일치하지 않습니다. 확인 후 다시 시도하세요"
UpdatePasswordResult: "사용자 비밀번호: {{ .name }}"
UpdatePortFormat: "오류: 입력한 포트 번호는 1~65535 사이여야 합니다"
UpdatePortUsed: "오류: 포트 번호가 이미 사용 중입니다. 확인 후 다시 시도하세요"
UpdatePortErr: "오류: 패널 포트 업데이트 실패 {{ .err }}"
UpdatePortResult: "패널 포트: {{ .name }}"
UpdatePortFirewallAdd: "방화벽 포트 규칙 추가 실패 {{ .err }}, 방화벽 규칙에 {{ .name }} 포트를 수동으로 추가하세요."
UpdatePortFirewallDel: "오류: 방화벽 포트 삭제 실패 {{ .err }}"
UpdatePortFirewallReload: "방화벽 다시 로드 실패 {{ .err }}, 방화벽을 수동으로 다시 로드하세요."

# 모바일 앱
ErrVerifyToken: '토큰 검증 오류가 발생했습니다. 재설정 후 다시 스캔해 주세요.'
ErrInvalidToken: '유효하지 않은 토큰입니다. 재설정 후 다시 스캔해 주세요.'
ErrExpiredToken: '토큰이 만료되었습니다. 재설정 후 다시 스캔해 주세요.'

# 명령 내보내기
Name: "이름"
Command: "명령어"

# LDAP
ErrLDAPConnectionTest: "LDAP 연결 테스트에 실패했습니다. 서버 주소, 바인드 계정 및 네트워크 설정을 확인하세요."
ErrLDAPLoginTest: "LDAP 로그인 테스트에 실패했습니다. 사용자 이름과 비밀번호를 확인하세요."
LDAPConnectionTestSuccess: "LDAP 연결 테스트에 성공했습니다."
ErrLDAPDirectorySearch: "LDAP 사용자를 읽지 못했습니다. 연결 및 검색 설정을 확인하세요."
ErrLDAPConfigLoad: "LDAP 설정을 불러오지 못했습니다."
ErrLDAPConfigSave: "LDAP 설정을 저장하지 못했습니다."
ErrLDAPURLInvalid: "LDAP 서버 주소는 ldap:// 또는 ldaps://를 사용하고 유효한 호스트를 포함해야 합니다."
ErrLDAPBindDNRequired: "바인드 DN은 필수입니다."
ErrLDAPBindPasswordRequired: "바인드 비밀번호는 필수입니다."
ErrLDAPUserOURequired: "사용자 OU는 필수입니다."
ErrLDAPConnectTimeoutRange: "연결 시간 제한은 1초에서 120초 사이여야 합니다."
ErrLDAPSearchPageSizeRange: "LDAP 조회 페이지 크기는 1에서 10000 사이여야 합니다."
ErrLDAPResultPageSizeRange: "결과 페이지 크기는 200을 초과할 수 없습니다."
ErrLDAPAttributeMapOnlyName: "속성 매핑은 name 필드만 지원합니다."
ErrLDAPNameAttributeRequired: "name에 매핑할 LDAP 속성은 필수입니다."
ErrLDAPAttributeNameInvalid: "속성 매핑에 잘못된 LDAP 속성 이름이 포함되어 있습니다."
ErrLDAPUserFilterRequired: "사용자 필터는 필수입니다."
ErrLDAPUserFilterInvalid: "사용자 필터가 올바른 LDAP 필터가 아닙니다."
ErrLDAPAttributeMapObject: "속성 매핑은 올바른 JSON 객체여야 합니다."
ErrLDAPImportModeInvalid: "가져오기 모드는 선택한 사용자 또는 모든 사용자여야 합니다."
ErrLDAPImportSelectionRequired: "가져올 LDAP 사용자를 한 명 이상 선택하세요."
ErrLDAPImportSelectionInvalid: "선택한 LDAP 사용자가 잘못되었거나 더 이상 존재하지 않습니다. 디렉터리를 다시 읽으세요."
ErrLDAPConfigChanged: "LDAP 설정이 변경되었습니다. 디렉터리를 다시 읽고 가져오기를 다시 미리 보세요."
ErrLDAPRoleRequired: "새 LDAP 사용자의 역할을 선택하세요."
ErrLDAPImportPlanIncomplete: "완전하지 않은 LDAP 가져오기 계획은 실행할 수 없습니다."
ErrLDAPQueryTokenInvalid: "LDAP 조회 결과가 만료되었습니다. 디렉터리를 다시 읽으세요."
ErrLDAPPlanTokenInvalid: "LDAP 가져오기 미리 보기가 만료되었습니다. 다시 미리 보세요."
ErrLDAPOperationFailed: "LDAP 작업에 실패했습니다. 다시 시도하세요."
ErrLDAPEntryIdentityMissing: "LDAP 항목에 안정적인 ID 또는 사용자 이름이 없습니다."
ErrLDAPDuplicateExternalID: "LDAP가 중복된 사용자 ID를 반환했습니다."
ErrLDAPUsernameConflict: "이 사용자 이름은 다른 사용자가 이미 사용 중입니다."
ErrLDAPUsernameSourceConflict: "이 사용자 이름은 로컬 사용자 또는 다른 인증 소스가 이미 사용 중입니다."
ErrLDAPUsernameConcurrentConflict: "가져오는 동안 다른 사용자가 이 사용자 이름을 사용했습니다."
ErrLDAPLocalCredentialsReadonly: "LDAP 사용자 이름과 비밀번호는 LDAP에서 관리되므로 로컬에서 변경할 수 없습니다."
ErrLDAPPasswordExpirationUnsupported: "LDAP 사용자는 로컬 비밀번호 만료 정책을 사용하지 않습니다."
ErrLDAPSyncSourceDisabled: "동기화를 활성화하거나 실행하기 전에 AD/LDAP를 활성화하세요."
ErrLDAPSyncConfigSave: "LDAP 동기화 설정을 저장하지 못했습니다."
ErrLDAPSyncSchedule: "LDAP 동기화 일정을 업데이트하지 못했습니다."
ErrLDAPSyncCronInvalid: "유효한 5필드 Cron 표현식을 입력하세요."
ErrLDAPSyncWeekdayInvalid: "유효한 요일을 선택하세요."
ErrLDAPSyncCronRequired: "Cron 표현식을 입력하세요."
ErrLDAPSyncScheduleTypeInvalid: "유효한 동기화 일정 유형을 선택하세요."
ErrLDAPSyncTimeInvalid: "유효한 실행 시간을 입력하세요."
ErrLDAPSyncRunning: "LDAP 동기화 작업이 이미 실행 중입니다."
ErrLDAPSyncDirectoryIncomplete: "LDAP 전체 조회 결과가 불완전하여 사용자 상태를 변경하지 않았습니다."
ErrLDAPSyncFailed: "LDAP 사용자 동기화에 실패했습니다."
LDAPSyncSuccess: "LDAP 사용자 동기화가 완료되었습니다."
ErrSAML2NotEnabled: "SAML2 인증이 활성화되지 않았습니다."
ErrSAML2ConfigInvalid: "SAML2 구성이 올바르지 않습니다."
ErrSAML2ConfigChanged: "SAML2 구성이 변경되었습니다. 인증을 다시 시작하세요."
ErrSAML2PanelOriginMissing: "스킴, 호스트 및 선택적 포트만 포함하는 유효한 1Panel 공개 URL을 입력하세요."
ErrSAML2MetadataInvalid: "IdP 메타데이터가 없거나 올바르지 않습니다."
ErrSAML2MetadataURLInvalid: "IdP 메타데이터 URL 또는 메타데이터의 엔드포인트가 허용되지 않습니다."
ErrSAML2MetadataFetch: "IdP 메타데이터를 불러오지 못했습니다."
ErrSAML2MetadataCertificate: "IdP 메타데이터에 사용할 수 있는 서명 인증서가 없습니다."
ErrSAML2KeyPairInvalid: "SP 개인 키와 인증서가 올바르지 않거나 서로 일치하지 않습니다."
ErrSAML2NameAttributeMissing: "구성된 SAML2 사용자 이름 속성이 없거나 올바르지 않습니다."
ErrSAML2DefaultRoleInvalid: "SAML2에 구성된 기본 역할을 사용할 수 없습니다."
ErrSAML2SLOUnavailable: "IdP가 지원되는 Single Logout 서비스를 제공하지 않습니다."
ErrSAML2TestExpired: "SAML2 테스트가 만료되었습니다. 다시 실행하세요."
ErrSAML2LoginExpired: "SAML2 로그인 요청이 만료되었습니다. 다시 시도하세요."
ErrSAML2InvalidState: "SAML2 로그인 상태가 올바르지 않거나 이미 사용되었습니다."
ErrSAML2RequestBuild: "SAML2 요청을 생성하지 못했습니다."
ErrSAML2ResponseInvalid: "SAML2 응답이 올바르지 않습니다."
ErrSAML2SignatureInvalid: "SAML2 서명이 올바르지 않습니다."
ErrSAML2Replay: "SAML2 메시지가 이미 사용되었습니다."
ErrSAML2NameIDMissing: "SAML2 NameID가 없거나 올바르지 않습니다."
ErrSAML2SessionIndexMissing: "SAML2 SessionIndex가 없거나 올바르지 않습니다."
ErrSAML2NameConflictLocal: "SAML2 사용자 이름이 로컬 사용자와 충돌합니다."
ErrSAML2NameConflictLDAP: "SAML2 사용자 이름이 LDAP 사용자와 충돌합니다."
ErrSAML2NameConflictOIDC: "SAML2 사용자 이름이 OIDC 사용자와 충돌합니다."
ErrSAML2NameConflictSAML2: "SAML2 사용자 이름이 다른 SAML2 ID와 충돌합니다."
ErrSAML2Internal: "SAML2 인증 중 내부 오류가 발생했습니다. 나중에 다시 시도하세요."
ErrSAML2LogoutExpired: "SAML2 로그아웃 요청이 만료되었습니다."
ErrSAML2LogoutInvalid: "SAML2 로그아웃 메시지가 올바르지 않습니다."
ErrSAML2LocalCredentialsReadonly: "SAML2 사용자 이름과 비밀번호는 ID 공급자가 관리하므로 로컬에서 변경할 수 없습니다."
ErrSAML2PasswordExpirationUnsupported: "SAML2 사용자는 로컬 비밀번호 만료 정책을 사용하지 않습니다."
