53e4f5afe6
Backend: new GET /api/photos endpoint with cursor-based pagination that queries image/video files sorted by EXIF captured_at (falling back to created_at), joining file_metadata for sort dates. Frontend: dense photo grid grouped by day with lazy-loaded thumbnails, IntersectionObserver infinite scroll, multi-select with batch download/delete, and a full-screen lightbox with prev/next navigation, EXIF metadata display, and download/favorite/delete toolbar. Includes navigation wiring, CSS (with dark theme), and i18n translations for all 9 locales.
371 lines
13 KiB
JSON
Executable File
371 lines
13 KiB
JSON
Executable File
{
|
|
"app": {
|
|
"title": "OxiCloud",
|
|
"description": "Minimalist cloud storage system"
|
|
},
|
|
"nav": {
|
|
"files": "Files",
|
|
"shared": "Shared",
|
|
"recent": "Recent",
|
|
"favorites": "Favorites",
|
|
"photos": "Photos",
|
|
"trash": "Trash"
|
|
},
|
|
"photos": {
|
|
"empty_state": "No photos yet",
|
|
"empty_hint": "Upload images or videos to see them here",
|
|
"items_selected": "selected"
|
|
},
|
|
"actions": {
|
|
"search": "Search files...",
|
|
"new_folder": "New folder",
|
|
"upload": "Upload",
|
|
"upload_files": "Upload files",
|
|
"upload_folder": "Upload folder",
|
|
"upload.uploading": "Uploading...",
|
|
"upload.complete": "{count} / {total} uploaded",
|
|
"rename": "Rename",
|
|
"move": "Move to...",
|
|
"move_to": "Move to",
|
|
"delete": "Delete",
|
|
"download": "Download",
|
|
"view": "View",
|
|
"cancel": "Cancel",
|
|
"confirm": "Confirm",
|
|
"share": "Share",
|
|
"favorite": "Add to favorites",
|
|
"unfavorite": "Remove from favorites",
|
|
"copy": "Copy",
|
|
"notify": "Notify",
|
|
"send": "Send",
|
|
"clear_recent": "Clear recent",
|
|
"logout": "Log out",
|
|
"create": "Create",
|
|
"search_btn": "Search",
|
|
"close": "Close",
|
|
"delete_permanently": "Delete permanently",
|
|
"empty_trash": "Empty trash"
|
|
},
|
|
"user_menu": {
|
|
"appearance": "Appearance",
|
|
"about": "About OxiCloud",
|
|
"about_description": "Cloud storage platform built with Rust & Clean Architecture. Fast, secure, and private.",
|
|
"admin_panel": "Admin Panel",
|
|
"profile": "My Profile",
|
|
"role_user": "User"
|
|
},
|
|
"share": {
|
|
"dialogTitle": "Share Link",
|
|
"linkLabel": "Share Link:",
|
|
"copyLink": "Copy",
|
|
"permissions": "Permissions:",
|
|
"permissionRead": "Read",
|
|
"permissionWrite": "Write",
|
|
"permissionReshare": "Reshare",
|
|
"password": "Password Protection:",
|
|
"generatePassword": "Generate",
|
|
"expiration": "Expiration Date:",
|
|
"update": "Update Share",
|
|
"remove": "Remove Share",
|
|
"notifyTitle": "Send Notification",
|
|
"notifyEmailLabel": "Email Address:",
|
|
"notifyMessageLabel": "Message (optional):",
|
|
"notifySend": "Send Notification",
|
|
"shareWithOthers": "Share with others",
|
|
"sharePublicly": "Share publicly",
|
|
"shareSettings": "Sharing settings",
|
|
"shareCopied": "Link copied to clipboard",
|
|
"shareCreated": "Share link created successfully",
|
|
"shareUpdated": "Share settings updated successfully",
|
|
"shareRemoved": "Share removed successfully"
|
|
},
|
|
"share_dialogTitle": "Share Link",
|
|
"share_linkLabel": "Share Link:",
|
|
"share_copyLink": "Copy",
|
|
"share_permissions": "Permissions:",
|
|
"share_permissionRead": "Read",
|
|
"share_permissionWrite": "Write",
|
|
"share_permissionReshare": "Reshare",
|
|
"share_password": "Password Protection:",
|
|
"share_generatePassword": "Generate",
|
|
"share_expiration": "Expiration Date:",
|
|
"share_update": "Update Share",
|
|
"share_remove": "Remove Share",
|
|
"share_notifyTitle": "Send Notification",
|
|
"share_notifyEmailLabel": "Email Address:",
|
|
"share_notifyMessageLabel": "Message (optional):",
|
|
"share_notifySend": "Send Notification",
|
|
"shared": {
|
|
"backToFiles": "Back to Files",
|
|
"pageTitle": "Shared Resources",
|
|
"pageDescription": "Manage your shared files and folders",
|
|
"filterType": "Type:",
|
|
"filterAll": "All",
|
|
"filterFiles": "Files",
|
|
"filterFolders": "Folders",
|
|
"sortBy": "Sort by:",
|
|
"sortByName": "Name",
|
|
"sortByDate": "Date shared",
|
|
"sortByExpiration": "Expiration",
|
|
"search": "Search",
|
|
"colName": "Name",
|
|
"colType": "Type",
|
|
"colDateShared": "Date Shared",
|
|
"colExpiration": "Expiration",
|
|
"colPermissions": "Permissions",
|
|
"colPassword": "Password",
|
|
"colActions": "Actions",
|
|
"emptyStateTitle": "No shared resources yet",
|
|
"emptyStateDesc": "When you share files or folders, they will appear here",
|
|
"goToFiles": "Go to Files",
|
|
"typeFile": "File",
|
|
"typeFolder": "Folder",
|
|
"noExpiration": "No expiration",
|
|
"hasPassword": "Yes",
|
|
"noPassword": "No",
|
|
"editShare": "Edit Share",
|
|
"notifyShare": "Notify Someone",
|
|
"copyLink": "Copy Link",
|
|
"removeShare": "Remove Share",
|
|
"linkCopied": "Link copied to clipboard!",
|
|
"linkCopyFailed": "Failed to copy link",
|
|
"itemUpdated": "Share settings updated successfully",
|
|
"itemRemoved": "Share removed successfully",
|
|
"invalidEmail": "Please enter a valid email address",
|
|
"notificationSent": "Notification sent successfully",
|
|
"notificationFailed": "Failed to send notification",
|
|
"shared_backToFiles": "Back to Files",
|
|
"shared_pageTitle": "Shared Resources",
|
|
"shared_pageDescription": "Manage your shared files and folders",
|
|
"shared_filterType": "Type:",
|
|
"shared_filterAll": "All",
|
|
"shared_filterFiles": "Files",
|
|
"shared_filterFolders": "Folders",
|
|
"shared_sortBy": "Sort by:",
|
|
"shared_sortByName": "Name",
|
|
"shared_sortByDate": "Date shared",
|
|
"shared_sortByExpiration": "Expiration",
|
|
"shared_search": "Search",
|
|
"shared_colName": "Name",
|
|
"shared_colType": "Type",
|
|
"shared_colDateShared": "Date Shared",
|
|
"shared_colExpiration": "Expiration",
|
|
"shared_colPermissions": "Permissions",
|
|
"shared_colPassword": "Password",
|
|
"shared_colActions": "Actions",
|
|
"shared_emptyStateTitle": "No shared resources yet",
|
|
"shared_emptyStateDesc": "When you share files or folders, they will appear here",
|
|
"shared_goToFiles": "Go to Files",
|
|
"shared_typeFile": "File",
|
|
"shared_typeFolder": "Folder",
|
|
"shared_noExpiration": "No expiration",
|
|
"shared_hasPassword": "Yes",
|
|
"shared_noPassword": "No",
|
|
"shared_editShare": "Edit Share",
|
|
"shared_notifyShare": "Notify Someone",
|
|
"shared_copyLink": "Copy Link",
|
|
"shared_removeShare": "Remove Share",
|
|
"shared_linkCopied": "Link copied to clipboard!",
|
|
"shared_linkCopyFailed": "Failed to copy link",
|
|
"shared_itemUpdated": "Share settings updated successfully",
|
|
"shared_itemRemoved": "Share removed successfully",
|
|
"shared_invalidEmail": "Please enter a valid email address",
|
|
"shared_notificationSent": "Notification sent successfully",
|
|
"shared_notificationFailed": "Failed to send notification"
|
|
},
|
|
"files": {
|
|
"name": "Name",
|
|
"type": "Type",
|
|
"size": "Size",
|
|
"modified": "Modified",
|
|
"no_files": "No files in this folder",
|
|
"loading": "Loading files…",
|
|
"view_grid": "Grid view",
|
|
"view_list": "List view",
|
|
"file_types": {
|
|
"document": "Document",
|
|
"image": "Image",
|
|
"video": "Video",
|
|
"audio": "Audio",
|
|
"pdf": "PDF",
|
|
"text": "Text",
|
|
"folder": "Folder",
|
|
"spreadsheet": "Spreadsheet",
|
|
"presentation": "Presentation",
|
|
"archive": "Archive",
|
|
"installer": "Installer",
|
|
"code": "Code"
|
|
}
|
|
},
|
|
"dialogs": {
|
|
"rename_folder": "Rename folder",
|
|
"rename_file": "Rename file",
|
|
"new_name": "New name",
|
|
"new_folder_title": "New folder",
|
|
"folder_name": "Folder name",
|
|
"folder_placeholder": "My folder",
|
|
"rename_title": "Rename",
|
|
"move_file": "Move file",
|
|
"move_folder": "Move folder",
|
|
"select_destination": "Select destination folder:",
|
|
"select_this_folder": "Select this folder",
|
|
"go_to_parent": ".. (parent folder)",
|
|
"no_subfolders": "No subfolders",
|
|
"root": "Root",
|
|
"delete_confirmation": "Are you sure you want to delete",
|
|
"and_contents": "and all its contents",
|
|
"no_undo": "This action cannot be undone",
|
|
"confirm_title": "Confirm action",
|
|
"confirm_delete": "Move to trash",
|
|
"confirm_delete_file": "Are you sure you want to move the file \"{{name}}\" to trash?",
|
|
"confirm_delete_folder": "Are you sure you want to move the folder \"{{name}}\" and all its contents to trash?",
|
|
"confirm_permanent_delete": "Delete permanently",
|
|
"confirm_permanent_delete_msg": "Are you sure you want to permanently delete this item? This action cannot be undone.",
|
|
"confirm_empty_trash": "Empty trash",
|
|
"confirm_delete_share": "Delete share link",
|
|
"confirm_delete_share_msg": "Are you sure you want to delete this shared link?",
|
|
"share_file": "Share File",
|
|
"existing_shares": "Existing Shares",
|
|
"share_options": "Share Options",
|
|
"password": "Password",
|
|
"expiration": "Expiration",
|
|
"permissions": "Permissions",
|
|
"generated_link": "Generated Link",
|
|
"notify": "Send Notification",
|
|
"recipient": "Recipient",
|
|
"message": "Message"
|
|
},
|
|
"dropzone": {
|
|
"drag_files": "Drag files here or click to select",
|
|
"drop_files": "Drop files to upload"
|
|
},
|
|
"permissions": {
|
|
"read": "Read",
|
|
"write": "Write",
|
|
"reshare": "Reshare"
|
|
},
|
|
"errors": {
|
|
"file_not_found": "File not found",
|
|
"folder_not_found": "Folder not found",
|
|
"delete_error": "Error deleting",
|
|
"upload_error": "Error uploading file",
|
|
"rename_error": "Error renaming",
|
|
"move_error": "Error moving",
|
|
"empty_name": "Name cannot be empty",
|
|
"name_exists": "A file or folder with that name already exists",
|
|
"generic_error": "An error has occurred"
|
|
},
|
|
"breadcrumb": {
|
|
"home": "Home"
|
|
},
|
|
"trash": {
|
|
"empty_trash": "Empty Trash",
|
|
"empty_state": "Trash is empty",
|
|
"original_location": "Original location",
|
|
"deleted_date": "Deletion date",
|
|
"actions": "Actions",
|
|
"restore": "Restore",
|
|
"delete_permanently": "Delete permanently",
|
|
"empty_confirm": "Are you sure you want to empty the trash? This will permanently delete all items."
|
|
},
|
|
"auth": {
|
|
"login_title": "Sign in",
|
|
"username": "Username",
|
|
"username_placeholder": "Enter your username",
|
|
"password": "Password",
|
|
"password_placeholder": "Enter your password",
|
|
"login_button": "Sign in",
|
|
"no_account": "Don't have an account?",
|
|
"register": "Sign up",
|
|
"admin_setup": "First time?",
|
|
"setup": "Setup administrator",
|
|
"register_title": "Create account",
|
|
"email": "Email",
|
|
"email_placeholder": "Enter your email",
|
|
"confirm_password": "Confirm password",
|
|
"confirm_password_placeholder": "Confirm your password",
|
|
"register_button": "Create account",
|
|
"have_account": "Already have an account?",
|
|
"login": "Sign in",
|
|
"setup_title": "Initial setup",
|
|
"setup_step1": "Admin",
|
|
"setup_step2": "System",
|
|
"setup_step3": "Complete",
|
|
"admin_username": "Admin username",
|
|
"admin_email": "Admin email",
|
|
"admin_password": "Admin password",
|
|
"create_admin": "Create administrator",
|
|
"back_to_login": "Already set up?",
|
|
"admin_success": "Administrator account created successfully! You can now sign in.",
|
|
"account_success": "Account created successfully! You can now sign in.",
|
|
"passwords_mismatch": "Passwords do not match",
|
|
"admin_create_error": "Error creating administrator account",
|
|
"or": "or",
|
|
"sso_login": "Sign in with SSO",
|
|
"sso_login_provider": "Sign in with {{provider}}"
|
|
},
|
|
"storage": {
|
|
"title": "Storage",
|
|
"calculating": "Calculating...",
|
|
"used": "{{percentage}}% used ({{used}} / {{total}})"
|
|
},
|
|
"viewer": {
|
|
"unsupported_file": "This file type cannot be previewed.",
|
|
"download_file": "Download file",
|
|
"zoom_in": "Zoom in",
|
|
"zoom_out": "Zoom out",
|
|
"zoom_reset": "Reset zoom"
|
|
},
|
|
"language_selector": {
|
|
"title": "Welcome to OxiCloud",
|
|
"subtitle": "Please select your language",
|
|
"continue": "Continue",
|
|
"languages": {
|
|
"en": "English",
|
|
"es": "Español",
|
|
"zh": "中文",
|
|
"fa": "فارسی",
|
|
"fr": "Français",
|
|
"de": "Deutsch",
|
|
"pt": "Português"
|
|
}
|
|
},
|
|
"favorites": {
|
|
"empty_state": "No favorites yet",
|
|
"empty_hint": "Star files or folders to add them to your favorites",
|
|
"add": "Add to favorites",
|
|
"remove": "Remove from favorites",
|
|
"added_title": "Added to favorites",
|
|
"added_msg": "added to favorites",
|
|
"removed_title": "Removed from favorites",
|
|
"removed_msg": "removed from favorites"
|
|
},
|
|
"recent": {
|
|
"title": "Recent",
|
|
"clear": "Clear recent",
|
|
"accessed": "Accessed",
|
|
"empty_state": "No recent files",
|
|
"empty_hint": "Files you open will appear here"
|
|
},
|
|
"notifications": {
|
|
"file_renamed": "File renamed",
|
|
"file_renamed_to": "File renamed to \"{{name}}\"",
|
|
"folder_renamed": "Folder renamed",
|
|
"folder_renamed_to": "Folder renamed to \"{{name}}\"",
|
|
"file_uploaded": "File uploaded",
|
|
"file_deleted": "File moved to trash",
|
|
"folder_deleted": "Folder moved to trash",
|
|
"item_deleted_permanently": "Item permanently deleted",
|
|
"trash_emptied": "Trash emptied successfully",
|
|
"title": "Notifications",
|
|
"empty": "No notifications"
|
|
},
|
|
"batch": {
|
|
"one_selected": "1 item selected",
|
|
"n_selected": "{{count}} items selected",
|
|
"confirm_delete": "Are you sure you want to move {{count}} items to trash?",
|
|
"move_title": "Move {{count}} item(s)",
|
|
"add_favorites": "Add to favorites",
|
|
"move_copy": "Move or copy"
|
|
}
|
|
} |