diff --git a/backend/app/dto/auth.go b/backend/app/dto/auth.go
index b39948499..2679193b0 100644
--- a/backend/app/dto/auth.go
+++ b/backend/app/dto/auth.go
@@ -29,7 +29,7 @@ type Login struct {
Captcha string `json:"captcha"`
CaptchaID string `json:"captchaID"`
AuthMethod string `json:"authMethod" validate:"required,oneof=jwt session"`
- Language string `json:"language" validate:"required,oneof=zh en tw ja ru ms 'pt-BR'"`
+ Language string `json:"language" validate:"required,oneof=zh en tw ja ko ru ms 'pt-BR'"`
}
type MFALogin struct {
diff --git a/backend/i18n/i18n.go b/backend/i18n/i18n.go
index 3c93f574a..e683f6d5a 100644
--- a/backend/i18n/i18n.go
+++ b/backend/i18n/i18n.go
@@ -104,6 +104,7 @@ func Init() {
_, _ = bundle.LoadMessageFileFS(fs, "lang/ja.yaml")
_, _ = bundle.LoadMessageFileFS(fs, "lang/ru.yaml")
_, _ = bundle.LoadMessageFileFS(fs, "lang/ms.yaml")
+ _, _ = bundle.LoadMessageFileFS(fs, "lang/ko.yaml")
}
func UseI18nForCmd(lang string) {
diff --git a/backend/i18n/lang/ko.yaml b/backend/i18n/lang/ko.yaml
new file mode 100644
index 000000000..2f1ecc59e
--- /dev/null
+++ b/backend/i18n/lang/ko.yaml
@@ -0,0 +1,286 @@
+ErrInvalidParams: "요청 매개변수 오류: {{ .detail }}"
+ErrTokenParse: "토큰 생성 오류: {{ .detail }}"
+ErrInitialPassword: "초기 비밀번호 오류"
+ErrInternalServer: "서버 내부 오류: {{ .detail }}"
+ErrRecordExist: "기록이 이미 존재합니다"
+ErrRecordNotFound: "기록을 찾을 수 없습니다"
+ErrStructTransform: "형식 변환 실패: {{ .detail }}"
+ErrNotLogin: "사용자가 로그인되지 않았습니다: {{ .detail }}"
+ErrPasswordExpired: "현재 비밀번호가 만료되었습니다: {{ .detail }}"
+ErrNotSupportType: "시스템에서 현재 유형을 지원하지 않습니다: {{ .detail }}"
+ErrApiConfigStatusInvalid: "API 인터페이스 액세스 금지: {{ .detail }}"
+ErrApiConfigKeyInvalid: "API 인터페이스 키 오류: {{ .detail }}"
+ErrApiConfigIPInvalid: "API 인터페이스 IP가 화이트리스트에 없습니다: {{ .detail }}"
+ErrApiConfigDisable: "이 인터페이스는 API 호출을 금지합니다: {{ .detail }}"
+ErrApiConfigKeyTimeInvalid: "API 인터페이스 타임스탬프 오류: {{ .detail }}"
+
+# 공통
+ErrNameIsExist: "이름이 이미 존재합니다"
+ErrDemoEnvironment: "데모 서버에서는 이 작업이 금지되어 있습니다!"
+ErrCmdTimeout: "명령어 실행 시간이 초과되었습니다!"
+ErrCmdIllegal: "명령어에 잘못된 문자가 포함되어 있습니다. 수정 후 다시 시도하세요!"
+ErrPortExist: '{{ .port }} 포트가 {{ .type }} [{{ .name }}]에 의해 이미 사용 중입니다'
+TYPE_APP: "애플리케이션"
+TYPE_RUNTIME: "실행 환경"
+TYPE_DOMAIN: "도메인 이름"
+ErrTypePort: '포트 {{ .name }} 형식 오류'
+ErrTypePortRange: '포트 범위는 1-65535 사이여야 합니다'
+Success: "성공"
+Failed: "실패"
+SystemRestart: "시스템 재시작으로 인해 작업이 중단되었습니다"
+
+# 애플리케이션
+ErrPortInUsed: "{{ .detail }} 포트가 이미 사용 중입니다"
+ErrAppLimit: "앱 설치 제한을 초과했습니다"
+ErrAppRequired: "{{ .detail }} 앱이 필요합니다"
+ErrNotInstall: "앱이 설치되지 않았습니다"
+ErrPortInOtherApp: "{{ .port }} 포트가 {{ .apps }} 앱에 의해 이미 사용 중입니다"
+ErrDbUserNotValid: "데이터베이스 사용자 이름과 비밀번호가 일치하지 않습니다!"
+ErrDockerComposeNotValid: "docker-compose 파일 형식 오류!"
+ErrUpdateBuWebsite: "애플리케이션이 성공적으로 업데이트되었지만, 웹사이트 구성 파일 수정에 실패했습니다. 구성을 확인하세요!"
+Err1PanelNetworkFailed: "기본 컨테이너 네트워크 생성 실패! {{ .detail }}"
+ErrFileParse: "애플리케이션 docker-compose 파일 분석 실패!"
+ErrInstallDirNotFound: "설치 디렉터리가 존재하지 않습니다"
+AppStoreIsUpToDate: "최신 상태입니다"
+LocalAppVersionNull: "{{.name}} 앱 버전이 동기화되지 않았습니다! 애플리케이션 목록에 추가할 수 없습니다"
+LocalAppVersionErr: "{{.name}} 버전 {{.version}} 동기화 실패! {{.err}}"
+ErrFileNotFound: "{{.name}} 파일이 존재하지 않습니다"
+ErrFileParseApp: "{{.name}} 파일 분석 실패 {{.err}}"
+ErrAppDirNull: "버전 폴더가 존재하지 않습니다"
+LocalAppErr: "앱 {{.name}} 동기화 실패! {{.err}}"
+ErrContainerName: "컨테이너 이름이 이미 존재합니다"
+ErrAppSystemRestart: "1Panel 재시작으로 인해 작업이 중단되었습니다"
+ErrCreateHttpClient: "HTTP 요청 생성 실패 {{.err}}"
+ErrHttpReqTimeOut: "요청 시간이 초과되었습니다 {{.err}}"
+ErrHttpReqFailed: "요청 실패 {{.err}}"
+ErrHttpReqNotFound: "파일이 존재하지 않습니다"
+ErrNoSuchHost: "네트워크 연결 실패"
+ErrImagePullTimeOut: "이미지 가져오기 시간 초과"
+ErrContainerNotFound: "{{ .name }} 컨테이너가 존재하지 않습니다"
+ErrContainerMsg: "{{ .name }} 컨테이너가 비정상적입니다. 자세한 내용은 컨테이너 페이지의 로그를 확인하세요"
+ErrAppBackup: "{{ .name }} 애플리케이션 백업 실패 오류 {{.err}}"
+ErrImagePull: "{{ .name }} 이미지 가져오기 실패 오류 {{.err}}"
+ErrVersionTooLow: "현재 1Panel 버전이 낮아 앱 스토어를 업데이트할 수 없습니다. 버전을 업그레이드하세요"
+ErrAppNameExist: "앱 이름이 이미 존재합니다"
+AppStoreIsSyncing: "앱 스토어가 동기화 중입니다. 나중에 다시 시도하세요"
+ErrGetCompose: "docker-compose.yml 파일 가져오기 실패! {{ .detail }}"
+ErrAppWarn: "비정상 상태, 로그를 확인하세요"
+ErrAppParamKey: "매개변수 {{ .name }} 필드 예외"
+ErrAppUpgrade: "애플리케이션 {{ .name }} 업그레이드 실패 {{ .err }}"
+AppRecover: "앱 {{ .name }} 롤백 완료"
+PullImageStart: "이미지 {{ .name }} 가져오기 시작"
+PullImageSuccess: "이미지 가져오기 성공"
+UpgradeAppStart: "애플리케이션 {{ .name }} 업그레이드 시작"
+UpgradeAppSuccess: "앱 {{ .name }} 업그레이드 성공"
+
+# 파일
+ErrFileCanNotRead: "파일을 읽을 수 없습니다"
+ErrFileToLarge: "파일이 너무 큽니다"
+ErrPathNotFound: "경로를 찾을 수 없습니다"
+ErrMovePathFailed: "대상 경로가 원래 경로를 포함할 수 없습니다!"
+ErrLinkPathNotFound: "대상 경로가 존재하지 않습니다!"
+ErrFileIsExist: "파일 또는 디렉터리가 이미 존재합니다!"
+ErrFileUpload: "파일 업로드 실패 {{.name}} {{.detail}}"
+ErrFileDownloadDir: "다운로드 폴더는 지원되지 않습니다"
+ErrCmdNotFound: "{{ .name }} 명령이 존재하지 않습니다. 호스트에 이 명령을 먼저 설치하세요"
+ErrSourcePathNotFound: "소스 디렉터리가 존재하지 않습니다"
+ErrFavoriteExist: "이 경로는 이미 즐겨찾기에 추가되었습니다"
+ErrInvalidChar: "잘못된 문자는 금지됩니다"
+ErrPathNotDelete: "선택한 디렉터리는 삭제할 수 없습니다"
+
+# 웹사이트
+ErrDomainIsExist: "도메인 이름이 이미 존재합니다"
+ErrAliasIsExist: "별칭이 이미 존재합니다"
+ErrAppDelete: "다른 웹사이트에서 이 애플리케이션을 사용 중입니다"
+ErrGroupIsUsed: "그룹이 사용 중이므로 삭제할 수 없습니다"
+ErrBackupMatch: "백업 파일이 현재 웹사이트 데이터와 일치하지 않습니다: {{ .detail }}"
+ErrBackupExist: "백업 파일이 원본 데이터의 일부와 일치하지 않습니다: {{ .detail }}"
+ErrPHPResource: "로컬 런타임에서 전환을 지원하지 않습니다!"
+ErrPathPermission: "인덱스 디렉터리에 1000:1000 권한이 아닌 폴더가 감지되었습니다. 웹사이트 액세스 시 '접근 거부' 오류가 발생할 수 있습니다. 상단의 저장 버튼을 클릭하세요"
+ErrDomainIsUsed: "도메인이 웹사이트 {{ .name }}에서 이미 사용 중입니다"
+ErrDomainFormat: "{{ .name }} 도메인 형식 오류"
+ErrDefaultAlias: "기본은 예약된 코드 이름입니다. 다른 이름을 사용하세요"
+ErrImageNotExist: "실행 환경 {{.name}} 이미지가 존재하지 않습니다. 실행 환경을 다시 편집하세요"
+
+# SSL 관련
+ErrSSLCannotDelete: "인증서 {{ .name }}은(는) 웹사이트에서 사용 중이므로 삭제할 수 없습니다."
+ErrAccountCannotDelete: "계정과 연결된 인증서는 삭제할 수 없습니다."
+ErrSSLApply: "인증서가 성공적으로 서명되었지만 Openresty 다시 로드에 실패했습니다. 구성을 확인하세요!"
+ErrEmailIsExist: "이메일이 이미 존재합니다."
+ErrSSLKeyNotFound: "개인 키 파일이 존재하지 않습니다."
+ErrSSLCertificateNotFound: "인증서 파일이 존재하지 않습니다."
+ErrSSLKeyFormat: "개인 키 파일 검증 오류"
+ErrSSLCertificateFormat: "인증서 파일 형식 오류입니다. pem 형식을 사용하세요."
+ErrEabKidOrEabHmacKeyCannotBlank: "EabKid 또는 EabHmacKey 는 비워둘 수 없습니다."
+ErrOpenrestyNotFound: "HTTP 모드는 먼저 Openresty 를 설치해야 합니다."
+ApplySSLStart: "인증서를 신청하기 시작합니다. 도메인 이름 [{{ .domain }}], 신청 방법 [{{ .type }}]"
+dnsAccount: "DNS 자동"
+dnsManual: "DNS 수동"
+http: "HTTP"
+ApplySSLFailed: "도메인 [{{ .domain }}] 인증서 신청 실패, {{ .detail }}"
+ApplySSLSuccess: "도메인 [{{ .domain }}] 인증서 신청 성공!"
+DNSAccountName: "DNS 계정 [{{ .name }}] 제조사 [{{ .type }}]"
+PushDirLog: "인증서를 디렉토리 [{{ .path }}]에 푸시했습니다. {{ .status }}"
+ErrDeleteCAWithSSL: "현재 조직에 발급된 인증서가 있으므로 삭제할 수 없습니다."
+ErrDeleteWithPanelSSL: "패널 SSL 구성이 이 인증서를 사용 중이므로 삭제할 수 없습니다."
+ErrDefaultCA: "기본 인증 기관은 삭제할 수 없습니다."
+ApplyWebSiteSSLLog: "{{ .name }} 웹사이트 인증서를 업데이트하기 시작합니다."
+ErrUpdateWebsiteSSL: "{{ .name }} 웹사이트 인증서 업데이트 실패: {{ .err }}"
+ApplyWebSiteSSLSuccess: "웹사이트 인증서 업데이트 성공"
+ErrExecShell: "스크립트 실행 실패 {{ .err }}"
+ExecShellStart: "스크립트 실행 시작"
+ExecShellSuccess: "스크립트 실행 성공"
+StartUpdateSystemSSL: "시스템 인증서 업데이트 시작"
+UpdateSystemSSLSuccess: "시스템 인증서 업데이트 성공"
+
+# MySQL
+ErrUserIsExist: "현재 사용자가 이미 존재합니다. 새로운 사용자를 입력하세요."
+ErrDatabaseIsExist: "현재 데이터베이스가 이미 존재합니다. 새로운 데이터베이스를 입력하세요."
+ErrExecTimeOut: "SQL 실행이 시간 초과되었습니다. 데이터베이스를 확인하세요."
+ErrRemoteExist: "원격 데이터베이스에 동일한 이름이 이미 존재합니다. 이름을 수정한 후 다시 시도하세요."
+ErrLocalExist: "로컬 데이터베이스에 동일한 이름이 이미 존재합니다. 이름을 수정한 후 다시 시도하세요."
+
+# Redis
+ErrTypeOfRedis: "복구 파일 형식이 현재 지속성 모드와 일치하지 않습니다. 파일 형식을 수정한 후 다시 시도하세요."
+
+# Container
+ErrInUsed: "{{ .detail }}이(가) 사용 중이므로 삭제할 수 없습니다."
+ErrObjectInUsed: "이 객체는 사용 중이므로 삭제할 수 없습니다."
+ErrObjectBeDependent: "이 이미지는 다른 이미지에 의해 의존되고 있어 삭제할 수 없습니다."
+ErrPortRules: "포트 수가 일치하지 않습니다. 다시 입력하세요!"
+ErrPgImagePull: "이미지 가져오기 시간이 초과되었습니다. 이미지 가속 구성을 설정하거나 postgres:16.0-alpine 이미지를 수동으로 가져온 후 다시 시도하세요."
+
+# Runtime
+ErrDirNotFound: "빌드 폴더가 존재하지 않습니다! 파일의 무결성을 확인하세요!"
+ErrFileNotExist: "{{ .detail }} 파일이 존재하지 않습니다! 소스 파일의 무결성을 확인하세요!"
+ErrImageBuildErr: "이미지 빌드 실패"
+ErrImageExist: "이미지가 이미 존재합니다!"
+ErrDelWithWebsite: "운영 환경이 웹사이트와 연결되어 있어 삭제할 수 없습니다."
+ErrRuntimeStart: "실행 시작 실패"
+ErrPackageJsonNotFound: "package.json 파일이 존재하지 않습니다."
+ErrScriptsNotFound: "package.json 에서 스크립트 구성 항목을 찾을 수 없습니다."
+ErrContainerNameNotFound: "컨테이너 이름을 가져올 수 없습니다. .env 파일을 확인하세요."
+ErrNodeModulesNotFound: "node_modules 폴더가 존재하지 않습니다! 실행 환경을 편집하거나 실행 환경이 성공적으로 시작되기를 기다리세요."
+
+# Setting
+ErrBackupInUsed: "백업 계정이 크론 작업에 사용 중이므로 삭제할 수 없습니다."
+ErrBackupCheck: "백업 계정 연결 테스트 실패 {{ .err }}"
+ErrOSSConn: "최신 버전을 가져올 수 없습니다. 서버가 외부 네트워크에 연결할 수 있는지 확인하세요."
+ErrEntrance: "보안 입구 정보 오류. 확인 후 다시 시도하세요!"
+
+# Tool
+ErrConfigNotFound: "구성 파일이 존재하지 않습니다."
+ErrConfigParse: "구성 파일 형식 오류"
+ErrConfigIsNull: "구성 파일은 비워둘 수 없습니다."
+ErrConfigDirNotFound: "실행 디렉토리가 존재하지 않습니다."
+ErrConfigAlreadyExist: "동일한 이름의 구성 파일이 이미 존재합니다."
+ErrUserFindErr: "사용자 {{ .name }} 찾기 실패 {{ .err }}"
+
+# SSH
+ErrFirewallNone: "시스템에서 firewalld 또는 ufw 서비스를 감지하지 못했습니다. 확인 후 다시 시도하세요!"
+ErrFirewallBoth: "시스템에서 firewalld 와 ufw 서비스가 모두 감지되었습니다. 충돌을 방지하려면 하나를 제거한 후 다시 시도하세요!"
+
+# Cronjob
+ErrBashExecute: "스크립트 실행 오류. 작업 출력 텍스트 영역에서 구체적인 정보를 확인하세요."
+ErrCutWebsiteLog: "{{ .name }} 웹사이트 로그 자르기 실패, 오류 {{ .err }}"
+CutWebsiteLogSuccess: "{{ .name }} 웹사이트 로그 자르기 성공, 백업 경로 {{ .path }}"
+
+# Toolbox
+ErrNotExistUser: "현재 사용자가 존재하지 않습니다. 수정 후 다시 시도하세요!"
+ErrBanAction: "설정 실패, 현재 {{ .name }} 서비스가 사용할 수 없습니다. 확인 후 다시 시도하세요!"
+ErrClamdscanNotFound: "clamdscan 명령을 감지하지 못했습니다. 설치 문서를 참조하세요!"
+
+# WAF
+ErrScope: "이 구성의 수정은 지원되지 않습니다."
+ErrStateChange: "상태 수정 실패"
+ErrRuleExist: "규칙이 이미 존재합니다."
+ErrRuleNotExist: "규칙이 존재하지 않습니다."
+ErrParseIP: "IP 형식 오류"
+ErrDefaultIP: "default 는 예약된 이름입니다. 다른 이름으로 변경하세요."
+ErrGroupInUse: "IP 그룹이 블랙/화이트 리스트에서 사용 중이며 삭제할 수 없습니다."
+ErrGroupExist: "IP 그룹 이름이 이미 존재합니다."
+ErrIPRange: "잘못된 IP 범위"
+ErrIPExist: "IP가 이미 존재합니다."
+
+# License
+ErrLicense: "라이선스 형식 오류, 확인 후 다시 시도하세요!"
+ErrLicenseCheck: "라이선스 검증 실패, 확인 후 다시 시도하세요!"
+ErrXpackVersion: "라이선스 검증 실패, 이 라이선스는 버전 제한이 있어 성공적으로 가져올 수 없습니다. 확인 후 다시 시도하세요!"
+ErrLicenseSave: "라이선스 정보 저장 실패, 오류 {{ .err }}. 다시 시도하세요!"
+ErrLicenseSync: "라이선스 정보 동기화 실패, 데이터베이스에서 라이선스 정보를 감지하지 못했습니다!"
+ErrXpackNotFound: "이 섹션은 전문가 버전 기능입니다. Panel 설정 - 라이선스 인터페이스에서 먼저 라이선스를 가져오세요."
+ErrXpackNotActive: "이 섹션은 전문가 버전 기능입니다. Panel 설정 - 라이선스 인터페이스에서 먼저 라이선스 상태를 동기화하세요."
+ErrXpackOutOfDate: "현재 라이선스가 만료되었습니다. Panel 설정 - 라이선스 인터페이스에서 라이선스를 다시 가져오세요."
+ErrXpackLost: "라이선스가 최대 재시도 횟수에 도달했습니다. [설정] - [라이선스] 페이지로 이동하여 동기화 버튼을 수동으로 클릭해 전문가 버전 기능을 정상적으로 작동시키세요."
+ErrXpackTimeout: "요청 시간이 초과되었습니다. 네트워크 연결이 불안정할 수 있으니 나중에 다시 시도하세요!"
+
+# Alert
+ErrAlert: "알림 정보 형식 오류, 확인 후 다시 시도하세요!"
+ErrAlertPush: "알림 전송 오류, 확인 후 다시 시도하세요!"
+ErrAlertSave: "알림 저장 오류, 확인 후 다시 시도하세요!"
+ErrAlertSync: "알림 동기화 오류, 확인 후 다시 시도하세요!"
+ErrAlertRemote: "원격 알림 오류, 확인 후 다시 시도하세요!"
+
+# CMD
+AppVersion: "앱 버전"
+AppCommands: "앱 관련 명령어"
+AppInit: "앱 초기화"
+AppKeyVal: "앱 키 (영어만 지원)"
+AppCreateFileErr: "파일 {{ .name }} 생성 실패 {{ .err }}"
+AppCreateDirErr: "폴더 {{ .name }} 생성 실패 {{ .err }}"
+AppMissKey: "앱 키가 없습니다. -k 옵션으로 지정하세요."
+AppMissVersion: "앱 버전이 없습니다. -v 옵션으로 지정하세요."
+AppVersionExist: "버전이 이미 존재합니다!"
+AppCreateSuccessful: "생성 성공!"
+AppWriteErr: "파일 {{ .name }} 쓰기 실패 {{ .err }}"
+SudoHelper: "{{ .cmd }} 명령을 사용하거나 root 사용자로 전환하세요."
+ListenIPCommands: "IP 변경"
+ListenIPv4: "IPv4 에서 수신 대기"
+ListenIPv6: "IPv6 에서 수신 대기"
+ListenChangeSuccessful: "변경 성공! 현재 {{ .value }}에서 수신 대기 중입니다."
+ResetCommands: "시스템 정보 초기화"
+ResetMFA: "1Panel 이중 인증 취소"
+ResetHttps: "1Panel HTTPS 로그인 취소"
+ResetEntrance: "1Panel 보안 입구 취소"
+ResetIPs: "1Panel 허용 IP 제한 취소"
+ResetDomain: "1Panel 도메인 바인딩 취소"
+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: "복구 성공! 서비스를 다시 시작합니다. 잠시만 기다려주세요..."
+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 }}, 방화벽을 수동으로 다시 로드하세요."
+UserInfo: "패널 정보 가져오기"
+UserInfoAddr: "패널 주소: "
+UserInfoPassHelp: "팁: 비밀번호를 변경하려면 다음 명령어를 실행할 수 있습니다: "
+DBConnErr: "오류: 데이터베이스 연결 초기화 실패 {{ .err }}"
+SystemVersion: "버전: "
+SystemMode: "모드: "
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 8ff64a107..fdaa9edf2 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -14,6 +14,7 @@ import ja from 'element-plus/es/locale/lang/ja';
import ms from 'element-plus/es/locale/lang/ms';
import ptBR from 'element-plus/es/locale/lang/pt-br';
import ru from 'element-plus/es/locale/lang/ru';
+import ko from 'element-plus/es/locale/lang/ko';
import { useTheme } from '@/hooks/use-theme';
useTheme();
@@ -30,6 +31,7 @@ const i18nLocale = computed(() => {
if (globalStore.language === 'ms') return ms;
if (globalStore.language === 'ru') return ru;
if (globalStore.language === 'pt-br') return ptBR;
+ if (globalStore.language === 'ko') return ko;
return zhCn;
});
@@ -43,5 +45,3 @@ const reload = () => {
};
provide('reload', reload);
-
-
diff --git a/frontend/src/lang/index.ts b/frontend/src/lang/index.ts
index 628130391..a84e26445 100644
--- a/frontend/src/lang/index.ts
+++ b/frontend/src/lang/index.ts
@@ -6,6 +6,7 @@ import ptBr from './modules/pt-br';
import ja from './modules/ja';
import ru from './modules/ru';
import ms from './modules/ms';
+import ko from './modules/ko';
const i18n = createI18n({
legacy: false,
@@ -20,6 +21,7 @@ const i18n = createI18n({
ja,
ru,
ms,
+ ko,
},
warnHtmlMessage: false,
});
diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts
index 5fbde0118..28485d51e 100644
--- a/frontend/src/lang/modules/en.ts
+++ b/frontend/src/lang/modules/en.ts
@@ -60,7 +60,7 @@ const message = {
copy: 'Copy',
random: 'Random',
uninstall: 'Uninstall',
- fullscreen: 'Enter fullscreen',
+ fullscreen: 'Fullscreen',
quitFullscreen: 'Exit fullscreen',
update: 'Edit',
showAll: 'Show All',
@@ -1942,7 +1942,7 @@ const message = {
app: 'Application',
appNew: 'New Application',
appInstalled: 'Installed application',
- create: 'Create website',
+ create: 'Create',
delete: 'Delete Website',
deleteApp: 'Delete Application',
deleteBackup: 'Delete Backup',
diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts
index 540c29dee..0a2c635d9 100644
--- a/frontend/src/lang/modules/ja.ts
+++ b/frontend/src/lang/modules/ja.ts
@@ -1,8 +1,8 @@
-import fit2cloudEnLocale from 'fit2cloud-ui-plus/src/locale/lang/ja';
-let xpackJpLocale = {};
+import fit2cloudJaLocale from 'fit2cloud-ui-plus/src/locale/lang/ja';
+let xpackJaLocale = {};
const xpackModules = import.meta.glob('../../xpack/lang/ja.ts', { eager: true });
if (xpackModules['../../xpack/lang/ja.ts']) {
- xpackJpLocale = xpackModules['../../xpack/lang/ja.ts']['default'] || {};
+ xpackJaLocale = xpackModules['../../xpack/lang/ja.ts']['default'] || {};
}
const message = {
@@ -59,8 +59,8 @@ const message = {
copy: 'コピー',
random: 'ランダム',
uninstall: 'アンインストール',
- fullscreen: 'フルスクリーンを入力します',
- quitFullscreen: 'フルスクリーンを終了します',
+ fullscreen: 'フルスクリーン',
+ quitFullscreen: 'フルスクリーンを終了',
update: '編集',
showAll: 'すべてを表示します',
hideSome: 'いくつかを隠します',
@@ -1915,7 +1915,7 @@ const message = {
app: '応用',
appNew: '新しいアプリケーション',
appInstalled: 'インストールされたアプリケーション',
- create: 'Webサイトを作成します',
+ create: '作成する',
delete: 'Webサイトを削除します',
deleteApp: 'アプリケーションを削除します',
deleteBackup: 'バックアップを削除します',
@@ -2490,7 +2490,7 @@ const message = {
},
};
export default {
- ...fit2cloudEnLocale,
+ ...fit2cloudJaLocale,
...message,
- ...xpackJpLocale,
+ ...xpackJaLocale,
};
diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts
new file mode 100644
index 000000000..75aa26ea7
--- /dev/null
+++ b/frontend/src/lang/modules/ko.ts
@@ -0,0 +1,2460 @@
+import fit2cloudKoLocale from 'fit2cloud-ui-plus/src/locale/lang/en';
+
+let xpackKoLocale = {};
+const xpackModules = import.meta.glob('../../xpack/lang/ko.ts', { eager: true });
+if (xpackModules['../../xpack/lang/ko.ts']) {
+ xpackKoLocale = xpackModules['../../xpack/lang/ko.ts']['default'] || {};
+}
+
+const message = {
+ commons: {
+ true: '참',
+ false: '거짓',
+ colon: ': ',
+ example: '예를 들어, ',
+ fit2cloud: 'FIT2CLOUD',
+ lingxia: 'Lingxia',
+ button: {
+ create: '생성',
+ add: '추가',
+ save: '저장',
+ set: '설정 수정',
+ sync: '동기화',
+ delete: '삭제',
+ edit: '편집',
+ enable: '활성화',
+ disable: '비활성화',
+ confirm: '확인',
+ cancel: '취소',
+ reset: '재설정',
+ restart: '재시작',
+ conn: '연결',
+ disconnect: '연결 해제',
+ clean: '정리',
+ login: '로그인',
+ close: '닫기',
+ off: '꺼짐',
+ stop: '중지',
+ start: '시작',
+ view: '보기',
+ watch: '감시',
+ handle: '트리거',
+ expand: '확장',
+ collapse: '축소',
+ log: '로그',
+ back: '뒤로',
+ backup: '백업',
+ recover: '복구',
+ retry: '재시도',
+ upload: '업로드',
+ download: '다운로드',
+ init: '초기화',
+ verify: '검증',
+ saveAndEnable: '저장 및 활성화',
+ import: '가져오기',
+ search: '검색',
+ refresh: '새로고침',
+ get: '가져오기',
+ upgrade: '업그레이드',
+ ignore: '업그레이드 무시',
+ copy: '복사',
+ random: '무작위',
+ uninstall: '제거',
+ fullscreen: '전체 화면',
+ quitFullscreen: '전체 화면 종료',
+ update: '수정',
+ showAll: '모두 보기',
+ hideSome: '일부 숨기기',
+ agree: '동의',
+ notAgree: '동의하지 않음',
+ preview: '미리 보기',
+ open: '열기',
+ notSave: '저장하지 않음',
+ createNewFolder: '새 폴더 생성',
+ createNewFile: '새 파일 생성',
+ helpDoc: '도움말 문서',
+ unbind: '연결 해제',
+ },
+ search: {
+ timeStart: '시작 시간',
+ timeEnd: '종료 시간',
+ timeRange: '부터',
+ dateStart: '시작 날짜',
+ dateEnd: '종료 날짜',
+ },
+ table: {
+ all: '전체',
+ total: '총 {0}',
+ name: '이름',
+ type: '유형',
+ status: '상태',
+ statusSuccess: '성공',
+ statusFailed: '실패',
+ statusWaiting: '대기 중...',
+ records: '기록',
+ group: '그룹',
+ createdAt: '생성 시간',
+ publishedAt: '게시 시간',
+ date: '날짜',
+ updatedAt: '업데이트 시간',
+ operate: '작업',
+ message: '메시지',
+ description: '설명',
+ interval: '간격',
+ user: '소유자',
+ title: '제목',
+ port: '포트',
+ forward: '포워드',
+ protocol: '프로토콜',
+ tableSetting: '테이블 설정',
+ refreshRate: '새로 고침 속도',
+ refreshRateUnit: '새로 고침 안 함 | {n} 초/회 | {n} 초/회',
+ selectColumn: '열 선택',
+ },
+ loadingText: {
+ Upgrading: '시스템 업그레이드 중입니다. 잠시만 기다려 주십시오...',
+ Restarting: '시스템 재시작 중입니다. 잠시만 기다려 주십시오...',
+ Recovering: '스냅샷에서 복구 중입니다. 잠시만 기다려 주십시오...',
+ Rollbacking: '스냅샷에서 롤백 중입니다. 잠시만 기다려 주십시오...',
+ },
+ msg: {
+ noneData: '데이터가 없습니다',
+ delete: `이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?`,
+ clean: `이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?`,
+ deleteTitle: '삭제',
+ deleteSuccess: '삭제 완료',
+ loginSuccess: '로그인 성공',
+ operationSuccess: '작업 완료',
+ copySuccess: '복사 완료',
+ notSupportOperation: `이 작업은 지원되지 않습니다`,
+ requestTimeout: '요청이 시간 초과되었습니다. 나중에 다시 시도해 주십시오',
+ infoTitle: '안내',
+ notRecords: '현재 작업에 대한 실행 기록이 생성되지 않았습니다',
+ sureLogOut: '로그아웃하시겠습니까?',
+ createSuccess: '생성 완료',
+ updateSuccess: '업데이트 완료',
+ uploadSuccess: '업로드 성공',
+ operate: '작업',
+ operateConfirm: '작업을 확인하려면 수동으로 입력하십시오: ',
+ inputOrSelect: '선택하거나 입력해 주십시오',
+ 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: '생성 중입니다. 이 작업이 필요하지 않습니다',
+ },
+ login: {
+ username: '사용자 이름',
+ password: '비밀번호',
+ welcome: '다시 오신 것을 환영합니다. 사용자 이름과 비밀번호를 입력하여 로그인하세요!',
+ errorAuthInfo: '입력한 사용자 이름 또는 비밀번호가 잘못되었습니다. 다시 입력해주세요!',
+ errorMfaInfo: '인증 정보가 잘못되었습니다. 다시 시도해주세요!',
+ captchaHelper: '캡챠',
+ errorCaptcha: '캡챠 코드 오류!',
+ notSafe: '접근이 거부되었습니다',
+ safeEntrance1: '현재 환경에서 보안 로그인이 활성화되었습니다',
+ safeEntrance2: 'SSH 터미널에서 다음 명령어를 입력하여 패널 진입 경로를 확인하세요: 1pctl user-info',
+ errIP1: '현재 환경에서 승인된 IP 주소 접근이 활성화되었습니다',
+ errDomain1: '현재 환경에서 도메인 이름 바인딩이 활성화되었습니다',
+ errHelper: '바인딩 정보를 재설정하려면 SSH 터미널에서 다음 명령어를 실행하세요:',
+ codeInput: 'MFA 인증기의 6자리 인증 코드를 입력하세요',
+ mfaTitle: 'MFA 인증',
+ mfaCode: 'MFA 인증 코드',
+ title: 'Linux 서버 관리 패널',
+ licenseHelper:
+ '« 커뮤니티 라이선스 계약 »에 동의합니다',
+ errorAgree: '커뮤니티 소프트웨어 라이선스에 동의하려면 클릭하세요',
+ logout: '로그아웃',
+ agreeTitle: '동의',
+ agreeContent:
+ '귀하의 합법적인 권리와 이익을 보다 잘 보호하기 위해, 다음 « 커뮤니티 라이선스 계약 »을 읽고 동의해주세요.',
+ },
+ rule: {
+ username: '사용자 이름을 입력하세요',
+ password: '비밀번호를 입력하세요',
+ rePassword: '확인 비밀번호가 비밀번호와 일치하지 않습니다.',
+ requiredInput: '이 필드는 필수 항목입니다.',
+ requiredSelect: '목록에서 항목을 선택하세요',
+ illegalInput: '이 필드에는 유효하지 않은 문자가 포함될 수 없습니다.',
+ 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: '전화번호 형식이 올바르지 않습니다',
+ },
+ res: {
+ paramError: '요청이 실패했습니다. 나중에 다시 시도하세요!',
+ forbidden: '현재 사용자는 권한이 없습니다',
+ serverError: '서비스 예외',
+ notFound: '리소스가 존재하지 않습니다',
+ commonError: '요청이 실패했습니다',
+ },
+ service: {
+ serviceNotStarted: `{0} 서비스가 시작되지 않았습니다.`,
+ },
+ status: {
+ running: '실행 중',
+ done: '완료',
+ scanFailed: '불완전',
+ success: '성공',
+ waiting: '대기 중',
+ waiting1: '대기 중',
+ failed: '실패',
+ stopped: '중지됨',
+ error: '오류',
+ created: '생성됨',
+ restarting: '재시작 중',
+ uploading: '업로드 중',
+ unhealthy: '비정상',
+ removing: '제거 중',
+ paused: '일시 중지',
+ exited: '종료됨',
+ dead: '중단됨',
+ installing: '설치 중',
+ enabled: '활성화됨',
+ disabled: '비활성화됨',
+ normal: '정상',
+ building: '빌드 중',
+ downloaderr: '다운로드 오류',
+ upgrading: '업그레이드 중',
+ upgradeerr: '업그레이드 오류',
+ pullerr: '이미지 가져오기 오류',
+ rebuilding: '재빌드 중',
+ deny: '거부됨',
+ accept: '수락됨',
+ used: '사용 중',
+ unUsed: '사용 안 함',
+ starting: '시작 중',
+ recreating: '재생성 중',
+ creating: '생성 중',
+ systemrestart: '중단됨',
+ init: '애플리케이션 대기 중',
+ ready: '정상',
+ applying: '적용 중',
+ applyerror: '실패',
+ syncerr: '오류',
+ uperr: '오류',
+ },
+ units: {
+ second: '초 | 초 | 초',
+ minute: '분 | 분 | 분',
+ hour: '시간 | 시간 | 시간',
+ day: '일 | 일 | 일',
+ week: '주 | 주 | 주',
+ month: '월 | 월 | 월',
+ year: '년 | 년 | 년',
+ time: '시간',
+ core: '코어 | 코어 | 코어',
+ millisecond: '밀리초 | 밀리초',
+ secondUnit: '초',
+ minuteUnit: '분',
+ hourUnit: '시간',
+ dayUnit: '일',
+ weekUnit: '주',
+ monthUnit: '월',
+ yearUnit: '년',
+ millisecondUnit: 'ms',
+ },
+ operate: {
+ down: '중지',
+ up: '시작',
+ restart: '재시작',
+ install: '설치',
+ uninstall: '제거',
+ update: '업데이트',
+ },
+ },
+ menu: {
+ home: '개요',
+ apps: '앱 스토어',
+ website: '웹사이트 | 웹사이트들',
+ project: '프로젝트 | 프로젝트들',
+ config: '구성 | 구성들',
+ ssh: 'SSH 설정',
+ firewall: '방화벽',
+ ssl: '인증서 | 인증서들',
+ database: '데이터베이스 | 데이터베이스들',
+ container: '컨테이너 | 컨테이너들',
+ cronjob: '크론 작업 | 크론 작업들',
+ host: '호스트 | 호스트들',
+ system: '시스템',
+ security: '보안',
+ files: '파일',
+ monitor: '모니터링',
+ terminal: '터미널 | 터미널들',
+ settings: '설정 | 설정들',
+ toolbox: '툴박스',
+ logs: '로그 | 로그들',
+ runtime: '런타임 | 런타임들',
+ processManage: '프로세스 | 프로세스들',
+ process: '프로세스 | 프로세스들',
+ network: '네트워크 | 네트워크들',
+ supervisor: '슈퍼바이저',
+ name: '변조 방지',
+ },
+ home: {
+ restart_1panel: '패널 재시작',
+ restart_system: '서버 재시작',
+ operationSuccess:
+ '작업이 성공적으로 완료되었습니다. 시스템이 재부팅 중입니다. 나중에 브라우저를 수동으로 새로 고침하세요!',
+ overview: '개요',
+ 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: '논리 코어',
+ loadAverage: '지난 1분의 평균 부하 | 지난 {n} 분의 평균 부하',
+ load: '부하',
+ mount: '마운트 지점',
+ fileSystem: '파일 시스템',
+ total: '총량',
+ used: '사용 중',
+ free: '여유',
+ percent: '사용률',
+ app: '추천 애플리케이션',
+ goInstall: 'Go 설치',
+
+ networkCard: '네트워크 카드',
+ disk: '디스크',
+ },
+ tabs: {
+ more: '더 보기',
+ hide: '숨기기',
+ close: '닫기',
+ closeLeft: '왼쪽 닫기',
+ closeRight: '오른쪽 닫기',
+ closeCurrent: '현재 탭 닫기',
+ closeOther: '다른 탭 닫기',
+ closeAll: '모두 닫기',
+ },
+ header: {
+ logout: '로그아웃',
+ },
+ database: {
+ all: '모두',
+ manage: '관리',
+ database: '데이터베이스',
+ deleteBackupHelper: '데이터베이스 백업을 동시에 삭제',
+ delete: '삭제 작업은 되돌릴 수 없습니다. 삭제하려면 "',
+ deleteHelper: '"를 입력하세요.',
+ create: '데이터베이스 생성',
+ noMysql: '데이터베이스 서비스 (MySQL 또는 MariaDB)',
+ noPostgresql: '데이터베이스 서비스 Postgresql',
+ goUpgrade: '업그레이드로 이동',
+ goInstall: '설치로 이동',
+ source: '소스',
+ isDelete: '삭제됨',
+ permission: '권한',
+ permissionForIP: 'IP',
+ permissionAll: '모두(%)',
+ databaseConnInfo: '연결 정보',
+ rootPassword: '루트 비밀번호',
+ serviceName: '서비스 이름',
+ serviceNameHelper: '같은 네트워크 내 컨테이너 간의 접근.',
+ backupList: '백업',
+ loadBackup: '불러오기',
+ remoteAccess: '원격 접근',
+ remoteHelper: '여러 IP 를 쉼표로 구분하여 입력, 예: 172.16.10.111, 172.16.10.112',
+ remoteConnHelper:
+ 'MySQL 의 root 사용자로 원격 접속은 보안 위험을 초래할 수 있습니다. 따라서 이 작업은 신중히 수행해야 합니다.',
+ changePassword: '비밀번호',
+ changePasswordHelper:
+ '데이터베이스가 애플리케이션과 연결되어 있습니다. 비밀번호를 변경하면 애플리케이션의 데이터베이스 비밀번호도 변경됩니다. 변경 사항은 애플리케이션이 재시작된 후에 적용됩니다.',
+ confChange: '설정',
+ confNotFound:
+ '설정 파일을 찾을 수 없습니다. 앱 스토어에서 애플리케이션을 최신 버전으로 업그레이드하고 다시 시도해주세요!',
+ portHelper: '이 포트는 컨테이너의 노출된 포트입니다. 수정을 별도로 저장하고 컨테이너를 재시작해야 합니다!',
+ loadFromRemote: '동기화',
+ userBind: '사용자 바인딩',
+ pgBindHelper: `이 작업은 새 사용자를 생성하여 대상 데이터베이스에 바인딩하는 데 사용됩니다. 현재 데이터베이스에 이미 존재하는 사용자 선택은 지원되지 않습니다.`,
+ pgSuperUser: '슈퍼 사용자',
+ loadFromRemoteHelper: '이 작업은 서버의 데이터베이스 정보를 1Panel로 동기화합니다. 계속 진행하시겠습니까?',
+ passwordHelper: '불러올 수 없습니다. 수정해주세요.',
+ local: '로컬',
+ remote: '원격',
+ remoteDB: '원격 서버 | 원격 서버들',
+ manageRemoteDB: '원격 DB 관리',
+ createRemoteDB: '원격 DB 바인딩',
+ unBindRemoteDB: '원격 DB 바인딩 해제',
+ unBindForce: '강제 바인딩 해제',
+ unBindForceHelper: '바인딩 해제 중 발생하는 모든 오류를 무시하고 최종 작업을 성공적으로 완료합니다.',
+ unBindRemoteHelper:
+ '원격 데이터베이스 바인딩 해제는 바인딩 관계만 제거하며, 원격 데이터베이스 자체는 삭제되지 않습니다.',
+ editRemoteDB: '원격 서버 편집',
+ localDB: '로컬 데이터베이스',
+ address: '데이터베이스 주소',
+ version: '데이터베이스 버전',
+ userHelper: '루트 사용자 또는 루트 권한을 가진 데이터베이스 사용자가 원격 데이터베이스에 접근할 수 있습니다.',
+ pgUserHelper: '슈퍼 사용자 권한을 가진 데이터베이스 사용자.',
+ ssl: 'SSL 사용',
+ clientKey: '클라이언트 개인 키',
+ clientCert: '클라이언트 인증서',
+ caCert: 'CA 인증서',
+ hasCA: 'CA 인증서 있음',
+ skipVerify: '인증서 유효성 검사 무시',
+
+ formatHelper: '현재 데이터베이스 문자셋은 {0} 입니다. 문자셋 불일치로 인해 복구에 실패할 수 있습니다.',
+ selectFile: '파일 선택',
+ dropHelper: '여기에 업로드한 파일을 드래그 앤 드롭하거나',
+ clickHelper: '클릭하여 업로드',
+ supportUpType: 'sql, sql.gz, tar.gz 파일만 지원됩니다.',
+ zipFormat: 'tar.gz 압축 패키지 구조: test.tar.gz 압축 패키지에는 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: '재시작',
+
+ log: '로그',
+ slowLog: '느린 로그',
+ noData: '아직 느린 로그가 없습니다.',
+
+ isOn: '켜짐',
+ longQueryTime: '임계값(s)',
+ thresholdRangeHelper: '올바른 임계값을 입력하십시오 (1 - 600).',
+
+ timeout: '타임아웃',
+ 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}]으로 덮어씁니다. 계속하시겠습니까?',
+ submitIt: '데이터 덮어쓰기',
+
+ baseConf: '기본 설정',
+ allConf: '모든 설정',
+ restartNow: '지금 재시작',
+ restartNowHelper1:
+ '구성 변경 사항이 적용되려면 시스템을 재시작해야 합니다. 데이터가 지속되어야 하는 경우 먼저 저장 작업을 수행하십시오.',
+ restartNowHelper: '이 작업은 시스템이 재시작된 후에만 적용됩니다.',
+
+ persistence: '지속성',
+ rdbHelper1: '초 단위, 삽입',
+ rdbHelper2: '데이터 항목 수',
+ rdbHelper3: '조건을 충족하면 RDB 지속성이 트리거됩니다.',
+ rdbInfo: '규칙 목록의 값이 1에서 100000 사이여야 합니다.',
+
+ containerConn: '컨테이너 연결',
+ connAddress: '주소',
+ connPort: '포트',
+ containerConnHelper:
+ '이 연결 주소는 웹사이트 런타임(PHP 등) 또는 컨테이너에서 실행 중인 애플리케이션에서 사용할 수 있습니다.',
+ remoteConn: '외부 연결',
+ remoteConnHelper2:
+ '이 연결 주소는 컨테이너 외부 또는 외부 애플리케이션에서 실행 중인 애플리케이션에서 사용할 수 있습니다.',
+ localIP: '로컬 IP',
+ },
+ container: {
+ create: '컨테이너 만들기',
+ edit: '컨테이너 편집',
+ updateHelper1: '이 컨테이너가 앱 스토어에서 왔음을 감지했습니다. 다음 두 가지 사항을 유의하십시오:',
+ updateHelper2: '1. 현재 수정 사항은 앱 스토어에 설치된 애플리케이션에 동기화되지 않습니다.',
+ updateHelper3: '2. 설치된 페이지에서 애플리케이션을 수정하면 현재 편집된 내용이 무효화됩니다.',
+ updateHelper4: '컨테이너 편집에는 재빌드가 필요하며, 비지속적인 데이터는 손실됩니다. 계속하시겠습니까?',
+ containerList: '컨테이너 목록',
+ operatorHelper: '{0} 작업이 다음 컨테이너에서 수행됩니다. 계속하시겠습니까?',
+ operatorAppHelper:
+ '"{0}" 작업이 다음 컨테이너에서 수행되며, 실행 중인 서비스에 영향을 미칠 수 있습니다. 계속하시겠습니까?',
+ 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}입니다!',
+ container: '컨테이너 | 컨테이너들',
+ unExposedPort: '현재 포트 매핑 주소는 127.0.0.1로 외부 액세스를 활성화할 수 없습니다.',
+ upTime: '업타임',
+ all: '모두',
+ fetch: '가져오기',
+ lines: '라인',
+ linesHelper: '올바른 로그 수를 입력하세요!',
+ lastDay: '지난 하루',
+ last4Hour: '지난 4시간',
+ lastHour: '지난 1시간',
+ last10Min: '지난 10분',
+ cleanLog: '로그 정리',
+ downLogHelper1: '이 작업은 컨테이너 {0}의 모든 로그를 다운로드합니다. 계속하시겠습니까?',
+ downLogHelper2: '이 작업은 컨테이너 {0}의 최근 {0}개의 로그를 다운로드합니다. 계속하시겠습니까?',
+ cleanLogHelper: '이 작업은 컨테이너를 재시작해야 하며 취소할 수 없습니다. 계속하시겠습니까?',
+ newName: '새 이름',
+ source: '리소스 사용',
+ cpuUsage: 'CPU 사용',
+ cpuTotal: '전체 CPU',
+ core: '코어',
+ memUsage: '메모리 사용',
+ memTotal: '메모리 한도',
+ memCache: '메모리 캐시',
+ ip: 'IP 주소',
+ cpuShare: 'CPU 공유',
+ cpuShareHelper:
+ '컨테이너 엔진은 기본값으로 1024를 사용합니다. 이를 늘리면 컨테이너에 더 많은 CPU 시간을 할당할 수 있습니다.',
+ inputIpv4: '예시: 192.168.1.1',
+ inputIpv6: '예시: 2001:0db8:85a3:0000:0000:8a2e:0370:7334',
+ containerFromAppHelper:
+ '이 컨테이너가 앱 스토어에서 왔음을 감지했습니다. 앱 작업으로 현재 편집이 무효화될 수 있습니다.',
+ containerFromAppHelper1:
+ '설치된 애플리케이션 목록에서 [매개변수] 버튼을 클릭하여 편집 페이지로 이동하고 컨테이너 이름을 수정하세요.',
+ command: '명령어',
+ console: '컨테이너 상호작용',
+ tty: '가상 TTY 할당 (-t)',
+ openStdin: 'STDIN 을 열어둡니다. 연결되지 않더라도 계속 열려있습니다 (-i)',
+ custom: '사용자 정의',
+ emptyUser: '비워두면 기본값으로 로그인합니다.',
+ containerTerminal: '터미널',
+ privileged: '특권 모드',
+ privilegedHelper:
+ '컨테이너가 호스트에서 특정 특권 작업을 수행할 수 있도록 허용합니다. 이는 보안 위험을 초래할 수 있으므로 주의해서 사용하십시오.',
+ editComposeHelper:
+ '참고: 설정된 환경 변수는 기본적으로 1panel.env 파일에 작성됩니다. 컨테이너에서 이러한 매개변수를 사용하려면 compose 파일에 env_file 참조를 수동으로 추가해야 합니다.',
+ upgradeHelper: '레포지토리 이름/이미지 이름: 이미지 버전',
+ upgradeWarning2:
+ '업그레이드 작업은 컨테이너를 재빌드해야 하며, 비지속적인 데이터가 손실됩니다. 계속하시겠습니까?',
+ oldImage: '현재 이미지',
+ targetImage: '대상 이미지',
+ imageLoadErr: '컨테이너에 대한 이미지 이름이 감지되지 않았습니다.',
+ appHelper: '이 컨테이너는 앱 스토어에서 왔으며 업그레이드 시 서비스가 중단될 수 있습니다.',
+ input: '수동 입력',
+ forcePull: '이미지 강제 풀',
+ forcePullHelper: '이 작업은 서버에 있는 기존 이미지를 무시하고 레지스트리에서 최신 이미지를 강제로 가져옵니다.',
+ 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: '저장소 볼륨의 내용이 올바른지 확인하십시오.',
+ modeRW: '읽기/쓰기',
+ modeR: '읽기 전용',
+ mode: '모드',
+ env: '환경',
+ restartPolicy: '재시작 정책',
+ always: '항상',
+ unlessStopped: '중지되지 않는 한',
+ onFailure: '실패 시 (기본 5회)',
+ no: '절대',
+ monitor: '모니터',
+ refreshTime: '새로 고침 간격',
+ cache: '캐시',
+ image: '이미지 | 이미지들',
+ imagePull: '풀',
+ imagePush: '푸시',
+ imageDelete: '이미지 삭제',
+ imageDeleteTag: '이미지 태그 삭제',
+ imageTagDeleteHelper: '이 이미지 ID와 관련된 다른 태그를 제거합니다.',
+ repoName: '컨테이너 저장소 이름',
+ imageName: '이미지 이름',
+ pull: '풀',
+ path: '경로',
+ importImage: '가져오기',
+ build: '빌드',
+ imageBuild: '이미지 빌드',
+ pathSelect: '경로',
+ label: '레이블',
+ imageTag: '이미지 태그',
+ push: '푸시',
+ fileName: '파일 이름',
+ export: '내보내기',
+ exportImage: '이미지 내보내기',
+ version: '버전',
+ size: '크기',
+ from: '출처',
+ tag: '태그',
+ tagHelper: '한 줄에 하나씩. 예시:\nkey1=value1\nkey2=value2',
+ imageNameHelper: '이미지 이름과 태그, 예시: nginx:latest',
+ cleanBuildCache: '빌드 캐시 정리',
+ delBuildCacheHelper: `이 작업은 빌드 중 생성된 모든 캐시된 아티팩트를 삭제하며 되돌릴 수 없습니다. 계속 하시겠습니까?`,
+ urlWarning: 'URL 접두어에 http:// 또는 https://를 포함할 필요는 없습니다. 수정해 주세요.',
+
+ network: '네트워크 | 네트워크들',
+ networkHelper: '이로 인해 일부 애플리케이션과 실행 환경이 제대로 작동하지 않을 수 있습니다. 계속 하시겠습니까?',
+ createNetwork: '생성',
+ networkName: '이름',
+ driver: '드라이버',
+ option: '옵션',
+ attachable: '연결 가능',
+ subnet: '서브넷',
+ scope: 'IP 범위',
+ gateway: '게이트웨이',
+ auxAddress: '제외 IP',
+
+ volume: '볼륨 | 볼륨들',
+ volumeDir: '볼륨 디렉터리',
+ nfsEnable: 'NFS 스토리지 사용',
+ nfsAddress: '주소',
+ mountpoint: '마운트 지점',
+ mountpointNFSHelper: '예: /nfs, /nfs-share',
+ options: '옵션',
+ createVolume: '생성',
+
+ repo: '레지스트리',
+ createRepo: '추가',
+ 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: '컴포즈 | 컴포즈들',
+ fromChangeHelper: '소스를 변경하면 현재 편집한 내용이 삭제됩니다. 계속 하시겠습니까?',
+ composePathHelper: '구성 파일 저장 경로: {0}',
+ composeHelper: '1Panel 에디터나 템플릿을 통해 생성된 컴포지션은 {0}/docker/compose 디렉토리에 저장됩니다.',
+ deleteFile: '파일 삭제',
+ allDelete: '영구 삭제',
+ deleteComposeHelper:
+ '이 작업은 컴포즈와 관련된 모든 파일을 삭제합니다. 구성을 포함한 지속적인 파일도 포함됩니다. 신중히 진행해 주세요!',
+ deleteCompose: '" 이 컴포즈를 삭제하시겠습니까?',
+ apps: '앱 스토어',
+ local: '로컬',
+ createCompose: '생성',
+ composeDirectory: '디렉토리',
+ template: '템플릿',
+ composeTemplate: '컴포즈 템플릿 | 컴포즈 템플릿들',
+ createComposeTemplate: '생성',
+ description: '설명',
+ content: '내용',
+ contentEmpty: '컴포즈 내용이 비어 있습니다. 입력 후 다시 시도해 주세요!',
+ containerNumber: '컨테이너 수',
+ containerStatus: '컨테이너 상태',
+ exited: '종료됨',
+ running: '실행 중',
+ down: '중지됨',
+ up: '실행됨',
+ composeDetailHelper: '이 컴포즈는 1Panel 외부에서 생성되었습니다. 시작 및 중지 작업은 지원되지 않습니다.',
+ composeOperatorHelper: '{1} 작업이 {0}에서 수행됩니다. 계속 하시겠습니까?',
+ composeDownHelper:
+ '이 작업은 {0} 컴포즈 아래의 모든 컨테이너와 네트워크를 중지하고 제거합니다. 계속 하시겠습니까?',
+
+ setting: '설정 | 설정들',
+ operatorStatusHelper: '이 작업은 Docker 서비스를 "{0}" 합니다. 계속 하시겠습니까?',
+ dockerStatus: 'Docker 서비스',
+ daemonJsonPathHelper: '구성 경로가 docker.service 에 지정된 경로와 동일한지 확인하십시오.',
+ mirrors: '레지스트리 미러들',
+ mirrorsHelper: '',
+ 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: '앱 스토어에서 컨테이너 표시',
+
+ cleanDockerDiskZone: 'Docker 에서 사용하는 디스크 공간 정리',
+ cleanImagesHelper: '(사용되지 않는 모든 이미지를 정리합니다.)',
+ cleanContainersHelper: '(정지된 모든 컨테이너를 정리합니다.)',
+ cleanVolumesHelper: '(사용되지 않는 모든 로컬 볼륨을 정리합니다.)',
+
+ makeImage: '이미지 생성',
+ newImageName: '새 이미지 이름',
+ commitMessage: '커밋 메시지',
+ author: '작성자',
+ ifPause: '생성 중 컨테이너 일시 정지',
+ ifMakeImageWithContainer: '이 컨테이너에서 새 이미지를 생성하시겠습니까?',
+ },
+ cronjob: {
+ create: '크론 작업 생성',
+ edit: '크론 작업 수정',
+ cronTask: '크론 작업 | 크론 작업들',
+ changeStatus: '상태 변경',
+ disableMsg: '이 작업은 예약된 작업이 자동으로 실행되지 않도록 멈춥니다. 계속하시겠습니까?',
+ enableMsg: '이 작업은 예약된 작업이 자동으로 실행되도록 허용합니다. 계속하시겠습니까?',
+ taskType: '작업 유형',
+ record: '레코드',
+ viewRecords: '레코드 보기',
+ shell: '셸',
+ log: '백업 로그',
+ logHelper: '시스템 백업 로그',
+ ogHelper1: '1. 1Panel 시스템 로그',
+ logHelper2: '2. 서버 SSH 로그인 로그',
+ logHelper3: '3. 모든 사이트 로그',
+ containerCheckBox: '컨테이너 내 (컨테이너 명령어 입력 불필요)',
+ containerName: '컨테이너 이름',
+ ntp: '시간 동기화',
+ ntp_helper: 'Toolbox 의 빠른 설정 페이지에서 NTP 서버를 구성할 수 있습니다.',
+ app: '백업 앱',
+ website: '백업 웹사이트',
+ rulesHelper: '여러 개의 압축 제외 규칙이 있을 경우 줄 바꿈으로 표시해야 합니다. 예시:\n*.log \n*.sql',
+ lastRecordTime: '마지막 실행 시간',
+ all: '전체',
+ failedRecord: '실패한 레코드',
+ successRecord: '성공한 레코드',
+ database: '백업 데이터베이스',
+ missBackupAccount: '백업 계정을 찾을 수 없습니다',
+ syncDate: '동기화 시간',
+ clean: '캐시 정리',
+ curl: '접속 URL',
+ taskName: '작업 이름',
+ cronSpec: '트리거 주기',
+ cronSpecHelper: '올바른 실행 주기를 입력해 주세요',
+ cleanHelper: '이 작업은 모든 작업 실행 레코드, 백업 파일, 로그 파일을 기록합니다. 계속하시겠습니까?',
+ directory: '백업 디렉토리',
+ sourceDir: '백업 디렉토리',
+ snapshot: '시스템 스냅샷',
+ allOptionHelper: `현재 작업 계획은 모든 [{0}]을 백업하는 것입니다. 현재 직접 다운로드는 지원되지 않습니다. [{0}] 메뉴에서 백업 목록을 확인하실 수 있습니다.`,
+ exclusionRules: '배제 규칙',
+ exclusionRulesHelper: '배제 규칙은 이 백업의 모든 압축 작업에 적용됩니다.',
+ default_download_path: '기본 다운로드 링크',
+ saveLocal: '로컬 백업 보관 (클라우드 저장소 복사본 수와 동일)',
+ url: 'URL 주소',
+ targetHelper: '백업 계정은 패널 설정에서 관리됩니다.',
+ retainCopies: '기록 보관',
+ 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: '일',
+ dayUnit: 'd',
+ monday: '월요일',
+ tuesday: '화요일',
+ wednesday: '수요일',
+ thursday: '목요일',
+ friday: '금요일',
+ saturday: '토요일',
+ sunday: '일요일',
+ shellContent: '스크립트',
+ errRecord: '잘못된 로깅',
+ errHandle: '크론 작업 실행 실패',
+ noRecord: '크론 작업을 트리거하고 나면 여기에 레코드가 표시됩니다.',
+ cleanData: '데이터 정리',
+ cleanDataHelper: '이 작업에서 생성된 백업 파일을 삭제합니다.',
+ noLogs: '작업 출력이 아직 없습니다...',
+ errPath: '백업 경로 [{0}] 오류, 다운로드할 수 없습니다!',
+ cutWebsiteLog: '웹사이트 로그 회전',
+ cutWebsiteLogHelper: '회전된 로그 파일은 1Panel 의 백업 디렉토리로 백업됩니다.',
+ requestExpirationTime: '업로드 요청 만료 시간(시간)',
+ unitHours: '단위: 시간',
+ alertTitle: '예정된 작업 - {0} 「{1}」 작업 실패 경고',
+ },
+ monitor: {
+ monitor: '모니터링',
+ globalFilter: '전역 필터',
+ enableMonitor: '활성화',
+ storeDays: '만료일',
+ cleanMonitor: '모니터링 기록 정리',
+
+ avgLoad: '평균 부하',
+ loadDetail: '부하 세부사항',
+ resourceUsage: '자원 사용률',
+ networkCard: '네트워크 인터페이스',
+ read: '읽기',
+ write: '쓰기',
+ readWriteCount: 'I/O 작업',
+ readWriteTime: 'I/O 지연 시간',
+ today: '오늘',
+ yesterday: '어제',
+ lastNDay: '최근 {0}일',
+ memory: '메모리',
+ cache: '캐시',
+ disk: '디스크',
+ network: '네트워크',
+ up: '업',
+ down: '다운',
+ interval: '간격(분)',
+
+ gpuUtil: 'GPU 사용률',
+ temperature: '온도',
+ performanceState: '성능 상태',
+ powerUsage: '전력 사용량',
+ memoryUsage: '메모리 사용량',
+ fanSpeed: '팬 속도',
+ },
+ terminal: {
+ conn: '연결',
+ connLocalErr: '자동 인증에 실패했습니다. 로컬 서버 로그인 정보를 입력해주세요.',
+ testConn: '연결 테스트',
+ saveAndConn: '저장 후 연결',
+ connTestOk: '연결 정보가 유효합니다.',
+ connTestFailed: '연결할 수 없습니다. 연결 정보를 확인해주세요.',
+ host: '호스트 | 호스트들',
+ createConn: '새 연결',
+ group: '그룹',
+ manageGroup: '그룹 관리',
+ noHost: '호스트 없음',
+ groupChange: '그룹 변경',
+ expand: '모두 확장',
+ fold: '모두 축소',
+ batchInput: '배치 처리',
+ quickCommand: '빠른 명령 | 빠른 명령들',
+ quickCommandHelper: '"터미널 -> 터미널" 하단에서 빠른 명령을 사용할 수 있습니다.',
+ groupDeleteHelper: '그룹을 제거하면 해당 그룹의 모든 연결이 기본 그룹으로 이동됩니다. 계속하시겠습니까?',
+ command: '명령',
+ quickCmd: '빠른 명령',
+ addHost: '추가',
+ localhost: '로컬호스트',
+ ip: '주소',
+ authMode: '인증 방식',
+ passwordMode: '비밀번호',
+ rememberPassword: '인증 정보 기억하기',
+ keyMode: '개인 키',
+ key: '개인 키',
+ keyPassword: '개인 키 비밀번호',
+ emptyTerminal: '현재 연결된 터미널이 없습니다.',
+ },
+ toolbox: {
+ 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 구성 정보가 유효하지 않습니다.',
+ },
+ fail2ban: {
+ sshPort: 'SSH 포트 청취',
+ sshPortHelper: '현재 Fail2ban 은 호스트의 SSH 연결 포트를 청취합니다.',
+ noFail2ban: 'Fail2ban 서비스가 감지되지 않았습니다. 공식 문서를 참조하여 설치하세요.',
+ 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 계정들',
+ noFtp: `FTP (pure-ftpd) 서비스가 감지되지 않았습니다. 공식 문서를 참조하여 설치하세요.`,
+ operation: 'FTP 서비스에서 "{0}" 작업을 수행합니다. 계속하시겠습니까?',
+ noPasswdMsg: '현재 FTP 계정의 비밀번호를 가져올 수 없습니다. 비밀번호를 설정한 후 다시 시도하세요!',
+ enableHelper: '선택한 FTP 계정을 활성화하면 접근 권한이 복원됩니다. 계속하시겠습니까?',
+ disableHelper: '선택한 FTP 계정을 비활성화하면 접근 권한이 취소됩니다. 계속하시겠습니까?',
+ syncHelper: '서버와 데이터베이스 간의 FTP 계정 데이터를 동기화합니다. 계속하시겠습니까?',
+ },
+ clam: {
+ clam: '바이러스 검사',
+ cron: '예약 스캔',
+ cronHelper: '전문 버전에서 예약 스캔 기능을 지원합니다.',
+ specErr: '실행 일정 형식 오류입니다. 확인 후 다시 시도하세요!',
+ disableMsg: '예약 실행을 중지하면 이 스캔 작업이 자동으로 실행되지 않습니다. 계속하시겠습니까?',
+ enableMsg: '예약 실행을 활성화하면 이 스캔 작업이 정기적으로 자동 실행됩니다. 계속하시겠습니까?',
+ showFresh: '서명 업데이트 서비스 표시',
+ hideFresh: '서명 업데이트 서비스 숨기기',
+ clamHelper:
+ 'ClamAV의 최소 권장 구성은 다음과 같습니다: RAM 3 GiB 이상, 2.0 GHz 이상의 단일 코어 CPU, 최소 5 GiB의 사용 가능한 하드 디스크 공간.',
+ noClam: 'ClamAV 서비스가 감지되지 않았습니다. 공식 문서를 참조하여 설치하세요!',
+ notStart: 'ClamAV 서비스가 현재 실행 중이 아닙니다. 먼저 시작하세요!',
+ removeRecord: '보고서 파일 삭제',
+ noRecords: '"Trigger" 버튼을 클릭하여 스캔을 시작하면 이곳에서 기록을 확인할 수 있습니다.',
+ removeResultHelper: '작업 실행 중 생성된 보고서 파일을 삭제하여 저장 공간을 확보합니다.',
+ removeInfected: '바이러스 파일 삭제',
+ removeInfectedHelper: '작업 중 감지된 바이러스 파일을 삭제하여 서버 보안 및 정상 작동을 보장합니다.',
+ clamCreate: '스캔 규칙 생성',
+ infectedStrategy: '감염 파일 처리 전략',
+ remove: '삭제',
+ removeHelper: '바이러스 파일을 삭제합니다. 신중히 선택하세요!',
+ move: '이동',
+ moveHelper: '바이러스 파일을 지정된 디렉토리로 이동합니다.',
+ copy: '복사',
+ copyHelper: '바이러스 파일을 지정된 디렉토리로 복사합니다.',
+ none: '조치 안 함',
+ noneHelper: '바이러스 파일에 대해 아무 조치도 취하지 않습니다.',
+ scanDir: '스캔 디렉토리',
+ infectedDir: '감염 파일 디렉토리',
+ scanDate: '스캔 날짜',
+ scanResult: '스캔 로그 출력',
+ tail: '라인',
+ scanTime: '소요 시간',
+ infectedFiles: '감염된 파일',
+ log: '상세 내용',
+ clamConf: 'Clam AV 데몬',
+ clamLog: '@:toolbox.clam.clamConf 로그',
+ freshClam: 'FreshClam',
+ freshClamLog: '@:toolbox.clam.freshClam 로그',
+ alertHelper: '전문 버전에서 예약 스캔 및 SMS 알림을 지원합니다.',
+ alertTitle: '바이러스 스캔 작업 「{0}」에서 감염된 파일을 발견했습니다.',
+ },
+ },
+ logs: {
+ panelLog: '패널 로그',
+ operation: '작업 로그',
+ login: '로그인 로그',
+ loginIP: '로그인 IP',
+ loginAddress: '로그인 주소',
+ loginAgent: '로그인 에이전트',
+ loginStatus: '상태',
+ system: '시스템 로그',
+ deleteLogs: '로그 정리',
+ resource: '자원',
+ operate: '작업',
+ detail: {
+ groups: '그룹',
+ hosts: '호스트',
+ apps: '애플리케이션',
+ websites: '웹사이트',
+ containers: '컨테이너',
+ files: '파일 관리',
+ runtimes: '런타임',
+ process: '프로세스',
+ toolbox: '도구상자',
+ logs: '패널 로그',
+ settings: '패널 설정',
+ cronjobs: '크론 작업',
+ databases: '데이터베이스',
+ },
+ websiteLog: '웹사이트 로그',
+ runLog: '실행 로그',
+ errLog: '에러 로그',
+ },
+ file: {
+ dir: '폴더',
+ upload: '업로드',
+ uploadFile: '@:file.upload @.lower:file.file',
+ uploadDirectory: '@:file.upload @.lower:file.dir',
+ download: '다운로드',
+ fileName: '파일 이름',
+ search: '검색',
+ mode: '권한',
+ editPermissions: '@:file.mode',
+ owner: '소유자',
+ file: '파일',
+ remoteFile: '원격에서 다운로드',
+ share: '공유',
+ sync: '데이터 동기화',
+ size: '크기',
+ updateTime: '수정됨',
+ open: '열기',
+ rename: '이름 바꾸기',
+ role: '권한',
+ info: '속성',
+ linkFile: '소프트 링크',
+ terminal: '터미널',
+ batchoperation: '일괄 작업',
+ shareList: '공유 목록',
+ 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: '다운로드 시작됨',
+ moveSuccess: '이동 성공',
+ copySuccess: '복사 성공',
+ move: '이동',
+ copy: '복사',
+ calculate: '계산',
+ canNotDeCompress: '이 파일은 압축 해제할 수 없습니다',
+ uploadSuccess: '업로드 성공',
+ downloadProcess: '다운로드 진행률',
+ downloading: '다운로드 중...',
+ infoDetail: '파일 속성',
+ root: '루트 디렉터리',
+ list: '파일 목록',
+ sub: '하위 폴더',
+ downloadSuccess: '다운로드 성공',
+ theme: '테마',
+ language: '언어',
+ eol: '줄 끝',
+ copyDir: '복사',
+ paste: '붙여넣기',
+ cancel: '취소',
+ changeOwner: '사용자 및 그룹 수정',
+ containSub: '권한 변경을 하위 폴더에 적용',
+ ownerHelper:
+ 'PHP 운영 환경의 기본 사용자: 사용자 그룹은 1000:1000 입니다. 컨테이너 내부 및 외부에서 표시되는 불일치는 정상입니다.',
+ searchHelper: '* 등의 와일드카드를 지원합니다',
+ uploadFailed: '[{0}] 파일 업로드 실패',
+ fileUploadStart: '[{0}] 업로드 중....',
+ currentSelect: '현재 선택: ',
+ unsupportedType: '지원되지 않는 파일 유형',
+ deleteHelper: '다음 파일을 삭제하시겠습니까? 기본적으로 삭제 후 휴지통으로 이동합니다.',
+ fileHelper: `참고:\n1. 검색 결과는 정렬할 수 없습니다.\n2. 폴더는 크기로 정렬할 수 없습니다.`,
+ forceDeleteHelper: '파일을 영구적으로 삭제합니다(휴지통으로 이동하지 않고 바로 삭제).',
+ recycleBin: '휴지통',
+ sourcePath: '원래 경로',
+ deleteTime: '삭제 시간',
+ confirmReduce: '다음 파일을 복원하시겠습니까?',
+ reduceSuccess: '복원 성공',
+ reduce: '복원',
+ reduceHelper: '원래 경로에 동일한 이름의 파일이나 디렉터리가 있으면 덮어씁니다. 계속하시겠습니까?',
+ clearRecycleBin: '정리',
+ clearRecycleBinHelper: '휴지통을 정리하시겠습니까?',
+ favorite: '즐겨찾기',
+ removeFavorite: '즐겨찾기에서 제거하시겠습니까?',
+ addFavorite: '즐겨찾기에 추가',
+ clearList: '목록 정리',
+ deleteRecycleHelper: '다음 파일을 영구적으로 삭제하시겠습니까?',
+ typeErrOrEmpty: '[{0}] 파일 유형이 잘못되었거나 빈 폴더입니다.',
+ dropHelper: '업로드하려는 파일을 여기에 드래그하세요',
+ fileRecycleBin: '휴지통 활성화',
+ fileRecycleBinMsg: '{0} 휴지통',
+ wordWrap: '자동 줄바꿈',
+ deleteHelper2: '선택한 파일을 삭제하시겠습니까? 삭제 작업은 되돌릴 수 없습니다.',
+ ignoreCertificate: '안전하지 않은 서버 연결 허용',
+ ignoreCertificateHelper:
+ '안전하지 않은 서버 연결을 허용하면 데이터 유출 또는 변조가 발생할 수 있습니다. 이 옵션은 다운로드 소스를 신뢰할 때만 사용하세요.',
+ uploadOverLimit: '파일 수가 1000 개를 초과했습니다! 압축하여 업로드하세요.',
+ clashDitNotSupport: '파일 이름에 .1panel_clash 를 포함할 수 없습니다.',
+ clashDeleteAlert: `"휴지통" 폴더는 삭제할 수 없습니다.`,
+ clashOpenAlert: '휴지통 디렉터리를 열려면 "휴지통" 버튼을 클릭하세요.',
+ right: '앞으로',
+ back: '뒤로',
+ top: '처음으로 돌아가기',
+ refresh: '새로고침',
+ up: '뒤로가기',
+ openWithVscode: 'VS Code 로 열기',
+ vscodeHelper: '로컬에 VS Code 가 설치되어 있고 SSH Remote 플러그인이 구성되어 있는지 확인하세요.',
+ saveContentAndClose: '파일이 수정되었습니다. 저장 후 닫으시겠습니까?',
+ saveAndOpenNewFile: '파일이 수정되었습니다. 저장 후 새 파일을 열겠습니까?',
+ noEdit: '파일이 수정되지 않았습니다. 이 작업은 필요하지 않습니다!',
+ noNameFolder: '제목 없는 폴더',
+ noNameFile: '제목 없는 파일',
+ minimap: '코드 미니맵',
+ fileCanNotRead: '파일을 읽을 수 없습니다.',
+ panelInstallDir: `1Panel 설치 디렉터리는 삭제할 수 없습니다.`,
+ },
+ ssh: {
+ setting: '설정',
+ 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: '키 인증',
+ key: '키',
+ password: '비밀번호',
+ pubkey: '키 정보',
+ encryptionMode: '암호화 모드',
+ passwordHelper: '6~10자리 숫자 및 영어 대소문자를 포함할 수 있습니다.',
+ generate: '키 생성',
+ reGenerate: '키 재생성',
+ keyAuthHelper: '키 인증을 활성화할지 여부입니다.',
+ useDNS: 'useDNS',
+ dnsHelper: 'SSH 서버에서 DNS 확인 기능을 활성화하여 연결의 신원을 확인할지 여부를 제어합니다.',
+ analysis: '통계 정보',
+ denyHelper:
+ "'거부' 작업을 다음 주소에서 수행합니다. 설정 후 해당 IP는 서버에 접근할 수 없습니다. 계속하시겠습니까?",
+ acceptHelper:
+ "'수락' 작업을 다음 주소에서 수행합니다. 설정 후 해당 IP는 정상적으로 접근할 수 있습니다. 계속하시겠습니까?",
+ noAddrWarning: '현재 [{0}] 주소가 선택되지 않았습니다. 확인 후 다시 시도하십시오!',
+ successful: '성공',
+ failed: '실패',
+ loginLogs: '로그인 로그',
+ loginMode: '모드',
+ authenticating: '키',
+ publickey: '키',
+ belong: '소속',
+ local: '로컬',
+ config: '구성',
+ session: '세션 | 세션들',
+ loginTime: '로그인 시간',
+ loginIP: '로그인 IP',
+ disconnect: '연결 끊기',
+ stopSSHWarn: '이 SSH 연결을 끊으시겠습니까?',
+ },
+ setting: {
+ all: '모두',
+ panel: '패널',
+ user: '패널 사용자',
+ userChange: '패널 사용자 변경',
+ userChangeHelper: '패널 사용자를 변경하면 로그아웃됩니다. 계속하시겠습니까?',
+ passwd: '패널 비밀번호',
+ emailHelper: '비밀번호 복구용',
+ title: '패널 별칭',
+ panelPort: '패널 포트',
+ titleHelper: '영문자, 한자, 숫자, 공백, 일반 특수 문자를 포함하여 3~30자의 길이를 지원합니다.',
+ portHelper:
+ '권장 포트 범위는 8888에서 65535 사이입니다. 참고: 서버에 보안 그룹이 있는 경우, 보안 그룹에서 새로운 포트를 사전에 허용해야 합니다.',
+ portChange: '포트 변경',
+ portChangeHelper: '서비스 포트를 수정하고 서비스를 다시 시작합니다. 계속하시겠습니까?',
+ theme: '테마',
+ menuTabs: '메뉴 탭',
+ dark: '다크',
+ darkGold: '다크 골드',
+ light: '라이트',
+ auto: '시스템 따라가기',
+ language: '언어',
+ languageHelper: '기본적으로 브라우저 언어를 따릅니다. 이 설정은 현재 브라우저에서만 적용됩니다.',
+ sessionTimeout: '세션 타임아웃',
+ sessionTimeoutError: '최소 세션 타임아웃은 300초입니다.',
+ sessionTimeoutHelper: '패널에서 {0}초 이상 조작이 없을 경우 자동으로 로그아웃됩니다.',
+ systemIP: '시스템 주소',
+ proxy: '서버 프록시',
+ proxyHelper: '프록시 서버를 설정한 후 다음 시나리오에서 적용됩니다:',
+ proxyHelper1: '설치 패키지 다운로드 및 앱 스토어 동기화 (전문 버전에서만 제공)',
+ proxyHelper2: '시스템 업데이트 및 업데이트 정보 가져오기 (전문 버전에서만 제공)',
+ proxyHelper4: 'Docker 네트워크가 프록시 서버를 통해 액세스됩니다 (전문 버전에서만 제공)',
+ proxyHelper3: '시스템 라이선스 인증 및 동기화',
+ proxyType: '프록시 유형',
+ proxyUrl: '프록시 주소',
+ proxyPort: '프록시 포트',
+ proxyPasswdKeep: '비밀번호 기억',
+ proxyDocker: 'Docker 프록시',
+ proxyDockerHelper:
+ '프록시 서버 구성을 Docker 에 동기화하여 오프라인 서버 이미지 가져오기 등의 작업을 지원합니다.',
+ 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 에 접근할 수 있습니다.',
+ apiKeyValidityTime: '인터페이스 키 유효 기간',
+ apiKeyValidityTimeEgs: '인터페이스 키 유효 기간 (분 단위)',
+ apiKeyValidityTimeHelper:
+ '인터페이스 타임스탬프가 현재 타임스탬프와의 차이가 허용 범위 내에 있을 경우 유효합니다. 값이 0이면 검증이 비활성화됩니다.',
+ apiKeyReset: '인터페이스 키 재설정',
+ apiKeyResetHelper: '연관된 키 서비스가 무효화됩니다. 서비스에 새 키를 추가하십시오.',
+ confDockerProxy: 'Docker 프록시 구성',
+ restartNowHelper: 'Docker 프록시 구성을 위해 Docker 서비스를 재시작해야 합니다.',
+ restartNow: '즉시 재시작',
+ systemIPWarning: '서버 주소가 현재 설정되지 않았습니다. 제어 패널에서 먼저 설정하십시오.',
+ systemIPWarning1: '현재 서버 주소는 {0}으로 설정되어 있어 빠른 리디렉션이 불가능합니다!',
+ defaultNetwork: '네트워크 카드',
+ syncTime: '서버 시간',
+ timeZone: '시간대',
+ timeZoneChangeHelper: '시간대를 변경하면 서비스를 재시작해야 합니다. 계속하시겠습니까?',
+ timeZoneHelper: '시간대 변경은 시스템 timedatectl 서비스에 따라 작동하며, 1Panel 서비스 재시작 후 적용됩니다.',
+ timeZoneCN: '베이징',
+ timeZoneAM: '로스앤젤레스',
+ timeZoneNY: '뉴욕',
+ ntpALi: '알리바바',
+ ntpGoogle: '구글',
+ syncSite: 'NTP 서버',
+ syncSiteHelper: '이 작업은 {0}을(를) 시스템 시간 동기화의 소스로 사용합니다. 계속하시겠습니까?',
+ changePassword: '비밀번호 변경',
+ oldPassword: '기존 비밀번호',
+ newPassword: '새 비밀번호',
+ retryPassword: '비밀번호 확인',
+ noSpace: '입력 정보에 공백 문자를 포함할 수 없습니다.',
+ duplicatePassword: '새 비밀번호는 기존 비밀번호와 동일할 수 없습니다. 다시 입력하십시오!',
+ diskClean: '캐시 정리',
+ developerMode: '미리보기 프로그램',
+ developerModeHelper: '새로운 기능과 수정 사항을 정식 출시 전에 체험하고 초기 피드백을 제공할 수 있습니다.',
+ thirdParty: '서드파티 계정',
+ addBackupAccount: '{0} 추가',
+ 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:
+ '"획득" 버튼을 클릭한 다음 OneDrive 에 로그인하여 리디렉션된 링크에서 "code" 이후의 내용을 복사하십시오. 이 입력 상자에 붙여넣으십시오. 자세한 지침은 공식 문서를 참조하십시오.',
+ 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: '심층 아카이브',
+ scStandard:
+ '표준 스토리지는 실시간 접근, 빈번한 데이터 상호작용이 필요한 핫 파일이 많은 비즈니스 시나리오에 적합합니다.',
+ scStandard_IA:
+ '저빈도 스토리지는 접근 빈도가 비교적 낮고 최소 30일 동안 데이터를 저장하는 비즈니스 시나리오에 적합합니다.',
+ scArchive: '아카이브 스토리지는 접근 빈도가 극히 낮은 비즈니스 시나리오에 적합합니다.',
+ scDeep_Archive: '내구성이 뛰어난 콜드 스토리지는 접근 빈도가 극히 낮은 비즈니스 시나리오에 적합합니다.',
+ archiveHelper:
+ '아카이브 스토리지 파일은 직접 다운로드할 수 없으며, 해당 클라우드 서비스 제공자의 웹사이트를 통해 복원해야 합니다. 신중히 사용하십시오!',
+ backupAlert: 'S3 프로토콜을 지원하는 클라우드 공급자는 Amazon S3 를 사용하여 백업할 수 있습니다.',
+ domain: '가속 도메인',
+ backupAccount: '백업 계정 | 백업 계정',
+ loadBucket: '버킷 가져오기',
+ accountName: '계정 이름',
+ accountKey: '계정 키',
+ address: '주소',
+ path: '경로',
+
+ safe: '보안',
+ 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 주소 제한이 비활성화됩니다.',
+ allowIPEgs: '한 줄에 하나씩 입력하십시오. 예:\n172.16.10.111\n172.16.10.0/24',
+ mfa: '2단계 인증 (2FA)',
+ mfaClose: 'MFA를 비활성화하면 서비스 보안이 낮아집니다. 계속하시겠습니까?',
+ secret: '비밀키',
+ mfaInterval: '갱신 간격(초)',
+ mfaTitleHelper:
+ '제목은 다른 1Panel 호스트를 구별하는 데 사용됩니다. 제목을 수정한 후 다시 스캔하거나 비밀키를 수동으로 추가하세요.',
+ mfaIntervalHelper: '갱신 시간을 수정한 후 다시 스캔하거나 비밀키를 수동으로 추가하세요.',
+ 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 프로토콜 접근 설정은 패널 접근 보안을 강화할 수 있습니다.',
+ certType: '인증서 유형',
+ selfSigned: '자가 서명',
+ selfSignedHelper: '자가 서명 인증서는 브라우저에서 신뢰하지 않을 수 있으며 보안 경고가 표시될 수 있습니다.',
+ select: '선택',
+ domainOrIP: '도메인 또는 IP:',
+ timeOut: '시간 초과',
+ rootCrtDownload: '루트 인증서 다운로드',
+ primaryKey: '개인 키',
+ certificate: '인증서',
+ backupJump: '현재 백업 목록에 없는 파일입니다. 파일 디렉토리에서 다운로드하여 백업에 가져오기를 시도하세요.',
+
+ snapshot: '스냅샷 | 스냅샷들',
+ 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: '복구 세부정보',
+ createSnapshot: '스냅샷 생성',
+ importSnapshot: '스냅샷 동기화',
+ importHelper: '스냅샷 디렉토리: ',
+ recover: '복구',
+ lastRecoverAt: '마지막 복구 시간',
+ lastRollbackAt: '마지막 롤백 시간',
+ reDownload: '백업 파일 다시 다운로드',
+ statusSuccess: '성공',
+ statusFailed: '실패',
+ recoverErrArch: '서버 아키텍처가 다른 스냅샷 복구는 지원되지 않습니다!',
+ recoverErrSize: '디스크 공간이 부족합니다. 확인하거나 정리 후 다시 시도하세요!',
+ recoverHelper: '스냅샷 {0} 에서 복구를 시작합니다. 계속하기 전에 다음 정보를 확인하세요:',
+ recoverHelper1: '복구에는 Docker 및 1Panel 서비스를 재시작해야 합니다.',
+ recoverHelper2: '서버에 충분한 디스크 공간이 있는지 확인하세요. (스냅샷 파일 크기: {0}, 사용 가능한 공간: {1})',
+ recoverHelper3:
+ '서버 아키텍처가 스냅샷이 생성된 서버의 아키텍처와 일치하는지 확인하세요. (현재 서버 아키텍처: {0})',
+ rollback: '롤백',
+ rollbackHelper:
+ '이 복구를 롤백하면 해당 복구의 모든 파일이 대체되며 Docker 및 1Panel 서비스를 재시작해야 할 수 있습니다. 계속하시겠습니까?',
+
+ upgradeHelper: '업그레이드에는 1Panel 서비스를 재시작해야 합니다. 계속하시겠습니까?',
+ noUpgrade: '현재 최신 버전입니다',
+ upgradeNotes: '릴리스 노트',
+ upgradeNow: '지금 업그레이드',
+ source: '다운로드 소스',
+
+ about: '정보',
+ project: 'GitHub',
+ issue: '이슈',
+ doc: '공식 문서',
+ star: '별',
+ description: '리눅스 서버 패널',
+ forum: '토론',
+ doc2: '문서',
+ currentVersion: '버전',
+
+ license: '라이선스',
+ advancedMenuHide: '고급 메뉴 숨기기',
+ showMainAdvancedMenu: '하나의 메뉴만 유지하면 사이드바에 주 고급 메뉴만 표시됩니다.',
+ showAll: '모두 표시',
+ hideALL: '모두 숨기기',
+ ifShow: '표시 여부',
+ menu: '메뉴',
+ confirmMessage: '고급 메뉴 목록을 업데이트하려면 페이지가 새로 고쳐집니다. 계속하시겠습니까?',
+ compressPassword: '압축 비밀번호',
+ backupRecoverMessage: '압축 또는 압축 해제 비밀번호를 입력하세요 (설정하지 않으려면 비워 두세요)',
+ },
+ license: {
+ community: 'OSS',
+ oss: '오픈 소스 소프트웨어',
+ pro: 'Pro',
+ trial: '체험판',
+ office: '공식',
+ trialInfo: '버전',
+ authorizationId: '구독 인증 ID',
+ authorizedUser: '인증된 사용자',
+ expiresAt: '만료일',
+ productName: '제품명',
+ productStatus: '제품 상태',
+ Lost: '분실',
+ Enable: '활성화됨',
+ Disable: '비활성화됨',
+ lostHelper:
+ '라이센스가 최대 재시도 횟수를 초과했습니다. 전문가 버전 기능이 제대로 작동하는지 확인하려면 동기화 버튼을 수동으로 클릭하세요.',
+ disableHelper:
+ '라이센스 동기화 검증에 실패했습니다. 전문가 버전 기능이 제대로 작동하는지 확인하려면 동기화 버튼을 수동으로 클릭하세요.',
+ quickUpdate: '빠른 업데이트',
+ import: '가져오기',
+ power: '권한 부여',
+ unbind: '연결 해제',
+ unbindHelper: '연결 해제 후 모든 Pro 관련 설정이 초기화됩니다. 계속하시겠습니까?',
+ importLicense: '라이센스',
+ importHelper: '라이센스 파일을 여기에 클릭하거나 드래그하세요',
+ technicalAdvice: '기술 상담',
+ advice: '상담',
+ indefinitePeriod: '무제한 기간',
+ levelUpPro: 'Pro 로 업그레이드',
+ licenseSync: '라이센스 동기화',
+ knowMorePro: '더 알아보기',
+ closeAlert: '현재 페이지는 패널 설정에서 닫을 수 있습니다.',
+ introduce: '기능 소개',
+ waf: '전문 버전으로 업그레이드하면 차단 맵, 로그, 차단 기록, 지리적 위치 차단, 사용자 정의 규칙, 사용자 정의 차단 페이지 등의 기능을 제공받을 수 있습니다.',
+ tamper: '전문 버전으로 업그레이드하면 웹사이트를 무단 수정이나 변조로부터 보호할 수 있습니다.',
+ gpu: '전문 버전으로 업그레이드하면 GPU 의 작업 부하, 온도, 메모리 사용량 등 중요한 매개변수를 실시간으로 시각적으로 모니터링할 수 있습니다.',
+ setting: '전문 버전으로 업그레이드하면 패널 로고, 환영 메시지 등 정보를 사용자 정의할 수 있습니다.',
+ monitor:
+ '전문 버전으로 업그레이드하면 웹사이트의 실시간 상태, 방문자 트렌드, 방문자 출처, 요청 로그 등 정보를 확인할 수 있습니다.',
+ alert: '전문 버전으로 업그레이드하면 SMS 를 통해 알림 정보를 받고 알림 로그를 볼 수 있으며, 다양한 주요 이벤트를 완벽하게 제어하여 시스템 운영을 걱정 없이 유지할 수 있습니다.',
+ },
+ 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: '시스템 업그레이드 백업 파일',
+ upgradeHelper: '(시스템 롤백을 위해 최신 업그레이드 백업을 유지하는 것이 좋습니다)',
+ cache: '시스템 캐시 파일',
+ cacheHelper: '(주의하여 진행, 정리 후 서비스 재시작 필요)',
+ snapshotTmp: '시스템 스냅샷 업로드 임시 파일',
+ snapshotLocal: '시스템 스냅샷 생성 임시 파일',
+ rollback: '복구 전 백업 파일',
+ unused: '사용되지 않는 시스템 디렉터리',
+ oldUpgrade: '사용되지 않는 구버전 업그레이드 백업 디렉터리',
+ oldOriginal: '사용되지 않는 구버전 스냅샷 복구 백업 디렉터리',
+ oldAppsBak: '사용되지 않는 애플리케이션 백업 디렉터리',
+
+ upload: '임시 업로드 파일',
+ uploadHelper: '시스템 백업 리스트에서 업로드된 임시 파일',
+ download: '임시 다운로드 파일',
+ downloadHelper: '시스템에서 제3자 백업 계정으로 다운로드된 임시 파일',
+ website: '웹사이트',
+ app: '애플리케이션',
+ database: '데이터베이스',
+ directory: '디렉터리',
+
+ systemLog: '시스템 로그 파일',
+ systemLogHelper: '시스템 로그 정보, 컨테이너 빌드 또는 이미지 풀 로그 정보, 예약된 작업에서 생성된 로그 파일',
+ dockerLog: '컨테이너 운영 로그 파일',
+ taskLog: '예약된 작업 실행 로그 파일',
+ containerShell: '컨테이너 내 쉘 스크립트 예약 작업',
+
+ containerTrash: '컨테이너 휴지통',
+ images: '이미지',
+ containers: '컨테이너',
+ volumes: '볼륨',
+ buildCache: '컨테이너 빌드 캐시',
+ },
+ app: {
+ app: '애플리케이션 | 애플리케이션들',
+ installName: '이름',
+ installed: '설치됨',
+ all: '모두',
+ version: '버전',
+ detail: '세부사항',
+ params: '편집',
+ install: '설치',
+ author: '저자',
+ source: '출처',
+ sync: '동기화',
+ appName: '애플리케이션 이름',
+ status: '상태',
+ container: '컨테이너',
+ restart: '재시작',
+ start: '시작',
+ stop: '중지',
+ rebuild: '재빌드',
+ description: '설명',
+ deleteWarn:
+ '삭제 작업은 모든 데이터와 백업을 함께 삭제합니다. 이 작업은 되돌릴 수 없습니다. 계속 하시겠습니까?',
+ syncSuccess: '동기화 성공',
+ canUpgrade: '업데이트',
+ backupName: '파일 이름',
+ backupPath: '파일 경로',
+ backupdate: '백업 시간',
+ update: '업데이트',
+ versionSelect: '버전을 선택하세요',
+ operatorHelper: '선택한 애플리케이션에 대해 {0} 작업이 수행됩니다. 계속 하시겠습니까?',
+ startOperatorHelper: '애플리케이션이 시작됩니다. 계속 하시겠습니까?',
+ stopOperatorHelper: '애플리케이션이 중지됩니다. 계속 하시겠습니까?',
+ restartOperatorHelper: '애플리케이션이 재시작됩니다. 계속 하시겠습니까?',
+ reloadOperatorHelper: '애플리케이션이 다시 로드됩니다. 계속 하시겠습니까?',
+ checkInstalledWarn: '"{0}"이(가) 감지되지 않았습니다. "앱 스토어"로 가서 설치하세요.',
+ gotoInstalled: '설치하러 가기',
+ search: '검색',
+ limitHelper: '애플리케이션은 이미 설치되었습니다.',
+ deleteHelper: '"{0}"은(는) 다음 리소스와 연결되어 있습니다. 확인 후 다시 시도하세요!',
+ checkTitle: '힌트',
+ website: '웹사이트',
+ database: '데이터베이스',
+ 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: '이미지 풀 문제 시 이미지 가속을 구성하세요.',
+ upgradeHelper:
+ '업그레이드 전에 비정상적인 애플리케이션을 정상 상태로 복원하세요. 업그레이드 실패 시 "로그 > 시스템 로그"에서 실패 원인을 확인하세요.',
+ installWarn:
+ '외부 접근이 활성화되지 않아 애플리케이션이 외부 네트워크에서 접근할 수 없습니다. 계속 하시겠습니까?',
+ showIgnore: '무시된 애플리케이션 보기',
+ cancelIgnore: '무시 취소',
+ ignoreList: '무시된 애플리케이션',
+ appHelper: '특수 애플리케이션 설치 지침을 보려면 애플리케이션 상세 페이지로 이동하세요.',
+ backupApp: '업그레이드 전 애플리케이션 백업',
+ backupAppHelper:
+ '업그레이드 실패 시 백업이 자동으로 롤백됩니다. 로그 감사 시스템 로그에서 실패 원인을 확인하세요. 백업은 기본적으로 최신 3개 복사본을 유지합니다.',
+ delete: '삭제',
+ openrestyDeleteHelper: 'OpenResty 강제 삭제는 모든 웹사이트를 삭제합니다. 계속 하시겠습니까?',
+ downloadLogHelper1: '{0} 애플리케이션의 모든 로그가 다운로드됩니다. 계속 하시겠습니까?',
+ downloadLogHelper2: '{0} 애플리케이션의 최신 {1} 로그가 다운로드됩니다. 계속 하시겠습니까?',
+ syncAllAppHelper: '모든 애플리케이션이 동기화됩니다. 계속 하시겠습니까?',
+ hostModeHelper:
+ '현재 애플리케이션 네트워크 모드는 호스트 모드입니다. 포트를 열어야 할 경우 방화벽 페이지에서 수동으로 열어주세요.',
+ showLocal: '로컬 애플리케이션 보기',
+ reload: '새로고침',
+ upgradeWarn:
+ '애플리케이션 업그레이드는 docker-compose.yml 파일을 교체합니다. 변경 사항이 있으면 파일 비교를 클릭하여 확인할 수 있습니다.',
+ newVersion: '새 버전',
+ oldVersion: '현재 버전',
+ composeDiff: '파일 비교',
+ showDiff: '비교 보기',
+ useNew: '사용자 정의 버전 사용',
+ useDefault: '기본 버전 사용',
+ useCustom: '사용자 정의 docker-compose.yml 사용',
+ useCustomHelper:
+ '사용자 정의 docker-compose.yml 파일을 사용하면 애플리케이션 업그레이드가 실패할 수 있습니다. 필요하지 않으면 체크하지 마세요.',
+ diffHelper: '왼쪽은 이전 버전, 오른쪽은 새 버전입니다. 편집 후 사용자 정의 버전을 저장하려면 클릭하세요.',
+ pullImage: '이미지 풀',
+ pullImageHelper: '애플리케이션 시작 전에 docker pull 을 실행하여 이미지를 다운로드하세요.',
+ },
+ website: {
+ website: '웹사이트 | 웹사이트들',
+ primaryDomain: '기본 도메인',
+ otherDomains: '기타 도메인',
+ static: '정적',
+ deployment: '배포',
+ supportUpType: '지원되는 파일 형식: .tar.gz',
+ zipFormat: '.tar.gz 압축 패키지 구조: test.tar.gz 패키지에는 반드시 {0} 파일이 포함되어야 합니다.',
+ proxy: '리버스 프록시',
+ alias: '별칭',
+ enableFtp: 'FTP 활성화',
+ ftpUser: 'FTP 계정',
+ ftpPassword: 'FTP 비밀번호',
+ ftpHelper: '웹사이트를 생성하면 해당 FTP 계정이 생성되고 FTP 디렉터리는 웹사이트 디렉터리와 연결됩니다.',
+ remark: '비고',
+ group: '그룹',
+ manageGroup: '그룹 관리',
+ groupSetting: '그룹 설정',
+ createGroup: '그룹 생성',
+ app: '애플리케이션',
+ appNew: '새로운 애플리케이션',
+ appInstalled: '설치된 애플리케이션',
+ create: '생성',
+ delete: '웹사이트 삭제',
+ deleteApp: '애플리케이션 삭제',
+ deleteBackup: '백업 삭제',
+ domain: '도메인',
+ domainHelper: "한 줄에 하나의 도메인.\n와일드카드 '*'와 IP 주소를 지원합니다.\n포트 추가를 지원합니다.",
+ addDomain: '추가',
+ domainConfig: '도메인 설정',
+ defaultDoc: '기본 문서',
+ perserver: '동시 연결',
+ perserverHelper: '현재 사이트의 최대 동시 연결 수를 제한합니다.',
+ perip: '단일 IP',
+ peripHelper: '단일 IP의 최대 동시 접속 수를 제한합니다.',
+ rate: '트래픽 제한',
+ rateHelper: '요청당 트래픽을 제한합니다 (단위: KB)',
+ limitHelper: '트래픽 제어 활성화',
+ other: '기타',
+ currentSSL: '현재 인증서',
+ dnsAccount: 'DNS 계정',
+ applySSL: '인증서 신청',
+ SSLList: '인증서 목록',
+ createDnsAccount: 'DNS 계정 생성',
+ aliyun: '알리윤',
+ volcengine: '볼크엔진',
+ manual: '수동 설정',
+ key: '키',
+ check: '보기',
+ acmeAccountManage: 'ACME 계정 관리',
+ email: '이메일',
+ acmeAccount: 'ACME 계정',
+ provider: '검증 방법',
+ dnsManual: '수동 설정',
+ expireDate: '만료일',
+ brand: '기관',
+ deploySSL: '배포',
+ deploySSLHelper: '인증서를 배포하시겠습니까?',
+ ssl: '인증서 | 인증서들',
+ dnsAccountManage: 'DNS 제공자 관리',
+ renewSSL: '갱신',
+ renewHelper: '인증서를 갱신하시겠습니까?',
+ renewSuccess: '인증서 갱신 성공',
+ config: '편집',
+ enableHTTPS: 'HTTPS 활성화',
+ aliasHelper: '별칭은 웹사이트의 디렉터리 이름입니다.',
+ lastBackupAt: '마지막 백업 시간',
+ null: '없음',
+ nginxConfig: 'Nginx 설정',
+ websiteConfig: '웹사이트 설정',
+ basic: '기본',
+ source: '구성',
+ security: '보안',
+ log: '로그',
+ nginxPer: '성능 튜닝',
+ neverExpire: '만료 없음',
+ setDefault: '기본값으로 설정',
+ default: '기본값',
+ 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: '웹사이트 백업도 삭제합니다.',
+ deleteConfirmHelper:
+ '삭제 작업은 되돌릴 수 없습니다. 확인하려면 "{0}"을(를) 입력하세요.',
+ staticPath: '해당 주요 디렉터리는',
+ limit: '제한',
+ blog: '포럼/블로그',
+ imageSite: '이미지 사이트',
+ downloadSite: '다운로드 사이트',
+ shopSite: '쇼핑몰',
+ doorSite: '포털',
+ qiteSite: '기업',
+ videoSite: '비디오',
+ errLog: '오류 로그',
+ accessLog: '웹사이트 로그',
+ stopHelper:
+ '사이트를 중지하면 정상적으로 액세스할 수 없으며, 사용자가 해당 사이트의 중지 페이지를 보게 됩니다. 계속하시겠습니까?',
+ startHelper: '사이트를 활성화하면 사용자가 정상적으로 사이트 내용을 액세스할 수 있습니다. 계속하시겠습니까?',
+ sitePath: '디렉터리',
+ siteAlias: '사이트 별칭',
+ primaryPath: '루트 디렉터리',
+ folderTitle: '웹사이트는 다음과 같은 폴더를 포함합니다.',
+ wafFolder: '방화벽 규칙',
+ indexFolder: '웹사이트 루트 디렉터리',
+ logFolder: '웹사이트 로그',
+ 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이를 통해 악의적인 분석을 효과적으로 방지할 수 있습니다.',
+ 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: '요청 헤더에 있는 도메인 이름을 프록시 서버로 전달합니다.',
+ replacementHelper: '최대 5개의 교체를 추가할 수 있으며, 교체가 필요하지 않은 경우 비워두세요.',
+ modifier: '매칭 규칙',
+ modifierHelper: '예: = 는 정확히 일치, ~ 는 정규식 일치, ^~ 는 경로 시작 부분 일치 등을 나타냅니다.',
+ replace: '텍스트 교체',
+ addReplace: '추가',
+ replaced: '검색 문자열 (비울 수 없음)',
+ replaceText: '교체할 문자열',
+ replacedErr: '검색 문자열은 비워둘 수 없습니다',
+ replacedErr2: '검색 문자열은 중복될 수 없습니다',
+ basicAuth: '기본 인증',
+ editBasicAuthHelper:
+ '비밀번호는 비대칭으로 암호화되어 표시할 수 없습니다. 수정하려면 비밀번호를 재설정해야 합니다.',
+ antiLeech: '링크 차단',
+ extends: '확장',
+ browserCache: '캐시',
+ leechLog: '링크 차단 로그 기록',
+ accessDomain: '허용된 도메인',
+ leechReturn: '응답 리소스',
+ noneRef: '빈 참조 허용',
+ disable: '비활성화',
+ disableLeechHelper: '링크 차단을 비활성화할지 여부',
+ disableLeech: '링크 차단 비활성화',
+ ipv6: 'IPv6 수신 대기',
+ leechReturnError: 'HTTP 상태 코드를 입력하세요',
+ 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 를 활성화하면 웹사이트 보안을 강화할 수 있습니다.',
+ defaultHtml: '기본 페이지',
+ website404: '웹사이트 404 오류 페이지',
+ domain404: '웹사이트 도메인이 존재하지 않습니다.',
+ indexHtml: '정적 웹사이트 인덱스',
+ stopHtml: '중지된 웹사이트',
+ indexPHP: 'PHP 웹사이트 인덱스',
+ sslExpireDate: '인증서 만료 날짜',
+ website404Helper: '웹사이트 404 오류 페이지는 PHP 실행 환경 웹사이트 및 정적 웹사이트만 지원합니다.',
+ sni: '원본 SNI',
+ sniHelper:
+ '역방향 프록시 백엔드가 HTTPS 인 경우 원본 SNI 를 설정해야 할 수 있습니다. 자세한 내용은 CDN 서비스 제공자의 문서를 참조하세요.',
+ huaweicloud: '화웨이 클라우드',
+ rainyun: '레인윤',
+ },
+ 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: '확장 목록 보기',
+ },
+ nginx: {
+ serverNamesHashBucketSizeHelper: '서버 이름의 해시 테이블 크기',
+ clientHeaderBufferSizeHelper: '클라이언트가 요청한 헤더 버퍼 크기',
+ clientMaxBodySizeHelper: '최대 업로드 파일 크기',
+ keepaliveTimeoutHelper: '연결 시간 초과',
+ gzipMinLengthHelper: '최소 압축 파일 크기',
+ gzipCompLevelHelper: '압축률',
+ gzipHelper: '전송을 위한 압축 활성화',
+ connections: '활성 연결',
+ accepts: '수락',
+ handled: '처리됨',
+ requests: '요청',
+ reading: '읽기 중',
+ writing: '쓰기 중',
+ waiting: '대기 중',
+ status: '현재 상태',
+ nginxConfig: '설정',
+ configResource: '구성',
+ saveAndReload: '저장 및 다시 로드',
+ clearProxyCache: '리버스 프록시 캐시 삭제',
+ clearProxyCacheWarn:
+ '캐시가 구성된 모든 웹사이트에 영향을 미치며 OpenResty 가 다시 시작됩니다. 계속하시겠습니까?',
+ },
+ ssl: {
+ 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 는 중국 본토 대부분에서 접근할 수 없습니다.',
+ httpHelper2: 'HTTP 모드에서 일반 도메인 이름 인증서를 신청할 수 없습니다.',
+ skipDNSCheck: 'DNS 확인 건너뛰기',
+ skipDNSCheckHelper: '인증 요청 중 타임아웃 문제가 발생할 경우에만 선택하세요.',
+ cfHelper: 'Global API Key 를 사용하지 마세요.',
+ deprecated: '더 이상 지원되지 않습니다.',
+ deprecatedHelper:
+ '유지 관리가 중단되었으며 향후 버전에서 제외될 수 있습니다. Tencent Cloud 방법을 사용하여 분석하세요.',
+ disableCNAME: 'CNAME 비활성화',
+ disableCNAMEHelper: '도메인 이름에 CNAME 레코드가 있고 요청이 실패할 경우 선택하세요.',
+ nameserver: 'DNS 서버',
+ nameserverHelper: '사용자 지정 DNS 서버를 사용하여 도메인 이름을 확인합니다.',
+ edit: '인증서 편집',
+ execShell: '인증 요청 후 스크립트 실행',
+ shell: '스크립트 내용',
+ shellHelper:
+ '스크립트의 기본 실행 디렉토리는 1Panel 설치 디렉토리입니다. 인증서가 로컬 디렉토리에 푸시되는 경우 실행 디렉토리는 인증서 푸시 디렉토리가 됩니다. 기본 실행 제한 시간은 30분입니다.',
+ },
+ firewall: {
+ create: '규칙 만들기',
+ edit: '규칙 수정',
+ notSupport: '시스템 방화벽이 감지되지 않았습니다 (firewalld 또는 ufw). 설치 방법은 공식 문서를 참조하세요.',
+ ccDeny: 'CC 보호',
+ ipWhiteList: 'IP 허용 목록',
+ ipBlockList: 'IP 차단 목록',
+ fileExtBlockList: '파일 확장자 차단 목록',
+ urlWhiteList: 'URL 허용 목록',
+ urlBlockList: 'URL 차단 목록',
+ argsCheck: 'GET 파라미터 검사',
+ postCheck: 'POST 파라미터 검사',
+ cookieBlockList: '쿠키 차단 목록',
+ firewall: '방화벽',
+ dockerHelper:
+ '리눅스 방화벽 "{0}"은(는) Docker 포트 매핑을 비활성화할 수 없습니다. 애플리케이션은 "앱 스토어 -> 설치됨" 페이지에서 매핑 포트를 해제할 수 있는 파라미터를 수정해야 합니다.',
+ quickJump: '빠른 접근',
+ used: '사용됨',
+ unUsed: '사용 안 함',
+ firewallHelper: '{0} 시스템 방화벽',
+ firewallNotStart: '현재 시스템 방화벽이 활성화되지 않았습니다. 먼저 활성화하세요.',
+ restartFirewallHelper: '이 작업은 현재 방화벽을 재시작합니다. 계속하시겠습니까?',
+ stopFirewallHelper: '이 작업은 서버 보안을 잃게 만듭니다. 계속하시겠습니까?',
+ startFirewallHelper: '방화벽이 활성화되면 서버 보안이 강화됩니다. 계속하시겠습니까?',
+ noPing: 'Ping 비활성화',
+ noPingTitle: 'Ping 비활성화',
+ noPingHelper: '이 작업은 Ping 을 비활성화하며 서버는 ICMP 응답을 보내지 않게 됩니다. 계속하시겠습니까?',
+ onPingHelper: '이 작업은 Ping 을 활성화하여 해커가 서버를 발견할 수 있습니다. 계속하시겠습니까?',
+ changeStrategy: '{0} 전략 변경',
+ changeStrategyIPHelper1:
+ 'IP 주소 전략을 [거부]로 변경합니다. 설정 후 해당 IP 주소는 서버 접근이 차단됩니다. 계속하시겠습니까?',
+ changeStrategyIPHelper2:
+ 'IP 주소 전략을 [허용]으로 변경합니다. 설정 후 해당 IP 주소는 정상적으로 접근할 수 있습니다. 계속하시겠습니까?',
+ changeStrategyPortHelper1:
+ '포트 정책을 [차단]으로 변경합니다. 설정 후 외부 접근이 차단됩니다. 계속하시겠습니까?',
+ changeStrategyPortHelper2:
+ '포트 정책을 [허용]으로 변경합니다. 설정 후 정상적으로 포트 접근이 복원됩니다. 계속하시겠습니까?',
+ stop: '정지',
+ portFormatError: '이 필드는 유효한 포트이어야 합니다.',
+ portHelper1: '여러 포트, 예: 8080, 8081',
+ portHelper2: '포트 범위, 예: 8080-8089',
+ changeStrategyHelper:
+ '[{1}] {0} 전략을 [{2}]로 변경합니다. 설정 후 {0}은(는) {2}로 외부 접근을 허용합니다. 계속하시겠습니까?',
+ portHelper: '여러 포트를 입력할 수 있습니다. 예: 80, 81 또는 포트 범위, 예: 80-88',
+ strategy: '전략',
+ accept: '허용',
+ drop: '차단',
+ source: '소스',
+ anyWhere: '어디든지',
+ address: '지정된 IP',
+ addressHelper: 'IP 주소 또는 IP 범위를 지원합니다.',
+ allow: '허용',
+ deny: '거부',
+ addressFormatError: '이 필드는 유효한 IP 주소여야 합니다.',
+ addressHelper1: "IP 주소 또는 IP 범위가 필요합니다. 예: '172.16.10.11' 또는 '172.16.10.0/24'.",
+ addressHelper2: "여러 IP 주소는 쉼표로 구분합니다. 예: '172.16.10.11, 172.16.0.0/24'.",
+ allIP: '모든 IP',
+ portRule: '규칙 | 규칙들',
+ createPortRule: '@:commons.button.create @.lower:firewall.portRule',
+ forwardRule: '포트 전달 규칙 | 포트 전달 규칙들',
+ createForwardRule: '@:commons.button.create @:firewall.forwardRule',
+ ipRule: 'IP 규칙 | IP 규칙들',
+ createIpRule: '@:commons.button.create @:firewall.ipRule',
+ userAgent: 'User-Agent 필터',
+ sourcePort: '소스 포트',
+ targetIP: '대상 IP',
+ targetPort: '대상 포트',
+ forwardHelper1: "로컬 포트로 전달하려면, 대상 IP 를 '127.0.0.1'로 설정해야 합니다.",
+ forwardHelper2: '대상 IP 를 비워두면 로컬 포트로 전달됩니다.',
+ forwardHelper3: 'IPv4 포트 전달만 지원됩니다.',
+ },
+ runtime: {
+ runtime: '실행 환경',
+ image: '이미지',
+ workDir: '작업 디렉토리',
+ create: '실행 환경 생성',
+ resource: '소스',
+ appstore: '앱 스토어',
+ local: '로컬',
+ app: '애플리케이션',
+ localHelper: '로컬 운영 환경은 직접 설치해야 합니다.',
+ version: '버전',
+ 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: '열기',
+ close: '닫기',
+ operatorHelper: '{0} 작업이 선택된 운영 환경에서 수행됩니다. 계속하시겠습니까?',
+ statusHelper:
+ '상태 설명: 시작 중 - 컨테이너가 시작되었으나 애플리케이션이 시작 중; 비정상 - 컨테이너가 시작되었으나 애플리케이션 상태가 비정상.',
+ taobao: '타오바오',
+ tencent: '텐센트',
+ imageSource: '이미지 소스',
+ moduleManager: '모듈 관리',
+ module: '모듈',
+ nodeOperatorHelper:
+ '{0} {1} 모듈인가요? 이 작업은 운영 환경에 비정상을 일으킬 수 있으므로 진행 전에 확인해 주세요.',
+ customScript: '사용자 정의 시작 명령',
+ customScriptHelper: '전체 시작 명령을 제공하세요. 예: "npm run start".',
+ 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".',
+ },
+ process: {
+ pid: '프로세스 ID',
+ ppid: '부모 PID',
+ numThreads: '스레드',
+ memory: '메모리',
+ diskRead: '디스크 읽기',
+ diskWrite: '디스크 쓰기',
+ netSent: '업링크',
+ netRecv: '다운스트림',
+ numConnections: '연결',
+ startTime: '시작 시간',
+ status: '상태',
+ state: '상태',
+ running: '실행 중',
+ sleep: '대기 중',
+ stop: '중지',
+ idle: '유휴',
+ zombie: '좀비 프로세스',
+ wait: '대기',
+ lock: '잠금',
+ blocked: '차단됨',
+ cmdLine: '시작 명령',
+ basic: '기본',
+ mem: '메모리',
+ openFiles: '열린 파일',
+ file: '파일',
+ env: '환경 변수',
+ noenv: '없음',
+ net: '네트워크 연결',
+ laddr: '출발지 주소/포트',
+ raddr: '목적지 주소/포트',
+ stopProcess: '종료',
+ viewDetails: '세부 사항',
+ stopProcessWarn: '이 프로세스(PID:{0})를 종료하시겠습니까?',
+ processName: '프로세스 이름',
+ },
+ tool: {
+ supervisor: {
+ loadStatusErr: '프로세스 상태를 가져오지 못했습니다. supervisor 서비스의 상태를 확인하세요.',
+ notSupport: `Supervisor 가 감지되지 않았습니다. 설치하려면 공식 문서를 참조하세요.`,
+ list: '데몬 프로세스 | 데몬 프로세스들',
+ config: 'Supervisor 설정',
+ primaryConfig: '주 설정 파일 위치',
+ notSupportCrl: `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:
+ '이 작업은 초기화 후 서비스를 재시작합니다. 이로 인해 기존의 모든 데몬 프로세스가 중지됩니다.',
+ msg: '메시지',
+ RUNNING: '실행 중',
+ STOPPED: '중지됨',
+ STOPPING: '중지 중',
+ STARTING: '시작 중',
+ FATAL: '시작 실패',
+ BACKOFF: '시작 예외',
+ ERROR: '오류',
+ statusCode: '상태 코드',
+ manage: '관리',
+ },
+ },
+ alert: {
+ isAlert: '알림',
+ alertCount: '알림 횟수',
+ clamHelper: '감염된 파일을 스캔할 때 SMS 알림 트리거',
+ cronJobHelper: '작업 실행 실패 시 SMS 알림 트리거',
+ licenseHelper: '전문 버전에서는 SMS 알림을 지원합니다.',
+ alertCountHelper: '최대 일일 알림 빈도',
+ },
+};
+
+export default {
+ ...fit2cloudKoLocale,
+ ...message,
+ ...xpackKoLocale,
+};
diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts
index 249b40f80..1c5dd8a02 100644
--- a/frontend/src/lang/modules/ms.ts
+++ b/frontend/src/lang/modules/ms.ts
@@ -1,9 +1,9 @@
-import fit2cloudEnLocale from 'fit2cloud-ui-plus/src/locale/lang/ms';
+import fit2cloudMsLocale from 'fit2cloud-ui-plus/src/locale/lang/ms';
-let xpackEnLocale = {};
+let xpackMsLocale = {};
const xpackModules = import.meta.glob('../../xpack/lang/ms.ts', { eager: true });
if (xpackModules['../../xpack/lang/ms.ts']) {
- xpackEnLocale = xpackModules['../../xpack/lang/ms.ts']['default'] || {};
+ xpackMsLocale = xpackModules['../../xpack/lang/ms.ts']['default'] || {};
}
const message = {
@@ -60,8 +60,8 @@ const message = {
copy: 'Salin',
random: 'Rawak',
uninstall: 'Nyahpasang',
- fullscreen: 'Masuk ke skrin penuh',
- quitFullscreen: 'Keluar dari skrin penuh',
+ fullscreen: 'Skrin Penuh',
+ quitFullscreen: 'Keluar Skrin Penuh',
update: 'Kemas kini',
showAll: 'Tunjukkan Semua',
hideSome: 'Sembunyikan Sebahagian',
@@ -1966,7 +1966,7 @@ const message = {
app: 'Aplikasi',
appNew: 'Aplikasi Baru',
appInstalled: 'Aplikasi yang Dipasang',
- create: 'Cipta laman web',
+ create: 'Cipta',
delete: 'Padam Laman Web',
deleteApp: 'Padam Aplikasi',
deleteBackup: 'Padam Sandaran',
@@ -2551,7 +2551,7 @@ const message = {
};
export default {
- ...fit2cloudEnLocale,
+ ...fit2cloudMsLocale,
...message,
- ...xpackEnLocale,
+ ...xpackMsLocale,
};
diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts
index 48acbee33..231b3efef 100644
--- a/frontend/src/lang/modules/pt-br.ts
+++ b/frontend/src/lang/modules/pt-br.ts
@@ -60,7 +60,7 @@ const message = {
copy: 'Copiar',
random: 'Aleatório',
uninstall: 'Desinstalar',
- fullscreen: 'Entrar em tela cheia',
+ fullscreen: 'Tela Cheia',
quitFullscreen: 'Sair da tela cheia',
update: 'Editar',
showAll: 'Exibir tudo',
@@ -1957,7 +1957,7 @@ const message = {
app: 'Aplicativo',
appNew: 'Novo Aplicativo',
appInstalled: 'Aplicativo instalado',
- create: 'Criar site',
+ create: 'Criar',
delete: 'Excluir site',
deleteApp: 'Excluir Aplicativo',
deleteBackup: 'Excluir Backup',
diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts
index 0dd363af7..ed2b7981d 100644
--- a/frontend/src/lang/modules/ru.ts
+++ b/frontend/src/lang/modules/ru.ts
@@ -1,9 +1,9 @@
-import fit2cloudEnLocale from 'fit2cloud-ui-plus/src/locale/lang/ru';
+import fit2cloudRuLocale from 'fit2cloud-ui-plus/src/locale/lang/ru';
-let xpackEnLocale = {};
+let xpackRuLocale = {};
const xpackModules = import.meta.glob('../../xpack/lang/ru.ts', { eager: true });
if (xpackModules['../../xpack/lang/ru.ts']) {
- xpackEnLocale = xpackModules['../../xpack/lang/ru.ts']['default'] || {};
+ xpackRuLocale = xpackModules['../../xpack/lang/ru.ts']['default'] || {};
}
const message = {
@@ -1957,7 +1957,7 @@ const message = {
app: 'Приложение',
appNew: 'Новое приложение',
appInstalled: 'Установленное приложение',
- create: 'Создать веб-сайт',
+ create: 'Создать',
delete: 'Удалить веб-сайт',
deleteApp: 'Удалить приложение',
deleteBackup: 'Удалить резервную копию',
@@ -2542,7 +2542,7 @@ const message = {
};
export default {
- ...fit2cloudEnLocale,
+ ...fit2cloudRuLocale,
...message,
- ...xpackEnLocale,
+ ...xpackRuLocale,
};
diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts
index 7bfc6c153..87790eeb5 100644
--- a/frontend/src/lang/modules/tw.ts
+++ b/frontend/src/lang/modules/tw.ts
@@ -59,8 +59,8 @@ const message = {
copy: '複製',
random: '隨機密碼',
uninstall: '移除',
- fullscreen: '網頁全螢幕',
- quitFullscreen: '退出網頁全螢幕',
+ fullscreen: '全螢幕',
+ quitFullscreen: '退出全螢幕',
update: '編輯',
showAll: '顯示所有',
hideSome: '隱藏部分',
@@ -1815,7 +1815,7 @@ const message = {
app: '應用',
appNew: '新裝應用',
appInstalled: '已裝應用',
- create: '建立網站',
+ create: '建立',
delete: '刪除網站',
deleteApp: '刪除應用',
deleteBackup: '刪除備份',
diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts
index b2b96da59..165944bce 100644
--- a/frontend/src/lang/modules/zh.ts
+++ b/frontend/src/lang/modules/zh.ts
@@ -59,8 +59,8 @@ const message = {
copy: '复制',
random: '随机密码',
uninstall: '卸载',
- fullscreen: '网页全屏',
- quitFullscreen: '退出网页全屏',
+ fullscreen: '全屏',
+ quitFullscreen: '退出全屏',
update: '编辑',
showAll: '显示所有',
hideSome: '隐藏部分',
@@ -1815,7 +1815,7 @@ const message = {
app: '应用',
appNew: '新装应用',
appInstalled: '已装应用',
- create: '创建网站',
+ create: '创建',
delete: '删除网站',
deleteApp: '删除应用',
deleteBackup: '删除备份',
diff --git a/frontend/src/views/login/components/login-form.vue b/frontend/src/views/login/components/login-form.vue
index 1b40a6487..e24f4524c 100644
--- a/frontend/src/views/login/components/login-form.vue
+++ b/frontend/src/views/login/components/login-form.vue
@@ -62,6 +62,7 @@
日本語
Português (Brasil)
+ 한국어
Русский
Bahasa Melayu
@@ -278,6 +279,8 @@ function handleCommand(command: string) {
dropdownText.value = 'Português (Brasil)';
} else if (command === 'tw') {
dropdownText.value = '中文(繁體)';
+ } else if (command === 'ko') {
+ dropdownText.value = '한국어';
} else if (command === 'ja') {
dropdownText.value = '日本語';
} else if (command === 'ru') {
diff --git a/frontend/src/views/setting/panel/index.vue b/frontend/src/views/setting/panel/index.vue
index 9ee325cd4..b32be6209 100644
--- a/frontend/src/views/setting/panel/index.vue
+++ b/frontend/src/views/setting/panel/index.vue
@@ -324,6 +324,7 @@ const languageOptions = ref([
...(!globalStore.isIntl ? [{ value: 'en', label: 'English' }] : []),
{ value: 'ja', label: '日本語' },
{ value: 'pt-BR', label: 'Português (Brasil)' },
+ { value: 'ko', label: '한국어' },
{ value: 'ru', label: 'Русский' },
{ value: 'ms', label: 'Bahasa Melayu' },
]);