diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index 66ed51a9b..2b44d138f 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -55,8 +55,8 @@ ErrAgentAccountIDRequired: 'Account ID is required' Localhost: 'Local' ErrBackupInUsed: 'Backup account is in use by a scheduled task' ErrBackupCheck: 'Backup account connectivity test failed: {{ .err }}' -ErrBackupLocalDelete: 'Deleting local backup accounts is not supported' -ErrBackupLocalCreate: 'Creating local backup accounts is not supported' +ErrBackupLocalDelete: 'Local backup accounts cannot be deleted' +ErrBackupLocalCreate: 'Local backup accounts cannot be created' #app ErrPortInUsed: '{{ .detail }} port is already occupied!' @@ -121,7 +121,7 @@ ExportStatus: "Login Status" ExportDate: "Time" #file -ErrFileCanNotRead: 'File preview not supported' +ErrFileCanNotRead: 'File preview is not supported' ErrFileToLarge: 'File is larger than 10 MB' ErrPathNotFound: 'Directory does not exist' ErrMovePathFailed: 'Target path cannot include source path' @@ -235,7 +235,7 @@ PruneStart: 'Cleaning in progress' #runtime ErrFileNotExist: 'Source file not found: {{ .detail }}' ErrImageBuildErr: 'Image build failed' -ErrImageExist: "Image already exists. Please use a different image name." +ErrImageExist: "Image already exists. Use a different image name." ErrDelWithWebsite: 'Runtime is linked to a website and cannot be deleted' ErrRuntimeStart: 'Startup failed' ErrPackageJsonNotFound: 'package.json file does not exist' @@ -510,19 +510,19 @@ ErrInstallExtension: 'Another extension install task is running' PanelAlertTitle: "Panel Alert Notification" TestAlertTitle: "Test Email - Verify Email Connectivity" TestAlert: "This is a test email to verify that your email sending configuration is correct." -LicenseExpirationAlert: "Your {{ .node }}{{ .ip }} Panel, the license will expire in {{ .day }} days. Please log in to the panel for details." -CronJobFailedAlert: "Your {{ .node }}{{ .ip }} Panel, scheduled task - {{ .name }} execution failed. Please log in to the panel for details." -ClamAlert: "Your {{ .node }}{{ .ip }} Panel, the virus scan task detected {{ .num }} infected files. Please log in to the panel for details." -WebSiteAlert: "Your {{ .node }}{{ .ip }} Panel, {{ .num }} websites will expire in {{ .day }} days. Please log in to the panel for details." -SSLAlert: "Your {{ .node }}{{ .ip }} Panel, {{ .num }} SSL certificates will expire in {{ .day }} days. Please log in to the panel for details." -DiskUsedAlert: "Your {{ .node }}{{ .ip }} Panel, disk {{ .name }} usage has reached {{ .used }}. Please log in to the panel for details." -ResourceAlert: "Your {{ .node }}{{ .ip }} Panel, the average {{ .name }} usage rate in {{ .time }} minutes is {{ .used }}. Please log in to the panel for details." -PanelVersionAlert: "Your {{ .node }}{{ .ip }} Panel, the latest panel version is available for upgrade. Please log in to the panel for details." -PanelPwdExpirationAlert: "Your {{ .node }}{{ .ip }} Panel, the panel password will expire in {{ .day }} days. Please log in to the panel for details." -CommonAlert: "Your {{ .node }}{{ .ip }} Panel, {{ .msg }}. Please log in to the panel for details." -NodeExceptionAlert: "Your {{ .node }}{{ .ip }} Panel, {{ .num }} nodes are abnormal. Please log in to the panel for details." -LicenseExceptionAlert: "Your {{ .node }}{{ .ip }} Panel, {{ .num }} licenses are abnormal. Please log in to the panel for details." -SSHAndPanelLoginAlert: "Your {{ .node }}{{ .ip }} Panel, {{ .name }} login from {{ .loginIp }} is abnormal. Please log in to the panel for details." +LicenseExpirationAlert: "Panel {{ .node }}{{ .ip }}: license expires in {{ .day }} days. Log in to view details." +CronJobFailedAlert: "Panel {{ .node }}{{ .ip }}: scheduled task {{ .name }} failed. Log in to view details." +ClamAlert: "Panel {{ .node }}{{ .ip }}: virus scan found {{ .num }} infected files. Log in to view details." +WebSiteAlert: "Panel {{ .node }}{{ .ip }}: {{ .num }} websites expire in {{ .day }} days. Log in to view details." +SSLAlert: "Panel {{ .node }}{{ .ip }}: {{ .num }} SSL certificates expire in {{ .day }} days. Log in to view details." +DiskUsedAlert: "Panel {{ .node }}{{ .ip }}: disk {{ .name }} usage reached {{ .used }}. Log in to view details." +ResourceAlert: "Panel {{ .node }}{{ .ip }}: average {{ .name }} usage in {{ .time }} minutes is {{ .used }}. Log in to view details." +PanelVersionAlert: "Panel {{ .node }}{{ .ip }}: a new panel version is available. Log in to view details." +PanelPwdExpirationAlert: "Panel {{ .node }}{{ .ip }}: panel password expires in {{ .day }} days. Log in to view details." +CommonAlert: "Panel {{ .node }}{{ .ip }}: {{ .msg }}. Log in to view details." +NodeExceptionAlert: "Panel {{ .node }}{{ .ip }}: {{ .num }} nodes are abnormal. Log in to view details." +LicenseExceptionAlert: "Panel {{ .node }}{{ .ip }}: {{ .num }} licenses are abnormal. Log in to view details." +SSHAndPanelLoginAlert: "Panel {{ .node }}{{ .ip }}: abnormal {{ .name }} login from {{ .loginIp }}. Log in to view details." #disk DeviceNotFound: "Device {{ .name }} not found" diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index abcc61cf4..9789c973a 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -34,17 +34,17 @@ SystemRestart: '系統重新啟動導致任務中斷' ErrGroupIsDefault: '預設分組,無法刪除' ErrGroupIsInWebsiteUse: '分組正在被其他網站使用,無法刪除' Decrypt: '解密' -ErrAgentAccountBound: '該帳號已綁定到智能體,無法刪除,請重試!' +ErrAgentAccountBound: '該帳號已綁定到智能體,無法刪除,請重試。' ErrAgentAccountUnavailable: '帳號連線資訊不可用,錯誤:{{ .err }},請重試' ErrAgentProviderNotSupported: '暫不支援該智能體提供商,請重試' ErrAgentAccountRequired: '請選擇智能體帳號後重試' ErrAgentAccountNotVerified: '帳號未驗證通過,請重試' -ErrAgentProviderMismatch: '帳號提供商不匹配,請重試' -ErrAgentBaseURLRequired: 'Base URL 不能為空,請重試' -ErrAgentApiKeyRequired: 'API Key 不能為空,請重試' -ErrAgentComposeRequired: '自訂編排內容不能為空,請重試' -ErrAgentIDRequired: '智能體 ID 不能為空,請重試' -ErrAgentAccountIDRequired: '帳號 ID 不能為空,請重試' +ErrAgentProviderMismatch: '帳號提供商不符,請重試' +ErrAgentBaseURLRequired: 'Base URL 不可為空,請重試' +ErrAgentApiKeyRequired: 'API Key 不可為空,請重試' +ErrAgentComposeRequired: '自訂編排內容不可為空,請重試' +ErrAgentIDRequired: '智能體 ID 不可為空,請重試' +ErrAgentAccountIDRequired: '帳號 ID 不可為空,請重試' Localhost: '本機' ErrBackupInUsed: '此備份帳號已在排程任務中使用,無法刪除' ErrBackupCheck: '備份帳號測試連線失敗{{ .err }}' @@ -57,7 +57,7 @@ ErrPortInOtherApp: '{{ .port }} 連接埠已被應用程式{{ .apps }} 佔用! ErrDbUserNotValid: '存量資料庫,使用者名稱密碼不符!' ErrUpdateBuWebsite: '應用程式更新成功,但網站設定檔修改失敗,請檢查設定!' Err1PanelNetworkFailed: '預設容器網路建立失敗! {{ .detail }}' -ErrFileParse: '應用docker-compose 檔案解析失敗!' +ErrFileParse: '應用docker-compose 檔解析失敗!' ErrInstallDirNotFound: '安裝目錄不存在,如需移除,請選擇強制移除' AppStoreIsUpToDate: '應用程式商店已經是最新版本' LocalAppVersionNull: '{{ .name }} 應用程式未同步到版本!無法加入到應用程式列表' @@ -73,9 +73,9 @@ ErrHttpReqFailed: '請求失敗{{ .err }}' ErrNoSuchHost: '無法找到請求的伺服器{{ .err }}' ErrHttpReqNotFound: '無法找到要求的資源{{ .err }}' ErrContainerNotFound: '{{ .name }} 容器不存在' -ErrContainerMsg: '{{ .name }} 容器異常,請在容器頁面上查看日誌' +ErrContainerMsg: '{{ .name }} 容器異常,請在容器頁面上檢視日誌' ErrAppBackup: '{{ .name }} 應用備份失敗 {{ .err }}' -ErrVersionTooLow: '目前1Panel 版本過低,無法更新應用程式商店,請升級版本之後操作' +ErrVersionTooLow: '目前 1Panel 版本過低,無法更新應用程式商店,請升級版本之後操作' ErrAppNameExist: '應用程式名稱已存在' AppStoreIsSyncing: '應用程式商店正在同步中,請稍後重試' ErrGetCompose: 'docker-compose.yml 檔案取得失敗!{{ .detail }}' @@ -83,16 +83,16 @@ ErrAppWarn: '狀態異常,請檢視日誌' ErrAppParamKey: '參數{{ .name }} 欄位異常' ErrAppUpgrade: '應用程式{{ .name }} 升級失敗{{ .err }}' AppRecover: '應用程式{{ .name }} 回滾' -PullImageStart: '開始拉取鏡像 [{{ .name }}]' -PullImageSuccess: '鏡像拉取成功' +PullImageStart: '開始拉取映像 [{{ .name }}]' +PullImageSuccess: '映像拉取成功' AppStoreSyncSuccess: '應用程式商店同步成功' SyncAppDetail: '同步應用程式設定' AppVersionNotMatch: '{{ .name }} 應用程式需要更高的 1Panel 版本,跳過同步' -MoveSiteDir: '檢測到網站目錄變更 需要遷移 OpenResty 網站目錄到 {{ .name }}' +MoveSiteDir: '偵測到網站目錄變更 需要遷移 OpenResty 網站目錄到 {{ .name }}' MoveSiteDirSuccess: '遷移網站目錄成功' DeleteRuntimePHP: '刪除PHP 執行環境' CustomAppStoreFileValid: '應用程式商店包需要.tar.gz 格式' -PullImageTimeout: '拉取鏡像逾時,請嘗試增加鏡像加速或更換其他鏡像加速' +PullImageTimeout: '拉取映像逾時,請嘗試增加映像加速或更換其他映像加速' ErrAppIsDown: '{{ .name }} 應用程式狀態異常,請檢查' ErrCustomApps: '存在已安裝的應用程式,請先解除安裝' ErrCustomRuntimes: '存在已安裝的運作環境,請先刪除' @@ -111,7 +111,7 @@ ExportDate: '時間' ErrFileCanNotRead: '此檔案不支援預覽' ErrFileToLarge: '檔案超過10M,無法開啟' ErrPathNotFound: '目錄不存在' -ErrMovePathFailed: '目標路徑不能包含原路徑!' +ErrMovePathFailed: '目標路徑不可包含原路徑!' ErrLinkPathNotFound: '目標路徑不存在!' ErrFileIsExist: '檔案或資料夾已存在!' ErrFileUpload: '{{ .name }} 上傳檔案失敗{{ .detail }}' @@ -122,15 +122,15 @@ ErrFavoriteExist: '已收藏此路徑' ErrInvalidChar: '禁止使用無效字元' ErrPathNotDelete: '所選目錄不可刪除' ErrLogFileToLarge: '日誌檔案超過 500M,無法開啟' -FileDropFailed: '清理文件 {{ .name }} 失敗: {{ .err }}' -FileDropSuccess: '清理文件 {{ .name }} 成功,清理 {{ .count }} 個文件,釋放 {{ .size }} 磁碟空間' -FileDropSum: '文件清理完成,共清理 {{ .count }} 個文件,共釋放 {{ .size }} 磁碟空間' -ErrBadDecrypt: '壓縮檔解壓密碼錯誤,解壓失敗,請重試!' +FileDropFailed: '清理檔案 {{ .name }} 失敗: {{ .err }}' +FileDropSuccess: '清理檔案 {{ .name }} 成功,清理 {{ .count }} 個檔案,釋放 {{ .size }} 磁碟空間' +FileDropSum: '檔案清理完成,共清理 {{ .count }} 個檔案,共釋放 {{ .size }} 磁碟空間' +ErrBadDecrypt: '壓縮檔解壓密碼錯誤,解壓失敗,請重試。' ErrAliasIsExist: '代號已存在' ErrBackupMatch: '該備份檔案與目前網站部分資料不符{{ .detail }}' ErrBackupExist: '該備份檔案對應部分來源資料不存在{{ .detail }}' ErrPHPResource: '本機執行環境不支援切換!' -ErrPathPermission: 'index 目錄下偵測到非 1000:1000 權限資料夾,可能導致網站存取 Access denied 錯誤,請點擊上方儲存按鈕' +ErrPathPermission: 'index 目錄下偵測到非 1000:1000 權限資料夾,可能導致網站存取 Access denied 錯誤,請點選上方儲存按鈕' ErrDomainIsUsed: '網域名稱已被網站【{{ .name }}】使用' ErrDomainFormat: '{{ .name }} 網域格式不正確' ErrDefaultAlias: 'default 為保留代號,請使用其他代號' @@ -138,33 +138,33 @@ ErrParentWebsite: '需要先移除子網站{{ .name }}' ErrBuildDirNotFound: '建置目錄不存在' ErrImageNotExist: '執行環境{{ .name }} 映像不存在,請重新編輯執行環境' ErrProxyIsUsed: '負載均衡已被反向代理使用,無法刪除' -ErrSSLValid: '證書文件異常,請檢查證書狀態!' +ErrSSLValid: '憑證檔案異常,請檢查憑證狀態!' ErrWebsiteDir: '請選擇網站目錄下的目錄' ErrComposerFileNotFound: 'composer.json 檔案不存在' ErrRuntimeNoPort: '執行環境未設定埠,請先編輯執行環境' Status: '狀態' start: '開啟' stop: '關閉' -restart: '重啟' +restart: '重新啟動' kill: '強制停止' pause: '暫停' unpause: '恢復' remove: '刪除' delete: '刪除' -ErrDefaultWebsite: '已經設置預設網站,請取消後再設置!' +ErrDefaultWebsite: '已經設定預設網站,請取消後再設定!' SSL: '憑證' Set: '設定' ErrSSLCannotDelete: '{{ .name }} 憑證正在被網站使用,無法刪除' -ErrAccountCannotDelete: '帳號關聯證書,無法刪除' +ErrAccountCannotDelete: '帳號關聯憑證,無法刪除' ErrSSLApply: '憑證續簽成功,openresty reload 失敗,請檢查設定!' ErrEmailIsExist: '信箱已存在' ErrSSLKeyNotFound: '私鑰檔案不存在' ErrSSLCertificateNotFound: '憑證檔案不存在' -ErrSSLKeyFormat: '私鑰檔案校驗失敗' +ErrSSLKeyFormat: '私鑰檔案驗證失敗' ErrSSLCertificateFormat: '憑證檔案格式錯誤,請使用 pem 格式' -ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid 或 EabHmacKey 不能為空' -ErrOpenrestyNotFound: 'Http 模式需要先安裝Openresty' -ApplySSLStart: '開始申請證書,網域名稱[{{ .domain }}] 申請方式[{{ .type }}]' +ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid 或 EabHmacKey 不可為空' +ErrOpenrestyNotFound: 'Http 模式需要先安裝OpenResty' +ApplySSLStart: '開始申請憑證,網域名稱[{{ .domain }}] 申請方式[{{ .type }}]' dnsAccount: 'DNS 自動' dnsManual: 'DNS 手排' http: 'HTTP' @@ -172,9 +172,9 @@ ApplySSLFailed: '申請[{{ .domain }}] 憑證失敗, {{ .detail }}' ApplySSLSuccess: '申請[{{ .domain }}] 憑證成功!' DNSAccountName: 'DNS 帳號[{{ .name }}] 廠商[{{ .type }}]' PushDirLog: '憑證推送到目錄[{{ .path }}] {{ .status }}' -ErrDeleteCAWithSSL: '目前機構下存在已簽發證書,無法刪除' -ErrDeleteWithPanelSSL: '面板SSL 配置使用此證書,無法刪除' -ErrDefaultCA: '預設機構不能刪除' +ErrDeleteCAWithSSL: '目前機構下存在已簽發憑證,無法刪除' +ErrDeleteWithPanelSSL: '面板SSL 設定使用此憑證,無法刪除' +ErrDefaultCA: '預設機構不可刪除' ApplyWebSiteSSLLog: '開始更新{{ .name }} 網站憑證' ErrUpdateWebsiteSSL: '{{ .name }} 網站更新憑證失敗: {{ .err }}' ApplyWebSiteSSLSuccess: '更新網站憑證成功' @@ -184,10 +184,10 @@ ExecShellSuccess: '腳本執行成功' StartUpdateSystemSSL: '開始更新系統憑證' UpdateSystemSSLSuccess: '更新系統憑證成功' ErrWildcardDomain: 'HTTP 模式無法申請泛網域憑證' -ErrApplySSLCanNotDelete: '正在申請的證書 {{ .name }} 無法刪除,請稍後重試' -StartPushSSLToNode: '開始推送證書到節點' -PushSSLToNodeFailed: '推送證書到節點失敗: {{ .err }}' -PushSSLToNodeSuccess: '推送證書到節點成功' +ErrApplySSLCanNotDelete: '正在申請的憑證 {{ .name }} 無法刪除,請稍後重試' +StartPushSSLToNode: '開始推送憑證到節點' +PushSSLToNodeFailed: '推送憑證到節點失敗: {{ .err }}' +PushSSLToNodeSuccess: '推送憑證到節點成功' ErrUserIsExist: '目前使用者已存在,請重新輸入' ErrDatabaseIsExist: '目前資料庫已存在,請重新輸入' ErrExecTimeOut: 'SQL 執行逾時,請檢查資料庫' @@ -200,17 +200,17 @@ ErrTypeOfRedis: '復原檔案類型與目前持久化方式不符,請修改後 ErrInUsed: '{{ .detail }} 正被使用,無法刪除!' ErrObjectInUsed: '該對象正被使用,無法刪除!' ErrObjectBeDependent: '該映像正被其他映像所依賴,無法刪除!' -ErrPortRules: '連接埠數目不匹配,請重新輸入!' -ErrPgImagePull: '鏡像拉取逾時,請配置鏡像加速或手動拉取{{ .name }} 鏡像後重試' +ErrPortRules: '連接埠數目不符,請重新輸入!' +ErrPgImagePull: '映像拉取逾時,請設定映像加速或手動拉取{{ .name }} 映像後重試' PruneHelper: '本次清理 {{ .name }} 釋放磁碟空間 {{ .size }}' -ImageRemoveHelper: '刪除鏡像 {{ .name }} ,釋放磁碟空間 {{ .size }}' +ImageRemoveHelper: '刪除映像 {{ .name }} ,釋放磁碟空間 {{ .size }}' BuildCache: '構建快取' Volume: '磁碟區' Network: '網路' PruneStart: '清理中,請稍候...' ErrFileNotExist: '{{ .detail }} 檔案不存在!請檢查來源檔案完整性!' -ErrImageBuildErr: '鏡像build 失敗' -ErrImageExist: '鏡像已存在!請修改鏡像名稱。' +ErrImageBuildErr: '映像build 失敗' +ErrImageExist: '映像已存在!請修改映像名稱。' ErrDelWithWebsite: '執行環境已經關聯網站,無法刪除' ErrRuntimeStart: '啟動失敗' ErrPackageJsonNotFound: 'package.json 檔案不存在' @@ -246,7 +246,7 @@ CleanLogByName: '清理 {{ .name }} 日誌' WafIpGroupNotFound: 'WAF IP 群組未找到,請先到【進階功能-WAF-黑白名單-IP群組】添加遠端下載方式的IP群組' ErrNotExistUser: '目前使用者不存在,請修改後重試!' ErrBanAction: '設定失敗,目前{{ .name }} 服務不可用,請重試' -ErrClamdscanNotFound: '未偵測到clamdscan 指令,請參考文件安裝!' +ErrClamdscanNotFound: '未偵測到clamdscan 指令,請參考檔案安裝!' TaskSwapSet: '設定 Swap' SetSwap: '設定 Swap {{ .path }} - {{ .size }}' CreateSwap: '建立 Swap 檔案' @@ -257,7 +257,7 @@ SetTamperWithRules: '根據規則啟動目錄防護' ProtectDir: '防護目錄 {{ .name }}' IgnoreFile: '保護檔案 {{ .name }}' TamperSetSuccessful: '防護設定完成,開始監聽以下目錄:' -ErrScope: '不支援修改此配置' +ErrScope: '不支援修改此設定' ErrStateChange: '狀態修改失敗' ErrRuleExist: '規則已存在' ErrRuleNotExist: '規則不存在' @@ -307,9 +307,9 @@ sqlInject: 'SQL 注入' ErrDBNotExist: '資料庫不存在' allow: '允許' deny: '禁止' -OpenrestyNotFound: 'Openresty 未安裝' +OpenrestyNotFound: 'OpenResty 未安裝' remoteIpIsNull: 'IP 列表為空' -OpenrestyVersionErr: 'Openresty 版本過低,請升級 Openresty 至 1.27.1.2-2-2-focal' +OpenrestyVersionErr: 'OpenResty 版本過低,請升級 OpenResty 至 1.27.1.2-2-2-focal' ErrFileTooLarge: '檔案超過 1MB,無法上傳' TaskStart: '{{ .name }} 任務開始[START]' TaskEnd: '{{ .name }} 任務結束[COMPLETED]' @@ -325,7 +325,7 @@ TaskCreate: '建立' TaskDelete: '刪除' TaskUpgrade: '升級' TaskUpdate: '更新' -TaskRestart: '重啟' +TaskRestart: '重新啟動' TaskProtect: '防護' TaskBackup: '備份' TaskRecover: '復原' @@ -343,7 +343,7 @@ App: '應用程式' Runtime: '運作環境' Database: '資料庫' ConfigFTP: '建立FTP 使用者{{ .name }}' -ConfigOpenresty: '建立Openresty 設定檔' +ConfigOpenresty: '建立OpenResty 設定檔' InstallAppSuccess: '應用程式{{ .name }} 安裝成功' ConfigRuntime: '設定執行環境' ConfigApp: '設定應用程式' @@ -352,11 +352,11 @@ FailedStatus: '{{ .name }} 失敗{{ .err }}' HandleLink: '處理應用程式關聯' HandleDatabaseApp: '處理應用程式參數' ExecShell: '執行{{ .name }} 腳本' -PullImage: '拉取鏡像' +PullImage: '拉取映像' Start: '開始' Run: '啟動' Stop: '停止' -Image: '鏡像' +Image: '映像' Compose: '編排' Container: '容器' AppLink: '關聯應用程式' @@ -384,7 +384,7 @@ SnapDeleteLoginLog: '刪除存取日誌' SnapDeleteMonitor: '刪除監控資料' SnapRemoveSystemIP: '移除系統IP' SnapBaseInfo: '寫入1Panel 基本資料' -SnapInstallAppImageEmpty: '目前未勾選應用鏡像,跳過...' +SnapInstallAppImageEmpty: '目前未勾選應用映像,跳過...' SnapInstallApp: '備份 1Panel 已安裝應用' SnapDockerSave: '壓縮已安裝應用' SnapLocalBackup: '備份1Panel 本機備份目錄' @@ -407,69 +407,69 @@ RecoverDownloadAccount: '取得快照下載備份帳號{{ .name }}' RecoverDecompress: '解壓縮快照壓縮檔' Decompress: '解壓縮' BackupBeforeRecover: '快照前備份系統相關資料' -ReadJson: '讀取快照內Json 檔案' -ReadJsonPath: '取得快照內Json 檔案路徑' -ReadJsonContent: '讀取Json 檔案' -ReadJsonMarshal: 'Json 轉義處理' +ReadJson: '讀取快照內JSON 檔案' +ReadJsonPath: '取得快照內JSON 檔案路徑' +ReadJsonContent: '讀取JSON 檔案' +ReadJsonMarshal: 'JSON 轉義處理' RecoverApp: '復原已安裝應用程式' RecoverWebsite: '復原網站目錄' -RecoverAppImage: '復原快照鏡像備份' +RecoverAppImage: '復原快照映像備份' RecoverCompose: '復原其他編排內容' RecoverComposeList: '取得所有待復原編排' RecoverComposeItem: '復原編排{{ .name }}' -RecoverAppEmpty: '快照檔案中未發現應用程式鏡像備份' +RecoverAppEmpty: '快照檔案中未發現應用程式映像備份' RecoverBaseData: '復原基礎資料及檔案' -RecoverDaemonJsonEmpty: '快照檔案及目前機器都不存在容器配置daemon.json 檔案' -RecoverDaemonJson: '復原容器配置daemon.json 檔案' +RecoverDaemonJsonEmpty: '快照檔案及目前機器都不存在容器設定daemon.json 檔' +RecoverDaemonJson: '復原容器設定daemon.json 檔' RecoverDBData: '復原資料庫資料' RecoverBackups: '還原本機備份目錄' RecoverPanelData: '復原資料目錄' -ContainerImagePull: '拉取容器鏡像{{ .name }}' +ContainerImagePull: '拉取容器映像{{ .name }}' ContainerRemoveOld: '刪除原容器{{ .name }}' -ContainerImageCheck: '檢查鏡像是否正常拉取' +ContainerImageCheck: '檢查映像是否正常拉取' ContainerLoadInfo: '取得容器基本資訊' ContainerRecreate: '容器更新失敗,現在開始復原原容器' ContainerCreate: '建立新容器{{ .name }}' ContainerCreateFailed: '容器建立失敗,刪除失敗容器' ContainerStartCheck: '檢查容器是否已啟動' -ImageBuild: '鏡像建置' -ImagePull: '拉取鏡像' +ImageBuild: '映像建置' +ImagePull: '拉取映像' ImageRepoAuthFromDB: '從資料庫取得倉庫認證資訊' -ImagePush: '推播鏡像' -ImageRenameTag: '修改鏡像Tag' -ImageNewTag: '新鏡像Tag {{ .name }}' +ImagePush: '推播映像' +ImageRenameTag: '修改映像Tag' +ImageNewTag: '新映像Tag {{ .name }}' ComposeCreate: '建立編排' BackupNginxConfig: '備份網站OpenResty 設定檔' CompressFileSuccess: '壓縮目錄成功,壓縮為{{ .name }}' CompressDir: '壓縮目錄' DeCompressFile: '解壓縮檔案{{ .name }}' -ErrCheckValid: '校驗備份檔失敗,{{ .name }}' +ErrCheckValid: '驗證備份檔失敗,{{ .name }}' Rollback: '回滾' websiteDir: '網站目錄' RecoverFailedStartRollBack: '復原失敗,開始回溯' AppBackupFileIncomplete: '備份檔案不完整缺少 app.json 或 app.tar.gz 檔案' AppAttributesNotMatch: '應用程式類型或名稱不一致' -ErrAlertSync: '警告訊息同步錯誤,請重試!' +ErrAlertSync: '警告訊息同步錯誤,請重試。' ErrInstallExtension: '已有安裝任務正在進行,請等待任務結束' PanelAlertTitle: '面板警示通知' TestAlertTitle: '測試郵件 - 驗證信箱連通性' TestAlert: '這是一封測試郵件,用於確認您的郵件發送設定是否正確。' -LicenseExpirationAlert: '您的 {{ .node }}{{ .ip }} 面板,授權將於 {{ .day }} 天後到期,詳情請登入面板查看。' -CronJobFailedAlert: '您的 {{ .node }}{{ .ip }} 面板,排程任務{{ .name }}執行失敗,詳情請登入面板查看。' -ClamAlert: '您的 {{ .node }}{{ .ip }} 面板,病毒掃描任務偵測到 {{ .num }} 個感染檔案,詳情請登入面板查看。' -WebSiteAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .num }} 個網站將於 {{ .day }} 天後到期,詳情請登入面板查看。' -SSLAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .num }} 張SSL憑證將於 {{ .day }} 天後到期,詳情請登入面板查看。' -DiskUsedAlert: '您的 {{ .node }}{{ .ip }} 面板,磁碟 {{ .name }} 使用率已達 {{ .used }},詳情請登入面板查看。' -ResourceAlert: '您的 {{ .node }}{{ .ip }} 面板,過去 {{ .time }} 分鐘內 {{ .name }} 平均使用率為 {{ .used }},詳情請登入面板查看。' -PanelVersionAlert: '您的 {{ .node }}{{ .ip }} 面板,已有最新版本可供升級,詳情請登入面板查看。' -PanelPwdExpirationAlert: '您的 {{ .node }}{{ .ip }} 面板,面板密碼將於 {{ .day }} 天後到期,詳情請登入面板查看。' -CommonAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .msg }},詳情請登入面板查看。' -NodeExceptionAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .num }} 個節點出現異常,詳情請登入面板查看。' -LicenseExceptionAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .num }} 個授權出現異常,詳情請登入面板查看。' -SSHAndPanelLoginAlert: '您的 {{ .node }}{{ .ip }} 面板,來自 {{ .loginIp }} 的 {{ .name }} 登入出現異常,詳情請登入面板查看。' +LicenseExpirationAlert: '您的 {{ .node }}{{ .ip }} 面板,授權將於 {{ .day }} 天後到期,詳情請登入面板檢視。' +CronJobFailedAlert: '您的 {{ .node }}{{ .ip }} 面板,排程任務{{ .name }}執行失敗,詳情請登入面板檢視。' +ClamAlert: '您的 {{ .node }}{{ .ip }} 面板,病毒掃描任務偵測到 {{ .num }} 個感染檔案,詳情請登入面板檢視。' +WebSiteAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .num }} 個網站將於 {{ .day }} 天後到期,詳情請登入面板檢視。' +SSLAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .num }} 張SSL憑證將於 {{ .day }} 天後到期,詳情請登入面板檢視。' +DiskUsedAlert: '您的 {{ .node }}{{ .ip }} 面板,磁碟 {{ .name }} 使用率已達 {{ .used }},詳情請登入面板檢視。' +ResourceAlert: '您的 {{ .node }}{{ .ip }} 面板,過去 {{ .time }} 分鐘內 {{ .name }} 平均使用率為 {{ .used }},詳情請登入面板檢視。' +PanelVersionAlert: '您的 {{ .node }}{{ .ip }} 面板,已有最新版本可供升級,詳情請登入面板檢視。' +PanelPwdExpirationAlert: '您的 {{ .node }}{{ .ip }} 面板,面板密碼將於 {{ .day }} 天後到期,詳情請登入面板檢視。' +CommonAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .msg }},詳情請登入面板檢視。' +NodeExceptionAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .num }} 個節點出現異常,詳情請登入面板檢視。' +LicenseExceptionAlert: '您的 {{ .node }}{{ .ip }} 面板,{{ .num }} 個授權出現異常,詳情請登入面板檢視。' +SSHAndPanelLoginAlert: '您的 {{ .node }}{{ .ip }} 面板,來自 {{ .loginIp }} 的 {{ .name }} 登入出現異常,詳情請登入面板檢視。' DeviceNotFound: '裝置 {{ .name }} 未找到' DeviceIsMounted: '裝置 {{ .name }} 已掛載,請先移除' PartitionDiskErr: '分區失敗,{{ .err }}' FormatDiskErr: '格式化磁碟失敗,{{ .err }}' MountDiskErr: '掛載磁碟失敗,{{ .err }}' -XfsNotFound: '未檢測到 xfs 檔案系統,請先安裝 xfsprogs' +XfsNotFound: '未偵測到 xfs 檔案系統,請先安裝 xfsprogs' diff --git a/core/i18n/lang/en.yaml b/core/i18n/lang/en.yaml index 74ec16452..dd031a337 100644 --- a/core/i18n/lang/en.yaml +++ b/core/i18n/lang/en.yaml @@ -6,16 +6,16 @@ ErrRecordExist: "Record already exists" ErrRecordNotFound: "Record not found" ErrStructTransform: "Type conversion failed: {{ .detail }}" ErrNotLogin: "User not logged in: {{ .detail }}" -ErrSessionDataNotFound: "Current session has expired!" -ErrSessionDataFormat: "Current session data format is abnormal!" -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 }}" +ErrSessionDataNotFound: "Session expired" +ErrSessionDataFormat: "Invalid session data format" +ErrPasswordExpired: "Password expired: {{ .detail }}" +ErrNotSupportType: "Unsupported type: {{ .detail }}" +ErrProxy: "Request failed; check this node status: {{ .detail }}" +ErrApiConfigStatusInvalid: "API access disabled: {{ .detail }}" +ErrApiConfigKeyInvalid: "Invalid API key: {{ .detail }}" ErrApiConfigIPInvalid: "The API request IP is not on the whitelist: {{ .detail }}" ErrApiConfigDisable: "This interface prohibits API calls: {{ .detail }}" -ErrApiConfigKeyTimeInvalid: "API timestamp error: {{ .detail }}" +ErrApiConfigKeyTimeInvalid: "Invalid API timestamp: {{ .detail }}" ErrPasskeyDisabled: "Passkey requires HTTPS to be enabled" ErrPasskeyNotConfigured: "No passkey configured" ErrPasskeyLimit: "Passkey limit reached (max 5)" @@ -24,18 +24,18 @@ ErrPasskeyDuplicate: "Passkey already exists" ErrPasskeyVerify: "Passkey verification failed" # request -ErrNoSuchHost: "Unable to find the requested server {{ .err }}" -ErrHttpReqNotFound: "Unable to find the requested resource {{ .err }}" +ErrNoSuchHost: "Host resolution failed: {{ .err }}" +ErrHttpReqNotFound: "Requested resource not found: {{ .err }}" ErrHttpReqFailed: "Request failed {{ .err }}" ErrHttpReqTimeOut: "Request timed out {{ .err }}" ErrCreateHttpClient: "Failed to create request {{ .err }}" -ErrProxySetting: "Proxy server information unavailable {{ .err }}, please check and try again!" -ErrEntranceFormat: "Security entrance {{ .name }} is not currently supported. Please check and try again!" +ErrProxySetting: "Proxy server information unavailable {{ .err }}, check and try again!" +ErrEntranceFormat: "Security entry {{ .name }} is not supported. Check and try again." # common ErrDemoEnvironment: "Demo server, this operation is prohibited!" ErrCmdTimeout: "Command execution timeout!" -ErrEntrance: "Security entrance information error, please check and try again!" +ErrEntrance: "Security entrance information error, 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!" @@ -56,50 +56,50 @@ AppInstallCheck: 'Check application installation environment' 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." +ErrBackupPublic: "Detected that this backup account is not public, check and try again!" +ErrOSSConn: "Unable to get the latest version. Check server internet 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!" +ErrLicenseInUsed: 'The license is already bound. Check and try again!' +ErrLicenseExpired: 'The license has expired. Check and try again!' +ErrLicense: "License format error, check and retry!" +ErrLicenseCheck: "License validation failed, check and retry!" +ErrXpackVersion: "License validation failed, this license is version-limited, cannot import, check and retry!" +ErrLicenseSave: "Failed to save license information, error {{ .err }}, 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" -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!" +ErrXpackNotFound: "This section requires Professional Edition. Import a license in Panel Settings - License" +ErrXpackExceptional: "This section requires Professional Edition. Sync license status in Panel Settings - License" +ErrXpackLost: "License reached max retry count. Go to [Panel Settings] [License] and run manual sync" +ErrDeviceLost: "Required files for license verification are missing, check and try again!" +ErrDeviceErr: "Current environment does not match the license import environment. Edit the license and re-import." +ErrXpackTimeout: "Request timeout, network connection might be unstable, try again later!" +ErrUnbindMaster: "Nodes exist in node management. Remove nodes first, then unbind the current license." +ErrFreeNodeLimit: "Community edition node limit reached. Go to www.lxware.cn/1panel to purchase and retry." +ErrNodeBound: "This license is bound to another node, check and retry!" +ErrNodeBoundDelete: "This license is bound and does not support delete operations. Check and try again!" +ErrNodeBoundLimit: "The current free node has reached its limit, check and try again!" +ErrLicenseFree: "Free nodes are available only when the license is correctly bound to a node. Verify and retry." +ErrLicenseUnbind: "Community Edition nodes detected for this license. Unbind in [Panel Settings - License] and retry." +ErrNoSuchNode: "Node information not found, check and retry!" +ErrNodeUnbind: "This node is not within the license binding range, check and retry!" +ErrNodeBind: "This node is already bound to a license, check and retry!" +ErrNodeLocalRollback: "The primary node does not support direct rollback. Manually execute the '1pctl restore' command to rollback!" ErrIntlLicense: "The current version does not support importing international licenses yet. Stay tuned!" -InvalidRequestBodyType: "Invalid request body format, please check and ensure the content meets the required format before retrying!" -InvalidLicenseCodeType: "Invalid license code format provided, please check and try again!" -LicenseNotFoundType: "License not found, no matching record exists in the system for the provided license. Please check and try again!" -LicenseRevokedType: "The requested license has been revoked and is no longer usable. Please check and try again!" -LicenseExpiredType: "The license has expired. Please renew it or re-import the license in the Panel Settings - License section before retrying!" +InvalidRequestBodyType: "Invalid request body format. Ensure content matches the required format and retry." +InvalidLicenseCodeType: "Invalid license code format provided, check and try again!" +LicenseNotFoundType: "License not found, no matching record exists in the system for the provided license. Check and try again!" +LicenseRevokedType: "The requested license has been revoked and is no longer usable. Check and try again!" +LicenseExpiredType: "License expired. Renew it or re-import it in Panel Settings - License before retrying." LicenseProductMismatchType: "The license does not match the requested product or service!" -InvalidAssigneeType: "Invalid target user or device information for license assignment. Please check and try again!" -LicenseUsageNotFoundType: "No usage records found. This license has not been activated or used yet. Please check and try again!" -LicenseUsageLimitExceededType: "This license is already bound to another node. Please check and try again!" +InvalidAssigneeType: "Invalid target user or device information for license assignment. Check and try again!" +LicenseUsageNotFoundType: "No usage records found. This license has not been activated or used yet. Check and try again!" +LicenseUsageLimitExceededType: "This license is already bound to another node. Check and try again!" # alert -ErrAlertSync: "Alert information sync error, please check and retry!" +ErrAlertSync: "Alert information sync error, check and retry!" # task TaskStart: "{{ .name }} task started [START]" @@ -107,19 +107,19 @@ TaskEnd: "{{ .name }} task ended [COMPLETED]" TaskFailed: "{{ .name }} task failed" TaskTimeout: "{{ .name }} timed out" TaskSuccess: "{{ .name }} task succeeded" -TaskRetry: "Starting retry {{ .name }}" +TaskRetry: "Retry {{ .name }}" SubTaskSuccess: "{{ .name }} succeeded" SubTaskFailed: "{{ .name }} failed: {{ .err }}" TaskInstall: "Install" TaskUpgrade: "Upgrade" -TaskSync: 'Synchronize' -TaskSyncForNode: "Sync Node Data" +TaskSync: 'Sync' +TaskSyncForNode: "Sync node data" TaskBackup: "Backup" SuccessStatus: "{{ .name }} succeeded" FailedStatus: "{{ .name }} failed {{ .err }}" Start: "Start" SubTask: "Subtask" -Skip: "Skip errors and continue..." +Skip: "Ignore errors and continue" PushAppInstallTaskToNode: "Push app installation task to node [{{ .name }}]" TaskPush: "Push" AppInstallTask: "App installation task" @@ -129,7 +129,7 @@ Success: "Success" #script ScriptLibrary: "Script Library" RemoteScriptLibrary: "Remote Script Library" -ScriptSyncSkip: "Current script library is already the latest version!" +ScriptSyncSkip: "Script library is already up to date" DownloadData: "Downloading script library file data.yaml" DownloadPackage: "Downloading script library package" AnalyticCompletion: "Analysis completed, now syncing to database..." @@ -141,7 +141,7 @@ SyncPackageData: "Package sync data" 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!" +SyncFailed: "Sync failed, manually sync in the node list!" SyncSystemProxy: "System Proxy Settings" SyncScripts: "Script Library" SyncBackupAccounts: "Backup Accounts" @@ -175,7 +175,7 @@ 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!" +NoBackupNode: "Backup node is empty. Select one and save first" #cmd AppVersion: "App version" @@ -189,7 +189,7 @@ 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" +SudoHelper: "Use {{ .cmd }} or switch to root user" ListenIPCommands: "Switch listening ip" ListenIPv4: "Listen on IPv4" ListenIPv6: "Listen on IPv6" @@ -202,13 +202,13 @@ ResetIPs: "Cancel 1Panel authorized ip restrictions" ResetDomain: "Cancel 1Panel domain binding" ResetPasskey: "Clear 1Panel passkeys" RestoreCommands: "Rollback 1Panel service and data" -RestoreNoSuchFile: "No files available for rollback" +RestoreNoSuchFile: "No rollback files found" 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! Rolled back to {{ .version }}, restarting service, please wait..." +RestoreSuccessful: "Rollback succeeded. Reverted to {{ .version }}, restarting service..." UpdateCommands: "Update panel info" UpdateUser: "Update panel user" UpdatePassword: "Update panel password" @@ -223,18 +223,18 @@ 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 supports only letters, numbers, and special characters (!@#$%*_,.?) with a length of 8-30." -UpdatePasswordLen: "Error: Please enter a password longer than 6 characters!" +UpdatePasswordLen: "Error: 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!" +UpdatePasswordSame: "Error: The two passwords do not match, 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!" +UpdatePortUsed: "Error: The port number is already in use, 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." +UpdatePortFirewallAdd: "Failed to add firewall port rule, {{ .err }}, 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." +UpdatePortFirewallReload: "Failed to reload the firewall, {{ .err }}, manually reload the firewall." UserInfo: "Get panel information" UserInfoAddr: "Panel address: " UserInfoPassHelp: "Tip: To change the password, you can execute the command: " @@ -243,16 +243,16 @@ 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.' +ErrVerifyToken: 'Token verification failed. Reset and scan again.' +ErrInvalidToken: 'Invalid token. Reset and scan again.' +ErrExpiredToken: 'Token expired. Reset and scan again.' #cluster -ErrMasterDelete: "Unable to delete the master node, please delete the slave nodes first." +ErrMasterDelete: "Unable to delete the master node. Delete 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." +AppStatusUnHealthy: "Failed to fetch application status. Check installation node status in the node list." +MasterNodePortNotAvailable: "Node {{ .name }} port {{ .port }} connectivity check failed. Check firewall/security group settings and master node status." +ClusterMasterNotExist: "Cluster master node is disconnected. Delete child nodes." #ssl ErrReqFailed: "{{.name}} request failed: {{ .err }}" diff --git a/core/i18n/lang/zh-Hant.yaml b/core/i18n/lang/zh-Hant.yaml index e1e492ecc..876c6ed20 100644 --- a/core/i18n/lang/zh-Hant.yaml +++ b/core/i18n/lang/zh-Hant.yaml @@ -1,13 +1,13 @@ ErrInvalidParams: "請求參數錯誤: {{ .detail }}" -ErrTokenParse: "Token 生成錯誤: {{ .detail }}" +ErrTokenParse: "Token 產生錯誤: {{ .detail }}" ErrInitialPassword: "原密碼錯誤" ErrInternalServer: "服務內部錯誤: {{ .detail }}" ErrRecordExist: "記錄已存在" ErrRecordNotFound: "記錄未找到" ErrStructTransform: "類型轉換失敗: {{ .detail }}" ErrNotLogin: "使用者未登入: {{ .detail }}" -ErrSessionDataNotFound: "目前的工作階段已過期!" -ErrSessionDataFormat: "目前的工作階段資料格式異常!" +ErrSessionDataNotFound: "目前工作階段已過期!" +ErrSessionDataFormat: "目前工作階段資料格式異常!" ErrPasswordExpired: "目前密碼已過期: {{ .detail }}" ErrNotSupportType: "系統暫不支援目前類型: {{ .detail }}" ErrProxy: "請求錯誤,請檢查該節點狀態: {{ .detail }}" @@ -23,13 +23,13 @@ ErrHttpReqNotFound: "無法找到請求的資源 {{ .err }}" ErrHttpReqFailed: "請求失敗 {{ .err }}" ErrHttpReqTimeOut: "請求逾時 {{ .err }}" ErrCreateHttpClient: "建立請求失敗 {{ .err }}" -ErrProxySetting: "代理伺服器資訊不可用 {{ .err }},請檢查後重試!" -ErrEntranceFormat: "暫不支援安全入口 {{ .name }} ,請檢查後重試!" +ErrProxySetting: "代理伺服器資訊不可用 {{ .err }},請檢查後重試。" +ErrEntranceFormat: "暫不支援安全入口 {{ .name }} ,請檢查後重試。" #common ErrDemoEnvironment: "示範伺服器,禁止此操作!" ErrCmdTimeout: "指令執行逾時!" -ErrEntrance: "安全入口資訊錯誤,請檢查後再試!" +ErrEntrance: "安全入口資訊錯誤,請檢查後再試。" ErrGroupIsDefault: "預設分組無法刪除" ErrGroupIsInUse: "分組正被使用,無法刪除。" ErrLocalDelete: "無法刪除本機節點!" @@ -42,7 +42,7 @@ CustomAppStoreFileValid: "應用商店包需要 .tar.gz 格式" ErrFileNotFound: "{{ .name }} 檔案不存在" AppBackup: '應用備份' AppBackupPush: '傳輸應用備份檔案 {{.file}} 到節點 {{ .name }}' -ErrSourceTargetSame: '源節點和目標節點不能相同!' +ErrSourceTargetSame: '源節點和目標節點不可相同!' AppInstall: '在 {{ .targetNode }} 節點安裝應用 {{ .name }}' AppInstallCheck: '檢查應用安裝環境' @@ -50,56 +50,56 @@ AppInstallCheck: '檢查應用安裝環境' ErrBackupInUsed: "該備份帳號已在排程任務中使用,無法刪除" ErrBackupCheck: "備份帳號測試連線失敗 {{ .err }}" ErrBackupLocal: "本機伺服器備份帳號暫不支援該操作!" -ErrBackupPublic: "檢測到該備份帳號為非公用,請檢查後再試!" +ErrBackupPublic: "偵測到該備份帳號為非公用,請檢查後再試。" ErrOSSConn: "無法取得最新版本,請確認伺服器是否能夠連接外部網路。" #license LicenseCheck: '檢查許可證是否可用' -ErrLicenseInUsed: '檢測到該許可證已被綁定,請檢查後重試!' -ErrLicenseExpired: '檢測到該許可證已過期,請檢查後重試!' -ErrLicense: "許可證格式錯誤,請檢查後重試!" -ErrLicenseCheck: "許可證校驗失敗,請檢查後重試!" -ErrXpackVersion: "許可證校驗失敗,該許可證受版本限制,無法成功匯入,請檢查後重試!" -ErrLicenseSave: "許可證資訊儲存失敗,錯誤 {{ .err }},請重試!" -ErrLicenseSync: "許可證資訊同步失敗,資料庫中未檢測到許可證資訊!" +ErrLicenseInUsed: '偵測到該許可證已被綁定,請檢查後重試。' +ErrLicenseExpired: '偵測到該許可證已過期,請檢查後重試。' +ErrLicense: "許可證格式錯誤,請檢查後重試。" +ErrLicenseCheck: "許可證驗證失敗,請檢查後重試。" +ErrXpackVersion: "許可證驗證失敗,該許可證受版本限制,無法成功匯入,請檢查後重試。" +ErrLicenseSave: "許可證資訊儲存失敗,錯誤 {{ .err }},請重試。" +ErrLicenseSync: "許可證資訊同步失敗,資料庫中未偵測到許可證資訊!" ErrLicenseExist: "該許可證記錄已存在,您可直接前往許可證頁面進行節點綁定。" ErrXpackNotFound: "該部分為專業版功能,請先在 面板設定-許可證 介面匯入許可證" ErrXpackExceptional: "該部分為專業版功能,請先在 面板設定-許可證 介面同步許可證狀態" -ErrXpackLost: "許可證已達到最大重試次數,請進入【面板設定】【許可證】頁面手動點擊同步按鈕,以確保專業版功能正常使用" -ErrDeviceLost: "許可證校驗必要檔案遺失,請檢查後重試!" +ErrXpackLost: "許可證已達到最大重試次數,請進入【面板設定】【許可證】頁面手動點選同步按鈕,以確保專業版功能正常使用" +ErrDeviceLost: "許可證驗證必要檔案遺失,請檢查後重試。" ErrDeviceErr: "目前環境與許可證匯入環境不一致,請編輯許可證重新匯入!" -ErrXpackTimeout: "請求超時,網路連接可能不穩定,請稍後再試!" -ErrUnbindMaster: "檢測到節點管理內存在節點,無法解綁目前許可證,請先移除後重試!" +ErrXpackTimeout: "請求逾時,網路連接可能不穩定,請稍後再試。" +ErrUnbindMaster: "偵測到節點管理內存在節點,無法解綁目前許可證,請先移除後重試!" ErrFreeNodeLimit: "社區版節點數量已達免費上限,請前往 www.lxware.cn/1panel 購買後重試!" -ErrNodeBound: "該許可證已綁定到其他節點,請檢查後重試!" -ErrNodeBoundDelete: "該許可證已被綁定,不支援刪除操作,請檢查後重試!" -ErrNodeBoundLimit: "目前免費節點已達上限,請檢查後重試!" -ErrLicenseFree: "僅當許可證正常綁定到節點後,才能使用其免費節點,請檢查後重試!" -ErrLicenseUnbind: "檢測到該許可證存在社區版節點,請在 [面板設定 - 許可證] 中解除綁定後重試!" -ErrNoSuchNode: "未能找到該節點資訊,請檢查後重試!" -ErrNodeUnbind: "檢測到該節點未在許可證綁定範圍內,請檢查後重試!" -ErrNodeBind: "檢測到該節點已綁定許可證,請檢查後重試!" +ErrNodeBound: "該許可證已綁定到其他節點,請檢查後重試。" +ErrNodeBoundDelete: "該許可證已被綁定,不支援刪除操作,請檢查後重試。" +ErrNodeBoundLimit: "目前免費節點已達上限,請檢查後重試。" +ErrLicenseFree: "僅當許可證正常綁定到節點後,才能使用其免費節點,請檢查後重試。" +ErrLicenseUnbind: "偵測到該許可證存在社區版節點,請在 [面板設定 - 許可證] 中解除綁定後重試!" +ErrNoSuchNode: "未能找到該節點資訊,請檢查後重試。" +ErrNodeUnbind: "偵測到該節點未在許可證綁定範圍內,請檢查後重試。" +ErrNodeBind: "偵測到該節點已綁定許可證,請檢查後重試。" ErrNodeLocalRollback: "主節點暫不支援直接回滾,請手動執行「1pctl restore」指令回滾!" ErrIntlLicense: "當前版本暫不支援匯入國際版許可證,敬請期待!" -InvalidRequestBodyType: "請求體格式錯誤,請檢查請求內容是否符合格式要求後重試!" -InvalidLicenseCodeType: "提供的許可證格式錯誤,請檢查後重試!" -LicenseNotFoundType: "許可證不存在,系統中未找到與提供許可證匹配的紀錄,請檢查後重試!" -LicenseRevokedType: "請求的許可證已被廢棄,無法使用,請檢查後重試!" +InvalidRequestBodyType: "請求內容格式錯誤,請檢查請求內容是否符合格式要求後重試!" +InvalidLicenseCodeType: "提供的許可證格式錯誤,請檢查後重試。" +LicenseNotFoundType: "許可證不存在,系統中未找到與提供許可證符合的紀錄,請檢查後重試。" +LicenseRevokedType: "請求的許可證已被廢棄,無法使用,請檢查後重試。" LicenseExpiredType: "許可證已超過有效期,請續費或在 面板設定-許可證 介面重新匯入許可證後重試!" -LicenseProductMismatchType: "許可證與目前請求的產品或服務不匹配!" -InvalidAssigneeType: "許可證分配的目標使用者或裝置資訊無效,請檢查後重試!" -LicenseUsageNotFoundType: "無使用記錄,目前許可證尚未被啟動或使用,請檢查後重試!" -LicenseUsageLimitExceededType: "該許可證已綁定到其他節點,請檢查後重試!" +LicenseProductMismatchType: "許可證與目前請求的產品或服務不符!" +InvalidAssigneeType: "許可證分配的目標使用者或裝置資訊無效,請檢查後重試。" +LicenseUsageNotFoundType: "無使用記錄,目前許可證尚未被啟動或使用,請檢查後重試。" +LicenseUsageLimitExceededType: "該許可證已綁定到其他節點,請檢查後重試。" # alert -ErrAlertSync: "告警資訊同步錯誤,請檢查後重試!" +ErrAlertSync: "告警資訊同步錯誤,請檢查後重試。" #task TaskStart: "{{ .name }} 任務開始 [START]" TaskEnd: "{{ .name }} 任務結束 [COMPLETED]" TaskFailed: "{{ .name }} 任務失敗" -TaskTimeout: "{{ .name }} 超時" +TaskTimeout: "{{ .name }} 逾時" TaskSuccess: "{{ .name }} 任務成功" TaskRetry: "開始第 {{ .name }} 次重試" SubTaskSuccess: "{{ .name }} 成功" @@ -124,7 +124,7 @@ Success: "成功" ScriptLibrary: "腳本庫" RemoteScriptLibrary: "遠端腳本庫" ScriptSyncSkip: "目前腳本庫已是最新版本!" -DownloadData: "下載腳本庫文件 data.yaml" +DownloadData: "下載腳本庫檔案 data.yaml" DownloadPackage: "下載腳本庫壓縮檔" AnalyticCompletion: "解析成功,現在開始同步到資料庫..." @@ -137,7 +137,7 @@ SyncPackageEncrypt: "封包加密" SyncRequest: "請求節點同步介面" SyncFailedRetry: "第 {{ .index }} 次同步節點資料失敗逾時,正在重試..." SyncFailed: "同步失敗,請在節點列表中手動同步!" -SyncSystemProxy: "系統代理配置" +SyncSystemProxy: "系統代理設定" SyncScripts: "腳本庫" SyncBackupAccounts: "備份帳號" SyncAlertSetting: "告警設定" @@ -149,26 +149,26 @@ SyncLanguage: "系統語言" NodeUpgrade: "升級節點 {{ .name }}" UpgradeCheck: "檢查節點更新" UpgradeCheckLocal: "本機節點不支援批次升級,跳過..." -UpgradeCheckLatest: "檢測到該節點已是最新版本,跳過..." +UpgradeCheckLatest: "偵測到該節點已是最新版本,跳過..." NewSSHClient: "初始化 SSH 連接" BackupBeforeUpgrade: "升級前備份資料" -UploadUpgradeFile: "發送升級所需文件" +UploadUpgradeFile: "發送升級所需檔案" RestartAfterUpgrade: "升級後啟動服務" #add node MasterData: "主節點資料" LoadSftpClient: "取得上傳用戶端" -PackageMasterData: "生成主節點備份壓縮檔" +PackageMasterData: "產生主節點備份壓縮檔" UploadBackup: "上傳備份資料" MvBackup: "行動資料到備份目錄" TaskAddNode: "新增節點" LoadNodeArch: "取得節點架構資訊" -LoadNodeArchDetail: "檢測到主節點架構: {{ .local }},子節點架構: {{ .node }}" +LoadNodeArchDetail: "偵測到主節點架構: {{ .local }},子節點架構: {{ .node }}" LoadNodeUpgradeDetail: "使用 v1 版本歷史安裝目錄: {{ .baseDir }},服務監聽埠: {{ .port }}" SyncAgentBaseInfo: "同步節點基礎資料" -GenerateSSLInfo: "生成節點 SSL 資訊" -ConnInfoNotMatch: "連接資訊不匹配" -MakeAgentPackage: "生成節點安裝包" +GenerateSSLInfo: "產生節點 SSL 資訊" +ConnInfoNotMatch: "連接資訊不符" +MakeAgentPackage: "產生節點安裝包" SendAgent: "下發節點安裝包" StartService: "啟動服務" NoBackupNode: "目前備份節點為空,請選擇備份節點儲存後重試!" @@ -178,13 +178,13 @@ AppVersion: "應用版本" AppCommands: "應用相關指令" AppInit: "初始化應用" AppKeyVal: "應用的 key(僅支援英文)" -AppCreateFileErr: "文件 {{ .name }} 建立失敗 {{ .err }}" +AppCreateFileErr: "檔案 {{ .name }} 建立失敗 {{ .err }}" AppCreateDirErr: "資料夾 {{ .name }} 建立失敗 {{ .err }}" AppMissKey: "應用的 key 缺失,使用 -k 指定" AppMissVersion: "應用版本缺失,使用 -v 指定" AppVersionExist: "版本已存在!" AppCreateSuccessful: "建立成功!" -AppWriteErr: "文件 {{ .name }} 寫入失敗 {{ .err }}" +AppWriteErr: "檔案 {{ .name }} 寫入失敗 {{ .err }}" SudoHelper: "請使用 {{ .cmd }} 或切換到 root 使用者" ListenIPCommands: "切換監聽 IP" ListenIPv4: "監聽 IPv4" @@ -198,13 +198,13 @@ ResetIPs: "取消 1Panel 授權 IP 限制" ResetDomain: "取消 1Panel 存取網域綁定" ResetPasskey: "清空 1Panel 通行密鑰" RestoreCommands: "回滾 1Panel 服務及資料" -RestoreNoSuchFile: "暫無可回滾文件" +RestoreNoSuchFile: "暫無可回滾檔案" RestoreStep1: "(1/5)開始從 {{ .name }} 目錄回滾 1Panel 服務及資料... " -RestoreStep2: "(2/5)1Panel 二進制回滾成功" +RestoreStep2: "(2/5)1Panel 二進位回滾成功" RestoreStep3: "(3/5)1Panel 腳本回滾成功" RestoreStep4: "(4/5)1Panel 服務回滾成功" RestoreStep5: "(5/5)1Panel 資料回滾成功" -RestoreSuccessful: "回滾成功!已回滾到 {{ .version },正在重啟服務,請稍候..." +RestoreSuccessful: "回滾成功!已回滾到 {{ .version }},正在重新啟動服務,請稍候..." UpdateCommands: "修改面板資訊" UpdateUser: "修改面板使用者" UpdatePassword: "修改面板密碼" @@ -222,10 +222,10 @@ UpdatePasswordFormat: "錯誤: 面板密碼僅支援字母、數字、特殊字 UpdatePasswordLen: "錯誤: 請輸入 6 位以上密碼!" UpdatePasswordRe: "確認密碼: " UpdatePasswordErr: "錯誤: 面板密碼修改失敗,{{ .err }}" -UpdatePasswordSame: "錯誤: 兩次密碼不匹配,請檢查後重試!" +UpdatePasswordSame: "錯誤: 兩次密碼不符,請檢查後重試。" UpdatePasswordResult: "面板密碼: {{ .name }}" UpdatePortFormat: "錯誤: 輸入的埠號必須在 1 到 65535 之間!" -UpdatePortUsed: "錯誤: 該埠號正被佔用,請檢查後重試!" +UpdatePortUsed: "錯誤: 該埠號正被佔用,請檢查後重試。" UpdatePortErr: "錯誤: 面板埠修改失敗,{{ .err }}" UpdatePortResult: "面板埠: {{ .name }}" UpdatePortFirewallAdd: "新增防火牆埠規則失敗,{{ .err }},請您手動將 {{ .name }} 埠新增至防火牆規則中。" @@ -244,7 +244,7 @@ HandlePrivateKey: "處理節點私鑰" HandlePublicKey: "處理節點公鑰" ExchangeFile: "開始從 {{ .source }} 節點同步 {{ .sourcePath }} 到 {{ .dest }} 節點 {{ .destPath }}" TaskRsync: "同步" -NodeFile: "節點文件" +NodeFile: "節點檔案" #mobile app ErrVerifyToken: '令牌驗證錯誤,請重設後再次掃碼' @@ -255,7 +255,7 @@ ErrExpiredToken: '令牌過期,請重設後再次掃碼' ErrMasterDelete: "無法刪除主節點,請先刪除從節點" ClusterNameIsExist: "叢集名稱已存在" AppStatusUnHealthy: "應用取得狀態異常,請在節點列表檢查安裝節點狀態" -MasterNodePortNotAvailable: "節點 {{ .name }} 埠 {{ .port }} 連通性校驗失敗,請檢查防火牆/安全組設定和主節點狀態" +MasterNodePortNotAvailable: "節點 {{ .name }} 埠 {{ .port }} 連通性驗證失敗,請檢查防火牆/安全組設定和主節點狀態" ClusterMasterNotExist: "叢集主節點失聯,請刪除子節點" #ssl diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index a11d35ed5..fd56bf7a7 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -2,23 +2,23 @@ import fit2cloudEnLocale from 'fit2cloud-ui-plus/src/locale/lang/en'; const message = { commons: { - true: 'true', - false: 'false', + true: 'True', + false: 'False', colon: ': ', - example: 'For example, ', + example: 'e.g., ', fit2cloud: 'FIT2CLOUD', lingxia: 'Lingxia', button: { run: 'Run', prev: 'Previous', next: 'Next', - create: 'Create ', - add: 'Add ', - save: 'Save ', + create: 'Create', + add: 'Add', + save: 'Save', set: 'Set', - sync: 'Sync ', + sync: 'Sync', delete: 'Delete', - edit: 'Edit ', + edit: 'Edit', enable: 'Enable', disable: 'Disable', confirm: 'Confirm', @@ -39,7 +39,7 @@ const message = { clone: 'Clone', expand: 'Expand', collapse: 'Collapse', - log: 'View logs', + log: 'Logs', back: 'Back', backup: 'Backup', recover: 'Recover', @@ -48,10 +48,10 @@ const message = { download: 'Download', init: 'Initialize', verify: 'Verify', - saveAndEnable: 'Save and Enable', + saveAndEnable: 'Save and enable', import: 'Import', export: 'Export', - power: 'Authorization', + power: 'Permissions', search: 'Search', refresh: 'Refresh', get: 'Get', @@ -60,7 +60,7 @@ const message = { updateNow: 'Update Now', ignore: 'Ignore upgrade', copy: 'Copy', - random: 'Random Password', + random: 'Random', install: 'Install', uninstall: 'Uninstall', fullscreen: 'Enter fullscreen', @@ -71,10 +71,10 @@ const message = { notAgree: 'Disagree', preview: 'Preview', open: 'Open', - notSave: "Don't Save", - createNewFolder: 'Create New Folder', - createNewFile: 'Create New File', - helpDoc: 'Help Docs', + notSave: `Don't Save`, + createNewFolder: 'Create new folder', + createNewFile: 'Create new file', + helpDoc: 'Docs', bind: 'Bind', unbind: 'Unbind', cover: 'Cover', @@ -100,11 +100,11 @@ const message = { delete: 'Delete', }, search: { - timeStart: 'Time start', - timeEnd: 'Time end', + timeStart: 'Start time', + timeEnd: 'End time', timeRange: 'To', - dateStart: 'Date start', - dateEnd: 'Date end', + dateStart: 'Start date', + dateEnd: 'End date', date: 'Date', }, table: { @@ -119,11 +119,11 @@ const message = { records: 'Records', group: 'Group', default: 'Default', - createdAt: 'Creation time', - publishedAt: 'Publish time', + createdAt: 'Created', + publishedAt: 'Published', date: 'Date', - updatedAt: 'Update time', - operate: 'Operations', + updatedAt: 'Updated', + operate: 'Actions', message: 'Message', description: 'Description', interval: 'Interval', @@ -132,97 +132,95 @@ const message = { port: 'Port', forward: 'Forward', protocol: 'Protocol', - tableSetting: 'Table setting', - refreshRate: 'Refresh rate', + tableSetting: 'Table settings', + refreshRate: 'Refresh interval', noRefresh: 'No refresh', selectColumn: 'Select column', local: 'Local', - serialNumber: 'Serial number', + serialNumber: 'No.', manageGroup: 'Manage Groups', backToList: 'Back to List', keepEdit: 'Continue Editing', }, loadingText: { - Upgrading: 'System upgrade, please wait...', - Restarting: 'System restart, please wait...', + Upgrading: 'Upgrading system, please wait...', + Restarting: 'Restarting system, please wait...', Recovering: 'Recovering from snapshot, please wait...', - Rollbacking: 'Rollbacking from snapshot, please wait...', + Rollbacking: 'Rolling back snapshot, please wait...', }, msg: { noneData: 'No data available', - delete: `This operation delete can't be undone. Do you want to continue?`, - clean: `This operation clean can't be undone. Do you want to continue?`, - closeDrawerHelper: 'The system may not save the changes you made. Do you want to continue?', + delete: `This action cannot be undone. Continue?`, + clean: `This cleanup cannot be undone. Continue?`, + closeDrawerHelper: 'Unsaved changes may be lost. Continue?', deleteSuccess: 'Deleted successfully', loginSuccess: 'Logged in successfully', - operationSuccess: 'Done successfully', + operationSuccess: 'Completed successfully', copySuccess: 'Copied successfully', - notSupportOperation: `This operation isn't supported`, - requestTimeout: 'The request timed out, please try again later', - infoTitle: 'Hint', - notRecords: 'No execution record is generated for the current task', + notSupportOperation: `This operation is not supported`, + requestTimeout: 'Request timed out, try again later', + infoTitle: 'Notice', + notRecords: 'No run records for this task', sureLogOut: 'Are you sure you want to log out?', createSuccess: 'Created successfully', updateSuccess: 'Updated successfully', uploadSuccess: 'Uploaded successfully', - operateConfirm: 'If you are sure about the operation, please input it manually: ', - inputOrSelect: 'Please select or enter', + operateConfirm: 'To confirm, type: ', + inputOrSelect: 'Select or enter', copyFailed: 'Failed to copy', - operatorHelper: `The operation "{1}" will be performed on "{0}" and can't be undone. Do you want to continue?`, + operatorHelper: `Run "{1}" on "{0}". This cannot be undone. Continue?`, notFound: 'Sorry, the page you requested does not exist.', - unSupportType: `Current file type isn't supported.`, - unSupportSize: 'The uploaded file exceeds {0}M, please confirm!', - fileExist: `The file already exists in the current folder. Repeat uploading isn't supported.`, - fileNameErr: - 'You can upload only files whose name contains 1 to 256 characters, including English, Chinese, digits, or periods (.-_)', - confirmNoNull: `Make sure the value {0} isn't empty.`, - errPort: 'Incorrect port information, please confirm!', + unSupportType: `Current file type is not supported.`, + unSupportSize: 'Uploaded file exceeds {0}M. Confirm.', + fileExist: `The file already exists in the current folder. Repeat uploading is not supported.`, + fileNameErr: 'Filename must be 1-256 chars and only include letters, numbers, dots, dashes, or underscores', + confirmNoNull: `Make sure the value {0} is not empty.`, + errPort: 'Invalid port, please check', remove: 'Remove', - backupHelper: 'The current operation will back up {0}. Do you want to proceed?', - recoverHelper: 'Restoring from {0} file. This operation is irreversible. Do you want to continue?', + backupHelper: 'The current operation will back up {0}. Proceed?', + recoverHelper: 'Restore from {0}. This is irreversible. Continue?', backupSuccess: 'Backup successful', restoreSuccess: 'Restore successful', - refreshSuccess: 'Refresh successful', + refreshSuccess: 'Refreshed successfully', rootInfoErr: "It's already the root directory", resetSuccess: 'Reset successful', creatingInfo: 'Creating, no need for this operation', - installSuccess: 'Install successful', - uninstallSuccess: 'Uninstall successful', - offlineTips: 'Offline version does not support this operation', - errImportFormat: 'Import data or format is abnormal, please check and try again!', - importHelper: - 'When importing conflicting or duplicate data, the imported content will be used as the standard to update the original database data.', + installSuccess: 'Installed successfully', + uninstallSuccess: 'Uninstalled successfully', + offlineTips: 'Offline edition does not support this action', + errImportFormat: 'Import data or format is abnormal, check and try again!', + importHelper: 'If conflicts exist, imported data overwrites existing records.', errImport: 'File content is abnormal:', }, login: { username: 'Username', password: 'Password', passkey: 'Passkey Login', - welcome: 'Welcome back, please enter your username and password to log in!', - errorAuthInfo: 'The user name or password you entered is incorrect, please re-enter!', - errorMfaInfo: 'Incorrect authentication information, please try again!', + welcome: 'Welcome back. Sign in with your username and password.', + errorAuthInfo: 'Incorrect username or password, try again.', + errorMfaInfo: 'Invalid authentication info, try again.', captchaHelper: 'Captcha', - errorCaptcha: 'Captcha code error!', + errorCaptcha: 'Invalid captcha code', notSafe: 'Access Denied', - safeEntrance1: 'The secure login has been enabled in the current environment', - safeEntrance2: 'Enter the following command on the SSH terminal to view the panel entry: 1pctl user-info', - errIP1: 'Authorized IP address access is enabled in the current environment', - errDomain1: 'Access domain name binding is enabled in the current environment', - errHelper: 'To reset the binding information, run the following command on the SSH terminal: ', - codeInput: 'Please enter the 6-digit verification code of the MFA validator', - mfaTitle: 'MFA Certification', + safeEntrance1: 'Secure entry is enabled in this environment', + safeEntrance2: 'Run this command over SSH to view the panel entry: 1pctl user-info', + errIP1: 'IP allowlist is enabled in this environment', + errDomain1: 'Domain binding is enabled in this environment', + errHelper: 'To reset binding info, run this command over SSH: ', + codeInput: 'Enter the 6-digit MFA code', + mfaTitle: 'MFA Verification', mfaCode: 'MFA verification code', title: 'Linux Server Management Panel', licenseHelper: '', - errorAgree: 'Click to agree to the Community Software License', + errorAgree: 'Please accept the Community License Agreement', logout: 'Logout', agreeTitle: 'Agreement', agreeContent: 'In order to better protect your legitimate rights and interests, please read and agree to the following agreement « Community License Agreement »', - passkeyFailed: 'Passkey login failed, please try again', + passkeyFailed: 'Passkey sign-in failed, please try again', passkeyNotSupported: - 'Current browser or environment does not support passkeys, please confirm you have bound a domain name and are accessing through HTTPS', - passkeyToPassword: 'Have trouble using a passkey? Use password instead', + 'Current browser or environment does not support passkeys, confirm you have bound a domain name and are accessing through HTTPS', + passkeyToPassword: 'Passkey not working? Use password instead', }, rule: { username: 'Enter a username', @@ -257,7 +255,7 @@ const message = { host: 'This field must be a valid IP address or domain name.', hostHelper: 'Support input of IP address or domain name', port: 'This field must be a valid port number.', - selectHelper: 'Please select the correct {0} file', + selectHelper: 'Select the correct {0} file', domain: 'This field must be like: example.com or example.com:8080.', databaseName: 'This field must consist of English, numbers, and "_" characters with a length of 1-30.', ipErr: 'This field must be a valid IP address.', @@ -284,14 +282,14 @@ const message = { alias: 'Supports English, numbers, - and _, length 1-128, and cannot start or end with -_.', }, res: { - paramError: 'The request failed, please try again later!', - forbidden: 'The current user has no permission', - serverError: 'Service exception', - notFound: 'The resource does not exist', - commonError: 'The request failed', + paramError: 'Request failed. Try again later.', + forbidden: 'Current user has no permission', + serverError: 'Service error', + notFound: 'Resource does not exist', + commonError: 'Request failed', }, service: { - serviceNotStarted: `The {0} service isn't started.`, + serviceNotStarted: `The {0} service is not started.`, }, status: { running: 'Running', @@ -327,7 +325,7 @@ const message = { recreating: 'Recreating', creating: 'Creating', init: 'Waiting for application', - ready: 'normal', + ready: 'Ready', applying: 'Applying', uninstalling: 'Uninstalling', lost: 'Lost Contact', @@ -375,9 +373,9 @@ const message = { }, }, menu: { - home: 'Overview', + home: 'Dashboard', apps: 'App Store', - website: 'Website | Websites', + website: 'Website | WebSites', project: 'Project | Projects', config: 'Configuration | Configurations', ssh: 'SSH Settings', @@ -394,7 +392,7 @@ const message = { files: 'File Browser', monitor: 'Monitoring', terminal: 'Terminal | Terminals', - settings: 'Setting | Settings', + settings: 'Settings', toolbox: 'Toolbox', logs: 'Log | Logs', runtime: 'Runtime | Runtimes', @@ -404,23 +402,23 @@ const message = { supervisor: 'Supervisor', tamper: 'Tamper-proof', app: 'Application', - msgCenter: 'Task Center', + msgCenter: 'Tasks', disk: 'Disk', }, home: { - recommend: 'recommend', - dir: 'dir', + recommend: 'Recommended', + dir: 'Directory', alias: 'Alias', - quickDir: 'Quick Dir', - minQuickJump: 'Please set at least one quick jump entry!', - maxQuickJump: 'You can set up to four quick jump entries!', + quickDir: 'Quick Access', + minQuickJump: 'Add at least one quick access entry', + maxQuickJump: 'You can add up to four quick access entries', database: 'Database - All', restart_1panel: 'Restart panel', restart_system: 'Restart server', - operationSuccess: 'Operation succeeded, rebooting, please refresh the browser manually later!', - entranceHelper: `Security entrance isn't enabled. You can enable it in "Settings -> Security" to improve system security.`, + operationSuccess: 'Completed successfully. Rebooting now, refresh the browser later.', + entranceHelper: `Security entrance is not enabled. You can enable it in "Settings -> Security" to improve system security.`, appInstalled: 'Applications', - systemInfo: 'System infomation', + systemInfo: 'System information', hostname: 'Hostname', platformVersion: 'Operating system', kernelVersion: 'Kernel', @@ -429,26 +427,26 @@ const message = { io: 'Disk I/O', ip: 'Local IP', proxy: 'System proxy', - baseInfo: 'Base info', + baseInfo: 'Basic info', totalSend: 'Total sent', totalRecv: 'Total received', rwPerSecond: 'I/O operations', ioDelay: 'I/O latency', uptime: 'Uptime', runningTime: 'Up since', - mem: 'System Memory', - swapMem: 'Swap Partition', + mem: 'System memory', + swapMem: 'Swap', runSmoothly: 'Low load', runNormal: 'Moderate load', runSlowly: 'High load', runJam: 'Heavy load', - core: 'Physical core', - logicCore: 'Logical core', + core: 'Physical cores', + logicCore: 'Logical cores', corePercent: 'Core Usage', cpuFrequency: 'CPU Frequency', - cpuDetailedPercent: 'CPU Usage Detail', + cpuDetailedPercent: 'CPU usage details', cpuUser: 'User', cpuSystem: 'System', cpuIdle: 'Idle', @@ -470,7 +468,7 @@ const message = { percent: 'Utilization', goInstall: 'Go install', - networkCard: 'Network card', + networkCard: 'NIC', disk: 'Disk', memo: 'Memo', @@ -491,9 +489,9 @@ const message = { logout: 'Logout', }, database: { - manage: 'Manage database', + manage: 'Manage Database', deleteBackupHelper: 'Delete database backups simultaneously', - delete: 'Delete operation cannot be rolled back, please input "', + delete: 'Delete action cannot be undone, please input "', deleteHelper: '" to delete this database', create: 'Create database', noMysql: 'Database service (MySQL or MariaDB)', @@ -502,31 +500,30 @@ const message = { goInstall: 'Go to install', isDelete: 'Deleted', permission: 'Change permissions', - format: 'Character Set', + format: 'Charset', collation: 'Collation', collationHelper: 'If empty, use the default collation of the {0} character set', permissionForIP: 'IP', - permissionAll: 'All of them(%)', + permissionAll: 'All (%)', localhostHelper: 'Configuring database permissions as "localhost" for container deployment will prevent external access to the container. Please choose carefully!', databaseConnInfo: 'View connection info', rootPassword: 'Root password', - serviceName: 'Service Name', + serviceName: 'Service name', serviceNameHelper: 'Access between containers in the same network.', backupList: 'Backup', loadBackup: 'Import', - localUpload: 'Local Upload', - hostSelect: 'Server Selection', + localUpload: 'Local upload', + hostSelect: 'Server selection', selectHelper: 'Are you sure you want to import backup file {0}?', remoteAccess: 'Remote access', - remoteHelper: 'Multiple IP comma-delimited, example: 172.16.10.111, 172.16.10.112', - remoteConnHelper: - 'Remote connection to MySQL as user root may have security risks. Therefore, perform this operation with caution.', + remoteHelper: 'Use commas to separate multiple IPs, e.g. 172.16.10.111,172.16.10.112', + remoteConnHelper: 'Remote MySQL root login is risky. Proceed with caution.', changePassword: 'Change password', - changeConnHelper: 'This operation will modify the current database {0}. Do you want to continue?', + changeConnHelper: 'This will modify database {0}. Continue?', changePasswordHelper: 'The database has been associated with an application. Changing the password will change the database password of the application at the same time. The change takes effect after the application restarts.', - recoverTimeoutHelper: '-1 means no timeout limit', + recoverTimeoutHelper: '-1 means no timeout', confChange: 'Configuration', confNotFound: @@ -537,11 +534,10 @@ const message = { loadFromRemote: 'Sync from server', userBind: 'Bind user', - pgBindHelper: `This operation is used to create a new user and bind it to the target database. Currently, selecting users already existing in the database isn't supported.`, - pgSuperUser: 'Super User', - loadFromRemoteHelper: - 'This will synchronize the database info on the server to 1Panel. Do you want to continue?', - passwordHelper: 'Cannot obtain, click to modify', + pgBindHelper: `This operation is used to create a new user and bind it to the target database. Currently, selecting users already existing in the database is not supported.`, + pgSuperUser: 'Superuser', + loadFromRemoteHelper: 'Sync database info from the server to 1Panel. Continue?', + passwordHelper: 'Not available, click to update', remote: 'Remote', remoteDB: 'Remote server | Remote servers', createRemoteDB: 'Bind @.lower:database.remoteDB', @@ -554,14 +550,14 @@ const message = { localDB: 'Local database', address: 'Database address', version: 'Database version', - userHelper: 'The root user or a database user with root privileges can access the remote database.', - pgUserHelper: 'Database user with superuser privileges.', + userHelper: 'Use root or a user with root privileges to access the remote database.', + pgUserHelper: 'Use a database superuser account.', ssl: 'Use SSL', clientKey: 'Client private key', clientCert: 'Client certificate', caCert: 'CA certificate', hasCA: 'Has CA certificate', - skipVerify: 'Ignore certificate validity check', + skipVerify: 'Skip certificate validation', initialDB: 'Initial Database', formatHelper: @@ -571,16 +567,16 @@ const message = { supportUpType: 'Only supports sql, sql.gz, tar.gz, .zip file formats. The imported compressed file must contain only one .sql file or include test.sql', - currentStatus: 'Current state', + currentStatus: 'Current status', baseParam: 'Basic parameter', performanceParam: 'Performance parameter', - runTime: 'Startup time', + runTime: 'Start time', connections: 'Total connections', bytesSent: 'Send bytes', bytesReceived: 'Received bytes', queryPerSecond: 'Query per second', txPerSecond: 'Tx per second', - connInfo: 'active/peak connections', + connInfo: 'Active/peak connections', connInfoHelper: 'If the value is too large, increase "max_connections".', threadCacheHit: 'Thread cache hit', threadCacheHitHelper: 'If it is too low, increase "thread_cache_size".', @@ -588,16 +584,16 @@ const message = { indexHitHelper: 'If it is too low, increase "key_buffer_size".', innodbIndexHit: 'Innodb index hit rate', innodbIndexHitHelper: 'If it is too low, increase "innodb_buffer_pool_size".', - cacheHit: 'Querying the cache hit', + cacheHit: 'Query cache hit rate', cacheHitHelper: 'If it is too low, increase "query_cache_size".', tmpTableToDB: 'Temporary table to disk', tmpTableToDBHelper: 'If it is too large, try increasing "tmp_table_size".', openTables: 'Open tables', openTablesHelper: 'The configuration value of "table_open_cache" must be greater than or equal to this value.', selectFullJoin: 'Select full join', - selectFullJoinHelper: `If the value isn't 0, check whether the index of the data table is correct.`, + selectFullJoinHelper: `If this value is not 0, check table indexes.`, selectRangeCheck: 'The number of joins with no index', - selectRangeCheckHelper: `If the value isn't 0, check whether the index of the data table is correct.`, + selectRangeCheckHelper: `If this value is not 0, check table indexes.`, sortMergePasses: 'Number of sorted merges', sortMergePassesHelper: 'If the value is too large, increase "sort_buffer_size".', tableLocksWaited: 'Lock table number', @@ -626,7 +622,7 @@ const message = { isOn: 'On', longQueryTime: 'threshold(s)', - thresholdRangeHelper: 'Please enter the correct threshold (1 - 600).', + thresholdRangeHelper: 'Enter the correct threshold (1 - 600).', timeout: 'Timeout(s)', timeoutHelper: 'Idle connection timeout period. 0 indicates that the connection is on continuously.', @@ -650,9 +646,9 @@ const message = { keyspaceMisses: 'Number of failed attempts to find the database key.', hit: 'Find the database key hit ratio.', latestForkUsec: 'The number of microseconds spent on the last fork() operation.', - redisCliHelper: `"redis-cli" service isn't detected. Enable the service first.`, + redisCliHelper: `"redis-cli" not detected. Enable the service first.`, redisQuickCmd: 'Redis quick commands', - recoverHelper: 'This will overwrite the data with [{0}]. Do you want to continue?', + recoverHelper: 'This will overwrite data with [{0}]. Continue?', submitIt: 'Overwrite the data', baseConf: 'Basic', @@ -722,9 +718,9 @@ const message = { pairingCode: 'Pairing Code', pairingCodePlaceholder: 'Enter pairing code', approvePairing: 'Approve Pairing', - feishuRequired: 'Please fill botName / appId / appSecret', + feishuRequired: 'Fill botName / appId / appSecret', saveSuccess: 'Saved successfully', - pairingCodeRequired: 'Please enter pairing code', + pairingCodeRequired: 'Enter pairing code', pairingApproveSuccess: 'Pairing approved successfully', customModelHelper: 'For custom model accounts, model names must start with custom/.', customProviderHelper: 'Custom model providers do not validate whether the account is available.', @@ -849,22 +845,20 @@ const message = { create: 'Create', createByCommand: 'Create by command', commandInput: 'Command input', - commandRule: 'Please enter the correct docker run container creation command!', - commandHelper: 'This command will be executed on the server to create the container. Do you want to continue?', + commandRule: 'Enter the correct docker run container creation command!', + commandHelper: 'This command will run on the server to create the container. Continue?', edit: 'Edit container', updateHelper1: 'Detected that this container comes from the app store. Please note the following two points:', updateHelper2: '1. The current modifications will not be synchronized to the installed applications in the app store.', updateHelper3: '2. If you modify the application on the installed page, the currently edited content will become invalid.', - updateHelper4: - 'Editing the container requires rebuilding, and any non-persistent data will be lost. Do you want to continue?', + updateHelper4: 'Editing the container requires rebuilding, and any non-persistent data will be lost. Continue?', containerList: 'Container list', - operatorHelper: '{0} will be performed on the following container, Do you want to continue?', - operatorAppHelper: - 'The "{0}" operation will be performed on the following container(s) and may affect the running services. Do you want to continue?', + operatorHelper: 'Run {0} on the following container. Continue?', + operatorAppHelper: 'Run "{0}" on the following container(s). Running services may be affected. Continue?', containerDeleteHelper: - "Detected that the container is from the App Store. Deleting the container will not completely remove it from 1Panel. To delete it completely, please go to the App Store -> 'Installed' or 'Runtime Environment' menus. Continue?", + "Detected that the container is from the App Store. Deleting the container will not completely remove it from 1Panel. To delete it completely, go to the App Store -> 'Installed' or 'Runtime Environment' menus. Continue?", start: 'Start', stop: 'Stop', restart: 'Restart', @@ -878,7 +872,7 @@ const message = { containerPruneHelper1: 'This will delete all containers that are in stopped state.', containerPruneHelper2: 'If the containers are from the app store, you need to go to "App Store -> Installed" and click the "Rebuild" button to reinstall them after performing the cleanup.', - containerPruneHelper3: `This operation can't be undone. Do you want to continue?`, + containerPruneHelper3: `This operation cannot be undone. Continue?`, imagePrune: 'Prune', imagePruneSome: 'Clean unlabeled', imagePruneSomeEmpty: 'No images with the "none" tag can be cleaned.', @@ -887,25 +881,26 @@ const message = { imagePruneAllEmpty: 'No unused images can be cleaned.', imagePruneAllHelper: 'Clean the images that are not used by any containers.', networkPrune: 'Prune', - networkPruneHelper: 'This will remove all unused networks. Do you want to continue?', + networkPruneHelper: 'This will remove all unused networks. Continue?', volumePrune: 'Prune', - volumePruneHelper: 'This will remove all unused local volumes. Do you want to continue?', - cleanSuccess: 'The operation is successful, the number of this cleanup: {0}!', + volumePruneHelper: 'This will remove all unused local volumes. Continue?', + cleanSuccess: 'Completed successfully, the number of this cleanup: {0}!', cleanSuccessWithSpace: - 'The operation is successful. The number of disks cleaned this time is {0}. The disk space freed is {1}!', + 'Completed successfully. The number of disks cleaned this time is {0}. The disk space freed is {1}!', unExposedPort: 'The current port mapping address is 127.0.0.1, which cannot enable external access.', upTime: 'Uptime', fetch: 'Fetch', lines: 'Lines', - linesHelper: 'Please enter the correct number of logs to retrieve!', + linesHelper: 'Enter the correct number of logs to retrieve!', lastDay: 'Last day', last4Hour: 'Last 4 hours', lastHour: 'Last hour', last10Min: 'Last 10 minutes', cleanLog: 'Clean log', - downLogHelper1: 'This will download all logs from container {0}. Do you want to continue?', - downLogHelper2: 'This will download the recent {0} logs from container {0}. Do you want to continue?', - cleanLogHelper: `This will require restarting the container and can't be undone. Do you want to continue?`, + cleanLogscope: 'Cleanup Type', + downLogHelper1: 'This will download all logs from container {0}. Continue?', + downLogHelper2: 'This will download the latest {1} logs from container {0}. Continue?', + cleanLogHelper: `This will require restarting the container and cannot be undone. Continue?`, newName: 'New name', workingDir: 'Working Dir', source: 'Resource usage', @@ -952,7 +947,7 @@ const message = { upgradeHelper: 'Repository Name/Image Name: Image Version', upgradeWarning2: - 'The upgrade operation requires rebuilding the container, any unpersisted data will be lost. Do you wish to continue?', + 'The upgrade operation requires rebuilding the container, any unpersisted data will be lost. Continue?', oldImage: 'Current image', sameImageContainer: 'Same-image containers', sameImageHelper: 'Containers using the same image can be batch upgraded after selection', @@ -1037,12 +1032,11 @@ const message = { tagHelper: 'One per line. For example,\nkey1=value1\nkey2=value2', imageNameHelper: 'Image name and Tag, for example: nginx:latest', cleanBuildCache: 'Clean build cache', - delBuildCacheHelper: `This will delete all cached artifacts that are generated during builds and can't be undone. Do you want to continue?`, + delBuildCacheHelper: `This will delete all cached artifacts that are generated during builds and cannot be undone. Continue?`, urlWarning: 'The URL prefix does not need to include http:// or https://. Please modify.', network: 'Network | Networks', - networkHelper: - 'This may cause some applications and runtime environments to not work properly. Do you want to continue?', + networkHelper: 'This may cause some applications and runtime environments to not work properly. Continue?', createNetwork: 'Create', networkName: 'Name', driver: 'Driver', @@ -1068,8 +1062,7 @@ const message = { httpRepoHelper: 'Operating an HTTP-type repository requires restarting the Docker service.', httpRepo: 'Choosing HTTP protocol requires restarting the Docker service to add it into insecure registries.', delInsecure: 'Deletion of credit', - delInsecureHelper: - 'This will restart Docker service to remove it from insecure registries. Do you want to continue?', + delInsecureHelper: 'This will restart Docker service to remove it from insecure registries. Continue?', downloadUrl: 'Server', imageRepo: 'Image repo', repoHelper: 'Does it include a mirror repository/organization/project?', @@ -1081,7 +1074,7 @@ const message = { compose: 'Compose | Composes', composeFile: 'Compose File', - fromChangeHelper: 'Switching the source will clean the current edited content. Do you want to continue?', + fromChangeHelper: 'Switching the source will clean the current edited content. Continue?', composePathHelper: 'Configuration file save path: {0}', composeHelper: 'The composition created through 1Panel editor or template will be saved in the {0}/docker/compose directory.', @@ -1094,24 +1087,22 @@ const message = { template: 'Template', composeTemplate: 'Compose template | Compose templates', createComposeTemplate: 'Create', - exportHelper: 'About to export {0} compose templates. Continue?', content: 'Content', - contentEmpty: 'Compose content cannot be empty, please enter and try again!', + contentEmpty: 'Compose content cannot be empty, enter and try again!', containerNumber: 'Container number', containerStatus: 'Container status', exited: 'Exited', running: 'Running ( {0} / {1} )', composeDetailHelper: 'The compose is created external to 1Panel. The start and stop operations are not supported.', - composeOperatorHelper: '{1} operation will be performed on {0}. Do you want to continue?', - composeDownHelper: - 'This will stop and remove all containers and networks under the {0} compose. Do you want to continue?', + composeOperatorHelper: '{1} operation will be performed on {0}. Continue?', + composeDownHelper: 'This will stop and remove all containers and networks under the {0} compose. Continue?', composeEnvHelper2: 'This orchestration was created by the 1Panel App Store. Please modify environment variables in the installed applications.', setting: 'Setting | Settings', goSetting: 'Go to edit', - operatorStatusHelper: 'This will "{0}" Docker service. Do you want to continue?', + operatorStatusHelper: 'This will "{0}" the Docker service. Continue?', dockerStatus: 'Docker Service', daemonJsonPathHelper: 'Ensure that the configuration path is the same as that specified in docker.service.', mirrors: 'Registry mirrors', @@ -1139,14 +1130,13 @@ const message = { iptablesHelper2: 'Disabling iptables will result in the containers being unable to communicate with external networks.', daemonJsonPath: 'Conf Path', - serviceUnavailable: `Docker service isn't started at present.`, + serviceUnavailable: `Docker service is not started at present.`, startIn: ' to start', sockPath: 'Unix domain socket', sockPathHelper: 'Communication channel between Docker daemon and the client.', sockPathHelper1: 'Default path: /var/run/docker-x.sock', - sockPathMsg: - 'Saving the Socket Path setting may result in Docker service being unavailable. Do you want to continue?', - sockPathErr: 'Please select or enter the correct Docker sock file path', + sockPathMsg: 'Saving Socket Path may make Docker unavailable. Continue?', + sockPathErr: 'Select or enter the correct Docker sock file path', related: 'Related', includeAppstore: 'Show containers from the app store', excludeAppstore: 'Hide App Store Container', @@ -1170,8 +1160,8 @@ const message = { importHelper: 'Duplicate scheduled tasks will be automatically skipped during import. Tasks will be set to [Disabled] status by default, and set to [Pending Edit] status when data association is abnormal.', changeStatus: 'Change status', - disableMsg: 'This will stop the scheduled task from automatically executing. Do you want to continue?', - enableMsg: 'This will allow the scheduled task to automatically execute. Do you want to continue?', + disableMsg: 'This will stop the scheduled task from automatically executing. Continue?', + enableMsg: 'This will allow the scheduled task to automatically execute. Continue?', taskType: 'Type', nextTime: 'Next 5 executions', record: 'Records', @@ -1210,22 +1200,21 @@ const message = { taskName: 'Name', cronSpec: 'Trigger cycle', cronSpecDoc: - 'Custom execution cycles only support the [minute hour day month week] format, e.g., 0 0 * * *. For details, please refer to the official documentation.', + 'Custom execution cycles only support the [minute hour day month week] format, e.g., 0 0 * * *. For details, see the official documentation.', cronSpecHelper: 'Enter the correct execution period', - cleanHelper: - 'This operation records all job execution records, backup files, and log files. Do you want to continue?', + cleanHelper: 'This action records all job runs, backup files, and log files. Continue?', backupContent: 'Backup content', directory: 'Backup directory', sourceDir: 'Backup directory', snapshot: 'System snapshot', - allOptionHelper: `The current task plan is to back up all [{0}]. Direct download isn't supported at the moment. You can check the backup list of [{0}] menu.`, + allOptionHelper: `The current task plan is to back up all [{0}]. Direct download is not supported at the moment. You can check the backup list of [{0}] menu.`, exclusionRules: 'Exclusive rule', exclusionRulesHelper: 'Select or enter exclusion rules, press Enter after each set to continue. Exclusion rules will apply to all compression operations in this backup', default_download_path: 'Default download link', saveLocal: 'Retain local backups (the same as the number of cloud storage copies)', url: 'URL Address', - urlHelper: 'Please enter a valid URL address', + urlHelper: 'Enter a valid URL address', targetHelper: 'Backup accounts are maintained in panel settings.', withImageHelper: 'Backup app store images, but this will increase the snapshot file size.', ignoreApp: 'Exclude apps', @@ -1240,7 +1229,7 @@ const message = { retainCopiesHelper1: 'Number of copies to retain for backup files', retainCopiesUnit: ' copies (View)', cronSpecRule: 'The execution period format in line {0} is incorrect. Please check and try again!', - cronSpecRule2: 'Execution period format is incorrect, please check and try again!', + cronSpecRule2: 'Execution period format is incorrect, check and try again!', perMonthHelper: 'Execute on the {0} day of every month at {1}:{2}', perWeekHelper: 'Execute every week on {0} at {1}:{2}', perDayHelper: 'Execute every day at {0}:{1}', @@ -1303,8 +1292,6 @@ const message = { noSuchApp: 'The {0} service was not detected. Please install it quickly using the script library first!', syncHelper: 'About to sync system script library. This operation only affects system scripts. Continue?', }, - cleanLog: 'Clean Logs', - cleanLogscope: 'Cleanup Type', }, monitor: { globalFilter: 'Global Filter', @@ -1338,7 +1325,7 @@ const message = { up: 'Up', down: 'Down', interval: 'Collection Interval', - intervalHelper: 'Please enter an appropriate monitoring collection interval (10 seconds - 12 hours)', + intervalHelper: 'Enter an appropriate monitoring collection interval (10 seconds - 12 hours)', }, terminal: { local: 'Local', @@ -1349,7 +1336,7 @@ const message = { localConnJump: 'Default connection information is maintained in [Terminal - Settings]. If connection fails, please edit there!', localHelper: 'The `local` name is used only for system local identification', - connLocalErr: 'Unable to automatically authenticate, please fill in the local server login information.', + connLocalErr: 'Unable to automatically authenticate, fill in the local server login information.', testConn: 'Test connection', saveAndConn: 'Save and connect', connTestOk: 'Connection information available', @@ -1362,10 +1349,10 @@ const message = { fold: 'All contract', batchInput: 'Batch processing', quickCommand: 'Quick command | Quick commands', - noSuchCommand: 'No quick command data found in the imported CSV file, please check and try again!', + noSuchCommand: 'No quick command data found in the imported CSV file, check and try again!', quickCommandHelper: 'You can use the quick commands at the bottom of the "Terminals -> Terminals".', groupDeleteHelper: - 'After the group is removed, all connections in the group will be migrated to the default group. Do you want to continue?', + 'After the group is removed, all connections in the group will be migrated to the default group. Continue?', command: 'Command', quickCmd: 'Quick command', addHost: 'Add', @@ -1397,7 +1384,7 @@ const message = { }, toolbox: { common: { - toolboxHelper: 'For some installation and usage issues, please refer to', + toolboxHelper: 'For some installation and usage issues, see', }, swap: { swap: 'Swap Partition', @@ -1411,8 +1398,7 @@ const message = { swapDeleteHelper: 'This operation will remove the Swap partition {0}. For system security reasons, the corresponding file will not be automatically deleted. If deletion is required, please proceed manually!', saveHelper: 'Please save the current settings first!', - saveSwap: - 'Saving the current configuration will adjust the Swap partition {0} size to {1}. Do you want to continue?', + saveSwap: 'Saving the current configuration will adjust the Swap partition {0} size to {1}. Continue?', swapMin: 'The minimum partition size is 40 KB. Please modify and try again!', swapMax: 'The maximum value for partition size is {0}. Please modify and try again!', swapOff: 'The minimum partition size is 40 KB. Setting it to 0 will disable the Swap partition.', @@ -1425,7 +1411,7 @@ const message = { 'When there are multiple DNS entries, they should be displayed on new lines. e.g.\n114.114.114.114\n8.8.8.8', hostsHelper: 'Hostname resolution', hosts: 'Domain', - hostAlert: 'Hidden commented records, please click the All configuration button to view or set', + hostAlert: 'Hidden commented records, click the All configuration button to view or set', toolbox: 'Quick settings', hostname: 'Hostname', passwd: 'System password', @@ -1440,29 +1426,27 @@ const message = { ntpALi: 'Alibaba', ntpGoogle: 'Google', syncSite: 'NTP server', - syncSiteHelper: - 'This operation will use {0} as the source for system time synchronization. Do you want to continue?', - hostnameHelper: `Hostname modification depends on the "hostnamectl" command. If the command isn't installed, the modification may fail.`, - userHelper: `The username depends on the "whoami" command for retrieval. If the command isn't installed, retrieval may fail.`, - passwordHelper: `Password modification depends on the "chpasswd" command. If the command isn't installed, the modification may fail.`, + hostnameHelper: `Hostname modification depends on the "hostnamectl" command. If the command is not installed, the modification may fail.`, + userHelper: `The username depends on the "whoami" command for retrieval. If the command is not installed, retrieval may fail.`, + passwordHelper: `Password modification depends on the "chpasswd" command. If the command is not installed, the modification may fail.`, hostHelper: 'There is an empty value in the provided content. Please check and try again after modification!', dnsCheck: 'Test Availability', dnsOK: 'DNS configuration information is available!', - dnsTestFailed: `DNS configuration information isn't available.`, + dnsTestFailed: `DNS configuration information is not available.`, }, fail2ban: { sshPort: 'Listen to SSH port', sshPortHelper: 'Current Fail2ban listens to the SSH connection port of the host', - unActive: `The Fail2ban service isn't enabled at present.`, - operation: 'You will perform operation "{0}" on Fail2ban service. Do you want to continue?', + unActive: `The Fail2ban service is not enabled at present.`, + operation: 'You will perform operation "{0}" on Fail2ban service. Continue?', fail2banChange: 'Fail2ban Configuration Modification', - ignoreHelper: 'The IP list in the allowlist will be ignored for blocking. Do you want to continue?', - bannedHelper: 'The IP list in the blocklist will be blocked by the server. Do you want to continue?', + ignoreHelper: 'The IP list in the allowlist will be ignored for blocking. Continue?', + bannedHelper: 'The IP list in the blocklist will be blocked by the server. Continue?', maxRetry: 'Maximum retry attempts', banTime: 'Ban time', banTimeHelper: 'Default ban time is 10 minutes, -1 indicates permanent ban', - banTimeRule: 'Please enter a valid ban time or -1', + banTimeRule: 'Enter a valid ban time or -1', banAllTime: 'Permanent ban', findTime: 'Discovery period', banAction: 'Ban action', @@ -1475,14 +1459,12 @@ const message = { }, ftp: { ftp: 'FTP account | FTP accounts', - notStart: 'FTP service is currently not running, please start it first!', - operation: 'This will perform "{0}" operation on FTP service. Do you want to continue?', - noPasswdMsg: 'Can not get the current FTP account password, please set the password and try again! ', - enableHelper: - 'Enabling the selected FTP account will restore its access permissions. Do you want to continue?', - disableHelper: - 'Disabling the selected FTP account will revoke its access permissions. Do you want to continue?', - syncHelper: 'Sync FTP account data between server and database. Do you want to continue?', + notStart: 'FTP service is currently not running, start it first!', + operation: 'This will perform "{0}" operation on FTP service. Continue?', + noPasswdMsg: 'Cannot get the current FTP account password. Set the password and try again.', + enableHelper: 'Enabling the selected FTP account will restore its access permissions. Continue?', + disableHelper: 'Disabling the selected FTP account will revoke its access permissions. Continue?', + syncHelper: 'Sync FTP account data between server and database. Continue?', dirSystem: 'This directory is system-reserved. Modification may cause system crash, please modify and try again!', dirHelper: 'Enabling FTP requires directory permission changes - please choose carefully', @@ -1494,14 +1476,14 @@ const message = { cronHelper: 'Professional version supports scheduled scan feature', specErr: 'Execution schedule format error, please check and retry!', disableMsg: - 'Stopping scheduled execution will prevent this scan task from running automatically. Do you want to continue?', + 'Stopping scheduled execution will prevent this scan task from running automatically. Continue?', enableMsg: - 'Enabling scheduled execution will allow this scan task to run automatically at regular intervals. Do you want to continue?', + 'Enabling scheduled execution will allow this scan task to run automatically at regular intervals. Continue?', showFresh: 'Show signature updater service', hideFresh: 'Hide signature updater service', clamHelper: 'The minimum recommended configuration for ClamAV is: 3 GiB of RAM or more, single-core CPU with 2.0 GHz or higher, and at least 5 GiB of available hard disk space.', - notStart: 'ClamAV service is currently not running, please start it first!', + notStart: 'ClamAV service is currently not running, start it first!', removeRecord: 'Delete peport files', noRecords: 'Click the "Trigger" button to start the scan and you will see records here.', removeInfected: 'Delete virus files', @@ -1621,7 +1603,7 @@ const message = { downloadStart: 'Download started', moveSuccess: 'Successfully moved', copySuccess: 'Successfully copied', - pasteMsg: 'Please click the [Paste] button at the top right of the target directory', + pasteMsg: 'Click the [Paste] button at the top right of the target directory', move: 'Move', calculate: 'Calculate', remark: 'Remark', @@ -1664,9 +1646,9 @@ const message = { reduceSuccess: 'Restore successful', reduce: 'Reduction', reduceHelper: - 'If a file or directory with the same name exists in the original path, it will be overwritten. Do you want to continue?', + 'If a file or directory with the same name exists in the original path, it will be overwritten. Continue?', clearRecycleBin: 'Clean', - clearRecycleBinHelper: 'Do you want to clean the recycle bin?', + clearRecycleBinHelper: 'clean the recycle bin?', favorite: 'Favorites', removeFavorite: 'Remove from favorites?', addFavorite: 'Add/Remove to Favorites', @@ -1685,7 +1667,7 @@ const message = { uploadOverLimit: 'The number of files exceeds 1000! Please compress and upload', clashDidNotSupport: 'File names are prohibited from containing .1panel_clash', clashDeleteAlert: `The "Recycle Bin" folder can't be deleted`, - clashOpenAlert: 'Please click the "Recycle Bin" button to open the recycle bin directory', + clashOpenAlert: 'Click the "Recycle Bin" button to open the recycle bin directory', right: 'Forward', back: 'Back', top: 'Go Back', @@ -1698,7 +1680,7 @@ const message = { noNameFolder: 'Untitled folder', noNameFile: 'Untitled file', minimap: 'Code mini map', - fileCanNotRead: 'File can not read', + fileCanNotRead: 'File cannot read', previewTruncated: 'File is too large, only showing the last part', previewEmpty: 'File is empty or not a text file', previewLargeFile: 'Preview', @@ -1726,8 +1708,8 @@ const message = { saveDir: 'Save Directory', deleteSourceFile: 'Delete Source File', convertHelper: 'Convert the selected files to another format', - convertHelper1: 'Please select the files to be converted', - execConvert: 'Start conversion. You can view the conversion logs in the Task Center', + convertHelper1: 'Select the files to be converted', + execConvert: 'Start conversion. You can view the conversion logs in the Tasks', convertLogs: 'Conversion Logs', formatConvert: 'Format Conversion', }, @@ -1739,11 +1721,11 @@ const message = { 'The list data is sorted based on login date. Changing time zone or performing other operations may cause deviations in the date of login logs.', sshAlert2: 'You can use "Fail2ban" in the "Toolbox" to block IP addresses that attempt brute force attacks, and this will enhance the security of the host.', - sshOperate: 'Operation "{0}" on the SSH service will be performed. Do you want to continue?', + sshOperate: 'Operation "{0}" on the SSH service will be performed. Continue?', sshChange: 'SSH Setting', - sshChangeHelper: 'This action changed "{0}" to "{1}". Do you want to continue?', + sshChangeHelper: 'This action changed "{0}" to "{1}". Continue?', sshFileChangeHelper: - 'Modifying the configuration file may cause service availability. Exercise caution when performing this operation. Do you want to continue?', + 'Modifying the configuration file may cause service availability. Exercise caution when performing this operation. Continue?', port: 'Port', portHelper: 'Specific the port that SSH service listens on.', listenAddress: 'Listen address', @@ -1782,9 +1764,9 @@ const message = { 'Control whether the DNS resolution function is enabled on the SSH server to verify the identity of the connection.', analysis: 'Statistical information', denyHelper: - "Performing a 'deny' operation on the following addresses. After setting, the IP will be prohibited from accessing the server. Do you want to continue?", + "Performing a 'deny' operation on the following addresses. After setting, the IP will be prohibited from accessing the server. Continue?", acceptHelper: - "Performing an 'accept' operation on the following addresses. After setting, the IP will regain normal access. Do you want to continue?", + "Performing an 'accept' operation on the following addresses. After setting, the IP will regain normal access. Continue?", noAddrWarning: 'No [{0}] addresses are currently selected. Please check and try again!', loginLogs: 'Login logs', loginMode: 'Mode', @@ -1792,7 +1774,6 @@ const message = { publickey: 'Key', belong: 'Belong', local: 'Local', - remote: 'Remote', session: 'Session | Sessions', loginTime: 'Login time', loginIP: 'Login IP', @@ -1824,7 +1805,7 @@ const message = { portHelper: 'The recommended port range is 8888 to 65535. Note: If the server has a security group, permit the new port from the security group in advance', portChange: 'Port change', - portChangeHelper: 'Modify the service port and restart the service. Do you want to continue?', + portChangeHelper: 'Modify the service port and restart the service. Continue?', theme: 'Theme', menuTabs: 'Menu tabs', componentSize: 'Component Size', @@ -1837,7 +1818,7 @@ const message = { regionHelper: 'Different regions use different download sources and related documentation links for app store and script library. Choose as needed.', cn: 'China Mainland', - intl: 'Global', + intl: 'Overseas', languageHelper: 'By default, it follows the browser language. This parameter takes effect only on the current browser', sessionTimeout: 'Session timeout', @@ -1867,9 +1848,9 @@ const message = { syncToNodeHelper: 'Sync settings to other nodes', nodes: 'Node', selectNode: 'Select Node', - selectNodeError: 'Please select a node', + selectNodeError: 'Select a node', apiInterface: 'Enable API', - apiInterfaceClose: 'Once closed, API interfaces cannot be accessed. Do you want to continue?', + apiInterfaceClose: 'Once closed, API interfaces cannot be accessed. Continue?', apiInterfaceHelper: 'Allow third-party applications to access the API.', apiInterfaceAlert1: `Don't enable it in production environments because it may increase server security risks.`, apiInterfaceAlert2: `Don't use third-party applications to call the API to prevent potential security threats.`, @@ -1890,11 +1871,11 @@ const message = { restartNowHelper: 'Configuring Docker proxy requires restarting the Docker service.', restartNow: 'Restart immediately', restartLater: 'Restart manually later', - systemIPWarning: `The server address isn't currently set. Set it in the control panel first.`, - systemIPWarning1: `The current server address is set to {0}, and quick redirection isn't possible!`, + systemIPWarning: `The server address is not currently set. Set it in the control panel first.`, + systemIPWarning1: `The current server address is set to {0}, and quick redirection is not possible!`, syncTime: 'Server Time', timeZone: 'Time Zone', - timeZoneChangeHelper: 'Changing the time zone requires restarting the service. Do you want to continue?', + timeZoneChangeHelper: 'Changing the time zone requires restarting the service. Continue?', timeZoneHelper: 'Timezone modification depends on the system timedatectl service. take effect after restart the 1Panel service.', timeZoneCN: 'Bei Jing', @@ -1903,14 +1884,13 @@ const message = { ntpALi: 'Alibaba', ntpGoogle: 'Google', syncSite: 'Ntp Server', - syncSiteHelper: - 'This operation will use {0} as the source for system time synchronization. Do you want to continue?', + syncSiteHelper: 'This operation will use {0} as the source for system time synchronization. Continue?', changePassword: 'Change Password', oldPassword: 'Original password', newPassword: 'New password', retryPassword: 'Confirm password', noSpace: 'Input information cannot include space characters', - duplicatePassword: 'The new password cannot be the same as the original password, please re-enter!', + duplicatePassword: 'The new password cannot be the same as the original password, enter again!', diskClean: 'Cache clean', developerMode: 'Preview Program', developerModeHelper: `You will get to expirence new features and fixes before they're released broadly and give early feedback.`, @@ -1940,8 +1920,8 @@ const message = { GoogleDrive: 'Google Drive', analysis: 'Analysis', analysisHelper: - 'Paste the entire token content to automatically parse the required parts. For specific operations, please refer to the official documentation.', - serviceName: 'Service Name', + 'Paste the entire token content to automatically parse the required parts. For specific operations, see the official documentation.', + serviceName: 'Service name', operator: 'Operator', OneDrive: 'Microsoft OneDrive', isCN: 'Century Internet', @@ -1954,12 +1934,12 @@ const message = { refreshTime: 'Token Refresh Time', refreshStatus: 'Token Refresh Status', backupDir: 'Backup directory', - codeWarning: 'The current authorization code format is incorrect, please confirm again!', + codeWarning: 'The current authorization code format is incorrect, confirm again!', code: 'Auth code', codeHelper: - 'Please click on the "Acquire" button, then login to {0} and copy the content after "code" in the redirected link. Paste it into this input box. For specific instructions, please refer to the official documentation.', + 'Click on the "Acquire" button, then login to {0} and copy the content after "code" in the redirected link. Paste it into this input box. For specific instructions, see the official documentation.', googleHelper: - 'Please first create a Google application and obtain client information, fill in the form and click the get button. For specific operations, please refer to the official documentation.', + 'Please first create a Google application and obtain client information, fill in the form and click the get button. For specific operations, see the official documentation.', loadCode: 'Acquire', COS: 'Tencent COS', ap_beijing_1: 'Beijing Zone 1', @@ -2027,20 +2007,18 @@ const message = { passkeyLastUsedAt: 'Last Used', passkeyDeleteConfirm: 'After deletion, this passkey cannot be used to log in. Continue?', passkeyLimit: 'Up to 5 passkeys can be bound', - passkeyFailed: - 'Passkey registration failed, please confirm that the panel SSL certificate is a trusted certificate', + passkeyFailed: 'Passkey registration failed, confirm that the panel SSL certificate is a trusted certificate', bindInfo: 'Bind info', bindAll: 'Listen All', bindInfoHelper: - 'Changing the service listening address or protocol may result in service unavailability. Do you want to continue?', + 'Changing the service listening address or protocol may result in service unavailability. Continue?', ipv6: 'Listen IPv6', bindAddress: 'Listen address', entrance: 'Entrance', showEntrance: 'Show disabled alert in "Overview" page', entranceHelper: 'Enabling security entrance will only allow logging in to the panel through specified security entrance.', - entranceError: - 'Please enter a secure login entry point of 5-116 characters, only numbers or letters are supported.', + entranceError: 'Enter a secure login entry point of 5-116 characters, only numbers or letters are supported.', entranceInputHelper: 'Leave it blank to disable the security entrance.', randomGenerate: 'Random', expirationTime: 'Expiration Date', @@ -2059,24 +2037,23 @@ const message = { panelSSL: 'Panel SSL', panelSSLHelper: 'After the automatic renewal of the panel SSL, you need to manually restart the 1Panel service for the changes to take effect.', - unBindDomainHelper: - 'The action of unbinding a domain name may cause system insecurity. Do you want to continue?', + unBindDomainHelper: 'The action of unbinding a domain name may cause system insecurity. Continue?', bindDomainHelper: 'After you bind the domain, only that domain can access 1Panel service.', bindDomainHelper1: 'Leave it blank to disable the domain name binding.', bindDomainWarning: - 'After domain binding, you will be logged out and can only access 1Panel service through the domain name specified in the settings. Do you want to continue?', + 'After domain binding, you will be logged out and can only access 1Panel service through the domain name specified in the settings. Continue?', allowIPs: 'Authorized IP', unAllowIPs: 'Unauthorized IP', unAllowIPsWarning: - 'Authorizing an empty IP will allow all IPs to access the system, which may cause system insecurity. Do you want to continue?', + 'Authorizing an empty IP will allow all IPs to access the system, which may cause system insecurity. Continue?', allowIPsHelper: 'After you set the authorized IP address list, only the IP address in the list can access the panel service.', allowIPsWarning: - 'After you set the authorized IP address list, only the IP address in the list can access the panel service. Do you want to continue?', + 'After you set the authorized IP address list, only the IP address in the list can access the panel service. Continue?', allowIPsHelper1: `Leave it blank to disable the IP address restriction.`, allowIPEgs: 'One per line. For example,\n172.16.10.111\n172.16.10.0/24', mfa: 'Two-factor authentication (2FA)', - mfaClose: 'Disabling MFA will reduce the security of the service. Do you want to continue?', + mfaClose: 'Disabling MFA will reduce the security of the service. Continue?', secret: 'Secret', mfaInterval: 'Refresh interval(s)', mfaTitleHelper: @@ -2090,10 +2067,10 @@ const message = { 'To obtain the one-time token, scan the following QR code using your authenticator app or copy the secret key into your authentication app.', mfaHelper3: 'Enter six digits from the app', mfaCode: 'One-time token', - sslChangeHelper: 'Modify the https setting and restart the service. Do you want to continue?', + sslChangeHelper: 'Modify the https setting and restart the service. Continue?', sslDisable: 'Disable', sslDisableHelper: - 'If the https service is disabled, you need to restart the panel for it to take effect. Do you want to continue?', + 'If the https service is disabled, you need to restart the panel for it to take effect. Continue?', noAuthSetting: 'Unauthorized setting', noAuthSettingHelper: `When users don't log in with specified security entrance, or don't access the panel from specified IP or domain name, this response can hid panel characteristic.`, responseSetting: 'Response setting', @@ -2160,8 +2137,7 @@ const message = { sslLabel: 'Certificate Directory', reCreate: 'Failed to create snapshot', reRollback: 'Rollback snapshot failed', - deleteHelper: - 'All snapshot files including those in the third-party backup account will be deleted. Do you want to continue?', + deleteHelper: 'All snapshot files including those in the third-party backup account will be deleted. Continue?', status: 'Snapshot status', ignoreRule: 'Ignore rule', editIgnoreRule: '@:commons.button.edit @.lower:setting.ignoreRule', @@ -2184,10 +2160,9 @@ const message = { lastRecoverAt: 'Last recovery time', lastRollbackAt: 'Last rollback time', reDownload: 'Download the backup file again', - recoverErrArch: `Snapshot recovery between different server architectures isn't supported!`, + recoverErrArch: `Snapshot recovery between different server architectures is not supported!`, recoverErrSize: 'Detected insufficient disk space, please check or clean up and try again!', - recoverHelper: - 'Starting recovery from snapshot {0}, please confirm the following information before proceeding:', + recoverHelper: 'Starting recovery from snapshot {0}, confirm the following information before proceeding:', recoverHelper1: 'Recovery requires restarting Docker and 1Panel services', recoverHelper2: 'Please ensure there is sufficient disk space on the server (Snapshot file size: {0}, Available space: {1})', @@ -2195,11 +2170,11 @@ const message = { 'Please ensure the server architecture matches the architecture of the server where the snapshot was created (Current server architecture: {0})', rollback: 'Rollback', rollbackHelper: - 'Rolling back this recovery will replace all files from this recovery, and may require restarting Docker and 1Panel services. Do you want to continue?', + 'Rolling back this recovery will replace all files from this recovery, and may require restarting Docker and 1Panel services. Continue?', upgradeRecord: 'Upgrade record', - upgrading: ' Upgrading, please wait...', - upgradeHelper: 'The upgrade requires restarting the 1Panel service. Do you want to continue?', + upgrading: 'Upgrading, please wait...', + upgradeHelper: 'The upgrade requires restarting the 1Panel service. Continue?', noUpgrade: 'It is currently the latest version', versionHelper: 'Name rules: [major version].[functional version].[Bug fix version], as shown in the following example:', @@ -2241,7 +2216,7 @@ const message = { confirmMessage: 'The page will be refreshed to update the advanced menu list. Continue?', recoverMessage: 'The page will be refreshed and restore the menu list to its initial state. Continue?', compressPassword: 'Compression password', - backupRecoverMessage: 'Please enter the compression or decompression password (leave blank to not set)', + backupRecoverMessage: 'Enter the compression or decompression password (leave blank to not set)', }, license: { offLine: 'Offline', @@ -2271,9 +2246,9 @@ const message = { quickUpdate: 'Quick update', import: 'Import', power: 'Authorize', - unbindHelper: 'All Pro related Settings will be cleaned after unbinding. Do you want to continue? ', + unbindHelper: 'All Pro related Settings will be cleaned after unbinding. Continue? ', importLicense: 'Import license', - importHelper: 'Please click or drag the license file here', + importHelper: 'Click or drag the license file here', levelUpPro: 'Upgrade to Professional Edition', licenseSync: 'License Sync', knowMorePro: 'Learn More', @@ -2367,19 +2342,19 @@ const message = { source: 'Source', appName: 'Application Name', deleteWarn: - 'The delete operation will delete all data and backups together. This operation cannot be rolled back. Do you want to continue? ', + 'The delete operation will delete all data and backups together. This operation cannot be rolled back. Continue? ', syncSuccess: 'Synchronized successfully', canUpgrade: 'Updates', backupName: 'File Name', backupPath: 'File Path', backupdate: 'Backup time', - versionSelect: 'Please select a version', - operatorHelper: 'Operation {0} will be performed on the selected application. Do you want to continue?', - startOperatorHelper: 'The application will be started. Do you want to continue?', - stopOperatorHelper: 'The application will be stopped. Do you want to continue?', - restartOperatorHelper: 'The application will be restarted. Do you want to continue?', - reloadOperatorHelper: 'The application will be reloaded. Do you want to continue?', - checkInstalledWarn: `"{0}" isn't detected. Go to "App Store" to install.`, + versionSelect: 'Select a version', + operatorHelper: 'Operation {0} will be performed on the selected application. Continue?', + startOperatorHelper: 'The application will be started. Continue?', + stopOperatorHelper: 'The application will be stopped. Continue?', + restartOperatorHelper: 'The application will be restarted. Continue?', + reloadOperatorHelper: 'The application will be reloaded. Continue?', + checkInstalledWarn: `"{0}" is not detected. Go to "App Store" to install.`, limitHelper: 'The application has already been installed.', deleteHelper: `"{0}" has been associated with the following resource(s) and can't be deleted`, checkTitle: 'Hint', @@ -2404,7 +2379,7 @@ const message = { updatePrompt: 'No updates available', installPrompt: 'No apps installed yet', updateHelper: 'Editing parameters may cause the application to fail to start. Please proceed with caution.', - updateWarn: 'Update parameters need to rebuild the application, Do you want to continue? ', + updateWarn: 'Update parameters need to rebuild the application, Continue? ', busPort: 'Port', syncStart: 'Start syncing! Please refresh the app store later', advanced: 'Advanced settings', @@ -2423,7 +2398,7 @@ const message = { allReadyInstalled: 'Installed', installHelper: 'If you have image pull issues, configure image acceleration.', sortMode: 'Sort', - installWarn: `The external access isn't checked, and it will make the application unable to access through external network. Do you want to continue?`, + installWarn: `The external access is not checked, and it will make the application unable to access through external network. Continue?`, showIgnore: 'View ignored applications', cancelIgnore: 'Cancel ignore', ignoreList: 'Ignored applications', @@ -2431,11 +2406,10 @@ const message = { backupApp: 'Backup application before upgrade', backupAppHelper: 'If the upgrade fails, the backup will be automatically rolled back. Please check the failure reason in the log audit-system log', - openrestyDeleteHelper: 'Forced delete of OpenResty will delete all websites. Do you want to continue?', - downloadLogHelper1: 'All logs of {0} application are about to be downloaded. Do you want to continue? ', - downloadLogHelper2: - 'The latest {1} logs of {0} application are about to be downloaded. Do you want to continue? ', - syncAllAppHelper: 'All applications will be synchronized. Do you want to continue? ', + openrestyDeleteHelper: 'Forced delete of OpenResty will delete all websites. Continue?', + downloadLogHelper1: 'All logs of {0} application are about to be downloaded. Continue? ', + downloadLogHelper2: 'The latest {1} logs of {0} application are about to be downloaded. Continue? ', + syncAllAppHelper: 'All applications will be synchronized. Continue? ', hostModeHelper: 'The current application network mode is host mode. If you need to open the port, please open it manually on the firewall page.', showLocal: 'Show local applications', @@ -2449,7 +2423,7 @@ const message = { useNew: 'Use custom version', useDefault: 'Use default version', useCustom: 'Customize docker-compose.yml', - useCustomHelper: `Using a custom docker-compose.yml file may cause the application upgrade to fail. If it isn't necessary, don't check it.`, + useCustomHelper: `Using a custom docker-compose.yml file may cause the application upgrade to fail. If it is not necessary, don't check it.`, diffHelper: 'The left side is the old version, the right side is the new version. After editing, click to save the custom version', pullImage: 'Pull Image', @@ -2485,7 +2459,7 @@ const message = { uninstallDeleteBackup: 'Uninstall App - Delete Backup', uninstallDeleteImage: 'Uninstall App - Delete Image', upgradeBackup: 'Backup App Before Upgrade', - noAppHelper: 'No application detected, please go to the task center to view the app store sync log', + noAppHelper: 'No application detected, go to the task center to view the app store sync log', isEdirWarn: 'Detected modification to docker-compose.yml file, please check the comparison', }, website: { @@ -2584,7 +2558,7 @@ const message = { deleteAppHelper: 'Delete associated applications and application backups at the same time', deleteBackupHelper: 'Also delete website backups.', deleteDatabaseHelper: 'Also delete the database associated with the website', - deleteConfirmHelper: `The delete operation can't be undone. Enter "{0}" to confirm deletion.`, + deleteConfirmHelper: `The delete operation cannot be undone. Enter "{0}" to confirm deletion.`, staticPath: 'The corresponding main directory is ', limit: 'Scheme', blog: 'Forum/Blog', @@ -2596,9 +2570,8 @@ const message = { videoSite: 'Video', errLog: 'Error log', stopHelper: - 'After stopping the site, it will not be able to access normally, and the user will display the stop page of the current site when visiting. Do you want to continue? ', - startHelper: - 'After enabling the site, users can access the content of the site normally, do you want to continue? ', + 'After stopping the site, it will not be able to access normally, and the user will display the stop page of the current site when visiting. Continue? ', + startHelper: 'After enabling the site, users can access the content of the site normally, continue? ', sitePath: 'Directory', siteAlias: 'Site alias', primaryPath: 'Root directory', @@ -2619,8 +2592,7 @@ const message = { HTTPAlso: 'Allow direct HTTP requests', sslConfig: 'SSL options', disableHTTPS: 'Disable HTTPS', - disableHTTPSHelper: - 'Disabling HTTPS will delete the certificate related configuration, Do you want to continue?', + disableHTTPSHelper: 'Disabling HTTPS will delete the certificate related configuration, Continue?', SSLHelper: "Note: Do not use SSL certificates for illegal websites.\nIf HTTPS access can't be used after opening, check whether the security group has correctly released port 443.", SSLConfig: 'Certificate settings', @@ -2632,10 +2604,10 @@ const message = { "Let's Encrypt has a frequency limit for issuing certificates, but it is sufficient to meet normal needs. Too frequent operations will cause issuance failure. For specific restrictions, please see official document ", ipValue: 'Value', wafValueHelper: 'Value', - ext: 'File extension', + ext: 'file extension', wafInputHelper: 'Input data by line, one line', - data: 'Data', - ever: 'Permanent', + data: 'data', + ever: 'permanent', nextYear: 'One year later', noLog: 'No logs found', defaultServer: 'Set default site', @@ -2676,8 +2648,8 @@ const message = { enableCache: 'Cache', proxyHost: 'Proxy host', disabled: 'Stopped', - startProxy: 'This will start reverse proxy. Do you want to continue?', - stopProxy: 'This will stop the reverse proxy. Do you want to continue?', + startProxy: 'This will start reverse proxy. Continue?', + stopProxy: 'This will stop the reverse proxy. Continue?', sourceFile: 'View source', proxyHelper1: 'When accessing this directory, the content of the target URL will be returned and displayed.', proxyPassHelper: 'The target URL must be valid and accessible.', @@ -2711,7 +2683,7 @@ const message = { disableLeechHelper: 'Whether to disable the anti-leech', disableLeech: 'Disable anti-leech', ipv6: 'Listen IPv6', - leechReturnError: 'Please fill in the HTTP status code', + leechReturnError: 'Fill in the HTTP status code', blockedRef: 'Allow non-standard Referer', accessControl: 'Anti-leech control', leechcacheControl: 'Cache control', @@ -2740,7 +2712,7 @@ const message = { notKeep: 'Do not keep', redirectRoot: 'Redirect to the homepage', redirectHelper: '301 permanent redirection, 302 temporary redirection', - changePHPVersionWarn: 'This operation cannot be rolled back, do you want to continue?', + changePHPVersionWarn: 'This operation cannot be rolled back, continue?', changeVersion: 'Switch version', retainConfig: 'Whether to keep php-fpm.conf and php.ini files', runDirHelper2: 'Please ensure that the secondary running directory is under the index directory', @@ -2750,7 +2722,7 @@ const message = { acmeAccountType: 'Account type', keyType: 'Key algorithm', tencentCloud: 'Tencent Cloud', - containWarn: 'The domain name contains the main domain, please re-enter', + containWarn: 'The domain name contains the main domain, enter again', rewriteHelper2: 'Applications like WordPress installed from the app store typically come with pseudo-static configuration preset. Reconfiguring them may lead to errors.', websiteBackupWarn: @@ -2770,7 +2742,7 @@ const message = { website404Helper: 'Website 404 error page only supports PHP runtime environment websites and static websites', sni: 'Origin SNI', sniHelper: - "When the reverse proxy backend is HTTPS, you might need to set the origin SNI. Please refer to the CDN service provider's documentation for details.", + "When the reverse proxy backend is HTTPS, you might need to set the origin SNI. See the CDN service provider's documentation for details.", huaweicloud: 'Huawei Cloud', createDb: 'Create Database', enableSSLHelper: 'Failure to enable will not affect the creation of the website', @@ -2842,11 +2814,11 @@ const message = { saveCustom: 'Save as Template', rainyun: 'Rain Yun', volcengine: 'Volcengine', - runtimePortHelper: 'The current runtime environment has multiple ports. Please select a proxy port.', + runtimePortHelper: 'The current runtime environment has multiple ports. Select a proxy port.', runtimePortWarn: 'The current runtime environment has no ports, unable to proxy', cacheWarn: 'Please turn off the cache switch in the reverse proxy first', loadBalanceHelper: - 'After creating the load balancing, please go to "Reverse Proxy", add a proxy and set the backend address to: http://', + 'After creating the load balancing, go to "Reverse Proxy", add a proxy and set the backend address to: http://', favorite: 'Favorite', cancelFavorite: 'Cancel Favorite', useProxy: 'Use Proxy', @@ -2929,7 +2901,7 @@ const message = { configResource: 'Configuration', saveAndReload: 'Save and reload', clearProxyCache: 'Clean reverse proxy cache', - clearProxyCacheWarn: 'This action will delete all files in the cache directory. Do you want to continue?', + clearProxyCacheWarn: 'This action will delete all files in the cache directory. Continue?', create: 'Add a new module', update: 'Edit a module', params: 'Parameters', @@ -2960,14 +2932,14 @@ const message = { resolveDomain: 'Resolve domain name', err: 'Error', value: 'record value', - dnsResolveHelper: 'Please go to the DNS resolution service provider to add the following resolution records:', + dnsResolveHelper: 'Go to the DNS resolution service provider to add the following resolution records:', detail: 'View details', msg: 'Information', ssl: 'Certificate', key: 'Private key', startDate: 'Effective time', organization: 'issuing organization', - renewConfirm: 'This will renew a new certificate for domain name {0}. Do you want to continue?', + renewConfirm: 'This will renew a new certificate for domain name {0}. Continue?', autoRenew: 'Automatic renewal', autoRenewHelper: 'Automatically renew 30 days before expiration', renewSuccess: 'Renewal successful', @@ -3003,9 +2975,9 @@ const message = { 'In manual resolution mode, you need to click the apply button after creation to obtain the DNS resolution value', httpHelper: 'Using HTTP mode requires installing OpenResty and does not support applying for wildcard domain certificates.', - buypassHelper: `Buypass isn't accessible in mainland China`, + buypassHelper: `Buypass is not accessible in mainland China`, googleHelper: 'How to get EAB HmacKey and EAB kid', - googleCloudHelper: `Google Cloud API isn't accessible in most parts of mainland China`, + googleCloudHelper: `Google Cloud API is not accessible in most parts of mainland China`, skipDNSCheck: 'Skip DNS check', skipDNSCheckHelper: 'Check here only if you encounter a timeout issue during certification request.', cfHelper: 'Do not use Global API Key', @@ -3055,32 +3027,31 @@ const message = { unUsed: 'Unused', dockerRestart: 'Firewall operations require restarting the Docker service', firewallHelper: '{0} system firewall', - firewallNotStart: `The system firewall isn't enabled at present. Enable it first.`, - restartFirewallHelper: 'This operation will restart the current firewall. Do you want to continue?', - stopFirewallHelper: 'This will make the server lose security protection. Do you want to continue?', - startFirewallHelper: - 'After the firewall is enabled, the server security can be better protected. Do you want to continue?', + firewallNotStart: `The system firewall is not enabled at present. Enable it first.`, + restartFirewallHelper: 'This operation will restart the current firewall. Continue?', + stopFirewallHelper: 'This will make the server lose security protection. Continue?', + startFirewallHelper: 'After the firewall is enabled, the server security can be better protected. Continue?', noPing: 'Disable ping', enableBanPing: 'Block Ping', disableBanPing: 'Unblock Ping', noPingTitle: 'Disable ping', - noPingHelper: `This will disable ping, and the server won't echo ICMP response. Do you want to continue?`, - onPingHelper: 'This will enable ping, and hackers may discover your server. Do you want to continue?', + noPingHelper: `This will disable ping, and the server won't echo ICMP response. Continue?`, + onPingHelper: 'This will enable ping, and hackers may discover your server. Continue?', changeStrategy: 'Change the {0} strategy', changeStrategyIPHelper1: - 'Change the IP address strategy to [deny]. After the IP address is set, access to the server is prohibited. Do you want to continue?', + 'Change the IP address strategy to [deny]. After the IP address is set, access to the server is prohibited. Continue?', changeStrategyIPHelper2: - 'Change the IP address strategy to [allow]. After the IP address is set, normal access is restored. Do you want to continue?', + 'Change the IP address strategy to [allow]. After the IP address is set, normal access is restored. Continue?', changeStrategyPortHelper1: - 'Change the port policy to [drop]. After the port policy is set, external access is denied. Do you want to continue?', + 'Change the port policy to [drop]. After the port policy is set, external access is denied. Continue?', changeStrategyPortHelper2: - 'Change the port policy to [accept]. After the port policy is set, normal port access will be restored. Do you want to continue?', + 'Change the port policy to [accept]. After the port policy is set, normal port access will be restored. Continue?', stop: 'Stop', portFormatError: 'This field must be a valid port.', portHelper1: 'Multiple ports, e.g. 8080 and 8081', portHelper2: 'Range port, e.g. 8080-8089', changeStrategyHelper: - 'Change [{1}] {0} strategy to [{2}]. After setting, {0} will access {2} externally. Do you want to continue?', + 'Change [{1}] {0} strategy to [{2}]. After setting, {0} will access {2} externally. Continue?', strategy: 'Strategy', accept: 'Accept', @@ -3120,7 +3091,7 @@ const message = { advanceIptables: 'iptables Advanced Configuration Service', initMsg: 'About to initialize {0}, continue?', initHelper: - 'Detected that {0} is not initialized. Please click the initialization button in the top status bar to configure!', + 'Detected that {0} is not initialized. Click the initialization button in the top status bar to configure!', bindHelper: 'Bind - Firewall rules will only take effect when the status is bound. Confirm?', unbindHelper: 'Unbind - When unbound, all added firewall rules will become invalid. Proceed with caution. Confirm?', @@ -3149,7 +3120,7 @@ const message = { runtime: 'Runtime', workDir: 'Working directory', create: 'Create', - localHelper: 'For local environment installation and offline environment usage issues, please refer to ', + localHelper: 'For local environment installation and offline environment usage issues, see ', versionHelper: 'PHP version, e.g. v8.0', buildHelper: `If more extensions are selected, the CPU usage will be higher during the image creation process. Avoid selecting all extensions.`, openrestyWarn: 'PHP needs to be upgraded to OpenResty to version 1.21.4.1 or later to use', @@ -3175,18 +3146,17 @@ const message = { runScript: 'Run script', runScriptHelper: 'The startup command list is parsed from the package.json file in the source directory.', open: 'Open', - operatorHelper: - 'The {0} operation will be performed on the selected operating environment. Do you want to continue? ', + operatorHelper: 'The {0} operation will be performed on the selected operating environment. Continue? ', taobao: 'Taobao', tencent: 'Tencent', imageSource: 'Image source', moduleManager: 'Module Management', module: 'Module', nodeOperatorHelper: - 'Is {0} {1} module? The operation may cause abnormality in the operating environment, please confirm before proceeding', + 'Is {0} {1} module? The operation may cause abnormality in the operating environment, confirm before proceeding', customScript: 'Custom startup command', customScriptHelper: - 'Please enter the complete startup command, for example: npm run start. For PM2 startup commands, please replace with pm2-runtime, otherwise it will fail to start.', + 'Enter the complete startup command, for example: npm run start. For PM2 startup commands, please replace with pm2-runtime, otherwise it will fail to start.', portError: `Don't repeat the same port.`, systemRestartHelper: 'Status description: Interruption - status acquisition failed due to system restart', javaScriptHelper: 'Provide a full startup command. For example, "java -jar halo.jar -Xmx1024M -Xms256M".', @@ -3220,7 +3190,7 @@ const message = { pythonHelper: 'Provide a full startup command. For example, "pip install -r requirements.txt && python manage.py runserver 0.0.0.0:5000".', dotnetHelper: 'Provide a full startup command. For example, "dotnet MyWebApp.dll".', - dirHelper: 'Note: Please fill in the directory path inside the container', + dirHelper: 'Note: Fill in the directory path inside the container', concurrency: 'Concurrency Scheme', loadStatus: 'Load Status', extraHosts: 'Host mapping', @@ -3264,11 +3234,11 @@ const message = { tool: { supervisor: { loadStatusErr: 'Failed to retrieve process status, please check the status of the supervisor service.', - notSupport: 'Supervisor service not detected, please go to the script library page to install it manually', + notSupport: 'Supervisor service not detected, go to the script library page to install it manually', list: 'Daemon process', config: 'Supervisor configuration', primaryConfig: 'Main configuration file location', - notSupportCtl: `The supervisorctl isn't detected, please go to the script library page to install it manually`, + notSupportCtl: `The supervisorctl is not detected, go to the script library page to install it manually`, user: 'User', command: 'Command', dir: 'Directory', @@ -3277,10 +3247,10 @@ const message = { 'This will modify "files" value in "[include"] section in the main configuration file. The directory of other configuration file will be: "{1Panel installation directory}/1panel/tools/supervisord/supervisor.d/".', operatorHelper: 'Operation {1} will be performed on {0}, continue? ', uptime: 'Running time', - notStartWarn: `Supervisor isn't started. Start it first.`, + notStartWarn: `Supervisor is not started. Start it first.`, serviceName: 'Service name', initHelper: - 'Supervisor service is detected but not initialized. Please click the initialization button in the top status bar to configure it.', + 'Supervisor service is detected but not initialized. Click the initialization button in the top status bar to configure it.', serviceNameHelper: 'Supervisor service name managed by systemctl, usually supervisor or supervisord', restartHelper: 'This will restart the service after initialization, which causes all the existing daemon processes to stop.', @@ -3304,7 +3274,7 @@ const message = { management: 'Disk Management', partition: 'Partition', unmount: 'Unmount', - unmountHelper: 'Do you want to unmount the partition {0}?', + unmountHelper: 'unmount the partition {0}?', mount: 'Mount', partitionAlert: 'Disk partitioning requires formatting the disk, and existing data will be deleted. Please save or take snapshots of your data in advance.', @@ -3327,7 +3297,6 @@ const message = { 'Friendly reminder: Your Pro trial will expire in {0} days, and all Pro features will no longer be accessible. Please renew or upgrade to the full version in a timely manner.', expiresAlert: 'Friendly reminder: Your Pro license will expire in {0} days, and all Pro features will no longer be accessible. Please renew promptly to ensure continued usage.', - name: 'Pro', menu: 'Pro', upage: 'AI Website Builder', proAlert: 'Upgrade to Pro to use this feature', @@ -3469,7 +3438,7 @@ const message = { isBlocking: 'Blocked', isFree: 'Unblocked', unLock: 'Unlock', - unLockHelper: 'Do you want to unblock IP: {0}?', + unLockHelper: 'unblock IP: {0}?', saveDefault: 'Save Default', saveToWebsite: 'Apply to Website', saveToWebsiteHelper: 'Apply current settings to all websites? ', @@ -3490,7 +3459,7 @@ const message = { websiteAlert: 'Please create a website first', defaultUrlBlack: 'URL Rules', htmlRes: 'Intercept Page', - urlSearchHelper: 'Please enter the URL to support fuzzy search', + urlSearchHelper: 'Enter the URL to support fuzzy search', toCreate: 'Create', closeWaf: 'Close WAF', closeWafHelper: 'Closing WAF will cause the website to lose protection, do you want to continue', @@ -3511,7 +3480,7 @@ const message = { geoRuleEmpty: 'Region cannot be empty', unknown: 'Website Not Exist', geo: 'Region Restriction', - revertHtml: 'Do you want to restore {0} as the default page?', + revertHtml: 'restore {0} as the default page?', five_seconds: '5-Second verification', header: 'Header rules', methodWhite: 'HTTP rules', @@ -3523,7 +3492,7 @@ const message = { matchValue: 'Match value', headerName: 'Supports non-special characters starting with English, numbers, -, length 3-30', cdnHelper: 'Websites using CDN can open here to obtain the correct source IP', - clearLogWarn: 'Clearing the log will not be possible, do you want to continue?', + clearLogWarn: 'Clearing the log will not be possible, continue?', commonRuleHelper: 'Rule is fuzzy matching', blockIPHelper: 'Blocked IPs are temporarily stored in OpenResty and will be unblocked when you restart OpenResty. They can be permanently blocked through the blocking function', @@ -3762,8 +3731,8 @@ const message = { favicon: 'Website Icon', faviconHelper: 'Website icon (recommended image size: 16px*16px)', setDefault: 'Restore Default', - setHelper: 'The current settings will be saved. Do you want to continue?', - setDefaultHelper: 'All panel settings will be restored to default. Do you want to continue?', + setHelper: 'The current settings will be saved. Continue?', + setDefaultHelper: 'All panel settings will be restored to default. Continue?', logoGroup: 'Logo', imageGroup: 'Image', loginImage: 'Login Page Image', @@ -3889,7 +3858,7 @@ const message = { backupNode: 'Backup Node', backupFrequency: 'Backup Frequency (hours)', backupCopies: 'Backup Retention Copies', - noBackupNode: 'The backup node is currently empty. Please select a backup node to save and try again!', + noBackupNode: 'The backup node is currently empty. Select a backup node to save and try again!', masterBackupAlert: 'Master node backup is not currently configured. To ensure data security, please set up a backup node as soon as possible to facilitate manual switching to a new master node in case of failure.', node: 'Node', @@ -3962,7 +3931,7 @@ const message = { errNodePort: 'Node port [ {0} ] is detected as inaccessible. Please check if the firewall or security group has allowed this port.', - reinstallHelper: 'Reinstall node {0}, do you want to continue?', + reinstallHelper: 'Reinstall node {0}, continue?', unhealthyCheck: 'Abnormal Check', fixOperation: 'Fix Operation', checkName: 'Check Item', @@ -3974,8 +3943,8 @@ const message = { checkAPI: 'Check Node API Availability', fixAPI: 'Check the node logs and verify if the firewall ports are properly opened.', forceDelete: 'Force Delete', - operateHelper: 'The following nodes will undergo {0} operation, do you want to continue?', - operatePanelHelper: 'The following panels will undergo {0} operation, do you want to continue?', + operateHelper: 'The following nodes will undergo {0} operation, continue?', + operatePanelHelper: 'The following panels will undergo {0} operation, continue?', forceDeleteHelper: 'Force delete will ignore node deletion errors and delete database metadata', uninstall: 'Delete node data', uninstallHelper: 'This will delete all 1Panel related data of the node. Proceed with caution!', @@ -4006,9 +3975,9 @@ const message = { 'Sync the custom store package to tmp/customApp/apps.tar.gz in the installation directory of the sub-node', nodes: 'Nodes', selectNode: 'Select Node', - selectNodeError: 'Please select a node', + selectNodeError: 'Select a node', licenseHelper: 'The Pro version supports the custom application repository feature', - databaseHelper: 'Application associated database, please select target node database', + databaseHelper: 'Application associated database, select target node database', nodeHelper: 'Cannot select current node', migrateHelper: 'Currently only supports migrating monolithic applications and applications associated only with MySQL, MariaDB, PostgreSQL databases', @@ -4066,9 +4035,8 @@ const message = { useDisk: 'Disk Usage', usePercentage: 'Usage Percentage', changeStatus: 'Change Status', - disableMsg: - 'Stopping the alert task will prevent this task from sending alert messages. Do you want to continue?', - enableMsg: 'Enabling the alert task will allow this task to send alert messages. Do you want to continue?', + disableMsg: 'Stopping the alert task will prevent this task from sending alert messages. Continue?', + enableMsg: 'Enabling the alert task will allow this task to send alert messages. Continue?', useExceed: 'Usage Exceeds', useExceedRulesHelper: 'Trigger alert when usage exceeds the set value', cpuUseExceedAvg: 'The average cpu usage exceeds the specified value', @@ -4107,7 +4075,7 @@ const message = { diskName: 'Disk', syncAlertInfo: 'Manual Push', - syncAlertInfoMsg: 'Do you want to manually push the alert task?', + syncAlertInfoMsg: 'manually push the alert task?', pushError: 'Push Failed', pushSuccess: 'Push Successful', syncError: 'Sync Failed', @@ -4240,13 +4208,12 @@ const message = { freshGreen: 'Fresh Green', customColor: 'Custom Color', setDefault: 'Default', - setDefaultHelper: - 'The theme color scheme is about to be restored to its initial state. Do you want to continue?', - setHelper: 'The currently selected theme color scheme is about to be saved. Do you want to continue?', + setDefaultHelper: 'The theme color scheme is about to be restored to its initial state. Continue?', + setHelper: 'The currently selected theme color scheme is about to be saved. Continue?', }, exchange: { exchange: 'File Exchange', - exchangeConfirm: "Do you want to transfer the file/folder {1} from {0} node to {2} node's {3} directory?", + exchangeConfirm: "transfer the file/folder {1} from {0} node to {2} node's {3} directory?", }, cluster: { cluster: 'Application High Availability', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index a87143411..8b6e84d68 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -25,7 +25,7 @@ const message = { cancel: '取消', reset: '重設', setDefault: '復原預設', - restart: '重啟', + restart: '重新啟動', conn: '連接', disConn: '斷開', clean: '清空', @@ -141,7 +141,7 @@ const message = { }, loadingText: { Upgrading: '系統升級中,請稍候', - Restarting: '系統重啟中,請稍候', + Restarting: '系統重新啟動中,請稍候', Recovering: '快照復原中,請稍候', Rollbacking: '快照回滾中,請稍候', }, @@ -155,7 +155,7 @@ const message = { operationSuccess: '操作成功', copySuccess: '複製成功', notSupportOperation: '不支援此操作', - requestTimeout: '請求超時,請稍後重試', + requestTimeout: '請求逾時,請稍後重試', infoTitle: '提示', notRecords: '當前任務無執行記錄', sureLogOut: '確認登出?', @@ -200,7 +200,7 @@ const message = { errorCaptcha: '驗證碼錯誤', notSafe: '暫無權限存取', safeEntrance1: '當前環境已啟用安全入口', - safeEntrance2: '在 SSH 終端輸入以下指令來查看面板入口: 1pctl user-info', + safeEntrance2: '在 SSH 終端輸入以下指令來檢視面板入口: 1pctl user-info', errIP1: '當前環境已啟用授權 IP', errDomain1: '當前環境已啟用網域綁定', errHelper: '可在 SSH 終端輸入以下指令來重設綁定資訊: ', @@ -209,7 +209,7 @@ const message = { mfaCode: 'MFA 驗證碼', title: 'Linux 伺服器維運面板', licenseHelper: '《飛致雲社區軟體許可協議》', - errorAgree: '請點擊同意社區軟體許可協議', + errorAgree: '請點選同意社區軟體許可協議', agreeTitle: '服務協議及隱私保護', agreeContent: '為了更好的保障您的合法權益,請您閱讀並同意以下協議 « 飛致雲社區軟體許可協議 »', @@ -254,7 +254,7 @@ const message = { nginxDoc: '僅支援英文大小寫,數字,和.', appName: '支援英文、數字、-和_,長度2-30,並且不能以-_開頭和結尾', containerName: '支援字母、數字、_-和.,不能以-_或.開頭,長度2-128', - mirror: '支援以 http(s):// 開頭,英文大小寫,數字,. / 和 - 的鏡像加速地址,且不能有空行', + mirror: '支援以 http(s):// 開頭,英文大小寫,數字,. / 和 - 的映像加速地址,且不能有空行', disableFunction: '僅支援字母、下劃線和,', leechExts: '僅支援字母數字和,', paramSimple: '支援小寫字母和數字,長度 1-128', @@ -289,7 +289,7 @@ const message = { stopped: '已停止', error: '失敗', created: '已建立', - restarting: '重啟中', + restarting: '重新啟動中', uploading: '上傳中', unhealthy: '異常', removing: '移除中', @@ -300,7 +300,7 @@ const message = { enabled: '已啟用', disabled: '已停止', normal: '正常', - building: '製作鏡像中', + building: '製作映像中', upgrading: '升級中', pending: '待編輯', rebuilding: '重建中', @@ -364,10 +364,10 @@ const message = { apps: '應用商店', website: '網站', project: '項目', - config: '配置', - ssh: 'SSH 配置', + config: '設定', + ssh: 'SSH 設定', firewall: '防火牆', - ssl: '證書', + ssl: '憑證', database: '資料庫', aiTools: 'AI', mcp: 'MCP', @@ -398,9 +398,9 @@ const message = { minQuickJump: '請至少設定一個快速跳轉入口', maxQuickJump: '最多可設定四個快速跳轉入口', database: '資料庫 - 全部', - restart_1panel: '重啟面板', - restart_system: '重啟伺服器', - operationSuccess: '操作成功,正在重啟,請稍後手動重新整理瀏覽器', + restart_1panel: '重新啟動面板', + restart_system: '重新啟動伺服器', + operationSuccess: '操作成功,正在重新啟動,請稍後手動重新整理瀏覽器', entranceHelper: '設定安全入口有利於提高系統的安全性,如有需要,前往 面板設定-安全 中,啟用安全入口', appInstalled: '已安裝應用', systemInfo: '系統資訊', @@ -432,7 +432,7 @@ const message = { corePercent: '核心使用率', cpuFrequency: 'CPU 頻率', cpuDetailedPercent: 'CPU 佔用', - cpuUser: '用戶態', + cpuUser: '使用者態', cpuSystem: '內核態', cpuIdle: '空閒', cpuIrq: '硬中斷', @@ -456,7 +456,7 @@ const message = { networkCard: '網卡', disk: '磁碟', memo: '備忘錄', - memoPlaceholder: '點擊編輯按鈕啟用編輯', + memoPlaceholder: '點選編輯按鈕啟用編輯', carouselSetting: '輪播設定', tooltipSensitiveInfo: '顯示/隱藏敏感資訊', }, @@ -489,7 +489,7 @@ const message = { collationHelper: '為空則使用 {0} 字元集的預設排序規則', permissionForIP: '指定 IP', permissionAll: '所有人(%)', - localhostHelper: '將容器部署的資料庫權限配置為"localhost"會導致容器外部無法存取,請謹慎選擇', + localhostHelper: '將容器部署的資料庫權限設定為"localhost"會導致容器外部無法存取,請謹慎選擇', databaseConnInfo: '連接資訊', rootPassword: 'root 密碼', serviceName: '服務名稱', @@ -504,12 +504,12 @@ const message = { remoteConnHelper: 'root 帳號遠端連接 MySQL 有安全風險,開啟需謹慎', changePassword: '改密', changeConnHelper: '此操作將修改目前資料庫 {0},是否繼續?', - changePasswordHelper: '目前資料庫已經關聯應用,修改密碼將同步修改應用中資料庫密碼,修改後重啟生效。', - recoverTimeoutHelper: '-1 表示不限制超時時間', + changePasswordHelper: '目前資料庫已經關聯應用,修改密碼將同步修改應用中資料庫密碼,修改後重新啟動生效。', + recoverTimeoutHelper: '-1 表示不限制逾時時間', - portHelper: '該埠為容器對外暴露埠,修改需要單獨儲存並且重啟容器', + portHelper: '該埠為容器對外暴露埠,修改需要單獨儲存並且重新啟動容器', - confChange: '配置修改', + confChange: '設定修改', confNotFound: '未能找到該應用設定檔,請在應用商店升級該應用至最新版本後重試', loadFromRemote: '從伺服器同步', @@ -517,7 +517,7 @@ const message = { pgBindHelper: '此操作用於建立新使用者並將其綁定到目標資料庫,暫不支援選擇已存在於資料庫中的使用者。', pgSuperUser: '超級使用者', loadFromRemoteHelper: '此操作將同步伺服器上資料庫資訊到 1Panel,是否繼續?', - passwordHelper: '無法獲取,可點擊修改', + passwordHelper: '無法取得,可點選修改', remote: '遠端', remoteDB: '遠端伺服器', createRemoteDB: '新增遠端伺服器', @@ -533,21 +533,21 @@ const message = { pgUserHelper: '具有超級管理員權限的資料庫使用者', ssl: '使用 SSL', clientKey: '用戶端私鑰', - clientCert: '用戶端證書', - hasCA: '擁有 CA 證書', - caCert: 'CA 證書', - skipVerify: '忽略校驗證書可用性檢測', + clientCert: '用戶端憑證', + hasCA: '擁有 CA 憑證', + caCert: 'CA 憑證', + skipVerify: '忽略校驗憑證可用性偵測', initialDB: '初始資料庫', formatHelper: '目前資料庫字元集為 {0},字元集不一致可能導致復原失敗', dropHelper: '將上傳檔案拖曳到此處,或', - clickHelper: '點擊上傳', + clickHelper: '點選上傳', supportUpType: '僅支援 sql、sql.gz、tar.gz、.zip 檔案格式,匯入的壓縮檔案必須保證只有一個 .sql 檔案或包含 test.sql', currentStatus: '當前狀態', baseParam: '基礎參數', - performanceParam: '性能參數', + performanceParam: '效能參數', runTime: '啟動時間', connections: '總連接數', bytesSent: '發送', @@ -567,7 +567,7 @@ const message = { tmpTableToDB: '建立臨時表到磁碟', tmpTableToDBHelper: '若過大,嘗試增加 tmp_table_size', openTables: '已開啟的表', - openTablesHelper: 'table_open_cache 配置值應大於等於此值', + openTablesHelper: 'table_open_cache 設定值應大於等於此值', selectFullJoin: '沒有使用索引的量', selectFullJoinHelper: '若不為0,請檢查資料表的索引是否合理', selectRangeCheck: '沒有索引的 JOIN 量', @@ -575,9 +575,9 @@ const message = { sortMergePasses: '排序後的合併次數', sortMergePassesHelper: '若值過大,增加sort_buffer_size', tableLocksWaited: '鎖表次數', - tableLocksWaitedHelper: '若值過大,請考慮增加您的資料庫性能', + tableLocksWaitedHelper: '若值過大,請考慮增加您的資料庫效能', - performanceTuning: '性能調整', + performanceTuning: '效能調整', optimizationScheme: '最佳化方案', keyBufferSizeHelper: '用於索引的緩衝區大小', queryCacheSizeHelper: '查詢快取,不開啟請設為0', @@ -593,7 +593,7 @@ const message = { threadCacheSizeHelper: '執行緒池大小', tableOpenCacheHelper: '表快取', maxConnectionsHelper: '最大連接數', - restart: '重啟資料庫', + restart: '重新啟動資料庫', slowLog: '慢日誌', noData: '暫無慢日誌...', @@ -602,10 +602,10 @@ const message = { longQueryTime: '閾值(秒)', thresholdRangeHelper: '請輸入正確的閾值(1 - 600)', - timeout: '超時時間(秒)', - timeoutHelper: '空閒連接超時時間,0表示不斷開', + timeout: '逾時時間(秒)', + timeoutHelper: '空閒連接逾時時間,0表示不斷開', maxclients: '最大連接數', - requirepassHelper: '留空代表沒有設定密碼,修改需要單獨儲存並且重啟容器', + requirepassHelper: '留空代表沒有設定密碼,修改需要單獨儲存並且重新啟動容器', databases: '資料庫數量', maxmemory: '最大記憶體使用', maxmemoryHelper: '0 表示不做限制', @@ -623,17 +623,17 @@ const message = { keyspaceMisses: '尋找資料庫鍵失敗的次數', hit: '尋找資料庫鍵命中率', latestForkUsec: '最近一次 fork() 操作耗費的微秒數', - redisCliHelper: '未檢測到 redis-cli 服務,請先啟用服務', + redisCliHelper: '未偵測到 redis-cli 服務,請先啟用服務', redisQuickCmd: 'Redis 快速指令', recoverHelper: '即將使用 [{0}] 對資料進行覆蓋,是否繼續?', submitIt: '覆蓋資料', - baseConf: '基礎配置', - allConf: '全部配置', - restartNow: '立即重啟', - restartNowHelper1: '修改配置後需要重啟生效,若您的資料需要持久化請先執行 save 操作。', - restartNowHelper: '修改配置後需要重啟生效。', + baseConf: '基本設定', + allConf: '全部設定', + restartNow: '立即重新啟動', + restartNowHelper1: '修改設定後需要重新啟動生效,若您的資料需要持久化請先執行 save 操作。', + restartNowHelper: '修改設定後需要重新啟動生效。', persistence: '持久化', rdbHelper1: '秒內,插入', @@ -646,7 +646,7 @@ const message = { containerConnHelper: 'PHP 執行環境/容器安裝的應用程式使用此連接地址', remoteConn: '外部連接', remoteConnHelper2: '非容器環境或外部連接需使用此地址。', - remoteConnHelper3: '預設存取地址為主機IP,修改請前往面板設定頁面的「預設存取地址」配置項。', + remoteConnHelper3: '預設存取地址為主機IP,修改請前往面板設定頁面的「預設存取地址」設定項目。', localIP: '本機 IP', }, aiTools: { @@ -669,13 +669,13 @@ const message = { token: 'Token', manualModel: '手動輸入模型', verified: '驗證狀態', - configTitle: '配置', + configTitle: '設定', settingsTab: '設定', browserTab: '瀏覽器', browserEnabled: '瀏覽器開關', headless: '無頭模式', noSandbox: '禁用沙箱', - defaultProfile: '預設配置檔', + defaultProfile: '預設設定檔', executablePath: '瀏覽器可執行路徑', switchModelSuccess: '模型切換成功', channelsTab: '聊天渠道', @@ -688,7 +688,7 @@ const message = { botName: '機器人名稱', appId: '應用 App ID', appSecret: '應用 App Secret', - saveAndRestartGateway: '保存並重啟網關', + saveAndRestartGateway: '保存並重新啟動網關', pairingCode: '配對碼', pairingCodePlaceholder: '請輸入配對碼', approvePairing: '批准配對', @@ -707,16 +707,16 @@ const message = { container_conn_helper: '容器間瀏覽或連接使用此地址', ollama_sync: '同步 Ollama 模型發現下列模型不存在,是否刪除?', from_remote: '該模型並非透過 1Panel 下載,無相關拉取日誌。', - no_logs: '該模型的拉取日誌已被刪除,無法查看相關日誌。', + no_logs: '該模型的拉取日誌已被刪除,無法檢視相關日誌。', }, proxy: { proxy: 'AI 代理增強', proxyHelper1: '綁定域名並啟用 HTTPS,提高傳輸安全性', proxyHelper2: '限制 IP 瀏覽,防止在網路上暴露', proxyHelper3: '啟用即時串流', - proxyHelper4: '建立後,您可以在網站列表中查看並管理', + proxyHelper4: '建立後,您可以在網站列表中檢視並管理', proxyHelper5: '啟用後,您可以在應用商店 - 已安裝 - Ollama - 參數中取消埠外部瀏覽以提高安全性', - proxyHelper6: '如需關閉代理配置,可以在網站列表中刪除', + proxyHelper6: '如需關閉代理設定,可以在網站列表中刪除', whiteListHelper: '限制僅白名單中的 IP 可瀏覽', }, gpu: { @@ -767,7 +767,7 @@ const message = { exclusiveProcessHelper: '行程排他: 只有一個 CUDA 上下文可以使用 GPU,但可以由多個執行緒共享', exclusiveThreadHelper: '執行緒排他: 只有一個執行緒在 CUDA 上下文中可以使用 GPU', prohibitedHelper: '禁止: 不允許行程同時執行', - migModeHelper: '用於建立 MIG 實例,在用戶層實現 GPU 的物理隔離。', + migModeHelper: '用於建立 MIG 實例,在使用者層實現 GPU 的物理隔離。', migModeNA: '不支援', current: '即時監控', history: '歷史記錄', @@ -790,7 +790,7 @@ const message = { domainHelper: '例:192.168.1.1 或 example.com', bindDomain: '綁定網站', commandPlaceHolder: '僅支援 npx 和 二進制啟動的指令', - importMcpJson: '匯入 MCP Server 配置', + importMcpJson: '匯入 MCP Server 設定', importMcpJsonError: 'mcpServers 結構不正確', bindDomainHelper: '綁定網站之後會修改所有已安裝 MCP Server 的存取地址,並關閉埠的外部存取', outputTransport: '輸出類型', @@ -802,8 +802,8 @@ const message = { tensorRT: { llm: 'TensorRT LLM', modelDir: '模型目錄', - commandHelper: '若需外部存取,請將命令中的端口設置為與應用端口相同', - imageAlert: '由於鏡像較大,建議先手動將鏡像下載到伺服器後再進行安裝', + commandHelper: '若需外部存取,請將命令中的埠設置為與應用埠相同', + imageAlert: '由於映像較大,建議先手動將映像下載到伺服器後再進行安裝', modelSpeedup: '啟用模型加速', modelType: '模型類型', }, @@ -815,7 +815,7 @@ const message = { commandRule: '請輸入正確的 docker run 容器建立指令', commandHelper: '將在伺服器上執行該條指令以建立容器,是否繼續?', edit: '編輯容器', - updateHelper1: '檢測到該容器來源於應用商店,請注意以下兩點:', + updateHelper1: '偵測到該容器來源於應用商店,請注意以下兩點:', updateHelper2: '1. 目前修改內容不會同步到應用商店的已安裝應用。', updateHelper3: '2. 如果在已安裝頁面修改應用,目前編輯的部分內容將失效。', updateHelper4: '編輯容器需要重建,任何未持久化的資料將遺失,是否繼續?', @@ -824,10 +824,10 @@ const message = { operatorAppHelper: '將對以下容器進行 {0} 操作,\n其中部分來源於應用商店,該操作可能會影響到該服務的正常使用。\n是否確認?', containerDeleteHelper: - '檢測到容器來源於應用商店,刪除容器不會將其從 1Panel 中完全移除。如需徹底刪除,請前往應用商店-『已安裝』或『運行環境』等選單中操作。是否繼續?', + '偵測到容器來源於應用商店,刪除容器不會將其從 1Panel 中完全移除。如需徹底刪除,請前往應用商店-『已安裝』或『運行環境』等選單中操作。是否繼續?', start: '啟動', stop: '停止', - restart: '重啟', + restart: '重新啟動', kill: '強制停止', pause: '暫停', unpause: '復原', @@ -837,15 +837,15 @@ const message = { containerPrune: '清理容器', containerPruneHelper1: '清理容器 將刪除所有處於停止狀態的容器。', containerPruneHelper2: - '若容器來自於應用商店,在執行清理操作後,您需要前往 [應用商店] 的 [已安裝] 列表,點擊 [重建] 按鈕進行重新安裝。', + '若容器來自於應用商店,在執行清理操作後,您需要前往 [應用商店] 的 [已安裝] 列表,點選 [重建] 按鈕進行重新安裝。', containerPruneHelper3: '該操作無法回滾,是否繼續?', - imagePrune: '清理鏡像', - imagePruneSome: '未標籤鏡像', - imagePruneSomeEmpty: '暫無待清理的未使用 none 標籤鏡像', - imagePruneSomeHelper: '清理下列標籤為 none 且未被任何容器使用的鏡像', - imagePruneAll: '未使用鏡像', - imagePruneAllEmpty: '暫無待清理的未使用鏡像', - imagePruneAllHelper: '清理下列未被任何容器使用的鏡像', + imagePrune: '清理映像', + imagePruneSome: '未標籤映像', + imagePruneSomeEmpty: '暫無待清理的未使用 none 標籤映像', + imagePruneSomeHelper: '清理下列標籤為 none 且未被任何容器使用的映像', + imagePruneAll: '未使用映像', + imagePruneAllEmpty: '暫無待清理的未使用映像', + imagePruneAllHelper: '清理下列未被任何容器使用的映像', networkPrune: '清理網路', networkPruneHelper: '清理網路 將刪除所有未被使用的網路,該操作無法回滾,是否繼續?', volumePrune: '清理磁碟區', @@ -864,7 +864,7 @@ const message = { cleanLog: '清空日誌', downLogHelper1: '即將下載 {0} 容器所有日誌,是否繼續?', downLogHelper2: '即將下載 {0} 容器最近 {1} 條日誌,是否繼續?', - cleanLogHelper: '清空日誌需要重啟容器,該操作無法回滾,是否繼續?', + cleanLogHelper: '清空日誌需要重新啟動容器,該操作無法回滾,是否繼續?', newName: '新名稱', workingDir: '工作目錄', source: '資源使用率', @@ -893,8 +893,8 @@ const message = { sizeRootFs: '虛擬大小', sizeRootFsHelper: '容器依賴的所有映像層 + 容器層的總大小', - containerFromAppHelper: '檢測到該容器來源於應用商店,應用操作可能會導致目前編輯失效', - containerFromAppHelper1: '在已安裝應用程式列表點擊 [參數] 按鈕,進入編輯頁面即可修改容器名稱。', + containerFromAppHelper: '偵測到該容器來源於應用商店,應用操作可能會導致目前編輯失效', + containerFromAppHelper1: '在已安裝應用程式列表點選 [參數] 按鈕,進入編輯頁面即可修改容器名稱。', command: '指令', console: '控制臺互動', tty: '偽終端 ( -t )', @@ -904,19 +904,19 @@ const message = { privileged: '特權模式', privilegedHelper: '允許容器在主機上執行某些特權操作,可能會增加容器風險,請謹慎開啟', - upgradeHelper: '倉庫名稱/鏡像名稱:鏡像版本', + upgradeHelper: '倉庫名稱/映像名稱:映像版本', upgradeWarning2: '升級操作需要重建容器,任何未持久化的資料將會遺失,是否繼續?', - oldImage: '目前鏡像', - sameImageContainer: '同鏡像容器', - sameImageHelper: '同鏡像容器可勾選後批次升級', - targetImage: '目標鏡像', - imageLoadErr: '未檢測到容器的鏡像名稱', + oldImage: '目前映像', + sameImageContainer: '同映像容器', + sameImageHelper: '同映像容器可勾選後批次升級', + targetImage: '目標映像', + imageLoadErr: '未偵測到容器的映像名稱', appHelper: '該容器來源於應用商店,升級可能導致該服務不可用', resource: '資源', input: '手動輸入', - forcePull: '強制拉取鏡像', - forcePullHelper: '忽略伺服器已存在的鏡像,重新拉取一次', + forcePull: '強制拉取映像', + forcePullHelper: '忽略伺服器已存在的映像,重新拉取一次', server: '伺服器', serverExample: '80, 80-88, ip:80 或 ip:80-88', containerExample: '80 或 80-88', @@ -953,43 +953,43 @@ const message = { rslaveHelper: '容器裡所有掛載都能看見主機變化,但不影響主機', mode: '權限', env: '環境變數', - restartPolicy: '重啟規則', - always: '一直重啟', - unlessStopped: '未手動停止則重啟', - onFailure: '失敗後重啟(預設重啟 5 次)', - no: '不重啟', + restartPolicy: '重新啟動規則', + always: '一直重新啟動', + unlessStopped: '未手動停止則重新啟動', + onFailure: '失敗後重新啟動(預設重新啟動 5 次)', + no: '不重新啟動', refreshTime: '重新整理間隔', cache: '快取', - image: '鏡像', - imagePull: '拉取鏡像', - imagePullHelper: '支援選擇拉取多個鏡像,輸入一組鏡像後Enter繼續', - imagePush: '推送鏡像', - imagePushHelper: '檢測到該映像存在多個標籤,請確認推送時使用的映像名稱為:{0}', - imageDelete: '刪除鏡像', + image: '映像', + imagePull: '拉取映像', + imagePullHelper: '支援選擇拉取多個映像,輸入一組映像後Enter繼續', + imagePush: '推送映像', + imagePushHelper: '偵測到該映像存在多個標籤,請確認推送時使用的映像名稱為:{0}', + imageDelete: '刪除映像', repoName: '倉庫名', - imageName: '鏡像名', - httpRepo: 'http 倉庫新增授信需要重啟 docker 服務', + imageName: '映像名', + httpRepo: 'http 倉庫新增授信需要重新啟動 docker 服務', delInsecure: '刪除授信', - delInsecureHelper: '刪除授信需要重啟 docker 服務,是否刪除?', + delInsecureHelper: '刪除授信需要重新啟動 docker 服務,是否刪除?', pull: '拉取', path: '路徑', - importImage: '匯入鏡像', - imageBuild: '構建鏡像', + importImage: '匯入映像', + imageBuild: '構建映像', buildArgs: '構建參數', pathSelect: '路徑選擇', label: '標籤', - imageTag: '鏡像標籤', + imageTag: '映像標籤', imageTagHelper: '支援設定多個映像標籤,輸入一個標籤後Enter繼續', push: '推送', fileName: '檔案名', export: '匯出', - exportImage: '匯出鏡像', + exportImage: '匯出映像', size: '大小', tag: '標籤', tagHelper: '一行一個,例: \nkey1=value1\nkey2=value2', - imageNameHelper: '鏡像名稱及 Tag,例:nginx:latest', + imageNameHelper: '映像名稱及 Tag,例:nginx:latest', cleanBuildCache: '清理建置快取', delBuildCacheHelper: '清理建置快取將刪除所有建置所產生的快取,此操作無法回復。是否繼續?', urlWarning: '路徑前綴不需要新增 http:// 或 https://,請修改', @@ -1018,10 +1018,10 @@ const message = { repo: '倉庫', createRepo: '新增倉庫', - httpRepoHelper: '操作 HTTP 類型倉庫需要重啟 Docker 服務。', + httpRepoHelper: '操作 HTTP 類型倉庫需要重新啟動 Docker 服務。', downloadUrl: '下載網址', - imageRepo: '鏡像倉庫', - repoHelper: '是否包含鏡像倉庫/組織/項目?', + imageRepo: '映像倉庫', + repoHelper: '是否包含映像倉庫/組織/項目?', auth: '認證', mirrorHelper: '當存在多個加速器時,需要換行顯示,例: \nhttp://xxxxxx.m.daocloud.io \nhttps://xxxxxx.mirror.aliyuncs.com', @@ -1029,17 +1029,17 @@ const message = { compose: '編排', composeFile: '編排檔案', - fromChangeHelper: '切換來源將清空檔前已編輯內容,是否繼續?', + fromChangeHelper: '切換來源將清空當前已編輯內容,是否繼續?', composePathHelper: '設定檔儲存路徑: {0}', - composeHelper: '通過 1Panel 編輯或模版建立的編排,將儲存在 {0}/docker/compose 路徑下', + composeHelper: '通過 1Panel 編輯或範本建立的編排,將儲存在 {0}/docker/compose 路徑下', deleteFile: '刪除檔案', deleteComposeHelper: '刪除容器編排的所有檔案,包括設定檔和持久化檔案,請謹慎操作', deleteCompose: '" 刪除此編排', createCompose: '建立編排', composeDirectory: '編排目錄', - template: '模版', - composeTemplate: '編排模版', - createComposeTemplate: '建立編排模版', + template: '範本', + composeTemplate: '編排範本', + createComposeTemplate: '建立編排範本', content: '內容', contentEmpty: '編排內容不能為空,請輸入後重試', containerNumber: '容器數量', @@ -1051,36 +1051,36 @@ const message = { composeDownHelper: '將停止並刪除 {0} 編排下所有容器及網路,是否繼續?', composeEnvHelper2: '該編排為 1Panel 應用商店建立,請在已安裝應用中修改環境變數。', - setting: '配置', + setting: '設定', goSetting: '去修改', operatorStatusHelper: '此操作將{0}Docker 服務,是否繼續?', dockerStatus: 'Docker 服務', - daemonJsonPathHelper: '請保證配置路徑與 docker.service 中指定的配置路徑保持一致。', - mirrors: '鏡像加速', - mirrorsHelper: '優先使用加速 URL 執行操作,設定為空則取消鏡像加速。', - mirrorsHelper2: '配置請參考官方文件', + daemonJsonPathHelper: '請保證設定路徑與 docker.service 中指定的設定路徑保持一致。', + mirrors: '映像加速', + mirrorsHelper: '優先使用加速 URL 執行操作,設定為空則取消映像加速。', + mirrorsHelper2: '設定請參考官方文件', registries: '私有倉庫', - ipv6Helper: '開啟 IPv6 後,需要增加 IPv6 的容器網路,配置請參考官方文件', + ipv6Helper: '開啟 IPv6 後,需要增加 IPv6 的容器網路,設定請參考官方文件', ipv6CidrHelper: '容器的 IPv6 位址池範圍', - ipv6TablesHelper: 'Docker IPv6 對 iptables 規則的自動配置', - experimentalHelper: '開啟 ip6tables 必須開啟此配置,否則 ip6tables 會被忽略', + ipv6TablesHelper: 'Docker IPv6 對 iptables 規則的自動設定', + experimentalHelper: '開啟 ip6tables 必須開啟此設定,否則 ip6tables 會被忽略', cutLog: '日誌切割', - cutLogHelper1: '目前配置只會影響新建立的容器;', - cutLogHelper2: '已經建立的容器需要重新建立使配置生效;', + cutLogHelper1: '目前設定只會影響新建立的容器;', + cutLogHelper2: '已經建立的容器需要重新建立使設定生效;', cutLogHelper3: '注意,重新建立容器可能會導致資料遺失。如果你的容器中有重要資料,確保在執行重建操作之前進行備份。', maxSize: '檔案大小', maxFile: '保留份數', liveHelper: '允許在 Docker 守護行程發生意外停機或崩潰時保留正在執行的容器狀態', - liveWithSwarmHelper: 'live-restore 守護行程配置與 Swarm 模式不相容', + liveWithSwarmHelper: 'live-restore 守護行程設定與 Swarm 模式不相容', iptablesDisable: '關閉 iptables', - iptablesHelper1: 'Docker 對 iptables 規則的自動配置', - iptablesHelper2: '關閉 iptables 會導致容器無法與外部網路通信。', - daemonJsonPath: '配置路徑', + iptablesHelper1: 'Docker 對 iptables 規則的自動設定', + iptablesHelper2: '關閉 iptables 會導致容器無法與外部網路通訊。', + daemonJsonPath: '設定路徑', serviceUnavailable: '尚未啟動 Docker 服務,請在', startIn: '中開啟', sockPath: 'Socket 路徑', - sockPathHelper: 'Docker 守護行程(Docker Daemon)與用戶端之間的通信通道', + sockPathHelper: 'Docker 守護行程(Docker Daemon)與用戶端之間的通訊通道', sockPathHelper1: '預設路徑:/var/run/docker.sock', sockPathMsg: '儲存設定 Socket 路徑可能導致 Docker 服務不可用,是否繼續?', sockPathErr: '請選擇或輸入正確的 Docker sock 檔案路徑', @@ -1089,16 +1089,16 @@ const message = { excludeAppstore: '隱藏應用商店容器', cleanDockerDiskZone: '清理 Docker 使用的磁碟空間', - cleanImagesHelper: '( 清理所有未被任何容器使用的鏡像 )', + cleanImagesHelper: '( 清理所有未被任何容器使用的映像 )', cleanContainersHelper: '( 清理所有處於停止狀態的容器 )', cleanVolumesHelper: '( 清理所有未被使用的本機磁碟區 )', - makeImage: '製作鏡像', - newImageName: '新鏡像名稱', + makeImage: '製作映像', + newImageName: '新映像名稱', commitMessage: '提交資訊', author: '作者', ifPause: '製作過程中是否暫停容器', - ifMakeImageWithContainer: '是否根據此容器製作新鏡像?', + ifMakeImageWithContainer: '是否根據此容器製作新映像?', finishTime: '上一次停止時間', }, cronjob: { @@ -1112,7 +1112,7 @@ const message = { taskType: '任務類型', nextTime: '近 5 次執行', record: '報告', - viewRecords: '查看報告', + viewRecords: '檢視報告', shell: 'Shell 腳本', stop: '手動結束', stopHelper: '該操作將強制停止該次任務執行,是否繼續?', @@ -1124,7 +1124,7 @@ const message = { containerCheckBox: '在容器中執行(無需再輸入進入容器指令)', containerName: '容器名稱', ntp: '同步伺服器時間', - ntp_helper: '您可以在工具箱的快速設定頁面配置 NTP 伺服器', + ntp_helper: '您可以在工具箱的快速設定頁面設定 NTP 伺服器', app: '備份應用', website: '備份網站', rulesHelper: '支援多個排除規則,使用英文逗號 , 分隔,例:*.log,*.sql', @@ -1133,7 +1133,7 @@ const message = { backupArgs: '備份參數', backupArgsHelper: '未列出的備份參數可手動輸入並選擇,例:輸入 --no-data 後選擇下拉列表中的第一個選項', singleTransaction: '使用單一事務備份 InnoDB 表,適用於大資料量的備份', - quick: '逐行讀取資料,而不是將整個表加載到內存中,適用於大資料量和低內存機器的備份', + quick: '逐行讀取資料,而不是將整個表載入到記憶體中,適用於大資料量和低記憶體機器的備份', skipLockTables: '不鎖定所有表進行備份,適用於高併發的資料庫', missBackupAccount: '未能找到備份帳號', syncDate: '同步時間 ', @@ -1141,14 +1141,14 @@ const message = { curl: '存取 URL', taskName: '任務名稱', cronSpec: '執行週期', - cronSpecDoc: '自訂執行週期僅支援【分 時 日 月 週】格式,例如 0 0 * * *,具體參考官方文件。', + cronSpecDoc: '自訂執行週期僅支援【分 時 日 月 週】格式,例如 0 0 * * *,詳細參考官方文件。', cronSpecHelper: '請輸入正確的執行週期', cleanHelper: '該操作將清理所有任務執行記錄、備份檔案和日誌檔案,是否繼續?', backupContent: '備份內容', directory: '備份目錄 / 檔案', sourceDir: '備份目錄', snapshot: '系統快照', - allOptionHelper: '目前計劃任務為備份所有【{0}】,暫不支援直接下載,可在【{0}】備份列表中查看', + allOptionHelper: '目前計劃任務為備份所有【{0}】,暫不支援直接下載,可在【{0}】備份列表中檢視', exclusionRules: '排除規則', exclusionRulesHelper: '選擇或輸入排除規則,輸入完一組後Enter繼續,排除規則將對此次備份的所有壓縮操作生效', default_download_path: '預設下載網址', @@ -1166,7 +1166,7 @@ const message = { retryTimesHelper: '為 0 表示失敗後不重試', retainCopiesHelper: '執行記錄及日誌保留份數', retainCopiesHelper1: '備份檔案保留份數', - retainCopiesUnit: ' 份 (查看)', + retainCopiesUnit: ' 份 (檢視)', cronSpecRule: '第 {0} 行中執行週期格式錯誤,請檢查後重試', cronSpecRule2: '執行週期格式錯誤,請檢查後重試', perMonthHelper: '每月 {0} 日 {1}:{2} 執行', @@ -1226,7 +1226,7 @@ const message = { edit: '修改腳本', groupHelper: '根據腳本特徵設定不同的分組,可以更快地對腳本進行篩選操作。', handleHelper: '將在 {0} 上執行 {1} 腳本,是否繼續?', - noSuchApp: '未檢測到 {0} 服務,請前往腳本庫頁面手動安裝', + noSuchApp: '未偵測到 {0} 服務,請前往腳本庫頁面手動安裝', syncHelper: '即將同步系統腳本庫,該操作僅針對系統腳本,是否繼續?', }, }, @@ -1313,7 +1313,7 @@ const message = { cursorBar: '條形', scrollback: '滾動行數', scrollSensitivity: '滾動速度', - saveHelper: '是否確認儲存目前終端配置?', + saveHelper: '是否確認儲存目前終端設定?', }, toolbox: { common: { @@ -1321,25 +1321,25 @@ const message = { }, swap: { swap: 'Swap', - swapHelper1: 'Swap 的大小應該是物理記憶體的 1 到 2 倍,可根據具體情況進行調整;', + swapHelper1: 'Swap 的大小應該是物理記憶體的 1 到 2 倍,可根據詳細情況進行調整;', swapHelper2: '在建立 Swap 檔案之前,請確保系統硬碟有足夠的可用空間,Swap 檔案的大小將佔用相應的磁碟空間;', swapHelper3: 'Swap 可以幫助紓解記憶體壓力,但僅是一個備選項,過多依賴可能導致系統效能下降,建議優先考慮增加記憶體或最佳化應用程式記憶體使用;', swapHelper4: '建議定期監控 Swap 的使用情況,以確保系統正常執行。', swapDeleteHelper: '此操作將移除 Swap 分區 {0},出於系統安全考慮,不會自動刪除該檔案,如需刪除請手動操作', saveHelper: '請先儲存目前設定', - saveSwap: '儲存目前配置將調整 Swap 分區 {0} 大小到 {1},是否繼續?', + saveSwap: '儲存目前設定將調整 Swap 分區 {0} 大小到 {1},是否繼續?', swapMin: '分區大小最小值為 40 KB,請修改後重試', swapMax: '分區大小最大值為 {0},請修改後重試', swapOff: '分區大小最小值為 40 KB,設定為 0 則關閉 Swap 分區。', }, device: { dnsHelper: '伺服器地址域名解析', - dnsAlert: '請注意修改 /etc/resolv.conf 檔案的配置時,重啟系統後會將檔案復原為預設值', + dnsAlert: '請注意修改 /etc/resolv.conf 檔案的設定時,重新啟動系統後會將檔案復原為預設值', dnsHelper1: '當存在多個DNS時,需換行顯示,例:\n114.114.114.114\n8.8.8.8', hostsHelper: '主機名稱解析', hosts: '域名', - hostAlert: '隱藏了已註釋的紀錄,請點擊 全部配置 按鈕以查看或設定', + hostAlert: '隱藏了已註釋的紀錄,請點選 全部設定 按鈕以檢視或設定', toolbox: '快速設定', hostname: '主機名稱', passwd: '系統密碼', @@ -1360,15 +1360,15 @@ const message = { passwordHelper: '密碼修改依賴於 chpasswd 指令,如未安裝可能導致修改失敗', hostHelper: '填寫的內容中存在空值,請檢查修改後重試', dnsCheck: '測試可用性', - dnsOK: 'DNS 配置資訊可用', - dnsTestFailed: 'DNS 配置資訊不可用,請修改後重試', + dnsOK: 'DNS 設定資訊可用', + dnsTestFailed: 'DNS 設定資訊不可用,請修改後重試', }, fail2ban: { sshPort: '監聽 SSH 埠', sshPortHelper: '目前 Fail2ban 監聽主機 SSH 連接埠', unActive: '尚未啟用 Fail2ban 服務,請先啟用', operation: '對 Fail2ban 服務進行 [{0}] 操作,是否繼續?', - fail2banChange: 'Fail2ban 配置修改', + fail2banChange: 'Fail2ban 設定修改', ignoreHelper: '白名單中的 IP 列表將被忽略封鎖,是否繼續?', bannedHelper: '黑名單中的 IP 列表將被伺服器封鎖,是否繼續?', maxRetry: '最大重試次數', @@ -1406,12 +1406,12 @@ const message = { enableMsg: '啟用定時執行會讓該掃描任務定期自動執行。是否繼續?', showFresh: '顯示病毒庫服務', hideFresh: '隱藏病毒庫服務', - clamHelper: 'ClamAV 建議最低配置:3 GiB 以上記憶體、單核 2.0 GHz 以上 CPU,以及至少 5 GiB 可用硬碟空間。', + clamHelper: 'ClamAV 建議最低設定:3 GiB 以上記憶體、單核 2.0 GHz 以上 CPU,以及至少 5 GiB 可用硬碟空間。', notStart: '尚未啟用 ClamAV 服務,請先啟用', removeRecord: '刪除報告檔案', - noRecords: '點擊「執行」按鈕開始掃描,掃描結果將會記錄在這裡。', + noRecords: '點選「執行」按鈕開始掃描,掃描結果將會記錄在這裡。', removeInfected: '刪除病毒檔案', - removeInfectedHelper: '刪除任務檢測到的病毒檔案,以確保伺服器的安全和正常執行。', + removeInfectedHelper: '刪除任務偵測到的病毒檔案,以確保伺服器的安全和正常執行。', clamCreate: '建立掃描規則', infectedStrategy: '感染檔案策略', removeHelper: '刪除病毒檔案,請謹慎選擇', @@ -1427,12 +1427,12 @@ const message = { tail: '日誌顯示行數', infectedFiles: '感染檔案數', log: '詳情', - clamConf: '掃描配置', + clamConf: '掃描設定', clamLog: '掃描日誌', - freshClam: '病毒庫重新整理配置', + freshClam: '病毒庫重新整理設定', freshClamLog: '病毒庫重新整理日誌', alertHelper: '專業版支援定時掃描和簡訊告警功能', - alertTitle: '病毒掃描「{0}」任務檢測到感染檔案告警', + alertTitle: '病毒掃描「{0}」任務偵測到感染檔案告警', }, }, logs: { @@ -1530,7 +1530,7 @@ const message = { downloadStart: '下載開始!', moveSuccess: '移動成功', copySuccess: '複製成功', - pasteMsg: '請在目標目錄點擊右上角【貼上】按鈕', + pasteMsg: '請在目標目錄點選右上角【貼上】按鈕', move: '移動', calculate: '計算', remark: '備註', @@ -1583,9 +1583,9 @@ const message = { fileRecycleBinMsg: '已{0}回收站', wordWrap: '自動換行', deleteHelper2: '確定刪除所選檔案? 刪除操作不可回滾', - ignoreCertificate: '忽略不可信證書', + ignoreCertificate: '忽略不可信憑證', ignoreCertificateHelper: - '下載時忽略不可信證書可能導致資料洩露或篡改。請謹慎使用此選項,僅在信任下載源的情況下啟用', + '下載時忽略不可信憑證可能導致資料洩露或篡改。請謹慎使用此選項,僅在信任下載源的情況下啟用', uploadOverLimit: '檔案數量超過 1000請壓縮後上傳', clashDidNotSupport: '檔名禁止包含 .1panel_clash', clashDeleteAlert: '回收站資料夾不能刪除', @@ -1595,7 +1595,7 @@ const message = { top: '返回上一層', up: '上一層', openWithVscode: 'VS Code 開啟', - vscodeHelper: '請確保本機已安裝 VS Code 並配置了 SSH Remote 外掛程式', + vscodeHelper: '請確保本機已安裝 VS Code 並設定了 SSH Remote 外掛程式', saveContentAndClose: '檔案已被修改,是否儲存並關閉?', saveAndOpenNewFile: '檔案已被修改,是否儲存並開啟新檔案?', noEdit: '檔案未修改,無需此操作', @@ -1631,7 +1631,7 @@ const message = { deleteSourceFile: '是否刪除來源檔案', convertHelper: '將選中的檔案轉換為其他格式', convertHelper1: '請選擇需要轉換格式的檔案', - execConvert: '開始轉換,可在任務中心查看轉換日誌', + execConvert: '開始轉換,可在任務中心檢視轉換日誌', convertLogs: '轉換日誌', formatConvert: '格式轉換', }, @@ -1642,7 +1642,7 @@ const message = { sshAlert: '列表資料根據登入時間排序,但請注意,切換時區或其他操作可能導致登入日誌的時間出現偏差。', sshAlert2: '您可以透過工具箱中的 Fail2ban 封鎖嘗試暴力破解的 IP 位址,從而提高主機的安全性。', sshOperate: '對 SSH 服務進行 [{0}] 操作,是否繼續?', - sshChange: 'SSH 配置修改', + sshChange: 'SSH 設定修改', sshChangeHelper: '此操作將 {0} 修改為 [{1}] ,是否繼續?', sshFileChangeHelper: '直接修改設定檔可能會導致服務不可用,請謹慎操作,是否繼續?', port: '連接埠', @@ -1718,7 +1718,7 @@ const message = { panelPort: '面板埠', portHelper: '建議埠範圍8888 - 65535,注意:有安全組的伺服器請提前在安全組放行新埠', portChange: '埠修改', - portChangeHelper: '服務埠修改需要重啟服務,是否繼續?', + portChangeHelper: '服務埠修改需要重新啟動服務,是否繼續?', theme: '主題顏色', menuTabs: '選單分頁', componentSize: '元件大小', @@ -1732,8 +1732,8 @@ const message = { cn: '中國大陸', intl: '全球', languageHelper: '預設跟隨瀏覽器語言,設定後只對目前瀏覽器生效,更換瀏覽器後需要重新設定', - sessionTimeout: '超時時間', - sessionTimeoutError: '最小超時時間為 300 秒', + sessionTimeout: '逾時時間', + sessionTimeoutError: '最小逾時時間為 300 秒', sessionTimeoutHelper: '如果使用者超過 {0} 秒未操作面板,面板將自動登出', systemIP: '預設存取地址', systemIPHelper: '應用跳轉、容器存取等功能將使用此地址進行路由。每個節點可設定不同地址。', @@ -1744,13 +1744,13 @@ const message = { proxyHelper3: '系統許可證的驗證和同步', proxyHelper4: 'Docker 的網路存取將透過代理伺服器進行(專業版功能)', proxyHelper5: '系統類型腳本庫的統一下載與同步(專業版功能)', - proxyHelper6: '申請證書(專業版功能)', + proxyHelper6: '申請憑證(專業版功能)', proxyType: '代理類型', proxyUrl: '代理地址', proxyPort: '代理埠', proxyPasswdKeep: '記住密碼', proxyDocker: 'Docker 代理', - proxyDockerHelper: '將代理伺服器配寘同步至 Docker,支援離線伺服器拉取鏡像等操作', + proxyDockerHelper: '將代理伺服器設定同步至 Docker,支援離線伺服器拉取映像等操作', syncToNode: '同步至子節點', syncToNodeHelper: '同步設定至其他節點', nodes: '節點', @@ -1774,11 +1774,11 @@ const message = { apiKeyValidityTimeHelper: '介面時間戳記到請求時的目前時間戳之間有效(組織分),設定為0時,不做時間戳記校驗', apiKeyReset: '介面金鑰重設', apiKeyResetHelper: '重設金鑰後,已關聯金鑰服務將失效,請重新新增新金鑰至服務。', - confDockerProxy: '配寘 Docker 代理', - restartNowHelper: '配寘 Docker 代理需要重啟 Docker 服務。', - restartNow: '立即重啟', - restartLater: '稍後手動重啟', - systemIPWarning: '當前節點尚未配置預設存取地址,請前往面板設定進行設定', + confDockerProxy: '設定 Docker 代理', + restartNowHelper: '設定 Docker 代理需要重新啟動 Docker 服務。', + restartNow: '立即重新啟動', + restartLater: '稍後手動重新啟動', + systemIPWarning: '當前節點尚未設定預設存取地址,請前往面板設定進行設定', systemIPWarning1: '當前伺服器地址為 {0},無法快速跳轉', changePassword: '密碼修改', oldPassword: '原密碼', @@ -1812,7 +1812,7 @@ const message = { '目前阿里雲端硬碟非用戶端下載最大限制為 100 MB,超過限制需要透過用戶端下載到本機後,同步快照進行復原', GoogleDrive: 'Google雲端硬碟', analysis: '解析', - analysisHelper: '貼上整個 token 內容,自動解析所需部分,具體操作參考官方文件', + analysisHelper: '貼上整個 token 內容,自動解析所需部分,詳細操作參考官方文件', serviceName: '服務名稱', operator: '操作員', OneDrive: '微軟 OneDrive', @@ -1821,7 +1821,7 @@ const message = { client_id: '用戶端 ID', client_secret: '用戶端金鑰', redirect_uri: '重定向 URL', - onedrive_helper: '自訂配置參考官方文件', + onedrive_helper: '自訂設定請參考官方文件', clickToRefresh: '單擊可手動重新整理', refreshTime: '令牌重新整理時間', refreshStatus: '令牌重新整理狀態', @@ -1829,8 +1829,8 @@ const message = { backupDir: '備份目錄', code: '授權碼', codeHelper: - '請點擊取得按鈕,然後登入 {0} 複製跳轉連結中 code 後面的內容,貼到該輸入框中,具體操作參考官方文件。', - googleHelper: '請先建立Google應用並取得用戶端資訊,填寫表單後點擊取得按鈕,具體操作參考官方文件。', + '請點選取得按鈕,然後登入 {0} 複製跳轉連結中 code 後面的內容,貼到該輸入框中,詳細操作參考官方文件。', + googleHelper: '請先建立Google應用並取得用戶端資訊,填寫表單後點選取得按鈕,詳細操作參考官方文件。', loadCode: '取得', COS: '騰訊雲 COS', ap_beijing_1: '北京一區', @@ -1867,7 +1867,7 @@ const message = { scArchive: '歸檔儲存,適用於極低存取頻率(例如半年存取1次)的業務場景。', scDeep_Archive: '深度歸檔儲存,適用於極低存取頻率(例如1年存取1~2次)的業務場景。', archiveHelper: '歸檔儲存的檔案無法直接下載,需要先在對應的雲服務商網站進行復原操作,請謹慎使用', - backupAlert: '理論上只要雲廠商相容 S3 協議,就可以用現有的亞馬遜 S3 雲端儲存來備份,具體配置參考 ', + backupAlert: '理論上只要雲廠商相容 S3 協議,就可以用現有的亞馬遜 S3 雲端儲存來備份,詳細設定請參考 ', domain: '加速域名', backupAccount: '備份帳號', loadBucket: '取得桶', @@ -1890,12 +1890,12 @@ const message = { systemLog: '保留系統日誌', taskLog: '保留任務日誌', monitorData: '保留監控資料', - dockerConf: '保留 Docker 配置', - selectAllImage: '備份所有應用鏡像', + dockerConf: '保留 Docker 設定', + selectAllImage: '備份所有應用映像', logLabel: '日誌', - agentLabel: '節點配置', + agentLabel: '節點設定', appDataLabel: '應用資料', - appImage: '應用鏡像', + appImage: '應用映像', appBackup: '應用備份', backupLabel: '備份目錄', confLabel: '設定檔', @@ -1911,7 +1911,7 @@ const message = { appStoreLabel: '應用商店', shellLabel: '腳本', tmpLabel: '暫存資料夾', - sslLabel: '證書目錄', + sslLabel: '憑證目錄', reCreate: '建立快照失敗', reRollback: '回滾快照失敗', deleteHelper: '將刪除該快照的所有備份檔案,包括第三方備份帳號中的檔案。', @@ -1937,7 +1937,7 @@ const message = { lastRollbackAt: '上次回滾時間', reDownload: '重新下載備份檔案', recoverErrArch: '不支援在不同伺服器架構之間進行快照復原操作!', - recoverErrSize: '檢測到目前磁碟空間不足,請檢查或清理後重試!', + recoverErrSize: '偵測到目前磁碟空間不足,請檢查或清理後重試!', recoverHelper: '即將從快照 {0} 開始復原,復原前請確認以下資訊:', recoverHelper1: '復原需要重新啟動 Docker 以及 1Panel 服務', recoverHelper2: '請確保伺服器磁碟空間充足 ( 快照檔案大小: {0}, 可用空間: {1} )', @@ -1948,7 +1948,7 @@ const message = { upgradeRecord: '升級記錄', upgrading: '正在升級中,請稍候', - upgradeHelper: '升級操作需要重啟 1Panel 服務,是否繼續?', + upgradeHelper: '升級操作需要重新啟動 1Panel 服務,是否繼續?', noUpgrade: '已是最新版本', versionHelper: '1Panel 版本號命名規則為: [大版本].[功能版本].[Bug 修復版本],例:', rollbackLocalHelper: '主節點暫不支援直接回滾,請手動執行「1pctl restore」指令回滾', @@ -1957,7 +1957,7 @@ const message = { upgradeNow: '立即更新', source: '下載源', versionNotSame: '節點版本與主節點不一致,請在節點管理中升級後重試。', - versionCompare: '檢測到節點 {0} 版本已是目前可升級最新版本,請檢查主節點版本後重試', + versionCompare: '偵測到節點 {0} 版本已是目前可升級最新版本,請檢查主節點版本後重試', safe: '安全', passkey: '通行金鑰', @@ -1977,7 +1977,7 @@ const message = { passkeyLastUsedAt: '最近使用', passkeyDeleteConfirm: '刪除後將無法使用此通行金鑰登入,是否繼續?', passkeyLimit: '最多可綁定 5 個通行金鑰', - passkeyFailed: '通行金鑰註冊失敗,請確認面板SSL證書是否為可信證書', + passkeyFailed: '通行金鑰註冊失敗,請確認面板SSL憑證是否為可信憑證', bindInfo: '監聽地址', bindAll: '監聽所有', bindInfoHelper: '修改服務監聽地址或協議可能導致服務不可用,是否繼續?', @@ -2001,7 +2001,7 @@ const message = { bindDomain: '網域綁定', unBindDomain: '域名解綁', panelSSL: '面板 SSL', - panelSSLHelper: '面板 SSL 自動續期後需要手動重啟 1Panel 服務才可生效', + panelSSLHelper: '面板 SSL 自動續期後需要手動重新啟動 1Panel 服務才可生效', unBindDomainHelper: '解除網域綁定可能造成系統不安全,是否繼續?', bindDomainHelper: '設定網域綁定後,僅能透過設定中域名存取 1Panel 服務', bindDomainHelper1: '綁定域名為空時,則取消網域綁定', @@ -2025,9 +2025,9 @@ const message = { mfaInterval: '重新整理時間(秒)', mfaTitleHelper: '用於區分不同 1Panel 主機,修改後請重新掃描或手動新增金鑰資訊', mfaIntervalHelper: '修改重新整理時間後,請重新掃描或手動新增金鑰資訊', - sslChangeHelper: 'https 設定修改需要重啟服務,是否繼續?', + sslChangeHelper: 'https 設定修改需要重新啟動服務,是否繼續?', sslDisable: '停用', - sslDisableHelper: '停用 https 服務,需要重啟面板才能生效,是否繼續?', + sslDisableHelper: '停用 https 服務,需要重新啟動面板才能生效,是否繼續?', noAuthSetting: '未認證設定', noAuthSettingHelper: '當使用者未登入且未正確輸入安全入口、授權 IP 或綁定域名時,此回應可以隱藏面板特徵。', responseSetting: '響應設定', @@ -2036,7 +2036,7 @@ const message = { error401: '未授權', error403: '禁止存取', error404: '未找到', - error408: '請求超時', + error408: '請求逾時', error416: '無效請求', error444: '連線已關閉', error500: '內部伺服器錯誤', @@ -2044,15 +2044,15 @@ const message = { https: '為面板設置 HTTPS 可提升存取安全性', strictHelper: '非 HTTPS 流量無法連接面板', muxHelper: '面板將同時監聽 HTTP 和 HTTPS 協議,並將 HTTP 重定向到 HTTPS,此模式下可能會降低面板安全性', - certType: '證書類型', + certType: '憑證類型', selfSigned: '自簽名', - selfSignedHelper: '自簽證書,不被瀏覽器信任,顯示不安全是正常現象', + selfSignedHelper: '自簽憑證,不被瀏覽器信任,顯示不安全是正常現象', select: '選擇已有', domainOrIP: '域名或 IP:', timeOut: '過期時間:', - rootCrtDownload: '根證書下載', + rootCrtDownload: '根憑證下載', primaryKey: '金鑰', - certificate: '證書', + certificate: '憑證', about: '關於', versionItem: '當前版本', @@ -2060,7 +2060,7 @@ const message = { backupCopiesHelper: '設定用於版本回滾的升級備份保留份數。0 表示保留所有。', backupCopiesRule: '請至少儲存 3 份升級備份記錄', release: '版本更新日誌', - releaseHelper: '目前環境更新日誌取得異常,可手動前往官方文件查看', + releaseHelper: '目前環境更新日誌取得異常,可手動前往官方文件檢視', project: '項目地址', issue: '問題回饋', doc: '官方文件', @@ -2092,7 +2092,7 @@ const message = { add: '新增社區版', licenseBindHelper: '僅當授權已綁定節點時,才能使用其免費節點額度', licenseAlert: '僅當許可證正常綁定到節點時,該許可證才能新增社區版節點,只有正常綁定到許可證的節點支援切換。', - licenseUnbindHelper: '檢測到該許可證存在社區版節點,請解除綁定後重試', + licenseUnbindHelper: '偵測到該許可證存在社區版節點,請解除綁定後重試', subscription: '訂閱', perpetual: '永久授權', versionConstraint: '{0} 版本買斷', @@ -2102,13 +2102,13 @@ const message = { trialInfo: '版本', authorizationId: '訂閱授權 ID', authorizedUser: '被授權方', - lostHelper: '許可證已達到最大重試次數,請手動點擊同步按鈕,以確保專業版功能正常使用,詳情:', - exceptionalHelper: '許可證同步驗證異常,請手動點擊同步按鈕,以確保專業版功能正常使用,詳情:', + lostHelper: '許可證已達到最大重試次數,請手動點選同步按鈕,以確保專業版功能正常使用,詳情:', + exceptionalHelper: '許可證同步驗證異常,請手動點選同步按鈕,以確保專業版功能正常使用,詳情:', quickUpdate: '快速更新', power: '授權', unbindHelper: '解除綁定後將清除該節點所有專業版相關設定,是否繼續?', importLicense: '匯入許可證', - importHelper: '請點擊或拖動許可檔案到此處', + importHelper: '請點選或拖動許可檔案到此處', levelUpPro: '升級專業版', licenseSync: '許可證同步', knowMorePro: '了解更多', @@ -2118,13 +2118,13 @@ const message = { tamper: '升級專業版可以保護網站免受未經授權的修改或篡改。', tamperHelper: '操作失敗,該檔案或資料夾已經開啟防篡改,請檢查後重試', setting: '升級專業版可以自訂面板 Logo、歡迎簡介等資訊。', - monitor: '升級專業版可以查看網站的即時狀態、訪客趨勢、訪客來源、請求日誌等資訊。', - alert: '升級專業版可透過簡訊接收告警資訊,並查看告警日誌,全面掌控各類關鍵事件,確保系統執行無憂。', + monitor: '升級專業版可以檢視網站的即時狀態、訪客趨勢、訪客來源、請求日誌等資訊。', + alert: '升級專業版可透過簡訊接收告警資訊,並檢視告警日誌,全面掌控各類關鍵事件,確保系統執行無憂。', node: '升級專業版可以使用 1Panel 管理多台 Linux 伺服器。', nodeApp: '升級專業版可以統一升級多節點應用版本,無需手動切換節點。', nodeDashboard: '升級專業版可以集中管理多節點應用、網站、資料庫和計劃任務。', fileExchange: '升級專業版可以在多台伺服器之間快速傳輸檔案。', - app: '升級專業版可透過手機APP,查看服務資訊、異常監控等。', + app: '升級專業版可透過手機APP,檢視服務資訊、異常監控等。', cluster: '升級專業版可以管理 MySQL/Postgres/Redis 主從叢集。', }, clean: { @@ -2204,12 +2204,12 @@ const message = { backupdate: '備份時間', versionSelect: '請選擇版本', operatorHelper: '將對選中應用進行 {0} 操作,是否繼續?', - checkInstalledWarn: '未檢測到 {0} ,請進入應用商店點擊安裝', + checkInstalledWarn: '未偵測到 {0} ,請進入應用商店點選安裝', limitHelper: '該應用已安裝,不支援重複安裝', deleteHelper: '{0}已經關聯以下資源,請檢查後重試', checkTitle: '提示', - defaultConfig: '預設配置', - defaultConfigHelper: '已復原為預設配置,儲存後生效', + defaultConfig: '預設設定', + defaultConfigHelper: '已復原為預設設定,儲存後生效', forceDelete: '強制刪除', forceDeleteHelper: '強制刪除,會忽略刪除過程中產生的錯誤並最終刪除中繼資料', deleteBackup: '刪除備份', @@ -2218,7 +2218,7 @@ const message = { deleteDBHelper: '同時刪除與應用關聯的資料庫', noService: '無{0}', toInstall: '去安裝', - param: '參數配置', + param: '參數設定', syncAppList: '更新應用列表', alreadyRun: '已安裝', less1Minute: '小於1分鐘', @@ -2245,15 +2245,15 @@ const message = { composeNullErr: 'compose 不能為空', takeDown: '已廢棄', allReadyInstalled: '已安裝', - installHelper: '配置鏡像加速可以解決鏡像拉取失敗的問題', + installHelper: '設定映像加速可以解決映像拉取失敗的問題', sortMode: '排序', installWarn: '目前未勾選埠外部存取,將無法透過外網IP:埠存取,是否繼續? ', - showIgnore: '查看忽略應用', + showIgnore: '檢視忽略應用', cancelIgnore: '取消忽略', ignoreList: '忽略列表', - appHelper: '部分應用的安裝使用說明請在應用詳情頁查看', + appHelper: '部分應用的安裝使用說明請在應用詳情頁檢視', backupApp: '升級前備份應用', - backupAppHelper: '升級失敗會使用備份自動回滾,請在日誌審計-系統日誌中查看失敗原因', + backupAppHelper: '升級失敗會使用備份自動回滾,請在日誌審計-系統日誌中檢視失敗原因', openrestyDeleteHelper: '強制刪除 OpenResty 會刪除所有的網站,請確認風險後操作', downloadLogHelper1: '即將下載 {0} 套用所有日誌,是否繼續? ', downloadLogHelper2: '即將下載 {0} 應用最近 {1} 條日誌,是否繼續? ', @@ -2261,7 +2261,7 @@ const message = { hostModeHelper: '目前應用網路模式為 host 模式,如需放開埠,請在防火牆頁面手動放開', showLocal: '顯示本機應用程式', reload: '重載', - upgradeWarn: '升級應用程式會取代 docker-compose.yml 檔案,如有更改,可以點擊查看檔案對比', + upgradeWarn: '升級應用程式會取代 docker-compose.yml 檔案,如有更改,可以點選檢視檔案對比', newVersion: '新版本', oldVersion: '當前版本', composeDiff: '檔案對比', @@ -2270,15 +2270,15 @@ const message = { useDefault: '使用預設版本', useCustom: '自訂 docker-compose.yml', useCustomHelper: '使用自訂 docker-compose.yml 檔案,可能會導致應用程式升級失敗,如無必要,請勿勾選', - diffHelper: '左側為舊版本,右側為新版,編輯之後點擊使用自訂版本儲存', - pullImage: '拉取鏡像', - pullImageHelper: '在應用啟動之前執行 docker pull 來拉取鏡像', - deleteImage: '刪除鏡像', - deleteImageHelper: '刪除應用相關鏡像,刪除失敗任務不會終止', + diffHelper: '左側為舊版本,右側為新版,編輯之後點選使用自訂版本儲存', + pullImage: '拉取映像', + pullImageHelper: '在應用啟動之前執行 docker pull 來拉取映像', + deleteImage: '刪除映像', + deleteImageHelper: '刪除應用相關映像,刪除失敗任務不會終止', requireMemory: '最低記憶體', supportedArchitectures: '支援架構', link: '連結', - showCurrentArch: '本前伺服器架構應用', + showCurrentArch: '目前伺服器架構應用', syncLocalApp: '同步本機應用', memoryRequiredHelper: '目前應用記憶體需求 {0}', gpuConfig: '開啟 GPU 支援', @@ -2287,7 +2287,7 @@ const message = { webUIPlaceholder: '例:example.com:8080/login', defaultWebDomain: '預設存取地址', defaultWebDomainHepler: '預設存取用於應用埠跳轉,例如應用埠為 8080 則跳轉地址為 http(s)://預設存取地址:8080', - webUIConfig: '當前節點尚未配置預設存取地址,請在應用參數或前往面板設定進行設定', + webUIConfig: '當前節點尚未設定預設存取地址,請在應用參數或前往面板設定進行設定', toLink: '連結', customAppHelper: '在安裝自訂應用商店包之前,請確保沒有任何已安裝的應用。', forceUninstall: '強制移除', @@ -2297,10 +2297,10 @@ const message = { specifyIP: '綁定主機 IP', specifyIPHelper: '設定埠綁定的主機位址/網卡(如果你不清楚這個的作用,請不要填寫)', uninstallDeleteBackup: '移除應用-刪除備份', - uninstallDeleteImage: '移除應用-刪除鏡像', + uninstallDeleteImage: '移除應用-刪除映像', upgradeBackup: '應用升級前備份應用', - noAppHelper: '未檢測到應用程式,請前往任務中心查看應用商店同步日誌', - isEdirWarn: '檢測到 docker-compose.yml 檔案被修改,請查看對比', + noAppHelper: '未偵測到應用程式,請前往任務中心檢視應用商店同步日誌', + isEdirWarn: '偵測到 docker-compose.yml 檔案被修改,請檢視對比', }, website: { primaryDomain: '主域名', @@ -2337,17 +2337,17 @@ const message = { rateLimitHelper: '限制每個請求的每秒傳輸速率(單位:KB/s)', limitHelper: '啟用流量控制', other: '其他', - currentSSL: '目前證書', + currentSSL: '目前憑證', dnsAccount: 'DNS 帳號', - applySSL: '證書申請', - SSLList: '證書列表', + applySSL: '憑證申請', + SSLList: '憑證列表', createDnsAccount: 'DNS 帳戶', aliyun: '阿里雲 DNS', aliEsa: '阿里雲 ESA', awsRoute53: 'Amazon Route 53(亞馬遜)', manual: '手動解析', key: '金鑰', - check: '查看', + check: '檢視', acmeAccountManage: 'Acme 帳戶', email: '信箱', acmeAccount: 'Acme 帳戶', @@ -2356,17 +2356,17 @@ const message = { expireDate: '過期時間', brand: '組織', deploySSL: '部署', - deploySSLHelper: '確定部署證書?', - ssl: '證書', + deploySSLHelper: '確定部署憑證?', + ssl: '憑證', dnsAccountManage: 'DNS 帳戶', renewSSL: '續簽', - renewHelper: '確定續簽證書?', - renewSuccess: '續簽證書', + renewHelper: '確定續簽憑證?', + renewSuccess: '續簽憑證', enableHTTPS: '啟用 HTTPS', aliasHelper: '代號是網站目錄的資料夾名稱', lastBackupAt: '上次備份時間', null: '無', - nginxConfig: 'Nginx配置', + nginxConfig: 'Nginx 設定', websiteConfig: '網站設定', proxySettings: '代理設定', advancedSettings: '進階設定', @@ -2375,7 +2375,7 @@ const message = { basic: '基本', source: '設定檔', security: '安全', - nginxPer: '性能調整', + nginxPer: '效能調整', neverExpire: '永不過期', setDefault: '設為預設', deleteHelper: '相關應用狀態不正常,請檢查', @@ -2414,29 +2414,29 @@ const message = { folderTitle: '網站主要包含以下資料夾', wafFolder: '防火牆規則', indexFolder: '網站root目錄', - sslFolder: '網站證書', + sslFolder: '網站憑證', enableOrNot: '是否啟用', - oldSSL: '選擇已有證書', - manualSSL: '手動匯入證書', + oldSSL: '選擇已有憑證', + manualSSL: '手動匯入憑證', select: '選擇', - selectSSL: '選擇證書', + selectSSL: '選擇憑證', privateKey: '私鑰(KEY)', - certificate: '證書(PEM格式)', + certificate: '憑證(PEM格式)', HTTPConfig: 'HTTP 選項', HTTPSOnly: '禁止 HTTP', HTTPToHTTPS: '存取HTTP自動跳轉到HTTPS', HTTPAlso: 'HTTP可直接存取', sslConfig: 'SSL 選項', disableHTTPS: '停用 HTTPS', - disableHTTPSHelper: '停用 HTTPS會刪除證書相關配置,是否繼續?', - SSLHelper: '注意:請勿將SSL證書用於非法網站 \n 如開啟後無法使用HTTPS存取,請檢查安全組是否正確放行443埠', - SSLConfig: '證書設定', + disableHTTPSHelper: '停用 HTTPS會刪除憑證相關設定,是否繼續?', + SSLHelper: '注意:請勿將SSL憑證用於非法網站 \n 如開啟後無法使用HTTPS存取,請檢查安全組是否正確放行443埠', + SSLConfig: '憑證設定', SSLProConfig: 'SSL 協議設定', supportProtocol: '支援的協議版本', encryptionAlgorithm: '加密演算法', notSecurity: '(不安全)', encryptHelper: - "Let's Encrypt 簽發證書有頻率限制,但足以滿足正常需求,過於頻繁操作會導致簽發失敗。具體限制請看 官方文件 ", + "Let's Encrypt 簽發憑證有頻率限制,但足以滿足正常需求,過於頻繁操作會導致簽發失敗。詳細限制請看 官方文件 ", ipValue: '值', ext: '檔案副檔名', wafInputHelper: '按行輸入資料,一行一個', @@ -2461,7 +2461,7 @@ const message = { tcp: 'TCP/IP 網路', phpFPM: 'FPM 設定檔', phpConfig: 'PHP 設定檔', - updateConfig: '配置修改', + updateConfig: '設定修改', isOn: '開啟', isOff: '關閉', rewrite: '偽靜態', @@ -2528,7 +2528,7 @@ const message = { pasteSSL: '貼上程式碼', localSSL: '選擇伺服器檔案', privateKeyPath: '私鑰檔案', - certificatePath: '證書檔案', + certificatePath: '憑證檔案', ipWhiteListHelper: 'IP白名單的作用:所有規則對IP白名單無效', redirect: '重定向', sourceDomain: '源域名/路徑', @@ -2551,7 +2551,7 @@ const message = { keyType: '金鑰演算法', tencentCloud: '騰訊雲', containWarn: '其他域名中包含主域名,請重新輸入', - rewriteHelper2: '從應用程式商店安裝的 WordPress 等應用,預設已經配置好偽靜態,重複配置可能會報錯', + rewriteHelper2: '從應用程式商店安裝的 WordPress 等應用,預設已經設定好偽靜態,重複設定可能會報錯', websiteBackupWarn: '僅支援匯入本機備份,匯入其他機器備份可能會復原失敗', ipWebsiteWarn: 'IP 為網域名稱的網站,需要設定為預設網站才能正常存取', hstsHelper: '開啟 HSTS 可以增加網站安全性', @@ -2566,7 +2566,7 @@ const message = { sslExpireDate: '憑證過期時間', website404Helper: '網站 404 錯誤頁僅支援 PHP 執行環境網站和靜態網站', sni: '回源 SNI', - sniHelper: '反代後端為 https 的時候可能需要設定回源 SNI,具體需要看 CDN 服務商檔案', + sniHelper: '反代後端為 https 的時候可能需要設定回源 SNI,詳細需要看 CDN 服務商檔案', huaweicloud: '華為雲', createDb: '建立資料庫', enableSSLHelper: '開啟失敗不會影響網站建立', @@ -2574,7 +2574,7 @@ const message = { batchInput: '批次輸入', domainNotFQDN: '此域名可能無法在公網存取', domainInvalid: '網域格式不正確', - domainBatchHelper: '一行一個域名,格式:域名:端口@ssl\n範例:example.com:443@ssl 或 example.com', + domainBatchHelper: '一行一個域名,格式:域名:埠@ssl\n範例:example.com:443@ssl 或 example.com', generateDomain: '生成', global: '全域', subsite: '子網站', @@ -2591,7 +2591,7 @@ const message = { leastTime: '最少時間', leastTimeHelper: '將請求發送到目前活動連接時間最短的伺服器。', defaultHelper: - '預設方法,請求被均勻分配到每個伺服器。如果伺服器有權重配置,則根據指定的權重分配請求,權重越高的伺服器接收更多請求。', + '預設方法,請求被均勻分配到每個伺服器。如果伺服器有權重設定,則根據指定的權重分配請求,權重越高的伺服器接收更多請求。', weight: '權重', maxFails: '最大失敗次數', maxConns: '最大連接數', @@ -2599,9 +2599,9 @@ const message = { strategyDown: '停用', strategyBackup: '備用', ipHashBackupErr: 'IP 雜湊不支援備用節點', - failTimeout: '故障超時', + failTimeout: '故障逾時', failTimeoutHelper: - '服務器健康檢查的時間窗口長度。在該時間段內累計失敗次數達到閾值時,服務器將被暫時移除,並在經過相同時長後重新嘗試。預設 10 秒', + '伺服器健康檢查的時間視窗長度。在該時間段內累計失敗次數達到閾值時,伺服器將被暫時移除,並在經過相同時長後重新嘗試。預設 10 秒', staticChangePHPHelper: '目前為靜態網站,可切換為 PHP 網站', proxyCache: '反向代理快取', @@ -2614,7 +2614,7 @@ const message = { realIP: '真實 IP', ipFrom: 'IP 來源', ipFromHelper: - '透過配置可信 IP 來源,OpenResty 會分析 HTTP Header 中的 IP 資訊,準確識別並記錄訪客的真實 IP 位址,包括在存取日誌中', + '透過設定可信 IP 來源,OpenResty 會分析 HTTP Header 中的 IP 資訊,準確識別並記錄訪客的真實 IP 位址,包括在存取日誌中', ipFromExample1: '如果前端是 Frp 等工具,可以填寫 Frp 的 IP 位址,類似 127.0.0.1', ipFromExample2: '如果前端是 CDN,可以填寫 CDN 的 IP 位址段', ipFromExample3: '如果不確定,可以填 0.0.0.0/0(ipv4) ::/0(ipv6) [注意:允許任意來源 IP 不安全]', @@ -2625,7 +2625,7 @@ const message = { allowOrigins: '允許存取的網域名稱', allowMethods: '允許的請求方法', allowHeaders: '允許的請求標頭', - allowCredentials: '允許攜帶cookies', + allowCredentials: '允許攜帶Cookie', preflight: '預檢請求快速回應', preflightHleper: '開啟後,當瀏覽器發送跨域預檢請求(OPTIONS 請求)時,系統會自動返回 204 狀態碼並設定必要的跨域回應標頭', @@ -2633,7 +2633,7 @@ const message = { changeDatabase: '切換資料庫', changeDatabaseHelper1: '資料庫關聯用於備份復原網站。', changeDatabaseHelper2: '切換其他資料庫會導致以前的備份無法復原。', - saveCustom: '另存為模版', + saveCustom: '另存為範本', rainyun: '雨雲', volcengine: 'Volcengine', runtimePortHelper: '目前執行環境存在多個埠,請選擇一個代理埠。', @@ -2656,17 +2656,17 @@ const message = { toWebsiteDir: '進入網站目錄', execParameters: '執行參數', extCommand: '補充指令', - mirror: '鏡像源', + mirror: '映像源', execUser: '執行使用者', execDir: '執行目錄', - packagist: '中國全量鏡像', + packagist: '中國全量映像', batchOperate: '批次操作', batchOperateHelper: '批次{0}網站,是否繼續?', stream: 'TCP/UDP 代理', - streamPorts: '監聽端口', + streamPorts: '監聽埠', streamPortsHelper: '設定對外監聽的埠號,客戶端將透過此埠存取服務,按逗號分割,例:5222,5223', - streamHelper: 'TCP/UDP 端口轉發與負載均衡', + streamHelper: 'TCP/UDP 埠轉發與負載均衡', udp: '啟用 UDP', syncHtmlHelper: '同步到 PHP 和靜態網站', @@ -2680,7 +2680,7 @@ const message = { file_uploads: '是否允許上傳檔案', upload_max_filesize: '允許上傳檔案的最大尺寸', max_file_uploads: '允許同時上傳檔案的最大數量', - default_socket_timeout: 'Socket超時時間', + default_socket_timeout: 'Socket 逾時時間', error_reporting: '錯誤級別', display_errors: '是否輸出詳細錯誤資訊', cgi_fix_pathinfo: '是否開啟pathinfo', @@ -2693,15 +2693,15 @@ const message = { extension: '擴充', extensionHelper: '多個擴充功能,分割', toExtensionsList: '檢視擴充清單', - containerConfig: '容器配置', - containerConfigHelper: '環境變數等資訊可以在建立完成之後在配置-容器配置中修改', + containerConfig: '容器設定', + containerConfigHelper: '環境變數等資訊可以在建立完成之後在設定-容器設定中修改', dateTimezoneHelper: '範例:TZ=Asia/Shanghai(請根據需要自行新增)', }, nginx: { serverNamesHashBucketSizeHelper: '伺服器名字的hash表大小', - clientHeaderBufferSizeHelper: '用戶端請求的頭buffer大小', + clientHeaderBufferSizeHelper: '用戶端請求的Header Buffer 大小', clientMaxBodySizeHelper: '最大上傳檔案', - keepaliveTimeoutHelper: '連接超時時間', + keepaliveTimeoutHelper: '連接逾時時間', gzipMinLengthHelper: '最小壓縮檔案', gzipCompLevelHelper: '壓縮率', gzipHelper: '是否開啟壓縮傳輸', @@ -2713,7 +2713,7 @@ const message = { writing: '響應數(Writing)', waiting: '駐留行程(Waiting)', status: '當前狀態', - configResource: '配置修改', + configResource: '設定修改', saveAndReload: '儲存並重載', clearProxyCache: '清除反代快取', clearProxyCacheWarn: '此操作將刪除快取目錄下的所有檔案,是否繼續?', @@ -2729,14 +2729,14 @@ const message = { paramsHelper: '例:--add-module=/tmp/ngx_brotli', packagesHelper: '例:git,curl 以逗號分割', scriptHelper: '編譯之前執行的腳本,通常用於下載模組原始碼,安裝依賴等', - buildHelper: '新增/修改模組後點擊構建,構建成功後會自動重啟 OpenResty', + buildHelper: '新增/修改模組後點選構建,構建成功後會自動重新啟動 OpenResty', defaultHttps: 'HTTPS 防竄站', defaultHttpsHelper1: '開啟後可以解決 HTTPS 竄站問題', sslRejectHandshake: '拒絕預設 SSL 握手', - sslRejectHandshakeHelper: '開啟之後可以避免證書洩露,設置預設網站會讓此設置失效', + sslRejectHandshakeHelper: '開啟之後可以避免憑證洩露,設置預設網站會讓此設置失效', }, ssl: { - create: '申請證書', + create: '申請憑證', provider: '類型', manualCreate: '手動建立', acmeAccount: 'Acme 帳號', @@ -2745,25 +2745,25 @@ const message = { value: '記錄值', dnsResolveHelper: '請到DNS解析服務商處新增以下解析記錄:', detail: '詳情', - msg: '證書資訊', - ssl: '證書', + msg: '憑證資訊', + ssl: '憑證', key: '私鑰', startDate: '生效時間', organization: '簽發機構', - renewConfirm: '是否確定給網域名稱 {0} 申請證書? ', + renewConfirm: '是否確定給網域名稱 {0} 申請憑證? ', autoRenew: '自動續簽', autoRenewHelper: '距離到期時間30天自動續約', renewSuccess: '續簽成功', - renewWebsite: '該證書已經和以下網站關聯,申請會同步應用到這些網站', + renewWebsite: '該憑證已經和以下網站關聯,申請會同步應用到這些網站', createAcme: '建立帳戶', - acmeHelper: 'Acme 帳戶用於申請免費證書', - upload: '上傳證書', + acmeHelper: 'Acme 帳戶用於申請免費憑證', + upload: '上傳憑證', applyType: '申請方式', apply: '申請', - applyStart: '證書申請開始', + applyStart: '憑證申請開始', getDnsResolve: '正在取得 DNS 解析值,請稍後 ...', - selfSigned: '自簽證書', - ca: '證書頒發機構', + selfSigned: '自簽憑證', + ca: '憑證頒發機構', commonName: '憑證主體名稱(CN)', caName: '機構名稱', company: '公司/組織', @@ -2772,7 +2772,7 @@ const message = { province: '省份', country: '國家代號', commonNameHelper: '例如:', - selfSign: '簽發證書', + selfSign: '簽發憑證', days: '有效期限', domainHelper: '一行一個網域名稱,支援*和IP位址', pushDir: '推送憑證到本機目錄', @@ -2781,24 +2781,24 @@ const message = { organizationDetail: '機構詳情', fromWebsite: '從網站取得', dnsMauanlHelper: '手動解析模式需要在建立完之後點選申請按鈕取得 DNS 解析值', - httpHelper: '使用 HTTP 模式需安裝 OpenResty,且不支援申請泛域名證書。', + httpHelper: '使用 HTTP 模式需安裝 OpenResty,且不支援申請泛域名憑證。', buypassHelper: 'Buypass 大陸地區無法存取', googleHelper: '如何取得EAB HmacKey 和EAB kid', googleCloudHelper: 'Google Cloud API 大陸大部分地區無法存取', skipDNSCheck: '跳過 DNS 校驗', - skipDNSCheckHelper: '如果出現申請超時問題,請勾選此處,其他情況請勿勾選', + skipDNSCheckHelper: '如果出現申請逾時問題,請勾選此處,其他情況請勿勾選', cfHelper: '請勿使用 Global API Key', deprecated: '即將廢棄', deprecatedHelper: '已經停止維護,可能會在以後的某個版本廢棄,請使用騰訊雲方式解析', disableCNAME: '停用 CNAME', - disableCNAMEHelper: '有 CNAME 配置的域名,如果申請失敗,可以勾選此處', + disableCNAMEHelper: '有 CNAME 設定的域名,如果申請失敗,可以勾選此處', nameserver: 'DNS 伺服器', nameserverHelper: '使用自訂的 DNS 伺服器來校驗網域名稱', - edit: '編輯證書', + edit: '編輯憑證', execShell: '申請憑證之後執行腳本', shell: '腳本內容', shellHelper: - '腳本預設執行目錄為 1Panel 安裝目錄,如果有推送證書,那麼執行目錄為證書推送目錄。預設超時時間 30 分鐘', + '腳本預設執行目錄為 1Panel 安裝目錄,如果有推送憑證,那麼執行目錄為憑證推送目錄。預設逾時時間 30 分鐘', customAcme: '自訂 ACME 服務', customAcmeURL: 'ACME 服務 URL', baiduCloud: '百度雲', @@ -2822,15 +2822,15 @@ const message = { postCheck: 'POST 參數校驗', cookieBlockList: 'Cookie 黑名單', - dockerHelper: '目前防火牆無法停用容器端口映射,已安裝應用可前往【已安裝】頁面編輯應用參數,設定端口放行規則。', + dockerHelper: '目前防火牆無法停用容器埠映射,已安裝應用可前往【已安裝】頁面編輯應用參數,設定埠放行規則。', iptablesHelper: '偵測到系統正在使用 {0} 防火牆,如需切換至 iptables,請先手動解除安裝', quickJump: '快速跳轉', used: '已使用', unUsed: '未使用', - dockerRestart: '防火牆操作需要重啟 Docker 服務', + dockerRestart: '防火牆操作需要重新啟動 Docker 服務', firewallHelper: '{0}系統防火牆', firewallNotStart: '尚未啟用系統防火牆,請先啟用', - restartFirewallHelper: '該操作將對目前防火牆進行重啟操作,是否繼續?', + restartFirewallHelper: '該操作將對目前防火牆進行重新啟動操作,是否繼續?', stopFirewallHelper: '系統防火牆關閉後,伺服器將失去安全防護,是否繼續?', startFirewallHelper: '系統防火牆開啟後,可以更好的防護伺服器安全,是否繼續?', noPing: '禁 ping', @@ -2872,7 +2872,7 @@ const message = { targetPort: '目標埠', forwardHelper1: '如果是本機埠轉發,目標 IP 為:127.0.0.1', forwardHelper2: '如果目標 IP 不填寫,預設為本機埠轉發', - forwardPortHelper: '支援端口範圍,如:8080-8089', + forwardPortHelper: '支援埠範圍,如:8080-8089', forwardInboundInterface: '轉發入站網路介面', exportHelper: '即將匯出 {0} 條防火牆規則,是否繼續?', importSuccess: '成功匯入 {0} 條規則', @@ -2881,7 +2881,7 @@ const message = { ipv4Limit: '目前操作暫僅支援 IPv4 地址', basicStatus: '目前未綁定鏈 {0} ,請先綁定', baseIptables: 'iptables 服務', - forwardIptables: 'iptables 端口轉發服務', + forwardIptables: 'iptables 埠轉發服務', advanceIptables: 'iptables 進階設定服務', initMsg: '即將初始化 {0}, 是否繼續?', initHelper: '偵測到 {0} 未初始化,請點選頂部狀態列的初始化按鈕進行設定', @@ -2897,13 +2897,13 @@ const message = { destIP: '目標 IP', inboundDirection: '入站方向', outboundDirection: '出站方向', - destPort: '目標端口', + destPort: '目標埠', action: '動作', reject: '拒絕', sourceIPHelper: 'CIDR 格式,如 192.168.1.0/24,留空表示所有地址', destIPHelper: 'CIDR 格式,如 10.0.0.0/8,留空表示所有地址', - portHelper: '0 表示任意端口', - allPorts: '所有端口', + portHelper: '0 表示任意埠', + allPorts: '所有埠', deleteRuleConfirm: '將刪除 {0} 條規則,是否繼續?', }, runtime: { @@ -2924,8 +2924,8 @@ const message = { netease: '網易', aliyun: '阿里雲', tsinghua: '清華大學', - xtomhk: 'XTOM 鏡像站(香港)', - xtom: 'XTOM 鏡像站(全球)', + xtomhk: 'XTOM 映像站(香港)', + xtom: 'XTOM 映像站(全球)', phpsourceHelper: '根據你的網路環境選擇合適的源', appPort: '應用埠', externalPort: '外部映射埠', @@ -2939,7 +2939,7 @@ const message = { operatorHelper: '將對選取的執行環境進行 {0} 操作,是否繼續? ', taobao: '淘寶', tencent: '騰訊', - imageSource: '鏡像源', + imageSource: '映像源', moduleManager: '模組管理', module: '模組', nodeOperatorHelper: '是否{0} {1} 模組? 操作可能導致運轉環境異常,請確認後操作', @@ -2956,7 +2956,7 @@ const message = { loadedExtension: '已載入擴充功能', popularExtension: '常用擴充', uninstallExtension: '是否確認移除擴充功能 {0}', - phpConfigHelper: '修改配置需要重新啟動執行環境,是否繼續', + phpConfigHelper: '修改設定需要重新啟動執行環境,是否繼續', operateMode: '執行模式', dynamic: '動態', static: '靜態', @@ -3008,7 +3008,7 @@ const message = { laddr: '本機地址/埠', raddr: '遠端地址/埠', stopProcess: '結束', - viewDetails: '查看詳情', + viewDetails: '檢視詳情', stopProcessWarn: '是否確定結束此行程 (PID:{0})?', kill: '結束行程', killNow: '立即結束', @@ -3018,11 +3018,11 @@ const message = { tool: { supervisor: { loadStatusErr: '取得行程狀態失敗,請檢查 supervisor 服務狀態', - notSupport: '未檢測到 Supervisor 服務,請前往腳本庫頁面手動安裝', + notSupport: '未偵測到 Supervisor 服務,請前往腳本庫頁面手動安裝', list: '守護行程', - config: 'Supervisor 配置', - primaryConfig: '主配置檔案位置', - notSupportCtl: '未檢測到 supervisorctl,請前往腳本庫頁面手動安裝', + config: 'Supervisor 設定', + primaryConfig: '主設定檔案位置', + notSupportCtl: '未偵測到 supervisorctl,請前往腳本庫頁面手動安裝', user: '啟動使用者', command: '啟動指令', dir: '執行目錄', @@ -3033,9 +3033,9 @@ const message = { uptime: '執行時長', notStartWarn: 'Supervisor 未啟動,請先啟動', serviceName: '服務名稱', - initHelper: '偵測到 Supervisor 服務尚未初始化,請點擊上方狀態列的初始化按鈕進行設定。', + initHelper: '偵測到 Supervisor 服務尚未初始化,請點選上方狀態列的初始化按鈕進行設定。', serviceNameHelper: 'systemctl 管理的 Supervisor 服務名稱,一般為 supervisor 或 supervisord', - restartHelper: '初始化會重啟服務,導致原有的守護行程全部關閉', + restartHelper: '初始化會重新啟動服務,導致原有的守護行程全部關閉', RUNNING: '執行中', STOPPED: '已停止', STOPPING: '停止中', @@ -3045,9 +3045,9 @@ const message = { ERROR: '錯誤', statusCode: '狀態碼', manage: '管理', - autoRestart: '自動重啟', + autoRestart: '自動重新啟動', EXITED: '已退出', - autoRestartHelper: '程式異常退出後是否自動重啟', + autoRestartHelper: '程式異常退出後是否自動重新啟動', autoStart: '自動啟動', autoStartHelper: 'Supervisor 啟動後是否自動啟動服務', }, @@ -3189,7 +3189,7 @@ const message = { captcha: '人機驗證', fiveSeconds: '5 秒驗證', location: '地區', - redisConfig: 'Redis 配置', + redisConfig: 'Redis 設定', redisHelper: '開啟 Redis 可以將暫時封鎖的 IP 持久化', wafHelper: '關閉之後所有網站將失去防護', attackIP: '攻擊 IP', @@ -3206,13 +3206,13 @@ const message = { saveToWebsite: '應用在網站', saveToWebsiteHelper: '是否將目前設定套用到所有網站? ', websiteHelper: '此處為建立網站的預設設定,修改之後需要應用到網站才能生效', - websiteHelper2: '此處為建立網站的預設設定,具體配置請在網站處修改', + websiteHelper2: '此處為建立網站的預設設定,詳細設定請在網站處修改', ipGroup: 'IP 組', ipGroupHelper: '一行一個 IP 或 IP 段,支援 IPv4 和 IPv6, 例:192.168.1.1 或 192.168.1.0/24', ipBlack: 'IP 黑名單', openRestyAlert: 'OpenResty 版本需要高於 {0}', initAlert: '首次使用需要初始化,會修改網站設定檔案,原有的 WAF 設定會遺失,請一定提前備份 OpenResty', - initHelper: '初始化操作將清除現有的 WAF 配置,您確定要進行初始化嗎? ', + initHelper: '初始化操作將清除現有的 WAF 設定,您確定要進行初始化嗎? ', mainSwitch: '總開關', websiteAlert: '請先建立網站', defaultUrlBlack: 'URL 規則', @@ -3251,7 +3251,7 @@ const message = { cdnHelper: '使用 CDN 的網站可以開啟此處來取得正確來源 IP', clearLogWarn: '清空日誌將無法復原,是否繼續?', commonRuleHelper: '規則為模糊匹配', - blockIPHelper: '封鎖 IP 暫時儲存在 OpenResty 中,重啟 OpenResty 會解封,可以透過封鎖功能永久封鎖', + blockIPHelper: '封鎖 IP 暫時儲存在 OpenResty 中,重新啟動 OpenResty 會解封,可以透過封鎖功能永久封鎖', addWhiteUrlHelper: '是否把 URL {0} 加到白名單?', dashHelper: '社群版也可使用全域設定和網站設定中的功能', wafStatusHelper: 'WAF 未開啟,請在全域設定中開啟', @@ -3318,7 +3318,7 @@ const message = { remoteURLHelper: '遠端 URL 需要保證每行一個 IP 並且沒有其他字元', notFound: 'Not Found (404)', serviceUnavailable: '服務不可用 (503)', - gatewayTimeout: '閘道器超時 (504)', + gatewayTimeout: '閘道器逾時 (504)', belongToIpGroup: '屬於 IP 組', notBelongToIpGroup: '不屬於 IP 組', unknownWebsiteKey: '未知域名', @@ -3421,15 +3421,15 @@ const message = { }, tamper: { tamper: '網站防篡改', - ignoreTemplate: '排除模版', - protectTemplate: '保護模版', + ignoreTemplate: '排除範本', + protectTemplate: '保護範本', ignoreTemplateHelper: - '請輸入排除內容,Enter或空格分隔。(具體目錄 ./log 或目錄名 tmp,排除檔案需要輸入具體檔案 ./data/test.html)', + '請輸入排除內容,Enter或空格分隔。(詳細目錄 ./log 或目錄名 tmp,排除檔案需要輸入詳細檔案 ./data/test.html)', protectTemplateHelper: - '請輸入保護內容,Enter或空格分隔。(具體檔案 ./index.html、檔案後綴 .html、檔案類型 js,保護目錄需要輸入具體目錄 ./log)', - templateContent: '模版內容', - template: '模版', - saveTemplate: '儲存為模版', + '請輸入保護內容,Enter或空格分隔。(詳細檔案 ./index.html、檔案後綴 .html、檔案類型 js,保護目錄需要輸入詳細目錄 ./log)', + templateContent: '範本內容', + template: '範本', + saveTemplate: '儲存為範本', tamperHelper1: '一鍵部署類型的網站,建議啟用應用目錄防篡改功能;如出現網站無法正常使用或備份、復原失敗的情況,請先關閉防篡改功能;', tamperHelper2: '將限制非排除目錄下受保護檔案的讀寫、刪除、權限和所有者修改操作', @@ -3441,13 +3441,13 @@ const message = { templateRule: '長度1-512,名稱不能含有{0}等符號', ignore: '排除', ignoreHelper: - '請選擇或輸入排除內容,Enter或空格分隔。(具體目錄 ./log 或目錄名 tmp,排除檔案需要輸入或選擇具體檔案 ./data/test.html)', + '請選擇或輸入排除內容,Enter或空格分隔。(詳細目錄 ./log 或目錄名 tmp,排除檔案需要輸入或選擇詳細檔案 ./data/test.html)', protect: '保護', protectHelper: - '請選擇或輸入保護內容,Enter或空格分隔。(具體檔案 ./index.html、檔案後綴 .html、檔案類型 js,保護目錄需要輸入或選擇具體目錄 ./log)', + '請選擇或輸入保護內容,Enter或空格分隔。(詳細檔案 ./index.html、檔案後綴 .html、檔案類型 js,保護目錄需要輸入或選擇詳細目錄 ./log)', tamperHelper00: '排除和保護僅支援輸入相對路徑;', tamperHelper01: '開啟防篡改後,系統將限制非排除目錄下保護檔案的建立、編輯和刪除操作等操作;', - tamperHelper02: '優先度:具體路徑保護 > 具體路徑排除 > 保護 > 排除', + tamperHelper02: '優先度:詳細路徑保護 > 詳細路徑排除 > 保護 > 排除', tamperHelper03: '監聽操作只針對於非排除目錄,監聽該目錄下非保護檔案的建立操作。', disableHelper: '即將關閉下列網站的防篡改功能,是否繼續?', appendOnly: '僅追加', @@ -3498,9 +3498,9 @@ const message = { wafContent4: '根據自訂的規則攔截請求', tamperTitle1: '檔案完整性監控', - tamperContent1: '監控網站檔案的完整性,包括核心檔案、腳本檔案和配置檔案等。', - tamperTitle2: '即時掃描和檢測', - tamperContent2: '透過即時掃描網站檔案系統,檢測是否存在異常或被篡改的檔案。', + tamperContent1: '監控網站檔案的完整性,包括核心檔案、腳本檔案和設定檔案等。', + tamperTitle2: '即時掃描和偵測', + tamperContent2: '透過即時掃描網站檔案系統,偵測是否存在異常或被篡改的檔案。', tamperTitle3: '安全權限設定', tamperContent3: '透過合理的權限設定和瀏覽控制策略,網站防篡改功能可以限制對網站檔案的瀏覽權限,減少潛在的攻擊面。', @@ -3525,12 +3525,12 @@ const message = { alertTitle1: '簡訊告警', alertContent1: - '當伺服器資源使用異常、網站及證書過期、新版本更新、密碼過期等情況發生時,透過簡訊告警通知使用者,確保及時處理。', + '當伺服器資源使用異常、網站及憑證過期、新版本更新、密碼過期等情況發生時,透過簡訊告警通知使用者,確保及時處理。', alertTitle2: '告警日誌', - alertContent2: '為使用者提供查看告警日誌的功能,方便追跡和分析歷史告警事件。', + alertContent2: '為使用者提供檢視告警日誌的功能,方便追跡和分析歷史告警事件。', alertTitle3: '告警設定', alertContent3: - '為使用者提供自訂手機號碼、每日推送次數、每日推送時間的配寘,方便使用者的設定來更加合理的進行推送告警。', + '為使用者提供自訂手機號碼、每日推送次數、每日推送時間的設定,方便使用者的設定來更加合理的進行推送告警。', nodeDashTitle1: '應用管理', nodeDashContent1: '統一管理多節點應用,支援狀態監控、快速起停、終端連線及備份', @@ -3565,12 +3565,12 @@ const message = { appTitle2: '全面服務資訊', appContent2: '在行動端進行應用、網站、Docker、資料庫等基礎管理,支援快速建立應用與網站。', appTitle3: '即時異常監控', - appContent3: '行動端即時查看伺服器狀態、WAF 安全監控、網站存取統計與行程健康狀況。', + appContent3: '行動端即時檢視伺服器狀態、WAF 安全監控、網站存取統計與行程健康狀況。', clusterTitle1: '主從部署', clusterContent1: '支援在不同節點建立 MySQL/Postgres/Redis 主從實例,自動完成主從關聯與初始化', clusterTitle2: '主從管理', - clusterContent2: '統一頁面集中管理多個主從節點,查看其角色、執行狀態等資訊', + clusterContent2: '統一頁面集中管理多個主從節點,檢視其角色、執行狀態等資訊', clusterTitle3: '複製狀態', clusterContent3: '展示主從複製狀態與延遲資訊,輔助排查同步異常問題', }, @@ -3582,16 +3582,16 @@ const message = { backupCopies: '備份記錄保留份數', noBackupNode: '目前備份節點為空,請選擇備份節點儲存後重試', masterBackupAlert: - '目前未配置主節點備份,為保障資料安全,請盡快設定備份節點,便於主節點故障時可人工切換新主節點。', + '目前未設定主節點備份,為保障資料安全,請盡快設定備份節點,便於主節點故障時可人工切換新主節點。', node: '節點', addr: '地址', nodeUpgrade: '更新設定', nodeUpgradeHelper: '選中的節點將在主節點升級完成後自動開始升級,無需手動操作。', nodeUnhealthy: '節點狀態異常', deletedNode: '已刪除節點 {0} 暫不支援升級操作', - nodeUnhealthyHelper: '檢測到該節點狀態異常,請在 [節點管理] 中檢查後重試', + nodeUnhealthyHelper: '偵測到該節點狀態異常,請在 [節點管理] 中檢查後重試', nodeUnbind: '節點未綁定許可證', - nodeUnbindHelper: '檢測到該節點未綁定許可證,請在 [面板設定 - 許可證] 選單中綁定後重試', + nodeUnbindHelper: '偵測到該節點未綁定許可證,請在 [面板設定 - 許可證] 選單中綁定後重試', memTotal: '記憶體總計', nodeManagement: '多機管理', nodeItem: '節點管理', @@ -3612,11 +3612,11 @@ const message = { syncBackupAccount: '備份帳號設定', syncWithMaster: '升級為專業版後,將預設同步所有資料,可在節點管理中手動調整同步策略。', syncProxy: '系統代理設定', - syncProxyHelper: '同步系統代理設定需要重啟 Docker', - syncProxyHelper1: '重啟 Docker 可能會影響目前正在執行的容器服務。', - syncProxyHelper2: '可前往 容器 - 設定 頁面手動重啟。', - syncProxyHelper3: '同步系統代理設定需要重啟 Docker,重啟可能會影響目前正在執行的容器服務', - syncProxyHelper4: '同步系統代理設定需要重啟 Docker,可稍後前往 容器 - 設定 頁面手動重啟。', + syncProxyHelper: '同步系統代理設定需要重新啟動 Docker', + syncProxyHelper1: '重新啟動 Docker 可能會影響目前正在執行的容器服務。', + syncProxyHelper2: '可前往 容器 - 設定 頁面手動重新啟動。', + syncProxyHelper3: '同步系統代理設定需要重新啟動 Docker,重新啟動可能會影響目前正在執行的容器服務', + syncProxyHelper4: '同步系統代理設定需要重新啟動 Docker,可稍後前往 容器 - 設定 頁面手動重新啟動。', syncCustomApp: '同步自訂應用倉庫', syncAlertSetting: '系統告警設定', syncNodeInfo: '節點基礎資料,', @@ -3627,15 +3627,15 @@ const message = { nodeCheck: '可用性檢查', checkSSH: '檢查節點 SSH 連接', checkUserPermission: '檢查節點使用者權限', - isNotRoot: '檢測到該節點不支援免密 sudo,且目前為非 root 使用者', + isNotRoot: '偵測到該節點不支援免密 sudo,且目前為非 root 使用者', checkLicense: '檢查節點許可證狀態', checkService: '檢查節點已存在服務資訊', checkPort: '檢查節點埠可達', panelExist: '檢查到該節點正在執行 1Panel V1 服務,請先透過遷移腳本升級至 V2 後再進行新增。', coreExist: - '目前節點已作為主節點啟用,無法直接作為從節點新增。請先將其降級為從節點後再新增,具體可參考檔案。', + '目前節點已作為主節點啟用,無法直接作為從節點新增。請先將其降級為從節點後再新增,詳細可參考檔案。', agentExist: '檢查到該節點已安裝 1panel-agent,繼續新增將保留現有資料,僅取代 1panel-agent 服務。', - agentNotExist: '檢測到該節點未安裝 1panel-agent,無法直接編輯該節點資訊,請先刪除後重新新增。', + agentNotExist: '偵測到該節點未安裝 1panel-agent,無法直接編輯該節點資訊,請先刪除後重新新增。', oldDataExist: '檢查到該節點存在 1Panel V2 歷史資料,將使用以下資訊覆蓋目前設定', errLicense: '檢查到該節點綁定的許可證不可用,請檢查後重試', errNodePort: '檢查到節點埠 [ {0} ] 無法存取,請檢查防火牆或安全組是否已放行該埠。', @@ -3708,7 +3708,7 @@ const message = { alertRule: '告警規則', titleSearchHelper: '請輸入告警標題,支援模糊搜尋', taskType: '告警類型', - ssl: '網站證書到期', + ssl: '網站憑證到期', siteEndTime: '網站到期', panelPwdEndTime: '面板密碼到期', panelUpdate: '面板新版本提醒', @@ -3717,7 +3717,7 @@ const message = { load: '面板伺服器負載佔用過高告警', disk: '面板伺服器磁碟佔用過高告警', website: '網站', - certificate: '證書', + certificate: '憑證', remainingDays: '剩餘天數', sendCount: '告警次數', sms: '簡訊通知', @@ -3730,9 +3730,9 @@ const message = { panelUpdateRulesHelper: '新版本發送告警總數(每日僅發送一次)', oneDaySendCountRulesHelper: '每日發送告警的總數', siteEndTimeRulesHelper: '永不過期的網站,不觸發告警', - autoRenewRulesHelper: '證書開啟自動續期,剩餘天數小於31天,不觸發告警', + autoRenewRulesHelper: '憑證開啟自動續期,剩餘天數小於31天,不觸發告警', panelPwdEndTimeRulesHelper: '面板未設定密碼到期時長,不能使用密碼到期告警', - sslRulesHelper: '所有ssl證書', + sslRulesHelper: '所有ssl憑證', diskInfo: '磁碟資訊', monitoringType: '監測類型', autoRenew: '自動續簽', @@ -3754,8 +3754,8 @@ const message = { deleteTitle: '刪除告警', deleteMsg: '是否確認刪除告警任務?', - allSslTitle: '所有網站證書到期告警', - sslTitle: '網站「{0}」證書到期告警', + allSslTitle: '所有網站憑證到期告警', + sslTitle: '網站「{0}」憑證到期告警', allSiteEndTimeTitle: '所有網站到期告警', siteEndTimeTitle: '網站「{0}」到期告警', panelPwdEndTimeTitle: '面板密碼到期告警', @@ -3767,7 +3767,7 @@ const message = { allDiskTitle: '磁碟佔用過高告警', timeRule: '剩餘時間小於{0}天(如未處理,次日會重新發送)', - panelUpdateRule: '檢測到面板有新版本時發送一次(如未處理,次日會重新發送)', + panelUpdateRule: '偵測到面板有新版本時發送一次(如未處理,次日會重新發送)', avgRule: '{0}分鐘內平均{1}佔用超過{2}%觸發,每天發送{3}次', diskRule: '掛載目錄「{0}」的磁碟佔用超過{1}{2}觸發,每天發送{3}次', allDiskRule: '磁碟佔用超過{0}{1}觸發,每天發送{2}次', @@ -3801,8 +3801,8 @@ const message = { log: '備份日誌', snapshot: '系統快照', clamsRulesHelper: '需要開啟告警的病毒掃描任務', - cronJobRulesHelper: '需要配寘此類型的計劃任務', - clamsTitle: '病毒掃描「{0}」任務檢測到感染檔案告警', + cronJobRulesHelper: '需要設定此類型的計劃任務', + clamsTitle: '病毒掃描「{0}」任務偵測到感染檔案告警', cronJobAppTitle: '計劃任務-備份應用「{0}」任務失敗告警', cronJobWebsiteTitle: '計劃任務-備份網站「{0}」任務失敗告警', cronJobDatabaseTitle: '計劃任務-備份資料庫「{0}」任務失敗告警', @@ -3814,7 +3814,7 @@ const message = { cronJobCutWebsiteLogTitle: '計劃任務-切割網站日誌「 {0} 」任務失敗告警', cronJobCleanTitle: '計劃任務-快取清理「 {0} 」任務失敗告警', cronJobNtpTitle: '計劃任務-同步伺服器時間「 {0} 」任務失敗告警', - clamsRule: '病毒掃描任務檢測到感染檔案告警,每天發送{0}次', + clamsRule: '病毒掃描任務偵測到感染檔案告警,每天發送{0}次', cronJobAppRule: '備份應用任務失敗告警,每天發送{0}次', cronJobWebsiteRule: '備份網站任務失敗告警,每天發送{0}次', cronJobDatabaseRule: '備份資料庫任務失敗告警,每天發送{0}次', @@ -3890,11 +3890,11 @@ const message = { panelLoginRule: '面板登入告警,每天發送 {0} 次', sshLoginRule: 'SSH 登入告警,每天發送 {0} 次', userNameHelper: '使用者名稱為空時,將預設使用寄件者地址', - alertConfigHelper: '配置告警通知通道,用於接收面板訊息推送', - weComConfigHelper: '企業微信告警通知配置', - wechatConfigHelper: '微信公眾號告警通知配置', - dingTalkConfigHelper: '釘釘告警通知配置', - feiShuConfigHelper: '飛書告警通知配置', + alertConfigHelper: '設定告警通知通道,用於接收面板訊息推送', + weComConfigHelper: '企業微信告警通知設定', + wechatConfigHelper: '微信公眾號告警通知設定', + dingTalkConfigHelper: '釘釘告警通知設定', + feiShuConfigHelper: '飛書告警通知設定', webhookName: '機器人名稱', webhookUrl: 'Webhook 位址', alertConfigProHelper: '專業版額外支援企業微信、釘釘、飛書及簡訊告警。',