release: v1.3.0 — 整站备份恢复、跨后端同步与任务中心
ci / ci (22, ubuntu-latest) (push) Canceled after 0s
GitHub Release / release (push) Canceled after 0s
Publish Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Canceled after 0s
Publish Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Canceled after 0s
Publish Docker image / merge (push) Canceled after 0s

This commit is contained in:
O96u committed 2026-09-07 17:05:12 +08:00
1 parent b05d572221
commit f17d79b236
72 files changed
+4312 -559

No files matched your search

+131 -2
View File
@@ -110,7 +110,18 @@
"migrateSubmit": "Complete migration",
"initSubmit": "Create and continue",
"migrateSuccess": "Migration complete",
"initSuccess": "Setup complete"
"initSuccess": "Setup complete",
"restoreTitle": "Restore from backup",
"restoreSubtitle": "Upload a .phost.tar.gz to restore the full site",
"restoreHint": "Restore replaces all current data. Cloud storage secrets are not in the backup—re-enter them on the Storage page after sign-in.",
"restoreUpload": "Choose backup file",
"restoreSubmit": "Start restore",
"restoreProgress": "Restoring… {progress}/{total}",
"restoreSuccess": "Restore complete. Sign in with the admin account from the backup.",
"restoreFailed": "Restore failed",
"restoreSecretsHint": "Cloud storage secrets are not in the backup. Re-enter them on the Storage page after sign-in.",
"modeInit": "Create admin",
"modeRestore": "Restore backup"
},
"register": {
"title": "Register",
@@ -388,7 +399,125 @@
"deleteConfirmBody": "Delete “{name}”? This cannot be undone.",
"secretsRequired": "Access Key and Secret Key are required for new storage",
"manageStorage": "Manage object storage",
"manageStorageHint": "Configure R2 / S3 / COS backends and URL serving"
"manageStorageHint": "Configure R2 / S3 / COS backends and URL serving",
"backup": {
"sectionTitle": "Backup & migration",
"sectionSubtitle": "Full-site backup, restore, and cross-backend image migration",
"siteTitle": "Site backup & restore",
"siteSubtitle": "For migration, disaster recovery, and full-site restore",
"siteFooterHint": "Backups include the database and images, not plain-text secret_json.",
"exportTitle": "Create site backup",
"exportSubtitle": "Package the database and all images as .phost.tar.gz",
"exportAction": "Start backup",
"exportStarted": "Backup job started",
"exportFailed": "Failed to start backup",
"exportPathHint": "Exports are saved under data/backups/",
"exportIncludesTitle": "Package includes",
"exportIncludesDb": "Database snapshot (pichost.db)",
"exportIncludesImages": "All image files ({count})",
"exportExcludesSecrets": "Excludes plain-text secret.json for cloud storage",
"exportConcurrencyHint": "Only one backup or migration job can run at a time",
"estimateLoading": "Estimating size…",
"estimateImageCountLabel": "Images",
"estimatePackageSizeLabel": "Est. package",
"estimateDatabaseSnapshotLabel": "Database snapshot",
"estimateStoragePathLabel": "Save location",
"estimateStoragePathValue": "data/backups/",
"estimateImages": "{count} images · {size}",
"estimateDatabase": "Database ~{size}",
"estimateTotal": "Total ~{size}",
"restoreTitle": "Restore from backup",
"restoreSubtitle": "Upload or pick a .phost.tar.gz on the server, preview, then confirm",
"restoreUpload": "Choose backup file",
"restoreUploadLabel": "Upload from device",
"restoreUploadHint": "Click to select a .phost.tar.gz backup",
"restoreUploadAction": "Upload & restore",
"restoreServerAction": "Server backup",
"restoreServerPackages": "Server backups",
"restoreServerSelectPlaceholder": "Select a backup",
"restorePreview": "Preview",
"restorePreviewConfirm": "Preview & confirm",
"restoreConfirm": "Confirm restore",
"restoreConfirmTitle": "Confirm site restore",
"restoreConfirmSource": "Source: {name}",
"restoreOverwriteWarning": "Overwrite mode replaces conflicting images and the database. Ensure you have a current backup.",
"restoreSelectRequired": "Select or upload a backup file",
"restoreStarted": "Restore job started",
"restoreFailed": "Restore failed",
"conflictMode": "Conflict policy",
"conflictSkip": "Skip existing images",
"conflictOverwrite": "Overwrite existing images and database",
"syncTitle": "Cross-backend sync",
"syncMigrateTitle": "Cross-backend migration",
"syncMigrateSubtitle": "Migrate images between configured backends",
"syncSubtitle": "Copy images between configured backends and update the index",
"syncFrom": "Source backend",
"syncTo": "Target backend",
"syncPendingImages": "Images to migrate",
"syncPendingSize": "Est. size",
"syncIncludesTitle": "What sync does",
"syncIncludesCopy": "Copy image files from source to target backend",
"syncIncludesIndex": "Update storage_backend_id in the index",
"syncIncludesConfig": "Site settings and other backends are unchanged",
"syncDryRun": "Dry run only",
"syncSetDefaultAfter": "Set target as default after migration",
"syncStartMigrate": "Start migration",
"syncPreviewOnly": "Preview",
"syncFooterHint": "Only image files and index are migrated; site settings are unchanged.",
"syncDeleteSource": "Delete source files after sync",
"syncSetDefault": "Set target as default after sync",
"syncPreview": "Preview & start",
"syncConfirm": "Start sync",
"syncConfirmTitle": "Confirm cross-backend sync",
"syncDeleteWarning": "Source files will be deleted. This cannot be undone.",
"syncSelectRequired": "Select source and target backends",
"syncSameBackend": "Source and target must differ",
"syncStarted": "Sync job started",
"syncFailed": "Sync failed",
"previewFailed": "Preview failed",
"previewImages": "Images",
"previewNew": "New images",
"previewConflicts": "Conflicts",
"previewCreated": "Backup created",
"previewSize": "Data size",
"jobsTitle": "Recent jobs",
"jobsSubtitle": "Track backup, restore, and migration progress",
"jobsEmpty": "No backup or migration jobs yet",
"jobsEmptyHint": "Progress appears here after export, restore, or sync starts",
"jobsUnit": "jobs",
"colTask": "Task",
"colType": "Type",
"colStatus": "Status",
"colProgress": "Progress",
"colMessage": "Message",
"colCreated": "Created",
"colActions": "Actions",
"jobTypeExport": "Site export",
"jobTypeRestore": "Site restore",
"jobTypeSync": "Cross-backend sync",
"statusPending": "Pending",
"statusRunning": "Running",
"statusDone": "Done",
"statusFailed": "Failed",
"jobFailedUnknown": "Unknown error",
"download": "Download",
"jobView": "View",
"retry": "Retry",
"retryStarted": "Retry started",
"retryFailed": "Retry failed",
"jobRunning": "Another job is already running. Try again later.",
"migrateIn": "Migrate in",
"migrateOut": "Migrate out",
"migrateInHint": "Copy images from the default backend to this one",
"migrateOutHint": "Move images out of this backend",
"syncDraftApplied": "Sync form prefilled — review and start when ready",
"syncNeedTwoBackends": "At least two storage backends are required to sync",
"selectBackend": "Select backend",
"syncConfirmRoute": "{from} → {to}",
"cancel": "Cancel",
"cancelDone": "Job cancelled",
"cancelFailed": "Failed to cancel job"
}
},
"stats": {
"title": "Gallery",
+131 -2
View File
@@ -110,7 +110,18 @@
"migrateSubmit": "完成迁移",
"initSubmit": "创建并进入",
"migrateSuccess": "账号迁移完成",
"initSuccess": "初始化完成"
"initSuccess": "初始化完成",
"restoreTitle": "从备份包恢复",
"restoreSubtitle": "上传 .phost.tar.gz 恢复整站数据",
"restoreHint": "恢复将覆盖当前全部数据。云存储密钥未包含在备份中,登录后请在存储页重新填写。",
"restoreUpload": "选择备份文件",
"restoreSubmit": "开始恢复",
"restoreProgress": "恢复中… {progress}/{total}",
"restoreSuccess": "恢复完成,请使用备份中的管理员账号登录",
"restoreFailed": "恢复失败",
"restoreSecretsHint": "云存储密钥未包含在备份中,登录后请在存储页重新填写",
"modeInit": "创建管理员",
"modeRestore": "从备份恢复"
},
"register": {
"title": "注册账号",
@@ -388,7 +399,125 @@
"deleteConfirmBody": "确定删除「{name}」?此操作不可撤销。",
"secretsRequired": "新建存储需填写 Access Key 与 Secret Key",
"manageStorage": "管理对象存储",
"manageStorageHint": "配置 R2 / S3 / COS 等多后端与直链策略"
"manageStorageHint": "配置 R2 / S3 / COS 等多后端与直链策略",
"backup": {
"sectionTitle": "备份与迁移",
"sectionSubtitle": "整站备份恢复与跨后端图片迁移",
"siteTitle": "站点备份与恢复",
"siteSubtitle": "用于换机、灾备与整站恢复",
"siteFooterHint": "备份包含数据库与图片,不包含 secret_json 明文。",
"exportTitle": "创建站点备份",
"exportSubtitle": "打包数据库与全部图片为 .phost.tar.gz",
"exportAction": "开始备份",
"exportStarted": "备份任务已开始",
"exportFailed": "创建备份失败",
"exportPathHint": "导出文件保存在 data/backups/",
"exportIncludesTitle": "备份包含",
"exportIncludesDb": "数据库快照(pichost.db)",
"exportIncludesImages": "全部图片文件({count} 张)",
"exportExcludesSecrets": "不含云存储 secret.json 明文",
"exportConcurrencyHint": "同时仅可运行一个备份或迁移任务",
"estimateLoading": "正在估算体积…",
"estimateImageCountLabel": "图片总数",
"estimatePackageSizeLabel": "预计备份包",
"estimateDatabaseSnapshotLabel": "数据库快照",
"estimateStoragePathLabel": "保存位置",
"estimateStoragePathValue": "data/backups/",
"estimateImages": "图片 {count} 张 · {size}",
"estimateDatabase": "数据库约 {size}",
"estimateTotal": "合计约 {size}",
"restoreTitle": "从备份恢复",
"restoreSubtitle": "上传或选择服务器上的 .phost.tar.gz,预检后确认恢复",
"restoreUpload": "选择备份文件",
"restoreUploadLabel": "本地上传",
"restoreUploadHint": "点击选择 .phost.tar.gz 备份包",
"restoreUploadAction": "上传备份恢复",
"restoreServerAction": "选择服务器备份",
"restoreServerPackages": "服务器已有备份",
"restoreServerSelectPlaceholder": "选择备份包",
"restorePreview": "预检",
"restorePreviewConfirm": "预检并确认",
"restoreConfirm": "确认恢复",
"restoreConfirmTitle": "确认恢复站点",
"restoreConfirmSource": "来源:{name}",
"restoreOverwriteWarning": "覆盖模式将替换冲突图片与数据库,请确认已做好当前站点备份",
"restoreSelectRequired": "请选择或上传备份文件",
"restoreStarted": "恢复任务已开始",
"restoreFailed": "恢复失败",
"conflictMode": "冲突策略",
"conflictSkip": "跳过已存在图片",
"conflictOverwrite": "覆盖已存在图片与数据库",
"syncTitle": "跨后端同步",
"syncMigrateTitle": "跨后端迁移",
"syncMigrateSubtitle": "在已配置后端之间迁移图片",
"syncSubtitle": "在已配置的后端之间拷贝图片并更新索引",
"syncFrom": "源后端",
"syncTo": "目标后端",
"syncPendingImages": "待迁移图片",
"syncPendingSize": "预计体积",
"syncIncludesTitle": "同步说明",
"syncIncludesCopy": "拷贝源端图片文件到目标后端",
"syncIncludesIndex": "更新索引中的 storage_backend_id",
"syncIncludesConfig": "不修改站点配置与其它后端数据",
"syncDryRun": "仅预览 Dry Run",
"syncSetDefaultAfter": "迁移后设为默认后端",
"syncStartMigrate": "开始迁移",
"syncPreviewOnly": "预览",
"syncFooterHint": "仅迁移图片文件与索引,不影响站点配置。",
"syncDeleteSource": "同步后删除源端文件",
"syncSetDefault": "同步后将目标设为默认",
"syncPreview": "预检并开始",
"syncConfirm": "开始同步",
"syncConfirmTitle": "确认跨后端同步",
"syncDeleteWarning": "将删除源后端上的图片文件,此操作不可撤销",
"syncSelectRequired": "请选择源与目标后端",
"syncSameBackend": "源与目标不能相同",
"syncStarted": "同步任务已开始",
"syncFailed": "同步失败",
"previewFailed": "预检失败",
"previewImages": "图片数量",
"previewNew": "新增图片",
"previewConflicts": "冲突图片",
"previewCreated": "备份时间",
"previewSize": "数据量",
"jobsTitle": "最近任务",
"jobsSubtitle": "查看备份、恢复与迁移进度",
"jobsEmpty": "暂无备份或迁移任务",
"jobsEmptyHint": "导出、恢复或同步开始后,进度会显示在这里",
"jobsUnit": "条任务",
"colTask": "任务",
"colType": "类型",
"colStatus": "状态",
"colProgress": "进度",
"colMessage": "说明",
"colCreated": "创建时间",
"colActions": "操作",
"jobTypeExport": "站点导出",
"jobTypeRestore": "站点恢复",
"jobTypeSync": "跨后端同步",
"statusPending": "等待中",
"statusRunning": "进行中",
"statusDone": "已完成",
"statusFailed": "失败",
"jobFailedUnknown": "未知错误",
"download": "下载",
"jobView": "查看",
"retry": "重试",
"retryStarted": "重试任务已开始",
"retryFailed": "重试失败",
"jobRunning": "已有任务正在运行,请稍后再试",
"migrateIn": "迁入",
"migrateOut": "迁出",
"migrateInHint": "从默认后端拷贝图片到此后端",
"migrateOutHint": "将图片从此后端迁出",
"syncDraftApplied": "已填入同步表单,请确认后开始",
"syncNeedTwoBackends": "至少需要两个存储后端才能同步",
"selectBackend": "选择后端",
"syncConfirmRoute": "{from} → {to}",
"cancel": "取消",
"cancelDone": "任务已取消",
"cancelFailed": "取消任务失败"
}
},
"stats": {
"title": "图库",