From ac722054d2d797b883ebaf487e290ca4e2806464 Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:35:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Fix=20the=20problem=20that=20the=20websi?= =?UTF-8?q?te=20directory=20is=20not=20backed=20up=20duri=E2=80=A6=20(#828?= =?UTF-8?q?0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent/app/service/app_install.go | 7 + agent/app/service/snapshot.go | 20 +- agent/app/service/snapshot_create.go | 52 +- agent/app/service/snapshot_recover.go | 77 +- agent/app/service/snapshot_rollback.go | 10 + agent/constant/status.go | 67 +- agent/i18n/lang/en.yaml | 713 +++++++++-------- agent/i18n/lang/ja.yaml | 686 +++++++++-------- agent/i18n/lang/ko.yaml | 715 ++++++++++-------- agent/i18n/lang/ms.yaml | 422 +++++++++++ agent/i18n/lang/ms.yml | 328 -------- agent/i18n/lang/pt-BR.yaml | 700 +++++++++-------- agent/i18n/lang/ru.yaml | 711 +++++++++-------- agent/i18n/lang/zh-Hant.yaml | 668 ++++++++-------- agent/i18n/lang/zh.yaml | 35 +- agent/init/dir/dir.go | 1 + core/i18n/lang/en.yaml | 2 +- core/i18n/lang/ja.yaml | 32 +- core/i18n/lang/ko.yaml | 2 +- core/i18n/lang/ms.yml | 2 +- core/i18n/lang/pt-BR.yaml | 2 +- core/i18n/lang/ru.yaml | 2 +- core/i18n/lang/zh-Hant.yaml | 2 +- core/i18n/lang/zh.yaml | 4 +- .../views/setting/snapshot/create/index.vue | 11 +- frontend/src/views/setting/snapshot/index.vue | 2 +- 26 files changed, 2944 insertions(+), 2329 deletions(-) create mode 100644 agent/i18n/lang/ms.yaml delete mode 100644 agent/i18n/lang/ms.yml diff --git a/agent/app/service/app_install.go b/agent/app/service/app_install.go index e85cc0dcd..81080ff80 100644 --- a/agent/app/service/app_install.go +++ b/agent/app/service/app_install.go @@ -469,6 +469,13 @@ func (a *AppInstallService) SyncAll(systemInit bool) error { } continue } + if i.Status == constant.StatusWaitingRestart { + dockerComposePath := i.GetComposePath() + _, _ = compose.Up(dockerComposePath) + i.Status = constant.StatusRunning + _ = appInstallRepo.Save(context.Background(), &i) + continue + } if !systemInit { if err = syncAppInstallStatus(&i, false); err != nil { global.LOG.Errorf("sync install app[%s] error,mgs: %s", i.Name, err.Error()) diff --git a/agent/app/service/snapshot.go b/agent/app/service/snapshot.go index 8dff45d0e..e7f400d6a 100644 --- a/agent/app/service/snapshot.go +++ b/agent/app/service/snapshot.go @@ -135,6 +135,7 @@ func (u *SnapshotService) UpdateDescription(req dto.UpdateDescription) error { type SnapshotJson struct { BaseDir string `json:"baseDir"` + OperestyDir string `json:"operestyDir"` BackupDataDir string `json:"backupDataDir"` Size uint64 `json:"size"` } @@ -322,12 +323,12 @@ func loadPanelFile(fileOp fileUtils.FileOp) ([]dto.DataTree, error) { Path: path.Join(global.Dir.DataDir, fileItem.Name()), } switch itemData.Label { - case "agent", "conf", "runtime", "docker", "secret", "task": + case "agent", "runtime", "docker", "task", "geo", "secret", "uploads": itemData.IsDisable = true - case "clamav": + case "clamav", "download", "resource": panelPath := path.Join(global.Dir.DataDir, itemData.Label) itemData.Children, _ = loadFile(panelPath, 5, fileOp) - default: + case "apps", "backup", "log", "db", "tmp": continue } if fileItem.IsDir() { @@ -351,6 +352,19 @@ func loadPanelFile(fileOp fileUtils.FileOp) ([]dto.DataTree, error) { data = append(data, itemData) } + openrestySite, _ := settingRepo.GetValueByKey("WEBSITE_DIR") + if len(openrestySite) != 0 && !strings.Contains(openrestySite, global.Dir.DataDir) { + sizeItem, _ := fileOp.GetDirSize(openrestySite) + data = append(data, dto.DataTree{ + ID: uuid.NewString(), + Label: "www", + IsCheck: true, + IsDisable: true, + Path: openrestySite, + Size: uint64(sizeItem), + }) + } + return data, nil } diff --git a/agent/app/service/snapshot_create.go b/agent/app/service/snapshot_create.go index d0ff9e49f..0c938cfac 100644 --- a/agent/app/service/snapshot_create.go +++ b/agent/app/service/snapshot_create.go @@ -116,7 +116,8 @@ func (u *SnapshotService) SnapshotReCreate(id uint) error { func handleSnapshot(req dto.SnapshotCreate, taskItem *task.Task, jobID uint) error { rootDir := path.Join(global.Dir.TmpDir, "system", req.Name) - itemHelper := snapHelper{SnapID: req.ID, Task: *taskItem, FileOp: files.NewFileOp(), Ctx: context.Background()} + openrestyDir, _ := settingRepo.GetValueByKey("WEBSITE_DIR") + itemHelper := snapHelper{SnapID: req.ID, Task: *taskItem, FileOp: files.NewFileOp(), Ctx: context.Background(), OpenrestyDir: openrestyDir} baseDir := path.Join(rootDir, "base") _ = os.MkdirAll(baseDir, os.ModePerm) @@ -168,7 +169,7 @@ func handleSnapshot(req dto.SnapshotCreate, taskItem *task.Task, jobID uint) err req.InterruptStep = "" } - taskItem.AddSubTask( + taskItem.AddSubTaskWithAlias( "SnapCloseDBConn", func(t *task.Task) error { taskItem.Log("---------------------- 6 / 8 ----------------------") @@ -214,6 +215,8 @@ type snapHelper struct { FileOp files.FileOp Wg *sync.WaitGroup Task task.Task + + OpenrestyDir string } func loadDbConn(snap *snapHelper, targetDir string, req dto.SnapshotCreate) error { @@ -247,6 +250,12 @@ func loadDbConn(snap *snapHelper, targetDir string, req dto.SnapshotCreate) erro return err } } + if !req.WithTaskLog { + err = os.Remove(path.Join(targetDir, "db/task.db")) + if err != nil { + return err + } + } if !req.WithOperationLog { err = snap.snapCoreDB.Exec("DELETE FROM operation_logs").Error snap.Task.LogWithStatus(i18n.GetMsgByKey("SnapDeleteOperationLog"), err) @@ -312,6 +321,7 @@ func snapBaseData(snap snapHelper, targetDir string) error { remarkInfo, _ := json.MarshalIndent(SnapshotJson{ BaseDir: global.Dir.BaseDir, + OperestyDir: snap.OpenrestyDir, BackupDataDir: global.Dir.LocalBackupDir, }, "", "\t") err = os.WriteFile(path.Join(targetDir, "snapshot.json"), remarkInfo, 0640) @@ -327,6 +337,12 @@ func snapAppImage(snap snapHelper, req dto.SnapshotCreate, targetDir string) err snap.Task.Log("---------------------- 3 / 8 ----------------------") snap.Task.LogStart(i18n.GetMsgByKey("SnapInstallApp")) + var appInstalls []model.AppInstall + _ = snap.snapAgentDB.Where("1 = 1").Find(&appInstalls).Error + for _, item := range appInstalls { + _ = snap.snapAgentDB.Where("id = ?", item.ID).Updates(map[string]interface{}{"status": constant.StatusWaitingRestart}).Error + } + var imageList []string existStr, _ := cmd.Exec("docker images | awk '{print $1\":\"$2}' | grep -v REPOSITORY:TAG") existImages := strings.Split(existStr, "\n") @@ -334,6 +350,9 @@ func snapAppImage(snap snapHelper, req dto.SnapshotCreate, targetDir string) err for _, item := range app.Children { if item.Label == "appImage" && item.IsCheck { for _, existImage := range existImages { + if len(existImage) == 0 { + continue + } if existImage == item.Name { imageList = append(imageList, item.Name) } @@ -342,10 +361,10 @@ func snapAppImage(snap snapHelper, req dto.SnapshotCreate, targetDir string) err } } + snap.Task.Log(strings.Join(imageList, " ")) if len(imageList) != 0 { snap.Task.Logf("docker save %s | gzip -c > %s", strings.Join(imageList, " "), path.Join(targetDir, "images.tar.gz")) std, err := cmd.Execf("docker save %s | gzip -c > %s", strings.Join(imageList, " "), path.Join(targetDir, "images.tar.gz")) - snap.Task.LogWithStatus(i18n.GetMsgByKey("SnapDockerSave"), errors.New(std)) if err != nil { snap.Task.LogFailedWithErr(i18n.GetMsgByKey("SnapDockerSave"), errors.New(std)) return errors.New(std) @@ -421,25 +440,32 @@ func snapPanelData(snap snapHelper, req dto.SnapshotCreate, targetDir string) er } } } - excludes = append(excludes, "./tmp") excludes = append(excludes, "./cache") - excludes = append(excludes, "./uploads") excludes = append(excludes, "./db") - excludes = append(excludes, "./resource") + excludes = append(excludes, "./tmp") if !req.WithSystemLog { excludes = append(excludes, "./log/1Panel*") } if !req.WithTaskLog { + excludes = append(excludes, "./log/AI") + excludes = append(excludes, "./log/AppStore") + excludes = append(excludes, "./log/Cronjob") + excludes = append(excludes, "./log/Image") + excludes = append(excludes, "./log/Compose") + excludes = append(excludes, "./log/Database") + excludes = append(excludes, "./log/RuntimeExtension") + excludes = append(excludes, "./log/Website") excludes = append(excludes, "./log/App") excludes = append(excludes, "./log/Snapshot") - excludes = append(excludes, "./log/AppStore") - excludes = append(excludes, "./log/Website") } rootDir := global.Dir.DataDir if strings.Contains(global.Dir.LocalBackupDir, rootDir) { excludes = append(excludes, "."+strings.ReplaceAll(global.Dir.LocalBackupDir, rootDir, "")) } + if len(snap.OpenrestyDir) != 0 && strings.Contains(snap.OpenrestyDir, rootDir) { + excludes = append(excludes, "."+strings.ReplaceAll(snap.OpenrestyDir, rootDir, "")) + } ignoreVal, _ := settingRepo.Get(settingRepo.WithByKey("SnapshotIgnore")) rules := strings.Split(ignoreVal.Value, ",") for _, ignore := range rules { @@ -450,6 +476,16 @@ func snapPanelData(snap snapHelper, req dto.SnapshotCreate, targetDir string) er } err := snap.FileOp.TarGzCompressPro(false, rootDir, path.Join(targetDir, "1panel_data.tar.gz"), "", strings.Join(excludes, ";")) snap.Task.LogWithStatus(i18n.GetMsgByKey("SnapCompressPanel"), err) + if err != nil { + return err + } + if len(snap.OpenrestyDir) != 0 { + err := snap.FileOp.TarGzCompressPro(false, snap.OpenrestyDir, path.Join(targetDir, "website.tar.gz"), "", "") + snap.Task.LogWithStatus(i18n.GetMsgByKey("SnapWebsite"), err) + if err != nil { + return err + } + } return err } diff --git a/agent/app/service/snapshot_recover.go b/agent/app/service/snapshot_recover.go index 7b5a6be01..b211e66a2 100644 --- a/agent/app/service/snapshot_recover.go +++ b/agent/app/service/snapshot_recover.go @@ -1,13 +1,11 @@ package service import ( - "context" "encoding/json" "fmt" "os" "path" "strings" - "sync" "github.com/1Panel-dev/1Panel/agent/app/repo" @@ -19,7 +17,6 @@ import ( "github.com/1Panel-dev/1Panel/agent/i18n" "github.com/1Panel-dev/1Panel/agent/utils/cmd" "github.com/1Panel-dev/1Panel/agent/utils/common" - "github.com/1Panel-dev/1Panel/agent/utils/compose" "github.com/1Panel-dev/1Panel/agent/utils/files" "github.com/pkg/errors" ) @@ -160,6 +157,17 @@ func (u *SnapshotService) SnapshotRecover(req dto.SnapshotRecover) error { itemHelper.Task.LogStart(i18n.GetWithName("RecoverPanelData", snap.Name)) err := itemHelper.FileOp.TarGzExtractPro(path.Join(rootDir, snap.Name, "/1panel_data.tar.gz"), path.Join(snapJson.BaseDir, "1panel"), "") itemHelper.Task.LogWithStatus(i18n.GetMsgByKey("Decompress"), err) + if err != nil { + return err + } + + if len(snapJson.OperestyDir) != 0 { + err := itemHelper.FileOp.TarGzExtractPro(path.Join(rootDir, snap.Name, "/website.tar.gz"), snapJson.OperestyDir, "") + itemHelper.Task.LogWithStatus(i18n.GetMsgByKey("RecoverWebsite"), err) + if err != nil { + return err + } + } return err }, nil, @@ -219,11 +227,24 @@ func backupBeforeRecover(name string, itemHelper *snapRecoverHelper) error { if err != nil { return err } - err = itemHelper.FileOp.CopyDirWithExclude(global.Dir.LocalBackupDir, rootDir, []string{"system_snapshot"}) - itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", global.Dir.LocalBackupDir), err) - if err != nil { - return err + + openrestyDir, _ := settingRepo.GetValueByKey("WEBSITE_DIR") + if len(openrestyDir) != 0 && !strings.Contains(openrestyDir, global.Dir.DataDir) { + err := itemHelper.FileOp.CopyDirWithExclude(openrestyDir, rootDir, nil) + itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", openrestyDir), err) + if err != nil { + return err + } } + + if len(global.Dir.LocalBackupDir) != 0 && !strings.Contains(global.Dir.LocalBackupDir, global.Dir.DataDir) { + err = itemHelper.FileOp.CopyDirWithExclude(global.Dir.LocalBackupDir, rootDir, []string{"system_snapshot"}) + itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", global.Dir.LocalBackupDir), err) + if err != nil { + return err + } + } + err = itemHelper.FileOp.CopyFile("/usr/local/bin/1pctl", baseDir) itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1pctl"), err) if err != nil { @@ -235,19 +256,17 @@ func backupBeforeRecover(name string, itemHelper *snapRecoverHelper) error { if err != nil { return err } - } - err = itemHelper.FileOp.CopyFile("/usr/local/bin/1panel-agent", baseDir) - itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-agent"), err) - if err != nil { - return err - } - if global.IsMaster { err = itemHelper.FileOp.CopyFile("/etc/systemd/system/1panel-core.service", baseDir) itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel-core.service"), err) if err != nil { return err } } + err = itemHelper.FileOp.CopyFile("/usr/local/bin/1panel-agent", baseDir) + itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-agent"), err) + if err != nil { + return err + } err = itemHelper.FileOp.CopyFile("/etc/systemd/system/1panel-agent.service", baseDir) itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel-agent.service"), err) if err != nil { @@ -294,35 +313,13 @@ func recoverAppData(src string, itemHelper *snapRecoverHelper) error { if _, err := os.Stat(path.Join(src, "images.tar.gz")); err != nil { itemHelper.Task.Log(i18n.GetMsgByKey("RecoverAppEmpty")) return nil - } else { - std, err := cmd.Execf("docker load < %s", path.Join(src, "images.tar.gz")) - if err != nil { - itemHelper.Task.LogFailedWithErr(i18n.GetMsgByKey("RecoverAppImage"), errors.New(std)) - return fmt.Errorf("docker load images failed, err: %v", err) - } - itemHelper.Task.LogSuccess(i18n.GetMsgByKey("RecoverAppImage")) } - - appInstalls, err := appInstallRepo.ListBy(context.Background()) - itemHelper.Task.LogWithStatus(i18n.GetMsgByKey("RecoverAppList"), err) + std, err := cmd.Execf("docker load < %s", path.Join(src, "images.tar.gz")) if err != nil { - return err + itemHelper.Task.LogFailedWithErr(i18n.GetMsgByKey("RecoverAppImage"), errors.New(std)) + return fmt.Errorf("docker load images failed, err: %v", err) } - - var wg sync.WaitGroup - for i := 0; i < len(appInstalls); i++ { - wg.Add(1) - appInstalls[i].Status = constant.StatusRebuilding - _ = appInstallRepo.Save(context.Background(), &appInstalls[i]) - go func(app model.AppInstall) { - defer wg.Done() - dockerComposePath := app.GetComposePath() - _, _ = compose.Up(dockerComposePath) - app.Status = constant.StatusRunning - _ = appInstallRepo.Save(context.Background(), &app) - }(appInstalls[i]) - } - wg.Wait() + itemHelper.Task.LogSuccess(i18n.GetMsgByKey("RecoverAppImage")) return nil } diff --git a/agent/app/service/snapshot_rollback.go b/agent/app/service/snapshot_rollback.go index c3215ffd9..6216601a8 100644 --- a/agent/app/service/snapshot_rollback.go +++ b/agent/app/service/snapshot_rollback.go @@ -89,6 +89,16 @@ func (u *SnapshotService) SnapshotRollback(req dto.SnapshotRecover) error { }, nil, ) + openrestyDir, _ := settingRepo.GetValueByKey("WEBSITE_DIR") + if len(openrestyDir) != 0 { + taskItem.AddSubTask( + i18n.GetWithName("SnapCopy", openrestyDir), + func(t *task.Task) error { + return FileOp.CopyDir(path.Join(rootDir, "www"), openrestyDir) + }, + nil, + ) + } taskItem.AddSubTask( i18n.GetWithName("SnapCopy", global.Dir.BaseDir), func(t *task.Task) error { diff --git a/agent/constant/status.go b/agent/constant/status.go index 186664471..f772bf406 100644 --- a/agent/constant/status.go +++ b/agent/constant/status.go @@ -1,39 +1,40 @@ package constant const ( - StatusRunning = "Running" - StatusCanceled = "Canceled" - StatusDone = "Done" - StatusWaiting = "Waiting" - StatusSuccess = "Success" - StatusFailed = "Failed" - StatusUploading = "Uploading" - StatusEnable = "Enable" - StatusDisable = "Disable" - StatusNone = "None" - StatusDeleted = "Deleted" - StatusExecuting = "Executing" - StatusBuilding = "Building" - StatusReCreating = "Recreating" - StatusStopped = "Stopped" - StatusCreating = "Creating" - StatusStartErr = "StartErr" - StatusNormal = "Normal" - StatusError = "Error" - StatusStarting = "Starting" - StatusRestarting = "ReStarting" - StatusUnHealthy = "UnHealthy" - StatusInstalling = "Installing" - StatusDownloadErr = "DownloadErr" - StatusUpgrading = "Upgrading" - StatusUpgradeErr = "UpgradeErr" - StatusRebuilding = "Rebuilding" - StatusSyncing = "Syncing" - StatusSyncSuccess = "SyncSuccess" - StatusPaused = "Paused" - StatusUpErr = "UpErr" - StatusInstallErr = "InstallErr" - StatusUninstalling = "Uninstalling" + StatusRunning = "Running" + StatusCanceled = "Canceled" + StatusDone = "Done" + StatusWaiting = "Waiting" + StatusSuccess = "Success" + StatusFailed = "Failed" + StatusUploading = "Uploading" + StatusEnable = "Enable" + StatusDisable = "Disable" + StatusNone = "None" + StatusDeleted = "Deleted" + StatusExecuting = "Executing" + StatusBuilding = "Building" + StatusReCreating = "Recreating" + StatusStopped = "Stopped" + StatusCreating = "Creating" + StatusStartErr = "StartErr" + StatusNormal = "Normal" + StatusError = "Error" + StatusStarting = "Starting" + StatusRestarting = "ReStarting" + StatusUnHealthy = "UnHealthy" + StatusInstalling = "Installing" + StatusDownloadErr = "DownloadErr" + StatusUpgrading = "Upgrading" + StatusUpgradeErr = "UpgradeErr" + StatusRebuilding = "Rebuilding" + StatusSyncing = "Syncing" + StatusSyncSuccess = "SyncSuccess" + StatusPaused = "Paused" + StatusUpErr = "UpErr" + StatusInstallErr = "InstallErr" + StatusUninstalling = "Uninstalling" + StatusWaitingRestart = "WaitingRestart" OrderDesc = "descending" OrderAsc = "ascending" diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index e544f1998..4ab2d1e29 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -1,379 +1,422 @@ -ErrInvalidParams: "Request parameter error: {{ .detail }}" -ErrInternalServer: "Service internal error: {{ .detail }}" -ErrRecordExist: "Record already exists" -ErrRecordNotFound: "Records not found" -ErrStructTransform: "Type conversion failure: {{ .detail }}" -ErrNotSupportType: "The system does not support the current type: {{ .detail }}" +ErrInvalidParams: 'Request parameter error: {{ .detail }}' +ErrTokenParse: 'Token generation error: {{ .detail }}' +ErrInitialPassword: 'Original password is incorrect' +ErrInternalServer: 'Internal server error: {{ .detail }}' +ErrRecordExist: 'Record already exists' +ErrRecordNotFound: 'Record not found' +ErrStructTransform: 'Type conversion failed: {{ .err }}' +ErrNotLogin: 'User not logged in: {{ .detail }}' +ErrPasswordExpired: 'The current password has expired: {{ .detail }}' +ErrNotSupportType: 'The system does not support the current type: {{ .name }}' +ErrProxy: 'Request error, please check the node status: {{ .detail }}' +ErrApiConfigStatusInvalid: 'Access to the API interface is prohibited: {{ .detail }}' +ErrApiConfigKeyInvalid: 'API interface key error: {{ .detail }}' +ErrApiConfigIPInvalid: 'The IP used to call the API interface is not in the whitelist: {{ .detail }}' +ErrApiConfigDisable: 'This interface prohibits the use of API interface calls: {{ .detail }}' +ErrApiConfigKeyTimeInvalid: 'API interface timestamp error: {{ .detail }}' #common -ErrUsernameIsExist: "Username already exists" -ErrNameIsExist: "Name is already exist" -ErrDemoEnvironment: "Demo server, prohibit this operation!" -ErrCmdTimeout: "Command execution timed out!" -ErrCmdIllegal: "The command contains illegal characters. Please modify and try again!" -ErrPortExist: "{{ .port }} port is already occupied by {{ .type }} [{{ .name }}]" -TYPE_APP: "Application" -TYPE_RUNTIME: "Runtime environment" -TYPE_DOMAIN: "Domain name" -ErrTypePort: "Port {{ .name }} format error" -Success: "Success" -Failed: "Failed" -SystemRestart: "System restart causes task interruption" -ErrGroupIsDefault: "Default group, cannot be deleted" -ErrGroupIsInWebsiteUse: "Group is being used by other websites, cannot be deleted" +ErrUsernameIsExist: 'Username already exists' +ErrNameIsExist: 'Name already exists' +ErrDemoEnvironment: 'Demo server, this operation is forbidden!' +ErrCmdTimeout: 'Command execution timed out!' +ErrCmdIllegal: 'There are illegal characters in the execution command, please modify it and try again!' +ErrPortExist: '{{ .port }} port is already occupied by {{ .type }} [{{ .name }}]' +TYPE_APP: 'Application' +TYPE_RUNTIME: 'Runtime environment' +TYPE_DOMAIN: 'Domain Name' +ErrTypePort: 'Port {{ .name }} format is incorrect' +ErrTypePortRange: 'The port range needs to be between 1-65535' +Success: 'Success' +Failed: 'Failed' +SystemRestart: 'Task interrupted due to system restart' +ErrGroupIsDefault: 'Default group, cannot be deleted' +ErrGroupIsInWebsiteUse: 'The group is being used by another website and cannot be deleted.' #backup -ErrBackupLocalDelete: "Deleting local server backup accounts is not currently supported." -ErrBackupLocalCreate: "Creating local server backup accounts is not currently supported." +ErrBackupInUsed: 'The backup account has been used in the scheduled task and cannot be deleted.' +ErrBackupCheck: 'Backup account test connection failed {{ .err }}' +ErrBackupLocalDelete: 'Deleting the local server backup account is not supported yet' +ErrBackupLocalCreate: 'Creating local server backup accounts is not supported yet' #app -ErrPortInUsed: "{{ .detail }} port already in use" -ErrAppLimit: "App exceeds install limit" -ErrAppRequired: "{{ .detail }} app is required" -ErrNotInstall: "App not installed" -ErrPortInOtherApp: "{{ .port }} port already in use by app {{ .apps }}" -ErrDbUserNotValid: "Stock database, username and password do not match!" -ErrDockerComposeNotValid: "docker-compose file format error!" -ErrUpdateBuWebsite: "The application was updated successfully, but the modification of the website configuration file failed, please check the configuration!" -Err1PanelNetworkFailed: "Default container network creation failed! {{ .detail }}" -ErrFileParse: "Application docker-compose file parsing failed!" -ErrInstallDirNotFound: "The installation directory does not exist. To uninstall it, please choose to force uninstall." -AppStoreIsUpToDate: "The app store is already up to date!" -LocalAppVersionNull: "The {{.name}} app is not synced to version! Could not add to application list" -LocalAppVersionErr: "{{.name}} failed to sync version {{.version}}! {{.err}}" -ErrFileNotFound: "{{.name}} file does not exist" -ErrFileParseApp: "Failed to parse {{.name}} file {{.err}}" -ErrAppDirNull: "version folder does not exist" -LocalAppErr: "App {{.name}} sync failed! {{.err}}" -ErrContainerName: "ContainerName is already exist" -ErrAppSystemRestart: "1Panel restart causes the task to terminate" -ErrCreateHttpClient: "Failed to create HTTP request {{.err}}" -ErrHttpReqTimeOut: "Request timed out {{.err}}" -ErrHttpReqFailed: "Request failed {{.err}}" -ErrHttpReqNotFound: "The file does not exist" -ErrNoSuchHost: "Network connection failed" -ErrImagePullTimeOut: "Image pull timeout" -ErrContainerNotFound: "{{ .name }} container does not exist" -ErrContainerMsg: "{{ .name }} container is abnormal, please check the log on the container page for details" -ErrAppBackup: "{{ .name }} application backup failed err {{.err}}" -ErrImagePull: "{{ .name }} image pull failed err {{.err}}" -ErrVersionTooLow: "The current 1Panel version is too low to update the app store, please upgrade the version" -ErrAppNameExist: "App name is already exist" -AppStoreIsSyncing: "The App Store is syncing, please try again later" -ErrGetCompose: "Failed to obtain docker-compose.yml file! {{ .detail }}" -ErrAppWarn: "Abnormal status, please check the log" -ErrAppParamKey: "Parameter {{ .name }} field exception" -ErrAppUpgrade: "Failed to upgrade application {{ .name }} {{ .err }}" -AppRecover: "App {{ .name }} rolled back " -PullImageStart: "Start pulling image {{ .name }}" -PullImageSuccess: "Image pulled successfully" -UpgradeAppStart: "Start upgrading application {{ .name }}" -UpgradeAppSuccess: "App {{ .name }} upgraded successfully" -AppStoreIsLastVersion: "The app store is up to date" -AppStoreSyncSuccess: "App store synchronized successfully" -SyncAppDetail: "Synchronize app configuration" -AppVersionNotMatch: "{{ .name }} app requires an update to 1Panel, skipping synchronization" -MoveSiteDir: "The current upgrade requires migrating the OpenResty website directory" -MoveSiteToDir: "Migrate the website directory to {{ .name }}" -ErrMoveSiteDir: "Failed to migrate the website directory" -MoveSiteDirSuccess: "Successfully migrated the website directory" -DeleteRuntimePHP: "Delete PHP runtime environment", -CustomAppStoreNotConfig: "Please configure the offline package address in the app store settings", -CustomAppStoreNotFound: "Failed to retrieve app store package, please check if it exists", -CustomAppStoreFileValid: "App store package must be in .tar.gz format" -PullImageTimeout: "Image pull timeout, please check the network and try again" -ErrAppIsDown: "{{ .name }} application status is abnormal, please check" +ErrPortInUsed: '{{ .detail }} port is already occupied!' +ErrAppLimit: 'The number of applications installed has exceeded the limit' +ErrAppRequired: 'Please install the {{ .detail }} application first' +ErrNotInstall: 'Application not installed' +ErrPortInOtherApp: '{{ .port }} port is already occupied by application {{ .apps }}!' +ErrDbUserNotValid: 'Existing database, username and password do not match!' +ErrDockerComposeNotValid: 'The docker-compose file format is incorrect' +ErrUpdateBuWebsite: 'The application was updated successfully, but the website configuration file modification failed. Please check the configuration! ' +Err1PanelNetworkFailed: 'Default container network creation failed! {{ .detail }}' +ErrFileParse: 'Application docker-compose file parsing failed!' +ErrInstallDirNotFound: 'The installation directory does not exist. If you need to uninstall, please select Force Uninstall' +AppStoreIsUpToDate: 'The app store is already the latest version' +LocalAppVersionNull: '{{ .name }} application is not synchronized to the version! Cannot be added to the application list' +LocalAppVersionErr: '{{ .name }} sync version {{ .version }} failed! {{ .err }}' +ErrFileNotFound: '{{ .name }} file does not exist' +ErrFileParseApp: '{{ .name }} file parsing failed {{ .err }}' +ErrAppDirNull: 'The version folder does not exist' +LocalAppErr: 'Application {{ .name }} sync failed! {{ .err }}' +ErrContainerName: 'Container name already exists' +ErrAppSystemRestart: '1Panel restart caused the task to terminate' +ErrCreateHttpClient: 'Failed to create request {{ .err }}' +ErrHttpReqTimeOut: 'Request timed out {{ .err }}' +ErrHttpReqFailed: 'Request failed {{ .err }}' +ErrNoSuchHost: 'Unable to find the requested server {{ .err }}' +ErrHttpReqNotFound: 'The requested resource {{ .err }} could not be found' +ErrImagePullTimeOut: 'Image pull timeout' +ErrContainerNotFound: '{{ .name }} container does not exist' +ErrContainerMsg: '{{ .name }} container is abnormal. Please check the log on the container page for details' +ErrAppBackup: '{{ .name }} application backup failed {{ .err }}' +ErrImagePull: 'Image pull failed {{ .err }}' +ErrVersionTooLow: 'The current 1Panel version is too low to update the App Store. Please upgrade the version before operating.' +ErrAppNameExist: 'The application name already exists' +AppStoreIsSyncing: 'The App Store is syncing, please try again later' +ErrGetCompose: 'Failed to obtain the docker-compose.yml file! {{ .detail }}' +ErrAppWarn: 'Abnormal status, please check the log' +ErrAppParamKey: 'Parameter {{ .name }} field is abnormal' +ErrAppUpgrade: 'Application {{ .name }} upgrade failed {{ .err }}' +AppRecover: 'Rollback application {{ .name }}' +PullImageStart: 'Start pulling image {{ .name }}' +PullImageSuccess: 'Image pull successful' +UpgradeAppStart: 'Start upgrading application {{ .name }}' +UpgradeAppSuccess: 'Application {{ .name }} upgraded successfully' +AppStoreIsLastVersion: 'The App Store is already the latest version' +AppStoreSyncSuccess: 'App Store synchronization successful' +SyncAppDetail: 'Synchronize application configuration' +AppVersionNotMatch: '{{ .name }} application requires a higher 1Panel version, skipping synchronization' +MoveSiteDir: 'The current upgrade requires migration of the OpenResty website directory' +MoveSiteToDir: 'Migrate site directory to {{ .name }}' +ErrMoveSiteDir: 'Failed to migrate site directory' +MoveSiteDirSuccess: 'Successful migration of website directory' +DeleteRuntimePHP: 'Delete PHP runtime' +CustomAppStoreNotConfig: 'Please set the offline package address in the app store' +CustomAppStoreNotFound: 'Failed to obtain the app store package, please check whether it exists' +CustomAppStoreFileValid: 'App store packages need to be in .tar.gz format' +PullImageTimeout: 'Pull image timeout, please try to increase the image acceleration or change to another image acceleration' +ErrAppIsDown: '{{ .name }} application status is abnormal, please check' +ErrCustomApps: 'There is an installed application, please uninstall it first' +ErrCustomRuntimes: 'There is an installed runtime environment, please delete it first' #file -ErrFileCanNotRead: "File can not read" -ErrFileToLarge: "file is too large" -ErrPathNotFound: "Path is not found" -ErrMovePathFailed: "The target path cannot contain the original path!" -ErrLinkPathNotFound: "Target path does not exist!" -ErrFileIsExist: "File or directory already exists!" -ErrFileUpload: "Failed to upload file {{.name}} {{.detail}}" -ErrFileDownloadDir: "Download folder not supported" -ErrCmdNotFound: "{{ .name}} command does not exist, please install this command on the host first" -ErrSourcePathNotFound: "Source directory does not exist" -ErrFavoriteExist: "This path has been collected" -ErrInvalidChar: "Illegal characters are prohibited" -ErrPathNotDelete: "The selected directory cannot be deleted" +ErrFileCanNotRead: 'This file does not support preview' +ErrFileToLarge: 'The file is larger than 10M and cannot be opened' +ErrPathNotFound: 'Directory does not exist' +ErrMovePathFailed: 'The target path cannot contain the original path!' +ErrLinkPathNotFound: 'The target path does not exist!' +ErrFileIsExist: 'The file or folder already exists!' +ErrFileUpload: '{{ .name }} failed to upload file {{ .detail }}' +ErrFileDownloadDir: 'Download folder is not supported' +ErrCmdNotFound: '{{ .name}} command does not exist, please install this command on the host first' +ErrSourcePathNotFound: 'Source directory does not exist' +ErrFavoriteExist: 'This path has already been favorited' +ErrInvalidChar: 'Illegal characters are not allowed' +ErrPathNotDelete: 'The selected directory cannot be deleted' #website -ErrDomainIsExist: "Domain is already exist" -ErrAliasIsExist: "Alias is already exist" -ErrAppDelete: "Other Website use this App" -ErrGroupIsUsed: "The group is in use and cannot be deleted" -ErrBackupMatch: "the backup file does not match the current partial data of the website: {{ .detail}}" -ErrBackupExist: "the backup file corresponds to a portion of the original data that does not exist: {{ .detail}}" -ErrPHPResource: "The local runtime does not support switching!" -ErrPathPermission: "A folder with non-1000:1000 permissions was detected in the index directory, which may cause an Access denied error when accessing the website. Please click the save button above" -ErrDomainIsUsed: "Domain is already used by website {{ .name }}" -ErrDomainFormat: "{{ .name }} domain format error" -ErrDefaultAlias: "default is a reserved code name, please use another code name" -ErrParentWebsite: "You need to delete the subsite(s) {{ .name }} first" -ErrBuildDirNotFound: "Build directory does not exist" -ErrImageNotExist: "Running environment {{.name}} image does not exist, please re-edit the running environment" +ErrDomainIsExist: 'Domain name already exists' +ErrAliasIsExist: 'Alias already exists' +ErrAppDelete: 'Other websites use this app and cannot delete it' +ErrBackupMatch: 'The backup file does not match some of the current website data {{ .detail }}' +ErrBackupExist: 'The corresponding part of the source data in the backup file does not exist {{ .detail }}' +ErrPHPResource: 'The local operating environment does not support switching! ' +ErrPathPermission: 'A folder with non-1000:1000 permissions was detected in the index directory, which may cause an Access denied error on the website. Please click the Save button above' +ErrDomainIsUsed: 'The domain name is already used by the website [{{ .name }}]' +ErrDomainFormat: '{{ .name }} domain name format is incorrect' +ErrDefaultAlias: 'default is a reserved code, please use another code' +ErrParentWebsite: 'You need to delete the subsite {{ .name }} first' +ErrBuildDirNotFound: 'The build directory does not exist' +ErrImageNotExist: 'The operating environment {{ .name }} image does not exist, please re-edit the operating environment' #ssl -ErrSSLCannotDelete: "The certificate {{ .name }} is being used by the website and cannot be removed" -ErrAccountCannotDelete: "The certificate associated with the account cannot be deleted" -ErrSSLApply: "The certificate continues to be signed successfully, but openresty reload fails, please check the configuration!" -ErrEmailIsExist: "Email is already exist" -ErrSSLKeyNotFound: "The private key file does not exist" -ErrSSLCertificateNotFound: "The certificate file does not exist" -ErrSSLKeyFormat: "Private key file verification error" -ErrSSLCertificateFormat: "Certificate file format error, please use pem format" -ErrEabKidOrEabHmacKeyCannotBlank: "EabKid or EabHmacKey cannot be empty" -ErrOpenrestyNotFound: "Http mode requires Openresty to be installed first" -ApplySSLStart: "Start applying for certificate, domain name [{{ .domain }}] application method [{{ .type }}] " -dnsAccount: "DNS Automatic" -dnsManual: "DNS Manual" -http: "HTTP" -ApplySSLFailed: "Application for [{{ .domain }}] certificate failed, {{.detail}} " -ApplySSLSuccess: "Application for [{{ .domain }}] certificate successful! ! " -DNSAccountName: "DNS account [{{ .name }}] manufacturer [{{.type}}]" -PushDirLog: "Certificate pushed to directory [{{ .path }}] {{ .status }}" -ErrDeleteCAWithSSL: "There is an issued certificate under the current organization and cannot be deleted" -ErrDeleteWithPanelSSL: "Panel SSL configuration uses this certificate and cannot be deleted" -ErrDefaultCA: "The default organization cannot be deleted" -ApplyWebSiteSSLLog: "Start updating {{ .name }} website certificate" -ErrUpdateWebsiteSSL: "{{ .name }} website failed to update certificate: {{ .err }}" -ApplyWebSiteSSLSuccess: "Update website certificate successfully" -StartUpdateSystemSSL: "Start updating system certificate" -UpdateSystemSSLSuccess: "Update system certificate successfully" -ErrExecShell: "Exec Shell err {{.err}}" -ExecShellStart: "Start executing script" -ExecShellSuccess: "Script executed successfully" +ErrSSLCannotDelete: 'The {{ .name }} certificate is being used by a website and cannot be deleted' +ErrAccountCannotDelete: 'The account is associated with a certificate and cannot be deleted' +ErrSSLApply: 'Certificate renewal successful, openresty reload failed, please check the configuration!' +ErrEmailIsExist: 'The mailbox already exists' +ErrSSLKeyNotFound: 'The private key file does not exist' +ErrSSLCertificateNotFound: 'The certificate file does not exist' +ErrSSLKeyFormat: 'Private key file verification failed' +ErrSSLCertificateFormat: 'The certificate file format is incorrect, please use pem format' +ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid or EabHmacKey cannot be blank' +ErrOpenrestyNotFound: 'Http mode requires Openresty to be installed first' +ApplySSLStart: 'Start applying for a certificate, domain name [{{ .domain }}] application method [{{ .type }}] ' +dnsAccount: 'DNS Auto' +dnsManual: 'DNS Manual' +http: 'HTTP' +ApplySSLFailed: 'Application for [{{ .domain }}] certificate failed, {{ .detail }} ' +ApplySSLSuccess: 'Apply for [{{ .domain }}] certificate successfully! !' +DNSAccountName: 'DNS account [{{ .name }}] vendor [{{ .type }}]' +PushDirLog: 'Certificate pushed to directory [{{ .path }}] {{ .status }}' +ErrDeleteCAWithSSL: 'The current organization has a certificate that has been issued and cannot be deleted.' +ErrDeleteWithPanelSSL: 'Panel SSL configuration uses this certificate and cannot be deleted' +ErrDefaultCA: 'The default authority cannot be deleted' +ApplyWebSiteSSLLog: 'Starting to renew the {{ .name }} website certificate' +ErrUpdateWebsiteSSL: '{{ .name }} website certificate update failed: {{ .err }}' +ApplyWebSiteSSLSuccess: 'Update website certificate successfully' +ErrExecShell: 'Failed to execute script {{ .err }}' +ExecShellStart: 'Start executing the script' +ExecShellSuccess: 'Script execution successful' +StartUpdateSystemSSL: 'Start updating system certificate' +UpdateSystemSSLSuccess: 'Update system certificate successfully' +ErrWildcardDomain: 'Unable to apply for wildcard domain name certificate in HTTP mode' #mysql -ErrUserIsExist: "The current user already exists. Please enter a new user" -ErrDatabaseIsExist: "The current database already exists. Please enter a new database" -ErrExecTimeOut: "SQL execution timed out, please check the database" -ErrRemoteExist: "The remote database already exists with that name, please modify it and try again" -ErrLocalExist: "The local database already exists with that name, please modify it and try again" +ErrUserIsExist: 'The current user already exists, please re-enter' +ErrDatabaseIsExist: 'The current database already exists, please re-enter' +ErrExecTimeOut: 'SQL execution timed out, please check the database' +ErrRemoteExist: 'The remote database already exists with this name, please modify it and try again' +ErrLocalExist: 'The name already exists in the local database, please modify it and try again' #redis -ErrTypeOfRedis: "The recovery file type does not match the current persistence mode. Modify the file type and try again" +ErrTypeOfRedis: 'The recovery file type does not match the current persistence method, please modify it and try again' #container -ErrInUsed: "{{ .detail }} is in use and cannot be deleted" -ErrObjectInUsed: "This object is in use and cannot be deleted" -ErrObjectBeDependent: "This image is dependent on other images and can't be deleted" -ErrPortRules: "The number of ports does not match, please re-enter!" -ErrPgImagePull: "Image pull timeout. Please configure image acceleration or manually pull the postgres:16.0-alpine image and try again" +ErrInUsed: '{{ .detail }} is in use and cannot be deleted' +ErrObjectInUsed: 'The object is in use and cannot be deleted' +ErrObjectBeDependent: 'This image depends on other images and cannot be deleted' +ErrPortRules: 'Port number does not match, please re-enter!' +ErrPgImagePull: 'Image pull timed out, please configure image acceleration or manually pull the {{ .name }} image and try again' #runtime -ErrDirNotFound: "The build folder does not exist! Please check file integrity!" -ErrFileNotExist: "{{ .detail }} file does not exist! Please check source file integrity!" -ErrImageBuildErr: "Image build failed" -ErrImageExist: "Image is already exist!" -ErrDelWithWebsite: "The operating environment has been associated with a website and cannot be deleted" -ErrRuntimeStart: "Failed to start" -ErrPackageJsonNotFound: "package.json file does not exist" -ErrScriptsNotFound: "No scripts configuration item was found in package.json" -ErrContainerNameNotFound: "Unable to get container name, please check .env file" -ErrNodeModulesNotFound: "The node_modules folder does not exist! Please edit the running environment or wait for the running environment to start successfully" -ErrContainerNameIsNull: "Container name cannot be empty" - -#setting -ErrBackupInUsed: "The backup account is already being used in a cronjob and cannot be deleted." -ErrBackupCheck: "Backup account test connection failed {{ .err}}" -ErrOSSConn: "Unable to retrieve the latest version, please check if the server can connect to the external network." -ErrEntrance: "Security entrance information error. Please check and try again!" +ErrDirNotFound: 'The build folder does not exist! Please check the file integrity!' +ErrFileNotExist: '{{ .detail }} file does not exist! Please check the integrity of the source file!' +ErrImageBuildErr: 'Image build failed' +ErrImageExist: 'Image already exists!' +ErrDelWithWebsite: 'The operating environment is already associated with a website and cannot be deleted' +ErrRuntimeStart: 'Startup failed' +ErrPackageJsonNotFound: 'package.json file does not exist' +ErrScriptsNotFound: 'The scripts configuration item was not found in package.json' +ErrContainerNameNotFound: 'Unable to get container name, please check .env file' +ErrNodeModulesNotFound: 'The node_modules folder does not exist! Please edit the runtime environment or wait for the runtime environment to start successfully' +ErrContainerNameIsNull: 'Container name does not exist' #tool -ErrConfigNotFound: "Configuration file does not exist" -ErrConfigParse: "Configuration file format error" -ErrConfigIsNull: "The configuration file is not allowed to be empty" -ErrConfigDirNotFound: "The running directory does not exist" -ErrConfigAlreadyExist: "A configuration file with the same name already exists" -ErrUserFindErr: "Failed to find user {{ .name }} {{ .err }}" +ErrConfigNotFound: 'Configuration file does not exist' +ErrConfigParse: 'The configuration file format is incorrect' +ErrConfigIsNull: 'Configuration file cannot be empty' +ErrConfigDirNotFound: 'The running directory does not exist' +ErrConfigAlreadyExist: 'A configuration file with the same name already exists' +ErrUserFindErr: 'User {{ .name }} search failed {{ .err }}' #ssh -ErrFirewallNone: "No firewalld or ufw service detected on the system. Please check and try again!" -ErrFirewallBoth: "Both firewalld and ufw services are detected on the system. To avoid conflicts, please uninstall one and try again!" +ErrFirewallNone: 'No system firewalld or ufw service detected, please check and try again!' +ErrFirewallBoth: 'It is detected that the system has both firewalld and ufw services. To avoid conflicts, please uninstall and try again!' #cronjob -ErrCutWebsiteLog: "{{ .name }} website log cutting failed, error {{ .err }}" -CutWebsiteLogSuccess: "{{ .name }} website log cut successfully, backup path {{ .path }}" -HandleShell: "Execute script {{ .name }}" -HandleNtpSync: "System time synchronization" -HandleSystemClean: "System cache cleanup" +ErrCutWebsiteLog: '{{ .name }} website log cutting failed, error {{ .err }}' +CutWebsiteLogSuccess: '{{ .name }} website log cut successfully, backup path {{ .path }}' +HandleShell: 'Execute script {{ .name }}' +HandleNtpSync: 'System time synchronization' +HandleSystemClean: 'System cache cleanup' #toolbox -ErrNotExistUser: "The current user does not exist. Please modify and retry!" -ErrBanAction: "Setting failed, the current {{ .name }} service is unavailable, please check and try again!" -ErrClamdscanNotFound: "The clamdscan command was not detected, please refer to the documentation to install it!" +ErrNotExistUser: 'The current user does not exist, please modify and try again!' +ErrBanAction: 'Setting failed. The current {{ .name }} service is unavailable. Please check and try again!' +ErrClamdscanNotFound: 'The clamdscan command was not detected, please refer to the documentation to install it!' #waf -ErrScope: "Modification of this configuration is not supported" -ErrStateChange: "State modification failed" -ErrRuleExist: "Rule is Exist" -ErrRuleNotExist: "Rule is not Exist" -ErrParseIP: "IP format error" -ErrDefaultIP: "default is a reserved name, please change it to another name" -ErrGroupInUse: "The IP group is used by the black/white list and cannot be deleted" -ErrGroupExist: "IP group name already exists" -ErrIPRange: "Wrong IP range" -ErrIPExist: "IP is exit" -urlDefense: 'URL Rules' -urlHelper: 'Forbidden Access URLs' -dirFilter: 'Directory Filtering' +ErrScope: 'Modifying this configuration is not supported' +ErrStateChange: 'State change failed' +ErrRuleExist: 'Rule already exists' +ErrRuleNotExist: 'Rule does not exist' +ErrParseIP: 'Wrong IP format' +ErrDefaultIP: 'default is a reserved name, please change it to another name' +ErrGroupInUse: 'IP group is used by blacklist/whitelist and cannot be deleted' +ErrGroupExist: 'IP group name already exists' +ErrIPRange: 'Wrong IP range' +ErrIPExist: 'IP already exists' +urlDefense: 'URL rules' +urlHelper: 'Prohibited URL' +dirFilter: 'Directory filter' xss: 'XSS' -phpExec: 'PHP Script Execution' -oneWordTrojan: 'One-Liner Trojan' -appFilter: 'Application Dangerous Directory Filtering' +phpExec: 'PHP script execution' +oneWordTrojan: 'One Word Trojan' +appFilter: 'Apply dangerous directory filtering' webshell: 'Webshell' -args: 'Parameter Rules' -protocolFilter: 'Protocol Filtering' -javaFileter: 'Java Dangerous File Filtering' -scannerFilter: 'Scanner Filtering' -escapeFilter: 'Escape Filtering' -customRule: 'Custom Rules' -httpMethod: 'HTTP Method Filtering' -fileExt: 'File Upload Restrictions' -defaultIpBlack: 'Malicious IP Group' +args: 'Parameter rules' +protocolFilter: 'Protocol filtering' +javaFileter: 'Java dangerous file filter' +scannerFilter: 'Scanner filter' +escapeFilter: 'escape filter' +customRule: 'Custom rule' +httpMethod: 'HTTP method filtering' +fileExt: 'File upload restrictions' +defaultIpBlack: 'Malicious IP group' cookie: 'Cookie Rules' -urlBlack: 'URL Blacklist' -uaBlack: 'User-Agent Blacklist' -attackCount: 'Attack Frequency Limit' -fileExtCheck: 'File Upload Restrictions' -geoRestrict: 'Geographical Access Restrictions' -unknownWebsite: 'Unauthorized Domain Access' -notFoundCount: '404 Frequency Limit' -headerDefense: 'Header Rules' -defaultUaBlack: 'User-Agent Rules' -methodWhite: 'HTTP Rules' -captcha: 'Captcha' -fiveSeconds: '5 Seconds Verification' -vulnCheck: 'Supplementary Rules' -acl: 'Custom Rules' -sql: 'SQL Injection' -cc: 'Access Frequency Limit' -defaultUrlBlack: 'URL Rules' -sqlInject: 'SQL Injection' -ErrDBNotExist: "Database does not exist" -allow: "Allow" -deny: "Deny" +urlBlack: 'URL blacklist' +uaBlack: 'User-Agent blacklist' +attackCount: 'Attack frequency limit' +fileExtCheck: 'File upload restrictions' +geoRestrict: 'Regional access restrictions' +unknownWebsite: 'Unauthorized domain name access' +notFoundCount: '404 Rate Limit' +headerDefense: 'Header rules' +defaultUaBlack: 'User-Agent rules' +methodWhite: 'HTTP rules' +captcha: 'human-machine verification' +fiveSeconds: '5 seconds verification' +vulnCheck: 'Supplementary rules' +acl: 'Custom rules' +sql: 'SQL injection' +cc: 'Access frequency limit' +defaultUrlBlack: 'URL rules' +sqlInject: 'SQL injection' +ErrDBNotExist: 'Database does not exist' +allow: 'allow' +deny: 'deny' +OpenrestyNotFound: 'Openresty is not installed' #task -TaskStart: "{{.name}} Start [START]" -TaskEnd: "{{.name}} End [COMPLETED]" -TaskFailed: "{{.name}} Failed" -TaskTimeout: "{{.name}} Timeout" -TaskSuccess: "{{.name}} Success" -TaskRetry: "Starting {{.name}} Retry" -SubTaskSuccess: "{{ .name }} Success" -SubTaskFailed: "{{ .name }} Failed: {{ .err }}" -TaskInstall: "Install" -TaskUninstall: "Uninstall" -TaskCreate: "Create" -TaskDelete: "Delete" -TaskUpgrade: "Upgrade" -TaskUpdate: "Update" -TaskRestart: "Restart" -TaskRollback: "Rollback" -TaskPull: "Pull" -TaskBuild: "Build" -TaskPush: "Push" -TaskHandle: "Execute" -Website: "Website" -App: "App" -Runtime: "Runtime" -Database: "Database" -ConfigFTP: "Create FTP User {{ .name }}" -ConfigOpenresty: "Create Openresty Configuration File" -InstallAppSuccess: "App {{ .name }} Installed Successfully" -ConfigRuntime: "Configure Runtime" -ConfigApp: "Configure App" -SuccessStatus: "{{ .name }} Success" -FailedStatus: "{{ .name }} Failed {{.err}}" -HandleLink: "Handle App Link" -HandleDatabaseApp: "Handle App Parameters" -ExecShell: "Execute {{ .name }} Script" -PullImage: "Pull Image" -Start: "Start" -Run: "Run" -Stop: "Stop" -Image: "Image" -Container: "Container" -Compose: "Compose" -AppLink: "Associated Application" -EnableSSL: "Enable HTTPS" -AppStore: "App Store" -TaskSync: "Sync" -LocalApp: "Local App" -SubTask: "Subtask" -RuntimeExtension: "Runtime Extension" -TaskIsExecuting: "Task is executing" +TaskStart: '{{ .name }} task starts [START]' +TaskEnd: '{{ .name }} Task completed [COMPLETED]' +TaskFailed: '{{ .name }} task failed' +TaskTimeout: '{{ .name }} timed out' +TaskSuccess: '{{ .name }} Task succeeded' +TaskRetry: 'Start {{ .name }}th retry' +SubTaskSuccess: '{{ .name }} succeeded' +SubTaskFailed: '{{ .name }} failed: {{ .err }}' +TaskInstall: 'Install' +TaskUninstall: 'Uninstall' +TaskCreate: 'Create' +TaskDelete: 'Delete' +TaskUpgrade: 'Upgrade' +TaskUpdate: 'Update' +TaskRestart: 'Restart' +TaskBackup: 'Backup' +TaskRecover: 'Recover' +TaskRollback: 'Rollback' +TaskPull: 'Pull' +TaskBuild: 'Build' +TaskPush: 'Push' +TaskHandle: 'Execute' +Website: 'Website' +App: 'Application' +Runtime: 'Runtime environment' +Database: 'Database' +ConfigFTP: 'Create FTP user {{ .name }}' +ConfigOpenresty: 'Create Openresty configuration file' +InstallAppSuccess: 'Application {{ .name }} installed successfully' +ConfigRuntime: 'Configure the runtime environment' +ConfigApp: 'Configuration Application' +SuccessStatus: '{{ .name }} succeeded' +FailedStatus: '{{ .name }} failed {{ .err }}' +HandleLink: 'Handle application association' +HandleDatabaseApp: 'Handling application parameters' +ExecShell: 'Execute {{ .name }} script' +PullImage: 'Pull image' +Start: 'Start' +Run: 'Start' +Stop: 'Stop' +Image: 'Mirror' +Compose: 'Orchestration' +Container: 'Container' +AppLink: 'Linked Application' +EnableSSL: 'Enable HTTPS' +AppStore: 'App Store' +TaskSync: 'Synchronize' +LocalApp: 'Local Application' +SubTask: 'Subtask' +RuntimeExtension: 'Runtime Environment Extension' +TaskIsExecuting: 'Task is running' +CustomAppstore: 'Custom application warehouse' -# task - snapshot -Snapshot: "Snapshot" -SnapDBInfo: "Write 1Panel database information" -SnapCopy: "Copy files & directories {{ .name }} " -SnapNewDB: "Initialize database {{ .name }} connection " -SnapDeleteOperationLog: "Delete operation log" -SnapDeleteLoginLog: "Delete access log" -SnapDeleteMonitor: "Delete monitoring data" -SnapRemoveSystemIP: "Remove system IP" -SnapBaseInfo: "Write 1Panel basic information" -SnapInstallApp: "Backup installed applications in 1Panel" -SnapDockerSave: "Compress installed applications" -SnapLocalBackup: "Backup 1Panel local backup directory" -SnapCompressBackup: "Compress local backup directory" -SnapPanelData: "Backup 1Panel data directory" -SnapCompressPanel: "Compress data directory" -SnapCloseDBConn: "Close database connection" -SnapCompress: "Create snapshot file" -SnapCompressFile: "Compress snapshot file" -SnapCheckCompress: "Check snapshot compressed file" -SnapCompressSize: "Snapshot file size {{ .name }}" -SnapUpload: "Upload snapshot file" -SnapLoadBackup: "Get backup account information" -SnapUploadTo: "Upload snapshot file to {{ .name }}" -SnapUploadRes: "Upload snapshot file to {{ .name }}" +# task - ai +OllamaModelPull: 'Pull Ollama model {{ .name }}' +OllamaModelSize: 'Get the size of Ollama model {{ .name }}' + +# task-snapshot +Snapshot: 'Snapshot' +SnapDBInfo: 'Write 1Panel database information' +SnapCopy: 'Copy files & directories {{ .name }}' +SnapNewDB: 'Initialize database {{ .name }} connection' +SnapDeleteOperationLog: 'Delete operation log' +SnapDeleteLoginLog: 'Delete access log' +SnapDeleteMonitor: 'Delete monitoring data' +SnapRemoveSystemIP: 'Remove system IP' +SnapBaseInfo: 'Write 1Panel basic information' +SnapInstallApp: 'Backup 1Panel installed applications' +SnapDockerSave: 'Compress installed applications' +SnapLocalBackup: 'Backup 1Panel local backup directory' +SnapCompressBackup: 'Compress local backup directory' +SnapPanelData: 'Backup 1Panel data directory' +SnapCompressPanel: 'Compressed Data Directory' +SnapWebsite: 'Backup 1Panel website directory' +SnapCloseDBConn: 'Close the database connection' +SnapCompress: 'Make snapshot files' +SnapCompressFile: 'Compress snapshot file' +SnapCheckCompress: 'Check snapshot compression file' +SnapCompressSize: 'Snapshot file size {{ .name }}' +SnapUpload: 'Upload snapshot file' +SnapLoadBackup: 'Get backup account information' +SnapUploadTo: 'Upload snapshot file to {{ .name }}' +SnapUploadRes: 'Upload snapshot file to {{ .name }}' + +SnapshotRecover: 'Snapshot Restore' +RecoverDownload: 'Download snapshot file' +Download: 'Download' +RecoverDownloadAccount: 'Get snapshot download backup account {{ .name }}' +RecoverDecompress: 'Decompress snapshot compressed files' +Decompress: 'Decompression' +BackupBeforeRecover: 'Backup system-related data before snapshot' +Readjson: 'Read the Json file in the snapshot' +ReadjsonPath: 'Get the Json file path in the snapshot' +ReadjsonContent: 'Read Json file' +ReadjsonMarshal: 'Json escape processing' +RecoverApp: 'Restore installed apps' +RecoverWebsite: 'Recover website directory' +RecoverAppImage: 'Restore snapshot image backup' +RecoverCompose: 'Restore other composer content' +RecoverComposeList: 'Get all composers to be restored' +RecoverComposeItem: 'Recover compose {{ .name }}' +RecoverAppEmpty: 'No application image backup was found in the snapshot file' +RecoverBaseData: 'Recover base data and files' +RecoverDaemonJsonEmpty: 'Both the snapshot file and the current machine do not have the container configuration daemon.json file' +RecoverDaemonJson: 'Restore container configuration daemon.json file' +RecoverDBData: 'Recover database data' +RecoverBackups: 'Restore local backup directory' +RecoverPanelData: 'Recovery data directory' # task - container -ContainerNewCliet: "Initialize Docker Client" -ContainerImagePull: "Pull container image {{ .name }}" -ContainerRemoveOld: "Remove the original container { .name }" -ContainerImageCheck: "Check if the image is pulled correctly" -ContainerLoadInfo: "Retrieve basic information about the container" -ContainerRecreate: "Container update failed, now starting to restore the original container" -ContainerCreate: "Create new container {{ .name }}" -ContainerCreateFailed: "Container creation failed, delete the failed container" -ContainerStartCheck: "Check if the container has started" +ContainerNewCliet: 'Initialize Docker Client' +ContainerImagePull: 'Pull container image {{ .name }}' +ContainerRemoveOld: 'Remove the original container {{ .name }}' +ContainerImageCheck: 'Check if the image is pulled normally' +ContainerLoadInfo: 'Get basic container information' +ContainerRecreate: 'Container update failed, now starting to restore the original container' +ContainerCreate: 'Create a new container {{ .name }}' +ContainerCreateFailed: 'Container creation failed, delete the failed container' +ContainerStartCheck: 'Check if the container has been started' # task - image -ImageBuild: "Image build" -ImageBuildStdoutCheck: "Parse image output" -ImaegBuildRes: "Image build output: {{ .name }}" -ImagePull: "Pull image" -ImageRepoAuthFromDB: "Get repository authentication information from database" -ImaegPullRes: "Image pull output: {{ .name }}" -ImagePush: "Push image" -ImageRenameTag: "Rename image tag" -ImageNewTag: "New image tag {{ .name }}" -ImaegPushRes: "Image push output: {{ .name }}" -ComposeCreate: "Create compose" -ComposeCreateRes: "Compose creation output: {{ .name }}" +ImageBuild: 'Image Build' +ImageBuildStdoutCheck: 'Parse image output content' +ImaegBuildRes: 'Image build output: {{ .name }}' +ImagePull: 'Pull image' +ImageRepoAuthFromDB: 'Get repository authentication information from the database' +ImaegPullRes: 'Image pull output: {{ .name }}' +ImagePush: 'Push image' +ImageRenameTag: 'Modify image tag' +ImageNewTag: 'New image tag {{ .name }}' +ImaegPushRes: 'Image push output: {{ .name }}' +ComposeCreate: 'Create a composition' +ComposeCreateRes: 'Compose create output: {{ .name }}' # task - website -BackupNginxConfig: "Backup website OpenResty configuration file" -CompressFileSuccess: "Directory compression successful, compressed as {{.name}}" -CompressDir: "Compress directory" -DeCompressFile: "Decompress file {{ .name }}" -ErrCheckValid: "Failed to validate backup file, {{ .name }}" -Rollback: "Rollback" -websiteDir: "Website directory" -RecoverFailedStartRollBack: "Recovery failed, starting rollback" -AppBackupFileIncomplete: "Backup file is incomplete; missing app.json or app.tar.gz file" -AppAttributesNotMatch: "Application type or name does not match" +BackupNginxConfig: 'Backup website OpenResty configuration file' +CompressFileSuccess: 'Compress directory successfully, compressed to {{ .name }}' +CompressDir: 'Compression directory' +DeCompressFile: 'Decompress file {{ .name }}' +ErrCheckValid: 'Backup file verification failed, {{ .name }}' +Rollback: 'Rollback' +websiteDir: 'Website Directory' +RecoverFailedStartRollBack: 'Recovery failed, start rollback' +AppBackupFileIncomplete: 'The backup file is incomplete and lacks app.json or app.tar.gz files' +AppAttributesNotMatch: 'Application type or name does not match' #alert -ErrAlert: "Alert information format error, please check and try again!" -ErrAlertPush: "Alert push error, please check and try again!" -ErrAlertSave: "Alert save error, please check and try again!" -ErrAlertSync: "Alert sync error, please check and try again!" -ErrAlertRemote: "Remote alert error, please check and try again!" \ No newline at end of file +ErrAlert: 'The format of the warning message is incorrect, please check and try again!' +ErrAlertPush: 'Error in pushing alert information, please check and try again!' +ErrAlertSave: 'Error saving the alarm information, please check and try again!' +ErrAlertSync: 'Alarm information synchronization error, please check and try again!' +ErrAlertRemote: 'Alarm message remote error, please check and try again!' \ No newline at end of file diff --git a/agent/i18n/lang/ja.yaml b/agent/i18n/lang/ja.yaml index 4d71d6c2a..fa2d754c9 100644 --- a/agent/i18n/lang/ja.yaml +++ b/agent/i18n/lang/ja.yaml @@ -1,326 +1,422 @@ -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}}" +ErrInvalidParams: 'リクエストパラメータエラー: {{ .detail }}' +ErrTokenParse: 'トークン生成エラー: {{ .detail }}' +ErrInitialPassword: '元のパスワードが正しくありません' +ErrInternalServer: '内部サーバーエラー: {{ .detail }}' +ErrRecordExist: 'レコードがすでに存在します' +ErrRecordNotFound: 'レコードが見つかりません' +ErrStructTransform: '型変換に失敗しました: {{ .err }}' +ErrNotLogin: 'ユーザーがログインしていません: {{ .detail }}' +ErrPasswordExpired: '現在のパスワードの有効期限が切れています: {{ .detail }}' +ErrNotSupportType: 'システムは現在のタイプ: {{ .name }} をサポートしていません' +ErrProxy: 'リクエスト エラーです。ノードのステータスを確認してください: {{ .detail }}' +ErrApiConfigStatusInvalid: 'API インターフェースへのアクセスは禁止されています: {{ .detail }}' +ErrApiConfigKeyInvalid: 'API インターフェース キー エラー: {{ .detail }}' +ErrApiConfigIPInvalid: 'API インターフェースの呼び出しに使用された IP がホワイトリストにありません: {{ .detail }}' +ErrApiConfigDisable: 'このインターフェースは、API インターフェース呼び出しの使用を禁止しています: {{ .detail }}' +ErrApiConfigKeyTimeInvalid: 'API インターフェースのタイムスタンプ エラー: {{ .detail }}' #common -ErrUsernameIsExist: "ユーザー名は既に存在します" -ErrNameIsExist: "名前はすでに存在しています" -ErrDemoEnvironment: "デモサーバー、この操作を禁止します!" -ErrCmdTimeout: "コマンド実行がタイムアウトしました!" -ErrCmdIllegal: "コマンドには違法な文字が含まれています。変更してもう一度やり直してください!" -ErrPortExist: '{{.port}}ポートはすでに{{.type}} [{{.name}}]によって占有されています。' -TYPE_APP: "応用" -TYPE_RUNTIME: "ランタイム環境" -TYPE_DOMAIN: "ドメイン名" -ErrTypePort: 'port {{.name}}フォーマットエラー' -ErrTypePortRange: 'ポートレンジは1-65535の間である必要があります' -Success: "成功" -Failed: "失敗した" -SystemRestart: "システムの再起動により、タスクが中断されます" -ErrGroupIsDefault: "デフォルトグループ、削除できません" -ErrGroupIsInWebsiteUse: "グループは他のウェブサイトで使用されています、削除できません" +ErrUsernameIsExist: 'ユーザー名は既に存在します' +ErrNameIsExist: '名前は既に存在します' +ErrDemoEnvironment: 'デモ サーバー、この操作は禁止されています!' +ErrCmdTimeout: 'コマンドの実行がタイムアウトしました!' +ErrCmdIllegal: '実行コマンドに不正な文字が含まれています。修正してもう一度お試しください。' +ErrPortExist: '{{ .port }} ポートは、{{ .type }} [{{ .name }}] によって既に使用されています' +TYPE_APP: 'アプリケーション' +TYPE_RUNTIME: 'ランタイム環境' +TYPE_DOMAIN: 'ドメイン名' +ErrTypePort: 'ポート {{ .name }} の形式が正しくありません' +ErrTypePortRange: 'ポート範囲は 1 ~ 65535 である必要があります' +Success: '成功' +Failed: '失敗' +SystemRestart: 'システムの再起動によりタスクが中断されました' +ErrGroupIsDefault: 'デフォルト グループ、削除できません' +ErrGroupIsInWebsiteUse: 'グループは別の Web サイトで使用されているため、削除できません。' + +#backup +ErrBackupInUsed: 'バックアップ アカウントはスケジュールされたタスクで使用されているため、削除できません。' +ErrBackupCheck: 'バックアップ アカウントのテスト接続に失敗しました {{ .err }}' +ErrBackupLocalDelete: 'ローカル サーバーのバックアップ アカウントの削除はまだサポートされていません' +ErrBackupLocalCreate: 'ローカル サーバーのバックアップ アカウントの作成はまだサポートされていません' #app -ErrPortInUsed: "{{.Detail}}ポートはすでに使用されています" -ErrAppLimit: "アプリはインストール制限を超えています" -ErrAppRequired: "{{.Detail}}アプリが必要です" -ErrNotInstall: "アプリがインストールされていません" -ErrPortInOtherApp: "{{.port}}ポートは既にapp {{.apps}}で使用されています" -ErrDbUserNotValid: "ストックデータベース、ユーザー名、パスワードが一致しません!" -ErrDockerComposeNotValid: "Docker-Composeファイル形式のエラー!" -ErrUpdateBuWebsite: 'アプリケーションは正常に更新されましたが、Webサイト構成ファイルの変更に失敗しました。構成を確認してください!' -Err1PanelNetworkFailed: 'デフォルトのコンテナネットワークの作成に失敗しました!{{ 。詳細 }}' -ErrFileParse: 'アプリケーションDocker-Composeファイルの解析は失敗しました!' -ErrInstallDirNotFound: 'インストールディレクトリは存在しません' -AppStoreIsUpToDate: '最新の' -LocalAppVersionNull: '{{.name}}アプリはバージョンに同期されません!アプリケーションリストに追加できませんでした' -LocalAppVersionErr: '{{.name}}}バージョン{{.version}}の同期に失敗しました!{{.err}}' -ErrFileNotFound: '{{.name}}ファイルは存在しません' -ErrFileParseApp: '{{.name}} file {{.err}}を解析できなかった' -ErrAppDirNull: 'バージョンフォルダーは存在しません' -LocalAppErr: "app {{.name}}同期が失敗しました!{{.err}}" -ErrContainerName: "cantablernameはすでに存在しています" -ErrAppSystemRestart: "1パネルの再起動により、タスクが終了します" -ErrCreateHttpClient: "http request {{.err}}の作成に失敗しました" -ErrHttpReqTimeOut: "リクエスト{{.err}}" -ErrHttpReqFailed: "リクエストが失敗しました{{.err}}" -ErrHttpReqNotFound: "ファイルは存在しません" -ErrNoSuchHost: "ネットワーク接続に失敗しました" -ErrImagePullTimeOut: '画像プルタイムアウト' -ErrContainerNotFound: '{{.name}}コンテナは存在しません' -ErrContainerMsg: '{{.name}}コンテナは異常です。詳細については、コンテナページのログを確認してください' -ErrAppBackup: '{{.name}}アプリケーションバックアップが失敗したerr {{.err}}' -ErrImagePull: '{{.name}}画像プルFailed err {{.err}}' -ErrVersionTooLow: '現在の1パネルバージョンが低すぎてApp Storeを更新できないので、バージョンをアップグレードしてください' -ErrAppNameExist: 'アプリ名はすでに存在しています' -AppStoreIsSyncing: 'App Storeが同期しています。後でもう一度やり直してください' -ErrGetCompose: "docker-compose.ymlファイルを取得できませんでした!{{ 。詳細 }}" -ErrAppWarn: "異常なステータス、ログを確認してください" -ErrAppParamKey: "parameter {{.name}}フィールド例外" -ErrAppUpgrade: "アプリケーションのアップグレードに失敗しました{{.name}} {{.err}}" -AppRecover: "app {{.name}}ロールバック" -PullImageStart: "画像の引っ張りを開始{{.name}}" -PullImageSuccess: "画像が正常に引っ張られました" -UpgradeAppStart: "アプリケーションのアップグレードを起動{{.name}}" -UpgradeAppSuccess: "App {{.Name}}アップグレードされました" -ErrAppIsDown: "{{ .name }} アプリケーションの状態が異常です、確認してください" +ErrPortInUsed: '{{ .detail }} ポートはすでに使用されています!' +ErrAppLimit: 'インストールされているアプリケーションの数が制限を超えました' +ErrAppRequired: 'まず {{ .detail }} アプリケーションをインストールしてください' +ErrNotInstall: 'アプリケーションがインストールされていません' +ErrPortInOtherApp: '{{ .port }} ポートは既にアプリケーション {{ .apps }} によって使用されています!' +ErrDbUserNotValid: '既存のデータベース、ユーザー名、およびパスワードが一致しません!' +ErrDockerComposeNotValid: 'docker-compose ファイルの形式が正しくありません' +ErrUpdateBuWebsite: 'アプリケーションは正常に更新されましたが、Web サイト構成ファイルの変更に失敗しました。設定を確認してください! ' +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: 'リクエスト {{ .err }} の作成に失敗しました' +ErrHttpReqTimeOut: 'リクエストがタイムアウトしました {{ .err }}' +ErrHttpReqFailed: 'リクエストが失敗しました {{ .err }}' +ErrNoSuchHost: '要求されたサーバー {{ .err }} が見つかりません' +ErrHttpReqNotFound: '要求されたリソース {{ .err }} が見つかりませんでした' +ErrImagePullTimeOut: 'イメージ プル タイムアウト' +ErrContainerNotFound: '{{ .name }} コンテナが存在しません' +ErrContainerMsg: '{{ .name }} コンテナが異常です。詳細についてはコンテナページのログを確認してください。' +ErrAppBackup: '{{ .name }} アプリケーションのバックアップに失敗しました。エラー {{ .err }}' +ErrImagePull: 'イメージのプルに失敗しました {{ .err }}' +ErrVersionTooLow: '現在の 1Panel のバージョンが低すぎるため、App Store を更新できません。操作する前にバージョンをアップグレードしてください。' +ErrAppNameExist: 'アプリケーション名がすでに存在します' +AppStoreIsSyncing: 'App Store が同期中です。しばらくしてからもう一度お試しください' +ErrGetCompose: 'docker-compose.yml ファイルの取得に失敗しました! {{ .detail }}' +ErrAppWarn: '異常な状態です。ログを確認してください' +ErrAppParamKey: 'パラメータ {{ .name }} フィールドが異常です' +ErrAppUpgrade: 'アプリケーション {{ .name }} のアップグレードに失敗しました {{ .err }}' +AppRecover: 'アプリケーション {{ .name }} をロールバックします' +PullImageStart: "イメージ {{ .name }} のプルを開始します" +PullImageSuccess: 'イメージのプルが成功しました' +UpgradeAppStart: 'アプリケーション {{ .name }} のアップグレードを開始します' +UpgradeAppSuccess: 'アプリケーション {{ .name }} が正常にアップグレードされました' +AppStoreIsLastVersion: 'App Store はすでに最新バージョンです' +AppStoreSyncSuccess: 'App Store の同期が成功しました' +SyncAppDetail: 'アプリケーション構成を同期する' +AppVersionNotMatch: '{{ .name }} アプリケーションには、より高い 1Panel バージョンが必要なため、同期をスキップします' +MoveSiteDir: '現在のアップグレードでは、OpenResty Web サイト ディレクトリの移行が必要です' +MoveSiteToDir: 'サイト ディレクトリを {{ .name }} に移行します' +ErrMoveSiteDir: 'サイト ディレクトリの移行に失敗しました' +MoveSiteDirSuccess: 'Web サイト ディレクトリの移行に成功しました' +DeleteRuntimePHP: 'PHP ランタイムを削除する' +CustomAppStoreNotConfig: 'アプリストアでオフライン パッケージ アドレスを設定してください' +CustomAppStoreNotFound: 'アプリストア パッケージを取得できませんでした。存在するかどうかを確認してください' +CustomAppStoreFileValid: 'App Store パッケージは .tar.gz 形式である必要があります' +PullImageTimeout: 'プル イメージのタイムアウトです。イメージのアクセラレーションを増やすか、別のイメージのアクセラレーションに変更してください' +ErrAppIsDown: '{{ .name }} アプリケーションの状態が異常です。確認してください' +ErrCustomApps: 'インストールされているアプリケーションがあります。まずアンインストールしてください' +ErrCustomRuntimes: 'ランタイム環境がインストールされています。まずそれを削除してください' #file -ErrFileCanNotRead: "ファイルは読み取れません" -ErrFileToLarge: "ファイルが大きすぎます" -ErrPathNotFound: "パスは見つかりません" -ErrMovePathFailed: "ターゲットパスには元のパスが含まれていません!" -ErrLinkPathNotFound: "ターゲットパスは存在しません!" -ErrFileIsExist: "ファイルまたはディレクトリはすでに存在します!" -ErrFileUpload: "file {{.name}} {{.detail}}}のアップロードに失敗しました" -ErrFileDownloadDir: "サポートされていないフォルダーをダウンロードします" -ErrCmdNotFound: "{{.name}}コマンドは存在しません。最初にホストにこのコマンドをインストールしてください" -ErrSourcePathNotFound: "ソースディレクトリは存在しません" -ErrFavoriteExist: "このパスが収集されました" -ErrInvalidChar: "違法なキャラクターは禁止されています" -ErrPathNotDelete: "選択したディレクトリを削除することはできません" +ErrFileCanNotRead: 'このファイルはプレビューをサポートしていません' +ErrFileToLarge: 'ファイルは 10M より大きいため開けません' +ErrPathNotFound: 'ディレクトリが存在しません' +ErrMovePathFailed: 'ターゲット パスに元のパスを含めることはできません!' +ErrLinkPathNotFound: 'ターゲット パスが存在しません!' +ErrFileIsExist: 'ファイルまたはフォルダーは既に存在します!' +ErrFileUpload: '{{ .name }} はファイル {{ .detail }} のアップロードに失敗しました' +ErrFileDownloadDir: 'ダウンロード フォルダーはサポートされていません' +ErrCmdNotFound: '{{ .name}} コマンドが存在しません。まずこのコマンドをホストにインストールしてください' +ErrSourcePathNotFound: 'ソース ディレクトリが存在しません' +ErrFavoriteExist: 'このパスはすでにお気に入りに登録されています' +ErrInvalidChar: '不正な文字は許可されません' +ErrPathNotDelete: '選択されたディレクトリは削除できません' #website -ErrDomainIsExist: "ドメインはすでに存在しています" -ErrAliasIsExist: "エイリアスはすでに存在しています" -ErrAppDelete: '他のウェブサイトはこのアプリを使用します' -ErrGroupIsUsed: "グループは使用されており、削除することはできません" -ErrBackupMatch: "バックアップファイルは、ウェブサイトの現在の部分的なデータと一致しません:{{.Detail}}" -ErrBackupExist: 'バックアップファイルは、存在しない元のデータの一部に対応しています。{{.Detail}}' -ErrPHPResource: 'ローカルランタイムはスイッチングをサポートしません!' -ErrPathPermission: 'インデックスディレクトリで1000:1000以外のアクセス許可を持つフォルダーが検出されたため、Webサイトにアクセスするとアクセスが拒否された場合があります。上の[保存]ボタンをクリックしてください' -ErrDomainIsUsed: "ドメインはすでにWebサイトで使用されています{{.Name}}" -ErrDomainFormat: "{{.name}}ドメイン形式エラー" -ErrDefaultAlias: "デフォルトは予約済みのコード名です。別のコード名を使用してください" -ErrImageNotExist: "実行中の環境{{.name}}画像は存在しません。実行中の環境を再編集してください" +ErrDomainIsExist: 'ドメイン名は既に存在します' +ErrAliasIsExist: 'エイリアスがすでに存在します' +ErrAppDelete: '他のウェブサイトがこのアプリを使用しているため、削除できません' +ErrBackupMatch: 'バックアップ ファイルは、現在の Web サイト データ {{ .detail }} の一部と一致しません' +ErrBackupExist: 'バックアップ ファイル内のソース データの対応する部分が存在しません {{ .detail }}' +ErrPHPResource: 'ローカルオペレーティング環境は切り替えをサポートしていません! ' +ErrPathPermission: 'インデックス ディレクトリに 1000:1000 以外の権限を持つフォルダーが検出されました。これにより、Web サイトでアクセス拒否エラーが発生する可能性があります。上記の保存ボタンをクリックしてください。' +ErrDomainIsUsed: 'ドメイン名はウェブサイト [{{ .name }}] で既に使用されています' +ErrDomainFormat: '{{ .name }} ドメイン名の形式が正しくありません' +ErrDefaultAlias: 'デフォルトは予約済みのコードです。別のコードを使用してください' +ErrParentWebsite: 'まずサブサイト {{ .name }} を削除する必要があります' +ErrBuildDirNotFound: 'ビルド ディレクトリが存在しません' +ErrImageNotExist: 'オペレーティング環境 {{ .name }} イメージが存在しません。オペレーティング環境を再編集してください' #ssl -ErrSSLCannotDelete: "証明書{{.Name}}はWebサイトで使用されており、削除できません" -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}} Webサイト証明書の更新を開始します" -ErrUpdateWebsiteSSL: "{{.name}}ウェブサイトは証明書の更新に失敗しました:{{.err}}" -ApplyWebSiteSSLSuccess: "ウェブサイトの証明書を正常に更新します" -ErrExecShell: "スクリプトの実行に失敗した{{.err}}" -ExecShellStart: "スクリプトの実行を開始します" -ExecShellSuccess: "スクリプトは正常に実行されました" -StartUpdateSystemSSL: "システム証明書の更新を開始します" -UpdateSystemSSLSuccess: "システム証明書を正常に更新します" +ErrSSLCannotDelete: '{{ .name }} 証明書は Web サイトで使用されているため、削除できません' +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 }} Web サイト証明書の更新に失敗しました: {{ .err }}' +ApplyWebSiteSSLSuccess: 'Web サイトの証明書を正常に更新しました' +ErrExecShell: 'スクリプト {{ .err }} の実行に失敗しました' +ExecShellStart: 'スクリプトの実行を開始します' +ExecShellSuccess: 'スクリプトの実行が成功しました' +StartUpdateSystemSSL: 'システム証明書の更新を開始します' +UpdateSystemSSLSuccess: 'システム証明書を正常に更新しました' +ErrWildcardDomain: 'HTTP モードでワイルドカード ドメイン名証明書を申請できません' #mysql -ErrUserIsExist: "現在のユーザーはすでに存在しています。新しいユーザーを入力してください" -ErrDatabaseIsExist: "現在のデータベースはすでに存在しています。新しいデータベースを入力してください" -ErrExecTimeOut: "SQL実行のタイミングを出して、データベースを確認してください" -ErrRemoteExist: "リモートデータベースはすでにその名前に存在しています。それを変更して、再試行してください" -ErrLocalExist: "ローカルデータベースはすでにその名前に存在しています。それを変更して、もう一度試してください" +ErrUserIsExist: '現在のユーザーは既に存在します。再入力してください' +ErrDatabaseIsExist: '現在のデータベースは既に存在します。再入力してください' +ErrExecTimeOut: 'SQL 実行がタイムアウトしました。データベースを確認してください' +ErrRemoteExist: 'この名前のリモート データベースは既に存在します。変更してもう一度お試しください' +ErrLocalExist: '名前はローカル データベースに既に存在します。変更してもう一度お試しください' #redis -ErrTypeOfRedis: "回復ファイルのタイプは、現在の永続性モードと一致しません。ファイルタイプを変更して、再試行してください" +ErrTypeOfRedis: 'リカバリ ファイルの種類が現在の永続化方法と一致しません。変更して再試行してください' #container -ErrInUsed: "{{.Detail}}が使用されており、削除できません" -ErrObjectInUsed: "このオブジェクトは使用されており、削除することはできません" -ErrPortRules: "ポートの数が一致しません。再入力してください!" -ErrPgImagePull: "画像プルタイムアウト。画像の加速を構成するか、Postgres:16.0-Alpine画像を手動で引いて、再試行してください" +ErrInUsed: '{{ .detail }} は使用中のため削除できません' +ErrObjectInUsed: 'オブジェクトは使用中のため削除できません' +ErrObjectBeDependent: 'このイメージは他のイメージに依存しているため、削除できません' +ErrPortRules: 'ポート番号が一致しません。再入力してください。' +ErrPgImagePull: 'イメージのプルがタイムアウトしました。イメージのアクセラレーションを設定するか、{{ .name }} イメージを手動でプルして再試行してください' #runtime -ErrDirNotFound: "ビルドフォルダーは存在しません!ファイルの整合性を確認してください!" -ErrFileNotExist: "{{.Detail}}ファイルは存在しません!ソースファイルの完全性を確認してください!" -ErrImageBuildErr: "画像ビルドが失敗しました" -ErrImageExist: "画像はすでに存在しています!" -ErrDelWithWebsite: "運用環境はウェブサイトに関連付けられており、削除することはできません" -ErrRuntimeStart: "開始に失敗しました" -ErrPackageJsonNotFound: "package.jsonファイルは存在しません" -ErrScriptsNotFound: "Package.jsonにスクリプト構成アイテムは見つかりませんでした" -ErrContainerNameNotFound: "コンテナ名を取得できない場合は、.envファイルを確認してください" -ErrNodeModulesNotFound: "node_modulesフォルダーは存在しません!実行中の環境を編集するか、実行中の環境が正常に開始するのを待ちます" - -#setting -ErrBackupInUsed: "バックアップアカウントは既にCronjobで使用されており、削除することはできません。" -ErrBackupCheck: "バックアップアカウントテスト接続に失敗した{{.err}}" -ErrOSSConn: "最新バージョンを取得できない場合は、サーバーが外部ネットワークに接続できるかどうかを確認してください。" -ErrEntrance: "セキュリティ入り口情報エラー。チェックしてもう一度やり直してください!" +ErrDirNotFound: 'ビルド フォルダーが存在しません。ファイルの整合性を確認してください。' +ErrFileNotExist: '{{ .detail }} ファイルが存在しません。ソース ファイルの整合性を確認してください。' +ErrImageBuildErr: 'イメージのビルドに失敗しました' +ErrImageExist: '画像がすでに存在します!' +ErrDelWithWebsite: 'オペレーティング環境は既に Web サイトに関連付けられているため、削除できません' +ErrRuntimeStart: '起動に失敗しました' +ErrPackageJsonNotFound: 'package.json ファイルが存在しません' +ErrScriptsNotFound: 'スクリプト構成項目が package.json に見つかりませんでした' +ErrContainerNameNotFound: 'コンテナ名を取得できません。.env ファイルを確認してください' +ErrNodeModulesNotFound: 'node_modules フォルダが存在しません。ランタイム環境を編集するか、ランタイム環境が正常に起動するまでお待ちください。' +ErrContainerNameIsNull: 'コンテナ名が存在しません' #tool -ErrConfigNotFound: "構成ファイルは存在しません" -ErrConfigParse: "構成ファイル形式エラー" -ErrConfigIsNull: "構成ファイルは空にすることは許可されていません" -ErrConfigDirNotFound: "実行中のディレクトリは存在しません" -ErrConfigAlreadyExist: "同じ名前の構成ファイルが既に存在しています" -ErrUserFindErr: "ユーザー{{.name}} {{.err}}を見つけられなかった" +ErrConfigNotFound: '構成ファイルが存在しません' +ErrConfigParse: '構成ファイルの形式が正しくありません' +ErrConfigIsNull: '構成ファイルは空にできません' +ErrConfigDirNotFound: '実行ディレクトリが存在しません' +ErrConfigAlreadyExist: '同じ名前の設定ファイルがすでに存在します' +ErrUserFindErr: 'ユーザー {{ .name }} の検索に失敗しました {{ .err }}' #ssh -ErrFirewallNone: "システムでFirewalldまたはUFWサービスは検出されませんでした。チェックしてもう一度やり直してください!" -ErrFirewallBoth: "FirewalldサービスとUFWサービスの両方がシステムで検出されます。競合を避けるために、1つをアンインストールして再試行してください!" +ErrFirewallNone: 'システムのファイアウォールまたは ufw サービスが検出されませんでした。確認してもう一度お試しください。' +ErrFirewallBoth: 'システムにfirewalldとufwの両方のサービスがあることが検出されました。競合を避けるため、アンインストールしてもう一度お試しください。' #cronjob -ErrBashExecute: "スクリプト実行エラー、タスク出力テキスト領域の特定の情報を確認してください。" -ErrCutWebsiteLog: "{{.Name}} Webサイトログの切断が失敗した、エラー{{.err}}" -CutWebsiteLogSuccess: "{{.Name}} Webサイトログカットに正常にカット、バックアップパス{{.Path}}" +ErrCutWebsiteLog: '{{ .name }} ウェブサイトのログの切り取りに失敗しました。エラー {{ .err }}' +CutWebsiteLogSuccess: '{{ .name }} ウェブサイトのログが正常にカットされました。バックアップ パス {{ .path }}' +HandleShell: 'スクリプト {{ .name }} を実行します' +HandleNtpSync: 'システム時刻の同期' +HandleSystemClean: 'システム キャッシュのクリーンアップ' #toolbox -ErrNotExistUser: "現在のユーザーは存在しません。変更して再試行してください!" -ErrBanAction: "失敗した設定では、現在の{{.name}}サービスが利用できません。チェックして再試行してください!" -ErrClamdscanNotFound: "Clamdscanコマンドは検出されませんでした。インストールするためにドキュメントを参照してください!" +ErrNotExistUser: '現在のユーザーは存在しません。変更してもう一度お試しください。' +ErrBanAction: '設定に失敗しました。現在の {{ .name }} サービスは利用できません。確認してもう一度お試しください。' +ErrClamdscanNotFound: 'clamdscan コマンドが検出されませんでした。インストールするにはドキュメントを参照してください。' #waf -ErrScope: "この設定の変更はサポートされていません" -ErrStateChange: "ステータスの変更に失敗しました" -ErrRuleExist: "ルールはすでに存在します" -ErrRuleNotExist: "ルールが存在しません" -ErrParseIP: "IP 形式が正しくありません" -ErrDefaultIP: "default は予約名です。他の名前を使用してください" -ErrGroupInUse: "IP グループはブラックリスト/ホワイトリストで使用中です。削除できません" -ErrGroupExist: "IP グループ名はすでに存在します" -ErrIPRange: "IP 範囲が正しくありません" -ErrIPExist: "IP はすでに存在します" -urlDefense: "URL ルール" -urlHelper: "禁止された URL" -dirFilter: "ディレクトリフィルタ" -xss: "XSS" -phpExec: "PHP スクリプト実行" -oneWordTrojan: "ワンワードトロイの木馬" -appFilter: "アプリケーション危険ディレクトリフィルタ" -webshell: "Webshell" -args: "パラメータルール" -protocolFilter: "プロトコルフィルタ" -javaFileter: "Java 危険ファイルフィルタ" -scannerFilter: "スキャナフィルタ" -escapeFilter: "エスケープフィルタ" -customRule: "カスタムルール" -httpMethod: "HTTP メソッドフィルタ" -fileExt: "ファイルアップロード制限" -defaultIpBlack: "悪意のある IP グループ" -cookie: "Cookie ルール" -urlBlack: "URL ブラックリスト" -uaBlack: "User-Agent ブラックリスト" -attackCount: "攻撃頻度制限" -fileExtCheck: "ファイルアップロード制限" -geoRestrict: "地域アクセス制限" -unknownWebsite: "未承認ドメインアクセス" -notFoundCount: "404 頻度制限" -headerDefense: "Header ルール" -defaultUaBlack: "User-Agent ルール" -methodWhite: "HTTP ルール" -captcha: "人間と機械の検証" -fiveSeconds: "5 秒検証" -vulnCheck: "補足ルール" -acl: "カスタムルール" -sql: "SQL インジェクション" -cc: "アクセス頻度制限" -defaultUrlBlack: "URL ルール" -sqlInject: "SQL インジェクション" -ErrDBNotExist: "データベースが存在しません" -allow: "許可" -deny: "禁止" +ErrScope: 'この構成の変更はサポートされていません' +ErrStateChange: '状態の変更に失敗しました' +ErrRuleExist: 'ルールは既に存在します' +ErrRuleNotExist: 'ルールが存在しません' +ErrParseIP: 'IP 形式が間違っています' +ErrDefaultIP: 'デフォルトは予約名です。別の名前に変更してください' +ErrGroupInUse: 'IP グループはブラックリスト/ホワイトリストで使用されており、削除できません' +ErrGroupExist: 'IP グループ名がすでに存在します' +ErrIPRange: 'IP 範囲が間違っています' +ErrIPExist: 'IP がすでに存在します' +urlDefense: 'URL ルール' +urlHelper: '禁止された URL' +dirFilter: 'ディレクトリ フィルター' +xss: 'XSS' +phpExec: 'PHP スクリプトの実行' +oneWordTrojan: 'ワンワードトロイの木馬' +appFilter: '危険なディレクトリフィルタリングを適用する' +webshell: 'ウェブシェル' +args: 'パラメータルール' +protocolFilter: 'プロトコルフィルタリング' +javaFileter: 'Java 危険ファイル フィルター' +scannerFilter: 'スキャナ フィルタ' +escapeFilter: 'エスケープフィルター' +customRule: 'カスタムルール' +httpMethod: 'HTTP メソッド フィルタリング' +fileExt: 'ファイルアップロード制限' +defaultIpBlack: '悪意のある IP グループ' +cookie: 'クッキールール' +urlBlack: 'URL ブラックリスト' +uaBlack: 'ユーザーエージェント ブラックリスト' +attackCount: '攻撃頻度の制限' +fileExtCheck: 'ファイルアップロード制限' +geoRestrict: '地域アクセス制限' +unknownWebsite: '不正なドメイン名アクセス' +notFoundCount: '404 レート制限' +headerDefense: 'ヘッダールール' +defaultUaBlack: 'ユーザーエージェントルール' +methodWhite: 'HTTP ルール' +captcha: '人間と機械による認証' +fiveSeconds: '5秒検証' +vulnCheck: '補足ルール' +acl: 'カスタムルール' +sql: 'SQL インジェクション' +cc: 'アクセス頻度制限' +defaultUrlBlack: 'URL ルール' +sqlInject: 'SQL インジェクション' +ErrDBNotExist: 'データベースが存在しません' +allow: '許可' +deny: '拒否' +OpenrestyNotFound: 'Openresty がインストールされていません' -#license -ErrLicense: "ライセンス形式のエラー、チェックして再試行してください!" -ErrLicenseCheck: "ライセンスの確認が失敗しました。チェックしてもう一度やり直してください!" -ErrLicenseSave: "ライセンス情報の保存に失敗しました、{{.err}}、もう一度やり直してください!" -ErrLicenseSync: "ライセンス情報の同期に失敗し、データベースでライセンス情報は検出されませんでした!" -ErrXpackNotFound: "このセクションはプロフェッショナルエディション機能です。最初にパネルsettings-licenseインターフェイスにライセンスをインポートしてください" -ErrXpackNotActive: "このセクションはプロフェッショナルエディション機能です。最初にパネル設定リセンスインターフェイスでライセンスステータスを同期してください" -ErrXpackOutOfDate: "現在のライセンスの有効期限が切れています。パネル設定リセンスインターフェイスにライセンスを再輸入してください" -ErrXpackLost: "ライセンスは、再試行の最大数に達しました。[設定] [ライセンス]ページに移動し、[同期]ボタンを手動でクリックして、プロフェッショナルバージョンの機能が適切に機能していることを確認してください。" -ErrXpackTimeout: "リクエストタイムアウト、ネットワーク接続が不安定な場合があります。後でもう一度やり直してください!" +#task +TaskStart: '{{ .name }} タスクが開始されました [START]' +TaskEnd: '{{ .name }} タスクが完了しました [COMPLETED]' +TaskFailed: '{{ .name }} タスクが失敗しました' +TaskTimeout: '{{ .name }} がタイムアウトしました' +TaskSuccess: '{{ .name }} タスクが成功しました' +TaskRetry: '{{ .name }} 回目の再試行を開始します' +SubTaskSuccess: '{{ .name }} が成功しました' +SubTaskFailed: '{{ .name }} が失敗しました: {{ .err }}' +TaskInstall: 'インストール' +TaskUninstall: 'アンインストール' +TaskCreate: '作成' +TaskDelete: '削除' +TaskUpgrade: 'アップグレード' +TaskUpdate: '更新' +TaskRestart: '再起動' +TaskBackup: 'バックアップ' +TaskRecover: '回復' +TaskRollback: 'ロールバック' +TaskPull: 'プル' +TaskBuild: 'ビルド' +TaskPush: 'プッシュ' +TaskHandle: '実行' +Website: 'ウェブサイト' +App: 'アプリケーション' +Runtime: 'ランタイム環境' +Database: 'データベース' +ConfigFTP: 'FTP ユーザー {{ .name }} を作成します' +ConfigOpenresty: 'Openresty 構成ファイルを作成する' +InstallAppSuccess: 'アプリケーション {{ .name }} が正常にインストールされました' +ConfigRuntime: 'ランタイム環境を構成する' +ConfigApp: '構成アプリケーション' +SuccessStatus: '{{ .name }} は成功しました' +FailedStatus: '{{ .name }} が {{ .err }} に失敗しました' +HandleLink: 'ハンドルアプリケーションの関連付け' +HandleDatabaseApp: 'アプリケーション パラメータの処理' +ExecShell: '{{ .name }} スクリプトを実行する' +PullImage: 'イメージをプル' +Start: '開始' +Run: '開始' +Stop: '停止' +Image: '鏡' +Compose: 'オーケストレーション' +Container: 'コンテナ' +AppLink: 'リンクされたアプリケーション' +EnableSSL: 'HTTPS を有効にする' +AppStore: 'Appストア' +TaskSync: '同期' +LocalApp: 'ローカルアプリケーション' +SubTask: 'サブタスク' +RuntimeExtension: 'ランタイム環境拡張' +TaskIsExecuting: 'タスクは実行中です' +CustomAppstore: 'カスタム アプリケーション ウェアハウス' -#license -ErrAlert: "情報形式のエラーをアラートしてください。チェックして再試行してください!" -ErrAlertPush: "アラートプッシュエラー、チェックして再試行してください!" -ErrAlertSave: "エラーを保存してください、チェックして再試行してください!" -ErrAlertSync: "アラート同期エラー、チェックして再試行してください!" -ErrAlertRemote: "リモートアラートエラー、チェックして再試行してください!" +#task - ai +OllamaModelPull: 'Ollama モデル {{ .name }} をプルします' +OllamaModelSize: "Ollama モデル {{ .name }} のサイズを取得します" -#cmd -AppVersion: "アプリバージョン" -AppCommands: "アプリ関連のコマンド" -AppInit: "アプリを初期化します" -AppKeyVal: "アプリキー(英語のみをサポートする)" -AppCreateFileErr: "file {{.name}}作成に失敗した{{.err}}" -AppCreateDirErr: "Folder {{.name}}作成に失敗した{{.err}}" -AppMissKey: "アプリキーがありません、-kを使用して指定します" -AppMissVersion: "アプリバージョンがありません、-vを使用して指定します" -AppVersionExist: "バージョンはすでに存在します!" -AppCreateSuccessful: "創造は成功しました!" -AppWriteErr: "file {{.name}} write failed {{.err}}" -SudoHelper: "{{.cmd}}を使用するか、ルートユーザーに切り替えてください" -ListenIPCommands: "リスニングIPを切り替えます" -ListenIPv4: "IPv4で聞いてください" -ListenIPv6: "IPv6で聞く" -ListenChangeSuccessful: "切り替え成功!{{.Value}}で聞いています" -ResetCommands: "システム情報をリセットします" -ResetMFA: "1パネルの2要素認証をキャンセルします" -ResetHttps: "1Panel HTTPSログインをキャンセルします" -ResetEntrance: "1パネルの安全な入り口をキャンセルします" -ResetIPs: "1パネル認定IP制限をキャンセルします" -ResetDomain: "1パネルドメインバインディングをキャンセルします" -RestoreCommands: "ロールバック1パネルサービスとデータ" -RestoreNoSuchFile: "ロールバックに使用できるファイルはありません" -RestoreStep1: "(1/5){{.name}}ディレクトリからの1パネルサービスとデータの開始ロールバック..." -RestoreStep2: "(2/5)1パネルバイナリロールバックが成功しました" -RestoreStep3: "(3/5)1パネルスクリプトロールバック成功" -RestoreStep4: "(4/5)1パネルサービスロールバックが成功しました" -RestoreStep5: "(5/5)1パネルデータロールバックが成功しました" -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: "エラー:2つのパスワードが一致しません。チェックして再試行してください!" -UpdatePasswordResult: "パネルパスワード:{{.name}}" -UpdatePortFormat: "エラー:入力ポート番号は1〜65535でなければなりません!" -UpdatePortUsed: "エラー:ポート番号はすでに使用されています。チェックして再試行してください!" -UpdatePortErr: "エラー:パネルポートの更新に失敗しました{{.err}}" -UpdatePortResult: "パネルポート:{{.name}}" -UpdatePortFirewallAdd: "ファイアウォールポートルールの追加に失敗した{{.err}}、ファイアウォールルールに{{.name}}ポートを手動で追加してください。" -UpdatePortFirewallDel: "エラー:ファイアウォールポートの削除に失敗しました、{{.err}}" -UpdatePortFirewallReload: "ファイアウォールのリロードに失敗しました{{.err}}、ファイアウォールを手動でリロードしてください。" -UserInfo: "パネル情報を取得します" -UserInfoAddr: "パネルアドレス:" -UserInfoPassHelp: "ヒント:パスワードを変更するには、コマンドを実行できます。" -DBConnErr: "エラー:データベース接続の初期化に失敗しました、{{.err}}" -SystemVersion: "バージョン:" -SystemMode: "モード:" +#task - snapshot +Snapshot: 'スナップショット' +SnapDBInfo: '1Panel データベース情報を書き込む' +SnapCopy: 'ファイルとディレクトリ {{ .name }} をコピーします' +SnapNewDB: 'データベース {{ .name }} 接続を初期化します' +SnapDeleteOperationLog: '操作ログの削除' +SnapDeleteLoginLog: 'アクセスログを削除する' +SnapDeleteMonitor: '監視データを削除する' +SnapRemoveSystemIP: 'システム IP を削除します' +SnapBaseInfo: '1Panel の基本情報を書き込む' +SnapInstallApp: '1Panel にインストールされたアプリケーションをバックアップする' +SnapDockerSave: 'インストールされたアプリケーションを圧縮する' +SnapLocalBackup: '1Panel ローカル バックアップ ディレクトリをバックアップします' +SnapCompressBackup: 'ローカル バックアップ ディレクトリを圧縮する' +SnapPanelData: '1Panel データ ディレクトリをバックアップ' +SnapCompressPanel: '圧縮データ ディレクトリ' +SnapWebsite: '1Panel ウェブサイト ディレクトリのバックアップ' +SnapCloseDBConn: 'データベース接続を閉じる' +SnapCompress: 'スナップショット ファイルを作成する' +SnapCompressFile: 'スナップショット ファイルを圧縮する' +SnapCheckCompress: 'スナップショット圧縮ファイルをチェックする' +SnapCompressSize: 'スナップショット ファイル サイズ {{ .name }}' +SnapUpload: 'スナップショット ファイルをアップロード' +SnapLoadBackup: 'バックアップ アカウント情報を取得する' +SnapUploadTo: 'スナップショット ファイルを {{ .name }} にアップロードします' +SnapUploadRes: 'スナップショット ファイルを {{ .name }} にアップロードします' + +SnapshotRecover: 'スナップショットの復元' +RecoverDownload: 'スナップショット ファイルをダウンロード' +Download: 'ダウンロード' +RecoverDownloadAccount: 'スナップショット ダウンロード バックアップ アカウント {{ .name }} を取得します' +RecoverDecompress: 'スナップショット圧縮ファイルを解凍する' +Decompress: '減圧' +BackupBeforeRecover: 'スナップショットの前にシステム関連データをバックアップする' +Readjson: 'スナップショット内の Json ファイルを読み取ります' +ReadjsonPath: 'スナップショット内の Json ファイル パスを取得します' +ReadjsonContent: 'Json ファイルを読み取ります' +ReadjsonMarshal: 'Json エスケープ処理' +RecoverApp: 'インストールされたアプリを復元する' +RecoverWebsite: 'ウェブサイトディレクトリを回復する' +RecoverAppImage: 'スナップショットイメージのバックアップを復元する' +RecoverCompose: '他のコンポーザーのコンテンツを復元する' +RecoverComposeList: 'すべてのコンポーザーを復元する' +RecoverComposeItem: '{{ .name }} の作成を回復する' +RecoverAppEmpty: 'スナップショット ファイルにアプリケーション イメージのバックアップが見つかりませんでした' +RecoverBaseData: '基本データとファイルを回復する' +RecoverDaemonJsonEmpty: 'スナップショット ファイルと現在のマシンの両方に、コンテナー構成 daemon.json ファイルがありません' +RecoverDaemonJson: 'コンテナ構成 daemon.json ファイルを復元する' +RecoverDBData: 'データベース データを回復する' +RecoverBackups: 'ローカル バックアップ ディレクトリを復元する' +RecoverPanelData: 'リカバリデータディレクトリ' + +#task - container +ContainerNewCliet: 'Docker クライアントを初期化する' +ContainerImagePull: 'コンテナ イメージ {{ .name }} をプルします' +ContainerRemoveOld: '元のコンテナ {{ .name }} を削除します' +ContainerImageCheck: 'イメージが正常にプルされているかどうかを確認します' +ContainerLoadInfo: 'コンテナの基本情報を取得する' +ContainerRecreate: 'コンテナの更新に失敗しました。元のコンテナの復元を開始しています' +ContainerCreate: '新しいコンテナ {{ .name }} を作成します' +ContainerCreateFailed: 'コンテナの作成に失敗しました。失敗したコンテナを削除してください' +ContainerStartCheck: 'コンテナが起動されているかどうかを確認します' + +#task - image +ImageBuild: 'イメージビルド' +ImageBuildStdoutCheck: '画像出力コンテンツを解析する' +ImaegBuildRes: 'イメージビルド出力: {{ .name }}' +ImagePull: '画像をプル' +ImageRepoAuthFromDB: 'データベースからリポジトリ認証情報を取得する' +ImaegPullRes: "画像プル出力: {{ .name }}" +ImagePush: '画像をプッシュ' +ImageRenameTag: '画像タグを変更する' +ImageNewTag: '新しい画像タグ {{ .name }}' +ImaegPushRes: '画像プッシュ出力: {{ .name }}' +ComposeCreate: 'コンポジションを作成する' +ComposeCreateRes: "Compose 作成出力: {{ .name }}" + +#task - website +BackupNginxConfig: 'ウェブサイトの OpenResty 構成ファイルをバックアップする' +CompressFileSuccess: 'ディレクトリを正常に圧縮しました。{{ .name }} に圧縮されました' +CompressDir: '圧縮ディレクトリ' +DeCompressFile: 'ファイル {{ .name }} を解凍します' +ErrCheckValid: 'バックアップ ファイルの検証に失敗しました、{{ .name }}' +Rollback: 'ロールバック' +websiteDir: 'ウェブサイトディレクトリ' +RecoverFailedStartRollBack: 'リカバリに失敗しました。ロールバックを開始します' +AppBackupFileIncomplete: 'バックアップ ファイルが不完全で、app.json または app.tar.gz ファイルが不足しています' +AppAttributesNotMatch: 'アプリケーションの種類または名前が一致しません' + +#alert +ErrAlert: '警告メッセージの形式が正しくありません。確認してもう一度お試しください。' +ErrAlertPush: 'アラート情報のプッシュ中にエラーが発生しました。確認してもう一度お試しください。' +ErrAlertSave: 'アラーム情報の保存中にエラーが発生しました。確認してもう一度お試しください。' +ErrAlertSync: 'アラーム情報の同期エラーです。確認してもう一度お試しください。' +ErrAlertRemote: 'アラーム メッセージのリモート エラーです。確認してもう一度お試しください。' \ No newline at end of file diff --git a/agent/i18n/lang/ko.yaml b/agent/i18n/lang/ko.yaml index 9624cd6dc..82c76a0c2 100644 --- a/agent/i18n/lang/ko.yaml +++ b/agent/i18n/lang/ko.yaml @@ -1,329 +1,422 @@ -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 }}" +ErrInvalidParams: '요청 매개변수 오류: {{ .detail }}' +ErrTokenParse: '토큰 생성 오류: {{ .detail }}' +ErrInitialPassword: '원래 비밀번호가 올바르지 않습니다' +ErrInternalServer: '내부 서버 오류: {{ .detail }}' +ErrRecordExist: '레코드가 이미 존재합니다' +ErrRecordNotFound: '레코드를 찾을 수 없습니다' +ErrStructTransform: '유형 변환에 실패했습니다: {{ .err }}' +ErrNotLogin: '사용자가 로그인하지 않았습니다: {{ .detail }}' +ErrPasswordExpired: '현재 비밀번호가 만료되었습니다: {{ .detail }}' +ErrNotSupportType: '시스템은 현재 유형 {{ .name }}을 지원하지 않습니다.' +ErrProxy: '요청 오류, 노드 상태를 확인하세요: {{ .detail }}' +ErrApiConfigStatusInvalid: 'API 인터페이스에 대한 액세스가 금지되었습니다: {{ .detail }}' +ErrApiConfigKeyInvalid: 'API 인터페이스 키 오류: {{ .detail }}' +ErrApiConfigIPInvalid: 'API 인터페이스를 호출하는 데 사용된 IP가 허용 목록에 없습니다: {{ .detail }}' +ErrApiConfigDisable: '이 인터페이스는 API 인터페이스 호출 사용을 금지합니다: {{ .detail }}' +ErrApiConfigKeyTimeInvalid: 'API 인터페이스 타임스탬프 오류: {{ .detail }}' -# 공통 -ErrUsernameIsExist: "사용자 이름이 이미 존재합니다" -ErrNameIsExist: "이름이 이미 존재합니다" -ErrDemoEnvironment: "데모 서버에서는 이 작업이 금지되어 있습니다!" -ErrCmdTimeout: "명령어 실행 시간이 초과되었습니다!" -ErrCmdIllegal: "명령어에 잘못된 문자가 포함되어 있습니다. 수정 후 다시 시도하세요!" -ErrPortExist: '{{ .port }} 포트가 {{ .type }} [{{ .name }}]에 의해 이미 사용 중입니다' -TYPE_APP: "애플리케이션" -TYPE_RUNTIME: "실행 환경" -TYPE_DOMAIN: "도메인 이름" -ErrTypePort: '포트 {{ .name }} 형식 오류' -ErrTypePortRange: '포트 범위는 1-65535 사이여야 합니다' -Success: "성공" -Failed: "실패" -SystemRestart: "시스템 재시작으로 인해 작업이 중단되었습니다" -ErrGroupIsDefault: "기본 그룹, 삭제할 수 없습니다" -ErrGroupIsInWebsiteUse: "그룹이 다른 웹사이트에서 사용 중입니다, 삭제할 수 없습니다" +#흔한 +ErrUsernameIsExist: '사용자 이름이 이미 존재합니다' +ErrNameIsExist: '이름이 이미 존재합니다' +ErrDemoEnvironment: '데모 서버, 이 작업은 금지되어 있습니다!' +ErrCmdTimeout: '명령 실행 시간이 초과되었습니다!' +ErrCmdIllegal: '실행 명령에 잘못된 문자가 있습니다. 수정하여 다시 시도하세요!' +ErrPortExist: '{{ .port }} 포트는 이미 {{ .type }} [{{ .name }}]에 의해 사용되고 있습니다.' +TYPE_APP: '응용 프로그램' +TYPE_RUNTIME: '런타임 환경' +TYPE_DOMAIN: '도메인 이름' +ErrTypePort: '포트 {{ .name }} 형식이 올바르지 않습니다' +ErrTypePortRange: '포트 범위는 1-65535 사이여야 합니다.' +Success: '성공' +Failed: '실패했습니다' +SystemRestart: '시스템 재시작으로 인해 작업이 중단되었습니다' +ErrGroupIsDefault: '기본 그룹, 삭제할 수 없습니다' +ErrGroupIsInWebsiteUse: '그룹이 다른 웹사이트에서 사용 중이므로 삭제할 수 없습니다.' -# 애플리케이션 -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 }} 업그레이드 성공" -ErrAppIsDown: "{{ .name }} 애플리케이션 상태가 비정상입니다. 확인하세요" +#지원 +ErrBackupInUsed: '백업 계정이 예약된 작업에 사용되었으므로 삭제할 수 없습니다.' +ErrBackupCheck: '백업 계정 테스트 연결에 실패했습니다 {{ .err }}' +ErrBackupLocalDelete: '로컬 서버 백업 계정 삭제는 아직 지원되지 않습니다.' +ErrBackupLocalCreate: '로컬 서버 백업 계정 생성은 아직 지원되지 않습니다.' -# 파일 -ErrFileCanNotRead: "파일을 읽을 수 없습니다" -ErrFileToLarge: "파일이 너무 큽니다" -ErrPathNotFound: "경로를 찾을 수 없습니다" -ErrMovePathFailed: "대상 경로가 원래 경로를 포함할 수 없습니다!" -ErrLinkPathNotFound: "대상 경로가 존재하지 않습니다!" -ErrFileIsExist: "파일 또는 디렉터리가 이미 존재합니다!" -ErrFileUpload: "파일 업로드 실패 {{.name}} {{.detail}}" -ErrFileDownloadDir: "다운로드 폴더는 지원되지 않습니다" -ErrCmdNotFound: "{{ .name }} 명령이 존재하지 않습니다. 호스트에 이 명령을 먼저 설치하세요" -ErrSourcePathNotFound: "소스 디렉터리가 존재하지 않습니다" -ErrFavoriteExist: "이 경로는 이미 즐겨찾기에 추가되었습니다" -ErrInvalidChar: "잘못된 문자는 금지됩니다" -ErrPathNotDelete: "선택한 디렉터리는 삭제할 수 없습니다" +#앱 +ErrPortInUsed: '{{ .detail }} 포트가 이미 사용 중입니다!' +ErrAppLimit: '설치된 애플리케이션 수가 한도를 초과했습니다' +ErrAppRequired: '먼저 {{ .detail }} 애플리케이션을 설치하세요' +ErrNotInstall: '응용 프로그램이 설치되지 않았습니다' +ErrPortInOtherApp: '{{ .port }} 포트는 이미 {{ .apps }} 애플리케이션에 의해 사용되고 있습니다!' +ErrDbUserNotValid: '기존 데이터베이스, 사용자 이름 및 비밀번호가 일치하지 않습니다!' +ErrDockerComposeNotValid: 'docker-compose 파일 형식이 올바르지 않습니다' +ErrUpdateBuWebsite: '응용 프로그램이 성공적으로 업데이트되었지만, 웹사이트 구성 파일 수정에 실패했습니다. 구성을 확인하세요! ' +Err1PanelNetworkFailed: '기본 컨테이너 네트워크 생성에 실패했습니다! {{ .세부 사항 }}' +ErrFileParse: '응용 프로그램 docker-compose 파일 구문 분석에 실패했습니다!' +ErrInstallDirNotFound: '설치 디렉토리가 존재하지 않습니다. 제거를 원하실 경우 강제 제거 를 선택해주세요.' +AppStoreIsUpToDate: '앱 스토어가 이미 최신 버전입니다' +LocalAppVersionNull: '{{ .name }} 애플리케이션이 버전과 동기화되지 않았습니다! 앱 목록에 추가할 수 없습니다.' +LocalAppVersionErr: '{{ .name }} 동기화 버전 {{ .version }}이 실패했습니다! {{ .err }}' +ErrFileNotFound: '{{ .name }} 파일이 존재하지 않습니다' +ErrFileParseApp: '{{ .name }} 파일 구문 분석에 실패했습니다 {{ .err }}' +ErrAppDirNull: '버전 폴더가 존재하지 않습니다' +LocalAppErr: '애플리케이션 {{ .name }} 동기화에 실패했습니다! {{ .err }}' +ErrContainerName: '컨테이너 이름이 이미 존재합니다' +ErrAppSystemRestart: '1패널 재시작으로 인해 작업이 종료되었습니다' +ErrCreateHttpClient: '요청 {{ .err }}을(를) 생성하지 못했습니다.' +ErrHttpReqTimeOut: '요청 시간이 초과되었습니다 {{ .err }}' +ErrHttpReqFailed: '요청이 실패했습니다 {{ .err }}' +ErrNoSuchHost: '요청한 서버 {{ .err }}을 찾을 수 없습니다' +ErrHttpReqNotFound: '요청한 리소스 {{ .err }}을 찾을 수 없습니다.' +ErrImagePullTimeOut: '이미지 풀링 시간 초과' +ErrContainerNotFound: '{{ .name }} 컨테이너가 존재하지 않습니다' +ErrContainerMsg: '{{ .name }} 컨테이너가 비정상입니다. 자세한 내용은 컨테이너 페이지의 로그를 확인하세요.' +ErrAppBackup: '{{ .name }} 애플리케이션 백업에 실패했습니다 {{ .err }}' +ErrImagePull: '이미지 가져오기에 실패했습니다 {{ .err }}' +ErrVersionTooLow: '현재 1Panel 버전이 너무 낮아 App Store를 업데이트할 수 없습니다. 작동하시기 전에 버전을 업그레이드하세요.' +ErrAppNameExist: '응용 프로그램 이름이 이미 존재합니다' +AppStoreIsSyncing: 'App Store가 동기화 중입니다. 나중에 다시 시도하세요.' +ErrGetCompose: 'docker-compose.yml 파일을 가져오지 못했습니다! {{ .detail }}' +ErrAppWarn: '비정상적인 상태입니다. 로그를 확인해 주세요.' +ErrAppParamKey: '매개변수 {{ .name }} 필드가 비정상입니다.' +ErrAppUpgrade: '애플리케이션 {{ .name }} 업그레이드에 실패했습니다 {{ .err }}' +AppRecover: '롤백 애플리케이션 {{ .name }}' +PullImageStart: '이미지 {{ .name }} 가져오기 시작' +PullImageSuccess: '이미지 가져오기 성공' +UpgradeAppStart: '애플리케이션 {{ .name }} 업그레이드 시작' +UpgradeAppSuccess: '애플리케이션 {{ .name }}이 성공적으로 업그레이드되었습니다.' +AppStoreIsLastVersion: '앱스토어가 이미 최신 버전입니다' +AppStoreSyncSuccess: '앱스토어 동기화 성공' +SyncAppDetail: '애플리케이션 구성 동기화' +AppVersionNotMatch: '{{ .name }} 애플리케이션에 더 높은 1Panel 버전이 필요하므로 동기화를 건너뜁니다.' +MoveSiteDir: '현재 업그레이드에는 OpenResty 웹사이트 디렉토리 마이그레이션이 필요합니다.' +MoveSiteToDir: '사이트 디렉토리를 {{ .name }}로 마이그레이션' +ErrMoveSiteDir: '사이트 디렉토리를 마이그레이션하지 못했습니다' +MoveSiteDirSuccess: '웹사이트 디렉토리 마이그레이션 성공' +DeleteRuntimePHP: 'PHP 런타임 삭제' +CustomAppStoreNotConfig: '앱 스토어에서 오프라인 패키지 주소를 설정해주세요' +CustomAppStoreNotFound: '앱 스토어 패키지를 가져오지 못했습니다. 해당 패키지가 있는지 확인하세요' +CustomAppStoreFileValid: '앱 스토어 패키지는 .tar.gz 형식이어야 합니다.' +PullImageTimeout: '이미지 가져오기 시간 초과, 이미지 가속을 높이거나 다른 이미지 가속으로 변경해 보세요.' +ErrAppIsDown: '{{ .name }} 애플리케이션 상태가 비정상적입니다. 확인해 주세요' +ErrCustomApps: '설치된 애플리케이션이 있습니다. 먼저 제거해 주세요' +ErrCustomRuntimes: '설치된 런타임 환경이 있습니다. 먼저 삭제해 주세요' -# 웹사이트 -ErrDomainIsExist: "도메인 이름이 이미 존재합니다" -ErrAliasIsExist: "별칭이 이미 존재합니다" -ErrAppDelete: "다른 웹사이트에서 이 애플리케이션을 사용 중입니다" -ErrGroupIsUsed: "그룹이 사용 중이므로 삭제할 수 없습니다" -ErrBackupMatch: "백업 파일이 현재 웹사이트 데이터와 일치하지 않습니다: {{ .detail }}" -ErrBackupExist: "백업 파일이 원본 데이터의 일부와 일치하지 않습니다: {{ .detail }}" -ErrPHPResource: "로컬 런타임에서 전환을 지원하지 않습니다!" -ErrPathPermission: "인덱스 디렉터리에 1000:1000 권한이 아닌 폴더가 감지되었습니다. 웹사이트 액세스 시 '접근 거부' 오류가 발생할 수 있습니다. 상단의 저장 버튼을 클릭하세요" -ErrDomainIsUsed: "도메인이 웹사이트 {{ .name }}에서 이미 사용 중입니다" -ErrDomainFormat: "{{ .name }} 도메인 형식 오류" -ErrDefaultAlias: "기본은 예약된 코드 이름입니다. 다른 이름을 사용하세요" -ErrImageNotExist: "실행 환경 {{.name}} 이미지가 존재하지 않습니다. 실행 환경을 다시 편집하세요" +#파일 +ErrFileCanNotRead: '이 파일은 미리보기를 지원하지 않습니다' +ErrFileToLarge: '파일이 10M보다 커서 열 수 없습니다' +ErrPathNotFound: '디렉토리가 존재하지 않습니다' +ErrMovePathFailed: '대상 경로에는 원래 경로가 포함될 수 없습니다!' +ErrLinkPathNotFound: '대상 경로가 존재하지 않습니다!' +ErrFileIsExist: '파일이나 폴더가 이미 존재합니다!' +ErrFileUpload: '{{ .name }}이 파일 {{ .detail }}을 업로드하지 못했습니다.' +ErrFileDownloadDir: '다운로드 폴더가 지원되지 않습니다' +ErrCmdNotFound: '{{ .name}} 명령이 존재하지 않습니다. 먼저 호스트에 이 명령을 설치하세요' +ErrSourcePathNotFound: '소스 디렉토리가 존재하지 않습니다' +ErrFavoriteExist: '이 경로는 이미 즐겨찾기되었습니다' +ErrInvalidChar: '불법 문자는 허용되지 않습니다' +ErrPathNotDelete: '선택한 디렉토리를 삭제할 수 없습니다' -# 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: "시스템 인증서 업데이트 성공" +#웹사이트 +ErrDomainIsExist: '도메인 이름이 이미 존재합니다' +ErrAliasIsExist: '별칭이 이미 존재합니다' +ErrAppDelete: '다른 웹사이트에서 이 앱을 사용하고 있어 삭제할 수 없습니다' +ErrBackupMatch: '백업 파일이 현재 웹사이트 데이터 중 일부 {{ .detail }}와 일치하지 않습니다.' +ErrBackupExist: '백업 파일에 있는 소스 데이터의 해당 부분이 존재하지 않습니다 {{ .detail }}' +ErrPHPResource: '로컬 운영 환경이 전환을 지원하지 않습니다! ' +ErrPathPermission: '인덱스 디렉토리에서 1000:1000이 아닌 권한을 가진 폴더가 감지되었습니다. 이로 인해 웹사이트에서 액세스 거부 오류가 발생할 수 있습니다. 위의 저장 버튼을 클릭해주세요.' +ErrDomainIsUsed: '[{{ .name }}] 웹사이트에서 이미 도메인 이름을 사용하고 있습니다.' +ErrDomainFormat: '{{ .name }} 도메인 이름 형식이 올바르지 않습니다' +ErrDefaultAlias: '기본값은 예약된 코드입니다. 다른 코드를 사용하세요' +ErrParentWebsite: '먼저 하위 사이트 {{ .name }}을 삭제해야 합니다.' +ErrBuildDirNotFound: '빌드 디렉토리가 존재하지 않습니다' +ErrImageNotExist: '운영 환경 {{ .name }} 이미지가 존재하지 않습니다. 운영 환경을 다시 편집하세요.' -# MySQL -ErrUserIsExist: "현재 사용자가 이미 존재합니다. 새로운 사용자를 입력하세요." -ErrDatabaseIsExist: "현재 데이터베이스가 이미 존재합니다. 새로운 데이터베이스를 입력하세요." -ErrExecTimeOut: "SQL 실행이 시간 초과되었습니다. 데이터베이스를 확인하세요." -ErrRemoteExist: "원격 데이터베이스에 동일한 이름이 이미 존재합니다. 이름을 수정한 후 다시 시도하세요." -ErrLocalExist: "로컬 데이터베이스에 동일한 이름이 이미 존재합니다. 이름을 수정한 후 다시 시도하세요." +#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: '시스템 인증서 업데이트가 성공적으로 완료되었습니다.' +ErrWildcardDomain: 'HTTP 모드에서 와일드카드 도메인 이름 인증서를 신청할 수 없습니다' -# Redis -ErrTypeOfRedis: "복구 파일 형식이 현재 지속성 모드와 일치하지 않습니다. 파일 형식을 수정한 후 다시 시도하세요." +#마이SQL +ErrUserIsExist: '현재 사용자가 이미 존재합니다. 다시 입력하세요' +ErrDatabaseIsExist: '현재 데이터베이스가 이미 존재합니다. 다시 입력하세요' +ErrExecTimeOut: 'SQL 실행 시간이 초과되었습니다. 데이터베이스를 확인하십시오.' +ErrRemoteExist: '이 이름을 가진 원격 데이터베이스가 이미 존재합니다. 수정하고 다시 시도하세요' +ErrLocalExist: '이름이 로컬 데이터베이스에 이미 존재합니다. 이름을 수정하고 다시 시도하세요' -# Container -ErrInUsed: "{{ .detail }}이(가) 사용 중이므로 삭제할 수 없습니다." -ErrObjectInUsed: "이 객체는 사용 중이므로 삭제할 수 없습니다." -ErrObjectBeDependent: "이 이미지는 다른 이미지에 의해 의존되고 있어 삭제할 수 없습니다." -ErrPortRules: "포트 수가 일치하지 않습니다. 다시 입력하세요!" -ErrPgImagePull: "이미지 가져오기 시간이 초과되었습니다. 이미지 가속 구성을 설정하거나 postgres:16.0-alpine 이미지를 수동으로 가져온 후 다시 시도하세요." +#레디스 +ErrTypeOfRedis: '복구 파일 유형이 현재 지속성 방법과 일치하지 않습니다. 수정하고 다시 시도하세요' -# Runtime -ErrDirNotFound: "빌드 폴더가 존재하지 않습니다! 파일의 무결성을 확인하세요!" -ErrFileNotExist: "{{ .detail }} 파일이 존재하지 않습니다! 소스 파일의 무결성을 확인하세요!" -ErrImageBuildErr: "이미지 빌드 실패" -ErrImageExist: "이미지가 이미 존재합니다!" -ErrDelWithWebsite: "운영 환경이 웹사이트와 연결되어 있어 삭제할 수 없습니다." -ErrRuntimeStart: "실행 시작 실패" -ErrPackageJsonNotFound: "package.json 파일이 존재하지 않습니다." -ErrScriptsNotFound: "package.json 에서 스크립트 구성 항목을 찾을 수 없습니다." -ErrContainerNameNotFound: "컨테이너 이름을 가져올 수 없습니다. .env 파일을 확인하세요." -ErrNodeModulesNotFound: "node_modules 폴더가 존재하지 않습니다! 실행 환경을 편집하거나 실행 환경이 성공적으로 시작되기를 기다리세요." +#컨테이너 +ErrInUsed: '{{ .detail }}이 사용 중이므로 삭제할 수 없습니다' +ErrObjectInUsed: '개체가 사용 중이므로 삭제할 수 없습니다' +ErrObjectBeDependent: '이 이미지는 다른 이미지에 의존하므로 삭제할 수 없습니다' +ErrPortRules: '포트 번호가 일치하지 않습니다. 다시 입력하세요!' +ErrPgImagePull: '이미지 풀링 시간이 초과되었습니다. 이미지 가속을 구성하거나 {{ .name }} 이미지를 수동으로 풀링한 다음 다시 시도하세요.' -# Setting -ErrBackupInUsed: "백업 계정이 크론 작업에 사용 중이므로 삭제할 수 없습니다." -ErrBackupCheck: "백업 계정 연결 테스트 실패 {{ .err }}" -ErrOSSConn: "최신 버전을 가져올 수 없습니다. 서버가 외부 네트워크에 연결할 수 있는지 확인하세요." -ErrEntrance: "보안 입구 정보 오류. 확인 후 다시 시도하세요!" +#실행 시간 +ErrDirNotFound: '빌드 폴더가 존재하지 않습니다! 파일 무결성을 확인하세요!' +ErrFileNotExist: '{{ .detail }} 파일이 존재하지 않습니다! 소스 파일의 무결성을 확인하세요!' +ErrImageBuildErr: '이미지 빌드 실패' +ErrImageExist: '이미지가 이미 존재합니다!' +ErrDelWithWebsite: '운영 환경이 이미 웹사이트와 연결되어 있어 삭제할 수 없습니다' +ErrRuntimeStart: '시작 실패' +ErrPackageJsonNotFound: 'package.json 파일이 존재하지 않습니다' +ErrScriptsNotFound: 'package.json에서 스크립트 구성 항목을 찾을 수 없습니다.' +ErrContainerNameNotFound: '컨테이너 이름을 가져올 수 없습니다. .env 파일을 확인하세요.' +ErrNodeModulesNotFound: 'node_modules 폴더가 없습니다! 런타임 환경을 편집하거나 런타임 환경이 성공적으로 시작될 때까지 기다리십시오' +ErrContainerNameIsNull: '컨테이너 이름이 존재하지 않습니다' -# Tool -ErrConfigNotFound: "구성 파일이 존재하지 않습니다." -ErrConfigParse: "구성 파일 형식 오류" -ErrConfigIsNull: "구성 파일은 비워둘 수 없습니다." -ErrConfigDirNotFound: "실행 디렉토리가 존재하지 않습니다." -ErrConfigAlreadyExist: "동일한 이름의 구성 파일이 이미 존재합니다." -ErrUserFindErr: "사용자 {{ .name }} 찾기 실패 {{ .err }}" +#도구 +ErrConfigNotFound: '구성 파일이 존재하지 않습니다' +ErrConfigParse: '구성 파일 형식이 올바르지 않습니다' +ErrConfigIsNull: '구성 파일은 비어 있을 수 없습니다' +ErrConfigDirNotFound: '실행 디렉토리가 존재하지 않습니다' +ErrConfigAlreadyExist: '같은 이름의 구성 파일이 이미 존재합니다' +ErrUserFindErr: '사용자 {{ .name }} 검색에 실패했습니다 {{ .err }}' -# SSH -ErrFirewallNone: "시스템에서 firewalld 또는 ufw 서비스를 감지하지 못했습니다. 확인 후 다시 시도하세요!" -ErrFirewallBoth: "시스템에서 firewalld 와 ufw 서비스가 모두 감지되었습니다. 충돌을 방지하려면 하나를 제거한 후 다시 시도하세요!" +#ssh +ErrFirewallNone: '시스템 방화벽이나 ufw 서비스가 감지되지 않았습니다. 확인하고 다시 시도하세요!' +ErrFirewallBoth: '시스템에 방화벽과 ufw 서비스가 모두 있는 것으로 감지되었습니다. 충돌을 피하려면 제거한 후 다시 시도하세요!' -# Cronjob -ErrBashExecute: "스크립트 실행 오류. 작업 출력 텍스트 영역에서 구체적인 정보를 확인하세요." -ErrCutWebsiteLog: "{{ .name }} 웹사이트 로그 자르기 실패, 오류 {{ .err }}" -CutWebsiteLogSuccess: "{{ .name }} 웹사이트 로그 자르기 성공, 백업 경로 {{ .path }}" +#크론잡 +ErrCutWebsiteLog: '{{ .name }} 웹사이트 로그 잘라내기에 실패했습니다. 오류 {{ .err }}' +CutWebsiteLogSuccess: '{{ .name }} 웹사이트 로그가 성공적으로 잘렸습니다. 백업 경로 {{ .path }}' +HandleShell: '스크립트 {{ .name }} 실행' +HandleNtpSync: '시스템 시간 동기화' +HandleSystemClean: '시스템 캐시 정리' -# Toolbox -ErrNotExistUser: "현재 사용자가 존재하지 않습니다. 수정 후 다시 시도하세요!" -ErrBanAction: "설정 실패, 현재 {{ .name }} 서비스가 사용할 수 없습니다. 확인 후 다시 시도하세요!" -ErrClamdscanNotFound: "clamdscan 명령을 감지하지 못했습니다. 설치 문서를 참조하세요!" +#도구상자 +ErrNotExistUser: '현재 사용자가 존재하지 않습니다. 수정한 후 다시 시도하세요!' +ErrBanAction: '설정에 실패했습니다. 현재 {{ .name }} 서비스를 사용할 수 없습니다. 확인하고 다시 시도하세요!' +ErrClamdscanNotFound: 'clamdscan 명령이 감지되지 않았습니다. 설명서를 참조하여 설치하세요!' -# WAF -ErrScope: "이 설정의 수정은 지원되지 않습니다" -ErrStateChange: "상태 변경 실패" -ErrRuleExist: "규칙이 이미 존재합니다" -ErrRuleNotExist: "규칙이 존재하지 않습니다" -ErrParseIP: "IP 형식이 잘못되었습니다" -ErrDefaultIP: "default는 예약된 이름입니다. 다른 이름을 사용하세요" -ErrGroupInUse: "IP 그룹이 블랙리스트/화이트리스트에서 사용 중입니다. 삭제할 수 없습니다" -ErrGroupExist: "IP 그룹 이름이 이미 존재합니다" -ErrIPRange: "IP 범위가 잘못되었습니다" -ErrIPExist: "IP가 이미 존재합니다" -urlDefense: "URL 규칙" -urlHelper: "금지된 URL" -dirFilter: "디렉토리 필터" -xss: "XSS" -phpExec: "PHP 스크립트 실행" -oneWordTrojan: "원워드 트로이 목마" -appFilter: "애플리케이션 위험 디렉토리 필터" -webshell: "Webshell" -args: "매개변수 규칙" -protocolFilter: "프로토콜 필터" -javaFileter: "Java 위험 파일 필터" -scannerFilter: "스캐너 필터" -escapeFilter: "이스케이프 필터" -customRule: "사용자 정의 규칙" -httpMethod: "HTTP 메소드 필터" -fileExt: "파일 업로드 제한" -defaultIpBlack: "악성 IP 그룹" -cookie: "쿠키 규칙" -urlBlack: "URL 블랙리스트" -uaBlack: "User-Agent 블랙리스트" -attackCount: "공격 빈도 제한" -fileExtCheck: "파일 업로드 제한" -geoRestrict: "지역 접근 제한" -unknownWebsite: "무단 도메인 접근" -notFoundCount: "404 빈도 제한" -headerDefense: "헤더 규칙" -defaultUaBlack: "User-Agent 규칙" -methodWhite: "HTTP 규칙" -captcha: "인간-기계 검증" -fiveSeconds: "5초 검증" -vulnCheck: "보충 규칙" -acl: "사용자 정의 규칙" -sql: "SQL 인젝션" -cc: "접근 빈도 제한" -defaultUrlBlack: "URL 규칙" -sqlInject: "SQL 인젝션" -ErrDBNotExist: "데이터베이스가 존재하지 않습니다" -allow: "허용" -deny: "금지" +#와프 +ErrScope: '이 구성을 수정하는 것은 지원되지 않습니다' +ErrStateChange: '상태 변경에 실패했습니다' +ErrRuleExist: '규칙이 이미 존재합니다' +ErrRuleNotExist: '규칙이 존재하지 않습니다' +ErrParseIP: '잘못된 IP 형식' +ErrDefaultIP: '기본값은 예약된 이름입니다. 다른 이름으로 변경해 주세요' +ErrGroupInUse: 'IP 그룹이 블랙리스트/화이트리스트에 사용 중이므로 삭제할 수 없습니다.' +ErrGroupExist: 'IP 그룹 이름이 이미 존재합니다' +ErrIPRange: '잘못된 IP 범위' +ErrIPExist: 'IP가 이미 존재합니다' +urlDefense: 'URL 규칙' +urlHelper: '금지된 URL' +dirFilter: '디렉토리 필터' +xss: 'XSS' +phpExec: 'PHP 스크립트 실행' +oneWordTrojan: '한 단어 트로이' +appFilter: '위험한 디렉토리 필터링 적용' +webshell: '웹쉘' +args: '매개변수 규칙' +protocolFilter: '프로토콜 필터링' +javaFileter: 'Java 위험 파일 필터' +scannerFilter: '스캐너 필터' +escapeFilter: '탈출 필터' +customRule: '사용자 정의 규칙' +httpMethod: 'HTTP 메서드 필터링' +fileExt: '파일 업로드 제한' +defaultIpBlack: '악성 IP 그룹' +cookie: '쿠키 규칙' +urlBlack: 'URL 블랙리스트' +uaBlack: '사용자 에이전트 블랙리스트' +attackCount: '공격 빈도 제한' +fileExtCheck: '파일 업로드 제한' +geoRestrict: '지역 접근 제한' +unknownWebsite: '허가받지 않은 도메인 이름 접근' +notFoundCount: '404 속도 제한' +headerDefense: '헤더 규칙' +defaultUaBlack: '사용자 에이전트 규칙' +methodWhite: 'HTTP 규칙' +captcha: '인간-기계 검증' +fiveSeconds: '5초 검증' +vulnCheck: '보충 규칙' +acl: '사용자 정의 규칙' +sql: 'SQL 주입' +cc: '접근 주파수 제한' +defaultUrlBlack: 'URL 규칙' +sqlInject: 'SQL 주입' +ErrDBNotExist: '데이터베이스가 존재하지 않습니다' +allow: '허용하다' +deny: '거부하다' +OpenrestyNotFound: 'Openresty가 설치되지 않았습니다' -# License -ErrLicense: "라이선스 형식 오류, 확인 후 다시 시도하세요!" -ErrLicenseCheck: "라이선스 검증 실패, 확인 후 다시 시도하세요!" -ErrXpackVersion: "라이선스 검증 실패, 이 라이선스는 버전 제한이 있어 성공적으로 가져올 수 없습니다. 확인 후 다시 시도하세요!" -ErrLicenseSave: "라이선스 정보 저장 실패, 오류 {{ .err }}. 다시 시도하세요!" -ErrLicenseSync: "라이선스 정보 동기화 실패, 데이터베이스에서 라이선스 정보를 감지하지 못했습니다!" -ErrXpackNotFound: "이 섹션은 전문가 버전 기능입니다. Panel 설정 - 라이선스 인터페이스에서 먼저 라이선스를 가져오세요." -ErrXpackNotActive: "이 섹션은 전문가 버전 기능입니다. Panel 설정 - 라이선스 인터페이스에서 먼저 라이선스 상태를 동기화하세요." -ErrXpackOutOfDate: "현재 라이선스가 만료되었습니다. Panel 설정 - 라이선스 인터페이스에서 라이선스를 다시 가져오세요." -ErrXpackLost: "라이선스가 최대 재시도 횟수에 도달했습니다. [설정] - [라이선스] 페이지로 이동하여 동기화 버튼을 수동으로 클릭해 전문가 버전 기능을 정상적으로 작동시키세요." -ErrXpackTimeout: "요청 시간이 초과되었습니다. 네트워크 연결이 불안정할 수 있으니 나중에 다시 시도하세요!" +#일 +TaskStart: '[START] {{ .name }} 작업이 시작됩니다.' +TaskEnd: '{{ .name }} 작업이 완료되었습니다 [완료]' +TaskFailed: '{{ .name }} 작업이 실패했습니다' +TaskTimeout: '{{ .name }}의 시간이 초과되었습니다' +TaskSuccess: '{{ .name }} 작업이 성공했습니다' +TaskRetry: '{{ .name }}번째 재시도 시작' +SubTaskSuccess: '{{ .name }}이 성공했습니다' +SubTaskFailed: '{{ .name }}이 실패했습니다: {{ .err }}' +TaskInstall: '설치' +TaskUninstall: '제거' +TaskCreate: '생성' +TaskDelete: '삭제' +TaskUpgrade: '업그레이드' +TaskUpdate: '업데이트' +TaskRestart: '다시 시작' +TaskBackup: '백업' +TaskRecover: '복구' +TaskRollback: '롤백' +TaskPull: '당기기' +TaskBuild: '빌드' +TaskPush: '푸시' +TaskHandle: '실행' +Website: '웹사이트' +App: '애플리케이션' +Runtime: '런타임 환경' +Database: '데이터베이스' +ConfigFTP: 'FTP 사용자 {{ .name }} 생성' +ConfigOpenresty: 'Openresty 구성 파일 생성' +InstallAppSuccess: '애플리케이션 {{ .name }}이 성공적으로 설치되었습니다.' +ConfigRuntime: '런타임 환경 구성' +ConfigApp: '구성 애플리케이션' +SuccessStatus: '{{ .name }}이 성공했습니다' +FailedStatus: '{{ .name }}이(가) {{ .err }}에 실패했습니다' +HandleLink: '핸들 애플리케이션 연결' +HandleDatabaseApp: '애플리케이션 매개변수 처리' +ExecShell: '{{ .name }} 스크립트 실행' +PullImage: '이미지 가져오기' +Start: '시작' +Run: '시작' +Stop: '정지' +Image: '거울' +Compose : '오케스트레이션' +Container: '컨테이너' +AppLink: '연결된 애플리케이션' +EnableSSL: 'HTTPS 활성화' +AppStore: '앱스토어' +TaskSync: '동기화' +LocalApp: '로컬 애플리케이션' +SubTask: '하위 작업' +RuntimeExtension: '런타임 환경 확장' +TaskIsExecuting: '작업이 실행 중입니다' +CustomAppstore: '사용자 정의 애플리케이션 웨어하우스' -# Alert -ErrAlert: "알림 정보 형식 오류, 확인 후 다시 시도하세요!" -ErrAlertPush: "알림 전송 오류, 확인 후 다시 시도하세요!" -ErrAlertSave: "알림 저장 오류, 확인 후 다시 시도하세요!" -ErrAlertSync: "알림 동기화 오류, 확인 후 다시 시도하세요!" -ErrAlertRemote: "원격 알림 오류, 확인 후 다시 시도하세요!" +# 작업 - ai +OllamaModelPull: 'Ollama 모델 {{ .name }}을(를) 끌어오세요' +OllamaModelSize: 'Ollama 모델 {{ .name }}의 크기를 가져옵니다' -# 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: "모드: " +# 작업-스냅샷 +Snapshot: '스냅샷' +SnapDBInfo: '1Panel 데이터베이스 정보 쓰기' +SnapCopy: '파일 및 디렉토리 {{ .name }} 복사' +SnapNewDB: '데이터베이스 {{ .name }} 연결 초기화' +SnapDeleteOperationLog: '작업 로그 삭제' +SnapDeleteLoginLog: '액세스 로그 삭제' +SnapDeleteMonitor: '모니터링 데이터 삭제' +SnapRemoveSystemIP: '시스템 IP 제거' +SnapBaseInfo: '1패널 기본 정보 쓰기' +SnapInstallApp: '1Panel 설치된 애플리케이션 백업' +SnapDockerSave: '설치된 애플리케이션 압축' +SnapLocalBackup: '1Panel 로컬 백업 디렉토리 백업' +SnapCompressBackup: '로컬 백업 디렉토리 압축' +SnapPanelData: '1Panel 데이터 디렉토리 백업' +SnapCompressPanel: '압축 데이터 디렉토리' +SnapWebsite: '1Panel 웹사이트 디렉토리 백업' +SnapCloseDBConn: '데이터베이스 연결 닫기' +SnapCompress: '스냅샷 파일 만들기' +SnapCompressFile: '스냅샷 파일 압축' +SnapCheckCompress: '스냅샷 압축 파일 확인' +SnapCompressSize: '스냅샷 파일 크기 {{ .name }}' +SnapUpload: '스냅샷 파일 업로드' +SnapLoadBackup: '백업 계정 정보 가져오기' +SnapUploadTo: '스냅샷 파일을 {{ .name }}에 업로드' +SnapUploadRes: '스냅샷 파일을 {{ .name }}에 업로드' + +SnapshotRecover: '스냅샷 복원' +RecoverDownload: '스냅샷 파일 다운로드' +Download: '다운로드' +RecoverDownloadAccount: '스냅샷 다운로드 백업 계정 {{ .name }} 가져오기' +RecoverDecompress: '스냅샷 압축 파일 압축 해제' +Decompress: '감압' +BackupBeforeRecover: '스냅샷 전에 시스템 관련 데이터 백업' +Readjson: '스냅샷에서 Json 파일을 읽습니다' +ReadjsonPath: '스냅샷의 Json 파일 경로 가져오기' +ReadjsonContent: 'Json 파일 읽기' +ReadjsonMarshal: 'Json 이스케이프 처리' +RecoverApp: '설치된 앱 복원' +RecoverWebsite: '웹사이트 디렉토리 복구' +RecoverAppImage: '스냅샷 이미지 백업 복원' +RecoverCompose: '다른 Composer 콘텐츠 복원' +RecoverComposeList: '모든 작곡가를 복원합니다' +RecoverComposeItem: '작성 {{ .name }} 복구' +RecoverAppEmpty: '스냅샷 파일에서 애플리케이션 이미지 백업을 찾을 수 없습니다' +RecoverBaseData: '기본 데이터 및 파일 복구' +RecoverDaemonJsonEmpty: '스냅샷 파일과 현재 머신 모두 컨테이너 구성 daemon.json 파일이 없습니다.' +RecoverDaemonJson: '컨테이너 구성 daemon.json 파일 복원' +RecoverDBData: '데이터베이스 데이터 복구' +RecoverBackups: '로컬 백업 디렉토리 복원' +RecoverPanelData: '복구 데이터 디렉토리' + +# 작업 - 컨테이너 +ContainerNewCliet: 'Docker 클라이언트 초기화' +ContainerImagePull: '컨테이너 이미지 {{ .name }} 가져오기' +ContainerRemoveOld: '원래 컨테이너 {{ .name }} 제거' +ContainerImageCheck: '이미지가 정상적으로 당겨졌는지 확인' +ContainerLoadInfo: '기본 컨테이너 정보 가져오기' +ContainerRecreate: '컨테이너 업데이트에 실패했습니다. 이제 원래 컨테이너를 복원하기 시작합니다.' +ContainerCreate: '새로운 컨테이너 {{ .name }}를 만듭니다' +ContainerCreateFailed: '컨테이너 생성에 실패했습니다. 실패한 컨테이너를 삭제하세요' +ContainerStartCheck: '컨테이너가 시작되었는지 확인' + +# 작업 - 이미지 +ImageBuild: '이미지 빌드' +ImageBuildStdoutCheck: '이미지 출력 콘텐츠 구문 분석' +ImaegBuildRes: '이미지 빌드 출력: {{ .name }}' +ImagePull: '이미지 가져오기' +ImageRepoAuthFromDB: '데이터베이스에서 저장소 인증 정보 가져오기' +ImaegPullRes: '이미지 풀 출력: {{ .name }}' +ImagePush: '이미지 푸시' +ImageRenameTag: '이미지 태그 수정' +ImageNewTag: '새로운 이미지 태그 {{ .name }}' +ImaegPushRes: '이미지 푸시 출력: {{ .name }}' +ComposeCreate: '작곡 만들기' +ComposeCreateRes: 'Compose 생성 출력: {{ .name }}' + +# 작업 - 웹사이트 +BackupNginxConfig: '웹사이트 OpenResty 구성 파일 백업' +CompressFileSuccess: '디렉토리 압축이 성공했습니다. {{ .name }}으로 압축되었습니다.' +CompressDir: '압축 디렉토리' +DeCompressFile: '파일 {{ .name }} 압축 해제' +ErrCheckValid: '백업 파일 검증에 실패했습니다, {{ .name }}' +Rollback: '롤백' +websiteDir: '웹사이트 디렉토리' +RecoverFailedStartRollBack: '복구 실패, 롤백 시작' +AppBackupFileIncomplete: '백업 파일이 불완전하며 app.json 또는 app.tar.gz 파일이 없습니다.' +AppAttributesNotMatch: '애플리케이션 유형 또는 이름이 일치하지 않습니다' + +#알리다 +ErrAlert: '경고 메시지의 형식이 올바르지 않습니다. 확인하고 다시 시도하세요!' +ErrAlertPush: '알림 정보를 푸시하는 중 오류가 발생했습니다. 확인하고 다시 시도하세요!' +ErrAlertSave: '알람 정보를 저장하는 중 오류가 발생했습니다. 확인하고 다시 시도하세요!' +ErrAlertSync: '알람 정보 동기화 오류입니다. 확인하고 다시 시도하세요!' +ErrAlertRemote: '알람 메시지 원격 오류, 확인하고 다시 시도하세요!' \ No newline at end of file diff --git a/agent/i18n/lang/ms.yaml b/agent/i18n/lang/ms.yaml new file mode 100644 index 000000000..bb787820b --- /dev/null +++ b/agent/i18n/lang/ms.yaml @@ -0,0 +1,422 @@ +ErrInvalidParams: 'Permintaan ralat parameter: {{ .detail }}' +ErrTokenParse: 'Ralat penjanaan token: {{ .detail }}' +ErrInitialPassword: 'Kata laluan asal tidak betul' +ErrInternalServer: 'Ralat pelayan dalaman: {{ .detail }}' +ErrRecordExist: 'Rekod sudah wujud' +ErrRecordNotFound: 'Rekod tidak ditemui' +ErrStructTransform: 'Penukaran jenis gagal: {{ .err }}' +ErrNotLogin: 'Pengguna tidak log masuk: {{ .detail }}' +ErrPasswordExpired: 'Kata laluan semasa telah tamat tempoh: {{ .detail }}' +ErrNotSupportType: 'Sistem tidak menyokong jenis semasa: {{ .name }}' +ErrProxy: 'Ralat permintaan, sila semak status nod: {{ .detail }}' +ErrApiConfigStatusInvalid: 'Akses kepada antara muka API adalah dilarang: {{ .detail }}' +ErrApiConfigKeyInvalid: 'Ralat kunci antara muka API: {{ .detail }}' +ErrApiConfigIPInvalid: 'IP yang digunakan untuk memanggil antara muka API tiada dalam senarai putih: {{ .detail }}' +ErrApiConfigDisable: 'Antara muka ini melarang penggunaan panggilan antara muka API: {{ .detail }}' +ErrApiConfigKeyTimeInvalid: 'Ralat cap masa antara muka API: {{ .detail }}' + +#biasa +ErrUsernameIsExist: 'Nama pengguna sudah wujud' +ErrNameIsExist: 'Nama sudah wujud' +ErrDemoEnvironment: 'Pelayan demo, operasi ini dilarang!' +ErrCmdTimeout: 'Pelaksanaan arahan tamat masa!' +ErrCmdIllegal: 'Terdapat aksara yang menyalahi undang-undang dalam perintah pelaksanaan, sila ubah suainya dan cuba lagi!' +ErrPortExist: '{{ .port }} port sudah diduduki oleh {{ .type }} [{{ .name }}]' +TYPE_APP: 'Aplikasi' +TYPE_RUNTIME: 'Persekitaran masa jalan' +TYPE_DOMAIN: 'Nama Domain' +ErrTypePort: Format 'Port {{ .name }} tidak betul' +ErrTypePortRange: 'Julat port perlu antara 1-65535' +Success: 'Kejayaan' +Failed: 'Gagal' +SystemRestart: 'Tugas terganggu kerana sistem mula semula' +ErrGroupIsDefault: 'Kumpulan lalai, tidak boleh dipadamkan' +ErrGroupIsInWebsiteUse: 'Kumpulan sedang digunakan oleh tapak web lain dan tidak boleh dipadamkan.' + +#sandaran +ErrBackupInUsed: 'Akaun sandaran telah digunakan dalam tugas yang dijadualkan dan tidak boleh dipadamkan.' +ErrBackupCheck: 'Sambungan ujian akaun sandaran gagal {{ .err }}' +ErrBackupLocalDelete: 'Memadam akaun sandaran pelayan tempatan belum disokong lagi' +ErrBackupLocalCreate: 'Membuat akaun sandaran pelayan tempatan belum disokong lagi' + +#app +ErrPortInUsed: 'Port {{ .detail }} sudah diduduki!' +ErrAppLimit: 'Bilangan aplikasi yang dipasang telah melebihi had' +ErrAppRequired: 'Sila pasang aplikasi {{ .detail }} dahulu' +ErrNotInstall: 'Aplikasi tidak dipasang' +ErrPortInOtherApp: 'Port {{ .port }} sudah diduduki oleh aplikasi {{ .apps }}!' +ErrDbUserNotValid: 'Pangkalan data sedia ada, nama pengguna dan kata laluan tidak sepadan!' +ErrDockerComposeNotValid: 'Format fail karang docker tidak betul' +ErrUpdateBuWebsite: 'Aplikasi telah berjaya dikemas kini, tetapi pengubahsuaian fail konfigurasi tapak web gagal. Sila semak konfigurasi! ' +Err1PanelNetworkFailed: 'Pembuatan rangkaian kontena lalai gagal! {{ .detail }}' +ErrFileParse: 'Penghuraian fail karang docker aplikasi gagal!' +ErrInstallDirNotFound: 'Direktori pemasangan tidak wujud. Jika anda perlu menyahpasang, sila pilih Paksa Nyahpasang' +AppStoreIsUpToDate: 'Gedung aplikasi sudah pun versi terkini' +LocalAppVersionNull: Aplikasi '{{ .name }} tidak disegerakkan ke versi! Tidak dapat menambah pada senarai apl' +LocalAppVersionErr: '{{ .name }} versi penyegerakan {{ .version }} gagal! {{ .err }}' +ErrFileNotFound: 'Fail {{ .name }} tidak wujud' +ErrFileParseApp: '{{ .name }} penghuraian fail gagal {{ .err }}' +ErrAppDirNull: 'Folder versi tidak wujud' +LocalAppErr: 'Penyegerakan {{ .name }} aplikasi gagal! {{ .err }}' +ErrContainerName: 'Nama kontena sudah wujud' +ErrAppSystemRestart: '1Panel restart menyebabkan tugas ditamatkan' +ErrCreateHttpClient: 'Gagal membuat permintaan {{ .err }}' +ErrHttpReqTimeOut: 'Permintaan tamat masa {{ .err }}' +ErrHttpReqFailed: 'Permintaan gagal {{ .err }}' +ErrNoSuchHost: 'Tidak dapat mencari pelayan yang diminta {{ .err }}' +ErrHttpReqNotFound: 'Sumber yang diminta {{ .err }} tidak dapat ditemui' +ErrImagePullTimeOut: 'Tamat masa tarik imej' +ErrContainerNotFound: 'Bekas {{ .name }} tidak wujud' +ErrContainerMsg: Bekas '{{ .name }} adalah tidak normal. Sila semak log pada halaman kontena untuk butiran' +ErrAppBackup: '{{ .name }} sandaran aplikasi gagal {{ .err }}' +ErrImagePull: 'Tarik imej gagal {{ .err }}' +ErrVersionTooLow: 'Versi 1Panel semasa terlalu rendah untuk mengemas kini App Store. Sila tingkatkan versi sebelum beroperasi.' +ErrAppNameExist: 'Nama aplikasi sudah wujud' +AppStoreIsSyncing: 'App Store sedang menyegerak, sila cuba sebentar lagi' +ErrGetCompose: 'Gagal mendapatkan fail docker-compose.yml! {{ .detail }}' +ErrAppWarn: 'Status tidak normal, sila semak log' +ErrAppParamKey: 'Parameter {{ .name }} medan tidak normal' +ErrAppUpgrade: 'Peningkatan {{ .name }} aplikasi gagal {{ .err }}' +AppRecover: 'Aplikasi tarik balik {{ .name }}' +PullImageStart: 'Mula tarik imej {{ .name }}' +PullImageSuccess: 'Tarik imej berjaya' +UpgradeAppStart: 'Mulakan naik taraf aplikasi {{ .name }}' +UpgradeAppSuccess: 'Aplikasi {{ .name }} berjaya dinaik taraf' +AppStoreIsLastVersion: 'App Store sudah pun versi terkini' +AppStoreSyncSuccess: 'Penyegerakan App Store berjaya' +SyncAppDetail: 'Segerakkan konfigurasi aplikasi' +AppVersionNotMatch: 'Aplikasi {{ .name }} memerlukan versi 1Panel yang lebih tinggi, melangkau penyegerakan' +MoveSiteDir: 'Peningkatan semasa memerlukan penghijrahan direktori tapak web OpenResty' +MoveSiteToDir: 'Pindahkan direktori tapak ke {{ .name }}' +ErrMoveSiteDir: 'Gagal memindahkan direktori tapak' +MoveSiteDirSuccess: 'Penghijrahan direktori tapak web yang berjaya' +DeleteRuntimePHP: 'Padam masa jalan PHP' +CustomAppStoreNotConfig: 'Sila tetapkan alamat pakej luar talian dalam gedung aplikasi' +CustomAppStoreNotFound: 'Gagal mendapatkan pakej kedai aplikasi, sila semak sama ada ia wujud' +CustomAppStoreFileValid: 'Pakej gedung apl perlu dalam format .tar.gz' +PullImageTimeout: 'Tarik tamat masa imej, sila cuba tingkatkan pecutan imej atau tukar kepada pecutan imej lain' +ErrAppIsDown: 'Status permohonan {{ .name }} tidak normal, sila semak' +ErrCustomApps: 'Ada aplikasi yang dipasang, sila nyahpasangnya dahulu' +ErrCustomRuntimes: 'Terdapat persekitaran masa jalan yang dipasang, sila padamkannya dahulu' + +#fail +ErrFileCanNotRead: 'Fail ini tidak menyokong pratonton' +ErrFileToLarge: 'Fail lebih besar daripada 10M dan tidak boleh dibuka' +ErrPathNotFound: 'Direktori tidak wujud' +ErrMovePathFailed: 'Laluan sasaran tidak boleh mengandungi laluan asal!' +ErrLinkPathNotFound: 'Laluan sasaran tidak wujud!' +ErrFileIsExist: 'Fail atau folder sudah wujud!' +ErrFileUpload: '{{ .name }} gagal memuat naik fail {{ .detail }}' +ErrFileDownloadDir: 'Folder muat turun tidak disokong' +ErrCmdNotFound: 'Arahan {{ .name}} tidak wujud, sila pasang arahan ini pada hos dahulu' +ErrSourcePathNotFound: 'Direktori sumber tidak wujud' +ErrFavoriteExist: 'Laluan ini telah digemari' +ErrInvalidChar: 'Aksara haram tidak dibenarkan' +ErrPathNotDelete: 'Direktori yang dipilih tidak boleh dipadamkan' + +#laman web +ErrDomainIsExist: 'Nama domain sudah wujud' +ErrAliasIsExist: 'Alias sudah wujud' +ErrAppDelete: 'Laman web lain menggunakan aplikasi ini dan tidak boleh memadamkannya' +ErrBackupMatch: 'Fail sandaran tidak sepadan dengan beberapa data tapak web semasa {{ .detail }}' +ErrBackupExist: 'Bahagian sepadan data sumber dalam fail sandaran tidak wujud {{ .detail }}' +ErrPHPResource: 'Persekitaran operasi tempatan tidak menyokong penukaran! ' +ErrPathPermission: 'Folder dengan keizinan bukan 1000:1000 telah dikesan dalam direktori indeks, yang mungkin menyebabkan ralat dinafikan Akses pada tapak web. Sila klik butang Simpan di atas' +ErrDomainIsUsed: 'Nama domain telah digunakan oleh tapak web [{{ .name }}]' +ErrDomainFormat: 'Format nama domain {{ .name }} tidak betul' +ErrDefaultAlias: 'lalai ialah kod simpanan, sila gunakan kod lain' +ErrParentWebsite: 'Anda perlu memadamkan subtapak {{ .name }} dahulu' +ErrBuildDirNotFound: 'Direktori binaan tidak wujud' +ErrImageNotExist: 'Imej persekitaran operasi {{ .name }} tidak wujud, sila edit semula persekitaran pengendalian' + +#ssl +ErrSSLCannotDelete: 'Sijil {{ .name }} sedang digunakan oleh tapak web dan tidak boleh dipadamkan' +ErrAccountCannotDelete: 'Akaun dikaitkan dengan sijil dan tidak boleh dipadamkan' +ErrSSSLApply: 'Pembaharuan sijil berjaya, muat semula openresty gagal, sila semak konfigurasi!' +ErrEmailIsExist: 'Peti mel sudah wujud' +ErrSSLKeyNotFound: 'Fail kunci peribadi tidak wujud' +ErrSSLCertificateNotFound: 'Fail sijil tidak wujud' +ErrSSLKeyFormat: 'Pengesahan fail kunci peribadi gagal' +ErrSSLCertificateFormat: 'Format fail sijil tidak betul, sila gunakan format pem' +ErrEabKidOrEabHmacKeyCannot Blank: 'EabKid atau EabHmacKey tidak boleh kosong' +ErrOpenrestyNotFound: 'Mod Http memerlukan Openresty dipasang dahulu' +ApplySSLStart: 'Mula memohon sijil, nama domain [{{ .domain }}] kaedah permohonan [{{ .type }}] ' +dnsAccount: 'DNS Auto' +dnsManual: 'Manual DNS' +http: 'HTTP' +ApplySSLFailed: 'Permohonan untuk sijil [{{ .domain }}] gagal, {{ .detail }} ' +ApplySSLSuccess: 'Berjaya memohon sijil [{{ .domain }}]! ! ' +DNSAccountName: 'Akaun DNS [{{ .name }}] vendor [{{ .type }}]' +PushDirLog: 'Sijil ditolak ke direktori [{{ .path }}] {{ .status }}' +ErrDeleteCAWithSSL: 'Organisasi semasa mempunyai sijil yang telah dikeluarkan dan tidak boleh dipadamkan.' +ErrDeleteWithPanelSSL: 'Konfigurasi SSL Panel menggunakan sijil ini dan tidak boleh dipadamkan' +ErrDefaultCA: 'Pihak berkuasa lalai tidak boleh dipadamkan' +ApplyWebSiteSSLLog: 'Mula memperbaharui sijil tapak web {{ .name }}' +ErrUpdateWebsiteSSL: '{{ .name }} kemas kini sijil tapak web gagal: {{ .err }}' +ApplyWebSiteSSLSuccess: 'Berjaya kemas kini sijil tapak web' +ErrExecShell: 'Gagal melaksanakan skrip {{ .err }}' +ExecShellStart: 'Mula melaksanakan skrip' +ExecShellSuccess: 'Pelaksanaan skrip berjaya' +StartUpdateSystemSSL: 'Mula mengemas kini sijil sistem' +UpdateSystemSSLSuccess: 'Berjaya kemas kini sijil sistem' +ErrWildcardDomain: 'Tidak dapat memohon sijil nama domain kad bebas dalam mod HTTP' + +#mysql +ErrUserIsExist: 'Pengguna semasa sudah wujud, sila masukkan semula' +ErrDatabaseIsExist: 'Pangkalan data semasa sudah wujud, sila masukkan semula' +ErrExecTimeOut: 'Pelaksanaan SQL tamat masa, sila semak pangkalan data' +ErrRemoteExist: 'Pangkalan data jauh sudah wujud dengan nama ini, sila ubah suainya dan cuba lagi' +ErrLocalExist: 'Nama sudah wujud dalam pangkalan data tempatan, sila ubah suai dan cuba lagi' + +#redis +ErrTypeOfRedis: 'Jenis fail pemulihan tidak sepadan dengan kaedah kegigihan semasa, sila ubah suai dan cuba lagi' + +#bekas +ErrInUsed: '{{ .detail }} sedang digunakan dan tidak boleh dipadamkan' +ErrObjectInUsed: 'Objek sedang digunakan dan tidak boleh dipadamkan' +ErrObjectBeDependent: 'Imej ini bergantung pada imej lain dan tidak boleh dipadamkan' +ErrPortRules: 'Nombor port tidak sepadan, sila masukkan semula!' +ErrPgImagePull: 'Tarikh imej tamat masa, sila konfigurasikan pecutan imej atau tarik imej {{ .name }} secara manual dan cuba lagi' + +#masa berjalan +ErrDirNotFound: 'Folder binaan tidak wujud! Sila semak integriti fail!' +ErrFileNotExist: 'Fail {{ .detail }} tidak wujud! Sila semak integriti fail sumber!' +ErrImageBuildErr: 'Pembinaan imej gagal' +ErrImageExist: 'Imej sudah wujud!' +ErrDelWithWebsite: 'Persekitaran pengendalian sudah dikaitkan dengan tapak web dan tidak boleh dipadamkan' +ErrRuntimeStart: 'Permulaan gagal' +ErrPackageJsonNotFound: 'fail package.json tidak wujud' +ErrScriptsNotFound: 'Item konfigurasi skrip tidak ditemui dalam package.json' +ErrContainerNameNotFound: 'Tidak dapat mendapatkan nama kontena, sila semak fail .env' +ErrNodeModulesNotFound: 'Folder node_modules tidak wujud! Sila edit persekitaran masa jalan atau tunggu persekitaran masa jalan berjaya dimulakan' +ErrContainerNameIsNull: 'Nama kontena tidak wujud' + +#alat +ErrConfigNotFound: 'Fail konfigurasi tidak wujud' +ErrConfigParse: 'Format fail konfigurasi tidak betul' +ErrConfigIsNull: 'Fail konfigurasi tidak boleh kosong' +ErrConfigDirNotFound: 'Direktori berjalan tidak wujud' +ErrConfigAlreadyExist: 'Fail konfigurasi dengan nama yang sama sudah wujud' +ErrUserFindErr: 'Pengguna {{ .name }} carian gagal {{ .err }}' + +#ssh +ErrFirewallNone: 'Tiada sistem firewalld atau perkhidmatan ufw dikesan, sila semak dan cuba lagi!' +ErrFirewallBoth: 'Telah dikesan bahawa sistem mempunyai perkhidmatan firewalld dan ufw. Untuk mengelakkan konflik, sila nyahpasang dan cuba lagi!' + +#cronjob +ErrCutWebsiteLog: '{{ .name }} pemotongan log tapak web gagal, ralat {{ .err }}' +CutWebsiteLogSuccess: '{{ .name }} log tapak web berjaya dipotong, laluan sandaran {{ .path }}' +HandleShell: 'Laksanakan skrip {{ .name }}' +HandleNtpSync: 'Penyegerakan masa sistem' +HandleSystemClean: 'Pembersihan cache sistem' + +#kotak alat +ErrNotExistUser: 'Pengguna semasa tidak wujud, sila ubah suai dan cuba lagi!' +ErrBanAction: 'Tetapan gagal. Perkhidmatan {{ .name }} semasa tidak tersedia. Sila semak dan cuba lagi!' +ErrClamdscanNotFound: 'Arahan clamdscan tidak dikesan, sila rujuk dokumentasi untuk memasangnya!' + +#waf +ErrScope: 'Mengubah suai konfigurasi ini tidak disokong' +ErrStateChange: 'Perubahan keadaan gagal' +ErrRuleExist: 'Peraturan sudah wujud' +ErrRuleNotExist: 'Peraturan tidak wujud' +ErrParseIP: 'Format IP salah' +ErrDefaultIP: 'default ialah nama simpanan, sila tukar kepada nama lain' +ErrGroupInUse: 'Kumpulan IP digunakan oleh senarai hitam/senarai putih dan tidak boleh dipadamkan' +ErrGroupExist: 'Nama kumpulan IP sudah wujud' +ErrIPRange: 'Julat IP salah' +ErrIPExist: 'IP sudah wujud' +urlDefense: 'Peraturan URL' +urlHelper: 'URL Terlarang' +dirFilter: 'Penapis direktori' +xss: 'XSS' +phpExec: 'Pelaksanaan skrip PHP' +oneWordTrojan: 'One Word Trojan' +appFilter: 'Gunakan penapisan direktori berbahaya' +webshell: 'Webshell' +args: 'Peraturan parameter' +protocolFilter: 'Penapisan protokol' +javaFileter: 'Penapis fail berbahaya Java' +Penapis pengimbas: 'Penapis pengimbas' +escapeFilter: 'penapis melarikan diri' +customRule: 'Peraturan tersuai' +httpMethod: 'Penapisan kaedah HTTP' +fileExt: 'Sekatan muat naik fail' +defaultIpBlack: 'Kumpulan IP berniat jahat' +cookie: 'Peraturan Kuki' +urlBlack: 'senarai hitam URL' +uaBlack: 'Senarai hitam Ejen Pengguna' +attackCount: 'Had kekerapan serangan' +fileExtCheck: 'Sekatan muat naik fail' +geoRestrict: 'Sekatan akses serantau' +unknownWebsite: 'Akses nama domain yang tidak dibenarkan' +notFoundCount: '404 Had Kadar' +headerDefense: 'Peraturan header' +defaultUaBlack: 'Peraturan Ejen Pengguna' +methodWhite: 'Peraturan HTTP' +captcha: 'pengesahan mesin manusia' +fiveSeconds: 'pengesahan 5 saat' +vulnCheck: 'Peraturan tambahan' +acl: 'Peraturan tersuai' +sql: 'suntikan SQL' +cc: 'Had kekerapan akses' +defaultUrlBlack: 'Peraturan URL' +sqlInject: 'Suntikan SQL' +ErrDBNotExist: 'Pangkalan data tidak wujud' +allow: 'membenarkan' +deny: 'menafikan' +OpenrestyNotFound: 'Openresty tidak dipasang' + +#tugas +TaskStart: '{{ .name }} Task mula [MULA]' +TaskEnd: '{{ .name }} Task selesai [SELESAI]' +TaskFailed: 'tugas {{ .name }} gagal' +TaskTimeout: '{{ .name }} tamat masa' +TaskSuccess: '{{ .name }} Task berjaya' +TaskRetry: 'Mulakan {{ .name }} cuba semula' +SubTaskSuccess: '{{ .name }} berjaya' +SubTaskFailed: '{{ .name }} gagal: {{ .err }}' +TaskInstall: 'Pasang' +TaskUninstall: 'Nyahpasang' +TaskCreate: 'Buat' +TaskDelete: 'Padam' +TaskUpgrade: 'Naik taraf' +TaskUpdate: 'Kemas kini' +TaskRestart: 'Mulakan semula' +TaskBackup: 'Sandaran' +TaskRecover: 'Pulihkan' +TaskRollback: 'Rollback' +TaskPull: 'Tarik' +TaskBuild: 'Bina' +TaskPush: 'Tolak' +TaskHandle: 'Laksanakan' +Website: 'Laman web' +App: 'Aplikasi' +Runtime: 'Persekitaran masa jalan' +Database: 'Pangkalan Data' +ConfigFTP: 'Buat pengguna FTP {{ .name }}' +ConfigOpenresty: 'Buat fail konfigurasi Openresty' +InstallAppSuccess: 'Aplikasi {{ .name }} berjaya dipasang' +ConfigRuntime: 'Konfigurasikan persekitaran masa jalan' +ConfigApp: 'Aplikasi Konfigurasi' +SuccessStatus: '{{ .name }} berjaya' +FailedStatus: '{{ .name }} gagal {{ .err }}' +HandleLink: 'Kendalikan persatuan aplikasi' +HandleDatabaseApp: 'Mengendalikan parameter aplikasi' +ExecShell: 'Laksanakan skrip {{ .name }}' +PullImage: 'Tarik imej' +Start: 'Mula' +Run: 'Mula' +Stop: 'Berhenti' +Image: 'Cermin' +Compose: 'Orkestrasi' +Container: 'Bekas' +AppLink: 'Aplikasi Terpaut' +EnableSSL: 'Dayakan HTTPS' +AppStore: 'App Store' +TaskSync: 'Segerakkan' +LocalApp: 'Aplikasi Tempatan' +SubTask: 'Subtugas' +RuntimeExtension: 'Sambungan Persekitaran Runtime' +TaskIsExecuting: 'Tugas sedang berjalan' +CustomAppstore: 'Gudang aplikasi tersuai' + +# tugasan - ai +OllamaModelPull: 'Tarik model Ollama {{ .name }}' +OllamaModelSize: 'Dapatkan saiz model Ollama {{ .name }}' + +# gambar tugasan +Snapshot: 'Snapshot' +SnapDBInfo: 'Tulis maklumat pangkalan data 1Panel' +SnapCopy: 'Salin fail & direktori {{ .name }}' +SnapNewDB: 'Mulakan sambungan {{ .name }} pangkalan data' +SnapDeleteOperationLog: 'Padam log operasi' +SnapDeleteLoginLog: 'Padam log akses' +SnapDeleteMonitor: 'Padamkan data pemantauan' +SnapRemoveSystemIP: 'Alih keluar IP sistem' +SnapBaseInfo: 'Tulis maklumat asas 1Panel' +SnapInstallApp: 'Aplikasi yang dipasang sandaran 1Panel' +SnapDockerSave: 'Mampatkan aplikasi yang dipasang' +SnapLocalBackup: 'Sandaran 1Panel direktori sandaran tempatan' +SnapCompressBackup: 'Mampatkan direktori sandaran tempatan' +SnapPanelData: 'Sandaran direktori data 1Panel' +SnapCompressPanel: 'Direktori Data Mampat' +SnapWebsite: 'Sandaran direktori tapak web 1Panel' +SnapCloseDBConn: 'Tutup sambungan pangkalan data' +SnapCompress: 'Buat fail syot kilat' +SnapCompressFile: 'Mampatkan fail syot kilat' +SnapCheckCompress: 'Semak fail mampatan syot kilat' +SnapCompressSize: 'Saiz fail syot kilat {{ .name }}' +SnapUpload: 'Muat naik fail syot kilat' +SnapLoadBackup: 'Dapatkan maklumat akaun sandaran' +SnapUploadTo: 'Muat naik fail syot kilat ke {{ .name }}' +SnapUploadRes: 'Muat naik fail syot kilat ke {{ .name }}' + +SnapshotRecover: 'Snapshot Restore' +RecoverDownload: 'Muat turun fail syot kilat' +Download: 'Muat turun' +RecoverDownloadAccount: 'Dapatkan syot kilat muat turun akaun sandaran {{ .name }}' +RecoverDecompress: 'Nyahmampatkan fail termampat syot kilat' +Decompress: 'Penyahmampatan' +BackupBeforeRecover: 'Sandarkan data berkaitan sistem sebelum syot kilat' +Readjson: 'Baca fail Json dalam petikan' +ReadjsonPath: 'Dapatkan laluan fail Json dalam petikan' +ReadjsonContent: 'Baca fail Json' +ReadjsonMarshal: 'Pemprosesan melarikan diri Json' +RecoverApp: 'Pulihkan apl yang dipasang' +RecoverWebsite: 'Pulihkan direktori tapak web' +RecoverAppImage: 'Pulihkan sandaran imej syot kilat' +RecoverCompose: 'Pulihkan kandungan komposer lain' +RecoverComposeList: 'Dapatkan semua komposer untuk dipulihkan' +RecoverComposeItem: 'Recover compose {{ .name }}' +RecoverAppEmpty: 'Tiada sandaran imej aplikasi ditemui dalam fail syot kilat' +RecoverBaseData: 'Pulihkan data asas dan fail' +RecoverDaemonJsonEmpty: 'Kedua-dua fail syot kilat dan mesin semasa tidak mempunyai fail daemon.json konfigurasi bekas' +RecoverDaemonJson: 'Pulihkan fail daemon.json konfigurasi bekas' +RecoverDBData: 'Pulihkan data pangkalan data' +RecoverBackups: 'Pulihkan direktori sandaran tempatan' +RecoverPanelData: 'Direktori data pemulihan' + +# tugas - bekas +ContainerNewCliet: 'Memulakan Klien Docker' +ContainerImagePull: 'Tarik imej bekas {{ .name }}' +ContainerRemoveOld: 'Alih keluar bekas asal {{ .name }}' +ContainerImageCheck: 'Periksa sama ada imej ditarik seperti biasa' +ContainerLoadInfo: 'Dapatkan maklumat bekas asas' +ContainerRecreate: 'Kemas kini kontena gagal, kini mula memulihkan bekas asal' +ContainerCreate: 'Buat bekas baharu {{ .name }}' +ContainerCreateFailed: 'Penciptaan bekas gagal, padamkan bekas yang gagal' +ContainerStartCheck: 'Periksa sama ada bekas telah dimulakan' + +# tugas - imej +ImageBuild: 'Membina Imej' +ImageBuildStdoutCheck: 'Menghuraikan kandungan output imej' +ImaegBuildRes: 'Output binaan imej: {{ .name }}' +ImagePull: 'Tarik imej' +ImageRepoAuthFromDB: 'Dapatkan maklumat pengesahan repositori daripada pangkalan data' +ImaegPullRes: 'Output tarik imej: {{ .name }}' +ImagePush: 'Tolak imej' +ImageRenameTag: 'Ubah suai teg imej' +ImageNewTag: 'Teg imej baharu {{ .name }}' +ImaegPushRes: 'Output tolak imej: {{ .name }}' +ComposeCreate: 'Buat gubahan' +ComposeCreateRes: 'Karang cipta output: {{ .name }}' + +# tugas - laman web +BackupNginxConfig: 'Fail konfigurasi OpenResty tapak web sandaran' +CompressFileSuccess: 'Mampatkan direktori berjaya, dimampatkan ke {{ .name }}' +CompressDir: 'Direktori mampatan' +DeCompressFile: 'Nyahmampatkan fail {{ .name }}' +ErrCheckValid: 'Pengesahan fail sandaran gagal, {{ .name }}' +Rollback: 'Undur' +websiteDir: 'Direktori Laman Web' +RecoverFailedStartRollBack: 'Pemulihan gagal, mulakan rollback' +AppBackupFileIncomplete: 'Fail sandaran tidak lengkap dan tidak mempunyai fail app.json atau app.tar.gz' +AppAttributesNotMatch: 'Jenis atau nama aplikasi tidak sepadan' + +#alert +ErrAlert: 'Format mesej amaran tidak betul, sila semak dan cuba lagi!' +ErrAlertPush: 'Ralat dalam menolak maklumat amaran, sila semak dan cuba lagi!' +ErrAlertSave: 'Ralat menyimpan maklumat penggera, sila semak dan cuba lagi!' +ErrAlertSync: 'Ralat penyegerakan maklumat penggera, sila semak dan cuba lagi!' +ErrAlertRemote: 'Ralat jauh mesej penggera, sila semak dan cuba lagi!' \ No newline at end of file diff --git a/agent/i18n/lang/ms.yml b/agent/i18n/lang/ms.yml deleted file mode 100644 index 34d78e8b0..000000000 --- a/agent/i18n/lang/ms.yml +++ /dev/null @@ -1,328 +0,0 @@ -ErrInvalidParams: "Ralat parameter permintaan: {{ .detail }}" -ErrTokenParse: "Ralat penjanaan token: {{ .detail }}" -ErrInitialPassword: "Ralat kata laluan awal" -ErrInternalServer: "Ralat dalaman perkhidmatan: {{ .detail }}" -ErrRecordExist: "Rekod sudah wujud" -ErrRecordNotFound: "Rekod tidak dijumpai" -ErrStructTransform: "Kegagalan penukaran jenis: {{ .detail }}" -ErrNotLogin: "Pengguna belum log masuk: {{ .detail }}" -ErrPasswordExpired: "Kata laluan semasa telah tamat tempoh: {{ .detail }}" -ErrNotSupportType: "Sistem tidak menyokong jenis semasa: {{ .detail }}" -ErrApiConfigStatusInvalid: "Akses antara muka API dilarang: {{ .detail }}" -ErrApiConfigKeyInvalid: "Ralat kunci antara muka API: {{ .detail }}" -ErrApiConfigIPInvalid: "IP antara muka API tidak berada dalam senarai putih: {{ .detail }}" -ErrApiConfigDisable: "Antara muka ini melarang penggunaan panggilan API: {{ .detail }}" -ErrApiConfigKeyTimeInvalid: "Ralat cap waktu antara muka API: {{ .detail }}" - -#common -ErrUsernameIsExist: "Nama pengguna sudah wujud" -ErrNameIsExist: "Nama sudah wujud" -ErrDemoEnvironment: "Pelayan demo, operasi ini dilarang!" -ErrCmdTimeout: "Pelaksanaan arahan telah tamat masa!" -ErrCmdIllegal: "Arahan mengandungi aksara tidak sah. Sila ubah dan cuba lagi!" -ErrPortExist: 'Port {{ .port }} sudah digunakan oleh {{ .type }} [{{ .name }}]' -TYPE_APP: "Aplikasi" -TYPE_RUNTIME: "Persekitaran runtime" -TYPE_DOMAIN: "Nama domain" -ErrTypePort: 'Format port {{ .name }} adalah salah' -ErrTypePortRange: 'Julat port perlu berada di antara 1-65535' -Success: "Berjaya" -Failed: "Gagal" -SystemRestart: "Mulakan semula sistem menyebabkan gangguan tugas" -ErrGroupIsDefault: "Kumpulan lalai, tidak boleh dipadam" -ErrGroupIsInWebsiteUse: "Kumpulan sedang digunakan oleh laman web lain, tidak boleh dipadam" - -#app -ErrPortInUsed: "Port {{ .detail }} sudah digunakan" -ErrAppLimit: "Aplikasi melebihi had pemasangan" -ErrAppRequired: "Aplikasi {{ .detail }} diperlukan" -ErrNotInstall: "Aplikasi tidak dipasang" -ErrPortInOtherApp: "Port {{ .port }} sudah digunakan oleh aplikasi {{ .apps }}" -ErrDbUserNotValid: "Pangkalan data stok, nama pengguna dan kata laluan tidak sepadan!" -ErrDockerComposeNotValid: "Format fail docker-compose adalah salah!" -ErrUpdateBuWebsite: "Aplikasi berjaya dikemas kini, tetapi pengubahsuaian fail konfigurasi laman web gagal, sila semak konfigurasi!" -Err1PanelNetworkFailed: "Penciptaan rangkaian kontena lalai gagal! {{ .detail }}" -ErrFileParse: "Analisis fail docker-compose aplikasi gagal!" -ErrInstallDirNotFound: "Direktori pemasangan tidak wujud" -AppStoreIsUpToDate: "Terkini" -LocalAppVersionNull: "Aplikasi {{.name}} tidak diselaraskan ke versi! Tidak dapat menambah ke senarai aplikasi" -LocalAppVersionErr: "{{.name}} gagal diselaraskan ke versi {{.version}}! {{.err}}" -ErrFileNotFound: "Fail {{.name}} tidak wujud" -ErrFileParseApp: "Gagal menganalisis fail {{.name}} {{.err}}" -ErrAppDirNull: "Folder versi tidak wujud" -LocalAppErr: "Penyelarasan aplikasi {{.name}} gagal! {{.err}}" -ErrContainerName: "Nama Kontena sudah wujud" -ErrAppSystemRestart: "Pemulangan semula 1Panel menyebabkan tugas terhenti" -ErrCreateHttpClient: "Gagal mencipta permintaan HTTP {{.err}}" -ErrHttpReqTimeOut: "Permintaan tamat masa {{.err}}" -ErrHttpReqFailed: "Permintaan gagal {{.err}}" -ErrHttpReqNotFound: "Fail tidak wujud" -ErrNoSuchHost: "Sambungan rangkaian gagal" -ErrImagePullTimeOut: "Tarik imej tamat masa" -ErrContainerNotFound: "Kontena {{ .name }} tidak wujud" -ErrContainerMsg: "Kontena {{ .name }} bermasalah, sila semak log pada halaman kontena untuk maklumat lanjut" -ErrAppBackup: "Sandaran aplikasi {{ .name }} gagal err {{.err}}" -ErrImagePull: "Tarik imej {{ .name }} gagal err {{.err}}" -ErrVersionTooLow: "Versi 1Panel semasa terlalu rendah untuk mengemas kini gedung aplikasi, sila tingkatkan versi" -ErrAppNameExist: "Nama aplikasi sudah wujud" -AppStoreIsSyncing: "Gedung Aplikasi sedang menyelaraskan, sila cuba lagi nanti" -ErrGetCompose: "Gagal mendapatkan fail docker-compose.yml! {{ .detail }}" -ErrAppWarn: "Status tidak normal, sila semak log" -ErrAppParamKey: "Pengecualian medan parameter {{ .name }}" -ErrAppUpgrade: "Gagal menaik taraf aplikasi {{ .name }} {{ .err }}" -AppRecover: "Aplikasi {{ .name }} telah dikembalikan" -PullImageStart: "Memulakan penarikan imej {{ .name }}" -PullImageSuccess: "Imej berjaya ditarik" -UpgradeAppStart: "Memulakan peningkatan aplikasi {{ .name }}" -UpgradeAppSuccess: "Aplikasi {{ .name }} berjaya dinaik taraf" -ErrAppIsDown: "{{ .name }} status aplikasi tidak normal, sila periksa" - -#file -ErrFileCanNotRead: "Fail tidak boleh dibaca" -ErrFileToLarge: "Fail terlalu besar" -ErrPathNotFound: "Laluan tidak dijumpai" -ErrMovePathFailed: "Laluan sasaran tidak boleh mengandungi laluan asal!" -ErrLinkPathNotFound: "Laluan sasaran tidak wujud!" -ErrFileIsExist: "Fail atau direktori sudah wujud!" -ErrFileUpload: "Gagal memuat naik fail {{.name}} {{.detail}}" -ErrFileDownloadDir: "Muat turun folder tidak disokong" -ErrCmdNotFound: "Arahan {{ .name }} tidak wujud, sila pasang arahan ini pada hos terlebih dahulu" -ErrSourcePathNotFound: "Direktori sumber tidak wujud" -ErrFavoriteExist: "Laluan ini telah dikumpulkan" -ErrInvalidChar: "Aksara tidak sah adalah dilarang" -ErrPathNotDelete: "Direktori yang dipilih tidak boleh dipadam" - -#website -ErrDomainIsExist: "Nama domain sudah wujud" -ErrAliasIsExist: "Alias sudah wujud" -ErrAppDelete: "Laman web lain menggunakan aplikasi ini" -ErrGroupIsUsed: "Kumpulan sedang digunakan dan tidak boleh dipadam" -ErrBackupMatch: "Fail sandaran tidak sepadan dengan data separa laman web semasa: {{ .detail }}" -ErrBackupExist: "Fail sandaran berkaitan dengan sebahagian data asal yang tidak wujud: {{ .detail }}" -ErrPHPResource: "Runtime tempatan tidak menyokong penukaran!" -ErrPathPermission: "Folder dengan kebenaran bukan 1000:1000 dikesan dalam direktori indeks, yang mungkin menyebabkan ralat 'Access denied' semasa mengakses laman web. Sila klik butang simpan di atas" -ErrDomainIsUsed: "Domain sudah digunakan oleh laman web {{ .name }}" -ErrDomainFormat: "Format domain {{ .name }} adalah salah" -ErrDefaultAlias: "default ialah nama kod terpelihara, sila gunakan nama kod lain" -ErrImageNotExist: "Imej persekitaran runtime {{.name}} tidak wujud, sila sunting semula persekitaran runtime" - -#ssl -ErrSSLCannotDelete: "Sijil {{ .name }} sedang digunakan oleh laman web dan tidak boleh dihapuskan" -ErrAccountCannotDelete: "Sijil yang dikaitkan dengan akaun tidak boleh dihapuskan" -ErrSSLApply: "Sijil berjaya terus ditandatangani, tetapi reload OpenResty gagal, sila semak konfigurasi!" -ErrEmailIsExist: "Emel sudah wujud" -ErrSSLKeyNotFound: "Fail kunci peribadi tidak wujud" -ErrSSLCertificateNotFound: "Fail sijil tidak wujud" -ErrSSLKeyFormat: "Ralat pengesahan fail kunci peribadi" -ErrSSLCertificateFormat: "Format fail sijil salah, sila gunakan format PEM" -ErrEabKidOrEabHmacKeyCannotBlank: "EabKid atau EabHmacKey tidak boleh kosong" -ErrOpenrestyNotFound: "Mod HTTP memerlukan OpenResty dipasang terlebih dahulu" -ApplySSLStart: "Memulakan permohonan sijil, nama domain [{{ .domain }}], kaedah permohonan [{{ .type }}]" -dnsAccount: "DNS Automatik" -dnsManual: "DNS Manual" -http: "HTTP" -ApplySSLFailed: "Permohonan sijil untuk [{{ .domain }}] gagal, {{.detail}}" -ApplySSLSuccess: "Permohonan sijil untuk [{{ .domain }}] berjaya!" -DNSAccountName: "Akaun DNS [{{ .name }}], pengeluar [{{ .type }}]" -PushDirLog: "Sijil dihantar ke direktori [{{ .path }}] {{ .status }}" -ErrDeleteCAWithSSL: "Terdapat sijil yang telah dikeluarkan di bawah organisasi semasa dan tidak boleh dihapuskan" -ErrDeleteWithPanelSSL: "Konfigurasi SSL panel menggunakan sijil ini dan tidak boleh dihapuskan" -ErrDefaultCA: "Pihak Berkuasa Sijil lalai tidak boleh dihapuskan" -ApplyWebSiteSSLLog: "Memulakan kemas kini sijil laman web {{ .name }}" -ErrUpdateWebsiteSSL: "Sijil laman web {{ .name }} gagal dikemas kini: {{ .err }}" -ApplyWebSiteSSLSuccess: "Sijil laman web berjaya dikemas kini" -ErrExecShell: "Pelaksanaan skrip gagal {{ .err }}" -ExecShellStart: "Memulakan pelaksanaan skrip" -ExecShellSuccess: "Skrip berjaya dilaksanakan" -StartUpdateSystemSSL: "Memulakan kemas kini sijil sistem" -UpdateSystemSSLSuccess: "Sijil sistem berjaya dikemas kini" - -#mysql -ErrUserIsExist: "Pengguna semasa sudah wujud. Sila masukkan pengguna baharu" -ErrDatabaseIsExist: "Pangkalan data semasa sudah wujud. Sila masukkan pangkalan data baharu" -ErrExecTimeOut: "Pelaksanaan SQL tamat masa, sila semak pangkalan data" -ErrRemoteExist: "Pangkalan data jauh dengan nama tersebut sudah wujud, sila ubah dan cuba lagi" -ErrLocalExist: "Pangkalan data tempatan dengan nama tersebut sudah wujud, sila ubah dan cuba lagi" - -#redis -ErrTypeOfRedis: "Jenis fail pemulihan tidak sepadan dengan mod ketekalan semasa. Sila ubah jenis fail dan cuba lagi." - -#container -ErrInUsed: "{{ .detail }} sedang digunakan dan tidak boleh dihapuskan" -ErrObjectInUsed: "Objek ini sedang digunakan dan tidak boleh dihapuskan" -ErrObjectBeDependent: "Imej ini bergantung kepada imej lain dan tidak boleh dihapuskan" -ErrPortRules: "Bilangan port tidak sepadan, sila masukkan semula!" -ErrPgImagePull: "Tarik imej tamat masa. Sila konfigurasikan pecutan imej atau tarik imej postgres:16.0-alpine secara manual dan cuba lagi" - -#runtime -ErrDirNotFound: "Folder binaan tidak wujud! Sila semak integriti fail!" -ErrFileNotExist: "Fail {{ .detail }} tidak wujud! Sila semak integriti fail sumber!" -ErrImageBuildErr: "Binaan imej gagal" -ErrImageExist: "Imej sudah wujud!" -ErrDelWithWebsite: "Persekitaran operasi telah dikaitkan dengan laman web dan tidak boleh dihapuskan" -ErrRuntimeStart: "Gagal memulakan" -ErrPackageJsonNotFound: "Fail package.json tidak wujud" -ErrScriptsNotFound: "Tiada item konfigurasi skrip dijumpai dalam package.json" -ErrContainerNameNotFound: "Tidak dapat mendapatkan nama kontena, sila semak fail .env" -ErrNodeModulesNotFound: "Folder node_modules tidak wujud! Sila sunting persekitaran operasi atau tunggu sehingga persekitaran operasi berjaya dimulakan" - -#setting -ErrBackupInUsed: "Akaun sandaran sedang digunakan dalam cronjob dan tidak boleh dihapuskan." -ErrBackupCheck: "Ujian sambungan akaun sandaran gagal {{ .err }}" -ErrOSSConn: "Tidak dapat mendapatkan versi terkini, sila semak sama ada pelayan boleh menyambung ke rangkaian luaran." -ErrEntrance: "Ralat maklumat pintu masuk keselamatan. Sila semak dan cuba lagi!" - -#tool -ErrConfigNotFound: "Fail konfigurasi tidak wujud" -ErrConfigParse: "Format fail konfigurasi salah" -ErrConfigIsNull: "Fail konfigurasi tidak boleh kosong" -ErrConfigDirNotFound: "Direktori operasi tidak wujud" -ErrConfigAlreadyExist: "Fail konfigurasi dengan nama yang sama sudah wujud" -ErrUserFindErr: "Gagal mencari pengguna {{ .name }} {{ .err }}" - -#ssh -ErrFirewallNone: "Tiada perkhidmatan firewalld atau ufw dikesan pada sistem. Sila semak dan cuba lagi!" -ErrFirewallBoth: "Kedua-dua perkhidmatan firewalld dan ufw dikesan pada sistem. Untuk mengelakkan konflik, sila nyahpasang salah satu dan cuba lagi!" - -#cronjob -ErrBashExecute: "Ralat pelaksanaan skrip, sila semak maklumat khusus dalam kawasan teks output tugas." -ErrCutWebsiteLog: "Pemotongan log laman web {{ .name }} gagal, ralat {{ .err }}" -CutWebsiteLogSuccess: "Log laman web {{ .name }} berjaya dipotong, laluan sandaran {{ .path }}" - -#toolbox -ErrNotExistUser: "Pengguna semasa tidak wujud. Sila ubah dan cuba lagi!" -ErrBanAction: "Tetapan gagal, perkhidmatan {{ .name }} semasa tidak tersedia, sila semak dan cuba lagi!" -ErrClamdscanNotFound: "Perintah clamdscan tidak dikesan, sila rujuk dokumentasi untuk memasangnya!" - -#waf -ErrScope: "Tidak menyokong pengubahsuaian konfigurasi ini" -ErrStateChange: "Gagal menukar status" -ErrRuleExist: "Peraturan sudah wujud" -ErrRuleNotExist: "Peraturan tidak wujud" -ErrParseIP: "Format IP tidak betul" -ErrDefaultIP: "default adalah nama terpelihara, sila gunakan nama lain" -ErrGroupInUse: "Kumpulan IP digunakan oleh senarai hitam/putih, tidak boleh dipadam" -ErrGroupExist: "Nama kumpulan IP sudah wujud" -ErrIPRange: "Julat IP tidak betul" -ErrIPExist: "IP sudah wujud" -urlDefense: "Peraturan URL" -urlHelper: "URL Terlarang" -dirFilter: "Penapis Direktori" -xss: "XSS" -phpExec: "Pelaksanaan Skrip PHP" -oneWordTrojan: "Trojan Satu Kata" -appFilter: "Penapis Direktori Berbahaya Aplikasi" -webshell: "Webshell" -args: "Peraturan Parameter" -protocolFilter: "Penapis Protokol" -javaFileter: "Penapis Fail Berbahaya Java" -scannerFilter: "Penapis Pemindai" -escapeFilter: "Penapis Pelarian" -customRule: "Peraturan Tersuai" -httpMethod: "Penapis Kaedah HTTP" -fileExt: "Had Muat Naik Fail" -defaultIpBlack: "Kumpulan IP Merosakkan" -cookie: "Peraturan Kuki" -urlBlack: "Senarai Hitam URL" -uaBlack: "Senarai Hitam User-Agent" -attackCount: "Had Kekerapan Serangan" -fileExtCheck: "Had Muat Naik Fail" -geoRestrict: "Sekatan Akses Wilayah" -unknownWebsite: "Akses Domain Tanpa Kebenaran" -notFoundCount: "Had Kekerapan 404" -headerDefense: "Peraturan Header" -defaultUaBlack: "Peraturan User-Agent" -methodWhite: "Peraturan HTTP" -captcha: "Pengesahan Manusia-Mesin" -fiveSeconds: "Pengesahan 5 Saat" -vulnCheck: "Peraturan Tambahan" -acl: "Peraturan Tersuai" -sql: "Penembakan SQL" -cc: "Had Kekerapan Akses" -defaultUrlBlack: "Peraturan URL" -sqlInject: "Penembakan SQL" -ErrDBNotExist: "Pangkalan Data Tidak Wujud" -allow: "Benarkan" -deny: "Larang" - -#license -ErrLicense: "Format lesen salah, sila semak dan cuba lagi!" -ErrLicenseCheck: "Pengesahan lesen gagal, sila semak dan cuba lagi!" -ErrLicenseSave: "Gagal menyimpan maklumat lesen, ralat {{ .err }}, sila cuba lagi!" -ErrLicenseSync: "Gagal menyelaraskan maklumat lesen, tiada maklumat lesen dikesan dalam pangkalan data!" -ErrXpackNotFound: "Bahagian ini adalah ciri edisi profesional, sila import lesen terlebih dahulu dalam Tetapan Panel - Antara Muka Lesen" -ErrXpackNotActive: "Bahagian ini adalah ciri edisi profesional, sila selaraskan status lesen terlebih dahulu dalam Tetapan Panel - Antara Muka Lesen" -ErrXpackOutOfDate: "Lesen semasa telah tamat tempoh, sila import semula lesen dalam Tetapan Panel - Antara Muka Lesen" -ErrXpackLost: "Lesen telah mencapai bilangan maksimum percubaan semula. Sila pergi ke halaman [Tetapan] [Lesen] dan klik butang selaraskan secara manual untuk memastikan ciri versi profesional berfungsi dengan baik." -ErrXpackTimeout: "Permintaan tamat masa, sambungan rangkaian mungkin tidak stabil, sila cuba lagi nanti!" - -#license -ErrAlert: "Format maklumat amaran salah, sila semak dan cuba lagi!" -ErrAlertPush: "Ralat penghantaran amaran, sila semak dan cuba lagi!" -ErrAlertSave: "Ralat penyimpanan amaran, sila semak dan cuba lagi!" -ErrAlertSync: "Ralat penyelarasan amaran, sila semak dan cuba lagi!" -ErrAlertRemote: "Ralat amaran jauh, sila semak dan cuba lagi!" - -#cmd -AppVersion: "Versi aplikasi" -AppCommands: "Arahan berkaitan aplikasi" -AppInit: "Inisialisasi aplikasi" -AppKeyVal: "Kunci aplikasi (hanya menyokong bahasa Inggeris)" -AppCreateFileErr: "Gagal mencipta fail {{ .name }} {{ .err }}" -AppCreateDirErr: "Gagal mencipta folder {{ .name }} {{ .err }}" -AppMissKey: "Kunci aplikasi hilang, gunakan -k untuk menetapkan" -AppMissVersion: "Versi aplikasi hilang, gunakan -v untuk menetapkan" -AppVersionExist: "Versi sudah wujud!" -AppCreateSuccessful: "Ciptaan berjaya!" -AppWriteErr: "Penulisan fail {{ .name }} gagal {{ .err }}" -SudoHelper: "Sila gunakan {{ .cmd }} atau tukar ke pengguna root" -ListenIPCommands: "Tukar IP mendengar" -ListenIPv4: "Mendengar pada IPv4" -ListenIPv6: "Mendengar pada IPv6" -ListenChangeSuccessful: "Tukar berjaya! Kini mendengar pada {{ .value }}" -ResetCommands: "Tetapkan semula maklumat sistem" -ResetMFA: "Batal pengesahan dua faktor 1Panel" -ResetHttps: "Batal log masuk HTTPS 1Panel" -ResetEntrance: "Batal pintu masuk keselamatan 1Panel" -ResetIPs: "Batal sekatan IP yang dibenarkan 1Panel" -ResetDomain: "Batal pengikatan domain 1Panel" -RestoreCommands: "Pulihkan perkhidmatan dan data 1Panel" -RestoreNoSuchFile: "Tiada fail tersedia untuk pemulihan" -RestoreStep1: "(1/5) Memulakan pemulihan perkhidmatan dan data 1Panel daripada direktori {{ .name }}..." -RestoreStep2: "(2/5) Pemulihan binari 1Panel berjaya" -RestoreStep3: "(3/5) Pemulihan skrip 1Panel berjaya" -RestoreStep4: "(4/5) Pemulihan perkhidmatan 1Panel berjaya" -RestoreStep5: "(5/5) Pemulihan data 1Panel berjaya" -RestoreSuccessful: "Pemulihan berjaya! Memulakan semula perkhidmatan, sila tunggu..." -UpdateCommands: "Kemas kini maklumat panel" -UpdateUser: "Kemas kini pengguna panel" -UpdatePassword: "Kemas kini kata laluan panel" -UpdatePort: "Kemas kini port panel" -UpdateUserNull: "Ralat: Pengguna panel kosong!" -UpdateUserBlank: "Ralat: Pengguna panel mengandungi ruang kosong!" -UpdateUserFormat: "Ralat: Format pengguna panel tidak sah! Hanya menyokong huruf Inggeris, Cina, nombor, dan , dengan panjang 3-30 aksara" -UpdateUserErr: "Ralat: Gagal mengemas kini pengguna panel, {{ .err }}" -UpdateSuccessful: "Kemas kini berjaya!" -UpdateUserResult: "Pengguna panel: {{ .name }}" -UpdatePasswordRead: "Ralat: Gagal membaca maklumat kata laluan panel, {{ .err }}" -UpdatePasswordNull: "Ralat: Kata laluan panel kosong!" -UpdateUPasswordBlank: "Ralat: Kata laluan panel mengandungi ruang kosong!" -UpdatePasswordFormat: "Ralat: Kata laluan panel hanya menyokong huruf, nombor, dan aksara khas !@#$%*,.?, dengan panjang 8-30 aksara!" -UpdatePasswordLen: "Ralat: Sila masukkan kata laluan lebih panjang daripada 6 aksara!" -UpdatePasswordRe: "Sahkan kata laluan:" -UpdatePasswordErr: "Ralat: Gagal mengemas kini kata laluan panel, {{ .err }}" -UpdatePasswordSame: "Ralat: Kedua-dua kata laluan tidak sepadan, sila semak dan cuba lagi!" -UpdatePasswordResult: "Kata laluan panel: {{ .name }}" -UpdatePortFormat: "Ralat: Nombor port yang dimasukkan mesti antara 1 hingga 65535!" -UpdatePortUsed: "Ralat: Nombor port sudah digunakan, sila semak dan cuba lagi!" -UpdatePortErr: "Ralat: Gagal mengemas kini port panel, {{ .err }}" -UpdatePortResult: "Port Panel: {{ .name }}" -UpdatePortFirewallAdd: "Gagal menambah peraturan port firewall, {{ .err }}, sila tambah port {{ .name }} secara manual ke dalam peraturan firewall." -UpdatePortFirewallDel: "Ralat: Gagal memadam port firewall, {{ .err }}" -UpdatePortFirewallReload: "Gagal memuat semula firewall, {{ .err }}, sila muat semula firewall secara manual." -UserInfo: "Dapatkan maklumat panel" -UserInfoAddr: "Alamat panel: " -UserInfoPassHelp: "Petua: Untuk menukar kata laluan, anda boleh menjalankan arahan: " -DBConnErr: "Ralat: Gagal memulakan sambungan pangkalan data, {{ .err }}" -SystemVersion: "Versi: " -SystemMode: "Mod: " diff --git a/agent/i18n/lang/pt-BR.yaml b/agent/i18n/lang/pt-BR.yaml index 6e6c80acd..9a7c521ab 100644 --- a/agent/i18n/lang/pt-BR.yaml +++ b/agent/i18n/lang/pt-BR.yaml @@ -1,326 +1,422 @@ -ErrInvalidParams: "Erro nos parâmetros da solicitação: {{ .detail }}" -ErrTokenParse: "Erro na geração do token: {{ .detail }}" -ErrInitialPassword: "Erro na senha inicial" -ErrInternalServer: "Erro interno do serviço: {{ .detail }}" -ErrRecordExist: "Registro já existente" -ErrRecordNotFound: "Registros não encontrados" -ErrStructTransform: "Falha na conversão de tipo: {{ .detail }}" -ErrNotLogin: "Usuário não está logado: {{ .detail }}" -ErrPasswordExpired: "A senha atual expirou: {{ .detail }}" -ErrNotSupportType: "O sistema não suporta o tipo atual: {{ .detail }}" -ErrApiConfigStatusInvalid: "Acesso à interface da API proibido: {{ .detail }}" -ErrApiConfigKeyInvalid: "Erro na chave da interface da API: {{ .detail }}" -ErrApiConfigIPInvalid: "O IP da interface da API não está na lista de permissões: {{ .detail }}" -ErrApiConfigDisable: "Esta interface proíbe o uso de chamadas de API: {{ .detail }}" +ErrInvalidParams: 'Erro de parâmetro de solicitação: {{ .detail }}' +ErrTokenParse: 'Erro de geração de token: {{ .detail }}' +ErrInitialPassword: 'A senha original está incorreta' +ErrInternalServer: 'Erro interno do servidor: {{ .detail }}' +ErrRecordExist: 'O registro já existe' +ErrRecordNotFound: 'Registro não encontrado' +ErrStructTransform: 'Falha na conversão de tipo: {{ .err }}' +ErrNotLogin: 'Usuário não logado: {{ .detail }}' +ErrPasswordExpired: 'A senha atual expirou: {{ .detail }}' +ErrNotSupportType: 'O sistema não suporta o tipo atual: {{ .name }}' +ErrProxy: 'Erro de solicitação, verifique o status do nó: {{ .detail }}' +ErrApiConfigStatusInvalid: 'O acesso à interface da API é proibido: {{ .detail }}' +ErrApiConfigKeyInvalid: 'Erro de chave da interface da API: {{ .detail }}' +ErrApiConfigIPInvalid: 'O IP usado para chamar a interface da API não está na lista de permissões: {{ .detail }}' +ErrApiConfigDisable: 'Esta interface proíbe o uso de chamadas de interface de API: {{ .detail }}' +ErrApiConfigKeyTimeInvalid: 'Erro de registro de data e hora da interface da API: {{ .detail }}' -#common -ErrUsernameIsExist: "Nome de usuário já existe" -ErrNameIsExist: "O nome já existe" -ErrDemoEnvironment: "Servidor de demonstração, operação proibida!" -ErrCmdTimeout: "Tempo limite de execução do comando excedido!" -ErrCmdIllegal: "O comando contém caracteres ilegais. Por favor, modifique e tente novamente!" +#comum +ErrUsernameIsExist: 'Nome de usuário já existe' +ErrNameIsExist: 'Nome já existe' +ErrDemoEnvironment: 'Servidor de demonstração, esta operação é proibida!' +ErrCmdTimeout: 'Tempo limite de execução do comando expirou!' +ErrCmdIllegal: 'Há caracteres ilegais no comando de execução, modifique-o e tente novamente!' ErrPortExist: 'A porta {{ .port }} já está ocupada por {{ .type }} [{{ .name }}]' -TYPE_APP: "Aplicação" -TYPE_RUNTIME: "Ambiente de execução" -TYPE_DOMAIN: "Nome de domínio" -ErrTypePort: 'Erro no formato da porta {{ .name }}' -ErrTypePortRange: 'O intervalo da porta deve estar entre 1-65535' -Success: "Sucesso" -Failed: "Falhou" -SystemRestart: "A reinicialização do sistema causa interrupção da tarefa" -ErrGroupIsDefault: "Grupo padrão, não pode ser excluído" -ErrGroupIsInWebsiteUse: "O grupo está sendo usado por outros sites, não pode ser excluído" +TYPE_APP: 'Aplicativo' +TYPE_RUNTIME: 'Ambiente de tempo de execução' +TYPE_DOMAIN: 'Nome de domínio' +ErrTypePort: 'O formato da porta {{ .name }} está incorreto' +ErrTypePortRange: 'O intervalo de portas precisa estar entre 1-65535' +Success: 'Sucesso' +Failed: 'Falhou' +SystemRestart: 'Tarefa interrompida devido à reinicialização do sistema' +ErrGroupIsDefault: 'Grupo padrão, não pode ser excluído' +ErrGroupIsInWebsiteUse: 'O grupo está sendo usado por outro site e não pode ser excluído.' -#app -ErrPortInUsed: "A porta {{ .detail }} já está em uso" -ErrAppLimit: "O limite de instalação de aplicativos foi excedido" -ErrAppRequired: "O aplicativo {{ .detail }} é necessário" -ErrNotInstall: "Aplicativo não instalado" -ErrPortInOtherApp: "A porta {{ .port }} já está em uso pelo aplicativo {{ .apps }}" -ErrDbUserNotValid: "Banco de dados padrão, nome de usuário e senha não correspondem!" -ErrDockerComposeNotValid: "Erro no formato do arquivo docker-compose!" -ErrUpdateBuWebsite: "O aplicativo foi atualizado com sucesso, mas a modificação do arquivo de configuração do site falhou. Verifique a configuração!" -Err1PanelNetworkFailed: "Falha ao criar a rede padrão do container! {{ .detail }}" -ErrFileParse: "Falha ao analisar o arquivo docker-compose do aplicativo!" -ErrInstallDirNotFound: "O diretório de instalação não existe" -AppStoreIsUpToDate: "Atualizado" -LocalAppVersionNull: "O aplicativo {{.name}} não está sincronizado com a versão! Não foi possível adicionar à lista de aplicativos" -LocalAppVersionErr: "Falha ao sincronizar a versão {{.version}} do {{.name}}! {{.err}}" -ErrFileNotFound: "O arquivo {{.name}} não existe" -ErrFileParseApp: "Falha ao analisar o arquivo {{.name}} {{.err}}" -ErrAppDirNull: "O diretório da versão não existe" -LocalAppErr: "Falha ao sincronizar o aplicativo {{.name}}! {{.err}}" -ErrContainerName: "O nome do container já existe" -ErrAppSystemRestart: "A reinicialização do 1Panel causa a interrupção da tarefa" -ErrCreateHttpClient: "Falha ao criar a solicitação HTTP {{.err}}" -ErrHttpReqTimeOut: "Tempo limite da solicitação excedido {{.err}}" -ErrHttpReqFailed: "Falha na solicitação {{.err}}" -ErrHttpReqNotFound: "O arquivo não existe" -ErrNoSuchHost: "Falha na conexão de rede" -ErrImagePullTimeOut: "Tempo limite ao puxar a imagem" -ErrContainerNotFound: "O container {{ .name }} não existe" -ErrContainerMsg: "O container {{ .name }} está anormal, verifique o log na página do container para mais detalhes" -ErrAppBackup: "Falha no backup do aplicativo {{ .name }} erro {{.err}}" -ErrImagePull: "Falha ao puxar a imagem {{ .name }} erro {{.err}}" -ErrVersionTooLow: "A versão atual do 1Panel é muito baixa para atualizar a loja de aplicativos, por favor atualize a versão" -ErrAppNameExist: "O nome do aplicativo já existe" -AppStoreIsSyncing: "A loja de aplicativos está sincronizando, tente novamente mais tarde" -ErrGetCompose: "Falha ao obter o arquivo docker-compose.yml! {{ .detail }}" -ErrAppWarn: "Status anormal, verifique o log" -ErrAppParamKey: "Exceção no campo do parâmetro {{ .name }}" -ErrAppUpgrade: "Falha ao atualizar o aplicativo {{ .name }} {{ .err }}" -AppRecover: "Aplicativo {{ .name }} revertido" -PullImageStart: "Iniciando o download da imagem {{ .name }}" -PullImageSuccess: "Imagem baixada com sucesso" -UpgradeAppStart: "Iniciando a atualização do aplicativo {{ .name }}" -UpgradeAppSuccess: "Aplicativo {{ .name }} atualizado com sucesso" -ErrAppIsDown: "{{ .name }} status do aplicativo é anormal, por favor, verifique" +#backup +ErrBackupInUsed: 'A conta de backup foi usada na tarefa agendada e não pode ser excluída.' +ErrBackupCheck: 'Falha na conexão de teste da conta de backup {{ .err }}' +ErrBackupLocalDelete: 'A exclusão da conta de backup do servidor local ainda não é suportada' +ErrBackupLocalCreate: 'A criação de contas de backup do servidor local ainda não é suportada' -#file -ErrFileCanNotRead: "Não foi possível ler o arquivo" -ErrFileToLarge: "O arquivo é muito grande" -ErrPathNotFound: "Caminho não encontrado" -ErrMovePathFailed: "O caminho de destino não pode conter o caminho original!" -ErrLinkPathNotFound: "O caminho de destino não existe!" -ErrFileIsExist: "O arquivo ou diretório já existe!" -ErrFileUpload: "Falha ao fazer upload do arquivo {{.name}} {{.detail}}" -ErrFileDownloadDir: "Pasta de download não é suportada" -ErrCmdNotFound: "O comando {{ .name }} não existe, por favor, instale este comando no host primeiro" -ErrSourcePathNotFound: "O diretório de origem não existe" -ErrFavoriteExist: "Este caminho já foi adicionado aos favoritos" -ErrInvalidChar: "Caracteres ilegais são proibidos" -ErrPathNotDelete: "O diretório selecionado não pode ser excluído" +#aplicativo +ErrPortInUsed: 'A porta {{ .detail }} já está ocupada!' +ErrAppLimit: 'O número de aplicativos instalados excedeu o limite' +ErrAppRequired: 'Instale primeiro o aplicativo {{ .detail }}' +ErrNotInstall: 'Aplicativo não instalado' +ErrPortInOtherApp: 'A porta {{ .port }} já está ocupada pelo aplicativo {{ .apps }}!' +ErrDbUserNotValid: 'Banco de dados existente, nome de usuário e senha não correspondem!' +ErrDockerComposeNotValid: 'O formato do arquivo docker-compose está incorreto' +ErrUpdateBuWebsite: 'O aplicativo foi atualizado com sucesso, mas a modificação do arquivo de configuração do site falhou. Por favor, verifique a configuração! ' +Err1PanelNetworkFailed: 'Falha na criação da rede de contêiner padrão! {{ .detalhe }}' +ErrFileParse: 'Falha na análise do arquivo docker-compose do aplicativo!' +ErrInstallDirNotFound: 'O diretório de instalação não existe. Se precisar desinstalar, selecione Forçar desinstalação' +AppStoreIsUpToDate: 'A loja de aplicativos já é a versão mais recente' +LocalAppVersionNull: 'O aplicativo {{ .name }} não está sincronizado com a versão! Não é possível adicionar à lista de aplicativos' +LocalAppVersionErr: '{{ .name }} sincronização da versão {{ .version }} falhou! {{ .err }}' +ErrFileNotFound: 'arquivo {{ .name }} não existe' +ErrFileParseApp: 'Falha na análise do arquivo {{ .name }} {{ .err }}' +ErrAppDirNull: 'A pasta da versão não existe' +LocalAppErr: 'Falha na sincronização do aplicativo {{ .name }}! {{ .err }}' +ErrContainerName: 'O nome do contêiner já existe' +ErrAppSystemRestart: '1A reinicialização do painel causou o encerramento da tarefa' +ErrCreateHttpClient: 'Falha ao criar solicitação {{ .err }}' +ErrHttpReqTimeOut: 'Tempo limite da solicitação esgotado {{ .err }}' +ErrHttpReqFailed: 'Falha na solicitação {{ .err }}' +ErrNoSuchHost: 'Não foi possível encontrar o servidor solicitado {{ .err }}' +ErrHttpReqNotFound: 'O recurso solicitado {{ .err }} não pôde ser encontrado' +ErrImagePullTimeOut: 'Tempo limite de extração de imagem' +ErrContainerNotFound: '{{ .name }} container não existe' +ErrContainerMsg: 'O contêiner {{ .name }} está anormal. Por favor, verifique o log na página do contêiner para obter detalhes.' +ErrAppBackup: '{{ .name }} falha no backup do aplicativo {{ .err }}' +ErrImagePull: 'Falha na extração de imagem {{ .err }}' +ErrVersionTooLow: 'A versão atual do 1Panel é muito antiga para atualizar a App Store. Por favor, atualize a versão antes de operar.' +ErrAppNameExist: 'O nome do aplicativo já existe' +AppStoreIsSyncing: 'A App Store está sincronizando, tente novamente mais tarde' +ErrGetCompose: 'Falha ao obter o arquivo docker-compose.yml! {{ .detail }}' +ErrAppWarn: 'Status anormal, verifique o log' +ErrAppParamKey: 'O campo de parâmetro {{ .name }} está anormal' +ErrAppUpgrade: 'Falha na atualização do aplicativo {{ .name }} {{ .err }}' +AppRecover: 'Reverter aplicativo {{ .name }}' +PullImageStart: 'Comece a extrair a imagem {{ .name }}' +PullImageSuccess: 'Imagem retirada com sucesso' +UpgradeAppStart: 'Iniciar atualização do aplicativo {{ .name }}' +UpgradeAppSuccess: 'Aplicativo {{ .name }} atualizado com sucesso' +AppStoreIsLastVersion: 'A App Store já é a versão mais recente' +AppStoreSyncSuccess: 'Sincronização da App Store bem-sucedida' +SyncAppDetail: 'Sincronizar configuração do aplicativo' +AppVersionNotMatch: 'o aplicativo {{ .name }} requer uma versão superior do 1Panel, ignorando a sincronização' +MoveSiteDir: 'A atualização atual requer a migração do diretório do site OpenResty' +MoveSiteToDir: 'Migrar diretório do site para {{ .name }}' +ErrMoveSiteDir: 'Falha ao migrar o diretório do site' +MoveSiteDirSuccess: 'Migração bem-sucedida do diretório do site' +DeleteRuntimePHP: 'Excluir tempo de execução do PHP' +CustomAppStoreNotConfig: 'Defina o endereço do pacote offline na app store' +CustomAppStoreNotFound: 'Falha ao obter o pacote da app store, verifique se ele existe' +CustomAppStoreFileValid: 'Os pacotes da App Store precisam estar no formato .tar.gz' +PullImageTimeout: 'Tempo limite para puxar imagem, tente aumentar a aceleração da imagem ou altere para outra aceleração de imagem' +ErrAppIsDown: 'O status do aplicativo {{ .name }} é anormal, verifique' +ErrCustomApps: 'Há um aplicativo instalado, desinstale-o primeiro' +ErrCustomRuntimes: 'Há um ambiente de execução instalado, exclua-o primeiro' -#website -ErrDomainIsExist: "O domínio já existe" -ErrAliasIsExist: "O alias já existe" -ErrAppDelete: "Outro site usa este aplicativo" -ErrGroupIsUsed: "O grupo está em uso e não pode ser excluído" -ErrBackupMatch: "O arquivo de backup não corresponde aos dados parciais atuais do site: {{ .detail }}" -ErrBackupExist: "O arquivo de backup corresponde a uma parte dos dados originais que não existe: {{ .detail }}" -ErrPHPResource: "O ambiente local não suporta a troca!" -ErrPathPermission: "Foi detectada uma pasta com permissões diferentes de 1000:1000 no diretório de índice, o que pode causar um erro de acesso negado ao acessar o site. Clique no botão salvar acima" -ErrDomainIsUsed: "O domínio já está sendo usado pelo site {{ .name }}" -ErrDomainFormat: "O formato do domínio {{ .name }} está incorreto" -ErrDefaultAlias: "default é um nome reservado, por favor, use outro nome" -ErrImageNotExist: "A imagem do ambiente de execução {{.name}} não existe, por favor, reconfigure o ambiente" +#arquivo +ErrFileCanNotRead: 'Este arquivo não suporta visualização' +ErrFileToLarge: 'O arquivo é maior que 10M e não pode ser aberto' +ErrPathNotFound: 'O diretório não existe' +ErrMovePathFailed: 'O caminho de destino não pode conter o caminho original!' +ErrLinkPathNotFound: 'O caminho de destino não existe!' +ErrFileIsExist: 'O arquivo ou pasta já existe!' +ErrFileUpload: '{{ .name }} falhou ao carregar o arquivo {{ .detail }}' +ErrFileDownloadDir: 'A pasta de download não é suportada' +ErrCmdNotFound: 'O comando {{ .name}} não existe, instale este comando no host primeiro' +ErrSourcePathNotFound: 'O diretório de origem não existe' +ErrFavoriteExist: 'Este caminho já foi favorito' +ErrInvalidChar: 'Caracteres ilegais não são permitidos' +ErrPathNotDelete: 'O diretório selecionado não pode ser excluído' + +#site +ErrDomainIsExist: 'Nome de domínio já existe' +ErrAliasIsExist: 'Alias já existe' +ErrAppDelete: 'Outros sites usam este aplicativo e não podem excluí-lo' +ErrBackupMatch: 'O arquivo de backup não corresponde a alguns dados atuais do site {{ .detail }}' +ErrBackupExist: 'A parte correspondente dos dados de origem no arquivo de backup não existe {{ .detail }}' +ErrPHPResource: 'O ambiente operacional local não suporta comutação! ' +ErrPathPermission: 'Uma pasta com permissões diferentes de 1000:1000 foi detectada no diretório de índice, o que pode causar um erro de acesso negado no site. Clique no botão Salvar acima' +ErrDomainIsUsed: 'O nome de domínio já está sendo usado pelo site [{{ .name }}]' +ErrDomainFormat: 'o formato do nome de domínio {{ .name }} está incorreto' +ErrDefaultAlias: 'padrão é um código reservado, use outro código' +ErrParentWebsite: 'Você precisa excluir o subsite {{ .name }} primeiro' +ErrBuildDirNotFound: 'O diretório de compilação não existe' +ErrImageNotExist: 'A imagem do ambiente operacional {{ .name }} não existe, edite novamente o ambiente operacional' #ssl -ErrSSLCannotDelete: "O certificado {{ .name }} está sendo usado pelo site e não pode ser removido" -ErrAccountCannotDelete: "O certificado associado à conta não pode ser excluído" -ErrSSLApply: "O certificado foi assinado com sucesso, mas o recarregamento do OpenResty falhou, por favor, verifique a configuração!" -ErrEmailIsExist: "O email já existe" -ErrSSLKeyNotFound: "O arquivo da chave privada não existe" -ErrSSLCertificateNotFound: "O arquivo do certificado não existe" -ErrSSLKeyFormat: "Erro na verificação do arquivo da chave privada" -ErrSSLCertificateFormat: "Erro no formato do arquivo do certificado, por favor, use o formato PEM" -ErrEabKidOrEabHmacKeyCannotBlank: "EabKid ou EabHmacKey não podem estar vazios" -ErrOpenrestyNotFound: "O modo HTTP requer a instalação prévia do OpenResty" -ApplySSLStart: "Iniciando aplicação do certificado, domínio [{{ .domain }}], método de aplicação [{{ .type }}]" -dnsAccount: "DNS Automático" -dnsManual: "DNS Manual" -http: "HTTP" -ApplySSLFailed: "A aplicação do certificado para [{{ .domain }}] falhou, {{.detail}}" -ApplySSLSuccess: "Certificado para [{{ .domain }}] aplicado com sucesso!" -DNSAccountName: "Conta DNS [{{ .name }}], provedor [{{.type}}]" -PushDirLog: "Certificado enviado para o diretório [{{ .path }}] {{ .status }}" -ErrDeleteCAWithSSL: "Há um certificado emitido sob a organização atual, não pode ser excluído" -ErrDeleteWithPanelSSL: "A configuração SSL do painel usa este certificado, não pode ser excluído" -ErrDefaultCA: "A autoridade certificadora padrão não pode ser excluída" -ApplyWebSiteSSLLog: "Iniciando atualização do certificado do site {{ .name }}" -ErrUpdateWebsiteSSL: "Falha ao atualizar o certificado do site {{ .name }}: {{ .err }}" -ApplyWebSiteSSLSuccess: "Certificado do site atualizado com sucesso" -ErrExecShell: "Falha na execução do script {{ .err }}" -ExecShellStart: "Iniciando execução do script" -ExecShellSuccess: "Script executado com sucesso" -StartUpdateSystemSSL: "Iniciando atualização do certificado do sistema" -UpdateSystemSSLSuccess: "Certificado do sistema atualizado com sucesso" +ErrSSLCannotDelete: 'O certificado {{ .name }} está sendo usado por um site e não pode ser excluído' +ErrAccountCannotDelete: 'A conta está associada a um certificado e não pode ser excluída' +ErrSSLApply: 'Renovação do certificado bem-sucedida, falha na recarga do Openresty, verifique a configuração!' +ErrEmailIsExist: 'A caixa de correio já existe' +ErrSSLKeyNotFound: 'O arquivo de chave privada não existe' +ErrSSLCertificateNotFound: 'O arquivo de certificado não existe' +ErrSSLKeyFormat: 'Falha na verificação do arquivo de chave privada' +ErrSSLCertificateFormat: 'O formato do arquivo de certificado está incorreto, use o formato pem' +ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid ou EabHmacKey não podem estar em branco' +ErrOpenrestyNotFound: 'O modo HTTP requer que o Openresty seja instalado primeiro' +ApplySSLStart: 'Comece a solicitar um certificado, nome de domínio [{{ .domain }}] método de solicitação [{{ .type }}]' +dnsAccount: 'DNS Automático' +dnsManual: 'Manual DNS' +http: 'HTTP' +ApplySSLFailed: 'Falha na solicitação de certificado [{{ .domain }}], {{ .detail }} ' +ApplySSLSuccess: 'Solicitação de certificado [{{ .domain }}] realizada com sucesso! ! ' +DNSAccountName: 'Conta DNS [{{ .name }}] fornecedor [{{ .type }}]' +PushDirLog: 'Certificado enviado para o diretório [{{ .path }}] {{ .status }}' +ErrDeleteCAWithSSL: 'A organização atual tem um certificado que foi emitido e não pode ser excluído.' +ErrDeleteWithPanelSSL: 'A configuração SSL do painel usa este certificado e não pode ser excluída' +ErrDefaultCA: 'A autoridade padrão não pode ser excluída' +ApplyWebSiteSSLLog: 'Iniciando a renovação do certificado do site {{ .name }}' +ErrUpdateWebsiteSSL: 'Falha na atualização do certificado do site {{ .name }}: {{ .err }}' +ApplyWebSiteSSLSuccess: 'Atualizar certificado do site com sucesso' +ErrExecShell: 'Falha ao executar o script {{ .err }}' +ExecShellStart: 'Iniciar execução do script' +ExecShellSuccess: 'Execução do script bem-sucedida' +StartUpdateSystemSSL: 'Iniciar atualização do certificado do sistema' +UpdateSystemSSLSuccess: 'Atualizar certificado do sistema com sucesso' +ErrWildcardDomain: 'Não é possível solicitar certificado de nome de domínio curinga no modo HTTP' #mysql -ErrUserIsExist: "O usuário atual já existe. Por favor, insira um novo usuário" -ErrDatabaseIsExist: "O banco de dados atual já existe. Por favor, insira um novo banco de dados" -ErrExecTimeOut: "Tempo de execução SQL expirado, por favor, verifique o banco de dados" -ErrRemoteExist: "O banco de dados remoto já existe com este nome, por favor, modifique e tente novamente" -ErrLocalExist: "O banco de dados local já existe com este nome, por favor, modifique e tente novamente" +ErrUserIsExist: 'O usuário atual já existe, digite novamente' +ErrDatabaseIsExist: 'O banco de dados atual já existe, digite novamente' +ErrExecTimeOut: 'Tempo limite de execução do SQL expirou, verifique o banco de dados' +ErrRemoteExist: 'O banco de dados remoto já existe com este nome, modifique-o e tente novamente' +ErrLocalExist: 'O nome já existe no banco de dados local, modifique-o e tente novamente' #redis -ErrTypeOfRedis: "O tipo do arquivo de recuperação não corresponde ao modo de persistência atual. Modifique o tipo do arquivo e tente novamente" +ErrTypeOfRedis: 'O tipo de arquivo de recuperação não corresponde ao método de persistência atual, modifique-o e tente novamente' -#container -ErrInUsed: "{{ .detail }} está em uso e não pode ser excluído" -ErrObjectInUsed: "Este objeto está em uso e não pode ser excluído" -ErrPortRules: "O número de portas não corresponde. Por favor, insira novamente!" -ErrPgImagePull: "Tempo limite ao tentar puxar a imagem. Configure a aceleração de imagem ou puxe manualmente a imagem postgres:16.0-alpine e tente novamente" +#recipiente +ErrInUsed: '{{ .detail }} está em uso e não pode ser excluído' +ErrObjectInUsed: 'O objeto está em uso e não pode ser excluído' +ErrObjectBeDependent: 'Esta imagem depende de outras imagens e não pode ser excluída' +ErrPortRules: 'O número da porta não corresponde, digite novamente!' +ErrPgImagePull: 'Tempo limite para extração de imagem. Configure a aceleração de imagem ou extraia manualmente a imagem {{ .name }} e tente novamente' -#runtime -ErrDirNotFound: "A pasta de build não existe! Por favor, verifique a integridade dos arquivos!" -ErrFileNotExist: "O arquivo {{ .detail }} não existe! Por favor, verifique a integridade do arquivo de origem!" -ErrImageBuildErr: "Falha ao construir a imagem" -ErrImageExist: "A imagem já existe!" -ErrDelWithWebsite: "O ambiente operacional está associado a um site e não pode ser excluído" -ErrRuntimeStart: "Falha ao iniciar" -ErrPackageJsonNotFound: "O arquivo package.json não existe" -ErrScriptsNotFound: "Nenhum item de configuração de scripts foi encontrado no package.json" -ErrContainerNameNotFound: "Não foi possível obter o nome do contêiner. Por favor, verifique o arquivo .env" -ErrNodeModulesNotFound: "A pasta node_modules não existe! Edite o ambiente de execução ou aguarde até que o ambiente seja iniciado com sucesso" +#tempo de execução +ErrDirNotFound: 'A pasta de compilação não existe! Verifique a integridade do arquivo!' +ErrFileNotExist: 'O arquivo {{ .detail }} não existe! Verifique a integridade do arquivo de origem!' +ErrImageBuildErr: 'Falha na criação da imagem' +ErrImageExist: 'A imagem já existe!' +ErrDelWithWebsite: 'O ambiente operacional já está associado a um site e não pode ser excluído' +ErrRuntimeStart: 'Falha na inicialização' +ErrPackageJsonNotFound: 'o arquivo package.json não existe' +ErrScriptsNotFound: 'O item de configuração de scripts não foi encontrado em package.json' +ErrContainerNameNotFound: 'Não foi possível obter o nome do contêiner, verifique o arquivo .env' +ErrNodeModulesNotFound: 'A pasta node_modules não existe! Edite o ambiente de execução ou aguarde até que o ambiente de execução inicie com sucesso' +ErrContainerNameIsNull: 'O nome do contêiner não existe' -#setting -ErrBackupInUsed: "A conta de backup já está sendo usada em um cronjob e não pode ser excluída" -ErrBackupCheck: "Falha ao testar a conexão com a conta de backup {{ .err }}" -ErrOSSConn: "Não foi possível recuperar a versão mais recente. Por favor, verifique se o servidor pode se conectar à rede externa." -ErrEntrance: "Erro nas informações da entrada de segurança. Por favor, verifique e tente novamente!" - -#tool -ErrConfigNotFound: "O arquivo de configuração não existe" -ErrConfigParse: "Erro no formato do arquivo de configuração" -ErrConfigIsNull: "O arquivo de configuração não pode estar vazio" -ErrConfigDirNotFound: "O diretório de execução não existe" -ErrConfigAlreadyExist: "Um arquivo de configuração com o mesmo nome já existe" -ErrUserFindErr: "Falha ao encontrar o usuário {{ .name }} {{ .err }}" +#ferramenta +ErrConfigNotFound: 'O arquivo de configuração não existe' +ErrConfigParse: 'O formato do arquivo de configuração está incorreto' +ErrConfigIsNull: 'O arquivo de configuração não pode estar vazio' +ErrConfigDirNotFound: 'O diretório de execução não existe' +ErrConfigAlreadyExist: 'Um arquivo de configuração com o mesmo nome já existe' +ErrUserFindErr: 'Falha na pesquisa do usuário {{ .name }} {{ .err }}' #ssh -ErrFirewallNone: "Nenhum serviço firewalld ou ufw foi detectado no sistema. Por favor, verifique e tente novamente!" -ErrFirewallBoth: "Os serviços firewalld e ufw foram detectados no sistema. Para evitar conflitos, desinstale um deles e tente novamente!" +ErrFirewallNone: 'Nenhum firewall de sistema ou serviço ufw detectado, verifique e tente novamente!' +ErrFirewallBoth: 'Foi detectado que o sistema possui serviços firewalld e ufw. Para evitar conflitos, desinstale e tente novamente!' #cronjob -ErrBashExecute: "Erro na execução do script. Por favor, verifique as informações específicas na área de saída da tarefa." -ErrCutWebsiteLog: "Falha ao cortar os logs do site {{ .name }}, erro {{ .err }}" -CutWebsiteLogSuccess: "Logs do site {{ .name }} cortados com sucesso, caminho do backup {{ .path }}" +ErrCutWebsiteLog: '{{ .name }} falha ao cortar o log do site, erro {{ .err }}' +CutWebsiteLogSuccess: '{{ .name }} registro do site cortado com sucesso, caminho de backup {{ .path }}' +HandleShell: 'Executar script {{ .name }}' +HandleNtpSync: 'Sincronização de hora do sistema' +HandleSystemClean: 'Limpeza de cache do sistema' -#toolbox -ErrNotExistUser: "O usuário atual não existe. Por favor, modifique e tente novamente!" -ErrBanAction: "Falha na configuração. O serviço {{ .name }} atual está indisponível, por favor, verifique e tente novamente!" -ErrClamdscanNotFound: "O comando clamdscan não foi detectado. Por favor, consulte a documentação para instalá-lo!" +#caixa de ferramentas +ErrNotExistUser: 'O usuário atual não existe, modifique e tente novamente!' +ErrBanAction: 'Falha na configuração. O serviço atual {{ .name }} não está disponível. Verifique e tente novamente!' +ErrClamdscanNotFound: 'O comando clamdscan não foi detectado, consulte a documentação para instalá-lo!' #waf -ErrScope: "Modificação desta configuração não é suportada" -ErrStateChange: "Falha ao alterar o status" -ErrRuleExist: "Regra já existe" -ErrRuleNotExist: "Regra não existe" -ErrParseIP: "Formato de IP incorreto" -ErrDefaultIP: "default é um nome reservado, por favor, use outro nome" -ErrGroupInUse: "Grupo de IP está em uso pela lista negra/branca, não pode ser excluído" -ErrGroupExist: "Nome do grupo de IP já existe" -ErrIPRange: "Intervalo de IP incorreto" -ErrIPExist: "IP já existe" -urlDefense: "Regras de URL" -urlHelper: "URLs Proibidas" -dirFilter: "Filtro de Diretório" -xss: "XSS" -phpExec: "Execução de Script PHP" -oneWordTrojan: "Trojan de Uma Palavra" -appFilter: "Filtro de Diretório Perigoso de Aplicação" -webshell: "Webshell" -args: "Regras de Parâmetro" -protocolFilter: "Filtro de Protocolo" -javaFileter: "Filtro de Arquivo Perigoso Java" -scannerFilter: "Filtro de Scanner" -escapeFilter: "Filtro de Escape" -customRule: "Regras Personalizadas" -httpMethod: "Filtro de Método HTTP" -fileExt: "Restrição de Upload de Arquivo" -defaultIpBlack: "Grupo de IP Malicioso" -cookie: "Regras de Cookie" -urlBlack: "Lista Negra de URL" -uaBlack: "Lista Negra de User-Agent" -attackCount: "Limite de Frequência de Ataque" -fileExtCheck: "Restrição de Upload de Arquivo" -geoRestrict: "Restrição de Acesso Regional" -unknownWebsite: "Acesso a Domínio Não Autorizado" -notFoundCount: "Limite de Frequência de 404" -headerDefense: "Regras de Cabeçalho" -defaultUaBlack: "Regras de User-Agent" -methodWhite: "Regras HTTP" -captcha: "Verificação Humano-Máquina" -fiveSeconds: "Verificação de 5 Segundos" -vulnCheck: "Regras Complementares" -acl: "Regras Personalizadas" -sql: "Injeção de SQL" -cc: "Limite de Frequência de Acesso" -defaultUrlBlack: "Regras de URL" -sqlInject: "Injeção de SQL" -ErrDBNotExist: "Banco de Dados Não Existe" -allow: "Permitir" -deny: "Negar" +ErrScope: 'A modificação desta configuração não é suportada' +ErrStateChange: 'Falha na alteração de estado' +ErrRuleExist: 'A regra já existe' +ErrRuleNotExist: 'A regra não existe' +ErrParseIP: 'Formato de IP errado' +ErrDefaultIP: 'padrão é um nome reservado, altere-o para outro nome' +ErrGroupInUse: 'O grupo de IP é usado pela lista negra/lista branca e não pode ser excluído' +ErrGroupExist: 'O nome do grupo IP já existe' +ErrIPRange: 'Intervalo de IP errado' +ErrIPExist: 'IP já existe' +urlDefense: 'regras de URL' +urlHelper: 'URL proibido' +dirFilter: 'Filtro de diretório' +xss: 'XSS' +phpExec: 'Execução de script PHP' +oneWordTrojan: 'Cavalo de Tróia de Uma Palavra' +appFilter: 'Aplicar filtragem de diretório perigosa' +webshell: 'Webshell' +args: 'Regras de parâmetros' +protocolFilter: 'Filtragem de protocolo' +javaFileter: 'Filtro de arquivo perigoso Java' +scannerFilter: 'Filtro do scanner' +escapeFilter: 'filtro de escape' +customRule: 'Regra personalizada' +httpMethod: 'Filtragem de método HTTP' +fileExt: 'Restrições de upload de arquivo' +defaultIpBlack: 'Grupo de IP malicioso' +cookie: 'Regras de cookies' +urlBlack: 'lista negra de URLs' +uaBlack: 'Lista negra de agentes do usuário' +attackCount: 'Limite de frequência de ataque' +fileExtCheck: 'Restrições de upload de arquivo' +geoRestrict: 'Restrições de acesso regionais' +unknownWebsite: 'Acesso não autorizado ao nome de domínio' +notFoundCount: 'Limite de taxa 404' +headerDefense: 'Regras de cabeçalho' +defaultUaBlack: 'Regras do agente do usuário' +methodWhite: 'regras HTTP' +captcha: 'verificação homem-máquina' +fiveSeconds: 'verificação de 5 segundos' +vulnCheck: 'Regras suplementares' +acl: 'Regras personalizadas' +sql: 'injeção de SQL' +cc: 'Limite de frequência de acesso' +defaultUrlBlack: 'regras de URL' +sqlInject: 'injeção de SQL' +ErrDBNotExist: 'O banco de dados não existe' +allow: 'permitir' +deny: 'negar' +OpenrestyNotFound: 'Openresty não está instalado' -#license -ErrLicense: "Erro no formato da licença, por favor, verifique e tente novamente!" -ErrLicenseCheck: "Falha na verificação da licença, por favor, verifique e tente novamente!" -ErrLicenseSave: "Falha ao salvar as informações da licença, erro {{ .err }}, por favor, tente novamente!" -ErrLicenseSync: "Falha ao sincronizar as informações da licença, nenhuma informação de licença detectada no banco de dados!" -ErrXpackNotFound: "Esta seção é um recurso da edição profissional. Por favor, importe a licença primeiro na interface Configurações do Painel - Licença." -ErrXpackNotActive: "Esta seção é um recurso da edição profissional. Por favor, sincronize o status da licença primeiro na interface Configurações do Painel - Licença." -ErrXpackOutOfDate: "A licença atual expirou, por favor, reimporte a licença na interface Configurações do Painel - Licença." -ErrXpackLost: "A licença atingiu o número máximo de tentativas de reexecução. Por favor, acesse as páginas [Configurações] [Licença] e clique manualmente no botão de sincronização para garantir que os recursos da versão profissional funcionem corretamente." -ErrXpackTimeout: "Tempo limite de solicitação, a conexão de rede pode estar instável, por favor, tente novamente mais tarde!" +#tarefa +TaskStart: '{{ .name }} A tarefa inicia [START]' +TaskEnd: '{{ .name }} Tarefa concluída [CONCLUÍDA]' +TaskFailed: '{{ .name }} tarefa falhou' +TaskTimeout: '{{ .name }} expirou' +TaskSuccess: '{{ .name }} Tarefa bem-sucedida' +TaskRetry: 'Iniciar {{ .name }}ª nova tentativa' +SubTaskSuccess: '{{ .name }} bem-sucedido' +SubTaskFailed: '{{ .name }} falhou: {{ .err }}' +TaskInstall: 'Instalar' +TaskUninstall: 'Desinstalar' +TaskCreate: 'Criar' +TaskDelete: 'Excluir' +TaskUpgrade: 'Atualizar' +TaskUpdate: 'Atualizar' +TaskRestart: 'Reiniciar' +Backup de Tarefa: 'Backup' +TaskRecover: 'Recuperar' +TaskRollback: 'Reverter' +TaskPull: 'Puxar' +TaskBuild: 'Construir' +TaskPush: 'Empurrar' +TaskHandle: 'Executar' +Website: 'Site' +App: 'Aplicativo' +Runtime: 'Ambiente de tempo de execução' +Database: 'Banco de dados' +ConfigFTP: 'Criar usuário FTP {{ .name }}' +ConfigOpenresty: 'Criar arquivo de configuração Openresty' +InstallAppSuccess: 'Aplicativo {{ .name }} instalado com sucesso' +ConfigRuntime: 'Configurar o ambiente de tempo de execução' +ConfigApp: 'Aplicativo de configuração' +SuccessStatus: '{{ .name }} bem-sucedido' +FailedStatus: '{{ .name }} falhou {{ .err }}' +HandleLink: 'Manipular associação de aplicativos' +HandleDatabaseApp: 'Manipulando parâmetros do aplicativo' +ExecShell: 'Executar script {{ .name }}' +PullImage: 'Puxar imagem' +Start: 'Iniciar' +Run: 'Iniciar' +Stop: 'Pare' +Image: 'Espelho' +Compose: 'Orquestração' +Container: 'Recipiente' +AppLink: 'Aplicativo vinculado' +EnableSSL: 'Habilitar HTTPS' +AppStore: 'Loja de aplicativos' +TaskSync: 'Sincronizar' +LocalApp: 'Aplicativo local' +SubTask: 'Subtarefa' +RuntimeExtension: 'Extensão do ambiente de tempo de execução' +TaskIsExecuting: 'A tarefa está em execução' +CustomAppstore: 'Armazém de aplicativos personalizados' -#license -ErrAlert: "Erro no formato das informações do alerta, por favor, verifique e tente novamente!" -ErrAlertPush: "Erro no envio do alerta, por favor, verifique e tente novamente!" -ErrAlertSave: "Erro ao salvar o alerta, por favor, verifique e tente novamente!" -ErrAlertSync: "Erro na sincronização do alerta, por favor, verifique e tente novamente!" -ErrAlertRemote: "Erro de alerta remoto, por favor, verifique e tente novamente!" +# tarefa - ai +OllamaModelPull: 'Puxar modelo Ollama {{ .name }}' +OllamaModelSize: 'Obtenha o tamanho do modelo Ollama {{ .name }}' -#cmd -AppVersion: "Versão do aplicativo" -AppCommands: "Comandos relacionados ao aplicativo" -AppInit: "Inicializar aplicativo" -AppKeyVal: "Chave do aplicativo (somente suporta inglês)" -AppCreateFileErr: "Falha ao criar o arquivo {{ .name }} {{ .err }}" -AppCreateDirErr: "Falha ao criar a pasta {{ .name }} {{ .err }}" -AppMissKey: "Chave do aplicativo ausente, use -k para especificar" -AppMissVersion: "Versão do aplicativo ausente, use -v para especificar" -AppVersionExist: "A versão já existe!" -AppCreateSuccessful: "Criação bem-sucedida!" -AppWriteErr: "Falha ao escrever no arquivo {{ .name }} {{ .err }}" -SudoHelper: "Por favor, use {{ .cmd }} ou altere para o usuário root" -ListenIPCommands: "Trocar IP de escuta" -ListenIPv4: "Escutando em IPv4" -ListenIPv6: "Escutando em IPv6" -ListenChangeSuccessful: "Troca bem-sucedida! Agora escutando em {{ .value }}" -ResetCommands: "Redefinir informações do sistema" -ResetMFA: "Cancelar autenticação de dois fatores do 1Panel" -ResetHttps: "Cancelar login https do 1Panel" -ResetEntrance: "Cancelar entrada segura do 1Panel" -ResetIPs: "Cancelar restrições de IP autorizado do 1Panel" -ResetDomain: "Cancelar vinculação de domínio do 1Panel" -RestoreCommands: "Restaurar serviço e dados do 1Panel" -RestoreNoSuchFile: "Nenhum arquivo disponível para restauração" -RestoreStep1: "(1/5) Iniciando a restauração do serviço e dados do 1Panel a partir do diretório {{ .name }}..." -RestoreStep2: "(2/5) Restauração do binário do 1Panel bem-sucedida" -RestoreStep3: "(3/5) Restauração dos scripts do 1Panel bem-sucedida" -RestoreStep4: "(4/5) Restauração do serviço do 1Panel bem-sucedida" -RestoreStep5: "(5/5) Restauração dos dados do 1Panel bem-sucedida" -RestoreSuccessful: "Restauração bem-sucedida! Reiniciando o serviço, por favor, aguarde..." -UpdateCommands: "Atualizar informações do painel" -UpdateUser: "Atualizar usuário do painel" -UpdatePassword: "Atualizar senha do painel" -UpdatePort: "Atualizar porta do painel" -UpdateUserNull: "Erro: usuário do painel está vazio!" -UpdateUserBlank: "Erro: o usuário do painel contém espaços!" -UpdateUserFormat: "Erro: Formato de usuário do painel inválido! Apenas suporta inglês, chinês, números e _, comprimento de 3-30." -UpdateUserErr: "Erro: Falha ao atualizar o usuário do painel, {{ .err }}" -UpdateSuccessful: "Atualização bem-sucedida!" -UpdateUserResult: "Usuário do painel: {{ .name }}" -UpdatePasswordRead: "Erro: Falha ao ler as informações da senha do painel, {{ .err }}" -UpdatePasswordNull: "Erro: A senha do painel está vazia!" -UpdateUPasswordBlank: "Erro: A senha do painel contém espaços!" -UpdatePasswordFormat: "Erro: A senha do painel suporta apenas letras, números, caracteres especiais !@#$%*_,.?, comprimento de 8-30!" -UpdatePasswordLen: "Erro: Por favor, insira uma senha com mais de 6 caracteres!" -UpdatePasswordRe: "Confirmar senha:" -UpdatePasswordErr: "Erro: Falha ao atualizar a senha do painel, {{ .err }}" -UpdatePasswordSame: "Erro: As duas senhas não correspondem, por favor, verifique e tente novamente!" -UpdatePasswordResult: "Senha do painel: {{ .name }}" -UpdatePortFormat: "Erro: O número da porta deve estar entre 1 e 65535!" -UpdatePortUsed: "Erro: O número da porta já está em uso, por favor, verifique e tente novamente!" -UpdatePortErr: "Erro: Falha ao atualizar a porta do painel, {{ .err }}" -UpdatePortResult: "Porta do painel: {{ .name }}" -UpdatePortFirewallAdd: "Falha ao adicionar regra de porta ao firewall, {{ .err }}, por favor, adicione manualmente a porta {{ .name }} às regras do firewall." -UpdatePortFirewallDel: "Erro: Falha ao excluir a porta do firewall, {{ .err }}" -UpdatePortFirewallReload: "Falha ao recarregar o firewall, {{ .err }}, por favor, recarregue o firewall manualmente." -UserInfo: "Obter informações do painel" -UserInfoAddr: "Endereço do painel: " -UserInfoPassHelp: "Dica: Para alterar a senha, você pode executar o comando: " -DBConnErr: "Erro: Falha ao inicializar a conexão com o banco de dados, {{ .err }}" -SystemVersion: "versão: " -SystemMode: "modo: " \ No newline at end of file +# tarefa-instantânea +Snapshot: 'Instantâneo' +SnapDBInfo: 'Escrever informações do banco de dados 1Panel' +SnapCopy: 'Copiar arquivos e diretórios {{ .name }}' +SnapNewDB: 'Inicializar conexão com o banco de dados {{ .name }}' +SnapDeleteOperationLog: 'Excluir log de operação' +SnapDeleteLoginLog: 'Excluir log de acesso' +SnapDeleteMonitor: 'Excluir dados de monitoramento' +SnapRemoveSystemIP: 'Remover IP do sistema' +SnapBaseInfo: 'Escreva informações básicas do 1Panel' +SnapInstallApp: 'Fazer backup dos aplicativos instalados do 1Panel' +SnapDockerSave: 'Compactar aplicativos instalados' +SnapLocalBackup: 'Backup do diretório de backup local do 1Panel' +SnapCompressBackup: 'Compactar diretório de backup local' +SnapPanelData: 'Backup do diretório de dados do 1Panel' +SnapCompressPanel: 'Diretório de dados compactados' +SnapWebsite: 'Backup do diretório do site 1Panel' +SnapCloseDBConn: 'Fechar a conexão com o banco de dados' +SnapCompress: 'Criar arquivos de instantâneos' +SnapCompressFile: 'Compactar arquivo de instantâneo' +SnapCheckCompress: 'Verificar arquivo de compactação de instantâneo' +SnapCompressSize: 'Tamanho do arquivo de instantâneo {{ .name }}' +SnapUpload: 'Carregar arquivo de instantâneo' +SnapLoadBackup: 'Obter informações da conta de backup' +SnapUploadTo: 'Carregar arquivo de instantâneo para {{ .name }}' +SnapUploadRes: 'Carregar arquivo de instantâneo para {{ .name }}' + +SnapshotRecover: 'Restauração de instantâneo' +RecoverDownload: 'Baixar arquivo de instantâneo' +Download: 'Baixar' +RecoverDownloadAccount: 'Obter conta de backup de download de instantâneo {{ .name }}' +RecoverDecompress: 'Descompacte arquivos compactados de instantâneos' +Decompress: 'Descompressão' +BackupBeforeRecover: 'Fazer backup de dados relacionados ao sistema antes do snapshot' +Readjson: 'Ler o arquivo Json no snapshot' +ReadjsonPath: 'Obtenha o caminho do arquivo Json no snapshot' +ReadjsonContent: 'Ler arquivo Json' +ReadjsonMarshal: 'Processamento de escape JSON' +RecoverApp: 'Restaurar aplicativos instalados' +RecoverWebsite: 'Recuperar diretório de sites' +RecoverAppImage: 'Restaurar backup de imagem instantânea' +RecoverCompose: 'Restaurar outro conteúdo do compositor' +RecoverComposeList: 'Obter todos os compositores para serem restaurados' +RecoverComposeItem: 'Recuperar composição {{ .name }}' +RecoverAppEmpty: 'Nenhum backup de imagem de aplicativo foi encontrado no arquivo de instantâneo' +RecoverBaseData: 'Recuperar dados e arquivos básicos' +RecoverDaemonJsonEmpty: 'O arquivo de instantâneo e a máquina atual não têm o arquivo daemon.json de configuração do contêiner' +RecoverDaemonJson: 'Restaurar arquivo daemon.json de configuração do contêiner' +RecoverDBData: 'Recuperar dados do banco de dados' +RecoverBackups: 'Restaurar diretório de backup local' +RecoverPanelData: 'Diretório de dados de recuperação' + +# tarefa - contêiner +ContainerNewCliet: 'Inicializar cliente Docker' +ContainerImagePull: 'Puxar imagem do contêiner {{ .name }}' +ContainerRemoveOld: 'Remover o contêiner original {{ .name }}' +ContainerImageCheck: 'Verifique se a imagem é extraída normalmente' +ContainerLoadInfo: 'Obter informações básicas do contêiner' +ContainerRecreate: 'A atualização do contêiner falhou, agora iniciando a restauração do contêiner original' +ContainerCreate: 'Criar um novo contêiner {{ .name }}' +ContainerCreateFailed: 'Falha na criação do contêiner, exclua o contêiner com falha' +ContainerStartCheck: 'Verifique se o contêiner foi iniciado' + +# tarefa - imagem +ImageBuild: 'Construção de imagem' +ImageBuildStdoutCheck: 'Analisar conteúdo de saída da imagem' +ImaegBuildRes: 'Saída da criação da imagem: {{ .name }}' +ImagePull: 'Puxar imagem' +ImageRepoAuthFromDB: 'Obter informações de autenticação do repositório do banco de dados' +ImaegPullRes: 'Saída de extração de imagem: {{ .name }}' +ImagePush: 'Enviar imagem' +ImageRenameTag: 'Modificar tag de imagem' +ImageNewTag: 'Nova tag de imagem {{ .name }}' +ImaegPushRes: 'Saída de envio de imagem: {{ .name }}' +ComposeCreate: 'Criar uma composição' +ComposeCreateRes: 'Compose cria saída: {{ .name }}' + +# tarefa - site +BackupNginxConfig: 'Fazer backup do arquivo de configuração do OpenResty do site' +CompressFileSuccess: 'Diretório compactado com sucesso, compactado para {{ .name }}' +CompressDir: 'Diretório de compressão' +DeCompressFile: 'Descompacte o arquivo {{ .name }}' +ErrCheckValid: 'Falha na verificação do arquivo de backup, {{ .name }}' +Rollback: 'Reversão' +websiteDir: 'Diretório de sites' +RecoverFailedStartRollBack: 'Falha na recuperação, iniciar reversão' +AppBackupFileIncomplete: 'O arquivo de backup está incompleto e não contém os arquivos app.json ou app.tar.gz' +AppAttributesNotMatch: 'O tipo ou nome do aplicativo não corresponde' + +#alerta +ErrAlert: 'O formato da mensagem de aviso está incorreto, verifique e tente novamente!' +ErrAlertPush: 'Erro ao enviar informações de alerta, verifique e tente novamente!' +ErrAlertSave: 'Erro ao salvar as informações do alarme. Verifique e tente novamente!' +ErrAlertSync: 'Erro de sincronização de informações de alarme, verifique e tente novamente!' +ErrAlertRemote: 'Erro remoto na mensagem de alarme, verifique e tente novamente!' \ No newline at end of file diff --git a/agent/i18n/lang/ru.yaml b/agent/i18n/lang/ru.yaml index 089b8ac8c..a17b61bb4 100644 --- a/agent/i18n/lang/ru.yaml +++ b/agent/i18n/lang/ru.yaml @@ -1,329 +1,422 @@ -ErrInvalidParams: "Ошибка параметра запроса: {{ .detail }}" -ErrTokenParse: "Ошибка генерации токена: {{ .detail }}" -ErrInitialPassword: "Ошибка исходного пароля" -ErrInternalServer: "Внутренняя ошибка сервиса: {{ .detail }}" -ErrRecordExist: "Запись уже существует" -ErrRecordNotFound: "Записи не найдены" -ErrStructTransform: "Ошибка преобразования типа: {{ .detail }}" -ErrNotLogin: "Пользователь не вошел в систему: {{ .detail }}" -ErrPasswordExpired: "Текущий пароль истек: {{ .detail }}" -ErrNotSupportType: "Система не поддерживает текущий тип: {{ .detail }}" -ErrApiConfigStatusInvalid: "Доступ к API интерфейсу запрещен: {{ .detail }}" -ErrApiConfigKeyInvalid: "Ошибка ключа API интерфейса: {{ .detail }}" -ErrApiConfigIPInvalid: "IP API интерфейса отсутствует в белом списке: {{ .detail }}" -ErrApiConfigDisable: "Этот интерфейс запрещает использование вызовов API интерфейса: {{ .detail }}" -ErrApiConfigKeyTimeInvalid: "Ошибка временной метки интерфейса API: {{ .detail }}" +ErrInvalidParams: 'Ошибка параметра запроса: {{ .detail }}' +ErrTokenParse: 'Ошибка генерации токена: {{ .detail }}' +ErrInitialPassword: 'Исходный пароль неверный' +ErrInternalServer: 'Внутренняя ошибка сервера: {{ .detail }}' +ErrRecordExist: 'Запись уже существует' +ErrRecordNotFound: 'Запись не найдена' +ErrStructTransform: 'Не удалось преобразовать тип: {{ .err }}' +ErrNotLogin: 'Пользователь не вошел в систему: {{ .detail }}' +ErrPasswordExpired: 'Срок действия текущего пароля истек: {{ .detail }}' +ErrNotSupportType: 'Система не поддерживает текущий тип: {{ .name }}' +ErrProxy: 'Ошибка запроса, проверьте статус узла: {{ .detail }}' +ErrApiConfigStatusInvalid: 'Доступ к интерфейсу API запрещен: {{ .detail }}' +ErrApiConfigKeyInvalid: 'Ошибка ключа интерфейса API: {{ .detail }}' +ErrApiConfigIPInvalid: 'IP-адрес, используемый для вызова интерфейса API, отсутствует в белом списке: {{ .detail }}' +ErrApiConfigDisable: 'Этот интерфейс запрещает использование вызовов интерфейса API: {{ .detail }}' +ErrApiConfigKeyTimeInvalid: 'Ошибка временной метки интерфейса API: {{ .detail }}' -#common -ErrUsernameIsExist: "Имя пользователя уже существует" -ErrNameIsExist: "Имя уже существует" -ErrDemoEnvironment: "Демо-сервер, операция запрещена!" -ErrCmdTimeout: "Время выполнения команды истекло!" -ErrCmdIllegal: "Команда содержит недопустимые символы. Пожалуйста, измените и попробуйте снова!" -ErrPortExist: "{{ .port }} порт уже занят {{ .type }} [{{ .name }}]" -TYPE_APP: "Приложение" -TYPE_RUNTIME: "Среда выполнения" -TYPE_DOMAIN: "Доменное имя" -ErrTypePort: "Ошибка формата порта {{ .name }}" -ErrTypePortRange: "Диапазон портов должен быть между 1-65535" -Success: "Успех" -Failed: "Неудача" -SystemRestart: "Перезагрузка системы приводит к прерыванию задачи" -ErrGroupIsDefault: "Группа по умолчанию, невозможно удалить" -ErrGroupIsInWebsiteUse: "Группа используется другими сайтами, невозможно удалить" +#общий +ErrUsernameIsExist: 'Имя пользователя уже существует' +ErrNameIsExist: 'Имя уже существует' +ErrDemoEnvironment: 'Демо-сервер, эта операция запрещена!' +ErrCmdTimeout: 'Время выполнения команды истекло!' +ErrCmdIllegal: 'В команде выполнения есть недопустимые символы. Измените ее и повторите попытку!' +ErrPortExist: 'Порт {{ .port }} уже занят {{ .type }} [{{ .name }}]' +TYPE_APP: 'Приложение' +TYPE_RUNTIME: 'Среда выполнения' +TYPE_DOMAIN: 'Доменное имя' +ErrTypePort: 'Формат порта {{ .name }} неверен' +ErrTypePortRange: 'Диапазон портов должен быть в пределах 1-65535' +Success: 'Успех' +Failed: 'Не удалось' +SystemRestart: 'Задача прервана из-за перезапуска системы' +ErrGroupIsDefault: 'Группа по умолчанию, не может быть удалена' +ErrGroupIsInWebsiteUse: 'Группа используется другим веб-сайтом и не может быть удалена.' -#app -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 }} успешно обновлено" -ErrAppIsDown: "{{ .name }} статус приложения аномальный, пожалуйста, проверьте" +#резервное копирование +ErrBackupInUsed: 'Учетная запись резервного копирования использовалась в запланированной задаче и не может быть удалена.' +ErrBackupCheck: 'Проверка подключения к резервной копии учетной записи не удалась {{ .err }}' +ErrBackupLocalDelete: 'Удаление учетной записи резервного копирования локального сервера пока не поддерживается' +ErrBackupLocalCreate: 'Создание учетных записей резервного копирования локального сервера пока не поддерживается' -#file -ErrFileCanNotRead: "Файл недоступен для чтения" -ErrFileToLarge: "Файл слишком большой" -ErrPathNotFound: "Путь не найден" -ErrMovePathFailed: "Целевой путь не может содержать исходный путь!" -ErrLinkPathNotFound: "Целевой путь не существует!" -ErrFileIsExist: "Файл или каталог уже существует!" -ErrFileUpload: "Не удалось загрузить файл {{.name}} {{.detail}}" -ErrFileDownloadDir: "Скачивание папки не поддерживается" -ErrCmdNotFound: "Команда {{ .name}} не существует, пожалуйста, сначала установите эту команду на хосте" -ErrSourcePathNotFound: "Исходный каталог не существует" -ErrFavoriteExist: "Этот путь уже в избранном" -ErrInvalidChar: "Недопустимые символы запрещены" -ErrPathNotDelete: "Выбранный каталог не может быть удален" +#приложение +ErrPortInUsed: '{{ .detail }} порт уже занят!' +ErrAppLimit: 'Количество установленных приложений превысило лимит' +ErrAppRequired: 'Сначала установите приложение {{ .detail }}' +ErrNotInstall: 'Приложение не установлено' +ErrPortInOtherApp: 'Порт {{ .port }} уже занят приложением {{ .apps }}!' +ErrDbUserNotValid: 'Существующая база данных, имя пользователя и пароль не совпадают!' +ErrDockerComposeNotValid: 'Неверный формат файла docker-compose' +ErrUpdateBuWebsite: 'Приложение успешно обновлено, но изменение файла конфигурации веб-сайта не удалось. Пожалуйста, проверьте конфигурацию! ' +Err1PanelNetworkFailed: 'Создание сети контейнеров по умолчанию не удалось! {{ .detail }}' +ErrFileParse: 'Ошибка анализа файла docker-compose приложения!' +ErrInstallDirNotFound: 'Каталог установки не существует. Если вам необходимо удалить, выберите Принудительное удаление.' +AppStoreIsUpToDate: 'В магазине приложений уже установлена последняя версия' +LocalAppVersionNull: 'Приложение {{ .name }} не синхронизировано с версией! Невозможно добавить в список приложений.' +LocalAppVersionErr: 'Синхронизация версии {{ .version }} {{ .name }} не удалась! {{ .err }}' +ErrFileNotFound: 'Файл {{ .name }} не существует' +ErrFileParseApp: '{{ .name }} анализ файла не удался {{ .err }}' +ErrAppDirNull: 'Папка версии не существует' +LocalAppErr: 'Синхронизация приложения {{ .name }} не удалась! {{ .err }}' +ErrContainerName: 'Имя контейнера уже существует' +ErrAppSystemRestart: '1Перезапуск панели привел к завершению задачи' +ErrCreateHttpClient: 'Не удалось создать запрос {{ .err }}' +ErrHttpReqTimeOut: 'Истекло время ожидания запроса {{ .err }}' +ErrHttpReqFailed: 'Запрос не выполнен {{ .err }}' +ErrNoSuchHost: 'Не удалось найти запрошенный сервер {{ .err }}' +ErrHttpReqNotFound: 'Запрошенный ресурс {{ .err }} не найден' +ErrImagePullTimeOut: 'Истекло время ожидания извлечения изображения' +ErrContainerNotFound: 'Контейнер {{ .name }} не существует' +ErrContainerMsg: 'Контейнер {{ .name }} ненормален. Подробности смотрите в журнале на странице контейнера.' +ErrAppBackup: '{{ .name }} резервное копирование приложения не удалось {{ .err }}' +ErrImagePull: 'Не удалось извлечь изображение {{ .err }}' +ErrVersionTooLow: 'Текущая версия 1Panel слишком низкая для обновления App Store. Пожалуйста, обновите версию перед началом работы.' +ErrAppNameExist: 'Имя приложения уже существует' +AppStoreIsSyncing: 'App Store синхронизируется, повторите попытку позже' +ErrGetCompose: 'Не удалось получить файл docker-compose.yml! {{ .detail }}' +ErrAppWarn: 'Ненормальное состояние, проверьте журнал' +ErrAppParamKey: 'Поле параметра {{ .name }} ненормально' +ErrAppUpgrade: 'Обновление приложения {{ .name }} не удалось {{ .err }}' +AppRecover: 'Откатить приложение {{ .name }}' +PullImageStart: 'Начать извлечение изображения {{ .name }}' +PullImageSuccess: 'Изображение извлечено успешно' +UpgradeAppStart: 'Начать обновление приложения {{ .name }}' +UpgradeAppSuccess: 'Приложение {{ .name }} успешно обновлено' +AppStoreIsLastVersion: 'В App Store уже установлена последняя версия' +AppStoreSyncSuccess: 'Синхронизация с App Store прошла успешно' +SyncAppDetail: 'Синхронизировать конфигурацию приложения' +AppVersionNotMatch: 'Приложению {{ .name }} требуется более высокая версия 1Panel, синхронизация пропускается' +MoveSiteDir: 'Текущее обновление требует миграции каталога веб-сайта OpenResty' +MoveSiteToDir: 'Перенести каталог сайта в {{ .name }}' +ErrMoveSiteDir: 'Не удалось перенести каталог сайта' +MoveSiteDirSuccess: 'Успешная миграция каталога веб-сайта' +DeleteRuntimePHP: 'Удалить среду выполнения PHP' +CustomAppStoreNotConfig: 'Укажите адрес автономного пакета в магазине приложений' +CustomAppStoreNotFound: 'Не удалось получить пакет магазина приложений. Проверьте, существует ли он' +CustomAppStoreFileValid: 'Пакеты магазина приложений должны быть в формате .tar.gz' +PullImageTimeout: 'Истекло время ожидания извлечения изображения. Попробуйте увеличить ускорение изображения или выбрать другое ускорение изображения' +ErrAppIsDown: '{{ .name }} статус приложения ненормальный, проверьте' +ErrCustomApps: 'Установлено приложение. Сначала удалите его' +ErrCustomRuntimes: 'Установлена среда выполнения. Сначала удалите ее' -#website -ErrDomainIsExist: "Доменное имя уже существует" -ErrAliasIsExist: "Псевдоним уже существует" -ErrAppDelete: "Другой веб-сайт использует это приложение" -ErrGroupIsUsed: "Группа используется и не может быть удалена" -ErrBackupMatch: "файл резервной копии не соответствует текущим данным части сайта: {{ .detail}}" -ErrBackupExist: "файл резервной копии соответствует части исходных данных, которая не существует: {{ .detail}}" -ErrPHPResource: "Локальная среда выполнения не поддерживает переключение!" -ErrPathPermission: "Обнаружена папка с правами доступа не 1000:1000 в каталоге индекса, что может вызвать ошибку отказа в доступе при доступе к веб-сайту. Пожалуйста, нажмите кнопку сохранения выше" -ErrDomainIsUsed: "Домен уже используется веб-сайтом {{ .name }}" -ErrDomainFormat: "Ошибка формата домена {{ .name }}" -ErrDefaultAlias: "default — зарезервированное кодовое имя, пожалуйста, используйте другое кодовое имя" -ErrImageNotExist: "Образ рабочей среды {{.name}} не существует, пожалуйста, перенастройте рабочую среду" +#файл +ErrFileCanNotRead: 'Этот файл не поддерживает предварительный просмотр' +ErrFileToLarge: 'Файл больше 10 МБ и не может быть открыт' +ErrPathNotFound: 'Каталог не существует' +ErrMovePathFailed: 'Целевой путь не может содержать исходный путь!' +ErrLinkPathNotFound: 'Целевой путь не существует!' +ErrFileIsExist: 'Файл или папка уже существует!' +ErrFileUpload: '{{ .name }} не удалось загрузить файл {{ .detail }}' +ErrFileDownloadDir: 'Папка загрузки не поддерживается' +ErrCmdNotFound: 'Команда {{ .name }} не существует, сначала установите эту команду на хосте' +ErrSourcePathNotFound: 'Исходный каталог не существует' +ErrFavoriteExist: 'Этот путь уже добавлен в избранное' +ErrInvalidChar: 'Недопустимые символы не допускаются' +ErrPathNotDelete: 'Выбранный каталог не может быть удален' + +#веб-сайт +ErrDomainIsExist: 'Доменное имя уже существует' +ErrAliasIsExist: 'Псевдоним уже существует' +ErrAppDelete: 'Другие веб-сайты используют это приложение и не могут его удалить' +ErrBackupMatch: 'Файл резервной копии не соответствует некоторым текущим данным веб-сайта {{ .detail }}' +ErrBackupExist: 'Соответствующая часть исходных данных в файле резервной копии не существует {{ .detail }}' +ErrPHPResource: 'Локальная операционная среда не поддерживает переключение!' +ErrPathPermission: 'В каталоге index обнаружена папка с разрешениями, отличными от 1000:1000, что может привести к ошибке Отказано в доступе на веб-сайте. Пожалуйста, нажмите кнопку Сохранить выше.' +ErrDomainIsUsed: 'Доменное имя уже используется веб-сайтом [{{ .name }}]' +ErrDomainFormat: 'Неверный формат доменного имени {{ .name }}' +ErrDefaultAlias: 'по умолчанию зарезервирован код, используйте другой код' +ErrParentWebsite: 'Сначала вам необходимо удалить дочерний сайт {{ .name }}' +ErrBuildDirNotFound: 'Каталог сборки не существует' +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: "Системный сертификат успешно обновлен" +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: 'Сертификат системы обновлен успешно' +ErrWildcardDomain: 'Невозможно подать заявку на получение подстановочного сертификата доменного имени в режиме HTTP' #mysql -ErrUserIsExist: "Текущий пользователь уже существует. Пожалуйста, введите нового пользователя" -ErrDatabaseIsExist: "Текущая база данных уже существует. Пожалуйста, введите новую базу данных" -ErrExecTimeOut: "Время выполнения SQL запроса истекло, пожалуйста, проверьте базу данных" -ErrRemoteExist: "Удаленная база данных с таким именем уже существует, пожалуйста, измените и попробуйте снова" -ErrLocalExist: "Локальная база данных с таким именем уже существует, пожалуйста, измените и попробуйте снова" +ErrUserIsExist: 'Текущий пользователь уже существует, пожалуйста, введите еще раз' +ErrDatabaseIsExist: 'Текущая база данных уже существует, пожалуйста, введите ее повторно' +ErrExecTimeOut: 'Время выполнения SQL истекло, проверьте базу данных' +ErrRemoteExist: 'Удаленная база данных с таким именем уже существует. Измените его и повторите попытку' +ErrLocalExist: 'Имя уже существует в локальной базе данных, измените его и повторите попытку' -#redis -ErrTypeOfRedis: "Тип восстановленного файла не соответствует текущему режиму сохранения. Измените тип файла и попробуйте снова" +#редис +ErrTypeOfRedis: 'Тип файла восстановления не соответствует текущему методу сохранения. Измените его и повторите попытку' -#container -ErrInUsed: "{{ .detail }} используется и не может быть удален" -ErrObjectInUsed: "Этот объект используется и не может быть удален" -ErrObjectBeDependent: "Этот образ зависит от других образов и не может быть удален" -ErrPortRules: "Количество портов не совпадает, пожалуйста, введите заново!" -ErrPgImagePull: "Тайм-аут загрузки образа. Пожалуйста, настройте ускорение загрузки образа или вручную загрузите образ postgres:16.0-alpine и попробуйте снова" +#контейнер +ErrInUsed: '{{ .detail }} используется и не может быть удален' +ErrObjectInUsed: 'Объект используется и не может быть удален' +ErrObjectBeDependent: 'Это изображение зависит от других изображений и не может быть удалено' +ErrPortRules: 'Номер порта не совпадает, введите заново!' +ErrPgImagePull: 'Время извлечения изображения истекло. Настройте ускорение изображения или вручную извлеките изображение {{ .name }} и повторите попытку' -#runtime -ErrDirNotFound: "Папка сборки не существует! Пожалуйста, проверьте целостность файла!" -ErrFileNotExist: "Файл {{ .detail }} не существует! Пожалуйста, проверьте целостность исходного файла!" -ErrImageBuildErr: "Не удалось создать образ" -ErrImageExist: "Образ уже существует!" -ErrDelWithWebsite: "Рабочая среда уже связана с веб-сайтом и не может быть удалена" -ErrRuntimeStart: "Не удалось запустить" -ErrPackageJsonNotFound: "Файл package.json не существует" -ErrScriptsNotFound: "Конфигурационный элемент scripts не найден в package.json" -ErrContainerNameNotFound: "Не удалось получить имя контейнера, пожалуйста, проверьте файл .env" -ErrNodeModulesNotFound: "Папка node_modules не существует! Пожалуйста, отредактируйте среду выполнения или дождитесь успешного запуска среды выполнения" +#время выполнения +ErrDirNotFound: 'Папка сборки не существует! Проверьте целостность файла!' +ErrFileNotExist: 'Файл {{ .detail }} не существует! Проверьте целостность исходного файла!' +ErrImageBuildErr: 'Сборка образа не удалась' +ErrImageExist: 'Изображение уже существует!' +ErrDelWithWebsite: 'Операционная среда уже связана с веб-сайтом и не может быть удалена' +ErrRuntimeStart: 'Запуск не удался' +ErrPackageJsonNotFound: 'файл package.json не существует' +ErrScriptsNotFound: 'Элемент конфигурации скриптов не найден в package.json' +ErrContainerNameNotFound: 'Не удалось получить имя контейнера, проверьте файл .env' +ErrNodeModulesNotFound: 'Папка node_modules не существует! Измените среду выполнения или дождитесь ее успешного запуска' +ErrContainerNameIsNull: 'Имя контейнера не существует' -#setting -ErrBackupInUsed: "Учетная запись резервного копирования уже используется в cronjob и не может быть удалена." -ErrBackupCheck: "Проверка подключения учетной записи резервного копирования не выполнена {{ .err}}" -ErrOSSConn: "Не удалось получить последнюю версию, пожалуйста, проверьте возможность подключения сервера к внешней сети." -ErrEntrance: "Информация о безопасном входе неверна. Пожалуйста, проверьте и попробуйте снова!" +#инструмент +ErrConfigNotFound: 'Файл конфигурации не существует' +ErrConfigParse: 'Неверный формат файла конфигурации' +ErrConfigIsNull: 'Файл конфигурации не может быть пустым' +ErrConfigDirNotFound: 'Рабочий каталог не существует' +ErrConfigAlreadyExist: 'Файл конфигурации с таким именем уже существует' +ErrUserFindErr: 'Поиск пользователя {{ .name }} не удался {{ .err }}' -#tool -ErrConfigNotFound: "Конфигурационный файл не существует" -ErrConfigParse: "Ошибка формата конфигурационного файла" -ErrConfigIsNull: "Конфигурационный файл не может быть пустым" -ErrConfigDirNotFound: "Каталог выполнения не существует" -ErrConfigAlreadyExist: "Конфигурационный файл с таким именем уже существует" -ErrUserFindErr: "Не удалось найти пользователя {{ .name }} {{ .err }}" - -#ssh -ErrFirewallNone: "На системе не обнаружен сервис firewalld или ufw. Пожалуйста, проверьте и попробуйте снова!" -ErrFirewallBoth: "На системе обнаружены оба сервиса firewalld и ufw. Чтобы избежать конфликтов, удалите один и попробуйте снова!" +#ссш +ErrFirewallNone: 'Системные службы firewalld или ufw не обнаружены. Проверьте и повторите попытку!' +ErrFirewallBoth: 'Обнаружено, что в системе есть службы firewalld и ufw. Чтобы избежать конфликтов, удалите их и повторите попытку!' #cronjob -ErrBashExecute: "Ошибка выполнения скрипта, пожалуйста, проверьте конкретную информацию в области вывода задачи." -ErrCutWebsiteLog: "Не удалось разрезать лог веб-сайта {{ .name }}, ошибка {{ .err }}" -CutWebsiteLogSuccess: "Лог веб-сайта {{ .name }} успешно разрезан, путь к резервной копии {{ .path }}" +ErrCutWebsiteLog: '{{ .name }} не удалось вырезать журнал веб-сайта, ошибка {{ .err }}' +CutWebsiteLogSuccess: 'Журнал веб-сайта {{ .name }} успешно вырезан, путь к резервной копии {{ .path }}' +HandleShell: 'Выполнить скрипт {{ .name }}' +HandleNtpSync: 'Синхронизация системного времени' +HandleSystemClean: 'Очистка системного кэша' -#toolbox -ErrNotExistUser: "Текущий пользователь не существует. Пожалуйста, измените и попробуйте снова!" -ErrBanAction: "Установка не выполнена, текущий сервис {{ .name }} недоступен, пожалуйста, проверьте и попробуйте снова!" -ErrClamdscanNotFound: "Команда clamdscan не обнаружена, пожалуйста, обратитесь к документации для установки!" +#ящик для инструментов +ErrNotExistUser: 'Текущий пользователь не существует, измените его и повторите попытку!' +ErrBanAction: 'Настройка не удалась. Текущая служба {{ .name }} недоступна. Проверьте и повторите попытку!' +ErrClamdscanNotFound: 'Команда clamdscan не обнаружена, обратитесь к документации, чтобы установить ее!' -#waf -ErrScope: "Неподдерживаемое изменение этой конфигурации" -ErrStateChange: "Не удалось изменить статус" -ErrRuleExist: "Правило уже существует" -ErrRuleNotExist: "Правило не существует" -ErrParseIP: "Неверный формат IP" -ErrDefaultIP: "default — зарезервированное имя, используйте другое имя" -ErrGroupInUse: "Группа IP используется черным/белым списком, не может быть удалена" -ErrGroupExist: "Имя группы IP уже существует" -ErrIPRange: "Неверный диапазон IP" -ErrIPExist: "IP уже существует" -urlDefense: "Правила URL" -urlHelper: "Запрещенные URL" -dirFilter: "Фильтр каталогов" -xss: "XSS" -phpExec: "Выполнение PHP-скрипта" -oneWordTrojan: "Троян с одной командой" -appFilter: "Фильтр опасных каталогов приложений" -webshell: "Веб-шелл" -args: "Правила параметров" -protocolFilter: "Фильтр протоколов" -javaFileter: "Фильтр опасных файлов Java" -scannerFilter: "Фильтр сканеров" -escapeFilter: "Экранирование фильтра" -customRule: "Пользовательские правила" -httpMethod: "Фильтр HTTP-методов" -fileExt: "Ограничение загрузки файлов" -defaultIpBlack: "Группа вредоносных IP" -cookie: "Правила Cookie" -urlBlack: "Черный список URL" -uaBlack: "Черный список User-Agent" -attackCount: "Ограничение частоты атак" -fileExtCheck: "Ограничение загрузки файлов" -geoRestrict: "Ограничение доступа по региону" -unknownWebsite: "Неавторизованный доступ к домену" -notFoundCount: "Ограничение частоты 404" -headerDefense: "Правила заголовков" -defaultUaBlack: "Правила User-Agent" -methodWhite: "Правила HTTP" -captcha: "Проверка человека-машины" -fiveSeconds: "Проверка за 5 секунд" -vulnCheck: "Дополнительные правила" -acl: "Пользовательские правила" -sql: "SQL-инъекция" -cc: "Ограничение частоты доступа" -defaultUrlBlack: "Правила URL" -sqlInject: "SQL-инъекция" -ErrDBNotExist: "База данных не существует" -allow: "Разрешить" -deny: "Запретить" +#ваф +ErrScope: 'Изменение этой конфигурации не поддерживается' +ErrStateChange: 'He удалось изменить состояние' +ErrRuleExist: 'Правило уже существует' +ErrRuleNotExist: 'Правило не существует' +ErrParseIP: 'Неправильный формат IP' +ErrDefaultIP: 'по умолчанию это зарезервированное имя, пожалуйста, измените его на другое имя' +ErrGroupInUse: 'IP-группа используется черным/белым списком и не может быть удалена' +ErrGroupExist: 'Имя группы IP уже существует' +ErrIPRange: 'Неверный диапазон IP-адресов' +ErrIPExist: 'IP-адрес уже существует' +urlDefense: 'Правила URL' +urlHelper: 'Запрещенный URL' +dirFilter: 'Фильтр каталогов' +xss: 'XSS' +phpExec: 'Выполнение PHP-скрипта' +oneWordTrojan: 'Троян из одного слова' +appFilter: 'Применить фильтрацию опасных каталогов' +webshell: 'Be6-оболочка' +args: 'Правила параметров' +protocolFilter: 'Фильтрация протоколов' +javaFileter: 'Фильтр опасных файлов Java' +scannerFilter: 'Фильтр сканера' +escapeFilter: 'фильтр побега' +customRule: 'Пользовательское правило' +httpMethod: 'Фильтрация метода HTTP' +fileExt: 'Ограничения на загрузку файлов' +defaultIpBlack: 'Вредоносная группа IP' +cookie: 'Правила использования файлов cookie' +urlBlack: 'Черный список URL' +uaBlack: 'Черный список User-Agent' +attackCount: 'Ограничение частоты атак' +fileExtCheck: 'Ограничения на загрузку файлов' +geoRestrict: 'Региональные ограничения доступа' +unknownWebsite: 'Несанкционированный доступ к доменному имени' +notFoundCount: 'Ограничение скорости 404' +headerDefense: 'Правила заголовка' +defaultUaBlack: 'Правила User-Agent' +methodWhite: 'Правила HTTP' +captcha: 'человеко-машинная верификация' +fiveSeconds: '5 секунд проверки' +vulnCheck: 'Дополнительные правила' +acl: 'Пользовательские правила' +sql: 'SQL-инъекция' +cc: 'Ограничение частоты доступа' +defaultUrlBlack: 'Правила URL' +sqlInject: 'SQL-инъекция' +ErrDBNotExist: 'База данных не существует' +allow: 'разрешить' +deny: 'отрицать' +OpenrestyNotFound: 'Openresty не установлен' -#license -ErrLicense: "Ошибка формата лицензии, пожалуйста, проверьте и попробуйте снова!" -ErrLicenseCheck: "Проверка лицензии не выполнена, пожалуйста, проверьте и попробуйте снова!" -ErrXpackVersion: "Ошибка проверки лицензии, эта лицензия ограничена по версии и не может быть успешно импортирована. Пожалуйста, проверьте и попробуйте снова!" -ErrLicenseSave: "Не удалось сохранить информацию о лицензии, ошибка {{ .err }}, пожалуйста, попробуйте снова!" -ErrLicenseSync: "Не удалось синхронизировать информацию о лицензии, в базе данных не обнаружена информация о лицензии!" -ErrXpackNotFound: "Этот раздел является функцией профессионального издания, пожалуйста, сначала импортируйте лицензию в интерфейсе Настройки панели — Лицензия" -ErrXpackNotActive: "Этот раздел является функцией профессионального издания, пожалуйста, сначала синхронизируйте статус лицензии в интерфейсе Настройки панели — Лицензия" -ErrXpackOutOfDate: "Текущая лицензия истекла, пожалуйста, повторно импортируйте лицензию в интерфейсе Настройки панели — Лицензия" -ErrXpackLost: "Лицензия достигла максимального числа попыток повторной попытки. Пожалуйста, перейдите на страницу [Настройки] [Лицензия] и вручную нажмите кнопку синхронизации, чтобы обеспечить корректную работу функций профессиональной версии." -ErrXpackTimeout: "Превышено время ожидания запроса, возможно, нестабильное сетевое соединение, пожалуйста, повторите попытку позже!" +#задача +TaskStart: '{{ .name }} Задача начинается [START]' +TaskEnd: '{{ .name }} Задача выполнена [ЗАВЕРШЕНО]' +TaskFailed: 'Задача {{ .name }} не выполнена' +TaskTimeout: '{{ .name }} истекло время ожидания' +TaskSuccess: '{{ .name }} Задача выполнена успешно' +TaskRetry: 'Начать {{ .name }}-ю повторную попытку' +SubTaskSuccess: '{{ .name }} выполнено успешно' +SubTaskFailed: '{{ .name }} не удалось: {{ .err }}' +TaskInstall: 'Установить' +TaskUninstall: 'Удалить' +TaskCreate: 'Создать' +TaskDelete: 'Удалить' +TaskUpgrade: 'Обновить' +TaskUpdate: 'Обновить' +TaskRestart: 'Перезапуск' +TaskBackup: 'Резервное копирование' +TaskRecover: 'Восстановить' +TaskRollback: 'Откат' +TaskPull: 'Вытянуть' +ЗадачаСборка: 'Сборка' +TaskPush: 'Push' +TaskHandle: 'Выполнить' +Website: 'Be6-сайт' +App: 'Приложение' +Runtime: 'Среда выполнения' +Database: 'База данных' +ConfigFTP: 'Создать пользователя FTP {{ .name }}' +ConfigOpenresty: 'Создать файл конфигурации Openresty' +InstallAppSuccess: 'Приложение {{ .name }} успешно установлено' +ConfigRuntime: 'Настройка среды выполнения' +ConfigApp: 'Приложение конфигурации' +SuccessStatus: '{{ .name }} успешно' +FailedStatus: '{{ .name }} не удалось {{ .err }}' +HandleLink: 'Обработка ассоциации приложений' +HandleDatabaseApp: 'Обработка параметров приложения' +ExecShell: 'Выполнить скрипт {{ .name }}' +PullImage: 'Вытянуть изображение' +Start: 'Старт' +Run: 'Старт' +Stop: 'Стоп' +Image: 'Зеркало' +Compose: 'Оркестровка' +Container: 'Контейнер' +AppLink: 'Связанное приложение' +EnableSSL: 'Включить HTTPS' +AppStore: 'Магазин приложений' +TaskSync: 'Синхронизировать' +LocalApp: 'Локальное приложение' +SubTask: 'Подзадача' +RuntimeExtension: 'Расширение среды выполнения' +TaskIsExecuting: 'Задача выполняется' +CustomAppstore: 'Хранилище пользовательских приложений' -#license -ErrAlert: "Ошибка формата информации об оповещении, пожалуйста, проверьте и попробуйте снова!" -ErrAlertPush: "Ошибка отправки оповещения, пожалуйста, проверьте и попробуйте снова!" -ErrAlertSave: "Ошибка сохранения оповещения, пожалуйста, проверьте и попробуйте снова!" -ErrAlertSync: "Ошибка синхронизации оповещения, пожалуйста, проверьте и попробуйте снова!" -ErrAlertRemote: "Ошибка удаленного оповещения, пожалуйста, проверьте и попробуйте снова!" +# задача - ай +OllamaModelPull: 'Вытянуть модель Ollama {{ .name }}' +OllamaModelSize: 'Получить размер модели Ollama {{ .name }}' -#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: "Отменить авторизованные IP-ограничения 1Panel" -ResetDomain: "Отменить привязку домена 1Panel" -RestoreCommands: "Откатить сервис и данные 1Panel" -RestoreNoSuchFile: "Нет доступных файлов для отката" -RestoreStep1: "(1/5) Начало отката сервиса и данных 1Panel из каталога {{ .name }}..." -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: "режим: " +# снимок задачи +Snapshot: 'Снимок' +SnapDBInfo: 'Запись информации о базе данных 1Panel' +SnapCopy: 'Копировать файлы и каталоги {{ .name }}' +SnapNewDB: 'Инициализировать соединение с базой данных {{ .name }}' +SnapDeleteOperationLog: 'Удалить журнал операций' +SnapDeleteLoginLog: 'Удалить журнал доступа' +SnapDeleteMonitor: 'Удалить данные мониторинга' +SnapRemoveSystemIP: 'Удалить системный IP' +SnapBaseInfo: 'Записать основную информацию 1Panel' +SnapInstallApp: 'Резервное копирование установленных приложений 1Panel' +SnapDockerSave: 'Сжать установленные приложения' +SnapLocalBackup: 'Резервное копирование локального каталога резервных копий 1Panel' +SnapCompressBackup: 'Сжать локальный каталог резервных копий' +SnapPanelData: 'Резервное копирование каталога данных 1Panel' +SnapCompressPanel: 'Каталог сжатых данных' +SnapWebsite: 'Резервное копирование каталога веб-сайта 1Panel' +SnapCloseDBConn: 'Закрыть соединение с базой данных' +SnapCompress: 'Создание файлов моментальных снимков' +SnapCompressFile: 'Сжать файл моментального снимка' +SnapCheckCompress: 'Проверить файл сжатия снимка' +SnapCompressSize: 'Размер файла снимка {{ .name }}' +SnapUpload: 'Загрузить файл снимка' +SnapLoadBackup: 'Получить резервную информацию об учетной записи' +SnapUploadTo: 'Загрузить файл снимка в {{ .name }}' +SnapUploadRes: 'Загрузить файл снимка в {{ .name }}' + +SnapshotRecover: 'Восстановление моментального снимка' +RecoverDownload: 'Загрузить файл снимка' +Download: 'Скачать' +RecoverDownloadAccount: 'Получить резервную копию учетной записи для загрузки моментального снимка {{ .name }}' +RecoverDecompress: 'Распаковка сжатых файлов моментальных снимков' +Decompress: 'Декомпрессия' +BackupBeforeRecover: 'Резервное копирование системных данных перед созданием снимка' +Readjson: 'Прочитать файл JSON в снимке' +ReadjsonPath: 'Получить путь к файлу JSON в снимке' +ReadjsonContent: 'Прочитать файл Json' +ReadjsonMarshal: 'Обработка Json escape' +RecoverApp: 'Восстановить установленные приложения' +RecoverWebsite: 'Восстановить каталог веб-сайта' +RecoverAppImage: 'Восстановить резервную копию образа снимка' +RecoverCompose: 'Восстановить содержимое другого композитора' +RecoverComposeList: 'Восстановить всех композиторов' +RecoverComposeItem: 'Восстановить сообщение {{ .name }}' +RecoverAppEmpty: 'В файле снимка не найдено резервной копии образа приложения' +RecoverBaseData: 'Восстановить базовые данные и файлы' +RecoverDaemonJsonEmpty: 'Ни файл снимка, ни текущая машина не имеют файла конфигурации контейнера daemon.json' +RecoverDaemonJson: 'Восстановить файл конфигурации контейнера daemon.json' +RecoverDBData: 'Восстановить данные базы данных' +RecoverBackups: 'Восстановить локальный каталог резервных копий' +RecoverPanelData: 'Каталог данных восстановления' + +# задача - контейнер +ContainerNewCliet: 'Инициализировать Docker-клиент' +ContainerImagePull: 'Извлечь изображение контейнера {{ .name }}' +ContainerRemoveOld: 'Удалить исходный контейнер {{ .name }}' +ContainerImageCheck: 'Проверьте, нормально ли извлекается изображение' +ContainerLoadInfo: 'Получить основную информацию о контейнере' +ContainerRecreate: 'Обновление контейнера не удалось, сейчас начну восстанавливать исходный контейнер' +ContainerCreate: 'Создать новый контейнер {{ .name }}' +ContainerCreateFailed: 'Создание контейнера не удалось, удалите неудавшийся контейнер' +ContainerStartCheck: 'Проверить, запущен ли контейнер' + +# задача - изображение +ImageBuild: 'Создание изображения' +ImageBuildStdoutCheck: 'Анализ содержимого выходного изображения' +ImaegBuildRes: 'Выходные данные сборки образа: {{ .name }}' +ImagePull: 'Вытащить изображение' +ImageRepoAuthFromDB: 'Получить информацию об аутентификации репозитория из базы данных' +ImaegPullRes: 'Выход извлечения изображения: {{ .name }}' +ImagePush: 'Отправить изображение' +ImageRenameTag: 'Изменить тег изображения' +ImageNewTag: 'Новый тег изображения {{ .name }}' +ImaegPushRes: 'Вывод push-изображения: {{ .name }}' +ComposeCreate: 'Создать композицию' +ComposeCreateRes: 'Составить вывод создания: {{ .name }}' + +# задача - веб-сайт +BackupNginxConfig: 'Резервное копирование файла конфигурации OpenResty веб-сайта' +CompressFileSuccess: 'Каталог успешно сжат, сжат в {{ .name }}' +CompressDir: 'Каталог сжатия' +DeCompressFile: 'Распаковать файл {{ .name }}' +ErrCheckValid: 'Проверка файла резервной копии не удалась, {{ .name }}' +Rollback: 'Откат' +websiteDir: 'Каталог веб-сайтов' +RecoverFailedStartRollBack: 'Восстановление не удалось, начать откат' +AppBackupFileIncomplete: 'Файл резервной копии неполный и в нем отсутствуют файлы app.json или app.tar.gz' +AppAttributesNotMatch: 'Тип или имя приложения не совпадают' + +#тревога +ErrAlert: 'Формат предупреждающего сообщения неверен, проверьте и повторите попытку!' +ErrAlertPush: 'Ошибка при отправке оповещения. Проверьте и повторите попытку!' +ErrAlertSave: 'Ошибка сохранения информации о тревоге, проверьте и повторите попытку!' +ErrAlertSync: 'Ошибка синхронизации информации о тревоге, проверьте и повторите попытку!' +ErrAlertRemote: 'Ошибка удаленного сообщения об ошибке, проверьте и повторите попытку!' \ No newline at end of file diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index 424ec32dd..43c374e9a 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -1,251 +1,255 @@ -ErrInvalidParams: "請求參數錯誤: {{ .detail }}" -ErrInternalServer: "伺服器內部錯誤: {{ .detail }}" -ErrRecordExist: "記錄已存在" -ErrRecordNotFound: "記錄未找到" -ErrStructTransform: "類型轉換失敗: {{ .detail }}" -ErrNotSupportType: "系統暫不支持當前類型: {{ .detail }}" -ErrApiConfigStatusInvalid: "API 接口禁止訪問: {{ .detail }}" -ErrApiConfigKeyInvalid: "API 接口密钥錯誤: {{ .detail }}" -ErrApiConfigIPInvalid: "调用 API 接口 IP 不在白名单: {{ .detail }}" -ErrApiConfigDisable: "此接口禁止使用 API 接口調用: {{ .detail }}" +ErrInvalidParams: '請求參數錯誤: {{ .detail }}' +ErrTokenParse: 'Token 產生錯誤: {{ .detail }}' +ErrInitialPassword: '原密碼錯誤' +ErrInternalServer: '服務內部錯誤: {{ .detail }}' +ErrRecordExist: '記錄已存在' +ErrRecordNotFound: '記錄未能找到' +ErrStructTransform: '型別轉換失敗: {{ .err }}' +ErrNotLogin: '使用者未登入: {{ .detail }}' +ErrPasswordExpired: '目前密碼已過期: {{ .detail }}' +ErrNotSupportType: '系統暫不支援目前類型: {{ .name }}' +ErrProxy: '請求錯誤,請檢查該節點狀態: {{ .detail }}' +ErrApiConfigStatusInvalid: 'API 介面禁止存取: {{ .detail }}' +ErrApiConfigKeyInvalid: 'API 介面金鑰錯誤: {{ .detail }}' +ErrApiConfigIPInvalid: '呼叫API 介面IP 不在白名單: {{ .detail }}' +ErrApiConfigDisable: '此介面禁止使用API 介面呼叫: {{ .detail }}' +ErrApiConfigKeyTimeInvalid: 'API 介面時間戳記錯誤: {{ .detail }}' #common -ErrUsernameIsExist: "使用者名稱已存在" -ErrNameIsExist: "名稱已存在" -ErrDemoEnvironment: "演示伺服器,禁止此操作!" -ErrCmdTimeout: "指令執行超時!" -ErrCmdIllegal: "執行命令中存在不合法字符,請修改後重試!" -ErrPortExist: "{{ .port }} 埠已被 {{ .type }} [{{ .name }}] 佔用" -TYPE_APP: "應用" -TYPE_RUNTIME: "運作環境" -TYPE_DOMAIN: "網域名稱" -ErrTypePort: "埠 {{ .name }} 格式錯誤" -Success: "成功" -Failed: "失敗" -SystemRestart: "系統重啟導致任務中斷" -ErrInvalidChar: "禁止使用非法字元" -ErrGroupIsDefault: "預設分組,無法刪除" -ErrGroupIsInWebsiteUse: "分組正在被其他網站使用,無法刪除" +ErrUsernameIsExist: '使用者名稱已存在' +ErrNameIsExist: '名稱已存在' +ErrDemoEnvironment: '示範伺服器,禁止此操作!' +ErrCmdTimeout: '指令執行逾時!' +ErrCmdIllegal: '執行指令中存在不合法字符,請修改後重試!' +ErrPortExist: '{{ .port }} 埠已被{{ .type }} [{{ .name }}] 佔用' +TYPE_APP: '應用' +TYPE_RUNTIME: '運作環境' +TYPE_DOMAIN: '網域名稱' +ErrTypePort: '埠{{ .name }} 格式錯誤' +ErrTypePortRange: '連接埠範圍需要在1-65535 之間' +Success: '成功' +Failed: '失敗' +SystemRestart: '系統重新啟動導致任務中斷' +ErrGroupIsDefault: '預設分組,無法刪除' +ErrGroupIsInWebsiteUse: '分組正在被其他網站使用,無法刪除' #backup -ErrBackupLocalDelete: "暫不支持刪除本地伺服器備份帳號" -ErrBackupLocalCreate: "暫不支持創建本地伺服器備份帳號" +ErrBackupInUsed: '此備份帳號已在排程任務中使用,無法刪除' +ErrBackupCheck: '備份帳號測試連線失敗{{ .err }}' +ErrBackupLocalDelete: '暫時不支援刪除本機伺服器備份帳號' +ErrBackupLocalCreate: '暫時不支援建立本機伺服器備份帳號' #app -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 {{.err}}" -ErrImagePull: "{{ .name }} 鏡像拉取失敗 err {{.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 }} 升級成功" -AppStoreIsLastVersion: "應用商店已經是最新版本" -AppStoreSyncSuccess: "應用商店同步成功" -SyncAppDetail: "同步應用配置" -AppVersionNotMatch: "{{ .name }} 應用需要更新 1Panel,跳過同步" -MoveSiteDir: "當前升級需要遷移 OpenResty 網站目錄" -MoveSiteToDir: "遷移網站目錄到 {{ .name }}" -ErrMoveSiteDir: "遷移網站目錄失敗" -MoveSiteDirSuccess: "遷移網站目錄成功" -DeleteRuntimePHP: "刪除運行環境 PHP 版本", -CustomAppStoreNotConfig: "請在應用商店設置離線包地址", -CustomAppStoreNotFound: "應用商店包獲取失敗,請檢查是否存在", -CustomAppStoreFileValid: "應用商店包需要 .tar.gz 格式" -PullImageTimeout: "拉取鏡像超時,請嘗試增加鏡像加速或更換其他鏡像加速" -ErrAppIsDown: "{{ .name }} 應用狀態異常,請檢查" +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: '建立請求失敗{{ .err }}' +ErrHttpReqTimeOut: '請求逾時{{ .err }}' +ErrHttpReqFailed: '請求失敗{{ .err }}' +ErrNoSuchHost: '無法找到請求的伺服器{{ .err }}' +ErrHttpReqNotFound: '無法找到要求的資源{{ .err }}' +ErrImagePullTimeOut: '鏡像拉取逾時' +ErrContainerNotFound: '{{ .name }} 容器不存在' +ErrContainerMsg: '{{ .name }} 容器異常,請在容器頁面上查看日誌' +ErrAppBackup: '{{ .name }} 應用備份失敗 {{ .err }}' +ErrImagePull: '鏡像拉取失敗{{ .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 }} 升級成功' +AppStoreIsLastVersion: '應用程式商店已經是最新版本' +AppStoreSyncSuccess: '應用程式商店同步成功' +SyncAppDetail: '同步應用程式設定' +AppVersionNotMatch: '{{ .name }} 應用程式需要更高的1Panel 版本,跳過同步' +MoveSiteDir: '目前升級需要遷移OpenResty 網站目錄' +MoveSiteToDir: '遷移網站目錄到{{ .name }}' +ErrMoveSiteDir: '遷移網站目錄失敗' +MoveSiteDirSuccess: '遷移網站目錄成功' +DeleteRuntimePHP: '刪除PHP 運行環境' +CustomAppStoreNotConfig: '請在應用程式商店設定離線套件位址' +CustomAppStoreNotFound: '應用程式商店套件取得失敗,請檢查是否存在' +CustomAppStoreFileValid: '應用程式商店包需要.tar.gz 格式' +PullImageTimeout: '拉取鏡像逾時,請嘗試增加鏡像加速或更換其他鏡像加速' +ErrAppIsDown: '{{ .name }} 應用程式狀態異常,請檢查' +ErrCustomApps: '存在已安裝的應用程式,請先解除安裝' +ErrCustomRuntimes: '存在已安裝的運作環境,請先刪除' #file -ErrFileCanNotRead: "此文件不支持預覽" -ErrFileToLarge: "文件超過10M,無法打開" -ErrPathNotFound: "目錄不存在" -ErrMovePathFailed: "目標路徑不能包含原路徑!" -ErrLinkPathNotFound: "目標路徑不存在!" -ErrFileIsExist: "文件或文件夾已存在!" -ErrFileUpload: "{{ .name }} 上傳文件失敗 {{ .detail}}" -ErrFileDownloadDir: "不支持下載文件夾" -ErrCmdNotFound: "{{ .name}} 命令不存在,請先在宿主機安裝此命令" -ErrSourcePathNotFound: "源目錄不存在" -ErrFavoriteExist: "已收藏此路徑" -ErrPathNotDelete: "所選目錄不可删除" +ErrFileCanNotRead: '此檔案不支援預覽' +ErrFileToLarge: '檔案超過10M,無法開啟' +ErrPathNotFound: '目錄不存在' +ErrMovePathFailed: '目標路徑不能包含原路徑!' +ErrLinkPathNotFound: '目標路徑不存在!' +ErrFileIsExist: '檔案或資料夾已存在!' +ErrFileUpload: '{{ .name }} 上傳檔案失敗{{ .detail }}' +ErrFileDownloadDir: '不支援下載資料夾' +ErrCmdNotFound: '{{ .name}} 指令不存在,請先在宿主機安裝此指令' +ErrSourcePathNotFound: '來源目錄不存在' +ErrFavoriteExist: '已收藏此路徑' +ErrInvalidChar: '禁止使用非法字元' +ErrPathNotDelete: '所選目錄不可刪除' #website -ErrDomainIsExist: "域名已存在" -ErrAliasIsExist: "代號已存在" -ErrAppDelete: "其他網站使用此應用,無法刪除" -ErrGroupIsUsed: "分組正在使用中,無法刪除" -ErrBackupMatch: "該備份文件與當前網站部分數據不匹配: {{ .detail}}" -ErrBackupExist: "該備份文件對應部分原數據不存在: {{ .detail}}" -ErrPHPResource: "本地運行環境不支持切換!" -ErrPathPermission: "index 目錄下偵測到非 1000:1000 權限資料夾,可能導致網站存取 Access denied 錯誤,請點擊上方儲存按鈕" -ErrDomainIsUsed: "域名已被網站【{{ .name }}】使用" -ErrDomainFormat: "{{ .name }} 域名格式不正確" -ErrDefaultAlias: "default 為保留代號,請使用其他代號" -ErrParentWebsite: "需要先刪除子網站 {{ .name }}" -ErrBuildDirNotFound: "編譯目錄不存在" -ErrImageNotExist: "執行環境 {{.name}} 鏡像不存在,請重新編輯執行環境" +ErrDomainIsExist: '網域已存在' +ErrAliasIsExist: '代號已存在' +ErrAppDelete: '其他網站使用此應用程式,無法刪除' +ErrBackupMatch: '該備份檔案與目前網站部分資料不符{{ .detail }}' +ErrBackupExist: '該備份檔案對應部分來源資料不存在{{ .detail }}' +ErrPHPResource: '本地運行環境不支援切換! ' +ErrPathPermission: 'index 目錄下偵測到非1000:1000 權限資料夾,可能導致網站存取Access denied 錯誤,請點擊上方儲存按鈕' +ErrDomainIsUsed: '網域名稱已被網站【{{ .name }}】使用' +ErrDomainFormat: '{{ .name }} 網域格式不正確' +ErrDefaultAlias: 'default 為保留代號,請使用其他代號' +ErrParentWebsite: '需要先移除子網站{{ .name }}' +ErrBuildDirNotFound: '建置目錄不存在' +ErrImageNotExist: '執行環境{{ .name }} 映像不存在,請重新編輯執行環境' #ssl -ErrSSLCannotDelete: "{{ .name }} 證書正在被網站使用,無法刪除" -ErrAccountCannotDelete: "帳號關聯證書,無法刪除" -ErrSSLApply: "證書續簽成功,openresty reload失敗,請檢查配置!" -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: "更新網站憑證成功" -StartUpdateSystemSSL: "開始更新系統證書" -UpdateSystemSSLSuccess: "更新系統證書成功" -ErrExecShell: "執行腳本失敗 {{.err}}" -ExecShellStart: "開始執行腳本" -ExecShellSuccess: "腳本執行成功" - +ErrSSLCannotDelete: '{{ .name }} 憑證正在被網站使用,無法刪除' +ErrAccountCannotDelete: '帳號關聯證書,無法刪除' +ErrSSLApply: '憑證續簽成功,openresty reload失敗,請檢查設定!' +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: '更新系統憑證成功' +ErrWildcardDomain: 'HTTP 模式無法申請泛網域憑證' #mysql -ErrUserIsExist: "當前用戶已存在,請重新輸入" -ErrDatabaseIsExist: "當前資料庫已存在,請重新輸入" -ErrExecTimeOut: "SQL 執行超時,請檢查數據庫" -ErrRemoteExist: "遠程數據庫已存在該名稱,請修改後重試" -ErrLocalExist: "本地數據庫已存在該名稱,請修改後重試" +ErrUserIsExist: '目前使用者已存在,請重新輸入' +ErrDatabaseIsExist: '目前資料庫已存在,請重新輸入' +ErrExecTimeOut: 'SQL 執行逾時,請檢查資料庫' +ErrRemoteExist: '遠端資料庫已存在該名稱,請修改後重試' +ErrLocalExist: '本機資料庫已存在該名稱,請修改後重試' #redis -ErrTypeOfRedis: "恢復文件類型與當前持久化方式不符,請修改後重試" +ErrTypeOfRedis: '恢復檔案類型與目前持久化方式不符,請修改後重試' #container -ErrInUsed: "{{ .detail }} 正被使用,無法刪除" -ErrObjectInUsed: "該對象正被使用,無法刪除" -ErrObjectBeDependent: "該鏡像依賴於其他鏡像,無法刪除" -ErrPortRules: "端口數目不匹配,請重新輸入!" -ErrPgImagePull: "鏡像拉取超時,請配置鏡像加速或手動拉取 postgres:16.0-alpine 鏡像後重試" +ErrInUsed: '{{ .detail }} 正被使用,無法刪除' +ErrObjectInUsed: '該物件正被使用,無法刪除' +ErrObjectBeDependent: '此鏡像依賴其他鏡像,無法刪除' +ErrPortRules: '連接埠數目不匹配,請重新輸入!' +ErrPgImagePull: '鏡像拉取逾時,請配置鏡像加速或手動拉取{{ .name }} 鏡像後重試' #runtime -ErrDirNotFound: "build 文件夾不存在!請檢查文件完整性!" -ErrFileNotExist: "{{ .detail }} 文件不存在!請檢查源文件完整性!" -ErrImageBuildErr: "鏡像 build 失敗" -ErrImageExist: "鏡像已存在!" -ErrDelWithWebsite: "運行環境已經關聯網站,無法刪除" -ErrRuntimeStart: "啟動失敗" -ErrPackageJsonNotFound: "package.json 文件不存在" -ErrScriptsNotFound: "沒有在 package.json 中找到 scripts 配置項" -ErrContainerNameNotFound: "無法取得容器名稱,請檢查 .env 文件" -ErrNodeModulesNotFound: "node_modules 文件夾不存在!請編輯運行環境或者等待運行環境啟動成功" -ErrContainerNameIsNull: "容器名稱不能為空" - -#setting -ErrBackupInUsed: "該備份帳號已在計劃任務中使用,無法刪除" -ErrBackupCheck: "備份帳號測試連接失敗 {{ .err}}" -ErrOSSConn: "無法獲取最新版本,請確認伺服器是否能夠連接外部網路。" -ErrEntrance: "安全入口信息錯誤,請檢查後重試!" +ErrDirNotFound: 'build 資料夾不存在!請檢查檔案完整性!' +ErrFileNotExist: '{{ .detail }} 檔案不存在!請檢查來源檔案完整性!' +ErrImageBuildErr: '鏡像build 失敗' +ErrImageExist: '鏡像已存在!' +ErrDelWithWebsite: '運行環境已經關聯網站,無法刪除' +ErrRuntimeStart: '啟動失敗' +ErrPackageJsonNotFound: 'package.json 檔案不存在' +ErrScriptsNotFound: '沒有在package.json 中找到scripts 設定項' +ErrContainerNameNotFound: '無法取得容器名稱,請檢查.env 檔案' +ErrNodeModulesNotFound: 'node_modules 資料夾不存在!請編輯運行環境或等待運行環境啟動成功' +ErrContainerNameIsNull: '容器名稱不存在' #tool -ErrConfigNotFound: "配置文件不存在" -ErrConfigParse: "配置文件格式有誤" -ErrConfigIsNull: "配置文件不允許為空" -ErrConfigDirNotFound: "運行目錄不存在" -ErrConfigAlreadyExist: "已存在同名配置文件" -ErrUserFindErr: "用戶 {{ .name }} 查找失敗 {{ .err }}" +ErrConfigNotFound: '設定檔不存在' +ErrConfigParse: '設定檔格式有誤' +ErrConfigIsNull: '設定檔不允許為空' +ErrConfigDirNotFound: '運行目錄不存在' +ErrConfigAlreadyExist: '已存在同名設定檔' +ErrUserFindErr: '使用者{{ .name }} 尋找失敗{{ .err }}' #ssh -ErrFirewallNone: "未檢測到系統 firewalld 或 ufw 服務,請檢查後重試!" -ErrFirewallBoth: "檢測到系統同時存在 firewalld 或 ufw 服務,為避免衝突,請卸載後重試!" +ErrFirewallNone: '未偵測到系統firewalld 或ufw 服務,請檢查後重試!' +ErrFirewallBoth: '偵測到系統同時存在firewalld 或ufw 服務,為避免衝突,請卸載後重試!' #cronjob -ErrCutWebsiteLog: "{{ .name }} 網站日誌切割失敗,錯誤 {{ .err }}" -CutWebsiteLogSuccess: "{{ .name }} 網站日誌切割成功,備份路徑 {{ .path }}" -HandleShell: "執行腳本 {{ .name }}" -HandleNtpSync: "系統時間同步" -HandleSystemClean: "系統快取清理" +ErrCutWebsiteLog: '{{ .name }} 網站日誌切割失敗,錯誤{{ .err }}' +CutWebsiteLogSuccess: '{{ .name }} 網站日誌切割成功,備份路徑{{ .path }}' +HandleShell: '執行腳本{{ .name }}' +HandleNtpSync: '系統時間同步' +HandleSystemClean: '系統快取清理' #toolbox -ErrNotExistUser: "當前使用者不存在,請修改後重試!" -ErrBanAction: "設置失敗,當前 {{ .name }} 服務不可用,請檢查後重試!" -ErrClamdscanNotFound: "未偵測到 clamdscan 指令,請參考文件安裝!" +ErrNotExistUser: '目前使用者不存在,請修改後重試!' +ErrBanAction: '設定失敗,目前{{ .name }} 服務不可用,請檢查後再試一次!' +ErrClamdscanNotFound: '未偵測到clamdscan 指令,請參考文件安裝!' #waf -ErrScope: "不支援修改此配置" -ErrStateChange: "狀態修改失敗" -ErrRuleExist: "規則已存在" -ErrRuleNotExist: "規則不存在" -ErrParseIP: "IP 格式錯誤" -ErrDefaultIP: "default 為保留名稱,請更換其他名稱" -ErrGroupInUse: "IP 群組被黑/白名單使用,無法刪除" -ErrGroupExist: "IP 群組名稱已存在" -ErrIPRange: "IP 範圍錯誤" -ErrIPExist: "IP 已存在" +ErrScope: '不支援修改此配置' +ErrStateChange: '狀態修改失敗' +ErrRuleExist: '規則已存在' +ErrRuleNotExist: '規則不存在' +ErrParseIP: 'IP 格式錯誤' +ErrDefaultIP: 'default 為保留名稱,請更換其他名稱' +ErrGroupInUse: 'IP 群組被駭/白名單使用,無法刪除' +ErrGroupExist: 'IP 群組名稱已存在' +ErrIPRange: 'IP 範圍錯誤' +ErrIPExist: 'IP 已存在' urlDefense: 'URL 規則' -urlHelper: '禁止訪問的 URL' +urlHelper: '禁止訪問的URL' dirFilter: '目錄過濾' xss: 'XSS' phpExec: 'PHP 腳本執行' oneWordTrojan: '一句話木馬' -appFilter: '應用危險目錄過濾' +appFilter: '套用危險目錄過濾' webshell: 'Webshell' args: '參數規則' -protocolFilter: '協議過濾' +protocolFilter: '協定過濾' javaFileter: 'Java 危險檔案過濾' scannerFilter: '掃描器過濾' escapeFilter: '轉義過濾' -customRule: '自定義規則' +customRule: '自訂規則' httpMethod: 'HTTP 方法過濾' fileExt: '檔案上傳限制' -defaultIpBlack: '惡意 IP 組' +defaultIpBlack: '惡意IP 群組' cookie: 'Cookie 規則' urlBlack: 'URL 黑名單' uaBlack: 'User-Agent 黑名單' attackCount: '攻擊頻率限制' fileExtCheck: '檔案上傳限制' geoRestrict: '地區訪問限制' -unknownWebsite: '未授權域名訪問' +unknownWebsite: '未授權網域存取' notFoundCount: '404 頻率限制' headerDefense: 'Header 規則' defaultUaBlack: 'User-Agent 規則' @@ -253,132 +257,166 @@ methodWhite: 'HTTP 規則' captcha: '人機驗證' fiveSeconds: '5 秒驗證' vulnCheck: '補充規則' -acl: '自定義規則' +acl: '自訂規則' sql: 'SQL 注入' cc: '訪問頻率限制' defaultUrlBlack: 'URL 規則' sqlInject: 'SQL 注入' -ErrDBNotExist: "數據庫不存在" -allow: "允許" -deny: "禁止" +ErrDBNotExist: '資料庫不存在' +allow: '允許' +deny: '禁止' +OpenrestyNotFound: 'Openresty 未安裝' #task -TaskStart: "{{.name}} 開始 [START]" -TaskEnd: "{{.name}} 結束 [COMPLETED]" -TaskFailed: "{{.name}} 失敗" -TaskTimeout: "{{.name}} 超時" -TaskSuccess: "{{.name}} 成功" -TaskRetry: "開始第 {{.name}} 次重試" -SubTaskSuccess: "{{ .name }} 成功" -SubTaskFailed: "{{ .name }} 失敗: {{ .err }}" -TaskInstall: "安裝" -TaskUninstall: "卸載" -TaskCreate: "創建" -TaskDelete: "刪除" -TaskUpgrade: "升級" -TaskUpdate: "更新" -TaskRestart: "重啟" -TaskRollback: "回滚" -TaskPull: "拉取" -TaskBuild: "建構" -TaskPush: "推送" -TaskHandle: "執行" -Website: "網站" -App: "應用" -Runtime: "運行環境" -Database: "數據庫" -ConfigFTP: "創建 FTP 用戶 {{ .name }}" -ConfigOpenresty: "創建 Openresty 配置文件" -InstallAppSuccess: "應用 {{ .name }} 安裝成功" -ConfigRuntime: "配置運行環境" -ConfigApp: "配置應用" -SuccessStatus: "{{ .name }} 成功" -FailedStatus: "{{ .name }} 失敗 {{.err}}" -HandleLink: "處理應用關聯" -HandleDatabaseApp: "處理應用參數" -ExecShell: "執行 {{ .name }} 腳本" -PullImage: "拉取鏡像" -Start: "開始" -Run: "啟動" -Stop: "停止" -Image: "鏡像" -Container: "容器" -Compose: "編排" -AppLink: "關聯應用" -EnableSSL: "開啟 HTTPS" -AppStore: "應用商店" -TaskSync: "同步" -LocalApp: "本地應用" -SubTask: "子任務" -RuntimeExtension: "運行環境擴展" -TaskIsExecuting: "任務正在執行中" +TaskStart: '{{ .name }} 任務開始[START]' +TaskEnd: '{{ .name }} 任務結束[COMPLETED]' +TaskFailed: '{{ .name }} 任務失敗' +TaskTimeout: '{{ .name }} 逾時' +TaskSuccess: '{{ .name }} 任務成功' +TaskRetry: '開始第{{ .name }} 次重試' +SubTaskSuccess: '{{ .name }} 成功' +SubTaskFailed: '{{ .name }} 失敗: {{ .err }}' +TaskInstall: '安裝' +TaskUninstall: '卸載' +TaskCreate: '建立' +TaskDelete: '刪除' +TaskUpgrade: '升級' +TaskUpdate: '更新' +TaskRestart: '重啟' +TaskBackup: '備份' +TaskRecover: '恢復' +TaskRollback: '回滾' +TaskPull: '拉取' +TaskBuild: '建置' +TaskPush: '推送' +TaskHandle: '執行' +Website: '網站' +App: '應用程式' +Runtime: '運作環境' +Database: '資料庫' +ConfigFTP: '建立FTP 使用者{{ .name }}' +ConfigOpenresty: '建立Openresty 設定檔' +InstallAppSuccess: '應用程式{{ .name }} 安裝成功' +ConfigRuntime: '設定運行環境' +ConfigApp: '設定應用程式' +SuccessStatus: '{{ .name }} 成功' +FailedStatus: '{{ .name }} 失敗{{ .err }}' +HandleLink: '處理應用程式關聯' +HandleDatabaseApp: '處理應用程式參數' +ExecShell: '執行{{ .name }} 腳本' +PullImage: '拉取鏡像' +Start: '開始' +Run: '啟動' +Stop: '停止' +Image: '鏡像' +Compose: '編排' +Container: '容器' +AppLink: '關聯應用程式' +EnableSSL: '開啟HTTPS' +AppStore: '應用程式商店' +TaskSync: '同步' +LocalApp: '本地應用' +SubTask: '子任務' +RuntimeExtension: '運行環境擴充' +TaskIsExecuting: '任務正在運作' +CustomAppstore: '自訂應用程式倉庫' -# task - snapshot -Snapshot: "快照" -SnapDBInfo: "寫入 1Panel 資料庫資訊" -SnapCopy: "複製檔案&目錄 {{ .name }} " -SnapNewDB: "初始化資料庫 {{ .name }} 連接 " -SnapDeleteOperationLog: "刪除操作日誌" -SnapDeleteLoginLog: "刪除訪問日誌" -SnapDeleteMonitor: "刪除監控數據" -SnapRemoveSystemIP: "移除系統 IP" -SnapBaseInfo: "寫入 1Panel 基本資訊" -SnapInstallApp: "備份 1Panel 已安裝應用" -SnapDockerSave: "壓縮已安裝應用" -SnapLocalBackup: "備份 1Panel 本地備份目錄" -SnapCompressBackup: "壓縮本地備份目錄" -SnapPanelData: "備份 1Panel 資料目錄" -SnapCompressPanel: "壓縮資料目錄" -SnapCloseDBConn: "關閉資料庫連接" -SnapCompress: "製作快照檔案" -SnapCompressFile: "壓縮快照檔案" -SnapCheckCompress: "檢查快照壓縮檔案" -SnapCompressSize: "快照檔案大小 {{ .name }}" -SnapUpload: "上傳快照檔案" -SnapLoadBackup: "獲取備份帳號資訊" -SnapUploadTo: "上傳快照檔案到 {{ .name }}" -SnapUploadRes: "上傳快照檔案到 {{ .name }}" +# task - ai +OllamaModelPull: '拉取Ollama 模型{{ .name }} ' +OllamaModelSize: '取得Ollama 模型{{ .name }} 大小' + +# task - snapshot +Snapshot: '快照' +SnapDBInfo: '寫入1Panel 資料庫資訊' +SnapCopy: '複製檔案&目錄{{ .name }} ' +SnapNewDB: '初始化資料庫{{ .name }} 連線' +SnapDeleteOperationLog: '刪除操作日誌' +SnapDeleteLoginLog: '刪除存取日誌' +SnapDeleteMonitor: '刪除監控資料' +SnapRemoveSystemIP: '移除系統IP' +SnapBaseInfo: '寫入1Panel 基本資料' +SnapInstallApp: '備份1Panel 已安裝應用程式' +SnapDockerSave: '壓縮已安裝應用' +SnapLocalBackup: '備份1Panel 本機備份目錄' +SnapCompressBackup: '壓縮本機備份目錄' +SnapPanelData: '備份1Panel 資料目錄' +SnapCompressPanel: '壓縮資料目錄' +SnapWebsite: '備份1Panel 網站目錄' +SnapCloseDBConn: '關閉資料庫連線' +SnapCompress: '製作快照檔案' +SnapCompressFile: '壓縮快照檔案' +SnapCheckCompress: '檢查快照壓縮檔' +SnapCompressSize: '快照檔案大小{{ .name }}' +SnapUpload: '上傳快照檔案' +SnapLoadBackup: '取得備份帳號資訊' +SnapUploadTo: '上傳快照檔案到{{ .name }}' +SnapUploadRes: '上傳快照檔案到{{ .name }}' + +SnapshotRecover: '快照恢復' +RecoverDownload: '下載快照檔案' +Download: '下載' +RecoverDownloadAccount: '取得快照下載備份帳號{{ .name }}' +RecoverDecompress: '解壓縮快照壓縮檔' +Decompress: '解壓縮' +BackupBeforeRecover: '快照前備份系統相關資料' +Readjson: '讀取快照內Json 檔案' +ReadjsonPath: '取得快照內Json 檔案路徑' +ReadjsonContent: '讀取Json 檔案' +ReadjsonMarshal: 'Json 轉義處理' +RecoverApp: '恢復已安裝應用程式' +RecoverWebsite: '恢復網站目錄' +RecoverAppImage: '恢復快照鏡像備份' +RecoverCompose: '恢復其他編排內容' +RecoverComposeList: '取得所有待恢復編排' +RecoverComposeItem: '恢復編排{{ .name }}' +RecoverAppEmpty: '快照檔案中未發現應用程式鏡像備份' +RecoverBaseData: '恢復基礎資料及檔案' +RecoverDaemonJsonEmpty: '快照檔案及目前機器都不存在容器配置daemon.json 檔案' +RecoverDaemonJson: '恢復容器配置daemon.json 檔案' +RecoverDBData: '恢復資料庫資料' +RecoverBackups: '還原本機備份目錄' +RecoverPanelData: '恢復資料目錄' # task - container -ContainerNewCliet: "初始化 Docker 客戶端" -ContainerImagePull: "拉取容器鏡像 {{ .name }}" -ContainerRemoveOld: "刪除原容器 { .name }" -ContainerImageCheck: "檢查鏡像是否正常拉取" -ContainerLoadInfo: "獲取容器基本信息" -ContainerRecreate: "容器更新失敗,現在開始恢復原容器" -ContainerCreate: "創建新容器 {{ .name }}" -ContainerCreateFailed: "容器創建失敗,刪除失敗容器" -ContainerStartCheck: "檢查容器是否已啟動" +ContainerNewCliet: '初始化Docker Client' +ContainerImagePull: '拉取容器鏡像{{ .name }}' +ContainerRemoveOld: '刪除原容器{{ .name }}' +ContainerImageCheck: '檢查鏡像是否正常拉取' +ContainerLoadInfo: '取得容器基本資訊' +ContainerRecreate: '容器更新失敗,現在開始恢復原容器' +ContainerCreate: '建立新容器{{ .name }}' +ContainerCreateFailed: '容器建立失敗,刪除失敗容器' +ContainerStartCheck: '檢查容器是否已啟動' # task - image -ImageBuild: "鏡像構建" -ImageBuildStdoutCheck: "解析鏡像輸出內容" -ImaegBuildRes: "鏡像構建輸出:{{ .name }}" -ImagePull: "拉取鏡像" -ImageRepoAuthFromDB: "從數據庫獲取倉庫認證信息" -ImaegPullRes: "鏡像拉取輸出:{{ .name }}" -ImagePush: "推送鏡像" -ImageRenameTag: "修改鏡像 Tag" -ImageNewTag: "新鏡像 Tag {{ .name }}" -ImaegPushRes: "鏡像推送輸出:{{ .name }}" -ComposeCreate: "創建編排" -ComposeCreateRes: "編排創建輸出:{{ .name }}" +ImageBuild: '鏡像建置' +ImageBuildStdoutCheck: '解析鏡像輸出內容' +ImaegBuildRes: '鏡像建置輸出:{{ .name }}' +ImagePull: '拉取鏡像' +ImageRepoAuthFromDB: '從資料庫取得倉庫認證資訊' +ImaegPullRes: '鏡像拉取輸出:{{ .name }}' +ImagePush: '推播鏡像' +ImageRenameTag: '修改鏡像Tag' +ImageNewTag: '新鏡像Tag {{ .name }}' +ImaegPushRes: '鏡像推播輸出:{{ .name }}' +ComposeCreate: '建立編排' +ComposeCreateRes: '編排建立輸出:{{ .name }}' # task - website -BackupNginxConfig: "備份網站 OpenResty 配置檔案" -CompressFileSuccess: "壓縮目錄成功,壓縮為 {{.name}}" -CompressDir: "壓縮目錄" -DeCompressFile: "解壓檔案 {{ .name }}" -ErrCheckValid: "校驗備份檔案失敗,{{ .name }}" -Rollback: "回滾" -websiteDir: "網站目錄" -RecoverFailedStartRollBack: "恢復失敗,開始回滾" -AppBackupFileIncomplete: "備份文件不完整,缺少 app.json 或 app.tar.gz 文件" -AppAttributesNotMatch: "應用類型或名稱不一致" +BackupNginxConfig: '備份網站OpenResty 設定檔' +CompressFileSuccess: '壓縮目錄成功,壓縮為{{ .name }}' +CompressDir: '壓縮目錄' +DeCompressFile: '解壓縮檔案{{ .name }}' +ErrCheckValid: '校驗備份檔失敗,{{ .name }}' +Rollback: '回滾' +websiteDir: '網站目錄' +RecoverFailedStartRollBack: '恢復失敗,開始回溯' +AppBackupFileIncomplete: '備份檔案不完整缺少app.json 或app.tar.gz 檔案' +AppAttributesNotMatch: '應用程式類型或名稱不一致' -# alert -ErrAlert: "告警資訊格式錯誤,請檢查後重試!" -ErrAlertPush: "告警資訊推送錯誤,請檢查後重試!" -ErrAlertSave: "告警資訊保存錯誤,請檢查後重試!" -ErrAlertSync: "告警資訊同步錯誤,請檢查後重試!" -ErrAlertRemote: "告警資訊遠端錯誤,請檢查後重試!" \ No newline at end of file +#alert +ErrAlert: '警告訊息格式錯誤,請檢查後重試!' +ErrAlertPush: '警告訊息推送錯誤,請檢查後重試!' +ErrAlertSave: '警告訊息儲存錯誤,請檢查後重試!' +ErrAlertSync: '警告訊息同步錯誤,請檢查後重試!' +ErrAlertRemote: '警告訊息遠端錯誤,請檢查後重試!' \ No newline at end of file diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 751a87114..f30838ab5 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -52,12 +52,12 @@ Err1PanelNetworkFailed: '默认容器网络创建失败!{{ .detail }}' ErrFileParse: '应用 docker-compose 文件解析失败!' ErrInstallDirNotFound: '安装目录不存在,如需卸载,请选择强制卸载' AppStoreIsUpToDate: '应用商店已经是最新版本' -LocalAppVersionNull: '{{.name}} 应用未同步到版本!无法添加到应用列表' -LocalAppVersionErr: '{{.name}} 同步版本 {{.version}} 失败!{{ .err }}' -ErrFileNotFound: '{{.name}} 文件不存在' -ErrFileParseApp: '{{.name}} 文件解析失败 {{ .err }}' +LocalAppVersionNull: '{{ .name }} 应用未同步到版本!无法添加到应用列表' +LocalAppVersionErr: '{{ .name }} 同步版本 {{ .version }} 失败!{{ .err }}' +ErrFileNotFound: '{{ .name }} 文件不存在' +ErrFileParseApp: '{{ .name }} 文件解析失败 {{ .err }}' ErrAppDirNull: '版本文件夹不存在' -LocalAppErr: "应用 {{.name}} 同步失败!{{ .err }}" +LocalAppErr: "应用 {{ .name }} 同步失败!{{ .err }}" ErrContainerName: "容器名称已存在" ErrAppSystemRestart: "1Panel 重启导致任务终止" ErrCreateHttpClient: "创建请求失败 {{ .err }}" @@ -68,7 +68,7 @@ ErrHttpReqNotFound: "无法找到请求的资源 {{ .err }}" ErrImagePullTimeOut: '镜像拉取超时' ErrContainerNotFound: '{{ .name }} 容器不存在' ErrContainerMsg: '{{ .name }} 容器异常,具体请在容器页面查看日志' -ErrAppBackup: '{{ .name }} 应用备份失败 err {{ .err }}' +ErrAppBackup: '{{ .name }} 应用备份失败 {{ .err }}' ErrImagePull: '镜像拉取失败 {{ .err }}' ErrVersionTooLow: '当前 1Panel 版本过低,无法更新应用商店,请升级版本之后操作' ErrAppNameExist: '应用名称已存在' @@ -127,7 +127,7 @@ ErrDomainFormat: "{{ .name }} 域名格式不正确" ErrDefaultAlias: "default 为保留代号,请使用其他代号" ErrParentWebsite: "需要先删除子网站 {{ .name }}" ErrBuildDirNotFound: "构建目录不存在" -ErrImageNotExist: "运行环境 {{.name}} 镜像不存在,请重新编辑运行环境" +ErrImageNotExist: "运行环境 {{ .name }} 镜像不存在,请重新编辑运行环境" #ssl ErrSSLCannotDelete: "{{ .name }} 证书正在被网站使用,无法删除" @@ -144,9 +144,9 @@ ApplySSLStart: '开始申请证书,域名 [{{ .domain }}] 申请方式 [{{ .ty dnsAccount: "DNS 自动" dnsManual: "DNS 手动" http: "HTTP" -ApplySSLFailed: '申请 [{{ .domain }}] 证书失败, {{.detail}} ' +ApplySSLFailed: '申请 [{{ .domain }}] 证书失败, {{ .detail }} ' ApplySSLSuccess: '申请 [{{ .domain }}] 证书成功!!' -DNSAccountName: 'DNS 账号 [{{ .name }}] 厂商 [{{.type}}]' +DNSAccountName: 'DNS 账号 [{{ .name }}] 厂商 [{{ .type }}]' PushDirLog: '证书推送到目录 [{{ .path }}] {{ .status }}' ErrDeleteCAWithSSL: "当前机构下存在已签发证书,无法删除" ErrDeleteWithPanelSSL: "面板 SSL 配置使用此证书,无法删除" @@ -268,12 +268,12 @@ deny: "禁止" OpenrestyNotFound: "Openresty 未安装" #task -TaskStart: "{{.name}} 任务开始 [START]" -TaskEnd: "{{.name}} 任务结束 [COMPLETED]" -TaskFailed: "{{.name}} 任务失败" -TaskTimeout: "{{.name}} 超时" -TaskSuccess: "{{.name}} 任务成功" -TaskRetry: "开始第 {{.name}} 次重试" +TaskStart: "{{ .name }} 任务开始 [START]" +TaskEnd: "{{ .name }} 任务结束 [COMPLETED]" +TaskFailed: "{{ .name }} 任务失败" +TaskTimeout: "{{ .name }} 超时" +TaskSuccess: "{{ .name }} 任务成功" +TaskRetry: "开始第 {{ .name }} 次重试" SubTaskSuccess: "{{ .name }} 成功" SubTaskFailed: "{{ .name }} 失败: {{ .err }}" TaskInstall: "安装" @@ -341,6 +341,7 @@ SnapLocalBackup: "备份 1Panel 本地备份目录" SnapCompressBackup: "压缩本地备份目录" SnapPanelData: "备份 1Panel 数据目录" SnapCompressPanel: "压缩数据目录" +SnapWebsite: "备份 1Panel 网站目录" SnapCloseDBConn: "关闭数据库连接" SnapCompress: "制作快照文件" SnapCompressFile: "压缩快照文件" @@ -363,8 +364,8 @@ ReadjsonPath: "获取快照内 Json 文件路径" ReadjsonContent: "读取 Json 文件" ReadjsonMarshal: "Json 转义处理" RecoverApp: "恢复已安装应用" +RecoverWebsite: "恢复网站目录" RecoverAppImage: "恢复快照镜像备份" -RecoverAppList: "获取所有待恢复应用" RecoverCompose: "恢复其他编排内容" RecoverComposeList: "获取所有待恢复编排" RecoverComposeItem: "恢复编排 {{ .name }}" @@ -403,7 +404,7 @@ ComposeCreateRes: "编排创建输出:{{ .name }}" # task - website BackupNginxConfig: "备份网站 OpenResty 配置文件" -CompressFileSuccess: "压缩目录成功,压缩为 {{.name}}" +CompressFileSuccess: "压缩目录成功,压缩为 {{ .name }}" CompressDir: "压缩目录" DeCompressFile: "解压文件 {{ .name }}" ErrCheckValid: "校验备份文件失败,{{ .name }}" diff --git a/agent/init/dir/dir.go b/agent/init/dir/dir.go index 773a892b9..b415bf9b1 100644 --- a/agent/init/dir/dir.go +++ b/agent/init/dir/dir.go @@ -18,6 +18,7 @@ func Init() { global.Dir.LogDir, _ = fileOp.CreateDirWithPath(true, path.Join(baseDir, "1panel/log")) global.Dir.TmpDir, _ = fileOp.CreateDirWithPath(true, path.Join(baseDir, "1panel/tmp")) + global.Dir.AppDir, _ = fileOp.CreateDirWithPath(true, path.Join(baseDir, "1panel/apps")) global.Dir.ResourceDir, _ = fileOp.CreateDirWithPath(true, path.Join(baseDir, "1panel/resource")) global.Dir.AppResourceDir, _ = fileOp.CreateDirWithPath(true, path.Join(baseDir, "1panel/resource/apps")) global.Dir.AppInstallDir, _ = fileOp.CreateDirWithPath(true, path.Join(baseDir, "1panel/apps")) diff --git a/core/i18n/lang/en.yaml b/core/i18n/lang/en.yaml index 37fd76402..5375d3c3c 100644 --- a/core/i18n/lang/en.yaml +++ b/core/i18n/lang/en.yaml @@ -79,7 +79,7 @@ SubTaskFailed: "{{ .name }} failed: {{ .err }}" TaskInstall: "Install" TaskUpgrade: "Upgrade" SuccessStatus: "{{ .name }} succeeded" -FailedStatus: "{{ .name }} failed {{.err}}" +FailedStatus: "{{ .name }} failed {{ .err }}" Start: "Start" SubTask: "Subtask" diff --git a/core/i18n/lang/ja.yaml b/core/i18n/lang/ja.yaml index 99bf828fc..984cc2f63 100644 --- a/core/i18n/lang/ja.yaml +++ b/core/i18n/lang/ja.yaml @@ -80,7 +80,7 @@ SubTaskFailed: "{{ .name }} 失敗: {{ .err }}" TaskInstall: "インストール" TaskUpgrade: "アップグレード" SuccessStatus: "{{ .name }} 成功" -FailedStatus: "{{ .name }} 失敗 {{.err}}" +FailedStatus: "{{ .name }} 失敗 {{ .err }}" Start: "開始" SubTask: "サブタスク" @@ -108,13 +108,13 @@ AppVersion: "アプリバージョン" AppCommands: "アプリ関連のコマンド" AppInit: "アプリを初期化します" AppKeyVal: "アプリキー(英語のみをサポートする)" -AppCreateFileErr: "file {{.name}}作成に失敗した{{.err}}" -AppCreateDirErr: "Folder {{.name}}作成に失敗した{{.err}}" +AppCreateFileErr: "file {{ .name }}作成に失敗した{{ .err }}" +AppCreateDirErr: "Folder {{ .name }}作成に失敗した{{ .err }}" AppMissKey: "アプリキーがありません、-kを使用して指定します" AppMissVersion: "アプリバージョンがありません、-vを使用して指定します" AppVersionExist: "バージョンはすでに存在します!" AppCreateSuccessful: "創造は成功しました!" -AppWriteErr: "file {{.name}} write failed {{.err}}" +AppWriteErr: "file {{ .name }} write failed {{ .err }}" SudoHelper: "{{.cmd}}を使用するか、ルートユーザーに切り替えてください" ListenIPCommands: "リスニングIPを切り替えます" ListenIPv4: "IPv4で聞いてください" @@ -128,7 +128,7 @@ ResetIPs: "1パネル認定IP制限をキャンセルします" ResetDomain: "1パネルドメインバインディングをキャンセルします" RestoreCommands: "ロールバック1パネルサービスとデータ" RestoreNoSuchFile: "ロールバックに使用できるファイルはありません" -RestoreStep1: "(1/5){{.name}}ディレクトリからの1パネルサービスとデータの開始ロールバック..." +RestoreStep1: "(1/5){{ .name }}ディレクトリからの1パネルサービスとデータの開始ロールバック..." RestoreStep2: "(2/5)1パネルバイナリロールバックが成功しました" RestoreStep3: "(3/5)1パネルスクリプトロールバック成功" RestoreStep4: "(4/5)1パネルサービスロールバックが成功しました" @@ -141,28 +141,28 @@ UpdatePort: "パネルポートを更新します" UpdateUserNull: "エラー:パネルユーザーは空です!" UpdateUserBlank: "エラー:パネルユーザーにはスペースが含まれています!" UpdateUserFormat: "エラー:無効なパネルユーザー形式!英語、中国語、数字、_、長さ3〜30のみをサポートしています" -UpdateUserErr: "エラー:パネルユーザーの更新に失敗しました{{.err}}" +UpdateUserErr: "エラー:パネルユーザーの更新に失敗しました{{ .err }}" UpdateSuccessful: "更新成功!" -UpdateUserResult: "パネルユーザー:{{.name}}" -UpdatePasswordRead: "エラー:パネルパスワード情報の読み取りに失敗しました、{{.err}}" +UpdateUserResult: "パネルユーザー:{{ .name }}" +UpdatePasswordRead: "エラー:パネルパスワード情報の読み取りに失敗しました、{{ .err }}" UpdatePasswordNull: "エラー:パネルパスワードは空です!" UpdateUPasswordBlank: "エラー:パスワードにはスペースが含まれています!" UpdatePasswordFormat: "エラー:パネルパスワードは、文字、数字、特殊文字のみをサポートします!@#$%*_、。、、長さ8-30!" UpdatePasswordLen: "エラー:6文字より長くパスワードを入力してください!" UpdatePasswordRe: "パスワードを認証する:" -UpdatePasswordErr: "エラー:{{.err}}のパスワードの更新に失敗しました" +UpdatePasswordErr: "エラー:{{ .err }}のパスワードの更新に失敗しました" UpdatePasswordSame: "エラー:2つのパスワードが一致しません。チェックして再試行してください!" -UpdatePasswordResult: "パネルパスワード:{{.name}}" +UpdatePasswordResult: "パネルパスワード:{{ .name }}" UpdatePortFormat: "エラー:入力ポート番号は1〜65535でなければなりません!" UpdatePortUsed: "エラー:ポート番号はすでに使用されています。チェックして再試行してください!" -UpdatePortErr: "エラー:パネルポートの更新に失敗しました{{.err}}" -UpdatePortResult: "パネルポート:{{.name}}" -UpdatePortFirewallAdd: "ファイアウォールポートルールの追加に失敗した{{.err}}、ファイアウォールルールに{{.name}}ポートを手動で追加してください。" -UpdatePortFirewallDel: "エラー:ファイアウォールポートの削除に失敗しました、{{.err}}" -UpdatePortFirewallReload: "ファイアウォールのリロードに失敗しました{{.err}}、ファイアウォールを手動でリロードしてください。" +UpdatePortErr: "エラー:パネルポートの更新に失敗しました{{ .err }}" +UpdatePortResult: "パネルポート:{{ .name }}" +UpdatePortFirewallAdd: "ファイアウォールポートルールの追加に失敗した{{ .err }}、ファイアウォールルールに{{ .name }}ポートを手動で追加してください。" +UpdatePortFirewallDel: "エラー:ファイアウォールポートの削除に失敗しました、{{ .err }}" +UpdatePortFirewallReload: "ファイアウォールのリロードに失敗しました{{ .err }}、ファイアウォールを手動でリロードしてください。" UserInfo: "パネル情報を取得します" UserInfoAddr: "パネルアドレス:" UserInfoPassHelp: "ヒント:パスワードを変更するには、コマンドを実行できます。" -DBConnErr: "エラー:データベース接続の初期化に失敗しました、{{.err}}" +DBConnErr: "エラー:データベース接続の初期化に失敗しました、{{ .err }}" SystemVersion: "バージョン:" SystemMode: "モード:" diff --git a/core/i18n/lang/ko.yaml b/core/i18n/lang/ko.yaml index b07d96a0a..29161293a 100644 --- a/core/i18n/lang/ko.yaml +++ b/core/i18n/lang/ko.yaml @@ -79,7 +79,7 @@ SubTaskFailed: "{{ .name }} 실패: {{ .err }}" TaskInstall: "설치" TaskUpgrade: "업그레이드" SuccessStatus: "{{ .name }} 성공" -FailedStatus: "{{ .name }} 실패 {{.err}}" +FailedStatus: "{{ .name }} 실패 {{ .err }}" Start: "시작" SubTask: "서브 작업" diff --git a/core/i18n/lang/ms.yml b/core/i18n/lang/ms.yml index 2a56cd727..be23a38a6 100644 --- a/core/i18n/lang/ms.yml +++ b/core/i18n/lang/ms.yml @@ -79,7 +79,7 @@ SubTaskFailed: "{{ .name }} gagal: {{ .err }}" TaskInstall: "Pasang" TaskUpgrade: "Kemas kini" SuccessStatus: "{{ .name }} berjaya" -FailedStatus: "{{ .name }} gagal {{.err}}" +FailedStatus: "{{ .name }} gagal {{ .err }}" Start: "Mula" SubTask: "Tugas Sub" diff --git a/core/i18n/lang/pt-BR.yaml b/core/i18n/lang/pt-BR.yaml index f3e841e3b..59a49edaa 100644 --- a/core/i18n/lang/pt-BR.yaml +++ b/core/i18n/lang/pt-BR.yaml @@ -79,7 +79,7 @@ SubTaskFailed: "{{ .name }} falhou: {{ .err }}" TaskInstall: "Instalar" TaskUpgrade: "Atualizar" SuccessStatus: "{{ .name }} bem-sucedido" -FailedStatus: "{{ .name }} falhou {{.err}}" +FailedStatus: "{{ .name }} falhou {{ .err }}" Start: "Iniciar" SubTask: "Subtarefa" diff --git a/core/i18n/lang/ru.yaml b/core/i18n/lang/ru.yaml index a7bac8023..63167b8f6 100644 --- a/core/i18n/lang/ru.yaml +++ b/core/i18n/lang/ru.yaml @@ -79,7 +79,7 @@ SubTaskFailed: "{{ .name }} не удалось: {{ .err }}" TaskInstall: "Установить" TaskUpgrade: "Обновить" SuccessStatus: "{{ .name }} успешно" -FailedStatus: "{{ .name }} не удалось {{.err}}" +FailedStatus: "{{ .name }} не удалось {{ .err }}" Start: "Начать" SubTask: "Подзадача" diff --git a/core/i18n/lang/zh-Hant.yaml b/core/i18n/lang/zh-Hant.yaml index 11e50fb1a..00263f3b5 100644 --- a/core/i18n/lang/zh-Hant.yaml +++ b/core/i18n/lang/zh-Hant.yaml @@ -79,7 +79,7 @@ SubTaskFailed: "{{ .name }} 失敗: {{ .err }}" TaskInstall: "安裝" TaskUpgrade: "升級" SuccessStatus: "{{ .name }} 成功" -FailedStatus: "{{ .name }} 失敗 {{.err}}" +FailedStatus: "{{ .name }} 失敗 {{ .err }}" Start: "開始" SubTask: "子任務" diff --git a/core/i18n/lang/zh.yaml b/core/i18n/lang/zh.yaml index 3c94eb511..9c86e4b5d 100644 --- a/core/i18n/lang/zh.yaml +++ b/core/i18n/lang/zh.yaml @@ -34,7 +34,7 @@ ErrInternalServerKey: "服务内部错误:" #app CustomAppStoreFileValid: "应用商店包需要 .tar.gz 格式" -ErrFileNotFound: '{{.name}} 文件不存在' +ErrFileNotFound: '{{ .name }} 文件不存在' #backup ErrBackupInUsed: "该备份账号已在计划任务中使用,无法删除" @@ -80,7 +80,7 @@ SubTaskFailed: "{{ .name }} 失败: {{ .err }}" TaskInstall: "安装" TaskUpgrade: "升级" SuccessStatus: "{{ .name }} 成功" -FailedStatus: "{{ .name }} 失败 {{.err}}" +FailedStatus: "{{ .name }} 失败 {{ .err }}" Start: "开始" SubTask: "子任务" diff --git a/frontend/src/views/setting/snapshot/create/index.vue b/frontend/src/views/setting/snapshot/create/index.vue index 978de1aa6..d60014911 100644 --- a/frontend/src/views/setting/snapshot/create/index.vue +++ b/frontend/src/views/setting/snapshot/create/index.vue @@ -93,9 +93,9 @@ :props="defaultProps" show-checkbox > -