Files
wled-screen-controller-mixed/server/src/wled_controller/static/locales/en.json
alexei.dolgolyov c31818a20d Add color_cycle as standalone source type; UI polish
- color_cycle is now a top-level source type (alongside picture/static/gradient)
  with a configurable color list and cycle_speed; defaults to full rainbow spectrum
- ColorCycleColorStripSource + ColorCycleColorStripStream: smooth 30 fps interpolation
  between user-defined colors, one full cycle every 20s at speed=1.0
- Removed color_cycle animation sub-type from StaticColorStripStream
- Color cycle editor: compact horizontal swatch layout, proper module-scope fix
  (colorCycleAdd/Remove now exposed on window, DOM-synced before mutations)
- Animation enabled + Frame interpolation checkboxes use toggle-switch style
- Removed Potential FPS metric from targets and KC targets metric grids

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 22:14:42 +03:00

610 lines
34 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"app.title": "LED Grab",
"app.version": "Version:",
"app.api_docs": "API Documentation",
"theme.toggle": "Toggle theme",
"locale.change": "Change language",
"auth.login": "Login",
"auth.logout": "Logout",
"auth.authenticated": "● Authenticated",
"auth.title": "Login to LED Grab",
"auth.message": "Please enter your API key to authenticate and access the LED Grab.",
"auth.label": "API Key:",
"auth.placeholder": "Enter your API key...",
"auth.hint": "Your API key will be stored securely in your browser's local storage.",
"auth.button.cancel": "Cancel",
"auth.button.login": "Login",
"auth.error.required": "Please enter an API key",
"auth.success": "Logged in successfully!",
"auth.logout.confirm": "Are you sure you want to logout?",
"auth.logout.success": "Logged out successfully",
"auth.please_login": "Please login to view",
"auth.session_expired": "Your session has expired or the API key is invalid. Please login again.",
"displays.title": "Available Displays",
"displays.layout": "\uD83D\uDDA5\uFE0F Displays",
"displays.information": "Display Information",
"displays.legend.primary": "Primary Display",
"displays.legend.secondary": "Secondary Display",
"displays.badge.primary": "Primary",
"displays.badge.secondary": "Secondary",
"displays.resolution": "Resolution:",
"displays.refresh_rate": "Refresh Rate:",
"displays.position": "Position:",
"displays.index": "Display Index:",
"displays.loading": "Loading displays...",
"displays.none": "No displays available",
"displays.failed": "Failed to load displays",
"displays.picker.title": "Select a Display",
"displays.picker.select": "Select display...",
"displays.picker.click_to_select": "Click to select this display",
"templates.title": "\uD83D\uDCC4 Engine Templates",
"templates.description": "Capture templates define how the screen is captured. Each template uses a specific capture engine (MSS, DXcam, WGC) with custom settings. Assign templates to devices for optimal performance.",
"templates.loading": "Loading templates...",
"templates.empty": "No capture templates configured",
"templates.add": "Add Engine Template",
"templates.edit": "Edit Engine Template",
"templates.name": "Template Name:",
"templates.name.placeholder": "My Custom Template",
"templates.description.label": "Description (optional):",
"templates.description.placeholder": "Describe this template...",
"templates.engine": "Capture Engine:",
"templates.engine.hint": "Select the screen capture technology to use",
"templates.engine.select": "Select an engine...",
"templates.engine.unavailable": "Unavailable",
"templates.engine.unavailable.hint": "This engine is not available on your system",
"templates.config": "Configuration",
"templates.config.show": "Show configuration",
"templates.config.none": "No additional configuration",
"templates.config.default": "Default",
"templates.created": "Template created successfully",
"templates.updated": "Template updated successfully",
"templates.deleted": "Template deleted successfully",
"templates.delete.confirm": "Are you sure you want to delete this template?",
"templates.error.load": "Failed to load templates",
"templates.error.engines": "Failed to load engines",
"templates.error.required": "Please fill in all required fields",
"templates.error.delete": "Failed to delete template",
"templates.test.title": "Test Capture",
"templates.test.description": "Test this template before saving to see a capture preview and performance metrics.",
"templates.test.display": "Display:",
"templates.test.display.select": "Select display...",
"templates.test.duration": "Capture Duration (s):",
"templates.test.border_width": "Border Width (px):",
"templates.test.run": "\uD83E\uDDEA Run",
"templates.test.running": "Running test...",
"templates.test.results.preview": "Full Capture Preview",
"templates.test.results.borders": "Border Extraction",
"templates.test.results.top": "Top",
"templates.test.results.right": "Right",
"templates.test.results.bottom": "Bottom",
"templates.test.results.left": "Left",
"templates.test.results.performance": "Performance",
"templates.test.results.capture_time": "Capture",
"templates.test.results.extraction_time": "Extraction",
"templates.test.results.total_time": "Total",
"templates.test.results.max_fps": "Max FPS",
"templates.test.results.duration": "Duration",
"templates.test.results.frame_count": "Frames",
"templates.test.results.actual_fps": "Actual FPS",
"templates.test.results.avg_capture_time": "Avg Capture",
"templates.test.error.no_engine": "Please select a capture engine",
"templates.test.error.no_display": "Please select a display",
"templates.test.error.failed": "Test failed",
"devices.title": "\uD83D\uDCA1 Devices",
"devices.add": "Add New Device",
"devices.loading": "Loading devices...",
"devices.none": "No devices configured",
"devices.failed": "Failed to load devices",
"devices.wled_config": "WLED Configuration:",
"devices.wled_note": "Configure your WLED device (effects, segments, color order, power limits, etc.) using the",
"devices.wled_link": "official WLED app",
"devices.wled_note_or": "or the built-in",
"devices.wled_webui_link": "WLED Web UI",
"devices.wled_note_webui": "(open your device's IP in a browser).",
"devices.wled_note2": "This controller sends pixel color data and controls brightness per device.",
"device.scan": "Auto Discovery",
"device.scan.empty": "No devices found",
"device.scan.error": "Network scan failed",
"device.scan.already_added": "Already added",
"device.scan.selected": "Device selected",
"device.type": "Device Type:",
"device.type.hint": "Select the type of LED controller",
"device.serial_port": "Serial Port:",
"device.serial_port.hint": "Select the COM port of the Adalight device",
"device.serial_port.none": "No serial ports found",
"device.led_count_manual.hint": "Number of LEDs on the strip (must match your Arduino sketch)",
"device.baud_rate": "Baud Rate:",
"device.baud_rate.hint": "Serial communication speed. Higher = more FPS but requires matching Arduino sketch.",
"device.url.hint": "IP address or hostname of the device (e.g. http://192.168.1.100)",
"device.name": "Device Name:",
"device.name.placeholder": "Living Room TV",
"device.url": "URL:",
"device.url.placeholder": "http://192.168.1.100",
"device.led_count": "LED Count:",
"device.led_count.hint": "Number of LEDs configured in the device",
"device.led_count.hint.auto": "Auto-detected from device",
"device.button.add": "Add Device",
"device.button.start": "Start",
"device.button.stop": "Stop",
"device.button.settings": "General Settings",
"device.button.capture_settings": "Capture Settings",
"device.button.calibrate": "Calibrate",
"device.button.remove": "Remove",
"device.button.webui": "Open Device Web UI",
"device.button.power_toggle": "Toggle Power",
"device.power.on_success": "Device turned on",
"device.power.off_success": "Device turned off",
"device.status.connected": "Connected",
"device.status.disconnected": "Disconnected",
"device.status.error": "Error",
"device.status.processing": "Processing",
"device.status.idle": "Idle",
"device.fps": "FPS:",
"device.display": "Display:",
"device.remove.confirm": "Are you sure you want to remove this device?",
"device.added": "Device added successfully",
"device.removed": "Device removed successfully",
"device.started": "Processing started",
"device.stopped": "Processing stopped",
"device.metrics.actual_fps": "Actual FPS",
"device.metrics.current_fps": "Current FPS",
"device.metrics.target_fps": "Target FPS",
"device.metrics.potential_fps": "Potential FPS",
"device.metrics.frames": "Frames",
"device.metrics.frames_skipped": "Skipped",
"device.metrics.keepalive": "Keepalive",
"device.metrics.errors": "Errors",
"device.metrics.timing": "Pipeline timing:",
"device.metrics.device_fps": "Device refresh rate",
"device.health.online": "Online",
"device.health.offline": "Offline",
"device.health.checking": "Checking...",
"device.static_color": "Idle Color",
"device.static_color.hint": "Color shown when device is idle",
"device.static_color.clear": "Clear idle color",
"device.tutorial.start": "Start tutorial",
"device.tip.metadata": "Device info (LED count, type, color channels) is auto-detected from the device",
"device.tip.brightness": "Slide to adjust device brightness",
"device.tip.start": "Start or stop screen capture processing",
"device.tip.settings": "Configure general device settings (name, URL, health check)",
"device.tip.capture_settings": "Configure capture settings (display, capture template)",
"device.tip.calibrate": "Calibrate LED positions, direction, and coverage",
"device.tip.webui": "Open the device's built-in web interface for advanced configuration",
"device.tip.add": "Click here to add a new LED device",
"settings.title": "Device Settings",
"settings.general.title": "General Settings",
"settings.capture.title": "Capture Settings",
"settings.capture.saved": "Capture settings updated",
"settings.capture.failed": "Failed to save capture settings",
"settings.brightness": "Brightness:",
"settings.brightness.hint": "Global brightness for this device (0-100%)",
"settings.url.hint": "IP address or hostname of the device",
"settings.display_index": "Display:",
"settings.display_index.hint": "Which screen to capture for this device",
"settings.fps": "Target FPS:",
"settings.fps.hint": "Target frames per second (10-90)",
"settings.capture_template": "Engine Template:",
"settings.capture_template.hint": "Screen capture engine and configuration for this device",
"settings.button.cancel": "Cancel",
"settings.health_interval": "Health Check Interval (s):",
"settings.health_interval.hint": "How often to check the device status (5-600 seconds)",
"settings.auto_shutdown": "Auto Restore:",
"settings.auto_shutdown.hint": "Restore device to idle state when targets stop or server shuts down",
"settings.button.save": "Save Changes",
"settings.saved": "Settings saved successfully",
"settings.failed": "Failed to save settings",
"calibration.title": "LED Calibration",
"calibration.tip.led_count": "Enter LED count per edge",
"calibration.tip.start_corner": "Click a corner to set the start position",
"calibration.tip.direction": "Toggle LED strip direction (clockwise / counterclockwise)",
"calibration.tip.offset": "Set LED offset — distance from LED 0 to the start corner",
"calibration.tip.span": "Drag green bars to adjust coverage span",
"calibration.tip.test": "Click an edge to toggle test LEDs",
"calibration.tip.toggle_inputs": "Click total LED count to toggle edge inputs",
"calibration.tip.border_width": "How many pixels from the screen edge to sample for LED colors",
"calibration.tip.skip_leds_start": "Skip LEDs at the start of the strip — skipped LEDs stay off",
"calibration.tip.skip_leds_end": "Skip LEDs at the end of the strip — skipped LEDs stay off",
"calibration.tutorial.start": "Start tutorial",
"calibration.start_position": "Starting Position:",
"calibration.position.bottom_left": "Bottom Left",
"calibration.position.bottom_right": "Bottom Right",
"calibration.position.top_left": "Top Left",
"calibration.position.top_right": "Top Right",
"calibration.direction": "Direction:",
"calibration.direction.clockwise": "Clockwise",
"calibration.direction.counterclockwise": "Counterclockwise",
"calibration.leds.top": "Top LEDs:",
"calibration.leds.right": "Right LEDs:",
"calibration.leds.bottom": "Bottom LEDs:",
"calibration.leds.left": "Left LEDs:",
"calibration.offset": "LED Offset:",
"calibration.offset.hint": "Distance from physical LED 0 to the start corner (along strip direction)",
"calibration.skip_start": "Skip LEDs (Start):",
"calibration.skip_start.hint": "Number of LEDs to turn off at the beginning of the strip (0 = none)",
"calibration.skip_end": "Skip LEDs (End):",
"calibration.skip_end.hint": "Number of LEDs to turn off at the end of the strip (0 = none)",
"calibration.border_width": "Border (px):",
"calibration.border_width.hint": "How many pixels from the screen edge to sample for LED colors (1-100)",
"calibration.button.cancel": "Cancel",
"calibration.button.save": "Save",
"calibration.saved": "Calibration saved successfully",
"calibration.failed": "Failed to save calibration",
"server.healthy": "Server online",
"server.offline": "Server offline",
"error.unauthorized": "Unauthorized - please login",
"error.network": "Network error",
"error.unknown": "An error occurred",
"modal.discard_changes": "You have unsaved changes. Discard them?",
"confirm.title": "Confirm Action",
"confirm.yes": "Yes",
"confirm.no": "No",
"common.loading": "Loading...",
"common.delete": "Delete",
"common.edit": "Edit",
"streams.title": "\uD83D\uDCFA Sources",
"streams.description": "Sources define the capture pipeline. A raw source captures from a display using a capture template. A processed source applies postprocessing to another source. Assign sources to devices.",
"streams.group.raw": "Screen Capture",
"streams.group.processed": "Processed",
"streams.section.streams": "\uD83D\uDCFA Sources",
"streams.add": "Add Source",
"streams.add.raw": "Add Screen Capture",
"streams.add.processed": "Add Processed Source",
"streams.edit": "Edit Source",
"streams.edit.raw": "Edit Screen Capture",
"streams.edit.processed": "Edit Processed Source",
"streams.name": "Source Name:",
"streams.name.placeholder": "My Source",
"streams.type": "Type:",
"streams.type.raw": "Screen Capture",
"streams.type.processed": "Processed",
"streams.display": "Display:",
"streams.display.hint": "Which screen to capture",
"streams.capture_template": "Engine Template:",
"streams.capture_template.hint": "Engine template defining how the screen is captured",
"streams.target_fps": "Target FPS:",
"streams.target_fps.hint": "Target frames per second for capture (10-90)",
"streams.source": "Source:",
"streams.source.hint": "The source to apply processing filters to",
"streams.pp_template": "Filter Template:",
"streams.pp_template.hint": "Filter template to apply to the source",
"streams.description_label": "Description (optional):",
"streams.description_placeholder": "Describe this source...",
"streams.created": "Source created successfully",
"streams.updated": "Source updated successfully",
"streams.deleted": "Source deleted successfully",
"streams.delete.confirm": "Are you sure you want to delete this source?",
"streams.error.load": "Failed to load sources",
"streams.error.required": "Please fill in all required fields",
"streams.error.delete": "Failed to delete source",
"streams.test.title": "Test Source",
"streams.test.run": "🧪 Run",
"streams.test.running": "Testing source...",
"streams.test.duration": "Capture Duration (s):",
"streams.test.error.failed": "Source test failed",
"postprocessing.title": "\uD83D\uDCC4 Filter Templates",
"postprocessing.description": "Processing templates define image filters and color correction. Assign them to processed picture sources for consistent postprocessing across devices.",
"postprocessing.add": "Add Filter Template",
"postprocessing.edit": "Edit Filter Template",
"postprocessing.name": "Template Name:",
"postprocessing.name.placeholder": "My Filter Template",
"filters.select_type": "Select filter type...",
"filters.add": "Add Filter",
"filters.remove": "Remove",
"filters.move_up": "Move Up",
"filters.move_down": "Move Down",
"filters.empty": "No filters added. Use the selector below to add filters.",
"filters.brightness": "Brightness",
"filters.saturation": "Saturation",
"filters.gamma": "Gamma",
"filters.downscaler": "Downscaler",
"filters.pixelate": "Pixelate",
"filters.auto_crop": "Auto Crop",
"filters.flip": "Flip",
"filters.color_correction": "Color Correction",
"postprocessing.description_label": "Description (optional):",
"postprocessing.description_placeholder": "Describe this template...",
"postprocessing.created": "Template created successfully",
"postprocessing.updated": "Template updated successfully",
"postprocessing.deleted": "Template deleted successfully",
"postprocessing.delete.confirm": "Are you sure you want to delete this filter template?",
"postprocessing.error.load": "Failed to load processing templates",
"postprocessing.error.required": "Please fill in all required fields",
"postprocessing.error.delete": "Failed to delete processing template",
"postprocessing.config.show": "Show settings",
"postprocessing.test.title": "Test Filter Template",
"postprocessing.test.source_stream": "Source:",
"postprocessing.test.running": "Testing processing template...",
"postprocessing.test.error.no_stream": "Please select a source",
"postprocessing.test.error.failed": "Processing template test failed",
"device.button.stream_selector": "Source Settings",
"device.stream_settings.title": "📺 Source Settings",
"device.stream_selector.label": "Source:",
"device.stream_selector.hint": "Select a source that defines what this device captures and processes",
"device.stream_selector.none": "-- No source assigned --",
"device.stream_selector.saved": "Source settings updated",
"device.stream_settings.border_width": "Border Width (px):",
"device.stream_settings.border_width_hint": "How many pixels from the screen edge to sample for LED colors (1-100)",
"device.stream_settings.interpolation": "Interpolation Mode:",
"device.stream_settings.interpolation.average": "Average",
"device.stream_settings.interpolation.median": "Median",
"device.stream_settings.interpolation.dominant": "Dominant",
"device.stream_settings.interpolation_hint": "How to calculate LED color from sampled pixels",
"device.stream_settings.smoothing": "Smoothing:",
"device.stream_settings.smoothing_hint": "Temporal blending between frames (0=none, 1=full). Reduces flicker.",
"device.tip.stream_selector": "Configure picture source and LED projection settings for this device",
"streams.group.static_image": "Static Image",
"streams.add.static_image": "Add Static Image Source",
"streams.edit.static_image": "Edit Static Image Source",
"streams.type.static_image": "Static Image",
"streams.image_source": "Image Source:",
"streams.image_source.placeholder": "https://example.com/image.jpg or C:\\path\\to\\image.png",
"streams.image_source.hint": "Enter a URL (http/https) or local file path to an image",
"streams.validate_image.validating": "Validating...",
"streams.validate_image.valid": "Image accessible",
"streams.validate_image.invalid": "Image not accessible",
"targets.title": "⚡ Targets",
"targets.description": "Targets bridge color strip sources to output devices. Each target references a device and a color strip source.",
"targets.subtab.wled": "LED",
"targets.subtab.led": "LED",
"targets.section.devices": "💡 Devices",
"targets.section.color_strips": "🎞️ Color Strip Sources",
"targets.section.targets": "⚡ Targets",
"targets.add": "Add Target",
"targets.edit": "Edit Target",
"targets.loading": "Loading targets...",
"targets.none": "No targets configured",
"targets.failed": "Failed to load targets",
"targets.name": "Target Name:",
"targets.name.placeholder": "My Target",
"targets.device": "Device:",
"targets.device.hint": "Select the LED device to send data to",
"targets.device.none": "-- Select a device --",
"targets.color_strip_source": "Color Strip Source:",
"targets.color_strip_source.hint": "Color strip source that captures and processes screen pixels into LED colors",
"targets.source": "Source:",
"targets.source.hint": "Which picture source to capture and process",
"targets.source.none": "-- No source assigned --",
"targets.fps": "Target FPS:",
"targets.fps.hint": "Target frames per second for capture and LED updates (10-90)",
"targets.border_width": "Border Width (px):",
"targets.border_width.hint": "How many pixels from the screen edge to sample for LED colors (1-100)",
"targets.interpolation": "Interpolation Mode:",
"targets.interpolation.hint": "How to calculate LED color from sampled pixels",
"targets.interpolation.average": "Average",
"targets.interpolation.median": "Median",
"targets.interpolation.dominant": "Dominant",
"targets.smoothing": "Smoothing:",
"targets.smoothing.hint": "Temporal blending between frames (0=none, 1=full). Reduces flicker.",
"targets.standby_interval": "Standby Interval:",
"targets.standby_interval.hint": "How often to resend the last frame when the screen is static, keeping the device in live mode (0.5-5.0s)",
"targets.created": "Target created successfully",
"targets.updated": "Target updated successfully",
"targets.deleted": "Target deleted successfully",
"targets.delete.confirm": "Are you sure you want to delete this target?",
"targets.error.load": "Failed to load targets",
"targets.error.required": "Please fill in all required fields",
"targets.error.name_required": "Please enter a target name",
"targets.error.delete": "Failed to delete target",
"targets.button.start": "Start",
"targets.button.stop": "Stop",
"targets.status.processing": "Processing",
"targets.status.idle": "Idle",
"targets.status.error": "Error",
"targets.metrics.actual_fps": "Actual FPS",
"targets.metrics.target_fps": "Target FPS",
"targets.metrics.frames": "Frames",
"targets.metrics.errors": "Errors",
"targets.subtab.key_colors": "Key Colors",
"targets.section.key_colors": "🎨 Key Colors Targets",
"kc.add": "Add Key Colors Target",
"kc.edit": "Edit Key Colors Target",
"kc.name": "Target Name:",
"kc.name.placeholder": "My Key Colors Target",
"kc.source": "Picture Source:",
"kc.source.hint": "Which picture source to extract colors from",
"kc.source.none": "-- No source assigned --",
"kc.fps": "Extraction FPS:",
"kc.fps.hint": "How many times per second to extract colors (1-60)",
"kc.interpolation": "Color Mode:",
"kc.interpolation.hint": "How to compute the key color from pixels in each rectangle",
"kc.interpolation.average": "Average",
"kc.interpolation.median": "Median",
"kc.interpolation.dominant": "Dominant",
"kc.smoothing": "Smoothing:",
"kc.smoothing.hint": "Temporal blending between extractions (0=none, 1=full)",
"kc.pattern_template": "Pattern Template:",
"kc.pattern_template.hint": "Select the rectangle pattern to use for color extraction",
"kc.pattern_template.none": "-- Select a pattern template --",
"kc.created": "Key colors target created successfully",
"kc.updated": "Key colors target updated successfully",
"kc.deleted": "Key colors target deleted successfully",
"kc.delete.confirm": "Are you sure you want to delete this key colors target?",
"kc.error.no_pattern": "Please select a pattern template",
"kc.error.required": "Please fill in all required fields",
"kc.colors.none": "No colors extracted yet",
"kc.test": "Test",
"kc.test.error": "Test failed",
"targets.section.pattern_templates": "📄 Pattern Templates",
"pattern.add": "📄 Add Pattern Template",
"pattern.edit": "📄 Edit Pattern Template",
"pattern.name": "Template Name:",
"pattern.name.placeholder": "My Pattern Template",
"pattern.description_label": "Description (optional):",
"pattern.description_placeholder": "Describe this pattern...",
"pattern.rectangles": "Rectangles",
"pattern.rect.name": "Name",
"pattern.rect.x": "X",
"pattern.rect.y": "Y",
"pattern.rect.width": "W",
"pattern.rect.height": "H",
"pattern.rect.add": "Add Rectangle",
"pattern.rect.remove": "Remove",
"pattern.rect.empty": "No rectangles defined. Add at least one rectangle.",
"pattern.created": "Pattern template created successfully",
"pattern.updated": "Pattern template updated successfully",
"pattern.deleted": "Pattern template deleted successfully",
"pattern.delete.confirm": "Are you sure you want to delete this pattern template?",
"pattern.delete.referenced": "Cannot delete: this template is referenced by a target",
"pattern.error.required": "Please fill in all required fields",
"pattern.visual_editor": "Visual Editor",
"pattern.capture_bg": "Capture Background",
"pattern.source_for_bg": "Source for Background:",
"pattern.source_for_bg.none": "-- Select source --",
"pattern.delete_selected": "Delete Selected",
"pattern.name.hint": "A descriptive name for this rectangle layout",
"pattern.description.hint": "Optional notes about where or how this pattern is used",
"pattern.visual_editor.hint": "Click + buttons to add rectangles. Drag edges to resize, drag inside to move.",
"pattern.rectangles.hint": "Fine-tune rectangle positions and sizes with exact coordinates (0.0 to 1.0)",
"overlay.button.show": "Show overlay visualization",
"overlay.button.hide": "Hide overlay visualization",
"overlay.started": "Overlay visualization started",
"overlay.stopped": "Overlay visualization stopped",
"overlay.error.start": "Failed to start overlay",
"overlay.error.stop": "Failed to stop overlay",
"dashboard.title": "📊 Dashboard",
"dashboard.section.targets": "Targets",
"dashboard.section.running": "Running",
"dashboard.section.stopped": "Stopped",
"dashboard.no_targets": "No targets configured",
"dashboard.uptime": "Uptime",
"dashboard.fps": "FPS",
"dashboard.errors": "Errors",
"dashboard.device": "Device",
"dashboard.stop_all": "Stop All",
"dashboard.failed": "Failed to load dashboard",
"dashboard.section.profiles": "Profiles",
"dashboard.targets": "Targets",
"dashboard.section.performance": "System Performance",
"dashboard.perf.cpu": "CPU",
"dashboard.perf.ram": "RAM",
"dashboard.perf.gpu": "GPU",
"dashboard.perf.unavailable": "unavailable",
"dashboard.poll_interval": "Refresh interval",
"profiles.title": "\uD83D\uDCCB Profiles",
"profiles.empty": "No profiles configured. Create one to automate target activation.",
"profiles.add": "\uD83D\uDCCB Add Profile",
"profiles.edit": "Edit Profile",
"profiles.delete.confirm": "Delete profile \"{name}\"?",
"profiles.name": "Name:",
"profiles.name.hint": "A descriptive name for this profile",
"profiles.enabled": "Enabled:",
"profiles.enabled.hint": "Disabled profiles won't activate even when conditions are met",
"profiles.condition_logic": "Condition Logic:",
"profiles.condition_logic.hint": "How multiple conditions are combined: ANY (OR) or ALL (AND)",
"profiles.condition_logic.or": "Any condition (OR)",
"profiles.condition_logic.and": "All conditions (AND)",
"profiles.conditions": "Conditions:",
"profiles.conditions.hint": "Rules that determine when this profile activates",
"profiles.conditions.add": "Add Condition",
"profiles.conditions.empty": "No conditions \u2014 profile will never activate automatically",
"profiles.condition.application": "Application",
"profiles.condition.application.apps": "Applications:",
"profiles.condition.application.apps.hint": "Process names, one per line (e.g. firefox.exe)",
"profiles.condition.application.browse": "Browse",
"profiles.condition.application.search": "Filter processes...",
"profiles.condition.application.no_processes": "No processes found",
"profiles.condition.application.match_type": "Match Type:",
"profiles.condition.application.match_type.hint": "How to detect the application",
"profiles.condition.application.match_type.running": "Running",
"profiles.condition.application.match_type.topmost": "Topmost (foreground)",
"profiles.condition.application.match_type.topmost_fullscreen": "Topmost + Fullscreen",
"profiles.condition.application.match_type.fullscreen": "Fullscreen",
"profiles.targets": "Targets:",
"profiles.targets.hint": "Targets to start when this profile activates",
"profiles.targets.empty": "No targets available",
"profiles.status.active": "Active",
"profiles.status.inactive": "Inactive",
"profiles.status.disabled": "Disabled",
"profiles.last_activated": "Last activated",
"profiles.logic.and": " AND ",
"profiles.logic.or": " OR ",
"profiles.logic.all": "ALL",
"profiles.logic.any": "ANY",
"profiles.updated": "Profile updated",
"profiles.created": "Profile created",
"profiles.deleted": "Profile deleted",
"profiles.error.name_required": "Name is required",
"time.hours_minutes": "{h}h {m}m",
"time.minutes_seconds": "{m}m {s}s",
"time.seconds": "{s}s",
"dashboard.type.led": "LED",
"dashboard.type.kc": "Key Colors",
"aria.close": "Close",
"aria.save": "Save",
"aria.cancel": "Cancel",
"aria.previous": "Previous",
"aria.next": "Next",
"aria.hint": "Show hint",
"color_strip.add": "🎞️ Add Color Strip Source",
"color_strip.edit": "🎞️ Edit Color Strip Source",
"color_strip.name": "Name:",
"color_strip.name.placeholder": "Wall Strip",
"color_strip.picture_source": "Picture Source:",
"color_strip.picture_source.hint": "Which screen capture source to use as input for LED color calculation",
"color_strip.fps": "Target FPS:",
"color_strip.fps.hint": "Target frames per second for LED color updates (10-90)",
"color_strip.interpolation": "Color Mode:",
"color_strip.interpolation.hint": "How to calculate LED color from sampled border pixels",
"color_strip.interpolation.average": "Average",
"color_strip.interpolation.median": "Median",
"color_strip.interpolation.dominant": "Dominant",
"color_strip.smoothing": "Smoothing:",
"color_strip.smoothing.hint": "Temporal blending between frames (0=none, 1=full). Reduces flicker.",
"color_strip.frame_interpolation": "Frame Interpolation:",
"color_strip.frame_interpolation.hint": "Blends between consecutive captured frames to produce output at the full target FPS even when capture rate is lower. Reduces visible stepping on slow ambient transitions.",
"color_strip.color_corrections": "Color Corrections",
"color_strip.brightness": "Brightness:",
"color_strip.brightness.hint": "Output brightness multiplier (0=off, 1=unchanged, 2=double). Applied after color extraction.",
"color_strip.saturation": "Saturation:",
"color_strip.saturation.hint": "Color saturation (0=grayscale, 1=unchanged, 2=double saturation)",
"color_strip.gamma": "Gamma:",
"color_strip.gamma.hint": "Gamma correction (1=none, <1=brighter midtones, >1=darker midtones)",
"color_strip.test_device": "Test on Device:",
"color_strip.test_device.hint": "Select a device to send test pixels to when clicking edge toggles",
"color_strip.leds": "LED count",
"color_strip.led_count": "LED Count:",
"color_strip.led_count.hint": "Total number of LEDs on the physical strip. For screen sources: 0 = auto from calibration (extra LEDs not mapped to edges will be black). For static color: set to match your device LED count.",
"color_strip.created": "Color strip source created",
"color_strip.updated": "Color strip source updated",
"color_strip.deleted": "Color strip source deleted",
"color_strip.delete.confirm": "Are you sure you want to delete this color strip source?",
"color_strip.delete.referenced": "Cannot delete: this source is in use by a target",
"color_strip.error.name_required": "Please enter a name",
"color_strip.type": "Type:",
"color_strip.type.hint": "Picture Source derives LED colors from a screen capture. Static Color fills all LEDs with a single constant color. Gradient distributes a color gradient across all LEDs. Color Cycle smoothly cycles through a user-defined list of colors.",
"color_strip.type.picture": "Picture Source",
"color_strip.type.static": "Static Color",
"color_strip.type.gradient": "Gradient",
"color_strip.type.color_cycle": "Color Cycle",
"color_strip.static_color": "Color:",
"color_strip.static_color.hint": "The solid color that will be sent to all LEDs on the strip.",
"color_strip.gradient.preview": "Gradient:",
"color_strip.gradient.preview.hint": "Visual preview. Click the marker track below to add a stop. Drag markers to reposition.",
"color_strip.gradient.stops": "Color Stops:",
"color_strip.gradient.stops.hint": "Each stop defines a color at a relative position (0.0 = start, 1.0 = end). The ↔ button adds a right-side color to create a hard edge at that stop.",
"color_strip.gradient.stops_count": "stops",
"color_strip.gradient.add_stop": "+ Add Stop",
"color_strip.gradient.position": "Position (0.01.0)",
"color_strip.gradient.bidir.hint": "Add a second color on the right side of this stop to create a hard edge in the gradient.",
"color_strip.gradient.min_stops": "Gradient must have at least 2 stops",
"color_strip.animation": "Animation",
"color_strip.animation.enabled": "Enable Animation:",
"color_strip.animation.enabled.hint": "Enables procedural animation. The LEDs will update at 30 fps driven by the selected effect.",
"color_strip.animation.type": "Effect:",
"color_strip.animation.type.hint": "The animation effect to apply. Breathing works for both static and gradient sources; Gradient Shift and Wave work for gradient sources only.",
"color_strip.animation.type.breathing": "Breathing",
"color_strip.animation.type.color_cycle": "Color Cycle",
"color_strip.animation.type.gradient_shift": "Gradient Shift",
"color_strip.animation.type.wave": "Wave",
"color_strip.animation.speed": "Speed:",
"color_strip.animation.speed.hint": "Animation speed multiplier. 1.0 ≈ one cycle per second for Breathing; higher values cycle faster.",
"color_strip.color_cycle.colors": "Colors:",
"color_strip.color_cycle.colors.hint": "List of colors to cycle through smoothly. At least 2 required. Default is a full rainbow spectrum.",
"color_strip.color_cycle.add_color": "+ Add Color",
"color_strip.color_cycle.speed": "Speed:",
"color_strip.color_cycle.speed.hint": "Cycle speed multiplier. 1.0 ≈ one full cycle every 20 seconds; higher values cycle faster.",
"color_strip.color_cycle.min_colors": "Color cycle must have at least 2 colors"
}