mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-01-18 06:02:59 +08:00
parent
7bc45f2d77
commit
9052386c83
@ -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 {
|
||||
|
@ -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) {
|
||||
|
286
backend/i18n/lang/ko.yaml
Normal file
286
backend/i18n/lang/ko.yaml
Normal file
@ -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: "모드: "
|
@ -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);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
||||
|
@ -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,
|
||||
});
|
||||
|
@ -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',
|
||||
|
@ -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,
|
||||
};
|
||||
|
2460
frontend/src/lang/modules/ko.ts
Normal file
2460
frontend/src/lang/modules/ko.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -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,
|
||||
};
|
||||
|
@ -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',
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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: '刪除備份',
|
||||
|
@ -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: '删除备份',
|
||||
|
@ -62,6 +62,7 @@
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item command="ja">日本語</el-dropdown-item>
|
||||
<el-dropdown-item command="pt-BR">Português (Brasil)</el-dropdown-item>
|
||||
<el-dropdown-item command="ko">한국어</el-dropdown-item>
|
||||
<el-dropdown-item command="ru">Русский</el-dropdown-item>
|
||||
<el-dropdown-item command="ms">Bahasa Melayu</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
@ -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') {
|
||||
|
@ -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' },
|
||||
]);
|
||||
|
Loading…
Reference in New Issue
Block a user