release: v1.4.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

- 每用户标签与彩色打标,图库 OR/AND 筛选与批量打标
- 操作日志记录登录、删除、设置与标签操作
- API 标签/打标接口;README 与文档站截图同步
This commit is contained in:
O96u committed 2026-09-09 14:46:52 +08:00
1 parent f17d79b236
commit 737235acff
110 files changed
+5881 -778

No files matched your search

+137 -5
View File
@@ -166,6 +166,104 @@
"sessionTitle": "This session",
"sessionEmpty": "No uploads in this session"
},
"tags": {
"column": "Tags",
"uploadLabel": "Tags (optional)",
"addTag": "Add tag",
"searchOrCreate": "Search or create tag",
"createNamed": "Create tag \"{name}\"",
"created": "Created tag \"{name}\"",
"createFailed": "Failed to create tag",
"updateFailed": "Failed to update tags",
"filterAll": "All tags",
"filterSelected": "{n} selected",
"filterTitle": "Filter by tag",
"manage": "Manage",
"manageTitle": "Manage tags",
"manageImageTitle": "Manage tags",
"manageSubtitle": "Centralized tag management — add, edit, delete, and merge",
"newTag": "New tag",
"addTag": "Add tag",
"mergeTags": "Merge tags",
"searchName": "Search tag name",
"filterStatusAll": "All statuses",
"filterStatusUsed": "In use",
"filterStatusUnused": "Unused",
"statTotal": "Total tags",
"statUsed": "Tags in use",
"statUnused": "Unused tags",
"statNew7d": "New in 7 days",
"colName": "Tag name",
"colImageCount": "Images",
"colLastUsed": "Last used",
"neverUsed": "Never used",
"colActions": "Actions",
"mergeIntoAction": "Merge into…",
"mergeIntoTitle": "Merge into…",
"mergeIntoSubtitle": "Merge tag \"{name}\" into another tag",
"mergeIntoChoose": "Choose the target tag",
"mergeIrreversibleTitle": "This cannot be undone",
"mergeIrreversible": "Merged tags are permanently deleted and their images move to the kept tag. This action cannot be reversed.",
"mergeConfirmKeep": "Keeping tag \"{name}\"",
"mergeWillDelete": "These tags will be deleted: {names}",
"totalCount": "{n} tags",
"sortByCount": "By count",
"sortByName": "By name",
"search": "Search tags",
"namePlaceholder": "Tag name",
"customColor": "Custom color",
"pickColor": "Pick a color",
"preview": "Preview",
"renamed": "Tag renamed",
"renameFailed": "Rename failed",
"colorFailed": "Failed to update color",
"deleted": "Deleted tag \"{name}\"",
"deleteFailed": "Failed to delete tag",
"deleteConfirmTitle": "Delete tag",
"deleteConfirmDesc": "Delete tag \"{name}\"? It will be removed from all images. This cannot be undone.",
"mergeSelectAtLeast": "Select at least 2 tags",
"mergeHint": "Select multiple tags to merge; images from other tags will move to the kept tag",
"mergeSelected": "{n} tags selected",
"mergeClear": "Clear selection",
"mergeTitle": "Merge tags",
"mergeSubtitle": "Combine multiple tags into one",
"mergeNote": "Unselected tags will be deleted; their images move to the kept tag",
"mergeChooseTarget": "Choose the tag to keep",
"mergeAction": "Merge into…",
"mergeRow": "Merge",
"mergeConfirm": "Confirm merge",
"merged": "Tags merged",
"mergeFailed": "Merge failed",
"untagged": "Untagged",
"untaggedAction": "+ Untagged",
"unlabeled": "Unlabeled",
"selectedLabel": "Selected ({n})",
"clearSelected": "Clear",
"selectAll": "Select all",
"deselectAll": "Deselect all",
"existingLabel": "Existing tags ({n})",
"commonTags": "Common tags",
"recentTags": "Recently used",
"moreTags": "{n} more tags",
"classifyHint": "Tags are for organization only and do not affect storage paths",
"saved": "Tags saved",
"saveFailed": "Failed to save tags",
"batchTagAll": "Batch tag",
"batchAddTitle": "Add tags",
"batchAddSubtitle": "{n} images selected",
"modeOr": "Any",
"modeAnd": "All",
"batchTitle": "Batch tags",
"batchSubtitle": "Update tags for {n} selected image(s)",
"batchAdd": "Add tags",
"batchRemove": "Remove tags",
"batchSuccess": "Batch update complete",
"batchFailed": "Batch update failed",
"noMatch": "No matching tags",
"emptyHint": "No tags yet — type a name to create one",
"settingsLink": "Manage tags in the gallery (create, colors, merge, delete)",
"openManage": "Open tag manager"
},
"copy": {
"url": "URL",
"markdown": "Markdown",
@@ -206,12 +304,30 @@
"title": "System settings",
"pageTitle": "Settings & preferences",
"pageSubtitle": "Manage system configuration and activity logs",
"pageSubtitleBasic": "Manage system configuration and upload preferences",
"pageSubtitleBasic": "Configure basic options so PicHost works better for you.",
"pageSubtitleDomains": "Configure site and image URLs and upload path rules",
"pageSubtitleAccess": "Configure image access policies to prevent hotlink abuse",
"pageSubtitleLogs": "View uploads, deletions, edits, and configuration changes",
"searchPlaceholder": "Search settings…",
"searchEmpty": "No matches",
"restoreDefaults": "Restore defaults",
"restoredDefaults": "Defaults restored",
"refererProtection": "Hotlink protection",
"defaultCopyFormatHint": "Link format copied automatically after upload",
"systemVersionHint": "Currently running PicHost version",
"badgeEnabled": "Enabled",
"domainSeparationProxyTitle": "Both domains must resolve to this host",
"domainSeparationProxyBody": "Point the site and image URLs to this host and reverse-proxy to port 6892 (Nginx, Caddy, NPM, etc.).",
"siteBaseUrlRoleHint": "URL for the admin UI",
"imageBaseUrlRoleHint": "URL for serving and displaying images",
"imageDomainSection": "Image domain",
"navBasic": "Basic",
"navDomains": "Domains & paths",
"navAccess": "Access control",
"navTags": "Tags",
"navPreferences": "Preferences",
"navLogs": "Activity log",
"pageSubtitleTags": "Create, rename, merge, or delete tags",
"systemVersion": "Version",
"checkUpdate": "Check for updates",
"saveSettings": "Save settings",
@@ -231,6 +347,10 @@
"refererExamplesSample": "example.com, static.example.com",
"refererScenarioTitle": "Common use case",
"refererScenarioDesc": "Allow your main site and static site to embed images",
"refererScenario1": "Personal blog embedding images",
"refererScenario2": "Corporate site and static CDN",
"refererScenario3": "Local development",
"refererScenario4": "Leave empty for no restriction",
"refererEnabled": "Enabled",
"refererUnrestricted": "Unrestricted",
"loginVerification": "Login verification",
@@ -594,20 +714,28 @@
},
"logs": {
"pageTitle": "Activity log",
"pageSubtitle": "Your upload and delete history",
"pageSubtitleAdmin": "Upload and delete history for all users",
"pageSubtitle": "Your activity history",
"pageSubtitleAdmin": "Activity history for all users",
"loadFailed": "Failed to load activity log",
"empty": "No activity yet",
"entriesUnit": "entries",
"filterActionAll": "All actions",
"filterSourceAll": "All sources",
"filterUserAll": "All users",
"searchPlaceholder": "Search filename",
"searchPlaceholder": "Search filename, path, or IP",
"dateFrom": "Start date",
"dateTo": "End date",
"dateRangeSeparator": "~",
"summaryAll": "All · {total} entries, {upload} uploads, {delete} deletes",
"actionUpload": "Upload",
"actionDelete": "Delete",
"actionLogin": "Login",
"actionEdit": "Edit",
"actionSettings": "Settings",
"actionTags": "Tags",
"sourceWeb": "Web",
"sourceApi": "API",
"sourceAdmin": "Admin",
"colTime": "Time",
"colUser": "User",
"colStorage": "Storage",
@@ -616,7 +744,11 @@
"colFile": "File",
"colFolder": "Folder",
"colSize": "Size",
"colKey": "Path"
"colKey": "Path",
"colIp": "IP address",
"colResult": "Result",
"resultSuccess": "Success",
"resultFailure": "Failed"
},
"image": {
"empty": "No images",