Files
photo-live/apps/mobile/lib/l10n/app_localizations_zh.dart
T
浅念 955f9b13c1 feat(mobile): upload queue ui and continuous capture page
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>
2026-09-19 04:47:31 +08:00

525 lines
11 KiB
Dart

// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for Chinese (`zh`).
class AppLocalizationsZh extends AppLocalizations {
AppLocalizationsZh([String locale = 'zh']) : super(locale);
@override
String get appName => '现场影像';
@override
String get login => '登录';
@override
String get logout => '退出登录';
@override
String get username => '账号';
@override
String get password => '密码';
@override
String get albums => '相册';
@override
String get albumDetail => '相册详情';
@override
String get queue => '上传队列';
@override
String get settings => '设置';
@override
String get language => '语言';
@override
String get localeFollowSystem => '跟随系统';
@override
String get localeChinese => '中文';
@override
String get localeEnglish => 'English';
@override
String get retry => '重试';
@override
String get cancel => '取消';
@override
String get errorGeneric => '出错了,请重试';
@override
String get ok => '好的';
@override
String get homeTabAlbums => '相册';
@override
String get homeTabQueue => '队列';
@override
String get homeTabSettings => '设置';
@override
String get loginHint => '使用工作人员账号登录';
@override
String get fieldRequired => '此项为必填项';
@override
String get passwordChangeTitle => '修改密码';
@override
String get currentPassword => '当前密码';
@override
String get newPassword => '新密码';
@override
String get confirmNewPassword => '确认新密码';
@override
String get passwordMinLength => '新密码至少需要 8 个字符';
@override
String get passwordMismatch => '两次输入的新密码不一致';
@override
String get passwordChangeSuccess => '密码已修改';
@override
String get errorAuthInvalidCredentials => '账号或密码错误';
@override
String get errorOldPasswordIncorrect => '当前密码错误';
@override
String get errorAuthRateLimited => '尝试次数过多,请稍后再试';
@override
String get errorAuthTokenExpired => '会话已过期,请重新登录';
@override
String get errorValidation => '输入有误,请检查后重试';
@override
String get errorNetwork => '网络连接失败,请检查网络后重试';
@override
String get errorNetworkTimeout => '网络超时,请重试';
@override
String get errorInternal => '服务暂时不可用,请稍后重试';
@override
String get albumsEmpty => '暂无相册,点击「新建相册」开始';
@override
String get loadMoreFailed => '加载更多失败,点击重试';
@override
String get albumCreate => '新建相册';
@override
String get albumEdit => '编辑相册';
@override
String get albumTitle => '标题';
@override
String get albumDescription => '描述';
@override
String get albumVenue => '场地';
@override
String get albumAddress => '地址';
@override
String get albumDefaultLocale => '默认语言';
@override
String get albumStartAt => '开始时间';
@override
String get albumEndAtOptional => '结束时间(可选)';
@override
String get clearEndAt => '清除结束时间';
@override
String get albumTimezone => '时区';
@override
String get albumTimezoneInvalid => '无效的 IANA 时区名称';
@override
String get switchUpload => '允许上传';
@override
String get switchPublic => '公开可见';
@override
String get switchDownload => '允许下载';
@override
String get switchOriginalDownload => '允许下载原图';
@override
String get formStartAtRequired => '请选择开始时间';
@override
String get formDefaultLocaleMissing => '默认语言必须填写标题';
@override
String get formTitleRequiredWithFields => '填写了描述/场地/地址时,标题不能为空';
@override
String get formEndAtNotAfterStartAt => '结束时间必须晚于开始时间';
@override
String get create => '创建';
@override
String get save => '保存';
@override
String get albumStatusActive => '正常';
@override
String get albumStatusOffline => '下线';
@override
String get tagUpload => '上传';
@override
String get tagPublic => '公开';
@override
String get tagDownload => '下载';
@override
String get tagOriginal => '原图';
@override
String get notSet => '未定';
@override
String get actionEdit => '编辑';
@override
String get albumMembers => '成员管理';
@override
String get albumCategories => '分类管理';
@override
String get shareQrTitle => '分享二维码';
@override
String get albumPhotos => '照片管理';
@override
String get delete => '删除';
@override
String get deleteConfirmCategory => '确定删除该分类?该分类下的照片将变为未分类。';
@override
String get categoryEmpty => '暂无分类,点击右上角新增';
@override
String get categoryAdd => '新增分类';
@override
String get categoryEdit => '编辑分类';
@override
String get categoryNameZh => '中文名称';
@override
String get categoryNameEn => '英文名称';
@override
String get categorySortOrder => '排序序号';
@override
String get categoryNameRequired => '至少填写一个语言的名称';
@override
String get categorySortOrderInvalid => '排序序号必须是整数';
@override
String get albumMembersEmpty => '暂无成员';
@override
String get inviteSearchHint => '输入账号前缀搜索邀请(至少 2 个字符)';
@override
String get inviteNoResults => '未找到匹配用户';
@override
String get invite => '邀请';
@override
String get memberInvited => '已邀请';
@override
String get removeMember => '移除成员';
@override
String get removeMemberConfirm => '确定移除该成员?';
@override
String get roleOwner => '创建者';
@override
String get roleCollaborator => '协作者';
@override
String get selfMarker => '(我)';
@override
String get errorMemberConflict => '该用户已是相册成员';
@override
String get qrHint => '扫码或打开链接观看';
@override
String get copyLink => '复制链接';
@override
String get copiedToClipboard => '已复制';
@override
String get photosTask9Placeholder => '照片管理为占位版本,完整功能将在任务 9 上线';
@override
String get albumPhotosEmpty => '暂无照片';
@override
String get visibilityPublished => '已发布';
@override
String get visibilityUnpublished => '未发布';
@override
String get visibilityHidden => '已隐藏';
@override
String get visibilityDeleted => '已删除';
@override
String get procPendingUpload => '待上传';
@override
String get procUploaded => '已上传';
@override
String get procProcessing => '处理中';
@override
String get procReady => '就绪';
@override
String get procProcessingFailed => '处理失败';
@override
String get queueStubHint => '本机待传队列与连拍管理将在任务 9 上线';
@override
String get serverHistoryEntry => '查看服务端上传历史';
@override
String get serverHistoryTitle => '服务端上传历史';
@override
String get serverHistoryBanner => '服务端历史(跨设备)——本机待传队列请看「队列」页';
@override
String get serverHistoryEmpty => '暂无上传记录';
@override
String get uploadStatePending => '待完成';
@override
String get uploadStateConfirmed => '已确认';
@override
String get uploadStateCancelled => '已取消';
@override
String get uploadStateExpired => '已过期';
@override
String get thisDevice => '本设备';
@override
String get queueAlbumFilterAll => '全部相册';
@override
String get queueStateAll => '全部';
@override
String get queueStatePreparing => '准备中';
@override
String get queueStateQueued => '待传';
@override
String get queueStateUploading => '上传中';
@override
String get queueStateWaitingNetwork => '等待网络';
@override
String get queueStateFailed => '失败';
@override
String get queueStateCompleted => '已完成';
@override
String get queueTimeAll => '全部时间';
@override
String get queueTimeToday => '今天';
@override
String get queueTimeLast7Days => '近7天';
@override
String get queueTimeLast30Days => '近30天';
@override
String get queueEmpty => '暂无上传任务';
@override
String get queueRetryAllFailed => '一键重试全部失败';
@override
String queueAttemptCount(int count) {
return '已尝试 $count 次';
}
@override
String get taskStatePreparing => '准备中';
@override
String get taskStatePreparationFailed => '准备失败';
@override
String get taskStateQueued => '待上传';
@override
String get taskStateUploading => '上传中';
@override
String get taskStateUploadedConfirming => '确认中';
@override
String get taskStateCompleted => '已完成';
@override
String get taskStateWaitingNetwork => '等待网络';
@override
String get taskStateRetryableFailed => '上传失败';
@override
String get taskStateCancelled => '已取消';
@override
String get errorPrepSourceUnreadable => '无法读取所选图片,请重新选择';
@override
String get errorPrepUnsupportedType => '仅支持 JPG/PNG/HEIC 图片';
@override
String get errorPrepTooLarge => '图片超过 50MB 上限';
@override
String get errorPrepCopyFailed => '保存图片副本失败,请重试';
@override
String get errorUploadSourceMissing => '源文件已缺失,请重新选择';
@override
String get errorAlbumUploadDisabled => '相册已关闭上传';
@override
String get errorUploadSessionConflict => '上传会话冲突,请重试';
@override
String get errorUploadVerifyFailed => '上传核验失败,将自动重试';
@override
String get captureTitle => '连拍上传';
@override
String get captureCategoryDefault => '默认分类';
@override
String get captureSwitchHint => '切换分类仅影响之后拍摄的照片';
@override
String capturePendingBadge(int count) {
return '待传 $count';
}
@override
String captureFailedBadge(int count) {
return '失败 $count';
}
@override
String get capturePickFromGallery => '从相册选择';
@override
String get captureShutter => '拍摄';
@override
String get captureExitTitle => '退出拍摄?';
@override
String captureExitBody(int count) {
return '还有 $count 张照片未上传,退出后任务将在后台继续。';
}
@override
String get captureKeepShooting => '继续拍摄';
@override
String get captureExitConfirm => '退出';
@override
String get cameraPermissionDenied => '无法访问相机,请在系统设置中允许相机权限';
@override
String get cameraInitFailed => '相机初始化失败';
@override
String get uploadActionCapture => '拍照上传';
@override
String get uploadActionPick => '从相册选择';
@override
String get uploadAction => '上传';
@override
String uploadEnqueuedCount(int count) {
return '已加入 $count 张上传队列';
}
@override
String get uploadPickNone => '未选择照片';
}