ErrInvalidParams: "Invalid request parameters: {{ .detail }}"
ErrTokenParse: "Token generation error: {{ .detail }}"
ErrInitialPassword: "Incorrect initial password"
ErrInternalServer: "Internal server error: {{ .detail }}"
ErrRecordExist: "Record already exists"
ErrRecordNotFound: "Record not found"
ErrStructTransform: "Type conversion failed: {{ .detail }}"
ErrNotLogin: "User not logged in: {{ .detail }}"
ErrPasswordExpired: "Current password has expired: {{ .detail }}"
ErrNotSupportType: "The current type is not supported: {{ .detail }}"
ErrProxy: "Request error, please check the status of this node: {{ .detail }}"
ErrApiConfigStatusInvalid: "API access is prohibited: {{ .detail }}"
ErrApiConfigKeyInvalid: "API key error: {{ .detail }}"
ErrApiConfigIPInvalid: "The API request IP is not on the whitelist: {{ .detail }}"
ErrApiConfigDisable: "This interface prohibits API calls: {{ .detail }}"
ErrApiConfigKeyTimeInvalid: "API timestamp error: {{ .detail }}"

# request
ErrNoSuchHost: "Unable to find the requested server {{ .err }}"
ErrHttpReqNotFound: "Unable to find the requested resource {{ .err }}"
ErrHttpReqFailed: "Request failed {{ .err }}"
ErrHttpReqTimeOut: "Request timed out {{ .err }}"
ErrCreateHttpClient: "Failed to create request {{ .err }}"

# common
ErrDemoEnvironment: "Demo server, this operation is prohibited!"
ErrCmdTimeout: "Command execution timeout!"
ErrEntrance: "Security entrance information error, please check and try again!"
ErrGroupIsDefault: "Default group, unable to delete"
ErrGroupIsInUse: "The group is in use and cannot be deleted."
ErrLocalDelete: "Cannot delete the local node!"
ErrPortInUsed: "The {{ .name }} port is already in use!"
ErrInternalServerKey: "Internal server error:"

# app
CustomAppStoreFileValid: "Application store package requires .tar.gz format"
ErrFileNotFound: "{{ .name }} file does not exist"

# backup
ErrBackupInUsed: "This backup account is used in scheduled tasks and cannot be deleted"
ErrBackupCheck: "Backup account connection test failed {{ .err }}"
ErrBackupLocal: "Local server backup account does not support this operation!"
ErrBackupPublic: "Detected that this backup account is not public, please check and try again!"
ErrOSSConn: "Unable to get the latest version, please check the server's external network connectivity."

#license
LicenseCheck: 'Check if the license is available'
ErrLicenseInUsed: 'The license is already bound. Please check and try again!'
ErrLicenseExpired: 'The license has expired. Please check and try again!'
ErrLicense: "License format error, please check and retry!"
ErrLicenseCheck: "License validation failed, please check and retry!"
ErrXpackVersion: "License validation failed, this license is version-limited, cannot import, please check and retry!"
ErrLicenseSave: "Failed to save license information, error {{ .err }}, please retry!"
ErrLicenseSync: "License synchronization failed, no license info detected in database!"
ErrLicenseExist: "This license record already exists. You can directly go to the license page for node binding."
ErrXpackNotFound: "This section is for professional edition, please import the license in Panel Settings - License"
ErrXpackExceptional: "This section is for professional edition, please sync license status in Panel Settings - License"
ErrXpackOutOfDate: "Current license has expired, please import the license again in Panel Settings - License"
ErrXpackLost: "License has reached the maximum retry count, please go to the [Panel Settings] [License] page and click the sync button manually to ensure the professional features work correctly"
ErrDeviceLost: "Required files for license verification are missing, please check and try again!"
ErrDeviceErr: "The current environment does not match the license import environment. Please edit the license and re-import!"
ErrXpackTimeout: "Request timeout, network connection might be unstable, please try again later!"
ErrUnbindMaster: "Detected nodes in node management, unable to unbind the current license, please remove nodes first and retry!"
ErrFreeNodeLimit: "Community version node limit reached, please go to www.lxware.cn/1panel to purchase and retry!"
ErrNodeBound: "This license is bound to another node, please check and retry!"
ErrNodeBoundDelete: "This license is bound and does not support delete operations. Please check and try again!"
ErrNodeBoundLimit: "The current free node has reached its limit, please check and try again!"
ErrLicenseFree: "Free nodes can only be used when the license is properly bound to a node. Please verify and try again!"
ErrLicenseUnbind: "Community Edition nodes detected for this license. Please unbind in [Panel Settings - License] and try again!"
ErrNoSuchNode: "Node information not found, please check and retry!"
ErrNodeUnbind: "This node is not within the license binding range, please check and retry!"
ErrNodeBind: "This node is already bound to a license, please check and retry!"
ErrNodeLocalRollback: "The primary node does not support direct rollback. Please manually execute the '1pctl restore' command to rollback!"

# alert
ErrAlertSync: "Alert information sync error, please check and retry!"

# task
TaskStart: "{{ .name }} task started [START]"
TaskEnd: "{{ .name }} task ended [COMPLETED]"
TaskFailed: "{{ .name }} task failed"
TaskTimeout: "{{ .name }} timed out"
TaskSuccess: "{{ .name }} task succeeded"
TaskRetry: "Starting retry {{ .name }}"
SubTaskSuccess: "{{ .name }} succeeded"
SubTaskFailed: "{{ .name }} failed: {{ .err }}"
TaskInstall: "Install"
TaskUpgrade: "Upgrade"
TaskSync: 'Synchronize'
TaskBackup: "Backup"
SuccessStatus: "{{ .name }} succeeded"
FailedStatus: "{{ .name }} failed {{ .err }}"
Start: "Start"
SubTask: "Subtask"
Skip: "Skip errors and continue..."

#script
ScriptLibrary: "Script Library"
ScriptSyncSkip: "Current script library is already the latest version!"
DownloadData: "Downloading script library file data.yaml"
DownloadPackage: "Downloading script library package"
AnalyticCompletion: "Analysis completed, now syncing to database..."

Node: "Node"
SyncNode: "Sync node data"
LocalName: "'local' name is only used for system local identification"
SyncPackageData: "Package sync data [{{ .detail }}]"
SyncPackageEncrypt: "Data package encryption"
SyncRequest: "Request node sync API"
SyncFailedRetry: "Node data sync timeout (attempt {{ .index }}), retrying..."
SyncFailed: "Sync failed, please manually sync in the node list!"

#upgrade node
NodeUpgrade: "Upgrade node {{ .name }}"
UpgradeCheck: "Check for node updates"
UpgradeCheckLocal: "Local nodes do not support batch upgrades, skipping..."
UpgradeCheckLatest: "The node is already the latest version, skipping..."
NewSSHClient: "Initializing SSH connection"
BackupBeforeUpgrade: "Backup data before upgrade"
UploadUpgradeFile: "Distribute upgrade files"
RestartAfterUpgrade: "Start service after upgrade"

#add node
MasterData: "Master Node Data"
LoadSftpClient: "Load SFTP Client"
PackageMasterData: "Generate master node backup package"
UploadBackup: "Upload backup data"
MvBackup: "Move data to backup directory"
TaskAddNode: "Add node"
LoadNodeArch: "Get node architecture info"
LoadNodeArchDetail: "Detected master node architecture: {{ .local }}, child node architecture: {{ .node }}"
LoadNodeUpgradeDetail: "Using the v1 version historical installation directory: {{ .baseDir }}, service listening port: {{ .port }}"
SyncAgentBaseInfo: "Sync basic node info"
GenerateSSLInfo: "Generate node SSL info"
ConnInfoNotMatch: "Connection info mismatch"
MakeAgentPackage: "Generate node installation package"
SendAgent: "Distribute node installation package"
StartService: "Start service"
NoBackupNode: "The backup node is currently empty. Please select a backup node to save and try again!"

#cmd
AppVersion: "App version"
AppCommands: "App related commands"
AppInit: "Initialize app"
AppKeyVal: "App key (only supports English)"
AppCreateFileErr: "File {{ .name }} creation failed {{ .err }}"
AppCreateDirErr: "Folder {{ .name }} creation failed {{ .err }}"
AppMissKey: "App key missing, use -k to specify"
AppMissVersion: "App version missing, use -v to specify"
AppVersionExist: "Version already exists!"
AppCreateSuccessful: "Creation successful!"
AppWriteErr: "File {{ .name }} write failed {{ .err }}"
SudoHelper: "Please use {{ .cmd }} or switch to root user"
ListenIPCommands: "Switch listening ip"
ListenIPv4: "Listen on IPv4"
ListenIPv6: "Listen on IPv6"
ListenChangeSuccessful: "Switch successful! Now listening on {{ .value }}"
ResetCommands: "Reset system info"
ResetMFA: "Cancel 1Panel two-factor authentication"
ResetHttps: "Cancel 1Panel https login"
ResetEntrance: "Cancel 1Panel secure entrance"
ResetIPs: "Cancel 1Panel authorized ip restrictions"
ResetDomain: "Cancel 1Panel domain binding"
RestoreCommands: "Rollback 1Panel service and data"
RestoreNoSuchFile: "No files available for rollback"
RestoreStep1: "(1/5) Starting rollback of 1Panel service and data from {{ .name }} directory..."
RestoreStep2: "(2/5) 1Panel binary rollback successful"
RestoreStep3: "(3/5) 1Panel script rollback successful"
RestoreStep4: "(4/5) 1Panel service rollback successful"
RestoreStep5: "(5/5) 1Panel data rollback successful"
RestoreSuccessful: "Rollback successful! Restarting service, please wait..."
UpdateCommands: "Update panel info"
UpdateUser: "Update panel user"
UpdatePassword: "Update panel password"
UpdatePort: "Update panel port"
UpdateUserNull: "Error: panel user is empty!"
UpdateUserBlank: "Error: panel user contains spaces!"
UpdateUserFormat: "Error: Invalid panel user format! Only supports English, Chinese, numbers, and _, length 3-30"
UpdateUserErr: "Error: Failed to update panel user, {{ .err }}"
UpdateSuccessful: "Update successful!"
UpdateUserResult: "Panel user: {{ .name }}"
UpdatePasswordRead: "Error: Failed to read panel password information, {{ .err }}"
UpdatePasswordNull: "Error: Panel password is empty!"
UpdateUPasswordBlank: "Error: Panel password contains spaces!"
UpdatePasswordFormat: "Error: Panel password only supports letters, numbers, special characters !@#$%*_,.?, length 8-30!"
UpdatePasswordLen: "Error: Please enter a password longer than 6 characters!"
UpdatePasswordRe: "Confirm password:"
UpdatePasswordErr: "Error: Failed to update panel password, {{ .err }}"
UpdatePasswordSame: "Error: The two passwords do not match, please check and try again!"
UpdatePasswordResult: "Panel password: {{ .name }}"
UpdatePortFormat: "Error: The input port number must be between 1 and 65535!"
UpdatePortUsed: "Error: The port number is already in use, please check and try again!"
UpdatePortErr: "Error: Failed to update panel port, {{ .err }}"
UpdatePortResult: "Panel Port: {{ .name }}"
UpdatePortFirewallAdd: "Failed to add firewall port rule, {{ .err }}, please manually add the {{ .name }} port to the firewall rules."
UpdatePortFirewallDel: "Error: Failed to delete firewall port, {{ .err }}"
UpdatePortFirewallReload: "Failed to reload the firewall, {{ .err }}, please manually reload the firewall."
UserInfo: "Get panel information"
UserInfoAddr: "Panel address: "
UserInfoPassHelp: "Tip: To change the password, you can execute the command: "
DBConnErr: "Error: Failed to initialize database connection, {{ .err }}"
SystemVersion: "version: "
SystemMode: "mode: "

#mobile app
ErrVerifyToken: 'Token verification error, please reset and scan again.'
ErrInvalidToken: 'Invalid token, please reset and scan again.'
ErrExpiredToken: 'Token has expired, please reset and scan again.'

#cluster
ErrMasterDelete: "Unable to delete the master node, please delete the slave nodes first."
ClusterNameIsExist: "Cluster name already exists."
AppStatusUnHealthy: "Application status acquisition is abnormal, please check the installation node status in the node list."
MasterNodePortNotAvailable: "Node {{ .name }} port {{ .port }} connectivity verification failed, please check firewall/security group settings and master node status."
ClusterMasterNotExist: "The master node of the cluster is disconnected, please delete the child nodes."