- Add pause/resume buttons to file context menu (right-click) - Add batch pause/resume buttons to section titles - Support concurrent pause/resume with pLimit(3) - Add paused status badge (⏸) with warning color - Integrate with Core API /api/v1/jobs/:uuid/pause|resume - Track paused files via Redis jobs:paused set - Add i18n translations (zh-TW, en)
458 lines
14 KiB
JSON
458 lines
14 KiB
JSON
{
|
||
"common": {
|
||
"loading": "Loading...",
|
||
"error": "Error",
|
||
"success": "Success",
|
||
"cancel": "Cancel",
|
||
"confirm": "Confirm",
|
||
"delete": "Delete",
|
||
"save": "Save",
|
||
"edit": "Edit",
|
||
"search": "Search",
|
||
"back": "Back",
|
||
"close": "Close",
|
||
"play": "Play",
|
||
"logout": "Logout",
|
||
"login": "Login"
|
||
},
|
||
"library": {
|
||
"sort": {
|
||
"title": "Sort By",
|
||
"time_desc": "Time (Newest First)",
|
||
"time_asc": "Time (Oldest First)",
|
||
"size_desc": "Size (Largest First)",
|
||
"size_asc": "Size (Smallest First)",
|
||
"name_asc": "Name (A to Z)",
|
||
"name_desc": "Name (Z to A)"
|
||
},
|
||
"filter": {
|
||
"title": "Filter By",
|
||
"unregistered": "Unregistered",
|
||
"registered": "Registered",
|
||
"pending": "Pending",
|
||
"completed": "Completed",
|
||
"videos_only": "Videos Only",
|
||
"photos_only": "Photos Only"
|
||
},
|
||
"size": {
|
||
"title": "Size",
|
||
"min_mb": "Min MB",
|
||
"max_mb": "Max MB"
|
||
},
|
||
"duration": {
|
||
"title": "Video Duration",
|
||
"min_minutes": "Min Minutes",
|
||
"max_minutes": "Max Minutes"
|
||
},
|
||
"status": {
|
||
"files": "{count} files",
|
||
"registered": "Registered",
|
||
"unregistered": "Unregistered",
|
||
"pending": "Pending",
|
||
"preparing": "Preparing",
|
||
"processing": "Processing",
|
||
"completed": "Completed",
|
||
"scanning": "Scanning",
|
||
"ready": "Ready",
|
||
"keyword_ready": "Keyword Ready",
|
||
"semantic_ready": "Semantic Ready",
|
||
"face_mgmt_ready": "Face Mgmt Ready",
|
||
"agent_ready": "Agent Ready",
|
||
"paused": "Paused"
|
||
},
|
||
"thumbnail": {
|
||
"register_to_preview": "Register to see preview"
|
||
},
|
||
"context": {
|
||
"register_file": "Register File",
|
||
"process_file": "Process File",
|
||
"reprocess": "Reprocess",
|
||
"unregister": "Unregister",
|
||
"play_video": "Play Video",
|
||
"processor_selection": "Processor Selection",
|
||
"overall_progress": "Overall Progress",
|
||
"missing_file_path": "Missing file path",
|
||
"file_not_registered": "File not registered",
|
||
"select_processor": "Please select at least one processor",
|
||
"file_must_be_completed": "File must be completed first",
|
||
"face_deduplication": "Face Deduplication",
|
||
"qc_check": "QC Check",
|
||
"pause": "⏸ Pause",
|
||
"resume": "▶ Resume"
|
||
},
|
||
"pipeline": {
|
||
"processors": "Processors",
|
||
"rule1_ingestion": "Rule1 Ingestion",
|
||
"face_tracing": "Face Tracing",
|
||
"tkg_nodes": "TKG Nodes",
|
||
"tkg_edges": "TKG Edges",
|
||
"rule2_ingestion": "Rule2 Ingestion"
|
||
},
|
||
"phase": {
|
||
"processor_output": "Rule1: Processor Output",
|
||
"postgresql_ingestion": "Rule1: PostgreSQL Ingestion",
|
||
"qdrant_ingestion": "Rule1: Qdrant Ingestion"
|
||
},
|
||
"action": {
|
||
"registering": "Registering...",
|
||
"registered": "Registered: {name}",
|
||
"registration_failed": "Registration failed: {message}",
|
||
"registration_error": "Registration error: {error}",
|
||
"processing": "Processing...",
|
||
"processing_started": "Processing started: {name}",
|
||
"processing_failed": "Processing failed: {message}",
|
||
"processing_error": "Processing error: {error}",
|
||
"removing": "Removing...",
|
||
"removed": "Removed: {name}",
|
||
"removal_failed": "Removal failed: {message}",
|
||
"removal_error": "Removal error: {error}",
|
||
"clear_filters": "Clear Filters"
|
||
},
|
||
"qc": {
|
||
"audio_info": "Audio Info",
|
||
"audio_track": "Audio Track",
|
||
"has_audio": "✓ Has Audio",
|
||
"no_audio": "✗ No Audio",
|
||
"speech": "Speech",
|
||
"has_speech": "✓ Has Speech",
|
||
"no_speech": "🔇 No Speech",
|
||
"language": "Language",
|
||
"sample_rate": "Sample Rate",
|
||
"uuid_label": "UUID:",
|
||
"track_processor_output": "Phase 1: Processor Output",
|
||
"track_ingestion": "Phase 2: Data Ingestion",
|
||
"track_status_change": "Final: Status Change",
|
||
"output_ingestion_done": "📥 Output + Ingestion Complete",
|
||
"items": "{count} items"
|
||
},
|
||
"refresh": "Refresh",
|
||
"refresh_status": "Refresh Status",
|
||
"confirm": {
|
||
"title_register": "📥 Register",
|
||
"title_process": "🔍 Deep Scan",
|
||
"title_rescan": "🔄 Re-scan",
|
||
"message_register": "File will be registered and processed with default settings.",
|
||
"message_register_no_scan": "Register only, no automatic scan.",
|
||
"message_process": "Processing will run on the selected processors using default settings.",
|
||
"message_rescan": "This will unregister → register → deep scan the file using selected processors.",
|
||
"cancel": "Cancel",
|
||
"proceed": "Proceed",
|
||
"rerun_processor": "Re-run {processor} for this file?",
|
||
"run_processor": "Run {processor} on {filename}?",
|
||
"unregister_title": "Unregister",
|
||
"unregister_message": "Unregister \"{filename}\"?\n\nThis will remove the file and its output data.",
|
||
"batch_unregister_message": "Unregister {count} files?\n\nThis will remove the files and their output data."
|
||
},
|
||
"processor": {
|
||
"started": "{processor} started",
|
||
"failed": "Failed: {message}",
|
||
"error": "Error: {message}",
|
||
"no_file": "Error: No file selected",
|
||
"vlm_failed": "Failed to trigger VLM summary: {message}",
|
||
"pipeline_qc": "Pipeline QC"
|
||
},
|
||
"settings": {
|
||
"auto_scan": "Auto deep scan after registration"
|
||
}
|
||
},
|
||
"people": {
|
||
"toolbar": {
|
||
"all_files": "All Files",
|
||
"view_all_people": "View All People",
|
||
"view_starred_people": "View Starred People",
|
||
"refresh": "Refresh",
|
||
"pending_people": "People",
|
||
"skipped_people": "Skipped People",
|
||
"pending_faces": "Faces",
|
||
"face_group": "Face Group"
|
||
},
|
||
"section": {
|
||
"known_people": "Known People",
|
||
"pending_people": "People",
|
||
"skipped_people": "Skipped People",
|
||
"pending_faces": "Faces",
|
||
"face_group": "Face Group",
|
||
"unassigned": "Unassigned"
|
||
},
|
||
"sort": {
|
||
"title": "Sort By",
|
||
"recent": "Recently Viewed",
|
||
"file_name": "File Name",
|
||
"name_az": "Name (A to Z)",
|
||
"name_za": "Name (Z to A)",
|
||
"time_desc": "Time (Newest First)",
|
||
"time_asc": "Time (Oldest First)"
|
||
},
|
||
"search": {
|
||
"known_people": "Search known people",
|
||
"pending_people": "Search pending people",
|
||
"person_name": "Search person name..."
|
||
},
|
||
"action_history": {
|
||
"title": "Action History · {name}",
|
||
"undo_all": "Undo All",
|
||
"redo_all": "Redo All",
|
||
"delete_person": "Delete This Person",
|
||
"no_history": "No action history"
|
||
},
|
||
"expand": {
|
||
"collapse": "Collapse",
|
||
"expand": "Expand",
|
||
"view_faces": "View Faces",
|
||
"appears_in": "Appears in:",
|
||
"faces": "{count} faces",
|
||
"set_as_profile": "Set as Profile",
|
||
"no_face_data": "No face data"
|
||
},
|
||
"context": {
|
||
"star_person": "★ Mark as Important",
|
||
"unstar_person": "☆ Remove Important",
|
||
"details": "📋 Details",
|
||
"confirm_person": "✓ Confirm Person",
|
||
"pending": "Pending",
|
||
"edit_name": "✎ Edit Name",
|
||
"merge_person": "⇄ Already Have This Person",
|
||
"skip_person": "✕ Skip This Person",
|
||
"undo": "↩ Undo",
|
||
"redo": "↪ Redo",
|
||
"delete_person": "🗑 Delete This Person"
|
||
},
|
||
"face_context": {
|
||
"details": "📋 Details",
|
||
"assign_existing": "⇄ Assign to Existing Person",
|
||
"skip_face": "✕ Skip This Face"
|
||
},
|
||
"assign": {
|
||
"title": "Assign to Existing Person",
|
||
"search_placeholder": "Search person name...",
|
||
"no_results": "No matching people found",
|
||
"confirm_assign": "Confirm Assignment"
|
||
},
|
||
"face_detail": {
|
||
"title": "Pending Face Details",
|
||
"file": "File:",
|
||
"trace_id": "Trace ID:",
|
||
"frame_number": "Frame Number:",
|
||
"confidence": "Confidence:",
|
||
"face_id": "Face ID:",
|
||
"play_segment": "Play Video Segment",
|
||
"new_identity": "Create as New Person",
|
||
"enter_name": "Enter person name...",
|
||
"add": "Add",
|
||
"close": "Close"
|
||
},
|
||
"detail": {
|
||
"back": "Back",
|
||
"edit": "Edit",
|
||
"role": "Role",
|
||
"description": "Description",
|
||
"enter_name": "Enter name",
|
||
"enter_alias": "Enter alias and press Enter",
|
||
"add_alias": "+ Alias",
|
||
"collapse": "Collapse",
|
||
"role_name": "Role name",
|
||
"custom_description": "Custom description",
|
||
"saving": "Saving...",
|
||
"save_changes": "✓ Save Changes",
|
||
"cancel": "Cancel",
|
||
"add_same_person": "Add same person",
|
||
"play": "▶ Play",
|
||
"unbind": "✕ Unbind",
|
||
"segments": "{count} segments",
|
||
"traces": "{count} traces",
|
||
"all_segments": "All segments",
|
||
"mode_trace": "Trace",
|
||
"mode_segment": "Segment",
|
||
"mode_continuous": "Continuous",
|
||
"status": "Status:",
|
||
"confirm": "✓ Confirm",
|
||
"skip": "Skip",
|
||
"bind_face": "+ Bind Face",
|
||
"merge_other": "⇄ Merge to Other Person",
|
||
"delete_person": "Delete This Person",
|
||
"bind_face_title": "Bind Face",
|
||
"merge_title": "⇄ Merge to Other Person",
|
||
"unbind_trace": "Unbind trace T{trace_id} (face_id: {face_id})?",
|
||
"no_face_id": "This trace has no face_id, cannot unbind",
|
||
"unbind_failed": "Unbind failed: {error}",
|
||
"merge_confirm": "Merge \"{source}\" into \"{target}\"?",
|
||
"not_this_person": "Not This Person",
|
||
"delete_confirm": "Delete \"{name}\"?",
|
||
"delete_confirm_message": "Delete \"{name}\"? This action cannot be undone.",
|
||
"delete_failed": "Delete failed: {error}",
|
||
"create_identity_failed": "Failed to create person: API did not return identity_uuid",
|
||
"create_identity_error": "Failed to create person: {error}",
|
||
"assign_failed": "Assignment failed: {error}"
|
||
},
|
||
"action": {
|
||
"delete_person": "Delete Person",
|
||
"update_person": "Update Person",
|
||
"bind_face": "Bind Face",
|
||
"unbind_face": "Unbind Face",
|
||
"bind_trace": "Bind Trace"
|
||
}
|
||
},
|
||
"agent": {
|
||
"welcome": {
|
||
"title": "👋 Welcome to Momentry Studio",
|
||
"intro": "I'll help you make better use of the system. Let me introduce the main features:",
|
||
"smart_search": {
|
||
"title": "Smart Search",
|
||
"desc": "Keyword, semantic, and people search modes"
|
||
},
|
||
"people_management": {
|
||
"title": "People Management",
|
||
"desc": "Identify people in videos, build people database"
|
||
},
|
||
"file_management": {
|
||
"title": "File Management",
|
||
"desc": "Manage and process your video and photo files"
|
||
},
|
||
"got_it": "Got it, start using"
|
||
}
|
||
},
|
||
"login": {
|
||
"title": "Momentry Studio",
|
||
"subtitle": "Login to continue",
|
||
"username": "Username",
|
||
"password": "Password",
|
||
"username_placeholder": "Enter username",
|
||
"password_placeholder": "Enter password",
|
||
"login_button": "Login",
|
||
"logging_in": "Logging in...",
|
||
"login_success": "Login successful!",
|
||
"default_credentials": "Default credentials: demo / demo123"
|
||
},
|
||
"nav": {
|
||
"search": "Search",
|
||
"library": "Library",
|
||
"people": "People",
|
||
"admin": "Admin",
|
||
"client": "Client"
|
||
},
|
||
"time": {
|
||
"just_now": "Just now",
|
||
"minutes_ago": "{count} min ago",
|
||
"hours_ago": "{count} hr ago"
|
||
},
|
||
"video": {
|
||
"prev": "Previous",
|
||
"next": "Next",
|
||
"key_frame": "Key Frame"
|
||
},
|
||
"language": {
|
||
"en": "English",
|
||
"zh-TW": "Traditional Chinese",
|
||
"zh-CN": "Simplified Chinese",
|
||
"ja": "Japanese",
|
||
"ko": "Korean",
|
||
"auto": "Auto Detect"
|
||
},
|
||
"client": {
|
||
"title": "File Manager",
|
||
"search": {
|
||
"placeholder": "Search files..."
|
||
},
|
||
"table": {
|
||
"name": "Name",
|
||
"size": "Size",
|
||
"type": "Type",
|
||
"modified": "Modified"
|
||
},
|
||
"button": {
|
||
"upload": "Upload",
|
||
"newFolder": "New Folder",
|
||
"refresh": "Refresh",
|
||
"create": "Create",
|
||
"cancel": "Cancel",
|
||
"delete": "Delete",
|
||
"rename": "Rename",
|
||
"move": "Move",
|
||
"preview": "Preview",
|
||
"download": "Download"
|
||
},
|
||
"dialog": {
|
||
"createFolder": "Create New Folder",
|
||
"folderName": "Folder name",
|
||
"deleteTitle": "Delete \"{name}\"",
|
||
"deleteMessage": "Are you sure you want to delete this {type}? This action cannot be undone.",
|
||
"renameTitle": "Rename \"{name}\"",
|
||
"newName": "New name",
|
||
"previewTitle": "File Preview: {name}",
|
||
"uploadTitle": "Upload File{s}",
|
||
"moveTitle": "Move {type} \"{name}\"",
|
||
"selectFiles": "Select files"
|
||
},
|
||
"type": {
|
||
"file": "file",
|
||
"folder": "folder",
|
||
"files": "files"
|
||
},
|
||
"status": {
|
||
"uploading": "Uploading...",
|
||
"success": "Success",
|
||
"error": "Error"
|
||
}
|
||
},
|
||
"admin": {
|
||
"title": "Admin Panel",
|
||
"tab": {
|
||
"dashboard": "Dashboard",
|
||
"users": "Users",
|
||
"shares": "Shares",
|
||
"config": "Config",
|
||
"settings": "Settings"
|
||
},
|
||
"section": {
|
||
"systemResources": "System Resources",
|
||
"validation": "Validation",
|
||
"configuration": "Admin Configuration",
|
||
"vlmPrompts": "VLM Prompts",
|
||
"languagePacks": "Language Packs",
|
||
"llmConfig": "LLM Configuration",
|
||
"processorConfig": "Processor Configuration",
|
||
"filterConfig": "Filter Configuration",
|
||
"searchConfig": "Search Configuration",
|
||
"systemConfig": "System Configuration",
|
||
"uploadPath": "Upload Path",
|
||
"serviceUrls": "Service URLs"
|
||
},
|
||
"resource": {
|
||
"cpu": "CPU",
|
||
"memory": "Memory",
|
||
"swap": "Swap",
|
||
"gpu": "GPU",
|
||
"gpuFreq": "GPU Freq",
|
||
"systemPower": "System Power"
|
||
},
|
||
"table": {
|
||
"username": "Username",
|
||
"homeDir": "Home Dir",
|
||
"status": "Status",
|
||
"name": "Name",
|
||
"port": "Port",
|
||
"filter": "Filter",
|
||
"parameters": "Parameters"
|
||
},
|
||
"config": {
|
||
"systemPrompt": "System Prompt",
|
||
"prompt": "Prompt",
|
||
"userPrompt": "User Prompt",
|
||
"maxTokens": "Max Tokens",
|
||
"url": "URL",
|
||
"model": "Model",
|
||
"availableLanguages": "Available Languages",
|
||
"importLanguagePack": "Import Language Pack",
|
||
"tools": "Tools"
|
||
},
|
||
"stat": {
|
||
"users": "Users",
|
||
"shares": "Shares"
|
||
}
|
||
},
|
||
"app": {
|
||
"productName": "Momentry Studio",
|
||
"tagline": "Turn Every Moment Into Intelligence"
|
||
}
|
||
}
|