diff --git a/agent/app/service/file.go b/agent/app/service/file.go index a4c1bd058921..bf2f82fd8554 100644 --- a/agent/app/service/file.go +++ b/agent/app/service/file.go @@ -439,13 +439,15 @@ func (f *FileService) Compress(c request.FileCompress) error { if err := preflightCompressTool(files.CompressType(c.Type)); err != nil { return err } - taskItem, err := task.NewTask(c.Name, task.TaskExec, task.TaskScopeTask, c.TaskID, 1) + taskName := i18n.GetMsgWithMap("FileTaskCompress", map[string]interface{}{"dst": strconv.Quote(filepath.Join(c.Dst, c.Name))}) + taskItem, err := task.NewTask(taskName, task.TaskExec, task.TaskScopeTask, c.TaskID, 1) if err != nil { return err } go func() { - taskItem.AddSubTask(c.Name, func(t *task.Task) error { - t.LogStart(c.Name) + taskItem.AddSubTask(taskName, func(t *task.Task) error { + logFileTaskSources(t, c.Files) + t.Log(i18n.GetMsgWithMap("FileTaskFormat", map[string]interface{}{"format": strconv.Quote(c.Type)})) compressType := files.CompressType(c.Type) dstFile := filepath.Join(c.Dst, c.Name) success := false @@ -516,13 +518,15 @@ func (f *FileService) DeCompress(c request.FileDeCompress) error { if err := preflightDecompressTool(files.CompressType(c.Type)); err != nil { return err } - taskItem, err := task.NewTask(c.Path, task.TaskExec, task.TaskScopeTask, c.TaskID, 1) + taskName := i18n.GetMsgWithMap("FileTaskDecompress", map[string]interface{}{"dst": strconv.Quote(c.Dst)}) + taskItem, err := task.NewTask(taskName, task.TaskExec, task.TaskScopeTask, c.TaskID, 1) if err != nil { return err } go func() { - taskItem.AddSubTask(c.Path, func(t *task.Task) error { - t.LogStart(c.Path) + taskItem.AddSubTask(taskName, func(t *task.Task) error { + logFileTaskSources(t, []string{c.Path}) + t.Log(i18n.GetMsgWithMap("FileTaskFormat", map[string]interface{}{"format": strconv.Quote(c.Type)})) dstExisted := fo.Stat(c.Dst) parentDir := filepath.Dir(c.Dst) if !fo.Stat(parentDir) { @@ -914,6 +918,12 @@ func (f *FileService) Wget(w request.FileWget) (string, error) { return key, fo.DownloadFileWithProcess(w.Url, filepath.Join(w.Path, w.Name), key, options) } +func logFileTaskSources(t *task.Task, sources []string) { + for _, source := range sources { + t.Log(i18n.GetMsgWithMap("FileTaskSource", map[string]interface{}{"path": strconv.Quote(source)})) + } +} + func (f *FileService) MvFile(m request.FileMove) error { fo := files.NewFileOp() if err := validateFileMove(fo, m); err != nil { @@ -925,15 +935,24 @@ func (f *FileService) MvFile(m request.FileMove) error { if !fileTransferLocks.Acquire(m.TaskID, getFileTransferPaths(m)) { return buserr.New("TaskIsExecuting") } - taskItem, err := task.NewTask(m.NewPath, task.TaskExec, task.TaskScopeTask, m.TaskID, 1) + nameKey := "FileTaskCopy" + if m.Type == "cut" { + nameKey = "FileTaskMove" + } + taskName := i18n.GetMsgWithMap(nameKey, map[string]interface{}{"dst": strconv.Quote(m.NewPath)}) + taskItem, err := task.NewTask(taskName, task.TaskExec, task.TaskScopeTask, m.TaskID, 1) if err != nil { fileTransferLocks.Release(m.TaskID) return err } go func() { defer fileTransferLocks.Release(m.TaskID) - taskItem.AddSubTaskWithOps(m.NewPath, func(t *task.Task) error { - t.LogStart(m.NewPath) + taskItem.AddSubTaskWithOps(taskName, func(t *task.Task) error { + logFileTaskSources(t, m.OldPaths) + logFileTaskSources(t, m.CoverPaths) + if m.Name != "" { + t.Log(i18n.GetMsgWithMap("FileTaskRename", map[string]interface{}{"name": strconv.Quote(m.Name)})) + } err := f.moveFileWithContext(t.TaskCtx, m) if err != nil && t.TaskCtx.Err() != nil { return t.TaskCtx.Err() diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index 0c73f9116a25..92c0733334df 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'Persist Docker port guard status' ErrFirewallRuleScopeChange: "The current firewall does not support changing a rule's scope (such as its IPv4/IPv6 address family). Please create a new rule." FirewallWhitelistReleased: "{{ .name }}: whitelist protection released; allow rule retained. To close the port, delete the rule manually from the rule list" FirewallWhitelistRequired: "{{ .name }}: protected by mandatory system port rules" +FileTaskCopy: 'Copy files to {{ .dst }}' +FileTaskMove: 'Move files to {{ .dst }}' +FileTaskCompress: 'Compress files to {{ .dst }}' +FileTaskDecompress: 'Extract files to {{ .dst }}' +FileTaskSource: 'Source path: {{ .path }}' +FileTaskFormat: 'Archive format: {{ .format }}' +FileTaskRename: 'Target filename: {{ .name }}' ErrFirewallBackendCleanupRequired: "The current backend {{ .current }} still contains 1Panel rules. Clean it up before switching to {{ .target }}." ErrDockerIPv4ForwardingDisabled: "IPv4 forwarding is disabled. Set net.ipv4.ip_forward=1 before using Docker's firewall backend." diff --git a/agent/i18n/lang/es-ES.yaml b/agent/i18n/lang/es-ES.yaml index 7283f97e27a4..f8688c58a857 100644 --- a/agent/i18n/lang/es-ES.yaml +++ b/agent/i18n/lang/es-ES.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'Guardar el estado de protección de puertos de ErrFirewallRuleScopeChange: "El cortafuegos actual no permite cambiar el ámbito de una regla (como su familia de direcciones IPv4/IPv6). Cree una regla nueva." FirewallWhitelistReleased: "{{ .name }}: protección de la lista de permitidos retirada; se conserva la regla de permiso. Para cerrar el puerto, elimine la regla manualmente de la lista" FirewallWhitelistRequired: "{{ .name }}: protegido por las reglas de puertos obligatorios del sistema" +FileTaskCopy: 'Copiar archivos a {{ .dst }}' +FileTaskMove: 'Mover archivos a {{ .dst }}' +FileTaskCompress: 'Comprimir archivos en {{ .dst }}' +FileTaskDecompress: 'Extraer archivos a {{ .dst }}' +FileTaskSource: 'Ruta de origen: {{ .path }}' +FileTaskFormat: 'Formato del archivo: {{ .format }}' +FileTaskRename: 'Nombre del archivo de destino: {{ .name }}' ErrFirewallBackendCleanupRequired: "El backend actual {{ .current }} aún contiene reglas de 1Panel. Elimínelas antes de cambiar a {{ .target }}." ErrDockerIPv4ForwardingDisabled: "El reenvío IPv4 está desactivado. Configure net.ipv4.ip_forward=1 antes de usar el backend de cortafuegos de Docker." diff --git a/agent/i18n/lang/fa.yaml b/agent/i18n/lang/fa.yaml index 5346371427d5..6283d72cf84a 100644 --- a/agent/i18n/lang/fa.yaml +++ b/agent/i18n/lang/fa.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'ذخیره وضعیت محافظت پورت Doc ErrFirewallRuleScopeChange: "فایروال فعلی از تغییر محدودهٔ قانون (مانند خانوادهٔ آدرس IPv4/IPv6) پشتیبانی نمی‌کند. لطفاً یک قانون جدید ایجاد کنید." FirewallWhitelistReleased: "{{ .name }}: حفاظت فهرست مجاز برداشته شد؛ قانون اجازه حفظ می‌شود. برای بستن پورت، قانون را به‌صورت دستی از فهرست قوانین حذف کنید" FirewallWhitelistRequired: "{{ .name }}: توسط قوانین پورت‌های ضروری سیستم محافظت می‌شود" +FileTaskCopy: 'کپی فایل‌ها به {{ .dst }}' +FileTaskMove: 'انتقال فایل‌ها به {{ .dst }}' +FileTaskCompress: 'فشرده‌سازی فایل‌ها در {{ .dst }}' +FileTaskDecompress: 'استخراج فایل‌ها در {{ .dst }}' +FileTaskSource: 'مسیر مبدأ: {{ .path }}' +FileTaskFormat: 'قالب بایگانی: {{ .format }}' +FileTaskRename: 'نام فایل مقصد: {{ .name }}' ErrFirewallBackendCleanupRequired: "بک‌اند فعلی {{ .current }} هنوز شامل قوانین 1Panel است. پیش از تغییر به {{ .target }} آن‌ها را پاک کنید." ErrDockerIPv4ForwardingDisabled: "ارسال IPv4 غیرفعال است. پیش از استفاده از بک‌اند فایروال Docker، مقدار net.ipv4.ip_forward=1 را تنظیم کنید." diff --git a/agent/i18n/lang/ja.yaml b/agent/i18n/lang/ja.yaml index badb08d986ec..c9c6929bc80a 100644 --- a/agent/i18n/lang/ja.yaml +++ b/agent/i18n/lang/ja.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'Docker ポート保護状態を保存' ErrFirewallRuleScopeChange: "現在のファイアウォールでは、ルールの適用範囲(IPv4/IPv6 アドレスファミリーなど)を変更できません。新しいルールを作成してください。" FirewallWhitelistReleased: "{{ .name }}:許可リストの保護を解除しました。許可ルールは保持されます。ポートを閉じるには、ルール一覧から手動で削除してください" FirewallWhitelistRequired: "{{ .name }}:システム必須ポートのルールで保護されています" +FileTaskCopy: 'ファイルを {{ .dst }} にコピー' +FileTaskMove: 'ファイルを {{ .dst }} に移動' +FileTaskCompress: 'ファイルを {{ .dst }} に圧縮' +FileTaskDecompress: 'ファイルを {{ .dst }} に展開' +FileTaskSource: '元のパス:{{ .path }}' +FileTaskFormat: '圧縮形式:{{ .format }}' +FileTaskRename: '保存先ファイル名:{{ .name }}' ErrFirewallBackendCleanupRequired: "現在のバックエンド {{ .current }} に 1Panel ルールが残っています。{{ .target }} に切り替える前に削除してください。" ErrDockerIPv4ForwardingDisabled: "IPv4 転送が無効です。Docker のファイアウォールバックエンドを使用する前に net.ipv4.ip_forward=1 を設定してください。" diff --git a/agent/i18n/lang/ko.yaml b/agent/i18n/lang/ko.yaml index fa0484d22c1f..d234f970cea2 100644 --- a/agent/i18n/lang/ko.yaml +++ b/agent/i18n/lang/ko.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'Docker 포트 보호 상태 저장' ErrFirewallRuleScopeChange: "현재 방화벽에서는 규칙의 적용 범위(예: IPv4/IPv6 주소 패밀리)를 변경할 수 없습니다. 새 규칙을 생성하세요." FirewallWhitelistReleased: "{{ .name }}: 허용 목록 보호가 해제되었으며 허용 규칙은 유지됩니다. 포트를 닫으려면 규칙 목록에서 수동으로 삭제하세요" FirewallWhitelistRequired: "{{ .name }}: 시스템 필수 포트 규칙으로 보호됩니다" +FileTaskCopy: '{{ .dst }}에 파일 복사' +FileTaskMove: '{{ .dst }}로 파일 이동' +FileTaskCompress: '{{ .dst }}에 파일 압축' +FileTaskDecompress: '{{ .dst }}에 압축 해제' +FileTaskSource: '원본 경로: {{ .path }}' +FileTaskFormat: '압축 형식: {{ .format }}' +FileTaskRename: '대상 파일 이름: {{ .name }}' ErrFirewallBackendCleanupRequired: "현재 백엔드 {{ .current }}에 1Panel 규칙이 남아 있습니다. {{ .target }}로 전환하기 전에 정리하세요." ErrDockerIPv4ForwardingDisabled: "IPv4 전달이 비활성화되어 있습니다. Docker 방화벽 백엔드를 사용하기 전에 net.ipv4.ip_forward=1을 설정하세요." diff --git a/agent/i18n/lang/lo.yaml b/agent/i18n/lang/lo.yaml index 9b22c24e2e2b..b917600a7f03 100644 --- a/agent/i18n/lang/lo.yaml +++ b/agent/i18n/lang/lo.yaml @@ -710,6 +710,13 @@ FirewallPersistDockerGuardStep: 'ບັນທຶກສະຖານະປ້ອ ErrFirewallRuleScopeChange: "ໄຟວໍປັດຈຸບັນບໍ່ຮອງຮັບການປ່ຽນຂອບເຂດຂອງກົດ (ເຊັ່ນ ຕະກູນທີ່ຢູ່ IPv4/IPv6). ກະລຸນາສ້າງກົດໃໝ່." FirewallWhitelistReleased: "{{ .name }}: ຍົກເລີກການປ້ອງກັນລາຍຊື່ທີ່ອະນຸຍາດແລ້ວ; ຍັງຄົງກົດອະນຸຍາດໄວ້. ຫາກຕ້ອງການປິດພອດ ໃຫ້ລຶບກົດດ້ວຍຕົນເອງຈາກລາຍການກົດ" FirewallWhitelistRequired: "{{ .name }}: ປ້ອງກັນໂດຍກົດພອດທີ່ຈຳເປັນຂອງລະບົບ" +FileTaskCopy: 'ສຳເນົາໄຟລ໌ໄປທີ່ {{ .dst }}' +FileTaskMove: 'ຍ້າຍໄຟລ໌ໄປທີ່ {{ .dst }}' +FileTaskCompress: 'ບີບອັດໄຟລ໌ໄປທີ່ {{ .dst }}' +FileTaskDecompress: 'ແຕກໄຟລ໌ໄປທີ່ {{ .dst }}' +FileTaskSource: 'ເສັ້ນທາງຕົ້ນທາງ: {{ .path }}' +FileTaskFormat: 'ຮູບແບບໄຟລ໌ບີບອັດ: {{ .format }}' +FileTaskRename: 'ຊື່ໄຟລ໌ປາຍທາງ: {{ .name }}' ErrFirewallBackendCleanupRequired: "ແບັກເອນປັດຈຸບັນ {{ .current }} ຍັງມີກົດຂອງ 1Panel. ກະລຸນາລຶບອອກກ່ອນປ່ຽນໄປ {{ .target }}." ErrDockerIPv4ForwardingDisabled: "ການສົ່ງຕໍ່ IPv4 ຖືກປິດ. ກະລຸນາຕັ້ງ net.ipv4.ip_forward=1 ກ່ອນໃຊ້ແບັກເອນໄຟວໍຂອງ Docker." diff --git a/agent/i18n/lang/ms.yaml b/agent/i18n/lang/ms.yaml index c94d7671e10d..3c12ab8315e1 100644 --- a/agent/i18n/lang/ms.yaml +++ b/agent/i18n/lang/ms.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'Simpan status perlindungan port Docker' ErrFirewallRuleScopeChange: "Tembok api semasa tidak menyokong perubahan skop peraturan (seperti keluarga alamat IPv4/IPv6). Sila cipta peraturan baharu." FirewallWhitelistReleased: "{{ .name }}: perlindungan senarai dibenarkan telah dilepaskan; peraturan izin dikekalkan. Untuk menutup port, padamkan peraturan secara manual daripada senarai peraturan" FirewallWhitelistRequired: "{{ .name }}: dilindungi oleh peraturan port wajib sistem" +FileTaskCopy: 'Salin fail ke {{ .dst }}' +FileTaskMove: 'Pindahkan fail ke {{ .dst }}' +FileTaskCompress: 'Mampatkan fail ke {{ .dst }}' +FileTaskDecompress: 'Ekstrak fail ke {{ .dst }}' +FileTaskSource: 'Laluan sumber: {{ .path }}' +FileTaskFormat: 'Format arkib: {{ .format }}' +FileTaskRename: 'Nama fail sasaran: {{ .name }}' ErrFirewallBackendCleanupRequired: "Bahagian belakang semasa {{ .current }} masih mengandungi peraturan 1Panel. Buangkannya sebelum beralih kepada {{ .target }}." ErrDockerIPv4ForwardingDisabled: "Pemajuan IPv4 dilumpuhkan. Tetapkan net.ipv4.ip_forward=1 sebelum menggunakan bahagian belakang tembok api Docker." diff --git a/agent/i18n/lang/pt-BR.yaml b/agent/i18n/lang/pt-BR.yaml index b8534f7c47f8..4810606e2f6e 100644 --- a/agent/i18n/lang/pt-BR.yaml +++ b/agent/i18n/lang/pt-BR.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'Salvar o status da proteção de portas do Dock ErrFirewallRuleScopeChange: "O firewall atual não permite alterar o escopo de uma regra (como a família de endereços IPv4/IPv6). Crie uma nova regra." FirewallWhitelistReleased: "{{ .name }}: proteção da lista de permissões removida; regra de permissão mantida. Para fechar a porta, exclua a regra manualmente da lista" FirewallWhitelistRequired: "{{ .name }}: protegido pelas regras de portas obrigatórias do sistema" +FileTaskCopy: 'Copiar arquivos para {{ .dst }}' +FileTaskMove: 'Mover arquivos para {{ .dst }}' +FileTaskCompress: 'Compactar arquivos em {{ .dst }}' +FileTaskDecompress: 'Extrair arquivos para {{ .dst }}' +FileTaskSource: 'Caminho de origem: {{ .path }}' +FileTaskFormat: 'Formato do arquivo: {{ .format }}' +FileTaskRename: 'Nome do arquivo de destino: {{ .name }}' ErrFirewallBackendCleanupRequired: "O backend atual {{ .current }} ainda contém regras do 1Panel. Remova-as antes de mudar para {{ .target }}." ErrDockerIPv4ForwardingDisabled: "O encaminhamento IPv4 está desativado. Defina net.ipv4.ip_forward=1 antes de usar o backend de firewall do Docker." diff --git a/agent/i18n/lang/ru.yaml b/agent/i18n/lang/ru.yaml index 6a5cd320c65b..c88781c0bf1f 100644 --- a/agent/i18n/lang/ru.yaml +++ b/agent/i18n/lang/ru.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'Сохранить состояние защи ErrFirewallRuleScopeChange: "Текущий межсетевой экран не поддерживает изменение области действия правила (например, семейства адресов IPv4/IPv6). Создайте новое правило." FirewallWhitelistReleased: "{{ .name }}: защита списка разрешённых портов снята; разрешающее правило сохранено. Чтобы закрыть порт, удалите правило вручную из списка правил" FirewallWhitelistRequired: "{{ .name }}: защищён обязательными правилами системных портов" +FileTaskCopy: 'Копирование файлов в {{ .dst }}' +FileTaskMove: 'Перемещение файлов в {{ .dst }}' +FileTaskCompress: 'Сжатие файлов в {{ .dst }}' +FileTaskDecompress: 'Распаковка файлов в {{ .dst }}' +FileTaskSource: 'Исходный путь: {{ .path }}' +FileTaskFormat: 'Формат архива: {{ .format }}' +FileTaskRename: 'Имя целевого файла: {{ .name }}' ErrFirewallBackendCleanupRequired: "В текущем бэкенде {{ .current }} остались правила 1Panel. Удалите их перед переключением на {{ .target }}." ErrDockerIPv4ForwardingDisabled: "Пересылка IPv4 отключена. Перед использованием бэкенда межсетевого экрана Docker установите net.ipv4.ip_forward=1." diff --git a/agent/i18n/lang/tr.yaml b/agent/i18n/lang/tr.yaml index af870cccba24..7badedc7cec5 100644 --- a/agent/i18n/lang/tr.yaml +++ b/agent/i18n/lang/tr.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: 'Docker bağlantı noktası koruma durumunu kayd ErrFirewallRuleScopeChange: "Mevcut güvenlik duvarı, kuralın kapsamını (IPv4/IPv6 adres ailesi gibi) değiştirmeyi desteklemiyor. Lütfen yeni bir kural oluşturun." FirewallWhitelistReleased: "{{ .name }}: izin listesi koruması kaldırıldı; izin kuralı korundu. Portu kapatmak için kuralı kural listesinden elle silin" FirewallWhitelistRequired: "{{ .name }}: zorunlu sistem portu kuralları tarafından korunuyor" +FileTaskCopy: 'Dosyaları {{ .dst }} konumuna kopyala' +FileTaskMove: 'Dosyaları {{ .dst }} konumuna taşı' +FileTaskCompress: 'Dosyaları {{ .dst }} konumuna sıkıştır' +FileTaskDecompress: 'Dosyaları {{ .dst }} konumuna çıkar' +FileTaskSource: 'Kaynak yol: {{ .path }}' +FileTaskFormat: 'Arşiv biçimi: {{ .format }}' +FileTaskRename: 'Hedef dosya adı: {{ .name }}' ErrFirewallBackendCleanupRequired: "Mevcut {{ .current }} arka ucunda hâlâ 1Panel kuralları var. {{ .target }} arka ucuna geçmeden önce bunları temizleyin." ErrDockerIPv4ForwardingDisabled: "IPv4 yönlendirmesi devre dışı. Docker güvenlik duvarı arka ucunu kullanmadan önce net.ipv4.ip_forward=1 ayarını yapın." diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index 23908761c198..87fedfb24591 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: '儲存 Docker 連接埠防護狀態' ErrFirewallRuleScopeChange: "目前的防火牆不支援修改規則的作用範圍(如 IPv4/IPv6 位址族),請建立新規則。" FirewallWhitelistReleased: "{{ .name }}:已解除白名單保護,放行規則保留;如需關閉連接埠,請在規則清單手動刪除" FirewallWhitelistRequired: "{{ .name }}:由系統必要連接埠規則保護" +FileTaskCopy: '複製檔案至 {{ .dst }}' +FileTaskMove: '移動檔案至 {{ .dst }}' +FileTaskCompress: '壓縮檔案至 {{ .dst }}' +FileTaskDecompress: '解壓檔案至 {{ .dst }}' +FileTaskSource: '來源路徑:{{ .path }}' +FileTaskFormat: '壓縮格式:{{ .format }}' +FileTaskRename: '目標檔名:{{ .name }}' ErrFirewallBackendCleanupRequired: "目前後端 {{ .current }} 中仍有 1Panel 規則,請先清理後再切換至 {{ .target }}。" ErrDockerIPv4ForwardingDisabled: "IPv4 轉送尚未啟用,請先設定 net.ipv4.ip_forward=1,再使用 Docker 防火牆後端。" diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index ff15f8b8833b..a9e8129eadd0 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -719,6 +719,13 @@ FirewallPersistDockerGuardStep: "保存 Docker 端口防护状态" ErrFirewallRuleScopeChange: "当前防火墙不支持修改规则的作用范围(如 IPv4/IPv6 地址族),请新建规则。" FirewallWhitelistReleased: "{{ .name }}:已解除白名单保护,放行规则保留;如需关闭端口,请在规则列表手动删除" FirewallWhitelistRequired: "{{ .name }}:由系统必需端口规则保护" +FileTaskCopy: '复制文件到 {{ .dst }}' +FileTaskMove: '移动文件到 {{ .dst }}' +FileTaskCompress: '压缩文件到 {{ .dst }}' +FileTaskDecompress: '解压文件到 {{ .dst }}' +FileTaskSource: '源路径:{{ .path }}' +FileTaskFormat: '压缩格式:{{ .format }}' +FileTaskRename: '目标文件名:{{ .name }}' ErrFirewallBackendCleanupRequired: "当前后端 {{ .current }} 中仍有 1Panel 规则,请先清理后再切换到 {{ .target }}。" ErrDockerIPv4ForwardingDisabled: "IPv4 转发未开启,请先设置 net.ipv4.ip_forward=1,再使用 Docker 防火墙后端。"