224 files
This commit is contained in:
@@ -1,34 +1,36 @@
|
||||
{
|
||||
"badge": {
|
||||
"approved": "Approved",
|
||||
"artifact_tip": "{n} anomalies detected (e.g. door opened mid-cycle) – open to see them on the graph",
|
||||
"auto": "(auto-detected)",
|
||||
"awaiting": "Awaiting approval",
|
||||
"awaiting_n": "Awaiting approval · {n} confirmed",
|
||||
"awaiting_tip": "Awaiting community approval",
|
||||
"built_in_tag": "built-in",
|
||||
"declining": "↘ declining",
|
||||
"energy_low": "Lower energy than usual",
|
||||
"energy_spike": "Higher energy than usual",
|
||||
"exists": "exists",
|
||||
"fair_fit": "acceptable quality",
|
||||
"fair_fit_tip": "Moderate match consistency – some cycles assigned to this profile have lower confidence scores. Label more cycles or re-record the profile to improve accuracy.",
|
||||
"feedback_requested": "Feedback requested",
|
||||
"golden_cycle": "Recorded reference cycle",
|
||||
"imported_tip": "Imported from the community store. Used for matching only, not counted in stats.",
|
||||
"improving": "↗ improving",
|
||||
"manual": "(manually selected)",
|
||||
"needs_review": "Needs review",
|
||||
"not_importable": "n/a here",
|
||||
"overrun": "Ran longer than usual",
|
||||
"underrun": "Finished faster than usual",
|
||||
"energy_spike": "Higher energy than usual",
|
||||
"energy_low": "Lower energy than usual",
|
||||
"overrun_ratio": "({x}x expected)",
|
||||
"poor_fit": "poor quality",
|
||||
"poor_fit_tip": "Inconsistent match history – consider rebuilding this profile",
|
||||
"restart_gap_tip": "{n} HA restart gap: power trace has a hole",
|
||||
"reviewed": "Reviewed",
|
||||
"steady": "→ steady",
|
||||
"using_defaults": "Using shipped defaults",
|
||||
"using_tuned": "Using tuned weights",
|
||||
"overrun_ratio": "({x}x expected)",
|
||||
"underrun": "Finished faster than usual",
|
||||
"underrun_ratio": "({pct}% of expected)",
|
||||
"awaiting_tip": "Awaiting community approval",
|
||||
"awaiting_n": "Awaiting approval · {n} confirmed",
|
||||
"approved": "Approved",
|
||||
"awaiting": "Awaiting approval",
|
||||
"imported_tip": "Imported from the community store. Used for matching only, not counted in stats."
|
||||
"using_defaults": "Using shipped defaults",
|
||||
"using_tuned": "Using tuned weights"
|
||||
},
|
||||
"btn": {
|
||||
"add_device": "+ Add device",
|
||||
@@ -36,6 +38,7 @@
|
||||
"add_maintenance": "Add maintenance event",
|
||||
"add_phase": "+ Add phase",
|
||||
"add_timer": "+ Add timer",
|
||||
"analyze_import": "Analyze file",
|
||||
"apply_all": "Apply all",
|
||||
"apply_label": "Apply Label",
|
||||
"apply_set_b": "Apply set B",
|
||||
@@ -44,12 +47,17 @@
|
||||
"auto_detect_split": "Auto-detect",
|
||||
"auto_label_cycles": "Auto-label cycles",
|
||||
"auto_label_cycles_tip": "Automatically assign profile names to unlabelled cycles whose match confidence clears the threshold",
|
||||
"back": "Back",
|
||||
"browse_community_setups": "Browse community setups",
|
||||
"cancel": "Cancel",
|
||||
"clear_debug": "Clear Debug Data",
|
||||
"clear_splits": "Clear",
|
||||
"close": "Close",
|
||||
"compare": "Compare",
|
||||
"confirm": "Confirm",
|
||||
"confirm_appliance": "Confirm this appliance",
|
||||
"confirmed": "Confirmed",
|
||||
"connect_github": "Connect GitHub",
|
||||
"convert_to_automation": "Convert to automation",
|
||||
"correct": "Correct…",
|
||||
"create": "Create",
|
||||
@@ -59,19 +67,29 @@
|
||||
"delete_group": "Delete Group",
|
||||
"delete_group_tip": "Delete this group only - the member profiles are kept",
|
||||
"delete_profile": "Delete Profile",
|
||||
"delete_selected": "Delete selected ({n})",
|
||||
"discard": "Discard",
|
||||
"discard_tip": "Discard the recorded trace without saving",
|
||||
"disconnect": "Disconnect",
|
||||
"dismiss": "Dismiss",
|
||||
"done": "Done",
|
||||
"download_device": "Download this setup",
|
||||
"download_export": "Download export",
|
||||
"edit": "Edit",
|
||||
"export": "Export",
|
||||
"export_all": "Quick export everything",
|
||||
"export_json": "Export to JSON",
|
||||
"export_selected": "Export (choose data)",
|
||||
"force_stop": "Force Stop",
|
||||
"force_stop_tip": "Immediately end the current cycle and mark it as force-stopped",
|
||||
"from_template": "From template ▾",
|
||||
"group_suggest": "Group {n}: {members}",
|
||||
"ignore": "Ignore",
|
||||
"import": "Import",
|
||||
"import_json": "Import from JSON",
|
||||
"import_overwrite": "Import (overwrites data)",
|
||||
"import_raw": "Advanced: replace all from JSON",
|
||||
"import_selected": "Import selected",
|
||||
"inspect": "Inspect",
|
||||
"label": "Label",
|
||||
"load": "Load",
|
||||
@@ -89,6 +107,8 @@
|
||||
"pause_cycle": "Pause",
|
||||
"pause_cycle_tip": "Pause the running cycle – the appliance will resume where it left off",
|
||||
"pg_apply_device": "Apply to device",
|
||||
"pg_apply_to_settings": "Save to settings",
|
||||
"pg_apply_to_settings_tip": "Copy the values you edited here into this device's live settings",
|
||||
"pg_autofill": "Auto-fill",
|
||||
"play": "Play",
|
||||
"process": "Process",
|
||||
@@ -116,10 +136,10 @@
|
||||
"resume_cycle": "Resume cycle",
|
||||
"resume_cycle_tip": "Resume the paused cycle",
|
||||
"revert": "Revert",
|
||||
"revert_to_previous": "Restore this setting to its previous value",
|
||||
"revert_settings": "Revert changes",
|
||||
"revert_settings_tip": "Restore settings from before your last save",
|
||||
"revert_settings_tip_none": "Save first to enable undo",
|
||||
"revert_to_previous": "Restore this setting to its previous value",
|
||||
"review": "Review",
|
||||
"run": "Run",
|
||||
"run_analysis": "🔍 Run suggestion analysis",
|
||||
@@ -129,6 +149,7 @@
|
||||
"run_simulation": "Run simulation",
|
||||
"save": "Save",
|
||||
"save_access_control": "Save Access Control",
|
||||
"save_appliance": "Save appliance",
|
||||
"save_group": "Save Group",
|
||||
"save_panel_settings": "Save Panel Settings",
|
||||
"save_phases": "Save phases",
|
||||
@@ -136,10 +157,16 @@
|
||||
"save_reminders": "Save reminders",
|
||||
"save_review": "Save Review",
|
||||
"save_settings": "Save Settings",
|
||||
"search": "Search",
|
||||
"select": "Select",
|
||||
"select_all": "Select all",
|
||||
"select_last20": "Last 20",
|
||||
"select_none": "Clear",
|
||||
"share": "Share",
|
||||
"share_device": "⬆ Share this device",
|
||||
"share_device_tip": "Share this appliance and its recorded reference cycles to the community store so others with the same machine can adopt them",
|
||||
"share_n": "Share {n} cycle(s)",
|
||||
"share_to_store": "Share to store",
|
||||
"show_only": "Show only",
|
||||
"skip_setup": "Skip setup",
|
||||
"split": "Split",
|
||||
@@ -150,25 +177,7 @@
|
||||
"trim_split": "Trim / Split",
|
||||
"undo": "Undo",
|
||||
"use": "Use",
|
||||
"wipe_all": "Wipe All Data",
|
||||
"delete_selected": "Delete selected ({n})",
|
||||
"group_suggest": "Group {n}: {members}",
|
||||
"pg_apply_to_settings": "Save to settings",
|
||||
"pg_apply_to_settings_tip": "Copy the values you edited here into this device's live settings",
|
||||
"search": "Search",
|
||||
"import": "Import",
|
||||
"disconnect": "Disconnect",
|
||||
"connect_github": "Connect GitHub",
|
||||
"save_appliance": "Save appliance",
|
||||
"share_to_store": "Share to store",
|
||||
"share": "Share",
|
||||
"confirm_appliance": "Confirm this appliance",
|
||||
"confirmed": "Confirmed",
|
||||
"share_device": "⬆ Share this device",
|
||||
"share_device_tip": "Share this appliance and its recorded reference cycles to the community store so others with the same machine can adopt them",
|
||||
"share_n": "Share {n} cycle(s)",
|
||||
"download_device": "Download this setup",
|
||||
"browse_community_setups": "Browse community setups"
|
||||
"wipe_all": "Wipe All Data"
|
||||
},
|
||||
"conflict": {
|
||||
"anti_wrinkle_exit": {
|
||||
@@ -290,11 +299,15 @@
|
||||
"actions": "Actions",
|
||||
"activity": "Activity",
|
||||
"administrators": "Administrators",
|
||||
"adopt_settings": "Also adopt settings",
|
||||
"anonymous": "Anonymous",
|
||||
"approved_only": "Approved only",
|
||||
"aria_compare_chart": "Cycle comparison chart",
|
||||
"aria_cycle_chart": "Cycle power trace",
|
||||
"aria_envelope_chart": "Profile power envelope chart",
|
||||
"aria_phase_chart": "Phase editor chart",
|
||||
"aria_playground_chart": "Cycle power trace with draggable detection thresholds",
|
||||
"aria_playground_chart2": "Interactive cycle power graph: hover to read time/power, scroll to zoom, drag to pan",
|
||||
"aria_power_chart": "Power consumption chart",
|
||||
"aria_spaghetti_chart": "Overlaid cycle power traces",
|
||||
"aria_sweep_chart": "Parameter sweep results chart",
|
||||
@@ -302,11 +315,26 @@
|
||||
"artifact_high_power": "High power",
|
||||
"artifact_interruption": "Interruption",
|
||||
"artifact_low_power": "Low power",
|
||||
"at": "at",
|
||||
"auto_detect": "Auto-detect",
|
||||
"auto_fine_tune_off": "auto fine-tune off",
|
||||
"auto_fine_tune_on": "auto fine-tune on (around {hour}:00)",
|
||||
"avg_cost": "Avg cost",
|
||||
"cat_custom_phases": "Custom phases",
|
||||
"cat_feedback": "Feedback & review labels",
|
||||
"cat_history_logs": "History & change logs",
|
||||
"cat_lifetime_stats": "Lifetime totals",
|
||||
"cat_maintenance_log": "Maintenance log",
|
||||
"cat_matching_config": "Matcher tuning",
|
||||
"cat_ml_models": "ML models",
|
||||
"cat_profile_groups": "Profile groups",
|
||||
"cat_profiles": "Profiles (programs)",
|
||||
"cat_real_cycles": "Cycles (run history)",
|
||||
"cat_reference_cycles": "Reference cycles (imported)",
|
||||
"cat_settings": "Detection & matching settings",
|
||||
"cat_suggestions": "Suggestions",
|
||||
"change": "Change",
|
||||
"click_to_select": "click to select",
|
||||
"clock_time": "Clock time",
|
||||
"cohesion_good": "cohesion {pct}%",
|
||||
"cohesion_low": "⚠ low cohesion {pct}%",
|
||||
@@ -314,6 +342,10 @@
|
||||
"concurrency": "Concurrency",
|
||||
"confidence": "Confidence",
|
||||
"confidence_threshold": "Confidence threshold",
|
||||
"conflict_import_copy": "Import as copy",
|
||||
"conflict_keep_mine": "Keep mine",
|
||||
"conflict_overwrite": "Overwrite",
|
||||
"conflict_resolution": "Name clashes",
|
||||
"correct_duration": "Correct Duration (min, optional)",
|
||||
"correct_profile": "Correct Profile",
|
||||
"correlation": "Correlation",
|
||||
@@ -323,11 +355,14 @@
|
||||
"curves": "Curves",
|
||||
"cycle": "Cycle",
|
||||
"cycle_date_display": "Cycle date display",
|
||||
"cycle_destination": "Where should imported cycles go?",
|
||||
"cycle_health": "Cycle health",
|
||||
"cycle_index": "cycle index →",
|
||||
"cycles": "Cycles",
|
||||
"cycles_count": "Cycles",
|
||||
"cycles_lc": "cycles",
|
||||
"cycles_short": "cycles",
|
||||
"cycles_title": "Cycles ({n})",
|
||||
"dashed": "dashed",
|
||||
"date": "Date",
|
||||
"debug_traces": "Debug Traces",
|
||||
@@ -337,6 +372,8 @@
|
||||
"default_tab": "Default tab when opening the panel",
|
||||
"delta": "Δ",
|
||||
"description": "Description",
|
||||
"dest_real_history": "Real history (counts in stats)",
|
||||
"dest_reference": "Reference (shape only)",
|
||||
"drag_to_resize": "Drag to resize",
|
||||
"dtw_blend_w": "Blend weight",
|
||||
"dtw_blended": "Blended score",
|
||||
@@ -345,64 +382,104 @@
|
||||
"dtw_matched_profile": "(cycle's matched profile)",
|
||||
"duration": "Duration",
|
||||
"duration_agreement": "Duration agreement",
|
||||
"duration_avg": "~{v}m avg",
|
||||
"emphasis": "Emphasis",
|
||||
"enable_access_control": "Enable per-user access control",
|
||||
"enable_online": "Enable online features",
|
||||
"end": "End",
|
||||
"energy": "Energy",
|
||||
"energy_agreement": "Energy agreement",
|
||||
"envelope": "Envelope",
|
||||
"eta_mins": "~{n}m left",
|
||||
"eta_secs": "~{n}s left",
|
||||
"event_timeline": "Event timeline",
|
||||
"event_type": "Event type",
|
||||
"expected": "Expected",
|
||||
"expected_duration": "Expected Duration (min)",
|
||||
"file_kb": "File (kB)",
|
||||
"final_score": "Final score",
|
||||
"flags": "Flags",
|
||||
"from": "From",
|
||||
"from_start": "From start",
|
||||
"gap_s": "Gap (s)",
|
||||
"group_name": "Group name",
|
||||
"ha_restarted": "HA restarted",
|
||||
"head_trim": "Head Trim (s)",
|
||||
"health": "Health",
|
||||
"flags": "Flags",
|
||||
"hide_tabs": "Hide tabs for non-admins",
|
||||
"import_mode": "How to combine",
|
||||
"in_use": "In use",
|
||||
"include_phase_map": "Include phase map",
|
||||
"include_settings": "Include detection & matching settings",
|
||||
"input": "Input:",
|
||||
"json_data": "JSON Data",
|
||||
"label": "Matched program",
|
||||
"last": "Last",
|
||||
"last_checked": "Last checked:",
|
||||
"load_from_file": "Load from file",
|
||||
"loading_paren": "(loading…)",
|
||||
"mae_score": "MAE score",
|
||||
"manual_duration": "Manual Duration (min, optional)",
|
||||
"match": "Match",
|
||||
"members": "Members",
|
||||
"metric": "Metric",
|
||||
"mode_existing_profile": "Add to Existing Profile",
|
||||
"mode_merge": "Merge (keep mine)",
|
||||
"mode_new_profile": "Create New Profile",
|
||||
"mode_replace": "Replace selected",
|
||||
"models_fine_tuned": "({count} model{plural} fine-tuned)",
|
||||
"n_classic_suggestions": "{n} classic",
|
||||
"n_imported_note": ", {n} imported",
|
||||
"n_ml_suggestions": "{n} ML",
|
||||
"n_selected": "{n} selected",
|
||||
"n_shown": ", {n} shown",
|
||||
"n_tuning_suggestions": "{n} tuning suggestion",
|
||||
"na": "n/a",
|
||||
"name_placeholder": "(name)",
|
||||
"new_profile_name": "New Profile Name",
|
||||
"no_duration": "no duration",
|
||||
"notes": "Notes",
|
||||
"of": "of",
|
||||
"outcome": "Outcome",
|
||||
"panel_default_tab": "Default tab",
|
||||
"panel_language": "Panel language",
|
||||
"pct_match_confidence": "{pct}% match confidence",
|
||||
"per_cycle_short": "cycle",
|
||||
"pg_alert_indefinite": "Would run indefinitely",
|
||||
"pg_alert_stress_cap": "Hit safety cap",
|
||||
"pg_alert_stress_ok": "Idle termination: cycle stopped",
|
||||
"pg_alert_stress_warn": "Idle draw above stop threshold",
|
||||
"pg_alert_timeout_end": "Ended by timeout, not prediction",
|
||||
"pg_autofill_tip": "Auto-fill range from current value ({lo}–{hi})",
|
||||
"pg_best_marker": "Best: {v}",
|
||||
"pg_best_value": "Best value found",
|
||||
"pg_current_value": "Current value:",
|
||||
"pg_detecting": "Detecting",
|
||||
"pg_drag_hint": "Drag line on graph",
|
||||
"pg_dtw": "DTW",
|
||||
"pg_envelope_fit": "Envelope fit",
|
||||
"pg_envelope_fit_tip": "How closely the cycle sits inside this profile's saved power envelope - a different lens than match confidence.",
|
||||
"pg_ev_ending": "Ending",
|
||||
"pg_ev_running": "Running",
|
||||
"pg_group_advanced": "Edge cases",
|
||||
"pg_group_detection": "Detection triggers",
|
||||
"pg_group_matching": "Program matching",
|
||||
"pg_group_timing": "Timing rules",
|
||||
"pg_idle": "Idle",
|
||||
"pg_stress_group": "Idle termination test",
|
||||
"pg_stress_idle_auto": "Auto",
|
||||
"pg_stress_idle_w": "Idle level (W)",
|
||||
"pg_stress_idle_w_desc": "Override the auto-detected standby floor (leave blank for auto).",
|
||||
"pg_stress_toggle": "Test idle termination",
|
||||
"pg_stress_toggle_desc": "Simulates the appliance staying at its standby draw after recording ends -- shows if and when WashData stops the cycle.",
|
||||
"pg_last_run": "Last run: {date}",
|
||||
"pg_load_run": "Reload this run",
|
||||
"pg_match_confidence": "Match confidence",
|
||||
"pg_match_score": "Match score",
|
||||
"pg_mode_optimize": "Optimize",
|
||||
"pg_pct_of": "{p}% of {total}",
|
||||
"pg_poor_match": "Poor match",
|
||||
"pg_recent_runs": "Recent runs",
|
||||
"pg_strong_match": "Strong match",
|
||||
"pg_tile_ambiguous": "Ambiguous",
|
||||
"pg_tile_ambiguous_tip": "Cycles with a near-tie between two programs",
|
||||
@@ -412,6 +489,7 @@
|
||||
"pg_tile_matched_tip": "Cycles correctly attributed to a known program",
|
||||
"pg_time_left": "Time left",
|
||||
"pg_weak_match": "Weak match",
|
||||
"pg_zoom_hint": "double-click to reset zoom",
|
||||
"phase_name": "Name",
|
||||
"phase_timeline": "Phase timeline",
|
||||
"power": "Power",
|
||||
@@ -421,6 +499,9 @@
|
||||
"program": "Program",
|
||||
"program_tip": "Override which profile is matched to the current cycle. Auto-detect lets the integration pick the best match automatically. Pin a specific program to force-match it when auto-detect is wrong or you know what is running.",
|
||||
"progress": "Progress",
|
||||
"quality": "Quality",
|
||||
"rate_n": "{n} stars",
|
||||
"rate_quality": "Rate quality",
|
||||
"raw_socket": "Raw socket",
|
||||
"read_only": "Read-only",
|
||||
"ref_cycle": "Reference Cycle (optional)",
|
||||
@@ -431,6 +512,7 @@
|
||||
"rename_profile": "Rename Profile",
|
||||
"replay_duration": "Replay",
|
||||
"resulting_profile": "Resulting profile",
|
||||
"reviewed_on": "reviewed {date}",
|
||||
"save_mode": "Save Mode",
|
||||
"score": "Score",
|
||||
"score_breakdown": "Score breakdown",
|
||||
@@ -445,6 +527,7 @@
|
||||
"settings_basic": "Basic",
|
||||
"settings_detail_level": "Settings detail level",
|
||||
"settings_overrides": "Settings overrides",
|
||||
"show_contributor": "Show contributor names",
|
||||
"show_debug": "Show live match debug card on the Status page (confidence, ambiguity, top candidates)",
|
||||
"show_expected": "Show expected curve overlay (matched profile, orange)",
|
||||
"show_raw": "Show raw socket toggle in live power graph",
|
||||
@@ -452,75 +535,35 @@
|
||||
"stage2": "Stage 2 – core similarity",
|
||||
"stage3": "Stage 3 – DTW",
|
||||
"stage4": "Stage 4 – agreement",
|
||||
"start": "Start",
|
||||
"status": "Status",
|
||||
"store_brand": "Appliance brand",
|
||||
"store_model": "Appliance model",
|
||||
"tags": "Tags",
|
||||
"tail_trim": "Tail Trim (s)",
|
||||
"task_merge": "Merging cycles",
|
||||
"task_ml_training": "Learning",
|
||||
"task_pg_detail": "Simulate cycle",
|
||||
"task_pg_history": "Test on history",
|
||||
"task_pg_sweep": "Optimize",
|
||||
"task_rebuild": "Rebuilding envelopes",
|
||||
"task_reprocess": "Reprocessing",
|
||||
"task_split": "Splitting cycle",
|
||||
"task_trim": "Trimming cycle",
|
||||
"time_remaining": "~{v} remaining",
|
||||
"timer_auto_pause": "Auto-pause",
|
||||
"timer_min": "min",
|
||||
"timer_msg_placeholder": "Message (optional, {device}/{program}/{minutes})",
|
||||
"to": "To",
|
||||
"to_end": "To end",
|
||||
"ungrouped": "Ungrouped",
|
||||
"unit_s": "(s)",
|
||||
"unknown": "Unknown",
|
||||
"unlabelled": "Unlabelled",
|
||||
"unlabelled_paren": "(unlabelled)",
|
||||
"warp_path": "Warp path",
|
||||
"input": "Input:",
|
||||
"start": "Start",
|
||||
"end": "End",
|
||||
"unit_s": "(s)",
|
||||
"reviewed_on": "reviewed {date}",
|
||||
"unknown": "Unknown",
|
||||
"quality": "Quality",
|
||||
"tags": "Tags",
|
||||
"at": "at",
|
||||
"pct_match_confidence": "{pct}% match confidence",
|
||||
"ha_restarted": "HA restarted",
|
||||
"from_start": "From start",
|
||||
"to_end": "To end",
|
||||
"click_to_select": "click to select",
|
||||
"envelope": "Envelope",
|
||||
"zoom_hint": "scroll to zoom · dblclick to reset",
|
||||
"loading_paren": "(loading…)",
|
||||
"time_remaining": "~{v} remaining",
|
||||
"no_duration": "no duration",
|
||||
"duration_avg": "~{v}m avg",
|
||||
"name_placeholder": "(name)",
|
||||
"n_shown": ", {n} shown",
|
||||
"n_imported_note": ", {n} imported",
|
||||
"cycles_title": "Cycles ({n})",
|
||||
"pg_detecting": "Detecting",
|
||||
"pg_best_marker": "Best: {v}",
|
||||
"pg_mode_optimize": "Optimize",
|
||||
"pg_group_matching": "Program matching",
|
||||
"pg_zoom_hint": "double-click to reset zoom",
|
||||
"aria_playground_chart2": "Interactive cycle power graph: hover to read time/power, scroll to zoom, drag to pan",
|
||||
"pg_alert_timeout_end": "Ended by timeout, not prediction",
|
||||
"pg_alert_indefinite": "Would run indefinitely",
|
||||
"task_pg_history": "Test on history",
|
||||
"task_pg_sweep": "Optimize",
|
||||
"task_pg_detail": "Simulate cycle",
|
||||
"task_split": "Splitting cycle",
|
||||
"task_trim": "Trimming cycle",
|
||||
"task_merge": "Merging cycles",
|
||||
"task_rebuild": "Rebuilding envelopes",
|
||||
"task_reprocess": "Reprocessing",
|
||||
"task_ml_training": "Learning",
|
||||
"eta_secs": "~{n}s left",
|
||||
"eta_mins": "~{n}m left",
|
||||
"pg_recent_runs": "Recent runs",
|
||||
"pg_load_run": "Reload this run",
|
||||
"pg_match_confidence": "Match confidence",
|
||||
"pg_envelope_fit": "Envelope fit",
|
||||
"pg_envelope_fit_tip": "How closely the cycle sits inside this profile's saved power envelope - a different lens than match confidence.",
|
||||
"enable_online": "Enable online features",
|
||||
"show_contributor": "Show contributor names",
|
||||
"store_brand": "Appliance brand",
|
||||
"store_model": "Appliance model",
|
||||
"anonymous": "Anonymous",
|
||||
"rate_quality": "Rate quality",
|
||||
"rate_n": "{n} stars",
|
||||
"approved_only": "Approved only",
|
||||
"include_phase_map": "Include phase map",
|
||||
"include_settings": "Include detection & matching settings",
|
||||
"adopt_settings": "Also adopt settings"
|
||||
"pg_anti_wrinkle": "Anti-wrinkle"
|
||||
},
|
||||
"log": {
|
||||
"all_levels": "All levels",
|
||||
@@ -567,14 +610,29 @@
|
||||
},
|
||||
"modal": {
|
||||
"auto_label": "Auto-Label Cycles",
|
||||
"clear_debug_msg": "Delete all stored debug traces?",
|
||||
"clear_debug_title": "Clear Debug Data",
|
||||
"correct_feedback": "Correct Feedback",
|
||||
"create_profile": "Create Profile",
|
||||
"cycle": "Cycle",
|
||||
"delete_automation_msg": "Delete the automation \"{name}\" from Home Assistant? This cannot be undone.",
|
||||
"delete_automation_title": "Delete Automation",
|
||||
"delete_maintenance_msg": "Delete this maintenance record? This cannot be undone.",
|
||||
"delete_maintenance_title": "Delete Maintenance Event",
|
||||
"delete_phase_msg": "Delete phase \"{name}\"?",
|
||||
"delete_phase_title": "Delete Phase",
|
||||
"discard_recording_msg": "Discard the saved recording? This cannot be undone.",
|
||||
"discard_recording_title": "Discard Recording",
|
||||
"dismiss_all_msg": "Dismiss all {count} pending feedback requests?",
|
||||
"dismiss_all_ok": "Dismiss All",
|
||||
"dismiss_all_title": "Dismiss All Feedbacks",
|
||||
"edit_group": "Edit profile group",
|
||||
"edit_phase": "Edit Phase",
|
||||
"export_select": "Export - choose data",
|
||||
"force_stop_msg": "Force-stop the active cycle now? The cycle will be saved as interrupted.",
|
||||
"force_stop_title": "Force Stop Cycle",
|
||||
"import_config": "Import Configuration",
|
||||
"import_wizard": "Import - choose data",
|
||||
"label_cycle": "Label Cycle",
|
||||
"merge_cycles": "Merge {n} Cycles",
|
||||
"new_group": "New profile group",
|
||||
@@ -584,29 +642,25 @@
|
||||
"process_history_title": "Process History",
|
||||
"process_recording": "Process Recording",
|
||||
"relabel_cycles": "Relabel {count} cycles",
|
||||
"delete_automation_title": "Delete Automation",
|
||||
"delete_automation_msg": "Delete the automation \"{name}\" from Home Assistant? This cannot be undone.",
|
||||
"remove_legacy_title": "Remove Legacy Actions",
|
||||
"remove_legacy_msg": "Remove the legacy custom actions? They will stop firing on cycle events. This cannot be undone from the panel.",
|
||||
"discard_recording_title": "Discard Recording",
|
||||
"discard_recording_msg": "Discard the saved recording? This cannot be undone.",
|
||||
"dismiss_all_title": "Dismiss All Feedbacks",
|
||||
"dismiss_all_msg": "Dismiss all {count} pending feedback requests?",
|
||||
"dismiss_all_ok": "Dismiss All",
|
||||
"delete_phase_title": "Delete Phase",
|
||||
"delete_phase_msg": "Delete phase \"{name}\"?",
|
||||
"clear_debug_title": "Clear Debug Data",
|
||||
"clear_debug_msg": "Delete all stored debug traces?",
|
||||
"wipe_all_title": "Wipe All Data",
|
||||
"wipe_all_msg": "⚠️ This permanently deletes ALL cycles and profiles. This cannot be undone.",
|
||||
"wipe_all_ok": "Wipe Everything",
|
||||
"force_stop_title": "Force Stop Cycle",
|
||||
"force_stop_msg": "Force-stop the active cycle now? The cycle will be saved as interrupted.",
|
||||
"remove_legacy_title": "Remove Legacy Actions",
|
||||
"store_import": "Import reference cycle",
|
||||
"store_share": "Share to community store",
|
||||
"store_share_device": "Share this device"
|
||||
"store_share_device": "Share this device",
|
||||
"wipe_all_msg": "⚠️ This permanently deletes ALL cycles and profiles. This cannot be undone.",
|
||||
"wipe_all_ok": "Wipe Everything",
|
||||
"wipe_all_title": "Wipe All Data"
|
||||
},
|
||||
"msg": {
|
||||
"adopt_settings_hint": "Overwrite this device's detection & matching thresholds with the shared ones. Your notifications, entities and energy price are never changed.",
|
||||
"advisory_duration_trend_up": "'{name}' cycles are running progressively longer (about +{pct}% per cycle). If the appliance's behaviour changed, re-record or rebuild this profile.",
|
||||
"advisory_energy_trend_up": "'{name}' is drawing progressively more energy (about +{pct}% per cycle) - worth checking the appliance if that is unexpected.",
|
||||
"advisory_phase_inconsistent": "'{name}' looks like it mixes different programs or temperatures - its cycles heat for very different lengths of time. Splitting it into separate profiles (e.g. per temperature) will improve matching and time estimates.",
|
||||
"advisory_phase_inconsistent_title": "⚠ Possibly mixed programs",
|
||||
"advisory_poor_health": "'{name}' has a low fit score - its recent cycles vary a lot or match weakly. Review its cycles or re-record the profile so matching and time estimates stay accurate.",
|
||||
"advisory_shape_drift": "'{name}' has drifted significantly from its original power shape. The appliance may have changed behaviour over time (e.g. limescale, wear). Consider re-recording this profile with recent cycles.",
|
||||
"advisory_shape_drift_corr": "'{name}' has drifted significantly from its original power shape (correlation {corr}). The appliance may have changed behaviour over time (e.g. limescale, wear). Consider re-recording this profile with recent cycles.",
|
||||
"analyzing": "Analyzing…",
|
||||
"appliance_monitor": "Appliance monitor",
|
||||
"artifact_dip_detail": "Dropped below the usual power band for ~{n}s.",
|
||||
"artifact_footer": "Highlighted on the graph above. These are transient artifacts (e.g. the door opened mid-cycle), not necessarily problems.",
|
||||
@@ -619,21 +673,37 @@
|
||||
"clear_debug_hint": "Remove stored debug data to free space.",
|
||||
"collecting_data": "Collecting data – {need} more cycle{plural} before fine-tuning can start ({current}/{min}).",
|
||||
"compare_overlay_profiles": "Overlay profiles (faint)",
|
||||
"compare_overlay_tip": "Overlay learned profile envelopes to see which program each cycle resembles.",
|
||||
"compare_profiles_tip": "Overlay other profile envelopes on the chart above to see which one best fits this cycle.",
|
||||
"compare_selected_cycles": "Selected cycles (solid) – show / hide",
|
||||
"connect_to_confirm": "Connect in the settings gear to confirm or rate.",
|
||||
"consider_new_profile": "Consider creating a new profile.",
|
||||
"coverage_gap": "recent cycles have no matching profile ({pct}% of last 30).",
|
||||
"coverage_gap_similar_cycles": "{count} similar unlabelled cycles found – create a profile to start matching them.",
|
||||
"cycles_deleted": "{count} cycle(s) deleted",
|
||||
"dest_real_history_hint": "Imported cycles count as this device's own history and feed energy/usage stats. Use for moving one appliance to a new install.",
|
||||
"dest_reference_hint": "Imported cycles only improve program matching and never affect usage/energy statistics.",
|
||||
"device_type_mismatch_warn": "This export is from a different appliance type ({src} vs {local}). Programs and cycles can still be imported as reference data, but device-specific settings and real-history import are disabled.",
|
||||
"diagnostics_load_failed": "Could not load diagnostics: {error}",
|
||||
"duration_trend_down_tip": "Duration down ({pct}%/cycle)",
|
||||
"duration_trend_up_tip": "Duration up ({pct}%/cycle)",
|
||||
"energy_trend_down_tip": "Energy down ({pct}%/cycle)",
|
||||
"energy_trend_up_tip": "Energy up ({pct}%/cycle)",
|
||||
"enough_data": "Enough data to learn from ({current}/{min} cycles).",
|
||||
"export_description": "Export all profiles and cycles to JSON, or restore from a previous export.",
|
||||
"export_description": "Choose exactly which profiles, cycles, settings and more to export to JSON, or analyze a file and import only the parts you want.",
|
||||
"export_select_intro": "Tick exactly what to include. Selecting profiles without their cycles still exports a matchable program (its learned shape travels along).",
|
||||
"feedback_cycles_pending": "{n} cycle{s} to review",
|
||||
"feedback_prompt": "Confirm it was right, correct the program, or ignore.",
|
||||
"feedback_relabel_hint": "Re-labelling this cycle resolves it too.",
|
||||
"filter_by_profile": "Filter by profile…",
|
||||
"group_modal_help": "Group programs with the same shape that differ in temperature/spin (durations may vary). Matching scores the group as one candidate, then picks the best-fitting member. Pick at least 2; the overlay shows how alike they are.",
|
||||
"group_not_cohesive": "These profiles aren't similar enough to group reliably, so matching treats them individually until you remove the outlier or split the group.",
|
||||
"group_preview_hint": "Tick 2+ members to preview and compare their power curves.",
|
||||
"head_trim_hint": "Remove this many seconds from the start",
|
||||
"import_analyze_hint": "Load an exported file (or paste its JSON). WashData analyzes it and shows exactly what can be imported before anything changes.",
|
||||
"import_intro": "Load an exported file or paste a JSON payload below.",
|
||||
"imported_readonly": "Imported from the community store. Shown for reference and matching. It is not counted in your stats and cannot be edited.",
|
||||
"include_settings_hint": "Share this device's recognition and matching thresholds (not your notifications, entities or energy price). Adopters choose whether to apply them.",
|
||||
"legacy_actions_title": "{count} legacy custom action still running",
|
||||
"live_chart_loading": "Live power chart appears as readings arrive.",
|
||||
"loading": "Loading…",
|
||||
@@ -646,26 +716,29 @@
|
||||
"maintenance_load_error": "Could not load maintenance data: {error}",
|
||||
"maintenance_requires_access": "Maintenance and export/import require full access.",
|
||||
"manual_duration_hint": "The profile's average/expected cycle length, used for time-remaining estimates. Edit to set it; leaving it unchanged keeps the current value.",
|
||||
"manual_duration_ref_hint": "Only used when no reference cycle is selected – a reference cycle sets the duration from its own length.",
|
||||
"matching_tuning_intro": "When learning, WashData also adjusts how much program matching weighs shape versus duration and energy.",
|
||||
"merge_hint": "Imported items are added; nothing local is lost. Name clashes are resolved below.",
|
||||
"merge_intro": "The selected cycles are combined into one (chronological order; gaps filled with 0 W). Pick the resulting profile.",
|
||||
"merge_no_imports": "Imported recordings cannot be merged into a real cycle. Deselect them to merge.",
|
||||
"ml_intro": "WashData ships with smart models that work out of the box.",
|
||||
"ml_learned_intro": "Models fine-tuned to this machine.",
|
||||
"ml_loading": "loading ML…",
|
||||
"ml_settings_intro": "Two independent switches: one applies the models while a cycle runs, the other lets WashData fine-tune them to your machine over time.",
|
||||
"model_not_found": "Not in the catalog yet.",
|
||||
"name_first_program": "You have enough cycles – name your first program to start matching.",
|
||||
"near_duplicate_cluster": "near-duplicate profile cluster detected. Grouping lets matching reliably pick between look-alikes (e.g. same program at different temperature/spin).",
|
||||
"no_cycles_match": "No cycles match the current filter.",
|
||||
"no_cycles_profile": "No cycles for this profile.",
|
||||
"no_cycles_selected": "Select at least one cycle first.",
|
||||
"no_cycles_yet": "No cycles recorded yet.",
|
||||
"imported_readonly": "Imported from the community store. Shown for reference and matching. It is not counted in your stats and cannot be edited.",
|
||||
"merge_no_imports": "Imported recordings cannot be merged into a real cycle. Deselect them to merge.",
|
||||
"no_device_selected": "No device selected.",
|
||||
"no_devices": "No WashData devices configured yet.",
|
||||
"no_envelope": "No envelope yet - rebuild after labelling cycles.",
|
||||
"no_envelope_overlay": "No envelope available to overlay.",
|
||||
"no_fine_tuned": "Nothing fine-tuned yet – WashData is using its built-in models.",
|
||||
"no_logs": "No log records buffered yet.",
|
||||
"no_logs_match": "No log records match these filters.",
|
||||
"no_maintenance": "No maintenance recorded yet.",
|
||||
"no_match_yet": "No match attempt yet - this populates during a running cycle.",
|
||||
"no_other_users": "No other Home Assistant users found.",
|
||||
@@ -680,19 +753,40 @@
|
||||
"no_suggestions": "No active suggestions.",
|
||||
"notify_services_hint": "Use {entity} service IDs (comma-separated for multiple). Template variables: {vars}.",
|
||||
"old_actions_warning": "Configured with the old actions editor (now removed). They still fire on cycle events but can no longer be edited here. Convert them into a normal automation, or remove them.",
|
||||
"onboard_download": "New device? Adopt a ready-made setup (programs, reference cycles and phases) from another WashData user with the same appliance.",
|
||||
"onboarding_progress": "{n} / 3 cycles observed",
|
||||
"onboarding_watching": "Run your appliance normally – WashData is watching. After 3 cycles, program matching will begin.",
|
||||
"online_intro": "Share and download reference cycles with other WashData users. All online features are opt-in and off by default.",
|
||||
"online_intro_global": "Browse and share reference recordings with other WashData users, and confirm appliance entries. One connection applies to your whole WashData integration; appliance brand and model are set per device under Basic. All online features are opt-in and off by default.",
|
||||
"online_unavailable": "Online features are not available on this server.",
|
||||
"pending_feedback": "Pending detection feedback",
|
||||
"performance_trend": "Performance trend ({n} cycles)",
|
||||
"performance_trending": "Performance trending",
|
||||
"pg_analysis_empty": "Load a cycle to see match analysis.",
|
||||
"pg_analysis_empty2": "Press Run to see match analysis.",
|
||||
"pg_analysis_hint": "Select a cycle and click ↺ to load analysis.",
|
||||
"pg_analysis_hint2": "Pick a cycle and press Run to load match analysis.",
|
||||
"pg_apply_confirm": "Apply best value: {label} = {value}?",
|
||||
"pg_apply_settings_confirm": "Save these {n} setting(s) to this device? {list}",
|
||||
"pg_stress_terminated_detail": "Settled to ~{idle}W idle -- cycle ended {h}h {m}m later via {reason}.",
|
||||
"pg_stress_above_threshold_detail": "Idle draw ~{idle}W is at or above the effective stop threshold ({stop}W) -- the cycle never registered as quiet. Raise stop_threshold_w to fix.",
|
||||
"pg_stress_hit_cap_detail": "Cycle ran {h}h {m}m without stopping -- force-stopped by the safety cap. Idle draw {idle}W vs stop threshold {stop}W.",
|
||||
"pg_canvas_empty": "Select a cycle above, then press Load to see its power trace.",
|
||||
"pg_canvas_empty2": "Pick a cycle above and press Run to simulate it. Then hover to read values, scroll to zoom, and drag to pan.",
|
||||
"pg_chart_caption": "Detection/match rate across values of {param}",
|
||||
"pg_history_intro2": "Replay your recent cycles through the real detector and matcher with the settings above. Click any row to load that cycle in the graph; edit a setting to see a before/after comparison.",
|
||||
"pg_match_rate": "{pct}% match rate on {total} cycles",
|
||||
"pg_restart_note": "Restart Home Assistant to enable simulation tools.",
|
||||
"pg_row_load_hint": "Load this cycle in the graph above",
|
||||
"pg_stress_synthetic": "idle simulation starts here",
|
||||
"pg_running_history": "Replaying your cycles…",
|
||||
"pg_running_sweep": "Testing values across your cycles…",
|
||||
"pg_select_cycle_hint": "Select a cycle and click ↺ to load",
|
||||
"pg_sim_progress": "{done} / {total} cycles",
|
||||
"pg_simulating": "Simulating cycle…",
|
||||
"pg_starting": "Starting…",
|
||||
"pg_sweep_intro": "What if {param} were different? Test {steps} values across your last {cycles} cycles to find the setting where the most cycles are correctly matched.",
|
||||
"pg_sweep_progress": "Step {done} / {total}",
|
||||
"pg_sweep_step": "Step {done} / {total}",
|
||||
"pg_undetected": "{n} cycle{s} undetected",
|
||||
"pg_verdict_bad": "Needs attention: many cycles are going undetected.",
|
||||
@@ -700,6 +794,7 @@
|
||||
"pg_verdict_ok": "Acceptable: some cycles missed. Try lowering the start threshold.",
|
||||
"phase_catalog_intro": "Named segments of a cycle (Pre-wash, Heating, Spin…). Assign them to a profile from its control panel.",
|
||||
"phase_ranges_intro": "Phase ranges (minutes from cycle start) overlaid on the average curve. Edit values to preview live.",
|
||||
"pick_brand_first": "Pick an appliance brand first.",
|
||||
"playground_intro": "A safe sandbox to replay past cycles with different settings, compare two setups side by side, and inspect how a cycle aligns to a profile. Nothing here changes your live data until you explicitly apply it.",
|
||||
"playground_needs_restart": "Restart Home Assistant to enable the Playground tools.",
|
||||
"preferences_admin": "Preferences, panel & access control",
|
||||
@@ -713,6 +808,7 @@
|
||||
"recent_logs": "Recent ha_washdata records",
|
||||
"recording_in_progress": "Recording in progress",
|
||||
"reminders_intro": "Show a reminder in the panel this many cycles after the last service. Leave blank or 0 to turn a reminder off.",
|
||||
"replace_warn": "Each ticked category is wiped and replaced from the file. Unticked categories are left untouched.",
|
||||
"restart_gap_footer": "Highlighted on the graph. Power data is missing for these intervals; matching used only real readings.",
|
||||
"restart_gap_header": "{n} HA restart gap during this cycle",
|
||||
"restart_gap_item": "{dur} gap",
|
||||
@@ -732,19 +828,32 @@
|
||||
"settings_basic_note": "Showing essential settings. Switch to Advanced for the full list.",
|
||||
"shape_drift_advisory": "⚠ Shape drifting",
|
||||
"shape_drift_detail": "The power pattern for this profile has shifted over time – possible appliance wear or maintenance needed (e.g. descaling, filter cleaning).",
|
||||
"share_consent": "I confirm these cycles ran to normal completion without interruption",
|
||||
"share_device_none": "No shareable cycles yet. Mark a recorded or hand-picked cycle as a reference cycle (⭐) in the Cycles tab first.",
|
||||
"share_guideline_naming": "Name each profile exactly as shown on the appliance dial or display (e.g. 'Cotton 40', 'Eco 60').",
|
||||
"share_guideline_quality": "Only share cycles that completed normally -- no mid-cycle interruptions, door-open events, or power blips.",
|
||||
"share_guideline_review": "Your upload starts as pending and appears publicly once enough community members confirm it.",
|
||||
"share_guidelines_title": "Before you share",
|
||||
"share_profile_no_cycles": "No reference cycles – mark a cycle as ⭐ in the Cycles tab to include this profile",
|
||||
"show_all_settings": "Show all settings",
|
||||
"showing_suggestions": "Showing {count} setting with suggestions.",
|
||||
"split_intro": "Click the graph to add or remove a split point, or auto-detect by idle gaps. Each resulting segment can get its own profile.",
|
||||
"storage_diagnostics": "Storage stats, maintenance, export/import",
|
||||
"store_download_device_intro": "Adopt every shared program and its reference cycles onto your device. Your own recorded cycles and stats are not affected.",
|
||||
"store_enable_hint": "Enable online features in Settings to browse and import community reference cycles.",
|
||||
"store_picker_offline": "Enable online features in the settings gear to pick from the community catalog.",
|
||||
"store_share_device_intro": "Upload {brand} {model} with the reference cycles you select. Others with the same appliance can adopt your programs. Entries are reviewed before appearing publicly.",
|
||||
"store_share_intro": "Upload this reference cycle so others with the same appliance can use it. It is reviewed before appearing publicly.",
|
||||
"sug_staged": "Set {key} = {val}. Save to apply.",
|
||||
"tail_trim_hint": "Remove this many seconds from the end",
|
||||
"toast_auto_detect_enabled": "Auto-detect enabled",
|
||||
"toast_auto_label_complete": "Auto-label complete",
|
||||
"toast_auto_label_failed": "Auto-label failed: {error}",
|
||||
"toast_automation_failed": "Could not create automation: {error}",
|
||||
"toast_automation_migrated": "Actions migrated to an automation; opening editor",
|
||||
"toast_convert_failed": "Convert failed: {error}",
|
||||
"toast_convert_rolled_back": "Migration failed and was rolled back (no automation left behind): {error}",
|
||||
"toast_convert_orphan": "The automation was created, but clearing the old actions failed. Do not retry: remove the legacy actions manually to avoid a duplicate automation.",
|
||||
"toast_convert_rolled_back": "Migration failed and was rolled back (no automation left behind): {error}",
|
||||
"toast_create_failed": "Create failed: {error}",
|
||||
"toast_delete_failed": "Delete failed: {error}",
|
||||
"toast_error": "Error: {error}",
|
||||
@@ -769,58 +878,7 @@
|
||||
"updated": "Updated",
|
||||
"warmup_badge": "Still learning ({done}/{needed} cycles)",
|
||||
"warmup_detail": "This profile needs {needed} labelled cycles before auto-matching begins. Every confirmed cycle helps it learn.",
|
||||
"wipe_history_warning": "Permanently delete all cycles and profiles. Cannot be undone.",
|
||||
"compare_overlay_tip": "Overlay learned profile envelopes to see which program each cycle resembles.",
|
||||
"duration_trend_up_tip": "Duration up ({pct}%/cycle)",
|
||||
"duration_trend_down_tip": "Duration down ({pct}%/cycle)",
|
||||
"energy_trend_up_tip": "Energy up ({pct}%/cycle)",
|
||||
"energy_trend_down_tip": "Energy down ({pct}%/cycle)",
|
||||
"performance_trending": "Performance trending",
|
||||
"pg_select_cycle_hint": "Select a cycle and click ↺ to load",
|
||||
"pg_sweep_progress": "Step {done} / {total}",
|
||||
"pg_analysis_hint": "Select a cycle and click ↺ to load analysis.",
|
||||
"diagnostics_load_failed": "Could not load diagnostics: {error}",
|
||||
"manual_duration_ref_hint": "Only used when no reference cycle is selected – a reference cycle sets the duration from its own length.",
|
||||
"head_trim_hint": "Remove this many seconds from the start",
|
||||
"tail_trim_hint": "Remove this many seconds from the end",
|
||||
"advisory_poor_health": "'{name}' has a low fit score - its recent cycles vary a lot or match weakly. Review its cycles or re-record the profile so matching and time estimates stay accurate.",
|
||||
"advisory_shape_drift": "'{name}' has drifted significantly from its original power shape. The appliance may have changed behaviour over time (e.g. limescale, wear). Consider re-recording this profile with recent cycles.",
|
||||
"advisory_shape_drift_corr": "'{name}' has drifted significantly from its original power shape (correlation {corr}). The appliance may have changed behaviour over time (e.g. limescale, wear). Consider re-recording this profile with recent cycles.",
|
||||
"advisory_duration_trend_up": "'{name}' cycles are running progressively longer (about +{pct}% per cycle). If the appliance's behaviour changed, re-record or rebuild this profile.",
|
||||
"advisory_energy_trend_up": "'{name}' is drawing progressively more energy (about +{pct}% per cycle) - worth checking the appliance if that is unexpected.",
|
||||
"advisory_phase_inconsistent": "'{name}' looks like it mixes different programs or temperatures - its cycles heat for very different lengths of time. Splitting it into separate profiles (e.g. per temperature) will improve matching and time estimates.",
|
||||
"advisory_phase_inconsistent_title": "⚠ Possibly mixed programs",
|
||||
"pg_running_history": "Replaying your cycles…",
|
||||
"pg_running_sweep": "Testing values across your cycles…",
|
||||
"pg_row_load_hint": "Load this cycle in the graph above",
|
||||
"pg_history_intro2": "Replay your recent cycles through the real detector and matcher with the settings above. Click any row to load that cycle in the graph; edit a setting to see a before/after comparison.",
|
||||
"pg_simulating": "Simulating cycle…",
|
||||
"pg_canvas_empty2": "Pick a cycle above and press Run to simulate it. Then hover to read values, scroll to zoom, and drag to pan.",
|
||||
"pg_apply_settings_confirm": "Save these {n} setting(s) to this device? {list}",
|
||||
"no_logs_match": "No log records match these filters.",
|
||||
"pg_analysis_hint2": "Pick a cycle and press Run to load match analysis.",
|
||||
"pg_analysis_empty2": "Press Run to see match analysis.",
|
||||
"store_enable_hint": "Enable online features in Settings to browse and import community reference cycles.",
|
||||
"online_intro": "Share and download reference cycles with other WashData users. All online features are opt-in and off by default.",
|
||||
"store_share_intro": "Upload this reference cycle so others with the same appliance can use it. It is reviewed before appearing publicly.",
|
||||
"online_intro_global": "Browse and share reference recordings with other WashData users, and confirm appliance entries. One connection applies to your whole WashData integration; appliance brand and model are set per device under Basic. All online features are opt-in and off by default.",
|
||||
"online_unavailable": "Online features are not available on this server.",
|
||||
"store_picker_offline": "Enable online features in the settings gear to pick from the community catalog.",
|
||||
"pick_brand_first": "Pick an appliance brand first.",
|
||||
"model_not_found": "Not in the catalog yet.",
|
||||
"connect_to_confirm": "Connect in the settings gear to confirm or rate.",
|
||||
"store_share_device_intro": "Upload {brand} {model} with the reference cycles you select. Others with the same appliance can adopt your programs. Entries are reviewed before appearing publicly.",
|
||||
"share_device_none": "No shareable cycles yet. Mark a recorded or hand-picked cycle as a reference cycle (⭐) in the Cycles tab first.",
|
||||
"store_download_device_intro": "Adopt every shared program and its reference cycles onto your device. Your own recorded cycles and stats are not affected.",
|
||||
"onboard_download": "New device? Adopt a ready-made setup (programs, reference cycles and phases) from another WashData user with the same appliance.",
|
||||
"include_settings_hint": "Share this device's recognition and matching thresholds (not your notifications, entities or energy price). Adopters choose whether to apply them.",
|
||||
"adopt_settings_hint": "Overwrite this device's detection & matching thresholds with the shared ones. Your notifications, entities and energy price are never changed.",
|
||||
"share_guidelines_title": "Before you share",
|
||||
"share_guideline_naming": "Name each profile exactly as shown on the appliance dial or display (e.g. 'Cotton 40', 'Eco 60').",
|
||||
"share_guideline_quality": "Only share cycles that completed normally -- no mid-cycle interruptions, door-open events, or power blips.",
|
||||
"share_guideline_review": "Your upload starts as pending and appears publicly once enough community members confirm it.",
|
||||
"share_consent": "I confirm these cycles ran to normal completion without interruption",
|
||||
"share_profile_no_cycles": "No reference cycles – mark a cycle as ⭐ in the Cycles tab to include this profile"
|
||||
"wipe_history_warning": "Permanently delete all cycles and profiles. Cannot be undone."
|
||||
},
|
||||
"pg_desc": {
|
||||
"completion_min_seconds": "Shortest run that counts as a real cycle",
|
||||
@@ -843,7 +901,12 @@
|
||||
"dtw_ddtw_scale": "Stage 3: DDTW half-saturation distance; smaller = more shape-sensitive (default 30)",
|
||||
"dtw_refine_top_n": "Stage 3: candidates DTW re-scores; raise to 7-9 if correct profile ranks 4th-5th (default 5)",
|
||||
"duration_scale": "Stage 4: log-ratio where duration agreement halves; smaller = stricter penalty (default 0.175)",
|
||||
"energy_scale": "Stage 4: log-ratio where energy agreement halves; smaller = stricter penalty (default 0.25)"
|
||||
"energy_scale": "Stage 4: log-ratio where energy agreement halves; smaller = stricter penalty (default 0.25)",
|
||||
"anti_wrinkle_idle_timeout": "Quiet time allowed between two tumble pulses before anti-wrinkle ends",
|
||||
"anti_wrinkle_max_power": "A pulse above this ends anti-wrinkle and opens a new cycle",
|
||||
"anti_wrinkle_enabled": "Absorb the tumble pulses after the main phase instead of reading them as new cycles",
|
||||
"anti_wrinkle_max_duration": "A pulse longer than this ends anti-wrinkle and opens a new cycle",
|
||||
"anti_wrinkle_exit_power": "Power must fall below this between pulses for anti-wrinkle to stay active"
|
||||
},
|
||||
"phase_desc": {
|
||||
"anti_crease": "Occasional short tumbles after completion to reduce wrinkles.",
|
||||
@@ -1225,10 +1288,6 @@
|
||||
"doc": "Seconds a pump may run continuously before it is flagged as possibly stuck (fires the stuck-pump event).",
|
||||
"label": "Pump Stuck Duration"
|
||||
},
|
||||
"running_dead_zone": {
|
||||
"doc": "After a cycle starts, power dips within this window are ignored. Washing machines fill with cold water (dropping near 0 W before heating) - without this protection that fill phase looks like a cycle end. This does NOT skip data: the full power trace is recorded from T=0. The suggestion engine measures your machine's actual startup pattern and sizes this automatically.",
|
||||
"label": "Running Dead Zone"
|
||||
},
|
||||
"sampling_interval": {
|
||||
"doc": "Expected time between sensor readings - used to size the smoothing window and start debounce correctly. Every sensor update is captured regardless of this value; it only calibrates the downstream calculations. The suggestion engine measures your sensor's actual cadence from past cycles and sets this automatically.",
|
||||
"label": "Sampling Interval"
|
||||
@@ -1323,6 +1382,10 @@
|
||||
"energy_scale": {
|
||||
"label": "Energy Sharpness",
|
||||
"doc": "Sharpness of the Stage 4 energy agreement penalty. Smaller = stricter: an energy mismatch hurts more. Default 0.25 is intentionally more forgiving than Duration Sharpness because energy varies with load. Pair with Energy Weight."
|
||||
},
|
||||
"anti_wrinkle_idle_timeout": {
|
||||
"label": "Max Pulse Gap",
|
||||
"doc": "How long the machine may stay quiet between two tumble pulses before anti-wrinkle mode ends. Set it above the longest gap your dryer leaves between pulses, otherwise every later pulse is read as a false start."
|
||||
}
|
||||
},
|
||||
"setting_group": {
|
||||
@@ -1477,10 +1540,6 @@
|
||||
"higher": "Commits only high-confidence matches; more cycles stay unlabelled",
|
||||
"lower": "Matches more cycles; some may be slightly wrong"
|
||||
},
|
||||
"running_dead_zone": {
|
||||
"higher": "Ignores brief power spikes during idle – less noise-sensitive",
|
||||
"lower": "Responds to shorter power bursts – catches fast transient activity"
|
||||
},
|
||||
"start_threshold_w": {
|
||||
"higher": "Avoids false starts from brief power spikes",
|
||||
"lower": "Catches low-power programs; may trigger on noise"
|
||||
@@ -1575,9 +1634,11 @@
|
||||
"access_saved": "Access control saved",
|
||||
"all_wiped": "All data wiped",
|
||||
"analysis_complete_none": "Analysis complete: no new suggestions",
|
||||
"appliance_added": "Appliance added - awaiting approval",
|
||||
"apply_failed": "Apply failed: {error}",
|
||||
"auto_label_complete": "Auto-label complete",
|
||||
"automation_deleted": "Automation deleted",
|
||||
"brand_added": "Brand added - awaiting approval",
|
||||
"correction_submitted": "Correction submitted",
|
||||
"cycle_deleted": "Cycle deleted",
|
||||
"cycle_force_stopped": "Cycle force-stopped",
|
||||
@@ -1588,15 +1649,18 @@
|
||||
"cycles_merged": "Cycles merged",
|
||||
"delete_failed": "Delete failed: {error}",
|
||||
"delete_partial_failed": "Some items could not be deleted and were restored",
|
||||
"device_approved": "Approved by the community",
|
||||
"envelope_rebuilt": "Envelope rebuilt",
|
||||
"envelopes_rebuilt": "Envelopes rebuilt",
|
||||
"export_downloaded": "Export downloaded",
|
||||
"export_selective_done": "Export downloaded",
|
||||
"feedback_all_dismissed": "All feedbacks dismissed",
|
||||
"feedback_confirmed": "Feedback confirmed",
|
||||
"feedback_dismissed": "Feedback dismissed",
|
||||
"group_deleted": "Group deleted",
|
||||
"group_name_required": "Group name is required",
|
||||
"group_saved": "Group saved",
|
||||
"import_selective_done": "Imported {profiles} profile(s) and {cycles} cycle(s)",
|
||||
"import_successful": "Import successful; integration reloading",
|
||||
"json_required": "JSON data is required",
|
||||
"legacy_removed": "Legacy actions removed",
|
||||
@@ -1613,12 +1677,20 @@
|
||||
"name_required": "Name required",
|
||||
"no_split_found": "No idle gaps found to split on",
|
||||
"panel_settings_saved": "Panel settings saved",
|
||||
"pause_no_cycle": "No active cycle to pause",
|
||||
"pg_run_gone": "That run is no longer available.",
|
||||
"phase_name_required": "Phase name is required",
|
||||
"phase_updated": "Phase updated",
|
||||
"phases_saved": "Phases saved",
|
||||
"preferences_saved": "Preferences saved",
|
||||
"processed": "Processed {bits}",
|
||||
"processed_cycles": "{n} cycles",
|
||||
"processed_models": "{n} model(s) promoted",
|
||||
"processed_suggestions": "{n} suggestion(s)",
|
||||
"profile_added": "Profile added - awaiting approval",
|
||||
"profile_name_required": "Profile name is required",
|
||||
"profile_renamed": "Profile renamed",
|
||||
"rating_saved": "Quality rating saved",
|
||||
"recording_discarded": "Recording discarded",
|
||||
"recording_saved": "Recording saved to profile",
|
||||
"recording_started": "Recording started",
|
||||
@@ -1627,51 +1699,40 @@
|
||||
"relabel_failed": "Relabel failed: {error}",
|
||||
"reminders_save_failed": "Could not save reminders: {error}",
|
||||
"reminders_saved": "Service reminders saved",
|
||||
"resume_no_cycle": "No paused cycle to resume",
|
||||
"review_saved": "Review saved",
|
||||
"settings_conflicts": "Fix the highlighted setting conflicts before saving.",
|
||||
"saved_except_conflicts": "Saved. Fix the highlighted conflicts to save the rest.",
|
||||
"settings_conflicts": "Fix the highlighted setting conflicts before saving.",
|
||||
"settings_reverted": "Settings reverted; integration reloading",
|
||||
"settings_saved": "Settings saved; integration reloading",
|
||||
"suggestions_applied": "Suggestions applied; integration reloading",
|
||||
"suggestions_dismissed": "Suggestions dismissed",
|
||||
"pause_no_cycle": "No active cycle to pause",
|
||||
"resume_no_cycle": "No paused cycle to resume",
|
||||
"pg_run_gone": "That run is no longer available.",
|
||||
"task_cancelled": "Cancelled.",
|
||||
"processed": "Processed {bits}",
|
||||
"processed_cycles": "{n} cycles",
|
||||
"processed_suggestions": "{n} suggestion(s)",
|
||||
"processed_models": "{n} model(s) promoted",
|
||||
"store_search_failed": "Search failed: {error}",
|
||||
"share_device_none_sel": "Select at least one cycle to share",
|
||||
"store_connect_failed": "Connect failed: {error}",
|
||||
"store_connected": "Connected to the community store",
|
||||
"store_device_downloaded": "{p} program(s), {c} recording(s) added",
|
||||
"store_device_downloaded_phases": "{p} program(s), {c} recording(s), {ph} phase map(s) added",
|
||||
"store_device_downloaded_settings": "{p} program(s), {c} recording(s), {ph} phase map(s), {s} setting(s) added",
|
||||
"store_device_shared": "Shared {n} cycle(s) to the community store - pending review.",
|
||||
"store_device_shared_all_dup": "All {n} cycle(s) were already in the community store.",
|
||||
"store_device_shared_partial": "Shared {n} cycle(s); {failed} could not be uploaded.",
|
||||
"store_device_shared_some_dup": "Shared {created} cycle(s); {dup} were already in the store.",
|
||||
"store_disconnected": "Disconnected from the community store",
|
||||
"store_download_failed": "Download failed: {error}",
|
||||
"store_download_nothing": "Nothing new to download - this setup is already on your device.",
|
||||
"store_error": "Error: {error}",
|
||||
"store_unavailable": "The community store is not available.",
|
||||
"store_pick_profile": "Pick a profile to merge into",
|
||||
"store_name_required": "Enter a profile name",
|
||||
"store_import_failed": "Import failed: {error}",
|
||||
"store_imported": "Imported into {profile}",
|
||||
"store_program_required": "Enter a program name",
|
||||
"store_name_required": "Enter a profile name",
|
||||
"store_no_appliance": "Set your appliance brand and model in Settings first.",
|
||||
"store_pick_profile": "Pick a profile to merge into",
|
||||
"store_program_required": "Enter a program name",
|
||||
"store_search_failed": "Search failed: {error}",
|
||||
"store_share_failed": "Share failed: {error}",
|
||||
"store_shared": "Shared to the community store - pending review.",
|
||||
"appliance_added": "Appliance added - awaiting approval",
|
||||
"thanks_confirming": "Thanks for confirming",
|
||||
"device_approved": "Approved by the community",
|
||||
"rating_saved": "Quality rating saved",
|
||||
"brand_added": "Brand added - awaiting approval",
|
||||
"profile_added": "Profile added - awaiting approval",
|
||||
"store_device_shared": "Shared {n} cycle(s) to the community store - pending review.",
|
||||
"share_device_none_sel": "Select at least one cycle to share",
|
||||
"store_device_downloaded": "{p} program(s), {c} recording(s) added",
|
||||
"store_download_failed": "Download failed: {error}",
|
||||
"store_device_shared_partial": "Shared {n} cycle(s); {failed} could not be uploaded.",
|
||||
"store_download_nothing": "Nothing new to download - this setup is already on your device.",
|
||||
"store_device_shared_all_dup": "All {n} cycle(s) were already in the community store.",
|
||||
"store_device_shared_some_dup": "Shared {created} cycle(s); {dup} were already in the store.",
|
||||
"store_device_downloaded_phases": "{p} program(s), {c} recording(s), {ph} phase map(s) added",
|
||||
"store_device_downloaded_settings": "{p} program(s), {c} recording(s), {ph} phase map(s), {s} setting(s) added"
|
||||
"store_unavailable": "The community store is not available.",
|
||||
"suggestions_applied": "Suggestions applied; integration reloading",
|
||||
"suggestions_dismissed": "Suggestions dismissed",
|
||||
"task_cancelled": "Cancelled.",
|
||||
"thanks_confirming": "Thanks for confirming"
|
||||
},
|
||||
"trend": {
|
||||
"down": "Trending down",
|
||||
|
||||
Reference in New Issue
Block a user