# 基础错误
ErrInvalidParams: "请求参数错误: {{ .detail }}"
ErrTokenParse: "Token 生成错误: {{ .detail }}"
ErrInitialPassword: "原密码错误"
ErrInternalServer: "服务内部错误: {{ .detail }}"
ErrInternalServerKey: "服务内部错误:"
ErrRecordExist: "记录已存在"
ErrRecordNotFound: "记录未能找到"
ErrStructTransform: "类型转换失败: {{ .detail }}"
ErrNotSupportType: "系统暂不支持当前类型: {{ .name }}"
ErrDemoEnvironment: "演示服务器，禁止此操作!"
ErrCmdTimeout: "命令执行超时！"
ErrPortInUsed: "{{ .name }} 端口已被占用！"
ErrFileNotFound: '{{ .name }} 文件不存在'
ErrReqFailed: "{{.name}} 请求失败: {{ .err }}"

# 请求与安全入口
ErrNoSuchHost: "无法找到请求的服务器 {{ .err }}"
ErrHttpReqNotFound: "无法找到请求的资源 {{ .err }}"
ErrHttpReqFailed: "请求失败 {{ .err }}"
ErrHttpReqTimeOut: "请求超时 {{ .err }}"
ErrCreateHttpClient: "创建请求失败 {{ .err }}"
ErrProxy: "请求错误，请检查该节点状态: {{ .detail }}"
ErrProxySetting: "代理服务器信息不可用 {{ .err }}，请检查后重试！"
ErrEntrance: "安全入口信息错误，请检查后重试！"
ErrEntranceFormat: "暂不支持安全入口 {{ .name }} ，请检查后重试！"

# 登录与安全
ErrNotLogin: "用户未登录: {{ .detail }}"
ErrSessionDataNotFound: "当前会话已过期！"
ErrSessionDataFormat: "当前会话数据格式异常！"
ErrPasswordExpired: "当前密码已过期: {{ .detail }}"
ErrLoginLocked: "失败次数过多，当前登录已被临时锁定 5 分钟。"
ErrApiConfigStatusInvalid: "API 接口禁止访问: {{ .detail }}"
ErrApiConfigKeyInvalid: "API 接口密钥错误: {{ .detail }}"
ErrApiConfigIPInvalid: "调用 API 接口 IP 不在白名单: {{ .detail }}"
ErrApiConfigDisable: "此接口禁止使用 API 接口调用: {{ .detail }}"
ErrApiConfigKeyTimeInvalid: "API 接口时间戳错误: {{ .detail }}"
ErrPasskeyDisabled: "需开启 HTTPS 才能使用 Passkey"
ErrPasskeyNotConfigured: "尚未配置 Passkey"
ErrPasskeyLimit: "Passkey 数量已达上限（最多 5 个）"
ErrPasskeySession: "Passkey 会话已过期或无效"
ErrPasskeyDuplicate: "Passkey 已存在"
ErrPasskeyVerify: "Passkey 验证失败"
ErrOIDCNotEnabled: "OIDC 认证尚未启用"
ErrOIDCConfigInvalid: "OIDC 配置无效"
ErrOIDCConfigChanged: "OIDC 配置已变更，请重新发起认证"
ErrOIDCDiscoveryFailed: "OIDC Provider 配置发现失败"
ErrOIDCIssuerMismatch: "OIDC Issuer 与配置的 Issuer 不一致"
ErrOIDCUnsupportedPKCE: "OIDC Provider 不支持要求的 PKCE 方式"
ErrOIDCUnsupportedSigningAlgorithm: "不支持该 OIDC 签名算法"
ErrOIDCInvalidState: "OIDC 登录状态无效或已被使用"
ErrOIDCLoginExpired: "OIDC 登录请求已过期，请重试"
ErrOIDCTokenExchange: "OIDC 授权码换取 Token 失败"
ErrOIDCTokenValidation: "OIDC Token 校验失败"
ErrOIDCUserInfoValidation: "OIDC 用户信息校验失败"
ErrOIDCNameClaimMissing: "配置的 OIDC 用户名 Claim 缺失或无效"
ErrOIDCNameConflictLocal: "OIDC 用户名与本地用户冲突"
ErrOIDCNameConflictLDAP: "OIDC 用户名与 LDAP 用户冲突"
ErrOIDCNameConflictOIDC: "OIDC 用户名与其他 OIDC 身份冲突"
ErrOIDCDefaultRoleInvalid: "OIDC 配置的默认角色不可用"
ErrOIDCPrivateAddressDenied: "OIDC 端点地址不符合网络安全策略"
ErrOIDCTLSValidation: "OIDC TLS 证书校验失败"
ErrOIDCTestExpired: "OIDC 浏览器测试已过期，请重新测试"
ErrOIDCLocalCredentialsReadonly: "OIDC 用户名和密码由身份提供方管理，不能在本地修改。"
ErrOIDCPasswordExpirationUnsupported: "OIDC 用户不使用本地密码过期策略。"
ErrOIDCInternal: "OIDC 认证发生内部错误，请稍后重试。"

# 用户与权限
ErrNoSuchUser: "未能找到该用户信息，请检查后重试！"
ErrToMaster: "该用户无权限对主节点进行该操作，请检查后重试！"
ErrToNode: "该用户无权限对该节点进行该操作，请检查后重试！"
ErrRBAC: "用户权限不足，无法进行该操作，请检查后重试！"
ErrNoneNode: "该用户无任何节点权限，请联系管理员或检查后重试！"
ErrOnlySuperAdmin: "仅超级管理员支持该功能！"
ErrRolePresetCannotDelete: "系统预设角色，无法删除"
ErrRolePresetCannotUpdate: "系统预设角色，无法修改"
ErrRoleBoundToUser: "角色已被用户绑定，无法删除"
ErrRolePresetCannotBind: "系统预设角色，无法分配给用户"
ErrNodeAdminMasterForbidden: "主节点不允许添加节点管理员权限"
ErrSuperAdminCannotDelete: "超级管理员用户无法删除"
ErrGroupIsDefault: "默认分组，无法删除"
ErrGroupIsInUse: "分组正被使用，无法删除"

# 许可证
LicenseCheck: '检查许可证是否可用'
ErrLicenseInUsed: '检查到该许可证已被绑定，请检查后重试！'
ErrLicenseExpired: '检查到该许可证已过期，请检查后重试！'
ErrLicense: "许可证格式错误，请检查后重试！"
ErrLicenseCheck: "许可证校验失败，请检查后重试！"
ErrXpackVersion: "许可证校验失败，该许可证受版本限制，无法成功导入，请检查后重试！"
ErrLicenseSave: "许可证信息保存失败，错误 {{ .err }}，请重试！"
ErrLicenseSync: "许可证信息同步失败，数据库中未检测到许可证信息！"
ErrLicenseExist: "该许可证记录已存在，您可直接前往许可证页面进行节点绑定。"
ErrXpackNotFound: "该部分为专业版功能，请先在 面板设置-许可证 界面导入许可证"
ErrXpackExceptional: "该部分为专业版功能，请先在 面板设置-许可证 界面同步许可证状态"
ErrXpackLost: "许可证已达到最大重试次数，请进入【面板设置】【许可证】页面手动点击同步按钮，以确保专业版功能正常使用"
ErrEnterpriseLicenseRequired: "企业版许可证未导入，请先导入许可证"
ErrDeviceLost: "许可证校验必要文件丢失，请检查后重试！"
ErrDeviceErr: "当前环境与许可证导入环境不一致，请编辑许可证重新导入！"
ErrXpackTimeout: "请求超时，网络连接可能不稳定，请稍后再试！"
ErrUnbindMaster: "检测到节点管理内存在专业版节点，无法解绑当前许可证，请先移除或解绑后重试！"
ErrFreeNodeLimit: "可添加节点数量已达到上限，请购买后重试！"
ErrNodeBound: "该许可证已绑定到其他节点，请检查后重试！"
ErrNodeBoundDelete: "该许可证已被绑定，不支持删除操作，请检查后重试！"
ErrNodeBoundLimit: "当前免费节点已经达到上限，请检查后重试！"
ErrLicenseFree: "仅当许可证正常绑定到节点后，才能使用其免费节点，请检查后重试！"
ErrLicenseUnbind: "检测到该许可证存在社区版节点，请在 [ 面板设置 - 许可证 ] 中解绑后重试！"
ErrLicenseBindCount: "新许可证免费节点数量小于当前已绑定的社区版节点数量，请检查后重试！"
ErrNoSuchNode: "未能找到该节点信息，请检查后重试！"
ErrNodeUnbind: "检测到该节点未在许可证绑定范围内，请检查后重试！"
ErrNodeBind: "检测到该节点已绑定许可证，请检查后重试！"
ErrNodeLocalRollback: "主节点暂不支持直接回滚，请手动执行 1pctl restore 命令回滚！"
ErrIntlLicense: "当前版本暂不支持导入国际版许可证，敬请期待！"
InvalidRequestBodyType: "请求体格式错误，请检查请求内容是否符合格式要求后重试！"
InvalidLicenseCodeType: "提供的许可证格式错误，请检查后重试！"
LicenseNotFoundType: "许可证不存在，系统中未找到与提供许可证匹配的记录，请检查后重试！"
LicenseRevokedType: "请求的许可证已被废弃，无法使用，请检查后重试！"
LicenseExpiredType: "许可证已超过有效期，请续费或在 面板设置-许可证 界面重新导入许可证后重试！"
LicenseProductMismatchType: "许可证与当前请求的产品或服务不匹配！"
InvalidAssigneeType: "许可证分配的目标用户或设备信息无效，请检查后重试！"
LicenseUsageNotFoundType: "无使用记录，当前许可证尚未被激活或使用，请检查后重试！"
LicenseUsageLimitExceededType: "该许可证已绑定到其他节点，请检查后重试！"

# 节点与集群
MasterNode: "主节点"
Node: "节点"
ErrLocalDelete: "无法删除本地节点！"
ErrMasterDelete: "无法删除主节点，请先删除从节点"
ClusterNameIsExist: "集群名称已存在"
AppStatusUnHealthy: "应用获取状态异常，请在节点列表检查安装节点状态"
MasterNodePortNotAvailable: "节点 {{ .name }} 端口 {{ .port }} 连通性校验失败，请检查防火墙/安全组设置和主节点状态"
ClusterMasterNotExist: "集群主节点失联，请删除子节点"

# 虚拟机
ErrVMNotFound: "虚拟机不存在"
ErrVMAlreadyExists: "虚拟机已存在"
ErrVMImageAlreadyExists: "虚拟机镜像文件已存在: {{ .detail }}"
ErrVMStoragePathInUse: "存储池路径已被 [{{ .name }}] 使用"
ErrVMHelperNotFound: "1panel-kvm 不存在"
ErrVMBridgeManaged: "桥接名称已被 libvirt 或 Docker 管理"
ErrVMNetworkInUse: "网络正在被使用，无法删除"
ErrVMStorageInUse: "存储池正在被使用，无法删除"
ErrVMStorageNameCannotChange: "存储池名称无法修改"
ErrVMStoragePathCannotChange: "存储池路径无法修改"
ErrVMRunning: "虚拟机正在运行"
ErrVMLibvirtConnect: "连接 libvirt 失败: {{ .detail }}"
ErrVMPermission: "没有虚拟机操作权限: {{ .detail }}"
ErrVMNetworkNotFound: "虚拟机网络不存在: {{ .detail }}"
ErrVMInvalidPath: "虚拟机路径非法: {{ .detail }}"
ErrVMInvalidInput: "虚拟机参数非法: {{ .detail }}"
ErrVMCommandFailed: "虚拟机命令执行失败: {{ .err }}"
VMCreateTask: "创建虚拟机 [{{ .name }}]"
VMCreateFromTemplateTask: "从模板创建虚拟机 [{{ .name }}]"
VMUpdateTask: "更新虚拟机 [{{ .name }}]"
VMRenameTask: "重命名虚拟机 [{{ .name }}] 为 [{{ .newName }}]"
VMDeleteTask: "删除虚拟机 [{{ .name }}]"
VMTemplateCreateTask: "转存虚拟机 [{{ .name }}] 为模板 [{{ .template }}]"
VMTemplateDeleteTask: "删除虚拟机模板 [{{ .name }}]"
VMForceDeleteMetadataOnly: "1panel-kvm 不存在，仅强制删除虚拟机 [{{ .name }}] 元数据"
VMForceDeleteMetadataAfterLibvirtFailed: "从 libvirt 删除虚拟机 [{{ .name }}] 失败，强制删除元数据: {{ .err }}"
VMForceDeleteDiskFailed: "强制删除虚拟机磁盘文件 [{{ .path }}] 失败: {{ .err }}"
VMForceDeleteDiskSuccess: "已强制删除虚拟机磁盘文件 [{{ .path }}]"
VMSnapshotCreateTask: "创建虚拟机 [{{ .vm }}] 快照 [{{ .snapshot }}]"
VMSnapshotCreateStep: "创建虚拟机快照 [{{ .snapshot }}]"
VMSnapshotRecoverTask: "恢复虚拟机 [{{ .vm }}] 快照 [{{ .snapshot }}]"
VMSnapshotRecoverStep: "恢复虚拟机快照 [{{ .snapshot }}]"
VMSnapshotDeleteTask: "删除虚拟机 [{{ .vm }}] 快照 [{{ .snapshot }}]"
VMSnapshotDeleteStep: "删除虚拟机快照 [{{ .snapshot }}]"

# 应用
CustomAppStoreFileValid: "应用商店包需要 .tar.gz 格式"
AppBackup: "应用备份"
AppBackupPush: "传输应用备份文件 {{.file}} 到节点 {{ .name }}"
ErrSourceTargetSame: "源节点和目标节点不能相同！"
AppInstall: "在 {{ .targetNode }} 节点安装应用 {{ .name }}"
AppInstallCheck: "检查应用安装环境"

# 备份
ErrBackupInUsed: "该备份账号已在计划任务中使用，无法删除"
ErrBackupCheck: "备份账号测试连接失败 {{ .err }}"
ErrBackupLocal: "本地服务器备份账号暂不支持该操作！"
ErrBackupPublic: "检测到该备份账号为非公用，请检查后重试！"
ErrOSSConn: "无法获取最新版本，请确认服务器是否能够连接外部网络。"
MvBackup: "移动数据到备份目录"

# 告警
ErrAlertSync: "告警信息同步错误，请检查后重试！"

# AI 网关
ErrAIProxyUserGroupIsDefault: "默认用户组无法删除"
ErrAIProxyUserGroupInUse: "用户组正被使用，无法删除"
ErrAIProxyUserGroupExists: "用户组名称已存在"
ErrAIProxyBackendAccountExists: "该模型账号已导入 AI 网关账号池，请勿重复导入"
ErrAIProxyModelGroupInUse: "模型组正在使用，无法删除"
ErrAIProxyModelGroupExists: "模型组名称已存在"
ErrAIProxySensitiveGroupInUse: "敏感词分组正在使用，无法删除"
ErrAIProxySensitiveGroupExists: "敏感词分组名称已存在"
AIProxyContentPolicyViolation: "抱歉，我无法处理该请求。请求内容可能不符合内容合规要求，请调整后重试。"
AIBenchmarkRun: "执行 AI 基准测试"

# 任务
TaskStart: "{{ .name }} 任务开始 [START]"
TaskEnd: "{{ .name }} 任务结束 [COMPLETED]"
TaskFailed: "{{ .name }} 任务失败"
TaskTimeout: "{{ .name }} 超时"
TaskSuccess: "{{ .name }} 任务成功"
TaskRetry: "开始第 {{ .name }} 次重试"
SubTaskSuccess: "{{ .name }} 成功"
SubTaskFailed: "{{ .name }} 失败: {{ .err }}"
TaskInstall: "安装"
TaskUpgrade: "升级"
TaskSync: "同步"
TaskSyncForNode: "同步节点数据"
TaskBackup: "备份"
TaskPush: "推送"
TaskRsync: "同步"
SuccessStatus: "{{ .name }} 成功"
FailedStatus: "{{ .name }} 失败 {{ .err }}"
Start: "开始"
SubTask: "子任务"
Skip: "忽略错误并继续..."
Success: "成功"

# AI 网关智能路由任务
AIProxySmartRouteCreateTask: "创建 AI 网关智能路由样本"
AIProxySmartRouteCreateSubTask: "创建样本并生成向量"
AIProxySmartRouteCreateStart: "开始创建样本，共 {{ .total }} 条"
AIProxySmartRouteCreateFailed: "[{{ .current }}/{{ .total }}] 创建失败：type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteCreateSuccess: "[{{ .current }}/{{ .total }}] 创建成功：sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteCreateComplete: "创建完成：成功 {{ .success }} 条，失败 {{ .failed }} 条"
AIProxySmartRouteCreateError: "创建样本失败：失败 {{ .failed }} 条，最后错误"
AIProxySmartRouteRebuildTask: "重建 AI 网关智能路由样本向量"
AIProxySmartRouteRebuildSubTask: "重建样本向量"
AIProxySmartRouteEmbeddingRequired: "Embedding 地址和模型不能为空"
AIProxySmartRouteRebuildStart: "开始重建样本向量，共 {{ .total }} 条"
AIProxySmartRouteRebuildFailed: "[{{ .current }}/{{ .total }}] 重建失败：sampleID={{ .id }} type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteRebuildSuccess: "[{{ .current }}/{{ .total }}] 重建成功：sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteRebuildComplete: "重建完成：成功 {{ .success }} 条，失败 {{ .failed }} 条"
AIProxySmartRouteRebuildError: "重建样本向量失败：失败 {{ .failed }} 条，最后错误"

# 智能体批量任务
BatchInstallAgent: "批量安装智能体"
DispatchAgentInstallTasks: "下发智能体安装任务"
BatchUpgradeAgent: "批量升级智能体"
DispatchAgentUpgradeTasks: "下发智能体升级任务"
BatchAgentInstallDispatchFailed: "{{ .node }} 节点下发 {{ .agentType }} 安装任务失败 Message: {{ .err }}"
BatchAgentInstallSubmitted: "{{ .node }} 节点下发 {{ .agentType }} 安装任务成功！"
BatchAgentUpgradeDispatchFailed: "{{ .node }} 节点下发 {{ .agentType }} 升级任务失败 Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "{{ .node }} 节点 {{ .agent }} 已是目标版本，跳过"
BatchAgentUpgradeSubmitted: "{{ .node }} 节点下发 {{ .agent }} 升级任务成功！"
BatchAgentUpgradeFailed: "{{ .node }} 节点下发 {{ .agent }} 升级任务失败 Message: {{ .err }}"
BatchInstallAgentSkill: "批量下发 Skill"
DispatchAgentSkillInstallTasks: "下发 Skill 安装任务"
BatchAgentSkillDispatchFailed: "{{ .node }} 节点下发 {{ .skill }} 到 {{ .target }} 失败 Message: {{ .err }}"
BatchAgentNoAgentsFound: "{{ .node }} 节点未发现 {{ .agentType }} 智能体，跳过"
BatchAgentSkillSkipped: "{{ .node }} 节点 {{ .agent }} 跳过 Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "{{ .node }} 节点下发 {{ .skill }} 到 {{ .agent }} 安装任务成功！"
BatchAgentSkillInstallFailed: "{{ .node }} 节点下发 {{ .skill }} 到 {{ .agent }} 安装任务失败 Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "{{ .node }} 节点下发 {{ .agentType }} {{ .operate }}任务失败 Message: {{ .err }}"
BatchAgentOperateSkipped: "{{ .node }} 节点 {{ .agent }} 跳过 Message: {{ .msg }}"
BatchAgentOperateSubmitted: "{{ .node }} 节点下发 {{ .agent }} {{ .operate }}任务成功！"
BatchAgentOperateFailed: "{{ .node }} 节点下发 {{ .agent }} {{ .operate }}任务失败 Message: {{ .err }}"
BatchStartAgent: "批量启动智能体"
DispatchAgentStartTasks: "下发智能体启动任务"
BatchStopAgent: "批量停止智能体"
DispatchAgentStopTasks: "下发智能体停止任务"
BatchRestartAgent: "批量重启智能体"
DispatchAgentRestartTasks: "下发智能体重启任务"
BatchDeleteAgent: "批量删除智能体"
DispatchAgentDeleteTasks: "下发智能体删除任务"
AgentOperateStart: "启动"
AgentOperateStop: "停止"
AgentOperateRestart: "重启"
AgentOperateDelete: "删除"

# 应用与技能任务
PushAppInstallTaskToNode: "推送应用安装任务到节点 [{{ .name }}]"
AppInstallTask: "应用安装任务"
PushAppFailed: "推送应用安装任务失败"
SkillHubInstallTask: "安装技能 [{{ .name }}]"
SkillHubInstallToTarget: "安装技能 [{{ .name }}] 到目标 [{{ .target }}]"

# 脚本库
ScriptLibrary: "脚本库"
RemoteScriptLibrary: "远程脚本库"
ScriptSyncSkip: "检查到当前脚本库已是最新版本！"
DownloadData: "下载脚本库文件 data.yaml"
DownloadPackage: "下载脚本库压缩包"
AnalyticCompletion: "解析成功，现在开始同步到数据库..."

# 节点同步
SyncNode: "同步数据到节点 {{ .name }}"
LocalName: "local 名称仅用于系统本机标识"
SyncPackageData: "打包同步数据"
SyncPackageEncrypt: "数据包加密"
SyncRequest: "请求节点同步接口"
SyncFailedRetry: "第 {{ .index }} 次同步节点数据失败超时，正在重试..."
SyncFailed: "同步失败，请在节点列表中手动同步！"
SyncSystemProxy: "系统代理配置"
SyncScripts: "脚本库"
SyncBackupAccounts: "备份账号"
SyncAlertSetting: "告警设置"
SyncCustomApp: "自定义应用"
SyncLanguage: "系统语言"
SyncEdition: "运行区域"

# 节点升级
NodeUpgrade: "升级节点 {{ .name }}"
UpgradeCheck: "检查节点更新"
UpgradeCheckLocal: "本地节点不支持批量升级，跳过..."
UpgradeCheckLatest: "检测到该节点已是最新版本，跳过..."
NewSSHClient: "初始化 SSH 连接"
BackupBeforeUpgrade: "升级前备份数据"
UploadUpgradeFile: "下发升级所需文件"
RestartAfterUpgrade: "升级后启动服务"
LoadAutoUpgradeNodesFailed: "加载自动升级节点失败，错误: {{ .err }}"
AutoUpgradeNodes: "自动升级节点: {{ .nodes }}"
UpdateAutoUpgradeNodesStatusFailed: "更新自动升级节点状态失败，错误: {{ .err }}"

# 添加节点
MasterData: "主节点数据"
LoadSftpClient: "获取上传客户端"
PackageMasterData: "生成主节点备份压缩包"
UploadBackup: "上传备份数据"
TaskAddNode: "添加节点"
LoadNodeArch: "获取节点架构信息"
LoadNodeArchDetail: "检测到主节点架构: {{ .local }}，子节点架构: {{ .node }}"
LoadNodeUpgradeDetail: "使用 v1 版本历史安装目录:  {{ .baseDir }}，服务监听端口: {{ .port }}"
SyncAgentBaseInfo: "同步节点基础数据"
GenerateSSLInfo: "生成节点 SSL 信息"
ConnInfoNotMatch: "连接信息不匹配"
MakeAgentPackage: "生成节点安装包"
SendAgent: "下发节点安装包"
StartService: "启动服务"
NoBackupNode: "当前备份节点为空，请选择备份节点保存后重试！"

# 节点文件与镜像同步
LocalNodeIpFailed: "无法获取主节点 IP ，请编辑主节点增加 IP 地址和 SSH 认证信息"
HandlePrivateKey: "处理节点私钥"
HandlePublicKey: "处理节点公钥"
ExchangeFile: "开始从 {{ .source }} 节点同步 {{ .sourcePath }} 到 {{ .dest  }} 节点 {{ .destPath }}"
NodeFile: "节点文件"
ImageSyncTaskName: "镜像同步 {{ .count }} 张镜像"
SSLSyncTaskName: "证书同步 {{ .count }} 张证书"
AppSyncTaskName: "应用同步 {{ .name }}"
SSLSyncToNode: "推送证书 [{{ .cert }}] 到节点 [{{ .node }}]"
ImageSyncSave: "保存镜像 {{ .image }}"
ImageSyncSaveTags: "保存镜像标签 {{ .tags }}"
ImageSyncToNode: "同步镜像 {{ .image }} 到节点 {{ .node }}"
ImageSyncLoad: "在节点 {{ .node }} 加载镜像 {{ .image }}"
ImageSyncClean: "清理镜像 {{ .image }} 临时文件"
ImageSyncNoTag: "镜像 {{ .image }} 没有标签，将使用镜像 ID 保存"
ImageSyncFrontendTagsIgnored: "镜像 {{ .image }} 在源节点未查询到标签，已忽略前端传入标签"
ImageSyncHandlePrivateKey: "处理镜像同步节点私钥"
ImageSyncHandlePublicKey: "处理镜像同步节点公钥"
ImageSyncTransfer: "开始传输镜像临时文件：{{ .source }}:{{ .sourcePath }} -> {{ .dest }}:{{ .destPath }}"

# 命令行
SudoHelper: "请使用 {{ .cmd }} 或切换到 root 用户"
UsernameNeed: "企业版必须指定 --username"
DBConnErr: "错误: 初始化数据库连接失败，{{ .err }}"
SystemVersion: "版本: "
SystemMode: "模式: "

# 命令行 - 应用
AppVersion: "应用版本"
AppCommands: "应用相关命令"
AppInit: "初始化应用"
AppKeyVal: "应用的 key（仅支持英文）"
AppCreateFileErr: "文件 {{ .name }} 创建失败 {{ .err }}"
AppCreateDirErr: "文件夹 {{ .name }} 创建失败 {{ .err }}"
AppMissKey: "应用的 key 缺失，使用 -k 指定"
AppMissVersion: "应用版本缺失，使用 -v 指定"
AppVersionExist: "版本已存在！"
AppCreateSuccessful: "创建成功！"
AppWriteErr: "文件 {{ .name }} 写入失败 {{ .err }}"

# 命令行 - 监听 IP
ListenIPCommands: "切换监听 IP"
ListenIPv4: "监听 IPv4"
ListenIPv6: "监听 IPv6"
ListenChangeSuccessful: "切换成功！已切换至监听 {{ .value }}"

# 命令行 - 重置
ResetCommands: "重置系统信息"
ResetMFA: "取消 1Panel 两步验证"
ResetHttps: "取消 1Panel https 方式登录"
ResetEntrance: "取消 1Panel 安全入口"
ResetIPs: "取消 1Panel 授权 IP 限制"
ResetDomain: "取消 1Panel 访问域名绑定"
ResetPasskey: "清空 1Panel 通行密钥"

# 命令行 - 用户
UserList: "获取 1Panel 用户列表"
UserTableName: "名称"
UserTableMFAStatus: "MFA 状态"
UserTableSuperAdmin: "超级管理员"
UserTableCreatedAt: "创建时间"
UserEmptyList: "暂无用户"
UserInfo: "获取面板信息"
UserInfoAddr: "面板地址: "
UserInfoPassHelp: "提示: 修改密码可执行命令: "

# 命令行 - 回滚
RestoreCommands: "回滚 1Panel 服务及数据"
RestoreNoSuchFile: "暂无可回滚文件"
RestoreStep1: "（1/5）开始从 {{ .name }} 目录回滚 1Panel 服务及数据... "
RestoreStep2: "（2/5）1Panel 二进制回滚成功"
RestoreStep3: "（3/5）1Panel 脚本回滚成功"
RestoreStep4: "（4/5）1Panel 服务回滚成功"
RestoreStep5: "（5/5）1Panel 数据回滚成功"
RestoreSuccessful: "回滚成功！已回滚到 {{ .version }}，正在重启服务，请稍候..."

# 命令行 - 修改
UpdateCommands: "修改面板信息"
UpdateUser: "修改用户信息"
UpdatePassword: "修改用户密码"
UpdatePort: "修改面板端口"
UpdateUserNull: "错误: 输入用户为空！"
UpdateUserBlank: "错误: 输入用户中包含空格字符！"
UpdateUserFormat: "错误: 输入用户错误！仅支持英文、中文、数字和_，长度3-30"
UpdateUserErr: "错误: 用户修改失败，{{ .err }}"
UpdateSuccessful: "修改成功！"
UpdateUserResult: "用户: {{ .name }}"
UpdatePasswordRead: "错误: 用户密码信息读取错误，{{ .err }}"
UpdatePasswordNull: "错误: 输入用户密码为空！"
UpdateUPasswordBlank: "错误: 输入用户密码中包含空格字符！"
UpdatePasswordFormat: "错误: 用户密码仅支持字母、数字、特殊字符（!@#$%*_,.?），长度 8-30 位！"
UpdatePasswordLen: "错误: 请输入 6 位以上密码！"
UpdatePasswordRe: "确认密码: "
UpdatePasswordErr: "错误: 用户密码修改失败，{{ .err }}"
UpdatePasswordSame: "错误: 两次密码不匹配，请检查后重试！"
UpdatePasswordResult: "用户密码: {{ .name }}"
UpdatePortFormat: "错误: 输入的端口号必须在 1 到 65535 之间！"
UpdatePortUsed: "错误: 该端口号正被占用，请检查后重试！"
UpdatePortErr: "错误: 面板端口修改失败，{{ .err }}"
UpdatePortResult: "面板端口: {{ .name }}"
UpdatePortFirewallAdd: "添加防火墙端口规则失败，{{ .err }}，请您手动将 {{ .name }} 端口添加至防火墙规则中。"
UpdatePortFirewallDel: "错误: 防火墙端口删除失败，{{ .err }}"
UpdatePortFirewallReload: "防火墙重载失败，{{ .err }}，请您手动重载防火墙。"

# 移动端
ErrVerifyToken: '令牌验证错误，请重置后再次扫码'
ErrInvalidToken: '无效的令牌，请重置后再次扫码'
ErrExpiredToken: '令牌过期，请重置后再次扫码'

# 命令导出
Name: "名称"
Command: "命令"

# LDAP
ErrLDAPConnectionTest: "LDAP 连接测试失败，请检查服务地址、绑定账号和网络设置。"
ErrLDAPLoginTest: "LDAP 登录测试失败，请检查用户名和密码。"
LDAPConnectionTestSuccess: "LDAP 连接测试成功。"
ErrLDAPDirectorySearch: "读取 LDAP 用户失败，请检查连接和搜索设置。"
ErrLDAPConfigLoad: "加载 LDAP 配置失败。"
ErrLDAPConfigSave: "保存 LDAP 配置失败。"
ErrLDAPURLInvalid: "LDAP 服务地址必须使用 ldap:// 或 ldaps://，并包含有效的主机地址。"
ErrLDAPBindDNRequired: "请输入绑定 DN。"
ErrLDAPBindPasswordRequired: "请输入绑定密码。"
ErrLDAPUserOURequired: "请输入用户 OU。"
ErrLDAPConnectTimeoutRange: "连接超时时间必须在 1 到 120 秒之间。"
ErrLDAPSearchPageSizeRange: "LDAP 查询分页大小必须在 1 到 10000 之间。"
ErrLDAPResultPageSizeRange: "结果分页大小不能超过 200。"
ErrLDAPAttributeMapOnlyName: "属性映射仅支持 name 字段。"
ErrLDAPNameAttributeRequired: "请输入映射到 name 的 LDAP 属性。"
ErrLDAPAttributeNameInvalid: "属性映射中包含无效的 LDAP 属性名。"
ErrLDAPUserFilterRequired: "请输入用户过滤器。"
ErrLDAPUserFilterInvalid: "用户过滤器不是有效的 LDAP 过滤器。"
ErrLDAPAttributeMapObject: "属性映射必须是有效的 JSON 对象。"
ErrLDAPImportModeInvalid: "导入模式必须为导入选中用户或导入全部用户。"
ErrLDAPImportSelectionRequired: "请至少选择一个要导入的 LDAP 用户。"
ErrLDAPImportSelectionInvalid: "选中的 LDAP 用户无效或已不存在，请重新读取目录。"
ErrLDAPConfigChanged: "LDAP 配置已变更，请重新读取目录并预览导入。"
ErrLDAPRoleRequired: "请选择新 LDAP 用户的角色。"
ErrLDAPImportPlanIncomplete: "不能执行不完整的 LDAP 导入计划。"
ErrLDAPQueryTokenInvalid: "LDAP 查询结果已过期，请重新读取目录。"
ErrLDAPPlanTokenInvalid: "LDAP 导入预览已过期，请重新预览。"
ErrLDAPOperationFailed: "LDAP 操作失败，请重试。"
ErrLDAPEntryIdentityMissing: "LDAP 条目缺少稳定 ID 或用户名。"
ErrLDAPDuplicateExternalID: "LDAP 返回了重复的用户 ID。"
ErrLDAPUsernameConflict: "该用户名已被其他用户使用。"
ErrLDAPUsernameSourceConflict: "该用户名已被本地用户或其他认证源使用。"
ErrLDAPUsernameConcurrentConflict: "导入期间该用户名已被其他用户占用。"
ErrLDAPLocalCredentialsReadonly: "LDAP 用户名和密码由 LDAP 管理，不能在本地修改。"
ErrLDAPPasswordExpirationUnsupported: "LDAP 用户不使用本地密码过期策略。"
ErrLDAPSyncSourceDisabled: "请先启用 AD/LDAP，再开启或执行同步。"
ErrLDAPSyncConfigSave: "保存 LDAP 同步设置失败。"
ErrLDAPSyncSchedule: "更新 LDAP 同步计划失败。"
ErrLDAPSyncCronInvalid: "请输入有效的五段式 Cron 表达式。"
ErrLDAPSyncWeekdayInvalid: "请选择有效的星期。"
ErrLDAPSyncCronRequired: "请输入 Cron 表达式。"
ErrLDAPSyncScheduleTypeInvalid: "请选择有效的同步执行周期。"
ErrLDAPSyncTimeInvalid: "请输入有效的执行时间。"
ErrLDAPSyncRunning: "已有 LDAP 同步任务正在执行。"
ErrLDAPSyncDirectoryIncomplete: "LDAP 全量查询结果不完整，本次未改变任何用户状态。"
ErrLDAPSyncFailed: "LDAP 用户同步失败。"
LDAPSyncSuccess: "LDAP 用户同步成功。"
ErrSAML2NotEnabled: "SAML2 认证尚未启用"
ErrSAML2ConfigInvalid: "SAML2 配置无效"
ErrSAML2ConfigChanged: "SAML2 配置已变更，请重新发起认证"
ErrSAML2PanelOriginMissing: "请输入有效的面板对外访问地址，仅包含协议、主机和可选端口"
ErrSAML2MetadataInvalid: "IdP Metadata 缺失或无效"
ErrSAML2MetadataURLInvalid: "IdP Metadata URL 或 Metadata 中的端点地址不符合安全策略"
ErrSAML2MetadataFetch: "获取 IdP Metadata 失败"
ErrSAML2MetadataCertificate: "IdP Metadata 中没有可用的签名证书"
ErrSAML2KeyPairInvalid: "SP 私钥和证书无效或不匹配"
ErrSAML2NameAttributeMissing: "配置的 SAML2 用户名属性缺失或无效"
ErrSAML2DefaultRoleInvalid: "SAML2 配置的默认角色不可用"
ErrSAML2SLOUnavailable: "IdP 未提供支持的单点注销服务"
ErrSAML2TestExpired: "SAML2 测试已过期，请重新测试"
ErrSAML2LoginExpired: "SAML2 登录请求已过期，请重试"
ErrSAML2InvalidState: "SAML2 登录状态无效或已被使用"
ErrSAML2RequestBuild: "生成 SAML2 请求失败"
ErrSAML2ResponseInvalid: "SAML2 响应无效"
ErrSAML2SignatureInvalid: "SAML2 签名校验失败"
ErrSAML2Replay: "SAML2 消息已被使用"
ErrSAML2NameIDMissing: "SAML2 NameID 缺失或无效"
ErrSAML2SessionIndexMissing: "SAML2 SessionIndex 缺失或无效"
ErrSAML2NameConflictLocal: "SAML2 用户名与本地用户冲突"
ErrSAML2NameConflictLDAP: "SAML2 用户名与 LDAP 用户冲突"
ErrSAML2NameConflictOIDC: "SAML2 用户名与 OIDC 用户冲突"
ErrSAML2NameConflictSAML2: "SAML2 用户名与其他 SAML2 身份冲突"
ErrSAML2Internal: "SAML2 认证发生内部错误，请稍后重试"
ErrSAML2LogoutExpired: "SAML2 注销请求已过期"
ErrSAML2LogoutInvalid: "SAML2 注销消息无效"
ErrSAML2LocalCredentialsReadonly: "SAML2 用户名和密码由身份提供商管理，无法在本地修改。"
ErrSAML2PasswordExpirationUnsupported: "SAML2 用户不使用本地密码过期策略。"
