Files
picpeak/frontend/src/i18n/locales/en.json
T
Paul Nothaft 7d6d2f5688 feat: add thumbnail settings UI to admin settings page (#206)
Add a new "Thumbnails" tab in the admin settings page allowing users to
configure thumbnail dimensions, quality, format, and fit mode from the UI.
Also fix backend route column name mismatch (key/value → setting_key/setting_value)
that caused a 500 error, and add a button to regenerate all thumbnails.
2026-03-04 22:55:14 +01:00

2298 lines
99 KiB
JSON

{
"userManagement": {
"title": "User Management",
"subtitle": "Manage admin users and invitations",
"loading": "Loading users...",
"loadError": "Failed to load users. Please try again.",
"inviteUser": "Invite User",
"createInvitation": "Create Invitation",
"email": "Email Address",
"emailPlaceholder": "[email protected]",
"role": "Role",
"selectRole": "Select a role",
"sendInvitation": "Send Invitation",
"editUser": "Edit User",
"editingUser": "Editing user",
"saveChanges": "Save Changes",
"deactivateUser": "Deactivate User",
"cancelInvitation": "Cancel Invitation",
"invitationSent": "Invitation sent successfully",
"invitationError": "Failed to send invitation",
"invitationCancelled": "Invitation cancelled",
"cancelInvitationError": "Failed to cancel invitation",
"userUpdated": "User updated successfully",
"updateUserError": "Failed to update user",
"userDeactivated": "User deactivated successfully",
"deactivateUserError": "Failed to deactivate user",
"noRole": "No Role",
"neverLoggedIn": "Never logged in",
"expired": "Expired",
"deactivate": "Deactivate",
"cancel": "Cancel",
"tabs": {
"users": "Users",
"invitations": "Invitations"
},
"stats": {
"totalUsers": "Total Users",
"activeUsers": "Active Users",
"pendingInvitations": "Pending Invitations",
"inactiveUsers": "Inactive Users"
},
"status": {
"active": "Active",
"inactive": "Inactive"
},
"table": {
"user": "User",
"email": "Email",
"role": "Role",
"status": "Status",
"lastLogin": "Last Login",
"actions": "Actions",
"invitedBy": "Invited By",
"expires": "Expires"
},
"validation": {
"emailRequired": "Email is required",
"emailInvalid": "Invalid email format",
"roleRequired": "Role is required"
},
"searchUsersPlaceholder": "Search users...",
"searchInvitationsPlaceholder": "Search invitations...",
"noUsers": "No users found",
"noUsersFound": "No users match your search",
"noInvitations": "No pending invitations",
"noInvitationsFound": "No invitations match your search",
"confirmDeactivate": {
"title": "Deactivate User",
"message": "Are you sure you want to deactivate {{name}}? They will no longer be able to log in."
},
"confirmCancelInvitation": {
"title": "Cancel Invitation",
"message": "Are you sure you want to cancel the invitation for {{email}}?"
}
},
"common": {
"loading": "Loading...",
"error": "Error",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"add": "Add",
"search": "Search",
"filter": "Filter",
"sortBy": "Sort by",
"yes": "Yes",
"no": "No",
"back": "Back",
"next": "Next",
"previous": "Previous",
"close": "Close",
"logout": "Logout",
"menu": "Menu",
"change": "Change",
"remove": "Remove",
"download": "Download",
"downloadAll": "Download All",
"uploading": "Uploading...",
"uploaded": "Uploaded",
"photo": "photo",
"photos": "photos",
"video": "video",
"videos": "videos",
"media": "media",
"restore": "Restore",
"actions": "Actions",
"refresh": "Refresh",
"preview": "Preview",
"processing": "Processing...",
"upload": "Upload",
"days": "days",
"customize": "Customize",
"hide": "Hide",
"unknown": "Unknown",
"notSet": "Not set",
"of": "of",
"up": "Up",
"select": "Select",
"selected": "Selected",
"chunk": "Chunk",
"optional": "optional"
},
"upload": {
"photoCategory": "Photo Category",
"noCategory": "No category",
"eventSpecific": "(Event specific)",
"clickToUpload": "Click to upload or drag and drop",
"fileRequirements": "JPEG, PNG or WebP (max 50MB per file, {{limit}} files per upload)",
"fileRequirementsMedia": "JPEG, PNG or WebP images, plus MP4/MOV/WEBM videos (max 50MB per file, {{limit}} files per upload)",
"unsupportedFiles": "Some files were skipped because the format is not supported (use JPEG/PNG/WebP/MP4/MOV/WEBM).",
"selectedFiles": "Selected files",
"uploading": "Uploading...",
"uploadComplete": "Upload complete!",
"uploadFailed": "Upload failed",
"someFilesFailed": "Some files failed to upload",
"uploadPhotos": "Upload Photos",
"uploadMedia": "Upload Photos & Videos",
"importExternal": "Import from External Folder",
"externalImportInfo": "All pictures from the selected folder will be imported.",
"selectExternalFolder": "Select external folder under /external-media",
"importFromSelectedFolder": "Import from selected folder",
"maxFilesReached": "Maximum {{limit}} files allowed",
"someFilesSkipped": "Only {{allowed}} more files can be added (limit {{limit}})",
"tooManyFiles": "Maximum {{limit}} files can be uploaded at once",
"limitInfo": "{{selected}} of {{limit}} files selected ({{remaining}} remaining)",
"limitReached": "Upload limit reached ({{limit}} files per batch)",
"uploadingChunks": "Uploading {{count}} files in {{total}} batches...",
"mediaCategory": "Media category",
"uploadAction": "Upload {{count}} files"
},
"navigation": {
"dashboard": "Dashboard",
"events": "Events",
"archives": "Archives",
"settings": "Settings",
"eventTypes": "Event Types",
"branding": "Branding",
"analytics": "Analytics",
"emailSettings": "Email Settings",
"backup": "Backup & Restore",
"cmsPages": "CMS Pages",
"users": "Users"
},
"archives": {
"title": "Archives",
"subtitle": "Manage archived photo galleries",
"loadingArchives": "Loading archives...",
"totalArchives": "Total Archives",
"storageUsed": "Storage Used",
"totalPhotos": "Total Photos",
"avgArchiveSize": "Avg Archive Size",
"searchPlaceholder": "Search archives...",
"allTypes": "All Types",
"wedding": "Wedding",
"birthday": "Birthday",
"corporate": "Corporate",
"other": "Other",
"sortByDate": "Sort by Date",
"sortByName": "Sort by Name",
"sortBySize": "Sort by Size",
"tableHeaders": {
"event": "Event",
"type": "Type",
"archivedDate": "Archived Date",
"size": "Size",
"photos": "Photos",
"actions": "Actions"
},
"noArchivesFound": "No archives found",
"eventDateNA": "Event date: N/A",
"processing": "Processing...",
"download": "Download",
"restore": "Restore",
"delete": "Delete",
"showing": "Showing {{from}} to {{to}} of {{total}} archives",
"page": "Page {{current}} of {{total}}",
"storageManagement": "Storage Management",
"storageInfo": "Archives are stored permanently unless manually deleted. Consider implementing a retention policy to manage storage costs.",
"confirmRestore": "Are you sure you want to restore this archive? The event will become active again.",
"confirmDelete": "Are you sure you want to permanently delete this archive? This action cannot be undone.",
"restoreSuccess": "Archive restored successfully",
"deleteSuccess": "Archive deleted permanently"
},
"auth": {
"login": "Login",
"password": "Password",
"enterPassword": "Enter Gallery Password",
"passwordPlaceholder": "Enter the gallery password",
"invalidPassword": "Invalid password",
"wrongPassword": "Incorrect password. Please check your password and try again.",
"tooManyAttempts": "Too many failed login attempts. Please try again later.",
"sessionExpired": "Session expired",
"pleaseEnterPassword": "Please enter a password",
"passwordHint": "The password was provided by the event organizer. Contact them if you don't have it."
},
"gallery": {
"title": "Photo Gallery",
"welcomeMessage": "Welcome Message",
"expiresOn": "Expires on",
"expires": "Expires",
"expired": "Expired",
"daysRemaining": "{{days}} days remaining",
"dayRemaining": "1 day remaining",
"hoursRemaining": "{{hours}} hours remaining",
"expiredMessage": "This gallery expired on {{date}}",
"contactOrganizer": "Please contact the event organizer if you need access to these photos",
"searchPhotos": "Search photos by filename...",
"sortByDate": "Sort by Date",
"sortByName": "Sort by Name",
"sortBySize": "Sort by Size",
"allPhotos": "All Photos",
"filter": "Filter",
"feedbackFilter": "Feedback Filter",
"all": "All",
"liked": "Liked",
"favorited": "Favorited",
"favorites": "Favorites",
"downloadSelected": "Download Selected",
"shareGallery": "Share Gallery",
"needHelp": "Need help? Contact us at",
"noPhotosFound": "No photos found",
"failedToLoad": "Failed to load photos",
"tryAgain": "Try Again",
"loading": "Loading gallery...",
"expiredOn": "This gallery expired on {{date}}.",
"contactOrganizer": "Please contact the event organizer if you need access to these photos.",
"expiresIn": "Gallery expires in {{count}} day",
"expiresIn_plural": "Gallery expires in {{count}} days",
"downloadBefore": "Download your photos before they're no longer available.",
"publicGalleryTitle": "This gallery is publicly accessible",
"publicGallerySubtitle": "Loading the photos now...",
"viewGallery": "View Gallery",
"downloadAll": "Download All",
"downloading": "Downloading {{count}} photo...",
"downloading_plural": "Downloading {{count}} photos...",
"downloadedPhotos": "Downloaded {{count}} photo!",
"downloadedPhotos_plural": "Downloaded {{count}} photos!",
"downloadError": "Some photos failed to download",
"selectPhotos": "Select Photos",
"cancelSelection": "Cancel Selection",
"photosSelected": "{{count}} selected",
"selectAll": "Select All",
"deselectAll": "Deselect All",
"downloadSelected": "Download {{count}} Selected",
"deleteSelected": "Delete Selected",
"photosCount": "{{count}} photo",
"photosCount_plural": "{{count}} photos",
"searchByFilename": "Search by filename...",
"uncategorized": "Uncategorized",
"sortAscending": "Sort ascending",
"sortDescending": "Sort descending",
"remaining": "remaining",
"selectPhotosHint": "Tip: Use Ctrl+Click (Cmd+Click on Mac) to quickly select multiple photos",
"filters": "Filters",
"openFilters": "Open filters",
"toggleSidebar": "Toggle sidebar",
"toggleMenu": "Toggle menu",
"allCategories": "All Categories",
"categories": "Categories",
"mediaType": "Media",
"allMedia": "All media",
"photosOnly": "Photos",
"videosOnly": "Videos",
"download": "Download",
"noMedia": "No media uploaded yet",
"searchPlaceholder": "Search photos...",
"sortBy": "Sort By",
"sortByDate": "Sort by Date",
"sortByCaptureDate": "Sort by Capture Date",
"sortByName": "Sort by Name",
"sortBySize": "Sort by Size",
"sortByRating": "Sort by Rating",
"photoGallery": "Photo Gallery",
"photos": "Photos",
"allRightsReserved": "All rights reserved",
"searchMemories": "Search memories...",
"thankYou": "Thank You",
"thankYouMessage": "For being part of our story and making our special day unforgettable.",
"feedback": {
"title": "Feedback",
"shareThoughts": "Share your thoughts on \"{{name}}\"",
"rateThisMoment": "Rate this moment",
"comments": "Comments",
"noComments": "No comments yet. Be the first!",
"yourName": "Your name",
"yourEmail": "Your email",
"writeLovelyNote": "Write a lovely note...",
"postComment": "Post Comment",
"anonymous": "Anonymous"
}
},
"categories": {
"title": "Photo Categories",
"global": "Global Categories",
"eventSpecific": "Event-Specific Categories",
"addCategory": "Add Category",
"organizationInfo": "Organize your photos into categories. Categories help guests navigate and find specific types of photos.",
"eventSpecificCategories": "Event-Specific Categories",
"noEventSpecificCategories": "No event-specific categories. Global categories are available by default.",
"globalCategoriesAlwaysAvailable": "Global Categories (always available):",
"deleteCategoryTitle": "Delete category",
"categoryCreatedSuccess": "Category created successfully",
"categoryDeletedSuccess": "Category deleted successfully",
"failedToCreateCategory": "Failed to create category",
"failedToDeleteCategory": "Failed to delete category",
"categoryName": "Category name",
"noCategory": "No category",
"noCategoriesYet": "No categories yet. Create your first category to organize photos.",
"deleteConfirm": "Are you sure you want to delete \"{{name}}\"?",
"cannotDelete": "Cannot delete category with photos. Please reassign photos first.",
"setCoverPhoto": "Set Cover Photo",
"removeCoverPhoto": "Remove Cover Photo",
"coverPhotoSet": "Cover photo set successfully",
"coverPhotoRemoved": "Cover photo removed",
"failedToSetCoverPhoto": "Failed to set cover photo",
"categoryHeroHint": "If no cover photo is set for a category, the default hero photo will be used."
},
"events": {
"title": "Events",
"create": "Create",
"createEvent": "Create Event",
"totalViews": "Total Views",
"totalDownloads": "Total Downloads",
"uniqueVisitors": "Unique Visitors",
"createNewEvent": "Create New Event",
"setupNewGallery": "Set up a new photo gallery for your event",
"createNewEventSubtitle": "Set up a new photo gallery for your event",
"eventNamePlaceholder": "e.g., John & Jane's Wedding",
"welcomeMessageOptional": "Welcome Message (Optional)",
"welcomeMessagePlaceholder": "Welcome to our special day! Feel free to download and share these memories...",
"hostEmailPlaceholder": "[email protected]",
"adminEmailPlaceholder": "[email protected]",
"securityAndAccess": "Security & Access",
"accessAndSecurity": "Access & Security",
"enterPassword": "Enter password",
"passwordPlaceholder": "Enter a secure password",
"confirmPasswordPlaceholder": "Confirm password",
"galleryExpiresOn": "Gallery will expire on {{date}}",
"guestsWillReceiveWarning": "Guests will receive a warning email 7 days before expiration.",
"types": {
"wedding": "Wedding",
"birthday": "Birthday",
"corporate": "Corporate",
"other": "Other"
},
"themes": {
"default": "Default",
"oceanBlue": "Ocean Blue",
"royalPurple": "Royal Purple",
"roseGold": "Rose Gold",
"sunsetAmber": "Sunset Amber"
},
"eventDetails": "Event Details",
"eventName": "Event Name",
"eventType": "Event Type",
"eventDate": "Event Date",
"hostEmail": "Customer Email",
"hostName": "Customer Name",
"hostNamePlaceholder": "John Smith",
"adminEmail": "Admin Email",
"adminNotificationEmail": "Admin Notification Email",
"expirationDate": "Expiration Date",
"active": "Active",
"archived": "Archived",
"photoCount": "{{count}} photos",
"totalSize": "Total Size",
"shareLink": "Share Link",
"copyLink": "Copy Link",
"linkCopied": "Link copied!",
"viewGallery": "View Gallery",
"uploadPhotos": "Upload Photos",
"archiveEvent": "Archive Event",
"archiveConfirm": "Are you sure you want to archive this event? This action cannot be undone.",
"extendExpiration": "Extend {{days}} Days",
"backToEvents": "Back to Events",
"loadingEventDetails": "Loading event details...",
"saveChanges": "Save Changes",
"eventExpired": "This event has expired",
"eventExpiresIn": "This event expires in {{days}} days",
"guestsNoAccess": "Guests can no longer access the gallery. Consider archiving this event.",
"warningEmailsSent": "Warning emails have been sent to the customer.",
"overview": "Overview",
"photos": "Photos",
"categories": "Categories",
"eventInformation": "Event Information",
"sourceMode": "Source Mode",
"sourceModeManaged": "Managed (upload to PicPeak)",
"sourceModeReference": "Reference external folder",
"sourceModeHelp": "Use managed mode for direct uploads or point to a mounted /external-media folder when using local storage.",
"externalFolder": "External Folder",
"externalFolderHint": "These folders are read from the /external-media mount inside your container or host.",
"externalFolderRequired": "Please select an external folder before saving.",
"welcomeMessage": "Welcome Message",
"noWelcomeMessage": "No welcome message set",
"created": "Created",
"expires": "Expires",
"shareWithGuests": "Share this link with guests. They'll need the password to access the gallery.",
"shareWithGuestsPublic": "Share this link with guests. No password is required for this gallery.",
"resetGalleryPassword": "Reset Gallery Password",
"resendCreationEmail": "Resend Creation Email",
"creationEmailResent": "Creation email has been queued for sending",
"failedToResendEmail": "Failed to resend creation email",
"photoStatistics": "Photo Statistics",
"totalPhotos": "Total Photos",
"managePhotos": "Manage Photos",
"actions": "Actions",
"archivingInfo": "Archiving will create a ZIP file of all photos and remove the gallery from public access.",
"statistics": "Statistics",
"views": "Views",
"downloads": "Downloads",
"uniqueVisitors": "Unique Visitors",
"noStatistics": "No statistics available yet",
"archiveStatus": "Archive Status",
"archivedOn": "Archived On",
"downloadArchive": "Download Archive",
"loadingPhotos": "Loading photos...",
"photoCategories": "Photo Categories",
"organizeCategoriesInfo": "Organize your photos into categories. Categories help guests navigate and find specific types of photos.",
"categoriesTip": "Tip: Categories are specific to each event. You can also create global categories in Settings.",
"contactInformation": "Contact Information",
"hostEmailHelp": "Customer will receive gallery creation and expiration notifications",
"adminEmailHelp": "Will receive system notifications and archive confirmations",
"securityAccess": "Security & Access",
"galleryPassword": "Gallery Password",
"requirePasswordToggle": "Require password for this gallery",
"requirePasswordToggleHelp": "Disable this if you want to share the gallery without a password. Anyone with the link will be able to view the photos.",
"publicGalleryWarning": "Public galleries are accessible to anyone with the link. Consider enabling download watermarks and monitoring activity.",
"passwordHelperText": "You can use dates like \"04.07.2025\" or any text with 6+ characters",
"confirmPassword": "Confirm Password",
"showPasswords": "Show passwords",
"newPasswordLabel": "New Gallery Password",
"gallerySettings": "Gallery Settings",
"themeAndStyle": "Theme & Style",
"colorTheme": "Color Theme",
"galleryExpiration": "Gallery Expiration",
"galleryExpiresIn": "Gallery Expires In",
"daysAfterEvent": "days after event date",
"expiresOn": "Expires on",
"galleryWillExpireOn": "Gallery will expire on {{date}}",
"expirationWarning": "Guests will receive a warning email 7 days before expiration.",
"noExpiration": "No Expiration",
"noExpirationHelp": "This gallery will remain active until manually archived.",
"userUploads": "User Upload Settings",
"allowUserUploads": "Allow guests to upload photos",
"allowUserUploadsHelp": "Enable guests to upload their own photos to this gallery",
"allowUserUploadsDescription": "Enable guests to upload their own photos to this gallery",
"uploadCategory": "Upload Category",
"selectCategory": "Select a category for user uploads",
"uploadCategoryHelp": "All user-uploaded photos will be added to this category",
"userUploadWarning": "User uploads will be moderated and can be removed by admins at any time.",
"allowDownloads": "Allow photo downloads",
"allowDownloadsHelp": "Allow guests to download photos from this gallery",
"downloadPermissions": "Download Permissions",
"downloadsEnabled": "Downloads Enabled",
"downloadsDisabled": "Downloads Disabled",
"downloadProtection": "Download Protection",
"disableRightClick": "Block right-click menu",
"watermarkDownloads": "Add watermark to downloads",
"enableDevtoolsProtection": "Detect developer tools",
"useCanvasRendering": "Canvas rendering (advanced protection)",
"protectionInfo": "Protection features help prevent unauthorized downloads but cannot block all methods.",
"protectionLevelBasic": "Basic - Right-click blocking only",
"protectionLevelStandard": "Standard - Keyboard shortcuts blocked",
"protectionLevelEnhanced": "Enhanced - Print screen detection",
"protectionLevelMaximum": "Maximum - DevTools detection & canvas rendering",
"heroLogoSettings": "Hero Logo Settings",
"heroLogoVisible": "Display logo in hero section",
"heroLogoSize": "Logo Size",
"heroLogoSizeSmall": "Small",
"heroLogoSizeMedium": "Medium",
"heroLogoSizeLarge": "Large",
"heroLogoSizeXLarge": "Extra Large",
"heroLogoPosition": "Logo Position",
"heroLogoPositionTop": "Top (above title)",
"heroLogoPositionCenter": "Center (between title and dates)",
"heroLogoPositionBottom": "Bottom (below dates)",
"heroLogoInfo": "These settings apply when the gallery uses the Hero layout. You can hide the logo or customize its size and position.",
"eventCustomLogo": "Custom Event Logo",
"eventCustomLogoDescription": "Upload a custom logo for this event. This overrides the global branding logo for this gallery only.",
"uploadEventLogo": "Upload Logo",
"replaceLogo": "Replace",
"removeLogo": "Remove",
"eventLogoUploaded": "Event logo uploaded successfully",
"eventLogoUploadFailed": "Failed to upload event logo",
"eventLogoRemoved": "Event logo removed successfully",
"eventLogoRemoveFailed": "Failed to remove event logo",
"heroLogoVisibleLabel": "Logo visible",
"heroLogoSizeLabel": "Size",
"heroLogoPositionLabel": "Position",
"heroLogoHidden": "Logo hidden",
"heroPhoto": "Hero Photo",
"heroPhotoHelp": "Select a default hero photo for the gallery. You can override this per category.",
"selectHeroPhoto": "Select Hero Photo",
"noHeroPhotoSelected": "No hero photo selected",
"heroPhotoSelected": "Hero photo selected",
"heroImageAnchor": "Hero Image Crop Position",
"heroImageAnchorDescription": "Click on the image to set the focal point for cropping.",
"heroImageAnchorTop": "Top",
"heroImageAnchorCenter": "Center",
"heroImageAnchorBottom": "Bottom",
"heroPreview": "Hero preview",
"noPhotosAvailable": "No photos available",
"processingRequest": "Processing your request...",
"eventTypeWedding": "Wedding",
"eventTypeBirthday": "Birthday",
"eventTypeCorporate": "Corporate",
"eventTypeOther": "Other",
"days30": "30 days",
"days60": "60 days",
"days90": "90 days",
"days365": "1 year",
"inactive": "Inactive",
"expired": "Expired",
"daysLeft": "{{count}}d left",
"daysLeft_plural": "{{count}}d left",
"subtitle": "Manage your photo galleries and events",
"loadingEvents": "Loading events...",
"failedToLoadEvents": "Failed to load events",
"tryAgain": "Try Again",
"bulkArchiveSuccess": "Successfully archived {{count}} events",
"bulkArchivePartial": "Archived {{success}} events, {{failed}} failed",
"searchEventsPlaceholder": "Search events...",
"all": "All",
"expiring": "Expiring",
"eventsSelected": "{{count}} event selected",
"eventsSelected_plural": "{{count}} events selected",
"clear": "Clear",
"archiveSelected": "Archive Selected",
"publicAccess": "Public access",
"passwordProtected": "Password protected",
"newPasswordRequired": "Please set a password before enabling protection.",
"event": "Event",
"type": "Type",
"date": "Date",
"status": "Status",
"expires": "Expires",
"actions": "Actions",
"noEventsFound": "No events found",
"stats": {
"totalEvents": "Total Events",
"activeEvents": "Active Events",
"totalPhotos": "Total Photos",
"expiringEvents": "Expiring Soon"
},
"viewDetails": "View Details",
"archiveEventAction": "Archive Event",
"downloadArchiveAction": "Download Archive",
"deleteEvent": "Delete Event",
"deleteEventConfirm": "Are you sure you want to delete this event?",
"downloadArchiveSoon": "Download archive coming soon",
"failedToLoadEvents": "Failed to load events",
"tryAgain": "Try Again",
"eventExpiredMessage": "This event has expired",
"guestsCannotAccessGallery": "Guests can no longer access the gallery. Consider archiving this event.",
"warningEmailsHaveBeenSent": "Warning emails have been sent to the customer.",
"extendSevenDays": "Extend 7 Days",
"overview": "Overview",
"eventInformation": "Event Information",
"welcomeMessageLabel": "Welcome Message",
"noWelcomeMessageSet": "No welcome message set",
"hostEmail": "Customer Email",
"adminEmail": "Admin Email",
"createdOn": "Created",
"expires": "Expires",
"daysLeft": "({{count}} day left)",
"daysLeft_plural": "({{count}} days left)",
"shareLink": "Share Link",
"copy": "Copy",
"copied": "Copied!",
"uploadPhotos": "Upload Photos",
"photoCategories": "Photo Categories",
"organizingPhotosInfo": "Organize your photos into categories. Categories help guests navigate and find specific types of photos.",
"categoriesTip": "Tip: Categories are specific to each event. You can create custom categories like \"Ceremony\", \"Reception\", \"Portraits\", etc.",
"archiveStatusTitle": "Archive Status",
"archivedOn": "Archived On",
"downloadingArchive": "Downloading {{name}} archive...",
"downloadStarted": "Download started",
"failedToDownloadArchive": "Failed to download archive",
"statisticsNotAvailable": "No statistics available yet",
"photoFilters": "Photo Filters",
"noStatisticsAvailableYet": "No statistics available yet",
"addPlus": "Add+",
"galleryTheme": "Gallery Theme",
"customizeTheme": "Customize Theme",
"noThemeSet": "No theme configured",
"customizingTheme": "Customizing gallery theme",
"customizingThemeFor": "Customizing theme for {{event}}",
"customCssTemplate": "Custom CSS Template",
"customCssTemplateDesc": "Apply a custom CSS template to style the gallery with unique visual effects.",
"noTemplate": "No Template",
"useThemeOnly": "Use theme preset only",
"customTemplate": "Custom Template",
"rename": {
"button": "Rename",
"title": "Rename Event",
"validating": "Validating new name...",
"renamingFiles": "Renaming files...",
"complete": "Complete!",
"failed": "Rename failed",
"filesRenamed": "{{count}} files updated",
"confirm": "Rename Event"
}
},
"settings": {
"title": "System Settings",
"subtitle": "Configure system-wide settings and preferences",
"loadingSettings": "Loading settings...",
"general": {
"title": "General",
"siteConfiguration": "Site Configuration",
"siteUrl": "Site URL",
"siteUrlHelp": "Used for generating gallery links in emails",
"defaultExpiration": "Default Expiration (days)",
"defaultExpirationHelp": "How long galleries remain active by default",
"maxFileSize": "Max File Size (MB)",
"maxFileSizeHelp": "Maximum size per uploaded photo",
"maxFilesPerUpload": "Max Files per Upload",
"maxFilesPerUploadHelp": "Maximum number of photos allowed in a single upload batch (1-{{max}}).",
"allowedFileTypes": "Allowed File Types",
"allowedFileTypesHelp": "Comma-separated list of file extensions",
"featureToggles": "Feature Toggles",
"enableAnalytics": "Enable analytics tracking",
"enableRegistration": "Allow self-registration for admins",
"enableShortGalleryUrls": "Use short gallery URLs",
"enableShortGalleryUrlsHelp": "Removes the event slug from new share links while keeping existing links working.",
"maintenanceMode": "Enable maintenance mode",
"language": "Language",
"defaultLanguage": "Default Language",
"defaultLanguageHelp": "Language shown to guests before login",
"defaultWelcomeMessage": "Default Welcome Message",
"welcomeMessage": "Welcome Message",
"welcomeMessagePlaceholder": "Enter a default welcome message that will be included in gallery creation emails",
"welcomeMessageHelp": "This message will be included in all gallery creation emails unless overridden when creating an event",
"saveSettings": "Save General Settings",
"saveGeneralSettings": "Save General Settings",
"dateTimeFormat": "Date & Time Format",
"dateFormat": "Date Format",
"dateFormatHelp": "How dates are displayed in emails and throughout the application",
"accountSection": "Admin Account",
"accountUsername": "Admin Username",
"accountUsernameHelp": "Displayed in the admin interface and used in activity logs.",
"accountUsernameRequired": "Username is required",
"accountUsernameLength": "Username must be at least 3 characters",
"accountEmail": "Admin Email",
"accountEmailHelp": "Used for login and receiving security notifications.",
"accountEmailRequired": "Email address is required",
"accountEmailInvalid": "Enter a valid email address",
"accountSaveButton": "Save account details",
"accountSaveSuccess": "Account details updated"
},
"publicSite": {
"tabLabel": "Public Site",
"badge": "Public Landing",
"title": "Public Landing Page",
"subtitle": "Publish a customized landing page for guests when they visit your domain.",
"loading": "Loading public site settings...",
"enabled": "Enabled",
"disabled": "Disabled",
"htmlLabel": "Landing Page HTML",
"htmlPlaceholder": "Provide the HTML markup for your landing page hero, sections, and calls to action.",
"htmlHelp": "Raw HTML is sanitized on save. Unsafe tags, inline scripts, and disallowed attributes are removed automatically. Tokens such as {{company_name}}, {{company_tagline}}, and {{support_email}} will be substituted with values from Branding settings.",
"cssLabel": "Custom CSS",
"cssPlaceholder": "Optional CSS overrides to adjust layout, colors, or typography.",
"cssHelp": "Imports and JavaScript URLs are stripped. Use standard CSS selectors to override the default styling.",
"saveCta": "Save public site",
"saving": "Saving...",
"saveSuccess": "Public site settings saved.",
"saveError": "Failed to save public site settings.",
"resetCta": "Reset to default",
"resetting": "Resetting...",
"resetSuccess": "Public site template reset to defaults.",
"resetError": "Failed to reset public site template.",
"previewTitle": "Live Preview",
"previewSandboxed": "Sandboxed preview",
"previewDisabled": "Enable the public site to see the live preview.",
"sanitizationNotice": "Scripts, embedded frames, and unsafe attributes are removed before publishing. Only safe HTML, links, and images are allowed.",
"htmlRequired": "Provide HTML content before enabling the public site."
},
"storage": {
"title": "Storage",
"overview": "Storage Overview",
"totalUsed": "Total Used",
"archiveStorage": "Archive Storage",
"storageLimit": "Storage Limit",
"storageLimitHelper": "Set a limit for photo storage usage. This limit is advisory and will highlight when reached.",
"softLimitInputLabel": "Limit (GB)",
"softLimitHelper": "Enter the preferred maximum storage usage in gigabytes.",
"recommendedSoftLimit": "Suggested Limit",
"diskCapacity": "Disk Capacity",
"diskCapacityReported": "Disk Capacity (reported)",
"diskAvailable": "Available",
"diskAvailableReported": "Available (reported)",
"diskFree": "Free",
"diskFreeReported": "Free (reported)",
"diskMetricsUnavailable": "Disk metrics are not available in Docker Desktop or virtualized environments.",
"applyRecommended": "Use recommended",
"applyAvailable": "Match available",
"invalidSoftLimit": "Enter a valid number for the limit.",
"saveSoftLimit": "Save limit",
"limitNotEnforced": "This limit is advisory only and is not enforced automatically.",
"overrideTitle": "Manual capacity override",
"diskOverrideEnvNote": "Disk capacity is controlled by environment variables and cannot be edited here.",
"diskOverrideSettingsHelp": "Set custom capacity values when Docker reports unrealistic figures.",
"overrideCapacityLabel": "Total capacity (GB)",
"overrideCapacityHelper": "Leave blank to use the automatic reading.",
"overrideAvailableLabel": "Available space (GB)",
"overrideAvailableHelper": "Optional. Leave blank to calculate from total capacity minus used storage.",
"saveOverride": "Save capacity override",
"capacityRequiredForAvailable": "Enter a total capacity before setting available space.",
"availableExceedsCapacity": "Available space cannot exceed the total capacity.",
"storageUsage": "Storage Usage",
"storageByEvent": "Storage by Event",
"storageManagement": "Storage Management",
"storageManagementHelp": "Consider archiving or deleting old events to free up storage space. Archived events are compressed and use less storage than active galleries.",
"noEventsUsingStorage": "No events using storage",
"unlimited": "Unlimited"
},
"security": {
"title": "Security",
"passwordSettings": "Password Settings",
"minPasswordLength": "Minimum Password Length",
"minPasswordLengthHelp": "Minimum number of characters for gallery passwords",
"passwordComplexity": "Password Complexity",
"passwordComplexityHelp": "Security level required for gallery passwords",
"complexitySimple": "Simple (6+ chars, any text)",
"complexityModerate": "Moderate (8+ chars, mixed case/numbers)",
"complexityStrong": "Strong (12+ chars, uppercase/lowercase/numbers)",
"complexityVeryStrong": "Very Strong (12+ chars, all character types)",
"sessionAuth": "Session & Authentication",
"sessionTimeout": "Session Timeout (minutes)",
"sessionTimeoutHelp": "Admin session timeout in minutes",
"maxLoginAttempts": "Max Login Attempts",
"maxLoginAttemptsHelp": "Maximum failed login attempts per IP before lockout",
"attemptWindowMinutes": "Attempt Window (minutes)",
"attemptWindowMinutesHelp": "How long to look back when counting failed login attempts",
"lockoutDurationMinutes": "Lockout Duration (minutes)",
"lockoutDurationMinutesHelp": "How long the gallery or account stays locked after too many failures",
"enable2FA": "Enable two-factor authentication for admins",
"recaptchaSettings": "reCAPTCHA Settings",
"enableRecaptcha": "Enable reCAPTCHA for login forms",
"siteKey": "Site Key",
"siteKeyHelp": "Your reCAPTCHA v2 site key (public)",
"secretKey": "Secret Key",
"secretKeyHelp": "Your reCAPTCHA v2 secret key (keep private)",
"recaptchaHelp": "Get your reCAPTCHA keys from",
"saveSettings": "Save Security Settings",
"saveSecuritySettings": "Save Security Settings"
},
"categories": {
"title": "Categories",
"about": "About Photo Categories",
"aboutText": "Global categories are available for all events. You can also create event-specific categories when editing individual events. Categories help organize photos and allow guests to filter photos by type in the gallery view."
},
"systemStatus": {
"title": "System Status",
"storageOverview": "Storage Overview",
"systemInfo": "System Information",
"databaseInfo": "Database Information",
"platform": "Platform",
"nodeVersion": "Node Version",
"uptime": "Uptime",
"cpuCores": "CPU Cores",
"memoryUsage": "Memory Usage",
"memoryUsed": "Memory Used",
"photos": "Photos",
"admins": "Admins",
"dbSize": "Database Size",
"services": "Background Services",
"fileWatcher": "File Watcher",
"fileWatcherDesc": "Monitors for new photos",
"expirationChecker": "Expiration Checker",
"expirationCheckerDesc": "Archives expired galleries",
"emailProcessor": "Email Processor",
"emailProcessorDesc": "Sends queued emails",
"emailQueue": "Email Queue Status",
"pending": "Pending",
"sent": "Sent",
"failed": "Failed",
"lastUpdate": "Last update"
},
"updateNotifications": {
"title": "Update Notifications",
"description": "Receive email notifications when new versions of PicPeak are available.",
"enableEmails": "Enable email notifications",
"enableEmailsDesc": "Send email to admins when a new version is available",
"recipients": "Email Recipients",
"recipientsPlaceholder": "[email protected], [email protected]",
"recipientsHelper": "Comma-separated email addresses. Leave empty to send to all admin users.",
"lastNotified": "Last notification sent for version: {{version}}",
"checkNow": "Check & Notify",
"sendTest": "Send Test Email",
"saved": "Settings saved",
"saveError": "Failed to save settings",
"emailSent": "Notification email sent to {{count}} recipients",
"emailFailed": "Failed to send notification",
"checkSuccess": "Notification sent for new version",
"checkNoAction": "No notification needed: {{reason}}",
"checkError": "Failed to check for updates"
},
"events": {
"title": "Event Creation",
"requiredFields": "Required Fields",
"requiredFieldsDescription": "Configure which contact fields are required when creating new events.",
"requireCustomerName": "Require customer name",
"requireCustomerNameHelp": "Customer name must be provided for new events",
"requireCustomerEmail": "Require customer email",
"requireCustomerEmailHelp": "Customer email must be provided for new events",
"customerEmailWarning": "Required for sending gallery invitations",
"requireAdminEmail": "Require admin email",
"requireAdminEmailHelp": "Admin email must be provided for new events",
"adminEmailWarning": "Required for receiving event notifications",
"requireEventDate": "Require event date",
"requireEventDateHelp": "Event date must be provided when creating events",
"eventDateWarning": "Gallery URLs will use random identifiers instead of dates",
"requireExpiration": "Require expiration date",
"requireExpirationHelp": "Galleries must have an expiration date",
"expirationWarning": "Galleries without expiration will remain active until manually archived",
"saveSettings": "Save Event Settings",
"noteTitle": "Note",
"noteText": "These settings only affect new event creation. Existing events are not affected. Default behavior requires all fields."
},
"imageSecurity": {
"title": "Image Protection",
"saveSuccess": "Image security settings saved",
"saveError": "Failed to save settings",
"loadError": "Failed to load image security settings",
"defaultProtection": "Default Protection Settings",
"defaultProtectionHelp": "These settings apply to all new events. Individual events can override these defaults.",
"protectionLevel": "Default Protection Level",
"imageQuality": "Default Image Quality",
"fragmentationLevel": "Fragmentation Level",
"enableDevtools": "Enable DevTools detection by default",
"enableCanvas": "Enable canvas rendering by default (advanced protection)",
"rateLimiting": "Rate Limiting",
"rateLimitingHelp": "Limit how many images can be requested to prevent scraping.",
"requestsPerMinute": "Requests per minute",
"requestsPer5Minutes": "Requests per 5 min",
"requestsPerHour": "Requests per hour",
"securityMonitoring": "Security Monitoring",
"suspiciousThreshold": "Suspicious activity threshold",
"autoBlockThreshold": "Auto-block threshold",
"enableMonitoring": "Enable security monitoring",
"blockSuspiciousIps": "Automatically block suspicious IPs",
"logEvents": "Log security events to database",
"infoTitle": "About Image Protection",
"infoText": "These protection features help prevent casual downloading and copying but cannot block all methods. Determined users may still find ways to capture images. Consider using watermarks and legal agreements for comprehensive protection."
},
"moderation": {
"title": "Moderation",
"wordFilters": "Word Filters",
"description": "Manage words that should be filtered or blocked in comments",
"addFilter": "Add New Filter",
"enterWord": "Enter word to filter",
"searchFilters": "Search filters...",
"filterAdded": "Word filter added successfully",
"filterExists": "This word filter already exists",
"addError": "Failed to add word filter",
"filterUpdated": "Word filter updated successfully",
"updateError": "Failed to update word filter",
"filterDeleted": "Word filter deleted successfully",
"deleteError": "Failed to delete word filter",
"wordRequired": "Please enter a word to filter",
"confirmDelete": "Are you sure you want to delete this word filter?",
"loading": "Loading word filters...",
"noMatchingFilters": "No matching filters found",
"noFilters": "No word filters configured yet",
"severityLow": "Low",
"severityModerate": "Moderate",
"severityHigh": "High",
"severityBlock": "Block",
"severityLevels": "Severity Levels",
"lowDescription": "Word is flagged for review but not automatically blocked",
"moderateDescription": "Comment requires manual approval before being visible",
"highDescription": "Comment is automatically hidden and requires admin review",
"blockDescription": "Comment is rejected immediately and cannot be submitted"
},
"styling": {
"title": "Custom CSS"
},
"thumbnails": {
"title": "Thumbnails",
"dimensionsTitle": "Thumbnail Dimensions & Quality",
"dimensionsHelp": "Configure the size and quality of auto-generated thumbnails. Higher values produce better-looking previews but increase storage and load times.",
"width": "Width (px)",
"widthHelp": "50-1000 pixels",
"height": "Height (px)",
"heightHelp": "50-1000 pixels",
"quality": "Quality",
"qualityHelp": "1-100, higher = better quality but larger files",
"format": "Format",
"fit": "Fit Mode",
"fitHelp": "How images are resized to fit the thumbnail dimensions. \"Cover\" crops to fill, \"Contain\" fits within bounds.",
"fit_cover": "Cover (crop to fill)",
"fit_contain": "Contain (fit within)",
"fit_fill": "Fill (stretch)",
"fit_inside": "Inside (shrink to fit)",
"fit_outside": "Outside (expand to cover)",
"regenerateTitle": "Regenerate Thumbnails",
"regenerateHelp": "After changing thumbnail settings, regenerate all existing thumbnails to apply the new configuration. This runs in the background and may take a while for large galleries.",
"regenerateButton": "Regenerate All Thumbnails",
"regenerateStarted": "Thumbnail regeneration started",
"regenerateError": "Failed to start thumbnail regeneration",
"saveSuccess": "Thumbnail settings saved",
"saveError": "Failed to save thumbnail settings",
"loadError": "Failed to load thumbnail settings",
"infoTitle": "About Thumbnails",
"infoText": "Thumbnails are smaller preview images generated from your originals. Increasing the size or quality improves how photos look in the gallery grid but uses more storage and bandwidth. After changing settings, use \"Regenerate All Thumbnails\" to update existing photos."
},
"seo": {
"title": "SEO & Robots",
"indexingTitle": "Search Engine Indexing",
"allowIndexing": "Allow search engine indexing",
"allowIndexingHelp": "When disabled, all crawlers are blocked via robots.txt. Recommended off for private photo platforms.",
"sitemapUrl": "Sitemap URL",
"sitemapUrlHelp": "Optional. Added to robots.txt if provided.",
"aiBlockingTitle": "AI & Bot Blocking",
"blockAiCrawlers": "Block AI/LLM crawlers",
"blockAiCrawlersHelp": "Prevent AI training bots from accessing your content.",
"blockedAgents": "Blocked AI agents",
"addAgentPlaceholder": "Enter agent name...",
"blockSocialBots": "Block social media preview bots",
"blockSocialBotsHelp": "Prevent link previews on Twitter, Facebook, LinkedIn, etc.",
"metaTagsTitle": "Meta Tags & Custom Rules",
"metaNoindex": "Add noindex meta tag",
"metaNoindexHelp": "Tells search engines not to index pages (HTML-level, complements robots.txt).",
"metaNofollow": "Add nofollow meta tag",
"metaNofollowHelp": "Tells search engines not to follow links on pages.",
"metaNoai": "Add noai/noimageai meta tag",
"metaNoaiHelp": "Signals that content should not be used for AI training.",
"customRules": "Custom robots.txt rules",
"ruleAgentPlaceholder": "User-agent",
"rulePathPlaceholder": "Disallow path",
"showPreview": "Show robots.txt preview",
"hidePreview": "Hide robots.txt preview",
"saveSettings": "Save SEO Settings"
},
"analytics": {
"title": "Analytics",
"umamiIntegration": "Umami Analytics Integration",
"enableUmami": "Enable Umami Analytics",
"umamiUrl": "Umami URL",
"umamiUrlHelp": "The URL of your Umami instance (e.g., https://analytics.yourdomain.com)",
"websiteId": "Website ID",
"websiteIdHelp": "Your Umami website ID (found in Umami dashboard)",
"shareUrl": "Share URL (Optional)",
"shareUrlHelp": "Public share URL for embedding the full dashboard (create in Umami)",
"umamiInfo": "About Umami Analytics",
"umamiInfoText": "Umami is a privacy-focused, open-source analytics platform. It tracks page views, unique visitors, and custom events without using cookies.",
"learnMore": "Learn more about Umami",
"saveAnalyticsSettings": "Save Analytics Settings",
"backendAnalytics": "Backend Analytics",
"backendAnalyticsText": "The system also tracks basic analytics server-side for security and performance monitoring.",
"tracked": "Tracked Metrics",
"galleryViews": "Gallery page views",
"photoDownloads": "Individual and bulk downloads",
"uniqueVisitors": "Unique visitors by IP",
"deviceTypes": "Device types from user agents",
"privacy": "Privacy",
"privacyText": "IP addresses are hashed for privacy. No personal data is stored. Analytics data is retained for 90 days."
}
},
"analytics": {
"title": "Analytics Dashboard",
"titleSimple": "Analytics",
"subtitle": "Track gallery performance and visitor engagement",
"detailedSubtitle": "Detailed analytics powered by Umami",
"loadingAnalytics": "Loading analytics...",
"showSummaryView": "Show Summary View",
"fullDashboard": "Full Dashboard",
"refresh": "Refresh",
"last7Days": "Last 7 days",
"last30Days": "Last 30 days",
"last90Days": "Last 90 days",
"pageViews": "Page Views",
"uniqueVisitors": "Unique Visitors",
"totalDownloads": "Total Downloads",
"topGallery": "Top Gallery",
"topPages": "Top Pages",
"views": "views",
"visitors": "unique visitors",
"topDownloadsByGallery": "Top Downloads by Gallery",
"deviceBreakdown": "Device Breakdown",
"desktop": "Desktop",
"mobile": "Mobile",
"tablet": "Tablet",
"storageUsage": "Storage Usage",
"used": "Used",
"of": "of",
"totalPhotos": "Total Photos",
"activeEvents": "Active Events",
"notConfigured": "Umami Analytics Not Configured",
"configureInstructions": "To see real analytics data, configure Umami in your environment variables and admin panel settings.",
"noData": "No data available",
"percentChange": "{{percent}}% from last period"
},
"branding": {
"title": "Branding & Themes",
"titleFull": "Branding & Customization",
"subtitle": "Customize the look and feel of your galleries",
"loadingBranding": "Loading branding settings...",
"themeAndStyle": "Theme & Style",
"companyInfo": "Company Information",
"companyName": "Company Name",
"companyNameHelp": "Displayed in gallery headers and emails",
"companyTagline": "Company Tagline",
"companyTaglineHelp": "A short description of your business",
"supportEmail": "Support Email",
"supportEmailHelp": "Contact email for guest support",
"footerText": "Footer Text",
"footerTextHelp": "Displayed at the bottom of galleries",
"logo": "Logo",
"currentLogo": "Current logo",
"uploadLogo": "Upload Logo",
"removeLogo": "Remove Logo",
"logoHelp": "Recommended size: 200x60px, PNG or JPEG",
"favicon": "Favicon",
"currentFavicon": "Current favicon",
"uploadFavicon": "Upload Favicon",
"removeFavicon": "Remove Favicon",
"faviconHelp": "PNG or ICO format, recommended size: 32x32px",
"watermark": "Watermark",
"watermarkSettings": "Watermark Settings",
"enableWatermarks": "Enable Watermarks",
"watermarkHelp": "Add your company name as a watermark on downloaded photos",
"watermarkLogo": "Watermark Logo",
"currentWatermark": "Current watermark",
"uploadWatermarkLogo": "Upload Watermark Logo",
"watermarkPosition": "Watermark Position",
"topLeft": "Top Left",
"topRight": "Top Right",
"center": "Center",
"bottomLeft": "Bottom Left",
"bottomRight": "Bottom Right",
"watermarkOpacity": "Watermark Opacity",
"watermarkSize": "Watermark Size",
"theme": "Theme",
"galleryTheme": "Gallery Theme",
"themeCustomization": "Theme Customization",
"selectPreset": "Select a preset theme",
"colors": "Colors",
"primaryColor": "Primary Color",
"secondaryColor": "Secondary Color",
"accentColor": "Accent Color",
"backgroundColor": "Background Color",
"textColor": "Text Color",
"colorMode": "Color Mode",
"colorModeLight": "Light",
"colorModeDark": "Dark",
"colorModeAuto": "Auto",
"colorModeHelp": "Auto follows the visitor's system preference.",
"customCSS": "Custom CSS",
"preview": "Preview",
"previewInNewTab": "Preview in New Tab",
"reset": "Reset",
"saveChanges": "Save Changes",
"applyLivePreview": "Apply changes immediately (Live Preview)",
"eventSpecificThemes": "Event-Specific Themes",
"eventThemesInfo": "You can override these global theme settings for individual events when creating or editing them.",
"themePresets": "Theme Presets",
"galleryLayout": "Gallery Layout",
"layoutDescriptions": {
"grid": "Classic grid layout with consistent photo sizes",
"masonry": "Pinterest-style layout with varied heights",
"carousel": "Full-screen slideshow with navigation",
"timeline": "Photos organized by date",
"hero": "Featured image with grid below",
"mosaic": "Artistic layout with mixed sizes",
"justified": "Row-based layout preserving aspect ratios",
"gallery-premium": "Elegant light theme with hero and masonry (Beta)",
"gallery-story": "Cinematic dark theme with scene sections (Beta)"
},
"layoutSettings": "Layout Settings",
"photoSpacing": "Photo Spacing",
"spacing": {
"tight": "Tight",
"normal": "Normal",
"relaxed": "Relaxed"
},
"photoAnimation": "Photo Animation",
"animation": {
"none": "None",
"fade": "Fade",
"scale": "Scale",
"slide": "Slide"
},
"columns": "Columns",
"mobile": "Mobile",
"tablet": "Tablet",
"desktop": "Desktop",
"enableAutoplay": "Enable Autoplay",
"autoplayInterval": "Autoplay Interval (seconds)",
"groupPhotosBy": "Group Photos By",
"grouping": {
"day": "Day",
"week": "Week",
"month": "Month"
},
"masonryMode": "Layout Mode",
"masonryModeOptions": {
"columns": "Columns (Pinterest-style)",
"rows": "Rows (Custom justified)",
"flickr": "Flickr (Battle-tested justified)",
"justified": "Google Photos (Knuth-Plass algorithm)"
},
"masonryModeHint": {
"columns": "Pinterest-style vertical columns with varied heights",
"rows": "Custom row-based justified layout",
"flickr": "Flickr's open-source justified layout algorithm",
"justified": "Google Photos-style rows using Knuth-Plass algorithm for optimal breaks"
},
"targetRowHeight": "Target Row Height",
"targetRowHeightHint": "Height in pixels (150-400). Photos will scale to fit rows.",
"lastRowBehavior": "Last Row Alignment",
"lastRowOptions": {
"left": "Left aligned",
"center": "Centered",
"justify": "Justified (stretch)"
},
"showHeroSection": "Show Hero Section",
"showHeroSectionHint": "Display a featured hero image above the justified gallery",
"heroHeight": "Hero Section Height",
"heroHeightOptions": {
"small": "Small (40-50%)",
"medium": "Medium (50-70%)",
"large": "Large (60-80%)"
},
"heroOverlayOpacity": "Hero Overlay Opacity",
"heroOverlayHint": "Darken the hero image to improve text readability",
"typographyAndStyle": "Typography & Style",
"bodyFont": "Body Font",
"headingFont": "Heading Font",
"sameAsBody": "Same as body",
"fontSize": "Font Size",
"fontSizes": {
"small": "Small",
"normal": "Normal",
"large": "Large"
},
"borderRadius": "Border Radius",
"borderRadiusOptions": {
"none": "None",
"small": "Small",
"medium": "Medium",
"large": "Large"
},
"shadowStyle": "Shadow Style",
"shadowOptions": {
"none": "None",
"subtle": "Subtle",
"normal": "Normal",
"dramatic": "Dramatic"
},
"backgroundPattern": "Background",
"backgroundOptions": {
"none": "None",
"dots": "Dots",
"grid": "Grid",
"waves": "Waves"
},
"customCSSHelp": "Advanced: Add custom CSS to further customize the appearance",
"cssInstructions": {
"title": "How to use Custom CSS",
"variables": "Theme CSS Variables",
"variablesDesc": "Use these CSS variables to match your theme presets:",
"layouts": "Custom Gallery Layouts",
"layoutsDesc": "Target gallery elements with these selectors:",
"glassEffect": "Glassmorphism Effect",
"glassEffectDesc": "Create modern glass effects:",
"tip": "Tip",
"tipText": "Use CSS Templates from Settings > CSS Templates for pre-built designs like Apple Liquid Glass."
},
"resetToDefault": "Reset to Default",
"applyTheme": "Apply Theme",
"customTheme": "Custom Theme",
"customizeTheme": "Customize Theme",
"saveTheme": "Save Theme",
"previewLayout": "Preview Layout",
"livePreview": "Live Preview",
"heroPlaceholderText": "Your event's hero photo will appear here",
"whiteLabel": "White Label",
"hidePoweredBy": "Hide \"Powered by PicPeak\" branding",
"hidePoweredByHelp": "Remove the PicPeak attribution from gallery footers for a fully white-labeled experience",
"logoCustomization": "Logo Customization",
"changeLogo": "Change Logo",
"logoSizeSmall": "Small (32px)",
"logoSizeMedium": "Medium (48px)",
"logoSizeLarge": "Large (64px)",
"logoSizeXLarge": "Extra Large (96px)",
"logoSizeCustom": "Custom",
"logoMaxHeight": "Maximum Height (pixels)",
"logoMaxHeightHelp": "Set a custom maximum height for the logo (20-200 pixels)",
"logoPosition": "Logo Position in Header",
"positionLeft": "Left",
"positionCenter": "Center",
"positionRight": "Right",
"logoDisplayMode": "Display Mode",
"logoOnly": "Logo Only",
"textOnly": "Company Name Only",
"logoAndText": "Logo and Company Name",
"showLogoInHeader": "Show logo in gallery header",
"showLogoInHeaderHelp": "Display the logo in the main header bar",
"showLogoInHero": "Show logo in hero section",
"showLogoInHeroHelp": "Display the logo in hero sections (for non-grid layouts)",
"headerStyle": "Header Style",
"headerStyleDescription": "Choose how the gallery header appears. The header style is independent of the photo layout.",
"headerStyleOptions": {
"hero": "Hero Image",
"standard": "Standard Banner",
"minimal": "Minimal",
"none": "No Header"
},
"headerStyleDescriptions": {
"hero": "Full-height image with event info overlay",
"standard": "Classic banner with event details",
"minimal": "Compact header with essential info",
"none": "Hide header completely"
},
"heroDividerStyle": "Divider Style",
"heroDividerDescription": "Choose how the transition between the hero image and gallery content looks.",
"dividerOptions": {
"wave": "Wave",
"straight": "Straight",
"angle": "Angle",
"curve": "Curve",
"none": "None"
},
"controlsStyle": "Controls Style",
"controlsStyleDescription": "Choose how gallery filters and controls are displayed.",
"controlsStyleOptions": {
"classic": "Classic",
"sidebar": "Sidebar"
},
"controlsStyleDescriptions": {
"classic": "Inline filter bar below header",
"sidebar": "Menu button opens sidebar with filters"
},
"controlsStyleHeroWarning": "Sidebar is recommended for hero headers to prevent controls appearing above the hero image."
},
"admin": {
"title": "Admin Panel",
"welcome": "Welcome back, {{name}}",
"recentActivity": "Recent Activity",
"systemStatus": "System Status",
"totalEvents": "Total Events",
"activeGalleries": "Active Galleries",
"storageUsed": "Storage Used",
"totalPhotos": "Total Photos",
"storagePercent": "{{percent}}% of limit {{limit}}",
"storageSoftLimitConfigured": "Configured limit: {{limit}}",
"storageSoftLimitRecommended": "Suggested limit: {{limit}}",
"version": "Version",
"archivedEvents": "Archived Events",
"systemHealth": "System Health",
"health": {
"healthy": "Healthy",
"warning": "Warning",
"error": "Error",
"checking": "Checking..."
},
"updates": {
"available": "Update Available",
"newVersion": "Version {{version}} is available",
"currentVersion": "Current: {{version}}",
"channel": "Channel: {{channel}}",
"channelStable": "Stable",
"channelBeta": "Beta",
"beta": "BETA",
"viewReleaseNotes": "View Release Notes",
"updateAvailableShort": "v{{version}} available",
"checkForUpdates": "Check for Updates",
"upToDate": "You're up to date",
"lastChecked": "Last checked: {{time}}",
"updateNow": "Update Now",
"updateDialog": {
"title": "Update PicPeak",
"detectedEnv": "Detected Environment",
"beforeUpdating": "Before updating:",
"updateCommands": "Update Commands:",
"afterUpdating": "After updating:",
"copyAllCommands": "Copy All Commands",
"completeChecklist": "Complete the checklist before updating",
"error": "Failed to load update instructions"
}
},
"notifications": "Notifications",
"viewAllNotifications": "View all notifications",
"noNotifications": "No new notifications",
"markAllRead": "Mark all read",
"clearAll": "Clear all",
"close": "Close",
"noNotificationsMessage": "No notifications",
"notificationMessages": {
"eventCreated": "New event \"{{eventName}}\" was created",
"eventArchived": "Event \"{{eventName}}\" was archived",
"eventUpdated": "Event \"{{eventName}}\" was updated",
"eventDeleted": "Event \"{{eventName}}\" was deleted",
"photosUploaded": "{{count}} photos uploaded to \"{{eventName}}\"",
"photoDeleted": "Photo deleted from \"{{eventName}}\"",
"photosBulkDeleted": "{{count}} photos deleted from \"{{eventName}}\"",
"eventExpiring": "Event \"{{eventName}}\" expires in {{days}} days",
"eventExpired": "Event \"{{eventName}}\" has expired",
"passwordChanged": "Password changed by {{actorName}}",
"passwordReset": "Password reset for \"{{eventName}}\"",
"settingsUpdated": "{{type}} settings updated",
"emailTemplateUpdated": "Email template \"{{template}}\" updated",
"bulkDownload": "{{count}} photos downloaded from \"{{eventName}}\"",
"storageWarning": "Storage usage at {{percentage}}%",
"adminLogout": "Admin {{actorName}} logged out",
"categoryCreated": "Category \"{{name}}\" created for \"{{eventName}}\"",
"categoryUpdated": "Category \"{{name}}\" updated for \"{{eventName}}\"",
"categoryDeleted": "Category \"{{name}}\" deleted from \"{{eventName}}\"",
"cmsPageUpdated": "CMS page \"{{slug}}\" updated",
"emailConfigUpdated": "Email configuration updated",
"faviconUploaded": "Favicon uploaded",
"brandingUpdated": "Branding settings updated",
"generalSettingsUpdated": "General settings updated",
"securitySettingsUpdated": "Security settings updated",
"themeUpdated": "Theme settings updated",
"archiveDownloaded": "Archive downloaded for \"{{eventName}}\"",
"archiveDeleted": "Archive deleted for \"{{eventName}}\"",
"archiveRestored": "Archive restored for \"{{eventName}}\"",
"systemActivity": "System activity: {{type}}",
"adminProfileUpdated": "Admin profile updated by {{actorName}}"
},
"notificationToasts": {
"markedAllRead": "All notifications marked as read",
"clearedAll": "Cleared {{count}} notifications",
"profileUpdated": "Admin profile updated"
},
"markAsRead": "Mark as read",
"markAllAsRead": "Mark all as read",
"notificationSettings": "Notification Settings",
"changePassword": "Change Password",
"darkMode": "Switch to dark mode",
"lightMode": "Switch to light mode",
"accountSettings": {
"title": "Admin account",
"description": "Update the credentials used to sign in to PicPeak.",
"username": "Username",
"usernamePlaceholder": "Admin",
"email": "Email",
"emailPlaceholder": "[email protected]",
"updateButton": "Update profile"
},
"profileUpdateError": "Unable to update admin profile. Please try again.",
"loadingDashboard": "Loading dashboard...",
"activeEvents": "Active Events",
"expiringSoon": "Expiring Soon",
"next7Days": "Next 7 days",
"totalViews": "Total Views",
"downloads": "Downloads",
"percentFromLastWeek": "{{percent}}% from last week",
"dashboardSubtitle": "Welcome back! Here's what's happening with your galleries.",
"eventsExpiringSoon": "Events Expiring Soon",
"noEventsExpiring": "No events expiring in the next 7 days",
"daysLeft": "{{count}} day left",
"daysLeft_plural": "{{count}} days left",
"viewAllExpiringEvents": "View all {{count}} expiring events",
"noRecentActivity": "No recent activity",
"viewAllActivity": "View all activity",
"quickActions": "Quick Actions",
"viewArchives": "View Archives",
"analytics": "Analytics",
"activities": {
"event_created": "New event created: {{eventName}}",
"photos_uploaded": "{{count}} photos uploaded to {{eventName}}",
"event_archived": "Event archived: {{eventName}}",
"archive_restored": "Archive restored: {{eventName}}",
"archive_deleted": "Archive deleted: {{eventName}}",
"archive_downloaded": "Archive downloaded: {{eventName}}",
"email_config_updated": "Email configuration updated",
"email_template_updated": "Email template updated: {{template}}",
"branding_updated": "Branding settings updated",
"theme_updated": "Theme settings updated",
"bulk_download": "{{count}} photos downloaded from {{eventName}}",
"gallery_password_entry": "Password entered for {{eventName}}",
"expiration_warning_viewed": "Expiration warning viewed for {{eventName}}",
"feedback_settings_updated": "Feedback settings updated",
"feedback_moderated": "Feedback moderated",
"feedback_deleted": "Feedback deleted",
"photo_like": "Photo liked in {{eventName}}",
"photo_favorite": "Photo favorited in {{eventName}}",
"photo_rating": "Photo rated in {{eventName}}",
"photo_comment": "Photo commented in {{eventName}}",
"guest_feedback_like": "Guest liked a photo in {{eventName}}",
"guest_feedback_favorite": "Guest favorited a photo in {{eventName}}",
"guest_feedback_rating": "Guest rated a photo in {{eventName}}",
"guest_feedback_comment": "Guest commented on a photo in {{eventName}}",
"word_filter_added": "Word filter added",
"external_import_completed": "External media import completed ({{imported}} imported, {{skipped}} skipped)",
"bulk_archive_completed": "Bulk archive completed",
"event_activated": "Event activated: {{eventName}}",
"event_deactivated": "Event deactivated: {{eventName}}",
"photo_deleted": "Photo deleted from {{eventName}}",
"photos_bulk_deleted": "{{count}} photos deleted from {{eventName}}",
"settings_updated": "Settings updated",
"event_updated": "Event updated: {{eventName}}",
"event_renamed": "Event renamed: {{eventName}}",
"event_deleted": "Event deleted: {{eventName}}",
"password_changed": "Password changed",
"email_resent": "Creation email resent for: {{eventName}}",
"category_created": "Category created: {{categoryName}}",
"category_updated": "Category updated: {{categoryName}}",
"category_deleted": "Category deleted: {{categoryName}}",
"general_settings_updated": "General settings updated",
"favicon_uploaded": "Favicon uploaded",
"analytics_settings_updated": "Analytics settings updated",
"cms_page_updated": "CMS page updated: {{page}}",
"security_settings_updated": "Security settings updated",
"password_reset": "Password reset for: {{eventName}}",
"admin_logout": "Admin {{actorName}} logged out",
"system_activity": "System activity: {{type}}",
"unknown": "Unknown activity"
},
"userManagement": "User Management",
"inviteUser": "Invite User",
"pendingInvitations": "Pending Invitations",
"roles": {
"super_admin": "Super Admin",
"admin": "Admin",
"editor": "Editor",
"viewer": "Viewer"
},
"userStatus": {
"active": "Active",
"inactive": "Inactive"
},
"inviteForm": {
"email": "Email Address",
"role": "Role",
"send": "Send Invitation"
},
"acceptInvite": {
"title": "Accept Admin Invitation",
"username": "Choose a Username",
"password": "Create Password",
"submit": "Create Account"
}
},
"permissions": {
"insufficient": "You don't have permission to perform this action",
"viewOnly": "View Only"
},
"acceptInvitation": {
"title": "Accept Invitation",
"subtitle": "Create your admin account",
"validating": "Validating invitation...",
"invalidToken": "Invalid Invitation",
"invalidTokenMessage": "This invitation link is invalid or has expired. Please contact your administrator for a new invitation.",
"expiredToken": "Invitation Expired",
"expiredTokenMessage": "This invitation has expired. Please request a new invitation from your administrator.",
"alreadyUsed": "Invitation Already Used",
"alreadyUsedMessage": "This invitation has already been used to create an account.",
"invitedAs": "You've been invited as",
"expiresAt": "Invitation expires",
"usernameLabel": "Username",
"usernamePlaceholder": "Choose a username",
"usernameHelp": "3-50 characters, letters, numbers, underscores, and hyphens only",
"passwordLabel": "Password",
"passwordPlaceholder": "Create a strong password",
"confirmPasswordLabel": "Confirm Password",
"confirmPasswordPlaceholder": "Confirm your password",
"passwordStrength": "Password strength",
"requirements": {
"title": "Password requirements:",
"minLength": "At least 12 characters",
"uppercase": "At least one uppercase letter",
"lowercase": "At least one lowercase letter",
"number": "At least one number",
"special": "At least one special character"
},
"strength": {
"weak": "Weak",
"fair": "Fair",
"good": "Good",
"strong": "Strong"
},
"createAccount": "Create Account",
"creating": "Creating account...",
"success": "Account Created!",
"successMessage": "Your account has been created successfully. You can now log in with your credentials.",
"redirecting": "Redirecting to login in {{seconds}}...",
"goToLogin": "Go to Login",
"contactAdminMessage": "Please contact your administrator to request a new invitation.",
"passwordsMatch": "Passwords match",
"alreadyHaveAccount": "Already have an account?",
"signIn": "Sign in",
"errors": {
"usernameRequired": "Username is required",
"usernameTooShort": "Username must be at least 3 characters",
"usernameTooLong": "Username must be at most 50 characters",
"usernameInvalid": "Username can only contain letters, numbers, underscores, and hyphens",
"passwordRequired": "Password is required",
"passwordTooShort": "Password must be at least 12 characters",
"passwordsDoNotMatch": "Passwords do not match",
"confirmPasswordRequired": "Please confirm your password",
"usernameTaken": "This username is already taken",
"emailTaken": "An account with this email already exists",
"genericError": "Failed to create account. Please try again."
}
},
"errors": {
"notFound": "Not Found",
"galleryNotFound": "Gallery Not Found",
"galleryNotFoundMessage": "This gallery does not exist or has been removed.",
"galleryArchived": "Gallery Archived",
"galleryArchivedMessage": "This gallery has been archived and is no longer accessible. Please contact the event organizer if you need access to these photos.",
"unauthorized": "Unauthorized",
"forbidden": "Forbidden",
"serverError": "Server Error",
"somethingWentWrong": "Something went wrong",
"tryAgainLater": "Please try again later",
"refreshPage": "Refresh Page",
"oopsSomethingWentWrong": "Oops! Something went wrong",
"unexpectedError": "We encountered an unexpected error. Don't worry, your data is safe.",
"goToHomepage": "Go to Homepage",
"errorDetails": "Error Details",
"requiredFields": "Please fill in all required fields",
"enterTestEmail": "Please enter a test email address",
"failedToCreateEvent": "Failed to create event",
"eventCreationFailed": "Failed to create event",
"networkError": "Network error. Please check your connection and try again.",
"sessionExpired": "Session expired. Please login again."
},
"validation": {
"eventNameRequired": "Event name is required",
"hostEmailRequired": "Customer email is required",
"hostNameRequired": "Customer name is required",
"adminEmailRequired": "Admin email is required",
"invalidEmailFormat": "Invalid email format",
"passwordRequired": "Password is required",
"passwordMinLength": "Password must be at least 6 characters",
"passwordsDoNotMatch": "Passwords do not match",
"passwordSecurityRequirements": "Password does not meet security requirements",
"expirationRange": "Expiration must be between 1 and 365 days"
},
"legal": {
"impressum": "Legal Notice",
"datenschutz": "Privacy Policy",
"termsOfService": "Terms of Service",
"cookiePolicy": "Cookie Policy"
},
"toast": {
"saveSuccess": "Changes saved successfully",
"saveError": "Failed to save changes",
"deleteSuccess": "Deleted successfully",
"deleteError": "Failed to delete",
"uploadSuccess": "Upload completed successfully",
"uploadError": "Upload failed",
"loginSuccess": "Login successful",
"loginError": "Login failed",
"passwordChanged": "Password changed successfully",
"linkCopied": "Link copied to clipboard",
"eventCreated": "Event created successfully",
"eventUpdated": "Event updated successfully",
"eventArchived": "Event archived successfully",
"settingsSaved": "Settings saved successfully",
"themeUpdated": "Theme updated successfully",
"brandingUpdated": "Branding updated successfully",
"categoryAdded": "Category added successfully",
"categoryDeleted": "Category deleted successfully",
"categoryUpdated": "Category updated successfully",
"emailConfigSaved": "Email configuration saved successfully",
"testEmailSent": "Test email sent successfully",
"pageUpdated": "Page updated successfully",
"archiveRestored": "Archive restored successfully",
"archiveDeleted": "Archive deleted permanently"
},
"email": {
"title": "Email Configuration",
"subtitle": "Configure email settings for notifications",
"loadingSettings": "Loading email settings...",
"smtpConfiguration": "SMTP Configuration",
"smtpHost": "SMTP Host",
"smtpHostHelp": "Your email server hostname",
"smtpPort": "SMTP Port",
"smtpPortHelp": "Usually 587 for TLS, 465 for SSL, 25 for unencrypted",
"smtpSecure": "Use SSL/TLS",
"smtpSecureHelp": "Enable for secure email transmission",
"smtpUsername": "SMTP Username",
"smtpUsernameHelp": "Your email account username",
"smtpPassword": "SMTP Password",
"smtpPasswordHelp": "Your email account password",
"fromDetails": "From Details",
"fromEmail": "From Email",
"fromEmailHelp": "Email address that appears as sender",
"fromName": "From Name",
"fromNameHelp": "Name that appears as sender",
"testConfiguration": "Test Configuration",
"testEmail": "Test Email Address",
"testEmailHelp": "Send a test email to verify settings",
"sendTestEmail": "Send Test Email",
"saveConfiguration": "Save Configuration",
"emailTemplates": "Email Templates",
"templateVariables": "Available Variables",
"previewTemplate": "Preview Template",
"smtpSettings": "SMTP Settings",
"testEmailSuccess": "Test email sent successfully",
"saveSmtpSettings": "Save SMTP Settings",
"testEmailSection": "Test Email",
"beforeTesting": "Before testing:",
"saveSmtpFirst": "Save your SMTP settings first",
"ensureFirewall": "Ensure your firewall allows outbound SMTP",
"gmailAppPassword": "For Gmail, use an app-specific password",
"testEmailAddressLabel": "Test Email Address",
"sendTestEmailButton": "Send Test Email",
"commonSmtpSettings": "Common SMTP Settings:",
"editTemplate": "Edit Template",
"templateName": "Template Name",
"subjectLine": "Subject Line",
"emailBody": "Email Body",
"preview": "Preview",
"saveChanges": "Save Changes",
"templates": "Templates",
"variableHelp": "Use these variables in your template. They will be replaced with actual values when emails are sent.",
"port": "Port",
"security": "Security",
"username": "Username",
"password": "Password",
"enterPassword": "Enter password",
"fromEmail": "From Email",
"fromName": "From Name",
"required": "required",
"ignoreSslErrors": "Ignore SSL/TLS certificate errors",
"ignoreSslWarning": "Warning: Disabling certificate verification makes the connection vulnerable to man-in-the-middle attacks. Only enable this if you trust the SMTP server and understand the security implications."
},
"cms": {
"title": "CMS Pages",
"subtitle": "Manage legal and informational pages",
"loadingPages": "Loading pages...",
"pages": "Pages",
"previewLinks": "Preview Links",
"englishVersion": "English Version",
"germanVersion": "German Version",
"editPage": "Edit {{page}}",
"pageTitle": "Page Title",
"pageContent": "Page Content",
"pageTitlePlaceholder": "Enter page title...",
"saveChanges": "Save Changes",
"lastUpdated": "Last updated:",
"impressum": "Legal Notice",
"datenschutz": "Privacy Policy",
"pageUpdated": "Page updated successfully"
},
"eventTypes": {
"title": "Event Types",
"subtitle": "Customize event types and their default themes",
"loading": "Loading event types...",
"loadError": "Failed to load event types",
"createNew": "New Event Type",
"edit": "Edit Event Type",
"created": "Event type created successfully",
"updated": "Event type updated successfully",
"deleted": "Event type deleted successfully",
"createError": "Failed to create event type",
"updateError": "Failed to update event type",
"deleteError": "Failed to delete event type",
"searchPlaceholder": "Search event types...",
"showInactive": "Show inactive",
"noResults": "No event types found",
"empty": "No event types yet",
"system": "System",
"table": {
"type": "Type",
"slugPrefix": "URL Prefix",
"theme": "Default Theme",
"status": "Status",
"actions": "Actions"
},
"form": {
"name": "Display Name",
"namePlaceholder": "e.g., Family Shoot",
"slugPrefix": "URL Prefix",
"slugPrefixPlaceholder": "e.g., family",
"slugPreview": "Example URL:",
"emoji": "Icon",
"themePreset": "Default Theme",
"isActive": "Active (visible in event creation)"
},
"validation": {
"slugFormat": "Only letters, numbers, and hyphens allowed"
},
"slugInfo": {
"title": "URL Prefix Info:",
"description": "The URL prefix is used to generate gallery URLs. For example, an event type with prefix \"family\" will create URLs like: family-smith-family-2025-01-22"
},
"deleteConfirm": {
"title": "Delete Event Type",
"message": "Are you sure you want to delete",
"warning": "This action cannot be undone. Make sure no events are using this type."
}
},
"backup": {
"external": {
"warning": {
"title": "External media excluded",
"body": "This installation references photos from /external-media. These originals are excluded from backups. Thumbnails and database are still backed up."
}
},
"title": "Backup Management",
"subtitle": "Manage system backups, configure automated backups, and restore from previous backups.",
"tabs": {
"dashboard": "Dashboard",
"configuration": "Configuration",
"history": "Backup History",
"restore": "Restore"
},
"status": {
"inProgress": "Backup in progress...",
"lastBackup": "Last backup",
"noBackups": "No backups found",
"nextBackup": "Next backup",
"notScheduled": "Not scheduled",
"enabled": "Enabled",
"disabled": "Disabled"
},
"actions": {
"runBackupNow": "Run Backup Now",
"starting": "Starting...",
"running": "Running...",
"testConnection": "Test Connection",
"save": "Save Configuration",
"delete": "Delete",
"view": "View Details",
"download": "Download",
"refresh": "Refresh"
},
"dashboard": {
"backupHealth": "Backup Health",
"healthStatus": {
"excellent": "Excellent",
"good": "Good",
"warning": "Warning",
"critical": "Critical"
},
"health": {
"title": "Backup Health"
},
"healthMessages": {
"noBackups": "No backups found",
"lastBackupFailed": "Last backup failed",
"upToDate": "Backup is up to date",
"recent": "Backup is recent",
"gettingOld": "Backup is getting old",
"outdated": "Backup is outdated"
},
"stats": {
"totalBackups": "Total Backups",
"backupSize": "Backup Size",
"lastDuration": "Last Duration",
"backupStatus": "Backup Status",
"last": "Last",
"files": "files",
"minutes": "{{count}}m",
"active": "Active",
"inactive": "Inactive",
"noBackupsYet": "No backups yet"
},
"recentActivity": {
"title": "Recent Backup Activity"
},
"notConfigured": {
"title": "Backup Not Configured",
"message": "Please configure backup settings in the Configuration tab before running backups."
},
"actions": {
"runBackupNow": "Run Backup Now",
"running": "Running..."
},
"coverage": {
"title": "Backup Coverage",
"database": "Database",
"photos": "Photos",
"archives": "Archives",
"systemFiles": "System Files",
"included": "Included",
"excluded": "Excluded",
"optional": "Optional"
},
"storageDestination": "Storage Destination",
"nextScheduledBackup": "Next Scheduled Backup",
"backupType": "{{type}} backup",
"noDestinationSet": "No destination set"
},
"configuration": {
"enableBackup": "Enable Automated Backups",
"enableBackupHelp": "Automatically create backups according to the configured schedule",
"destinationType": "Backup Destination",
"destinationTypes": {
"local": {
"name": "Local Storage",
"description": "Store backups on the local server filesystem"
},
"rsync": {
"name": "Remote Server (Rsync)",
"description": "Sync backups to a remote server via SSH/Rsync"
},
"s3": {
"name": "S3 Compatible Storage",
"description": "Store backups in Amazon S3 or compatible object storage"
}
},
"fields": {
"destinationPath": "Destination Path",
"destinationPathHelp": "Local directory path for storing backups",
"destinationPathPlaceholder": "/path/to/backup/directory",
"rsyncHost": "Remote Host",
"rsyncHostHelp": "SSH hostname or IP address",
"rsyncHostPlaceholder": "backup.example.com",
"rsyncUser": "SSH User",
"rsyncUserHelp": "Username for SSH connection",
"rsyncUserPlaceholder": "backup-user",
"rsyncPath": "Remote Path",
"rsyncPathHelp": "Directory path on remote server",
"rsyncPathPlaceholder": "/home/backup/photo-sharing",
"rsyncSshKey": "SSH Private Key",
"rsyncSshKeyHelp": "SSH private key for authentication (optional)",
"rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----",
"s3Endpoint": "S3 Endpoint",
"s3EndpointHelp": "S3 API endpoint (e.g., s3.amazonaws.com)",
"s3EndpointPlaceholder": "https://s3.amazonaws.com",
"s3Bucket": "Bucket Name",
"s3BucketHelp": "S3 bucket for storing backups",
"s3BucketPlaceholder": "my-backup-bucket",
"s3AccessKey": "Access Key ID",
"s3AccessKeyHelp": "AWS/S3 access key ID",
"s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
"s3SecretKey": "Secret Access Key",
"s3SecretKeyHelp": "AWS/S3 secret access key",
"s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"s3Region": "Region",
"s3RegionHelp": "S3 region (e.g., us-east-1)",
"s3RegionPlaceholder": "us-east-1"
},
"schedule": {
"title": "Backup Schedule",
"scheduleType": "Schedule Type",
"scheduleOptions": {
"hourly": "Every hour",
"daily": "Daily",
"weekly": "Weekly",
"custom": "Custom cron expression"
},
"options": {
"hourly": "Every hour",
"daily": "Daily",
"weekly": "Weekly",
"custom": "Custom cron expression"
},
"customCron": "Cron Expression",
"customCronHelp": "Enter a valid cron expression (e.g., 0 3 * * *)",
"retention": "Retention Period",
"retentionDays": "Keep backups for",
"retentionHelp": "days (older backups will be automatically deleted)"
},
"whatToBackup": {
"title": "What to Backup",
"database": "Database",
"databaseHelp": "All event data, settings, and configurations",
"photos": "Photos",
"photosHelp": "All uploaded photos in active galleries",
"archives": "Archives",
"archivesHelp": "Archived event ZIP files",
"thumbnails": "Thumbnails",
"thumbnailsHelp": "Generated thumbnail images (can be recreated)",
"tempFiles": "Temporary Files",
"tempFilesHelp": "Temporary upload and processing files"
},
"advancedOptions": {
"title": "Advanced Options",
"compression": "Enable Compression",
"compressionHelp": "Compress backup files to save storage space",
"encryption": "Enable Encryption",
"encryptionHelp": "Encrypt backups for additional security",
"encryptionPassphrase": "Encryption Passphrase",
"encryptionPassphraseHelp": "Strong passphrase for backup encryption",
"confirmPassphrase": "Confirm Passphrase",
"passphrasesDontMatch": "Passphrases don't match"
},
"validation": {
"requiredFields": "Please fill in all required fields",
"invalidCron": "Invalid cron expression",
"connectionTestFailed": "Connection test failed",
"connectionTestSuccess": "Connection test successful!"
},
"messages": {
"requiredFields": "Please fill in all required fields",
"connectionSuccess": "Connection test successful!",
"connectionFailed": "Connection test failed"
},
"testingConnection": "Testing connection...",
"saveSettings": "Save Configuration",
"savingSettings": "Saving..."
},
"history": {
"searchPlaceholder": "Search backups...",
"allStatus": "All Status",
"status": {
"completed": "Completed",
"failed": "Failed",
"running": "Running",
"partial": "Partial"
},
"deleteConfirm": "Are you sure you want to delete this backup from {{date}}?",
"noBackups": "No backups found",
"tableHeaders": {
"date": "Date",
"type": "Type",
"status": "Status",
"size": "Size",
"duration": "Duration",
"actions": "Actions"
},
"columns": {
"status": "Status",
"dateTime": "Date & Time",
"type": "Type",
"size": "Size",
"duration": "Duration",
"actions": "Actions"
},
"details": "Details",
"statistics": "Statistics",
"errors": "Errors",
"backupDetails": {
"backupId": "Backup ID",
"startTime": "Start Time",
"endTime": "End Time",
"destination": "Destination",
"filesProcessed": "Files Processed",
"totalSize": "Total Size",
"compressionRatio": "Compression Ratio",
"errorLog": "Error Log",
"noErrors": "No errors occurred"
},
"pagination": {
"showing": "Showing {{from}}-{{to}} of {{total}} backups",
"previous": "Previous",
"next": "Next"
},
"filter": {
"allStatus": "All Status",
"completed": "Completed",
"failed": "Failed",
"running": "Running",
"partial": "Partial"
},
"noBackupsFound": "No backups found",
"backupsWillAppear": "Backups will appear here once created",
"messages": {
"deleteSuccess": "Backup deleted successfully"
},
"details": {
"backupDetails": "Backup Details",
"destination": "Destination",
"started": "Started",
"completed": "Completed",
"contentBackedUp": "Content Backed Up",
"errorDetails": "Error Details",
"manifest": "Manifest"
}
},
"restore": {
"steps": {
"selectSource": "Select Source",
"chooseBackup": "Choose Backup",
"restoreOptions": "Restore Options",
"reviewConfirm": "Review & Confirm",
"progress": "Restore Progress"
},
"source": {
"title": "Select Backup Source",
"subtitle": "Choose where to restore the backup from",
"local": {
"name": "Local Backup",
"description": "Restore from local filesystem"
},
"s3": {
"name": "S3 Storage",
"description": "Restore from S3 bucket"
},
"upload": {
"name": "Upload Backup",
"description": "Upload a backup file",
"comingSoon": "Upload functionality coming soon"
},
"configuration": {
"s3": "S3 Configuration",
"endpoint": "S3 Endpoint URL",
"bucket": "Bucket Name",
"accessKey": "Access Key ID",
"secretKey": "Secret Access Key"
}
},
"backup": {
"title": "Choose Backup to Restore",
"subtitle": "Select from available backups",
"noBackupsFound": "No backups found in selected source",
"encrypted": "Encrypted Backup",
"encryptedMessage": "You'll need to provide the encryption passphrase to restore this backup.",
"enterPassphrase": "Enter encryption passphrase",
"at": "at"
},
"restoreTypes": {
"full": {
"name": "Full Restore",
"description": "Restore everything including database, photos, and archives",
"warning": "This will replace all current data"
},
"database": {
"name": "Database Only",
"description": "Restore only the database (settings, events, users)",
"warning": "Current database will be replaced"
},
"files": {
"name": "Files Only",
"description": "Restore only photos and archives",
"warning": "Existing files may be overwritten"
},
"selective": {
"name": "Selective Restore",
"description": "Choose specific items to restore",
"warning": "Only selected items will be restored"
}
},
"options": {
"title": "Restore Options",
"subtitle": "Choose what to restore",
"additionalOptions": {
"title": "Additional Options",
"skipPreBackup": "Skip Pre-Restore Backup",
"skipPreBackupHelp": "By default, a backup is created before restore. Check this to skip it.",
"force": "Force Restore",
"forceHelp": "Override safety checks and warnings (use with caution)"
}
},
"confirmation": {
"title": "Review & Confirm",
"subtitle": "Please review your restore configuration",
"validation": {
"passed": "Validation Passed",
"failed": "Validation Failed",
"checking": "Validating restore configuration..."
},
"spaceCheck": {
"title": "Storage Space",
"required": "Required",
"available": "Available",
"insufficient": "Insufficient storage space"
},
"summary": {
"title": "Restore Summary",
"source": "Source",
"backupDate": "Backup Date",
"restoreType": "Restore Type",
"preBackup": "Pre-backup",
"enabled": "Enabled",
"skipped": "Skipped"
},
"warning": {
"title": "Important Notice",
"message": "This restore operation will replace existing data. Make sure you have a current backup before proceeding. This action cannot be undone."
}
},
"progress": {
"title": "Restore Progress",
"inProgress": "Restore in progress...",
"completed": "Restore completed",
"overallProgress": "Overall Progress",
"current": "Current",
"statusDetails": "Status Details",
"restoreLogs": "Restore Logs",
"steps": {
"completed": "Completed",
"running": "Running",
"failed": "Failed",
"pending": "Pending"
},
"success": {
"title": "Restore Completed Successfully",
"message": "Your data has been restored. Please verify everything is working correctly."
}
},
"actions": {
"back": "Back",
"next": "Next",
"startRestore": "Start Restore",
"starting": "Starting...",
"validating": "Validating...",
"startNewRestore": "Start New Restore"
},
"messages": {
"restoreStarted": "Restore started successfully"
}
},
"messages": {
"backupStarted": "Backup started successfully",
"backupFailed": "Failed to start backup",
"configUpdated": "Backup configuration updated",
"configUpdateFailed": "Failed to update configuration",
"backupDeleted": "Backup deleted successfully",
"deleteFailed": "Failed to delete backup",
"testEmailSent": "Test connection successful!",
"testEmailFailed": "Connection test failed"
}
},
"cssTemplates": {
"title": "Custom CSS Templates",
"template": "Template",
"templateName": "Template Name",
"enableTemplate": "Enable this template",
"enableHint": "Enabled templates can be selected when creating events",
"cssContent": "CSS Content",
"cssHint": "Use .gallery-page to scope styles to the gallery. Available variables: --gallery-bg, --gallery-text, --gallery-accent",
"securityNotice": "Security Notice",
"securityText": "CSS is sanitized to prevent malicious code. External URLs, @import, and JavaScript expressions are blocked.",
"resetToDefault": "Reset to Default",
"resetConfirm": "Reset this template to the default? Your changes will be lost.",
"unsavedChanges": "Unsaved changes",
"saveTemplate": "Save Template",
"lastUpdated": "Last updated",
"saved": "Template saved successfully",
"saveFailed": "Failed to save template",
"sanitizationWarning": "Some CSS patterns were blocked for security",
"reset": "Template reset to default",
"resetFailed": "Failed to reset template"
},
"maintenance": {
"title": "System Maintenance",
"message": "We're currently performing scheduled maintenance to improve our service. We'll be back online shortly.",
"expectedCompletion": "Expected completion time:",
"checkBackLater": "Please check back later",
"urgentMatters": "For urgent matters, please contact"
},
"passwordChange": {
"title": "Change Password",
"currentPassword": "Current Password",
"newPassword": "New Password",
"confirmPassword": "Confirm New Password",
"currentPasswordPlaceholder": "Enter current password",
"newPasswordPlaceholder": "Enter new password",
"confirmPasswordPlaceholder": "Confirm new password",
"requirements": "Password Requirements:",
"minLength": "At least 6 characters long",
"mustDiffer": "Must be different from current password",
"success": "Password changed successfully",
"failed": "Failed to change password",
"currentRequired": "Current password is required",
"newRequired": "New password is required",
"minLengthError": "Password must be at least 6 characters",
"confirmRequired": "Please confirm your new password",
"noMatch": "Passwords do not match",
"mustBeDifferent": "New password must be different from current password",
"cancel": "Cancel"
},
"mandatoryPasswordChange": {
"title": "Password Change Required",
"description": "For security reasons, you must change your password before accessing the admin panel.",
"success": "Password changed successfully! You can now access the admin panel.",
"minLength": "At least 12 characters long",
"mustContainUpperLower": "Must contain uppercase and lowercase letters",
"mustContainNumbers": "Must contain numbers",
"mustContainSpecial": "Must contain special characters (!@#$%^&*)",
"minLengthError": "Password must be at least 12 characters",
"mustContainLowercase": "Password must contain lowercase letters",
"mustContainUppercase": "Password must contain uppercase letters",
"mustContainNumbersError": "Password must contain numbers",
"mustContainSpecialError": "Password must contain special characters"
},
"offline": {
"backOnline": "Back online",
"noConnection": "No internet connection"
},
"download": {
"downloading": "Downloading...",
"percentComplete": "% complete"
},
"passwordGenerator": {
"weak": "Weak",
"fair": "Fair",
"good": "Good",
"strong": "Strong",
"generating": "Generating...",
"generatePassword": "Generate Password",
"showSuggestions": "Show password suggestions",
"moreOptions": "More Options",
"suggestions": "Password Suggestions",
"characters": "characters",
"copyPassword": "Copy password",
"use": "Use",
"pattern": "Pattern:",
"patternDescription": "Passwords are generated using your event name and date. Example: \"Venue2024$August\" for better security and memorability."
},
"feedback": {
"comments": "Comments",
"addComment": "Add Comment",
"yourName": "Your name",
"yourEmail": "Your email",
"writeComment": "Write a comment...",
"submit": "Submit",
"commentSubmitted": "Comment submitted",
"commentError": "Failed to submit comment",
"rateLimited": "Please wait before commenting again",
"commentRequired": "Comment is required",
"nameRequired": "Name is required",
"emailRequired": "Email is required",
"anonymous": "Anonymous",
"pendingApproval": "Pending approval",
"noComments": "No comments yet. Be the first to comment!",
"rating": "Rating",
"ratePhoto": "Rate this photo",
"yourRating": "Your rating",
"averageRating": "Average rating",
"totalRatings": "ratings",
"likes": "Likes",
"favorites": "Favorites",
"likePhoto": "Like this photo",
"favoritePhoto": "Add to favorites",
"photoFeedback": "Photo Feedback",
"hasFeedback": "Has feedback",
"hasComments": "Has comments",
"hasRating": "Has rating",
"settings": {
"title": "Guest Feedback Settings",
"enableFeedback": "Enable feedback",
"feedbackTypes": "Feedback Types",
"ratings": "Star Ratings",
"ratingsDesc": "Allow guests to rate photos (1-5 stars)",
"likes": "Likes",
"likesDesc": "Simple like/unlike functionality",
"comments": "Comments",
"commentsDesc": "Text comments on photos",
"favorites": "Favorites",
"favoritesDesc": "Mark photos as favorites"
}
},
"filter": {
"feedbackFilters": "Feedback Filters",
"clear": "Clear",
"rating": "Rating",
"allPhotos": "All Photos",
"anyRating": "Any Rating",
"oneStarPlus": "1+ Stars",
"twoStarsPlus": "2+ Stars",
"threeStarsPlus": "3+ Stars",
"fourStarsPlus": "4+ Stars",
"fiveStarsOnly": "5 Stars Only",
"hasLikes": "Has likes",
"hasFavorites": "Has favorites",
"hasComments": "Has comments"
},
"adminLogin": {
"title": "Admin Login",
"subtitle": "Sign in to manage your photo galleries",
"sessionExpired": "Your session has expired. Please log in again.",
"emailLabel": "Email Address",
"emailPlaceholder": "[email protected]",
"emailRequired": "Email is required",
"invalidEmail": "Invalid email format",
"passwordLabel": "Password",
"passwordPlaceholder": "Enter your password",
"passwordRequired": "Password is required",
"passwordMinLength": "Password must be at least 6 characters",
"rememberMe": "Remember me",
"forgotPassword": "Forgot password?",
"signIn": "Sign In",
"loginSuccess": "Login successful!",
"networkError": "Network error. Please check your connection and try again.",
"tooManyAttempts": "Too many login attempts. Please try again later.",
"invalidCredentials": "Invalid email or password",
"generalError": "An error occurred. Please try again.",
"needHelp": "Need help? Contact",
"poweredBy": "Powered by PicPeak",
"devModeHint": "Development Mode: Use email: [email protected], password: admin123"
}
}