955f9b13c1
Task 9 (P3 plan): queue tab replaces the stub, continuous capture page enqueues per shot, album detail gains an upload FAB, and the upload engine lifecycle is now bound to the login session. - Engine scope: session account drives UploadEngine start/stop; wired from app boot, login success, logout, and 401 eviction. Tasks stay in the store across logout (accountId hard isolation). - Queue tab: album x state x time filter bar, task rows with thumbnail, state chip, localized error copy, attempt count, per-row progress via a broadcast progress hub, state-dependent actions (re-pick retry, retryNow, cancel, delete), batch retry bar, 200ms-debounced live refresh from drift table updates. - Capture page: camera preview via injected CaptureSource, one enqueue per shutter press, persistent album/category/badges overlay with a switch-only-affects-new-shots hint, gallery multi-pick, exit confirm while uploads are pending, permission-denied and init-failure views. - POST_NOTIFICATIONS runtime permission via a small MethodChannel (photolive/permissions) + PermissionPlugin.kt: single runtime permission need, avoids permission_handler dependency; requested once on first enqueue, silent degradation when denied or unavailable. - Album detail FAB: capture-and-upload / pick-from-gallery sheet. - l10n: ~50 new keys in zh/en arbs; tests: +45 (filter matrix, engine scope lifecycle, permission gate, queue tab, capture page, FAB entry); existing page tests updated to inject session/task-store fakes. Co-Authored-By: Claude Code <noreply@anthropic.com>
177 lines
7.4 KiB
Plaintext
177 lines
7.4 KiB
Plaintext
{
|
|
"@@locale": "zh",
|
|
"appName": "现场影像",
|
|
"login": "登录",
|
|
"logout": "退出登录",
|
|
"username": "账号",
|
|
"password": "密码",
|
|
"albums": "相册",
|
|
"albumDetail": "相册详情",
|
|
"queue": "上传队列",
|
|
"settings": "设置",
|
|
"language": "语言",
|
|
"localeFollowSystem": "跟随系统",
|
|
"localeChinese": "中文",
|
|
"localeEnglish": "English",
|
|
"retry": "重试",
|
|
"cancel": "取消",
|
|
"errorGeneric": "出错了,请重试",
|
|
"ok": "好的",
|
|
"homeTabAlbums": "相册",
|
|
"homeTabQueue": "队列",
|
|
"homeTabSettings": "设置",
|
|
"loginHint": "使用工作人员账号登录",
|
|
"fieldRequired": "此项为必填项",
|
|
"passwordChangeTitle": "修改密码",
|
|
"currentPassword": "当前密码",
|
|
"newPassword": "新密码",
|
|
"confirmNewPassword": "确认新密码",
|
|
"passwordMinLength": "新密码至少需要 8 个字符",
|
|
"passwordMismatch": "两次输入的新密码不一致",
|
|
"passwordChangeSuccess": "密码已修改",
|
|
"errorAuthInvalidCredentials": "账号或密码错误",
|
|
"errorOldPasswordIncorrect": "当前密码错误",
|
|
"errorAuthRateLimited": "尝试次数过多,请稍后再试",
|
|
"errorAuthTokenExpired": "会话已过期,请重新登录",
|
|
"errorValidation": "输入有误,请检查后重试",
|
|
"errorNetwork": "网络连接失败,请检查网络后重试",
|
|
"errorNetworkTimeout": "网络超时,请重试",
|
|
"errorInternal": "服务暂时不可用,请稍后重试",
|
|
"albumsEmpty": "暂无相册,点击「新建相册」开始",
|
|
"loadMoreFailed": "加载更多失败,点击重试",
|
|
"albumCreate": "新建相册",
|
|
"albumEdit": "编辑相册",
|
|
"albumTitle": "标题",
|
|
"albumDescription": "描述",
|
|
"albumVenue": "场地",
|
|
"albumAddress": "地址",
|
|
"albumDefaultLocale": "默认语言",
|
|
"albumStartAt": "开始时间",
|
|
"albumEndAtOptional": "结束时间(可选)",
|
|
"clearEndAt": "清除结束时间",
|
|
"albumTimezone": "时区",
|
|
"albumTimezoneInvalid": "无效的 IANA 时区名称",
|
|
"switchUpload": "允许上传",
|
|
"switchPublic": "公开可见",
|
|
"switchDownload": "允许下载",
|
|
"switchOriginalDownload": "允许下载原图",
|
|
"formStartAtRequired": "请选择开始时间",
|
|
"formDefaultLocaleMissing": "默认语言必须填写标题",
|
|
"formTitleRequiredWithFields": "填写了描述/场地/地址时,标题不能为空",
|
|
"formEndAtNotAfterStartAt": "结束时间必须晚于开始时间",
|
|
"create": "创建",
|
|
"save": "保存",
|
|
"albumStatusActive": "正常",
|
|
"albumStatusOffline": "下线",
|
|
"tagUpload": "上传",
|
|
"tagPublic": "公开",
|
|
"tagDownload": "下载",
|
|
"tagOriginal": "原图",
|
|
"notSet": "未定",
|
|
"actionEdit": "编辑",
|
|
"albumMembers": "成员管理",
|
|
"albumCategories": "分类管理",
|
|
"shareQrTitle": "分享二维码",
|
|
"albumPhotos": "照片管理",
|
|
"delete": "删除",
|
|
"deleteConfirmCategory": "确定删除该分类?该分类下的照片将变为未分类。",
|
|
"categoryEmpty": "暂无分类,点击右上角新增",
|
|
"categoryAdd": "新增分类",
|
|
"categoryEdit": "编辑分类",
|
|
"categoryNameZh": "中文名称",
|
|
"categoryNameEn": "英文名称",
|
|
"categorySortOrder": "排序序号",
|
|
"categoryNameRequired": "至少填写一个语言的名称",
|
|
"categorySortOrderInvalid": "排序序号必须是整数",
|
|
"albumMembersEmpty": "暂无成员",
|
|
"inviteSearchHint": "输入账号前缀搜索邀请(至少 2 个字符)",
|
|
"inviteNoResults": "未找到匹配用户",
|
|
"invite": "邀请",
|
|
"memberInvited": "已邀请",
|
|
"removeMember": "移除成员",
|
|
"removeMemberConfirm": "确定移除该成员?",
|
|
"roleOwner": "创建者",
|
|
"roleCollaborator": "协作者",
|
|
"selfMarker": "(我)",
|
|
"errorMemberConflict": "该用户已是相册成员",
|
|
"qrHint": "扫码或打开链接观看",
|
|
"copyLink": "复制链接",
|
|
"copiedToClipboard": "已复制",
|
|
"photosTask9Placeholder": "照片管理为占位版本,完整功能将在任务 9 上线",
|
|
"albumPhotosEmpty": "暂无照片",
|
|
"visibilityPublished": "已发布",
|
|
"visibilityUnpublished": "未发布",
|
|
"visibilityHidden": "已隐藏",
|
|
"visibilityDeleted": "已删除",
|
|
"procPendingUpload": "待上传",
|
|
"procUploaded": "已上传",
|
|
"procProcessing": "处理中",
|
|
"procReady": "就绪",
|
|
"procProcessingFailed": "处理失败",
|
|
"queueStubHint": "本机待传队列与连拍管理将在任务 9 上线",
|
|
"serverHistoryEntry": "查看服务端上传历史",
|
|
"serverHistoryTitle": "服务端上传历史",
|
|
"serverHistoryBanner": "服务端历史(跨设备)——本机待传队列请看「队列」页",
|
|
"serverHistoryEmpty": "暂无上传记录",
|
|
"uploadStatePending": "待完成",
|
|
"uploadStateConfirmed": "已确认",
|
|
"uploadStateCancelled": "已取消",
|
|
"uploadStateExpired": "已过期",
|
|
"thisDevice": "本设备",
|
|
"queueAlbumFilterAll": "全部相册",
|
|
"queueStateAll": "全部",
|
|
"queueStatePreparing": "准备中",
|
|
"queueStateQueued": "待传",
|
|
"queueStateUploading": "上传中",
|
|
"queueStateWaitingNetwork": "等待网络",
|
|
"queueStateFailed": "失败",
|
|
"queueStateCompleted": "已完成",
|
|
"queueTimeAll": "全部时间",
|
|
"queueTimeToday": "今天",
|
|
"queueTimeLast7Days": "近7天",
|
|
"queueTimeLast30Days": "近30天",
|
|
"queueEmpty": "暂无上传任务",
|
|
"queueRetryAllFailed": "一键重试全部失败",
|
|
"queueAttemptCount": "已尝试 {count} 次",
|
|
"@queueAttemptCount": { "placeholders": { "count": { "type": "int" } } },
|
|
"taskStatePreparing": "准备中",
|
|
"taskStatePreparationFailed": "准备失败",
|
|
"taskStateQueued": "待上传",
|
|
"taskStateUploading": "上传中",
|
|
"taskStateUploadedConfirming": "确认中",
|
|
"taskStateCompleted": "已完成",
|
|
"taskStateWaitingNetwork": "等待网络",
|
|
"taskStateRetryableFailed": "上传失败",
|
|
"taskStateCancelled": "已取消",
|
|
"errorPrepSourceUnreadable": "无法读取所选图片,请重新选择",
|
|
"errorPrepUnsupportedType": "仅支持 JPG/PNG/HEIC 图片",
|
|
"errorPrepTooLarge": "图片超过 50MB 上限",
|
|
"errorPrepCopyFailed": "保存图片副本失败,请重试",
|
|
"errorUploadSourceMissing": "源文件已缺失,请重新选择",
|
|
"errorAlbumUploadDisabled": "相册已关闭上传",
|
|
"errorUploadSessionConflict": "上传会话冲突,请重试",
|
|
"errorUploadVerifyFailed": "上传核验失败,将自动重试",
|
|
"captureTitle": "连拍上传",
|
|
"captureCategoryDefault": "默认分类",
|
|
"captureSwitchHint": "切换分类仅影响之后拍摄的照片",
|
|
"capturePendingBadge": "待传 {count}",
|
|
"@capturePendingBadge": { "placeholders": { "count": { "type": "int" } } },
|
|
"captureFailedBadge": "失败 {count}",
|
|
"@captureFailedBadge": { "placeholders": { "count": { "type": "int" } } },
|
|
"capturePickFromGallery": "从相册选择",
|
|
"captureShutter": "拍摄",
|
|
"captureExitTitle": "退出拍摄?",
|
|
"captureExitBody": "还有 {count} 张照片未上传,退出后任务将在后台继续。",
|
|
"@captureExitBody": { "placeholders": { "count": { "type": "int" } } },
|
|
"captureKeepShooting": "继续拍摄",
|
|
"captureExitConfirm": "退出",
|
|
"cameraPermissionDenied": "无法访问相机,请在系统设置中允许相机权限",
|
|
"cameraInitFailed": "相机初始化失败",
|
|
"uploadActionCapture": "拍照上传",
|
|
"uploadActionPick": "从相册选择",
|
|
"uploadAction": "上传",
|
|
"uploadEnqueuedCount": "已加入 {count} 张上传队列",
|
|
"@uploadEnqueuedCount": { "placeholders": { "count": { "type": "int" } } },
|
|
"uploadPickNone": "未选择照片"
|
|
}
|