forked from viewit/KX-Bridge-Release
Issue #103: the printer has no MQTT-level command to power off or enter standby, so users on a separate-room setup have to physically walk over or use a smart plug (e.g. Tasmota) manually. Added per-printer power_on_url/power_off_url/power_status_url config (Settings > Power Switch) and a power button with a live on/off indicator on each printer's card in the Printers grid - plain HTTP GET calls, no Moonraker device_power dependency. Issue #104: the stable-release update check only ever requested the single newest Gitea release (limit=1) regardless of type. Since nightly/dev prereleases publish far more often than stable ones, that newest release is almost always a prerelease, so the "not a prerelease" filter found nothing and reported "no stable releases found" even though a newer stable release existed further back in the list. Fixed by requesting enough releases (limit=20) to look past a run of prereleases. Also fixes a related pre-existing bug surfaced while testing #103's config: configparser's default string interpolation rejected any config.ini value containing a literal '%' (ValueError: invalid interpolation syntax) - this broke saving Tasmota-style power URLs (cmnd=Power%20on) and would have broken any other value with a '%' character. Fixed globally with interpolation=None on every ConfigParser() instantiation in config_loader.py and kobrax_moonraker_bridge.py.
365 lines
15 KiB
JSON
365 lines
15 KiB
JSON
{
|
||
"ace_dry_auto_refill": "Auto Refill",
|
||
"ace_dry_chart": "History (Temp/Humidity)",
|
||
"ace_dry_current_temp": "Temperature",
|
||
"ace_dry_dialog_cancel": "Cancel",
|
||
"ace_dry_dialog_confirm": "Confirm",
|
||
"ace_dry_dialog_custom_name": "Custom Name",
|
||
"ace_dry_dialog_reset_default": "Reset to Default",
|
||
"ace_dry_dialog_save_restart": "Save & Restart",
|
||
"ace_dry_dialog_temp": "Temperature (30-80°C)",
|
||
"ace_dry_dialog_time": "Rem. Time (h:m:s)",
|
||
"ace_dry_dialog_title": "Dryer Temp/Time Settings",
|
||
"ace_dry_dryer": "Dryer",
|
||
"ace_dry_duration": "Duration (min)",
|
||
"ace_dry_enable": "Enable Drying",
|
||
"ace_dry_humidity": "Humidity",
|
||
"ace_dry_preset_abs_asa": "ABS / ASA",
|
||
"ace_dry_preset_custom": "Custom",
|
||
"ace_dry_preset_pa_pc": "PA / PC",
|
||
"ace_dry_preset_petg": "PETG",
|
||
"ace_dry_preset_pla": "PLA",
|
||
"ace_dry_preset_pla_plus": "PLA+",
|
||
"ace_dry_preset_tpu": "TPU",
|
||
"ace_dry_start": "▶ Start",
|
||
"ace_dry_status_off": "Status: Off",
|
||
"ace_dry_status_on": "Status: Active",
|
||
"ace_dry_status_remaining": "Remaining",
|
||
"ace_dry_stop": "■ Stop",
|
||
"ace_dry_temp": "Temperature (°C)",
|
||
"ace_dry_temp_line": "Drying Temperature",
|
||
"ace_dry_time_line": "Drying Time",
|
||
"ace_dry_ui_pending": "(UI only, backend next)",
|
||
"add_printer": "Add printer",
|
||
"ams_empty": "Empty",
|
||
"ams_no_data": "No AMS data received",
|
||
"apd_cancel": "Cancel",
|
||
"apd_confirm": "Add",
|
||
"apd_err_ip": "Please enter an IP address",
|
||
"apd_fetching": "Fetching data from printer…",
|
||
"apd_lbl_ip": "Printer IP",
|
||
"apd_lbl_name": "Name (optional)",
|
||
"apd_placeholder_name": "e.g. Kobra X Living Room",
|
||
"apd_success": "Printer added, bridge restarting…",
|
||
"apd_title": "Add printer",
|
||
"browser_tab_printer": "On Printer",
|
||
"browser_tab_uploaded": "Uploaded",
|
||
"btn_cam_start": "▶ Camera",
|
||
"btn_cam_start2": "▶ Start",
|
||
"btn_cam_stop": "◼ Camera",
|
||
"btn_cam_stop2": "◼ Stop",
|
||
"btn_cancel": "✕ Stop",
|
||
"btn_cancel_generic": "Cancel",
|
||
"btn_confirm_generic": "Confirm",
|
||
"btn_connect": "⚡ Connect",
|
||
"btn_delete": "Delete",
|
||
"btn_disable_motors": "Motors Off",
|
||
"btn_disconnect": "✕ Disconnect",
|
||
"btn_home_all": "Home All",
|
||
"btn_home_xy": "Home XY",
|
||
"btn_home_z": "Home Z",
|
||
"btn_pause": "⏸ Pause",
|
||
"btn_resume": "▶ Resume",
|
||
"cam_placeholder": "📷 Camera not started",
|
||
"cam_stream_unavailable": "Stream unavailable",
|
||
"card_ace_dry": "ACE Drying",
|
||
"card_ams": "Filament",
|
||
"card_cam": "Camera",
|
||
"card_light_fan": "Fan",
|
||
"card_progress": "Progress",
|
||
"card_speed": "Print Speed",
|
||
"card_temps": "Temperatures",
|
||
"confirm_cancel": "Really cancel the print?",
|
||
"dash_done": "Done",
|
||
"dash_edit": "Customize dashboard",
|
||
"dash_hidden_cards": "Hidden cards",
|
||
"dash_hide": "Hide",
|
||
"dash_preset_delete_confirm": "Delete preset \"{name}\"?",
|
||
"dash_preset_name_prompt": "Preset name:",
|
||
"dash_preset_standard": "Standard",
|
||
"dash_preset_wide89": "Wide desktop",
|
||
"dash_reset": "Reset",
|
||
"dash_save_preset": "Save as preset",
|
||
"dash_show": "Show",
|
||
"dash_toggle_width": "Toggle width",
|
||
"fd_cancel": "Cancel",
|
||
"fd_no_matching_material": "No matching material",
|
||
"fd_no_slots_msg": "No loaded AMS slots.{br}Start print anyway?",
|
||
"fd_objects_hint": "Skip objects (optional):",
|
||
"fd_objects_toggle": "Skip objects",
|
||
"fd_options_title": "Print Options",
|
||
"fd_print": "▶ Print",
|
||
"fd_slot": "Slot",
|
||
"fd_slots_hint": "Assign GCode channel to AMS slot:",
|
||
"fd_title": "Slot Assignment",
|
||
"fd_used": "USED",
|
||
"file_cancel_btn": "✕ Cancel",
|
||
"file_ready_btn": "▶ Start Print",
|
||
"file_slots_btn": "🎨 Select Slots",
|
||
"header_status_complete": "Complete",
|
||
"header_status_error": "Error",
|
||
"header_status_printing": "Printing",
|
||
"header_status_standby": "Ready",
|
||
"hint_ip_no_port": "IP address only, no port (e.g. 192.168.1.102)",
|
||
"kobra_auto_leveling": "Auto Leveling",
|
||
"kobra_busy": "Busy",
|
||
"kobra_canceled": "Cancelled",
|
||
"kobra_checking": "Checking",
|
||
"kobra_failed": "Error",
|
||
"kobra_finished": "Finished",
|
||
"kobra_free": "Ready",
|
||
"kobra_init": "Initializing",
|
||
"kobra_offline": "Offline",
|
||
"kobra_paused": "Paused",
|
||
"kobra_pausing": "Pausing...",
|
||
"kobra_preheating": "Preheating",
|
||
"kobra_printing": "Printing",
|
||
"kobra_resumed": "Resumed",
|
||
"kobra_resuming": "Resuming...",
|
||
"kobra_stoped": "Stopped",
|
||
"kobra_stopping": "Stopping...",
|
||
"kobra_updated": "Updating",
|
||
"label_bed": "Bed",
|
||
"label_fan": "🌀 Fan",
|
||
"label_light": "💡 Light",
|
||
"label_nozzle": "Nozzle",
|
||
"label_off": "Off",
|
||
"label_on_off": "On / Off",
|
||
"label_set": "Set",
|
||
"label_slot": "Slot",
|
||
"label_speed": "Speed",
|
||
"label_step": "Step size:",
|
||
"label_target_c": "Target:",
|
||
"lbl_conn_error": "Connection error:",
|
||
"lbl_elapsed": "Elapsed:",
|
||
"lbl_feed": "Load",
|
||
"lbl_layers": "Layer",
|
||
"lbl_light": "💡 Light",
|
||
"lbl_pause_reason": "Print paused:",
|
||
"lbl_remaining": "Remaining:",
|
||
"lbl_slicer_time": "Slicer estimate:",
|
||
"lbl_spoolman_sync_rate": "Sync rate (s, 0=end of print)",
|
||
"lbl_spoolman_url": "Server URL",
|
||
"lbl_unload": "Unload",
|
||
"lbl_zpos": "Z (mm)",
|
||
"log_auto": "⬇ Auto",
|
||
"log_axis": "Axis",
|
||
"log_bed": "Bed →",
|
||
"log_cam_start": "Camera started:",
|
||
"log_cam_stop": "Camera stopped",
|
||
"log_clear": "✕ Clear",
|
||
"log_delete_failed": "Delete failed",
|
||
"log_dir_all": "All",
|
||
"log_dir_label": "Dir:",
|
||
"log_dir_rx": "RX",
|
||
"log_dir_tx": "TX",
|
||
"log_download": "⬇ Download",
|
||
"log_error": "Error:",
|
||
"log_fan": "Fan →",
|
||
"log_filter_placeholder": "Filter…",
|
||
"log_home": "Home",
|
||
"log_home_all": "Home All",
|
||
"log_light_off": "Light off",
|
||
"log_light_on": "Light on",
|
||
"log_lvl_err": "⛔ Errors",
|
||
"log_lvl_label": "Level:",
|
||
"log_lvl_warn": "⚠ Warn",
|
||
"log_nozzle": "Nozzle →",
|
||
"log_poll_error": "Poll error:",
|
||
"log_print_action": "Print:",
|
||
"log_print_start": "Print start:",
|
||
"log_topic_ams": "AMS",
|
||
"log_topic_info": "Info",
|
||
"log_topic_label": "Topic:",
|
||
"log_topic_print": "Print",
|
||
"log_topic_status": "Status",
|
||
"modal_sec_obico": "Obico",
|
||
"modal_sec_spoolman": "Spoolman",
|
||
"nav_ams": "AMS",
|
||
"nav_browser": "Browser",
|
||
"nav_console": "Console",
|
||
"nav_dashboard": "Dashboard",
|
||
"nav_extras": "Light / Fan",
|
||
"nav_motion": "Motion",
|
||
"nav_print": "Print",
|
||
"nav_printers": "Printers",
|
||
"nav_settings": "Settings",
|
||
"nav_temps": "Temperatures",
|
||
"orca_profile_done": "Imported",
|
||
"orca_profile_dropmsg": "Drop here or click",
|
||
"orca_profile_help_html": "Upload a <b>ZIP</b> of your OrcaSlicer filament folder or single <b>.json</b> files.<br>In OrcaSlicer: <i>Help → Show Configuration Folder → user/<id>/filament/</i>",
|
||
"orca_profile_hint": "Import your own OrcaSlicer filament profiles (open the user dir via Help → Show Configuration Folder)",
|
||
"orca_profile_import_btn": "Import profiles",
|
||
"orca_profile_import_link": "★ Import own profiles…",
|
||
"orca_profile_import_title": "Import your OrcaSlicer profiles",
|
||
"orca_profile_list_label": "Currently imported",
|
||
"orca_profile_section": "OrcaSlicer Profiles",
|
||
"orca_profile_skipped": "skipped",
|
||
"orca_profile_uploading": "Uploading…",
|
||
"orca_profile_user_empty": "– none –",
|
||
"orca_profile_user_label": "Own profiles",
|
||
"panel_ams_title": "Filament",
|
||
"panel_browser_title": "File Browser",
|
||
"panel_console_title": "Event Log",
|
||
"panel_extras_camera": "Camera",
|
||
"panel_extras_fan": "Fan",
|
||
"panel_extras_light": "Light",
|
||
"panel_motion_xy": "Axes Control",
|
||
"panel_print_btn_cancel": "✕ Cancel",
|
||
"panel_print_btn_pause": "⏸ Pause",
|
||
"panel_print_btn_resume": "▶ Resume",
|
||
"panel_print_temps_live": "Temperatures (Live)",
|
||
"panel_print_title": "Print Control",
|
||
"panel_temps_bed": "Heated Bed",
|
||
"panel_temps_chart": "History (last 60 readings)",
|
||
"panel_temps_nozzle": "Nozzle",
|
||
"print_auto_leveling": "Auto-Leveling",
|
||
"printer_store_delete_confirm": "Delete file from the printer?",
|
||
"printer_store_delete_selected_confirm": "Delete {n} selected files from the printer?",
|
||
"printer_store_empty": "No files on the printer.",
|
||
"printer_store_unreachable": "Printer unreachable or query failed.",
|
||
"printers_active": "● active",
|
||
"printers_current": "Current printer",
|
||
"printers_empty_hint": "No printer set up yet.",
|
||
"printers_loading": "Loading…",
|
||
"printers_none": "No printers configured.",
|
||
"printers_remove": "Remove printer",
|
||
"printers_power": "Toggle printer power",
|
||
"printers_power_on": "Power: On",
|
||
"printers_power_off": "Power: Off",
|
||
"printers_power_off_confirm": "Turn printer power off? Make sure no print is running.",
|
||
"printers_remove_confirm": "Remove printer \"{name}\"? The bridge will restart.",
|
||
"printers_switch": "Switch →",
|
||
"progress_action_clear": "Clear",
|
||
"progress_action_print": "Print",
|
||
"progress_action_slots": "Map slots",
|
||
"settings_auto_leveling": "Auto-Leveling Default",
|
||
"settings_auto_leveling_label": "Auto-Leveling before print",
|
||
"settings_btn_tooltip": "Settings",
|
||
"settings_camera_on_print": "Turn camera on at print start",
|
||
"settings_cat_connection": "Connection",
|
||
"settings_cat_display": "Appearance",
|
||
"settings_cat_filament": "Filament",
|
||
"settings_cat_language": "Language",
|
||
"settings_cat_printer": "Printer",
|
||
"settings_cat_system": "System",
|
||
"settings_cat_theme": "Toggle light / dark",
|
||
"settings_connection": "Connection",
|
||
"settings_default_slot": "Default Slot (single color)",
|
||
"settings_device_id": "Device ID",
|
||
"settings_device_id_hint": "32 hex characters",
|
||
"settings_device_id_placeholder": "32 hex characters",
|
||
"settings_filament_mapping": "Filament profile mapping (per slot)",
|
||
"settings_filament_mapping_hint": "Fixed Orca profile per AMS slot. On slicer sync, the bridge sends this profile instead of \"Generic\".",
|
||
"settings_filament_mapping_label": "Filament profile mapping (per slot)",
|
||
"settings_filament_mapping_save": "Save mapping",
|
||
"settings_filament_mapping_save_label": "Save mapping",
|
||
"settings_file_ready_banner": "Print bar",
|
||
"settings_file_ready_dialog": "Print dialog",
|
||
"settings_file_ready_mode": "After upload: Start print behavior",
|
||
"settings_integrations": "Integrations",
|
||
"settings_language": "Language",
|
||
"settings_mode_id": "Mode ID",
|
||
"settings_mode_id_placeholder": "20030",
|
||
"settings_power": "Power Switch",
|
||
"settings_power_on_url": "Power-On URL",
|
||
"settings_power_off_url": "Power-Off URL",
|
||
"settings_power_status_url": "Status URL",
|
||
"settings_power_hint": "Optional: plain HTTP GET URLs for a smart plug (e.g. Tasmota) controlling the printer's mains power. Leave empty to hide the power button.",
|
||
"settings_mqtt_port": "MQTT Port",
|
||
"settings_mqtt_username_placeholder": "userXXXXXXXX",
|
||
"settings_orca_profiles_import": "Import profiles",
|
||
"settings_orca_profiles_label": "OrcaSlicer Profiles",
|
||
"settings_password": "MQTT Password",
|
||
"settings_poll": "Poll Interval (seconds)",
|
||
"settings_poll_interval_hint": "How often the bridge queries printer status",
|
||
"settings_poll_interval_label": "Poll Interval (seconds)",
|
||
"settings_print": "Print Settings",
|
||
"settings_printer_ip": "Printer IP",
|
||
"settings_printer_name": "Printer Name",
|
||
"settings_printer_name_placeholder": "e.g. Kobra X Left",
|
||
"settings_save": "Save & Restart",
|
||
"settings_slot_auto": "Auto (all loaded slots)",
|
||
"settings_theme_toggle": "Toggle light / dark",
|
||
"settings_title": "Settings",
|
||
"settings_username": "MQTT Username",
|
||
"settings_vendor_filter_placeholder": "Search vendors…",
|
||
"settings_verbose_http_log": "Log every HTTP request (verbose)",
|
||
"settings_version": "Version",
|
||
"settings_vibration_compensation": "Resonance Compensation",
|
||
"settings_visible_vendors": "Visible vendors (profile dropdown)",
|
||
"settings_visible_vendors_hint": "Only these vendors appear in the slot profile dropdown. Nothing selected = show all. \"Generic\" and your own profiles are always visible.",
|
||
"settings_visible_vendors_label": "Visible vendors (profile dropdown)",
|
||
"settings_visible_vendors_save": "Save selection",
|
||
"settings_visible_vendors_save_label": "Save selection",
|
||
"settings_web_upload_warning": "Show warning when printing web uploads",
|
||
"sf_all": "All",
|
||
"sf_err": "✗ Failed",
|
||
"sf_new": "New",
|
||
"sf_ok": "✓ Completed",
|
||
"skip_already": "skipped",
|
||
"skip_btn_label": "Objects",
|
||
"skip_cancel": "Cancel",
|
||
"skip_confirm": "Skip",
|
||
"skip_confirm_btn": "Skip",
|
||
"skip_hint": "Uncheck objects you no longer want to print:",
|
||
"skip_no_objects": "No objects in this print.",
|
||
"skip_select_at_least_one": "Please pick at least one object.",
|
||
"skip_sending": "Sending …",
|
||
"skip_success": "Objects will be skipped.",
|
||
"skip_title": "✂ Skip objects",
|
||
"slot_copy_from": "Copy color from slot…",
|
||
"slot_edit_color": "Color",
|
||
"slot_edit_custom": "e.g. PLA, PETG, ABS…",
|
||
"slot_edit_load": "⬇ Load",
|
||
"slot_edit_material": "Material",
|
||
"slot_edit_ok": "AMS Slot",
|
||
"slot_edit_profile": "OrcaSlicer profile",
|
||
"slot_edit_profile_default": "— Generic (default) —",
|
||
"slot_edit_profile_hint": "Sent on OrcaSlicer sync as the specific brand instead of just \"Generic\"",
|
||
"slot_edit_save": "💾 Save",
|
||
"slot_edit_title": "Edit Slot",
|
||
"slot_edit_unload": "⬆ Unload",
|
||
"speed_normal": "⚡ Normal",
|
||
"speed_silent": "🐢 Silent",
|
||
"speed_sport": "🚀 Sport",
|
||
"ss_date": "↓ Date",
|
||
"ss_dur": "⏱ Print time",
|
||
"ss_name": "A–Z Name",
|
||
"store_delete_confirm": "Delete file?",
|
||
"store_delete_selected": "Delete Selected",
|
||
"store_delete_selected_confirm": "Delete {n} selected files?",
|
||
"store_download": "⬇ Download",
|
||
"store_empty": "No files uploaded yet.",
|
||
"store_estimate": "Estimate",
|
||
"store_exit_select": "Cancel",
|
||
"store_never": "never printed",
|
||
"store_no_results": "No files found.",
|
||
"store_print": "▶ Print",
|
||
"store_print_confirm": "Print file?",
|
||
"store_refresh": "↻ Refresh",
|
||
"store_search_placeholder": "🔍 Search…",
|
||
"store_select_all": "Select All",
|
||
"store_selected_count": "{n} selected",
|
||
"store_upload_busy": "⏳ Uploading…",
|
||
"store_upload_error": "✗ {error}",
|
||
"store_upload_label_browse": "browse",
|
||
"store_upload_label_prefix": "Drag GCode here or ",
|
||
"store_upload_only_gcode": "✗ Only GCode files allowed (.gcode, .3mf, .bgcode)",
|
||
"store_upload_success": "✓ {file}",
|
||
"store_web_verify_abort": "Cancel",
|
||
"store_web_verify_confirm": "Confirm",
|
||
"store_web_verify_msg": "Please verify this file was made for Anycubic Kobra X.",
|
||
"store_web_verify_title": "Verify file",
|
||
"update_apply": "Install Now",
|
||
"update_applying": "Downloading...",
|
||
"update_available": "available",
|
||
"update_check": "Check for Updates",
|
||
"update_checking": "Checking...",
|
||
"update_docker": "Copy Command",
|
||
"update_docker_copied": "Copied! Run: docker compose pull && docker compose up -d",
|
||
"update_error": "Error",
|
||
"update_none": "Already up to date",
|
||
"update_restarting": "Restarting..."
|
||
}
|