8bd09eefb9
- Page 09 create: grouped form (Event details / Description & languages), required default-language selector, zh-CN/en tabs with per-locale title/description/venue/address, explicit timezone field, bottom save button kept keyboard-reachable, create mode has no Access tab - Page 10 edit: Details/Access tabs sharing one draft; Access has four switches with explanations; original downloads constrained by downloads (disabled + forced off in PATCH); unsaved-changes PopScope confirm; save commits all changes in one minimal PATCH - Page 11 members: Owner group + Collaborators list with initial avatars and per-row remove; full-width Invite colleague opens account-search bottom sheet (debounced prefix search, race guard, already-added state); remove confirm names the member - Page 12 categories: extracted to standalone page with per-row edit/ delete menu and New category sheet (language tabs + name + sort order); delete confirm mentions photo impact; collaborator browse-only; old inline section removed from album detail - l10n: new form/members/categories keys both locales; regenerated - tests: form 14, members 6, categories 7, detail nav 1; full suite green Co-Authored-By: Claude Code <noreply@anthropic.com>
277 lines
13 KiB
Plaintext
277 lines
13 KiB
Plaintext
{
|
|
"@@locale": "en",
|
|
"appName": "Photo Live",
|
|
"login": "Sign in",
|
|
"logout": "Sign out",
|
|
"username": "Account",
|
|
"password": "Password",
|
|
"albums": "Albums",
|
|
"albumDetail": "Album details",
|
|
"queue": "Uploads",
|
|
"settings": "Settings",
|
|
"language": "Language",
|
|
"settingsSectionAccount": "Account",
|
|
"settingsSectionLanguage": "Language",
|
|
"settingsSectionSecurity": "Security",
|
|
"settingsSectionUploadHelp": "Upload help",
|
|
"settingsSectionAbout": "About",
|
|
"settingsSignedInAccount": "Currently signed-in account",
|
|
"settingsVersion": "Version",
|
|
"settingsUploadHelpTitle": "How background uploads work",
|
|
"settingsUploadHelpBody": "While the app stays in the background, the system keeps uploads running within its battery limits. If you force quit the app or the system stops it, unfinished tasks pause and resume the next time you open the app. Tasks waiting for the network start automatically once a connection is available — no manual retry needed.",
|
|
"logoutConfirmTitle": "Sign out?",
|
|
"logoutConfirmBody": "Local upload tasks are preserved on this device and will resume when you sign back in.",
|
|
"localeFollowSystem": "Follow system",
|
|
"localeChinese": "中文",
|
|
"localeEnglish": "English",
|
|
"retry": "Retry",
|
|
"cancel": "Cancel",
|
|
"errorGeneric": "Something went wrong, please retry",
|
|
"ok": "OK",
|
|
"navAlbums": "Albums",
|
|
"navUploads": "Uploads",
|
|
"navSettings": "Settings",
|
|
"badgeUploading": "{count} tasks",
|
|
"@badgeUploading": { "placeholders": { "count": { "type": "int" } } },
|
|
"albumUploadsOn": "Uploads on",
|
|
"albumUploadsOff": "Uploads off",
|
|
"albumPublicOff": "Not public",
|
|
"loginHint": "Sign in with your staff account",
|
|
"loginTitle": "Your event. In focus.",
|
|
"loginSubtitle": "Sign in to manage albums and photos",
|
|
"loginAskAdmin": "Ask admin for account",
|
|
"loginShowPassword": "Show password",
|
|
"loginHidePassword": "Hide password",
|
|
"languageDone": "Done",
|
|
"passwordSecurityHint": "Choose a new password with at least 8 characters.",
|
|
"passwordSave": "Save password",
|
|
"settingsSectionGeneral": "General",
|
|
"logoutConfirmBodyIdle": "You will be signed out on this device.",
|
|
"fieldRequired": "This field is required",
|
|
"passwordChangeTitle": "Change password",
|
|
"currentPassword": "Current password",
|
|
"newPassword": "New password",
|
|
"confirmNewPassword": "Confirm new password",
|
|
"passwordMinLength": "New password must be at least 8 characters",
|
|
"passwordMismatch": "New passwords do not match",
|
|
"passwordChangeSuccess": "Password changed",
|
|
"errorAuthInvalidCredentials": "Incorrect account or password",
|
|
"errorOldPasswordIncorrect": "Current password is incorrect",
|
|
"errorAuthRateLimited": "Too many attempts. Please try again later",
|
|
"errorAuthTokenExpired": "Session expired. Please sign in again",
|
|
"errorValidation": "Invalid input. Please check and retry",
|
|
"errorNetwork": "Network error. Check your connection and retry",
|
|
"errorNetworkTimeout": "Network timed out. Please retry",
|
|
"errorInternal": "Service temporarily unavailable. Please retry later",
|
|
"albumsEmpty": "No albums yet. Tap \"Create album\" to get started",
|
|
"loadMoreFailed": "Failed to load more. Tap to retry",
|
|
"albumCreate": "Create album",
|
|
"albumTitle": "Title",
|
|
"albumDescription": "Description",
|
|
"albumVenue": "Venue",
|
|
"albumAddress": "Address",
|
|
"albumStartAt": "Start time",
|
|
"albumEndAtOptional": "End time (optional)",
|
|
"clearEndAt": "Clear end time",
|
|
"albumTimezone": "Timezone",
|
|
"albumTimezoneInvalid": "Invalid IANA timezone name",
|
|
"formStartAtRequired": "Pick a start time",
|
|
"formDefaultLocaleMissing": "Default locale must have a title",
|
|
"formTitleRequiredWithFields": "Title is required when description, venue or address is filled",
|
|
"formEndAtNotAfterStartAt": "End time must be after start time",
|
|
"formEventDetails": "Event details",
|
|
"formDescriptionLanguages": "Description & languages",
|
|
"formDefaultLanguage": "Default language",
|
|
"formDetailsTab": "Details",
|
|
"formAccessTab": "Access",
|
|
"formAllowUploads": "Allow uploads",
|
|
"formAllowUploadsDesc": "Allow staff to upload photos to this album",
|
|
"formPublicAccess": "Public access",
|
|
"formPublicAccessDesc": "Anyone with the link can view photos",
|
|
"formAllowDownloads": "Allow downloads",
|
|
"formAllowDownloadsDesc": "Viewers can download browse-quality photos",
|
|
"formOriginalDownloads": "Original downloads",
|
|
"formOriginalDownloadsDesc": "Viewers can download original photos",
|
|
"createAlbumTitle": "Create album",
|
|
"createAlbumSubmit": "Create album",
|
|
"editAlbumTitle": "Edit album",
|
|
"saveChanges": "Save changes",
|
|
"unsavedChangesTitle": "Discard changes?",
|
|
"unsavedChangesBody": "Your edits are not saved yet. Leaving now will discard them.",
|
|
"discardChanges": "Discard",
|
|
"keepEditing": "Keep editing",
|
|
"create": "Create",
|
|
"save": "Save",
|
|
"albumStatusActive": "Active",
|
|
"albumStatusOffline": "Offline",
|
|
"tagUpload": "Upload",
|
|
"tagPublic": "Public",
|
|
"tagDownload": "Download",
|
|
"tagOriginal": "Original",
|
|
"notSet": "Not set",
|
|
"actionEdit": "Edit",
|
|
"membersTitle": "Members",
|
|
"membersTitleCount": "Members ({count})",
|
|
"@membersTitleCount": { "placeholders": { "count": { "type": "int" } } },
|
|
"ownerGroup": "Owner",
|
|
"collaboratorsGroup": "Collaborators",
|
|
"noCollaborators": "No collaborators yet",
|
|
"inviteColleague": "Invite colleague",
|
|
"alreadyAdded": "Already added",
|
|
"add": "Add",
|
|
"categoriesTitle": "Categories",
|
|
"newCategory": "New category",
|
|
"editCategory": "Edit category",
|
|
"deleteCategoryConfirm": "Delete \"{name}\"? Its photos will become uncategorized.",
|
|
"@deleteCategoryConfirm": { "placeholders": { "name": { "type": "String" } } },
|
|
"noCategories": "No categories yet",
|
|
"albumCategories": "Categories",
|
|
"shareQrTitle": "Share QR code",
|
|
"albumPhotos": "Photos",
|
|
"delete": "Delete",
|
|
"categoryNameZh": "Chinese name",
|
|
"categoryNameEn": "English name",
|
|
"categorySortOrder": "Sort order",
|
|
"categoryNameRequired": "At least one language name is required",
|
|
"categorySortOrderInvalid": "Sort order must be an integer",
|
|
"inviteSearchHint": "Search by account prefix to invite (at least 2 characters)",
|
|
"inviteNoResults": "No matching users",
|
|
"memberInvited": "Invited",
|
|
"removeMember": "Remove member",
|
|
"removeMemberConfirm": "Remove {name} from this album?",
|
|
"@removeMemberConfirm": { "placeholders": { "name": { "type": "String" } } },
|
|
"roleOwner": "Owner",
|
|
"roleCollaborator": "Collaborator",
|
|
"selfMarker": " (you)",
|
|
"errorMemberConflict": "User is already a member",
|
|
"qrHint": "Scan the code or open the link to view",
|
|
"copyLink": "Copy link",
|
|
"copiedToClipboard": "Copied",
|
|
"openInBrowser": "Open in browser",
|
|
"photosTask9Placeholder": "Photo management is a placeholder; the full experience ships in Task 9",
|
|
"albumPhotosEmpty": "No photos yet",
|
|
"visibilityPublished": "Published",
|
|
"visibilityUnpublished": "Unpublished",
|
|
"visibilityHidden": "Hidden",
|
|
"visibilityDeleted": "Deleted",
|
|
"procPendingUpload": "Pending upload",
|
|
"procUploaded": "Uploaded",
|
|
"procProcessing": "Processing",
|
|
"procReady": "Ready",
|
|
"procProcessingFailed": "Processing failed",
|
|
"queueStubHint": "Local upload queue and continuous capture arrive in Task 9",
|
|
"serverHistoryEntry": "Server history",
|
|
"serverHistoryTitle": "Server history (cross-device)",
|
|
"serverHistoryBanner": "Upload records from all of your devices. The local queue is on the Uploads tab.",
|
|
"serverHistoryEmpty": "No upload sessions yet",
|
|
"uploadStatePending": "Pending",
|
|
"uploadStateConfirmed": "Confirmed",
|
|
"uploadStateCancelled": "Cancelled",
|
|
"uploadStateExpired": "Expired",
|
|
"thisDevice": "This device",
|
|
"queueAlbumFilterAll": "All albums",
|
|
"queueStateAll": "All",
|
|
"queueStateInProgress": "In progress",
|
|
"queueStateNeedsAttention": "Needs attention",
|
|
"queueStateCompleted": "Completed",
|
|
"queueSummaryCompleted": "completed",
|
|
"queueSummaryUploading": "uploading",
|
|
"queueSummaryWaiting": "waiting",
|
|
"queueSummaryNeedAttention": "need attention",
|
|
"queueRowUploadingPercent": "Uploading {percent}%",
|
|
"@queueRowUploadingPercent": { "placeholders": { "percent": { "type": "int" } } },
|
|
"queueRowConfirming": "Confirming upload",
|
|
"queueRowWaitingUpload": "Waiting to upload",
|
|
"queueRowPreparing": "Preparing photo",
|
|
"queueWaitingNetworkHint": "Resumes automatically when the network recovers",
|
|
"queueRowFileUnavailable": "File unavailable",
|
|
"queueActionSelectAgain": "Select again",
|
|
"queueActionRemoveRecord": "Remove record",
|
|
"queueRemoveRecordTitle": "Remove this record?",
|
|
"queueRemoveRecordBody": "This only removes the local task record. Photos already uploaded are not deleted from the cloud.",
|
|
"queueRemoveRecordConfirm": "Remove",
|
|
"queueRetryAllScope": "Only failed uploads on this device are retried. Tasks waiting for the network recover automatically.",
|
|
"queueTimeAll": "Any time",
|
|
"queueTimeToday": "Today",
|
|
"queueTimeLast7Days": "Last 7 days",
|
|
"queueTimeLast30Days": "Last 30 days",
|
|
"queueEmpty": "No upload tasks",
|
|
"queueRetryAllFailed": "Retry all failed",
|
|
"queueAttemptCount": "{count} attempt(s)",
|
|
"@queueAttemptCount": { "placeholders": { "count": { "type": "int" } } },
|
|
"taskStatePreparing": "Preparing",
|
|
"taskStatePreparationFailed": "Preparation failed",
|
|
"taskStateQueued": "Queued",
|
|
"taskStateUploading": "Uploading",
|
|
"taskStateUploadedConfirming": "Confirming",
|
|
"taskStateCompleted": "Completed",
|
|
"taskStateWaitingNetwork": "Waiting for network",
|
|
"taskStateRetryableFailed": "Upload failed",
|
|
"taskStateCancelled": "Cancelled",
|
|
"errorPrepSourceUnreadable": "Could not read the selected photo. Please reselect",
|
|
"errorPrepUnsupportedType": "Only JPG, PNG and HEIC images are supported",
|
|
"errorPrepTooLarge": "Photo exceeds the 50MB limit",
|
|
"errorPrepCopyFailed": "Failed to copy the photo. Please retry",
|
|
"errorUploadSourceMissing": "Source file is missing. Please reselect",
|
|
"errorAlbumUploadDisabled": "Album uploads are disabled",
|
|
"errorUploadSessionConflict": "Upload session conflict. Please retry",
|
|
"errorUploadVerifyFailed": "Upload verification failed. Will retry",
|
|
"captureTitle": "Continuous capture",
|
|
"captureCategoryDefault": "Default category",
|
|
"captureSwitchHint": "Switching only affects photos captured afterwards",
|
|
"capturePendingBadge": "Pending {count}",
|
|
"@capturePendingBadge": { "placeholders": { "count": { "type": "int" } } },
|
|
"captureFailedBadge": "Failed {count}",
|
|
"@captureFailedBadge": { "placeholders": { "count": { "type": "int" } } },
|
|
"capturePickFromGallery": "Pick from gallery",
|
|
"captureShutter": "Capture",
|
|
"captureQueuedBadge": "Queued {count}",
|
|
"@captureQueuedBadge": { "placeholders": { "count": { "type": "int" } } },
|
|
"captureEnqueuedFeedback": "Added to queue",
|
|
"captureExitTitle": "Leave shooting?",
|
|
"captureExitBody": "{count} photo(s) are still uploading. Tasks will continue in the background after you leave.",
|
|
"@captureExitBody": { "placeholders": { "count": { "type": "int" } } },
|
|
"captureKeepShooting": "Keep shooting",
|
|
"captureExitConfirm": "Leave",
|
|
"cameraPermissionDenied": "Camera unavailable. Allow camera access in system settings",
|
|
"cameraInitFailed": "Camera failed to initialize",
|
|
"uploadActionCapture": "Capture and upload",
|
|
"uploadActionPick": "Pick from gallery",
|
|
"uploadAction": "Upload",
|
|
"uploadEnqueuedCount": "Added {count} photo(s) to the upload queue",
|
|
"@uploadEnqueuedCount": { "placeholders": { "count": { "type": "int" } } },
|
|
"uploadPickNone": "No photos selected",
|
|
"albumManagePhotos": "Manage photos",
|
|
"albumTakeFirstPhoto": "Take the first photo",
|
|
"albumUploadDisabledHint": "Uploads are off for this album. New photos cannot be added right now",
|
|
"albumRecentPhotos": "Recent uploads",
|
|
"photoFilterAll": "All",
|
|
"photoFilterFailed": "Failed",
|
|
"photosScopeOwnHint": "Collaborator view: only photos you uploaded are shown",
|
|
"photosEmptyFiltered": "No photos match this filter",
|
|
"photoHide": "Hide",
|
|
"photoUnhide": "Unhide",
|
|
"photoDeleteConfirmTitle": "Delete this photo?",
|
|
"photoDeleteConfirmBody": "The cloud photo will be deleted. This cannot be undone.",
|
|
"photoHiddenToast": "Hidden",
|
|
"photoUnhiddenToast": "Unhidden",
|
|
"photoDeletedToast": "Deleted",
|
|
"photoReload": "Reload",
|
|
"photoPreviewUnavailable": "Image unavailable",
|
|
"albumsSubtitle": "Organize and manage event photos",
|
|
"actionPhotos": "Photos",
|
|
"actionMembers": "Members",
|
|
"actionCategories": "Categories",
|
|
"actionShare": "Share",
|
|
"recentPhotos": "Recent photos",
|
|
"seeAllPhotos": "See all",
|
|
"editAlbum": "Edit album",
|
|
"manageMembers": "Manage members",
|
|
"shareAlbum": "Share album",
|
|
"emptyAlbumTitle": "Ready for your first photo",
|
|
"emptyAlbumSubtitle": "Photos you take or pick will appear here",
|
|
"processingPhotos": "Processing...",
|
|
"readonlyMember": "You can browse photos shared by others",
|
|
"moreActions": "More actions"
|
|
}
|