# 基礎錯誤
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 使用者不使用本機密碼到期原則。"
